Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorafinkbein2008-12-01 16:56:21 +0000
committerafinkbein2008-12-01 16:56:21 +0000
commitc6a04217cfdb78a2cf391b35a796bbc1eacf6a1b (patch)
tree6417c271d5847b459fc9a30c7ca9e2c5698f7599
parent6ebb8d60ebd9b2cf925dac51165600321b7243b2 (diff)
downloadorg.eclipse.osee-c6a04217cfdb78a2cf391b35a796bbc1eacf6a1b.tar.gz
org.eclipse.osee-c6a04217cfdb78a2cf391b35a796bbc1eacf6a1b.tar.xz
org.eclipse.osee-c6a04217cfdb78a2cf391b35a796bbc1eacf6a1b.zip
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.classpath7
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.options9
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.project28
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.settings/org.eclipse.jdt.ui.prefs8
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/META-INF/MANIFEST.MF102
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/build.properties12
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/artifactExplorerContexts.xml9
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/artifactSearchContexts.xml8
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/branchManagerContexts.xml30
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/changeReportContexts.xml9
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/contexts.xml17
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/mergeMangerContexts.xml6
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/relationPageContexts.xml9
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/revisionHistoryContexts.xml8
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/A.gifbin0 -> 864 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/WordMlImport.bmpbin0 -> 822 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/accept.gifbin0 -> 343 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/add.gifbin0 -> 318 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/appserver.gifbin0 -> 118 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact.gifbin0 -> 558 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact.xcfbin0 -> 1446 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_editor.gifbin0 -> 615 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_explorer.gifbin0 -> 312 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_explorer.xcfbin0 -> 1284 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_search.gifbin0 -> 373 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_version.gifbin0 -> 608 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/aspect.gifbin0 -> 472 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/authenticated.gifbin0 -> 950 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/back.gifbin0 -> 327 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/black_check.gifbin0 -> 64 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/blam.gifbin0 -> 115 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/blue_d.gifbin0 -> 594 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch.gifbin0 -> 127 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change.gifbin0 -> 158 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change.xcfbin0 -> 1835 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_dest.gifbin0 -> 571 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_dest.xcfbin0 -> 1338 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_source.gifbin0 -> 562 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_source.xcfbin0 -> 1344 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_merge.gifbin0 -> 93 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/bug.gifbin0 -> 472 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/change_managed_branch.gifbin0 -> 100 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_disabled.gifbin0 -> 90 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_enabled.gifbin0 -> 343 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_enabled_conflicted.gifbin0 -> 100 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_red.gifbin0 -> 863 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_redslash.gifbin0 -> 216 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/clear.gifbin0 -> 595 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/clock.gifbin0 -> 368 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/collapseAll.gifbin0 -> 157 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/conflict.gifbin0 -> 884 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customize.gifbin0 -> 500 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeD.gifbin0 -> 61 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeG.gifbin0 -> 64 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeP.gifbin0 -> 64 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizePersonal.gifbin0 -> 508 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/delete.gifbin0 -> 351 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/delete_edit.gifbin0 -> 351 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/dirty.gifbin0 -> 120 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/down.gifbin0 -> 332 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/duplicate.gifbin0 -> 224 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit.gifbin0 -> 111 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit2.gifbin0 -> 204 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit_artifact.gifbin0 -> 315 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/email.gifbin0 -> 362 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/expandAll.gifbin0 -> 164 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/export.gifbin0 -> 343 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/file.gifbin0 -> 354 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/filter.gifbin0 -> 211 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/flat_layout.gifbin0 -> 97 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/gear.gifbin0 -> 155 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/gears.gifbin0 -> 951 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/greenBug.gifbin0 -> 348 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/greenPlus.gifbin0 -> 318 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/green_light.gifbin0 -> 314 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/green_s.gifbin0 -> 619 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/group.gifbin0 -> 364 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/help.gifbin0 -> 259 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/issue.gifbin0 -> 121 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/laser_16_16.gifbin0 -> 1092 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/laser_8_8.gifbin0 -> 903 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/load.gifbin0 -> 216 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/lockkey.gifbin0 -> 1370 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/magnify.gifbin0 -> 313 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/major.gifbin0 -> 206 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/minor.gifbin0 -> 182 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/nav_backward.gifbin0 -> 541 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/nav_forward.gifbin0 -> 541 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/newTask.gifbin0 -> 581 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/not_equal.gifbin0 -> 343 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/not_equal.xcfbin0 -> 1236 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/old.gifbin0 -> 601 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/old.xcfbin0 -> 1453 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/preview_artifact.gifbin0 -> 147 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/print.gifbin0 -> 607 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/product.gifbin0 -> 474 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/purge.gifbin0 -> 124 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/query_log.gifbin0 -> 568 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/query_log.xcfbin0 -> 1612 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/redExclaim.gifbin0 -> 179 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/redRemove.gifbin0 -> 143 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_light.gifbin0 -> 317 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_slash.gifbin0 -> 70 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_user_sm.gifbin0 -> 319 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/refresh.gifbin0 -> 182 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/reject.gifbin0 -> 204 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/relate.gifbin0 -> 160 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/remove.gifbin0 -> 163 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/removeAll.gifbin0 -> 204 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/repository.gifbin0 -> 545 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/results.gifbin0 -> 464 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/run_exc.gifbin0 -> 379 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/save.gifbin0 -> 639 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/skywalker.gifbin0 -> 209 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/snapshotSave.gifbin0 -> 184 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/sort.gifbin0 -> 344 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/star.gifbin0 -> 304 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/star_9_9.gifbin0 -> 283 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/task.gifbin0 -> 857 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/test_procedure.gifbin0 -> 169 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/transaction.gifbin0 -> 82 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/transaction_detail.gifbin0 -> 71 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/trash_can.gifbin0 -> 521 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/tree_layout.gifbin0 -> 101 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/undo.gifbin0 -> 355 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/up.gifbin0 -> 323 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/user.gifbin0 -> 542 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/user_sm.gifbin0 -> 314 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/users2.gifbin0 -> 597 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/yellow_m.gifbin0 -> 591 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/plugin.xml1113
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_1.gifbin0 -> 47295 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_3.gifbin0 -> 81522 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_4.gifbin0 -> 21432 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_5.gifbin0 -> 30528 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_Manager.html481
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Diagram README.txt2
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Diagram.pdfbin0 -> 19536 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Differences.pdfbin0 -> 10610 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_explorer_tree.html34
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_search_page.gifbin0 -> 74404 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_search_page.html39
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_filtering.html26
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_manager_view.html39
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_view.gifbin0 -> 11716 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/change_report_view.gifbin0 -> 15048 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/change_table.html51
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/compare_two_artifacts.html24
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/contexts.xml11
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/create_branch.html40
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/creating_new_artifact.html27
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/creating_new_links.html28
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/default_branch.html40
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/deleting_artifacts.html29
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/deleting_link.html24
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/favorite_branch.html32
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/go_into.html24
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/mass_artifact_editor.html30
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/osee_branching.html24
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/contexts.xml9
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/delete_log.html24
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/query_log_view.gifbin0 -> 12373 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/query_log_view.html39
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/refresh_log.html24
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/artifact_search.gifbin0 -> 373 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/attribute_tagging.html105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/by_id_option.html42
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/contexts.xml31
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/in_name_option.html42
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/include_deleted_option.html41
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/ngrelc.pngbin0 -> 671 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/ngrelr.pngbin0 -> 619 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/quickSearchView.pngbin0 -> 24471 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/quick_search_view.html79
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/word_order_match_option.html41
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/refresh_change_report.html26
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/reorder_links.html24
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/resource_history_view.GIFbin0 -> 8409 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/result_view.html32
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/result_view.jpgbin0 -> 109605 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/revision_history_view.html27
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/show_change_report.html36
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/skynet_toc.xml43
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.gifbin0 -> 18200 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.html40
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.jpgbin0 -> 131904 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/table_customization.html61
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/toc.xml3
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactRenderer.exsd102
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactRendererTemplate.exsd119
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactReport.exsd105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/AttributeXWidgetProvider.exsd105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/BlamOperation.exsd112
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/DBHealthTask.exsd102
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/IgnorePublishAttribute.exsd102
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/OseeDictionary.exsd105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/SimpleTemplateProviderTemplate.exsd120
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/TemplateProvider.exsd105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WordMlProducer.exsd105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WordOutlineContentHandler.exsd119
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WorkDefinitionProvider.exsd105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/XWidgetProvider.exsd105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AdminContributionItem.java84
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AlphabeticalRelationComparator.java39
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactContentProvider.java148
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactDoubleClick.java76
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactDragDropSupport.java167
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java1655
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactLabelProvider.java127
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactListContentProvider.java72
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactSearchViewPage.java892
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactViewerSorter.java37
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeCellModifier.java143
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeContentProvider.java58
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeLabelProvider.java92
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeMenuSelectionListener.java49
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributesComposite.java336
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DefaultBranchContributionItem.java157
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DefineHttpServerRequest.java101
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DialogPopupLoggerListener.java74
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/GenerateTypeEnumAction.java167
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/HTMLTransferFormatter.java55
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/IHelpContextIds.java19
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AbstractArtifactExtractor.java88
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactExtractor.java31
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportJob.java125
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportPage.java429
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportWizard.java192
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AttributeImportType.java18
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AttributeTypePage.java152
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/BranchImportPage.java256
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ExcelArtifactExtractor.java232
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/IArtifactImportResolver.java24
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/IWordOutlineContentHandler.java56
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaJob.java73
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaPage.java143
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaWizard.java75
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/NativeDocumentExtractor.java59
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/NewArtifactImportResolver.java68
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/OutlineContentHandlerPage.java163
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ReqNumbering.java58
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RootAndAttributeBasedArtifactResolver.java127
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RoughArtifact.java292
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RoughRelation.java77
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WholeWordDocumentExtractor.java54
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordExtractor.java29
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordOutlineContentHandler.java71
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordOutlineExtractor.java276
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/LabelSorter.java103
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ModifyAttributesListener.java20
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeContributionItem.java92
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseePreferencePage.java173
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeServicesStatusContributionItem.java115
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationCellModifier.java80
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationContentProvider.java148
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationLabelProvider.java128
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationsComposite.java797
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SessionContributionItem.java175
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetGuiPlugin.java183
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetHttpServerApplication.java53
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetServiceContributionItem.java110
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/TableViewerReport.java99
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ToStringViewerSorter.java40
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/TreeViewerReport.java107
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/XFormToolkit.java88
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/XWidgetParser.java192
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/OseeSecurityManager.java138
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyDialog.java237
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyLabelProvider.java97
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyTableCellModifier.java91
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyTableViewer.java211
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/ArtifactPromptChange.java228
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/EnumSelectionDialog.java122
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/OpenArtifactAction.java64
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/SkynetGuiArtifactFactory.java52
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/annotation/AnnotationComposite.java68
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/annotation/AttributeAnnotationHandler.java43
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/AbstractArtifactEditor.java79
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditor.java839
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorContributor.java97
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorInput.java106
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/BrowserComposite.java93
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/DetailsBrowserComposite.java48
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/NewAttributesComposite.java146
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditor.java371
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditorInput.java103
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassContentProvider.java114
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassLabelProvider.java94
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassXViewer.java332
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassXViewerFactory.java52
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshot.java81
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotFactory.java209
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotManager.java173
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotPersistOperation.java40
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/RemoteSnapshotManager.java256
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/AtsOpenOption.java22
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/IActionable.java25
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/IAtsLib.java35
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/NoteType.java38
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/OseeAts.java231
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamEditor.java123
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamEditorInput.java118
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamFactory.java46
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamFinishedEvent.java36
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamJob.java91
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamOperations.java78
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamParameter.java36
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamStartedEvent.java37
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamWorkflow.java198
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/DynamicBlamOperation.java88
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/IBlamEvent.java18
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/IBlamEventListener.java19
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/OperationsPage.java57
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/OverviewPage.java240
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/VariableMap.java111
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/WorkflowDataPage.java190
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/WorkflowJob.java44
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/AbstractBlam.java86
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ArtifactSnapshotAllItems.java58
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/BlamOperation.java34
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/CopyTransactionDataToBaseline.java54
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/CreateNewUser.java148
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DatabaseHealth.java147
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteArchivedBranches.java43
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteTransaction.java52
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteUnusedFactories.java37
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DuplicateRelationOpertions.java235
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ExportArtifacts.java135
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ExtractReqPriority.java93
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FindArtifactsWithMinAttributeContraintProblems.java37
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FindInvalidUTF8Chars.java59
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FixTemplateContentArtifacts.java263
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/LoadAllArtifactsOnBranch.java34
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ParseWindowsDirectoryListing.java55
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/PruneWorkspace.java56
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/PurgeArtifactType.java59
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/RelationOrderAnalysisOnBranch.java205
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ReportAttributeTypesUsageBlam.java64
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SetRequirementCategory.java107
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SortRelationsByBranch.java162
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SwitchParentBranch.java40
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UniqueNumberOfCurrentOseeUsers.java56
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateArtifactTypeImage.java88
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateCurrentColumn.java521
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateFromParentBranch.java100
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateWordFormattedContentAttributes.java34
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ValidateArtifactsToDelete.java85
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/XWidgetPopulateExample.java73
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchContentProvider.java371
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchCreationHandler.java105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchLabelProvider.java336
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchListComposite.java462
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchSelectComposite.java131
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchSelectionDialog.java135
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchView.java1329
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/CommitHandler.java178
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/FlatPresentationHandler.java29
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/HierarchicalPresentationHandler.java29
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/ParentBranchAction.java79
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/RootBranchWizard.java37
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/AbstractSelectionChangedHandler.java55
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CollapseTreeHandler.java53
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CompressWordAttributesHandler.java113
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CopyHandler.java99
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/DeleteArtifactHandler.java82
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/EditArtifactHandler.java72
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ExpandTreeHandler.java63
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/Handlers.java86
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenArtifactsInAtsWorldHandler.java68
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenInEditorHandler.java63
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenMassArtifactEditorHandler.java61
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenSkywalkerEditorHandler.java50
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PasteHandler.java91
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactHandler.java86
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactNoRecurseHandler.java29
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactWithRecurseHandler.java31
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PurgeArtifactHandler.java106
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevealInArtifactExplorer.java70
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevertArtifactHandler.java135
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevertAttributeHandler.java136
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ShowArtifactInResourceHandler.java82
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ShowPreviewHandler.java59
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ViewWordChangeReportHandler.java126
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ViewerReportHandler.java53
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesBetweenCurrentAndParentHandler.java96
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesMadeToHandler.java102
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesToParentHandler.java115
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/ArtifactTxCurrent.java80
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/AttributeTxCurrent.java79
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpAddressingData.java96
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpAttrFromDeletedArt.java44
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpBackingData.java99
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CommitTransactions.java54
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CommitedNewAndDeleted.java159
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DatabaseHealthTask.java20
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DuplicateAttributes.java207
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DuplicateRelationCheck.java314
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/HealthHelper.java207
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/LocalTxData.java22
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RelLinkTxCurrent.java79
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RelationDatabaseIntegrityCheck.java228
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RemoveAttributesWithoutArtifacts.java126
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbinit/AddCommonBranch.java65
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dialogs/AuthenticationDialog.java246
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dialogs/ListDialogSortable.java53
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportJob.java100
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportPage.java113
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportWizard.java61
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ExportBranchPage.java136
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ExportBranchWizard.java63
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupContentProvider.java59
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorer.java439
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorerDragAndDrop.java296
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorerItem.java160
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupLabelProvider.java57
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupTreeViewer.java46
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/handler/GeneralWordOutlineHandler.java123
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/handler/SoftwareRequirementHandler.java49
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryContentProvider.java97
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryLabelProvider.java122
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryView.java274
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/Transaction2ClickListener.java51
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/ArtifactRequest.java203
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/ArtifactTreeRequest.java130
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/BranchRequest.java107
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/HttpImageRequest.java79
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactDiffMenu.java136
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactPreviewMenu.java171
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactTableViewerGlobalMenuHelper.java60
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactTreeViewerGlobalMenuHelper.java57
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenu.java254
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenuListener.java40
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenuPermissions.java149
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/IGlobalMenuHelper.java28
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/ConflictResolutionWizard.java116
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EditAttributeWizardPage.java185
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EditWFCAttributeWizardPage.java238
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedBooleanAttributeEditor.java129
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedBooleanEditor.java48
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedDateAttributeEditor.java132
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedDateEditor.java68
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedEnumAttributeEditor.java145
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedEnumEditor.java66
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedStringAttributeEditor.java142
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedStringEditor.java121
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbededAttributeEditorFactory.java64
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/IEmbeddedAttributeEditor.java32
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotificationEvent.java47
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotificationManager.java59
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotifyUsersJob.java121
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/AuthenticationComposite.java430
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/BranchSelectSimpleComposite.java263
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/SearchComposite.java402
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ArbitrationServerPage.java158
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ConfigurationDetails.java101
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/DefaultWithStringAndIntegerFields.java200
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogContentProvider.java68
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogLabelProvider.java98
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogView.java163
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogXViewerFactory.java64
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModel.java111
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModelLabelProvider.java105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModelList.java98
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/IArtifactListViewer.java35
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/OnCloseListener.java17
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationExplorerWindow.java374
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableCellModifier.java105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableSorter.java94
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableViewer.java273
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ArtifactEditFileWatcher.java45
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ArtifactGuis.java114
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/DefaultArtifactRenderer.java68
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/FileRenderer.java136
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/FileSystemRenderer.java174
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/IRenderer.java79
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ITemplateRenderer.java22
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/IVbaDiffGenerator.java23
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/NativeRenderer.java87
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/OpenOfficeWriterRenderer.java78
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/PresentationType.java15
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/Renderer.java222
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/RendererManager.java329
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/TisRenderer.java97
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UpdateArtifactJob.java313
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UpdateJob.java35
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UrlRenderer.java65
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/VbaWordDiffGenerator.java126
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WholeDocumentRenderer.java164
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordCompareTest.java142
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordRenderer.java51
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordTemplateRenderer.java414
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/IWordMlProducer.java23
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/SrsProducer.java52
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/WordMLProducer.java282
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/WordTemplateProcessor.java699
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/AddTemplateText.java55
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ArtifactProcessing.java157
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/BasicTemplateAttributeHandler.java100
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ITemplateAttributeHandler.java26
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ITemplateTask.java28
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/SRSSpecialPublishingAttributeHandler.java52
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/TISAttributeHandler.java45
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/TemplateAttribute.java142
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/WordAttributeTypeAttributeHandler.java64
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/WordTemplateManager.java309
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/schema/DBHealthTask.exsd102
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchQuery.java76
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchResult.java265
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchViewPage.java378
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchEngine.java54
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchPage.java594
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchResult.java37
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactTypeFilter.java65
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AttributeFindReplaceDialog.java226
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AttributeValueFilter.java66
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/FilterArtifactSearchQuery.java78
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/HistoricalArtifactSearchQuery.java42
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/HridValueFilter.java59
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/IdArtifactSearch.java53
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/InRelationFilter.java78
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/MaxMatchCountConfirmer.java43
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/OrphanSearchFilter.java80
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/QuickSearchView.java281
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/RemoteArtifactSearch.java68
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/SearchFilter.java81
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModel.java91
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModelLabelProvider.java104
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModelList.java99
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterTableCellModifier.java73
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterTableViewer.java182
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ModificationReportJob.java91
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/RelationMatrixExportJob.java104
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ReportJob.java80
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ReportSelectionListener.java52
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactMatchAdapter.java36
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactSearchContentProvider.java20
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactSearchResultCollector.java51
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IFilterListViewer.java37
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ArtifactGraphContentProvider.java141
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ArtifactGraphLabelProvider.java143
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ISkyWalkerOptionsChangeListener.java24
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/RelTypeContentProvider.java142
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerArtTypeTabItem.java154
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerLayoutTabItem.java168
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerOptions.java455
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerRelTypeTabItem.java140
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerShowAttributeTabItem.java105
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerTabOptions.java37
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerView.java368
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/status/SwtStatusMonitor.java58
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/ArtifactTemplateProvider.java119
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/ITemplateProvider.java31
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/SimpleTemplateProviderDbTask.java95
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/TemplateManager.java48
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactClipboard.java119
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactDescriptiveLabelProvider.java46
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactNameReverseSorter.java38
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactNameSorter.java38
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactTypeAndDescriptiveLabelProvider.java46
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/AttributeCheckListDialog.java152
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ChangeType.java74
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/DbConnectionExceptionComposite.java51
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/EmailGroupsAndUserGroups.java111
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/EmailableJob.java84
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HierarchicalReportDialog.java64
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HtmlExportTable.java122
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HtmlReportJob.java155
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/IDefineNavigateItem.java23
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/IOseeDictionary.java20
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ImageCapture.java45
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/KeyEventExample.java236
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OSEELog.java36
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeDictionary.java124
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeEmail.java383
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeMainDictionary.java60
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ShowAttributeAction.java70
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetDragAndDrop.java202
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetGuiDebug.java40
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetSelections.java77
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetViews.java110
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/TransactionIdLabelProvider.java27
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/backup/BackupBranchesJob.java115
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailGroup.java45
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailWizard.java100
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailWizardPage.java314
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEECheckedFilteredTree.java120
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEECheckedFilteredTreeDialog.java137
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEEFilteredTree.java68
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEEFilteredTreeDialog.java123
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/matrix/Matrix.java146
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/matrix/MatrixItem.java63
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/ArtifactTypeContentProvider.java62
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/AttributeContentProvider.java61
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/DefaultBranchContentProvider.java87
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/HyperLinkLabel.java113
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/IArtifactWidget.java52
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/IBranchArtifact.java24
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/RelationTypeContentProvider.java60
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/SkynetSpellModifyDictionary.java121
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XArtifactTypeListViewer.java43
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XAttributeTypeListViewer.java46
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectComboWidget.java241
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectWidget.java248
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectWidgetProvider.java37
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCheckBox.java184
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCheckBoxDam.java81
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCombo.java356
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboBooleanDam.java77
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboDam.java79
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboViewer.java291
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDate.java337
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDateDam.java83
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDragAndDrop.java46
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFileSelectionDialog.java88
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFloat.java66
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFloatDam.java97
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelGroupSelection.java73
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelMemberSelDam.java121
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelMemberSelection.java71
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlinkLabelSelection.java194
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XInteger.java57
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XIntegerDam.java83
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XLabel.java118
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XLabelDam.java159
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XList.java471
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListDam.java74
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListDropViewer.java159
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListViewer.java403
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMembersCombo.java328
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMembersList.java64
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XModifiedListener.java19
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidget.java279
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetDam.java82
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetFactory.java20
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetTextDam.java103
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetXTextTest.java81
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XOption.java40
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XOptionHandler.java104
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XPercent.java41
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XPercentDam.java39
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButton.java217
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButtonTest.java222
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButtons.java334
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRelationTypeListViewer.java35
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XText.java516
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextDam.java70
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextDescriptiveName.java28
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextResourceDropDam.java114
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextSpellCheckPaintListener.java231
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextSpellModifyDictionary.java21
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTypeListViewer.java47
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidget.java435
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/DateValue.java45
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/EnumeratedValue.java52
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/StringValue.java44
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/UniversalCellEditor.java165
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/UniversalCellEditorValue.java27
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactCheckTreeDialog.java67
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactListDialog.java88
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactTreeChildrenContentProvider.java117
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactTreeContentProvider.java108
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ChangeTypeDialog.java113
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/CheckBoxDialog.java72
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/DateSelectionDialog.java99
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/Dialogs.java71
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/EntryCheckDialog.java90
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/EntryDialog.java206
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/GroupListDialog.java89
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/HtmlDialog.java78
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ImageDialog.java106
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserCheckTreeDialog.java97
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserGroupsCheckTreeDialog.java67
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserListDialog.java52
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/AttributeXWidgetFactory.java64
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DefaultAttributeXWidgetProvider.java76
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DefaultXWidgetOptionResolver.java35
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DynamicXWidgetLayout.java333
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DynamicXWidgetLayoutData.java232
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IAttributeXWidgetProvider.java22
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IDynamicWidgetLayoutListener.java30
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IWorkDefinitionProvider.java48
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IXWidgetOptionResolver.java20
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IXWidgetProvider.java22
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/UserCommunity.java53
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkDefinitionProvider.java50
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkFlowDefinition.java420
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkFlowDefinitionFactory.java25
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemAttributes.java41
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemDefinition.java227
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemDefinitionFactory.java216
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemWithChildrenDefinition.java90
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPage.java257
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageButton.java94
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinition.java95
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinitionLabelProvider.java42
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinitionViewSorter.java31
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageSection.java61
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkRuleDefinition.java71
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkWidgetDefinition.java122
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/XWidgetFactory.java250
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphLine.java67
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphLineSegment.java46
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphTable.java242
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeView.java270
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewer.java144
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewerFactory.java61
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeContentProvider.java60
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeLabelProvider.java102
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeViewer.java357
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitManagerView.java231
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitXViewer.java121
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitXViewerFactory.java37
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitContentProvider.java68
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitLabelProvider.java109
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitViewer.java289
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeUtility.java386
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeView.java938
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewer.java212
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerFactory.java53
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerSorter.java65
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeContentProvider.java55
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeLabelProvider.java176
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeViewer.java572
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/test/Merge Manager Manual GUI testing.docbin0 -> 841502 bytes
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateComposite.java237
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateContentProvider.java88
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItem.java90
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItemAction.java77
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItemBlam.java39
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateLabelProvider.java74
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateUrlItem.java63
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateViewFilter.java52
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateViewItems.java35
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/ResultBrowserHyperCmd.java50
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/ResultBrowserListener.java90
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultData.java146
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultHtml.java57
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultPage.java275
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultView.java333
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultsComposite.java175
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/IXViewerFactory.java65
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XPromptChange.java114
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XSubMenuManager.java45
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewer.java456
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerCells.java34
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumn.java244
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumnLabelProvider.java44
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumnSorter.java38
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerFactory.java116
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerLabelProvider.java136
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerSorter.java217
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerStyledTextLabelProvider.java210
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerTextFilter.java121
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerTreeReport.java107
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerValueColumn.java64
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnData.java85
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnFilterData.java83
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnFilterDataUI.java62
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeData.java206
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeDataLabelProvider.java67
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeManager.java497
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/FilterData.java49
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/FilterDataUI.java108
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/IXViewerCustomizations.java36
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/SortingData.java138
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/XViewerCustomMenu.java409
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/XViewerCustomizations.java67
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/dialog/CustomizationDataSelectionDialog.java157
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/dialog/XViewerCustomizeDialog.java1154
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/AttributeSortDataType.java31
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetCustomizations.java192
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetUserArtifactCustomizeDefaults.java125
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetXViewerFactory.java128
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/XViewerAttributeSortDataType.java31
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/XViewerCustomizationArtifact.java75
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerArtifactNameColumn.java49
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerArtifactTypeColumn.java61
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerAttributeColumn.java58
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerGuidColumn.java49
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerHridColumn.java49
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/IXViewerTestTask.java34
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerStyledStringLableProviderTest.java117
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTest.java139
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestContentProvider.java64
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestCustomizations.java115
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestFactory.java56
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestLabelProvider.java100
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestStyledStringLabelProvider.java129
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestTask.java83
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/AllWords.txt134689
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/README45
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/README.txt5
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.0239
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.151
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.290
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.01835
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.1741
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.26767
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.01899
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.1743
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.26688
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.047158
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.120864
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.237616
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.319708
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW Software Requirement with Recursion.xml3
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW_ALL.xml7688
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW_ALL_RECURSE.xml7686
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/Word Edit Template.xml3
-rw-r--r--0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/Word Merge Template.xml3
810 files changed, 376658 insertions, 0 deletions
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.classpath b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.classpath
new file mode 100644
index 00000000000..02159672985
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.options b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.options
new file mode 100644
index 00000000000..07a9cdb4bab
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.options
@@ -0,0 +1,9 @@
+org.eclipse.osee.framework.ui.skynet/debug = false
+
+org.eclipse.osee.framework.ui.skynet/debug/Merge = false
+
+org.eclipse.osee.framework.ui.skynet/debug/Change = false
+
+org.eclipse.osee.framework.ui.skynet/debug/Blam = false
+
+org.eclipse.osee.framework.ui.skynet/debug/Renderer = false
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.project b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.project
new file mode 100644
index 00000000000..3b9dc63340b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.framework.ui.skynet</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.settings/org.eclipse.jdt.ui.prefs b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000000..7532ba45e03
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,8 @@
+#Tue Apr 22 08:04:29 MST 2008
+eclipse.preferences.version=1
+formatter_settings_version=11
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/META-INF/MANIFEST.MF b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..72d21f3c27a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/META-INF/MANIFEST.MF
@@ -0,0 +1,102 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Gui Plug-in (Incubation)
+Bundle-SymbolicName: org.eclipse.osee.framework.ui.skynet;singleton:=true
+Bundle-Version: 0.4.0.qualifier
+Bundle-Activator: org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.osee.framework.skynet.core,
+ org.eclipse.osee.framework.jdk.core,
+ org.eclipse.search,
+ org.eclipse.ui.workbench.texteditor,
+ org.eclipse.update.core,
+ org.eclipse.ui.forms,
+ org.eclipse.osee.framework.database,
+ org.eclipse.ui.ide,
+ org.junit,
+ org.eclipse.osee.framework.plugin.core,
+ org.eclipse.osee.framework.ui.plugin,
+ org.eclipse.osee.framework.ui.swt,
+ org.eclipse.debug.ui,
+ org.eclipse.osee.framework.messaging.event.skynet,
+ org.eclipse.core.expressions,
+ org.eclipse.zest.core,
+ org.eclipse.zest.layouts,
+ org.eclipse.compare,
+ javax.mail.glassfish;bundle-version="1.4.1",
+ org.eclipse.help
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: Eclipse.org
+Import-Package: org.eclipse.nebula.widgets.calendarcombo,
+ org.eclipse.osee.framework.core.client,
+ org.eclipse.osee.framework.core.client.server,
+ org.eclipse.osee.framework.core.data,
+ org.eclipse.osee.framework.core.enums,
+ org.eclipse.osee.framework.core.exception,
+ org.eclipse.osee.framework.db.connection,
+ org.eclipse.osee.framework.db.connection.core,
+ org.eclipse.osee.framework.db.connection.core.query,
+ org.eclipse.osee.framework.db.connection.core.schema,
+ org.eclipse.osee.framework.db.connection.core.transaction,
+ org.eclipse.osee.framework.db.connection.exception,
+ org.eclipse.osee.framework.db.connection.info,
+ org.eclipse.osee.framework.logging
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: org.eclipse.osee.framework.ui.skynet,
+ org.eclipse.osee.framework.ui.skynet.Import,
+ org.eclipse.osee.framework.ui.skynet.access,
+ org.eclipse.osee.framework.ui.skynet.artifact,
+ org.eclipse.osee.framework.ui.skynet.artifact.annotation,
+ org.eclipse.osee.framework.ui.skynet.artifact.editor,
+ org.eclipse.osee.framework.ui.skynet.artifact.massEditor,
+ org.eclipse.osee.framework.ui.skynet.artifact.snapshot,
+ org.eclipse.osee.framework.ui.skynet.ats,
+ org.eclipse.osee.framework.ui.skynet.blam,
+ org.eclipse.osee.framework.ui.skynet.blam.operation,
+ org.eclipse.osee.framework.ui.skynet.branch,
+ org.eclipse.osee.framework.ui.skynet.commandHandlers,
+ org.eclipse.osee.framework.ui.skynet.dbinit,
+ org.eclipse.osee.framework.ui.skynet.dialogs,
+ org.eclipse.osee.framework.ui.skynet.export,
+ org.eclipse.osee.framework.ui.skynet.group,
+ org.eclipse.osee.framework.ui.skynet.handler,
+ org.eclipse.osee.framework.ui.skynet.history,
+ org.eclipse.osee.framework.ui.skynet.httpRequests,
+ org.eclipse.osee.framework.ui.skynet.menu,
+ org.eclipse.osee.framework.ui.skynet.mergeWizard,
+ org.eclipse.osee.framework.ui.skynet.notify,
+ org.eclipse.osee.framework.ui.skynet.panels,
+ org.eclipse.osee.framework.ui.skynet.preferences,
+ org.eclipse.osee.framework.ui.skynet.queryLog,
+ org.eclipse.osee.framework.ui.skynet.relation.explorer,
+ org.eclipse.osee.framework.ui.skynet.render,
+ org.eclipse.osee.framework.ui.skynet.render.word,
+ org.eclipse.osee.framework.ui.skynet.render.word.template,
+ org.eclipse.osee.framework.ui.skynet.search,
+ org.eclipse.osee.framework.ui.skynet.search.filter,
+ org.eclipse.osee.framework.ui.skynet.search.report,
+ org.eclipse.osee.framework.ui.skynet.search.ui,
+ org.eclipse.osee.framework.ui.skynet.skywalker,
+ org.eclipse.osee.framework.ui.skynet.templates,
+ org.eclipse.osee.framework.ui.skynet.util,
+ org.eclipse.osee.framework.ui.skynet.util.backup,
+ org.eclipse.osee.framework.ui.skynet.util.email,
+ org.eclipse.osee.framework.ui.skynet.util.filteredTree,
+ org.eclipse.osee.framework.ui.skynet.util.matrix,
+ org.eclipse.osee.framework.ui.skynet.widgets,
+ org.eclipse.osee.framework.ui.skynet.widgets.cellEditor,
+ org.eclipse.osee.framework.ui.skynet.widgets.dialog,
+ org.eclipse.osee.framework.ui.skynet.widgets.workflow,
+ org.eclipse.osee.framework.ui.skynet.widgets.xbargraph,
+ org.eclipse.osee.framework.ui.skynet.widgets.xchange,
+ org.eclipse.osee.framework.ui.skynet.widgets.xcommit,
+ org.eclipse.osee.framework.ui.skynet.widgets.xmerge,
+ org.eclipse.osee.framework.ui.skynet.widgets.xnavigate,
+ org.eclipse.osee.framework.ui.skynet.widgets.xresults,
+ org.eclipse.osee.framework.ui.skynet.widgets.xviewer,
+ org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize,
+ org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.dialog,
+ org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet,
+ org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column,
+ org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/build.properties b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/build.properties
new file mode 100644
index 00000000000..3bb90d38e3b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/build.properties
@@ -0,0 +1,12 @@
+bin.includes = META-INF/,\
+ plugin.xml,\
+ images/,\
+ src/,\
+ support/,\
+ schema/,\
+ reference/,\
+ contexts/,\
+ .
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/artifactExplorerContexts.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/artifactExplorerContexts.xml
new file mode 100644
index 00000000000..1bd06142210
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/artifactExplorerContexts.xml
@@ -0,0 +1,9 @@
+<contexts>
+ <context id="artifact_explorer_tree_viewer" title="Artifact Explorer">
+ <description>Displays artifacts in a relational hierarchy for navigation.</description>
+ <topic href="reference/creating_new_artifact.html" label="Creating a new artifact"/>
+ <topic href="reference/deleting_artifacts.html" label="Deleting artifacts"/>
+ <topic href="reference/go_into.html" label="Rooting on an artifact"/>
+ <topic label="Report a bug" href="../osee.ats/reference/report_a_bug.html"/>
+ </context>
+</contexts> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/artifactSearchContexts.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/artifactSearchContexts.xml
new file mode 100644
index 00000000000..421751998cd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/artifactSearchContexts.xml
@@ -0,0 +1,8 @@
+<contexts>
+ <context id="artifact_search" title="Artifact Search">
+ <description>Used to search for artifacts that are on the default branch.</description>
+ <topic label="Artifact Search Page" href="reference/artifact_search_page.html"/>
+ <topic label="Index Based Search" href="reference/index_base_search.html"/>
+ <topic label="Default Branch" href="reference/default_branch.html"/>
+ </context>
+</contexts> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/branchManagerContexts.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/branchManagerContexts.xml
new file mode 100644
index 00000000000..2e6c395894d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/branchManagerContexts.xml
@@ -0,0 +1,30 @@
+<contexts>
+ <context id="branch_manager_default_branch_menu" title="Set Default Branch">
+ <description>Sets the selected branch as the default branch.</description>
+ <topic label="Default Branch" href="reference/default_branch.html"/>
+ </context>
+ <context id="branch_manager_favorite_branch_menu" title="Mark/Unmark Favorite Branch">
+ <description>Toggles a branch as being favorite.</description>
+ <topic label="Favorite Branch" href="reference/favorite_branch.html"/>
+ </context>
+ <context id="branch_manager_show_change_report_menu" title="Show Change Report">
+ <description>Shows the Change Report for a branch or range of transactions.</description>
+ <topic label="Show Change Report" href="reference/show_change_report.html"/>
+ </context>
+
+ <context id="branch_manager_filtering" title="Branch Manager">
+ <description>Displays branches that are available in Skynet.</description>
+ <topic label="Branch Manager" href="reference/branch_manager_view.html"/>
+ <topic label="Branch Filtering" href="reference/branch_filtering.html"/>
+ <topic label="Report a bug" href="../osee.ats/reference/report_a_bug.html"/>
+ </context>
+ <context id="branch_manager_table" title="Branch Manager">
+ <description>Displays branches that are available in Skynet.</description>
+ <topic label="Branch Manager" href="reference/branch_manager_view.html"/>
+ <topic label="Branch Filtering" href="reference/branch_filtering.html"/>
+ <topic label="Default Branch" href="reference/default_branch.html"/>
+ <topic label="Favorite Branch" href="reference/favorite_branch.html"/>
+ <topic label="Show Change Report" href="reference/show_change_report.html"/>
+ <topic label="Report a bug" href="../osee.ats/reference/report_a_bug.html"/>
+ </context>
+</contexts> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/changeReportContexts.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/changeReportContexts.xml
new file mode 100644
index 00000000000..66568fcc60c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/changeReportContexts.xml
@@ -0,0 +1,9 @@
+<contexts>
+ <context id="change_report_table" title="Change Report">
+ <description>Shows changes made on a branch, or between two transactions.</description>
+ <topic label="Reading a Change Report" href="reference/change_table.html"/>
+ <topic label="Refresh a Change Report" href="reference/refresh_change_report.html"/>
+ <topic label="Show a Change Report" href="reference/show_change_report.html"/>
+ <topic label="Report a bug" href="../osee.ats/reference/report_a_bug.html"/>
+ </context>
+</contexts> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/contexts.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/contexts.xml
new file mode 100644
index 00000000000..d10a655a31d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/contexts.xml
@@ -0,0 +1,17 @@
+<contexts>
+ <context id="artifact_editor" title="Artifact Editor">
+ <description>Artifact Editor</description>
+ <topic href="reference/creating_new_links.html" label="Creating a new Link"/>
+ <topic href="reference/reorder_links.html" label="Reordering links"/>
+ <topic label="Report a bug" href="../osee.ats/reference/report_a_bug.html"/>
+ </context>
+ <context id="artifact_explorer_tree" title="Artifact Explorer">
+ <description>Displays artifacts in a relational hierarchy for navigation.</description>
+ <topic href="reference/artifact_explorer_tree.html" label="Drag and Drop"/>
+ <topic label="Report a bug" href="../osee.ats/reference/report_a_bug.html"/>
+ </context>
+ <context id="xResultView" title="Result View">
+ <description>Show reports, errors, metrics and other data in a multi-paged view with print, email and exporting capabilities.</description>
+ <topic href="reference/result_view.html" label="Result View"/>
+ </context>
+</contexts> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/mergeMangerContexts.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/mergeMangerContexts.xml
new file mode 100644
index 00000000000..04ab604fa5b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/mergeMangerContexts.xml
@@ -0,0 +1,6 @@
+<contexts>
+ <context id="Merge_Manager_View" title="Merge Manager">
+ <description>Shows conflicts and allows resolution of conflicts found between a working branch and baseline branch.</description>
+ <topic href="reference/Merge_Manager.html" label="Using the Merge Manager"/>
+ </context>
+</contexts>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/relationPageContexts.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/relationPageContexts.xml
new file mode 100644
index 00000000000..206eaa31833
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/relationPageContexts.xml
@@ -0,0 +1,9 @@
+<contexts>
+ <context id="relation_page_tree_viewer" title="Relation Page">
+ <description>An editor to support relation link creation, modification and deletion.</description>
+ <topic href="reference/creating_new_links.html" label="Creating a new Link"/>
+ <topic href="reference/deleting_link.html" label="Deleting a Link"/>
+ <topic href="reference/reorder_links.html" label="Reordering links"/>
+ <topic label="Report a bug" href="../osee.ats/reference/report_a_bug.html"/>
+ </context>
+</contexts> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/revisionHistoryContexts.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/revisionHistoryContexts.xml
new file mode 100644
index 00000000000..8540e29b8d7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/contexts/revisionHistoryContexts.xml
@@ -0,0 +1,8 @@
+<contexts>
+ <context id="revision_history_tree_viewer" title="Revision History">
+ <description>Displays the history on an artifact.</description>
+ <topic href="reference/revision_history_view.html" label="Resource History"/>
+ <topic href="reference/compare_two_artifacts.html" label="Compare two Artifacts"/>
+ <topic label="Report a bug" href="../osee.ats/reference/report_a_bug.html"/>
+ </context>
+</contexts> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/A.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/A.gif
new file mode 100644
index 00000000000..6a18beda16c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/A.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/WordMlImport.bmp b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/WordMlImport.bmp
new file mode 100644
index 00000000000..7b9bfb83400
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/WordMlImport.bmp
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/accept.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/accept.gif
new file mode 100644
index 00000000000..9cacb96dca9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/accept.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/add.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/add.gif
new file mode 100644
index 00000000000..252d7ebcb8c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/add.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/appserver.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/appserver.gif
new file mode 100644
index 00000000000..939ec849e73
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/appserver.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact.gif
new file mode 100644
index 00000000000..a29e9d58613
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact.xcf b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact.xcf
new file mode 100644
index 00000000000..6dcb4509c3c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact.xcf
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_editor.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_editor.gif
new file mode 100644
index 00000000000..a88fcbf1940
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_editor.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_explorer.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_explorer.gif
new file mode 100644
index 00000000000..23b46a83e46
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_explorer.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_explorer.xcf b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_explorer.xcf
new file mode 100644
index 00000000000..48e981efdda
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_explorer.xcf
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_search.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_search.gif
new file mode 100644
index 00000000000..799d3d5686c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_search.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_version.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_version.gif
new file mode 100644
index 00000000000..c10c0def441
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/artifact_version.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/aspect.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/aspect.gif
new file mode 100644
index 00000000000..11d750ac0f2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/aspect.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/authenticated.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/authenticated.gif
new file mode 100644
index 00000000000..c9170d9ca9c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/authenticated.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/back.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/back.gif
new file mode 100644
index 00000000000..4fb41501036
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/back.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/black_check.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/black_check.gif
new file mode 100644
index 00000000000..bbb54c95ab9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/black_check.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/blam.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/blam.gif
new file mode 100644
index 00000000000..7134210d0a6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/blam.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/blue_d.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/blue_d.gif
new file mode 100644
index 00000000000..1cdc000633e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/blue_d.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch.gif
new file mode 100644
index 00000000000..9c4a6755758
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change.gif
new file mode 100644
index 00000000000..9fec358955b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change.xcf b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change.xcf
new file mode 100644
index 00000000000..02566fca3e1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change.xcf
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_dest.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_dest.gif
new file mode 100644
index 00000000000..57b60f5ef41
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_dest.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_dest.xcf b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_dest.xcf
new file mode 100644
index 00000000000..8a5532a94ca
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_dest.xcf
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_source.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_source.gif
new file mode 100644
index 00000000000..6510726e9da
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_source.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_source.xcf b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_source.xcf
new file mode 100644
index 00000000000..7751a80f87e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_change_source.xcf
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_merge.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_merge.gif
new file mode 100644
index 00000000000..4aba624dd12
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/branch_merge.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/bug.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/bug.gif
new file mode 100644
index 00000000000..9a738e55054
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/bug.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/change_managed_branch.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/change_managed_branch.gif
new file mode 100644
index 00000000000..5211f45e5fd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/change_managed_branch.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_disabled.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_disabled.gif
new file mode 100644
index 00000000000..7aa131aedb6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_disabled.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_enabled.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_enabled.gif
new file mode 100644
index 00000000000..9cacb96dca9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_enabled.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_enabled_conflicted.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_enabled_conflicted.gif
new file mode 100644
index 00000000000..a2f384caec9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_enabled_conflicted.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_red.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_red.gif
new file mode 100644
index 00000000000..db62a0aceb5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_red.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_redslash.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_redslash.gif
new file mode 100644
index 00000000000..ef157d2a19a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/chkbox_redslash.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/clear.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/clear.gif
new file mode 100644
index 00000000000..af30a42f83d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/clear.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/clock.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/clock.gif
new file mode 100644
index 00000000000..c984fba7039
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/clock.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/collapseAll.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/collapseAll.gif
new file mode 100644
index 00000000000..a2d80a9044f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/collapseAll.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/conflict.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/conflict.gif
new file mode 100644
index 00000000000..433652430f6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/conflict.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customize.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customize.gif
new file mode 100644
index 00000000000..e9540ff77dd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customize.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeD.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeD.gif
new file mode 100644
index 00000000000..f0ce638b800
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeD.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeG.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeG.gif
new file mode 100644
index 00000000000..7447efda55d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeG.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeP.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeP.gif
new file mode 100644
index 00000000000..3e88710663b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizeP.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizePersonal.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizePersonal.gif
new file mode 100644
index 00000000000..b6d9161b68f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/customizePersonal.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/delete.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/delete.gif
new file mode 100644
index 00000000000..b6922ac11cf
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/delete.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/delete_edit.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/delete_edit.gif
new file mode 100644
index 00000000000..b6922ac11cf
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/delete_edit.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/dirty.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/dirty.gif
new file mode 100644
index 00000000000..2532de21e31
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/dirty.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/down.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/down.gif
new file mode 100644
index 00000000000..072b1844572
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/down.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/duplicate.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/duplicate.gif
new file mode 100644
index 00000000000..dc549bce841
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/duplicate.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit.gif
new file mode 100644
index 00000000000..95b8e17c761
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit2.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit2.gif
new file mode 100644
index 00000000000..94eedf6f929
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit2.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit_artifact.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit_artifact.gif
new file mode 100644
index 00000000000..571844ca4b1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/edit_artifact.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/email.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/email.gif
new file mode 100644
index 00000000000..2cb69621de8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/email.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/expandAll.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/expandAll.gif
new file mode 100644
index 00000000000..0205b29176d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/expandAll.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/export.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/export.gif
new file mode 100644
index 00000000000..d11c996e570
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/export.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/file.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/file.gif
new file mode 100644
index 00000000000..d05c905d2da
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/file.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/filter.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/filter.gif
new file mode 100644
index 00000000000..3d061d77cbe
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/filter.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/flat_layout.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/flat_layout.gif
new file mode 100644
index 00000000000..1ef74cf98f4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/flat_layout.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/gear.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/gear.gif
new file mode 100644
index 00000000000..272eec37d74
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/gear.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/gears.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/gears.gif
new file mode 100644
index 00000000000..86683b8bd64
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/gears.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/greenBug.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/greenBug.gif
new file mode 100644
index 00000000000..b0dfd3ba982
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/greenBug.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/greenPlus.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/greenPlus.gif
new file mode 100644
index 00000000000..252d7ebcb8c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/greenPlus.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/green_light.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/green_light.gif
new file mode 100644
index 00000000000..d5d9bdf15a7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/green_light.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/green_s.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/green_s.gif
new file mode 100644
index 00000000000..970bd19ffc5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/green_s.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/group.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/group.gif
new file mode 100644
index 00000000000..5ba5b91c5bb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/group.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/help.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/help.gif
new file mode 100644
index 00000000000..9d70301dae3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/help.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/issue.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/issue.gif
new file mode 100644
index 00000000000..2da001e3e98
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/issue.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/laser_16_16.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/laser_16_16.gif
new file mode 100644
index 00000000000..b29b25ee454
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/laser_16_16.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/laser_8_8.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/laser_8_8.gif
new file mode 100644
index 00000000000..c7c1b6c15f7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/laser_8_8.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/load.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/load.gif
new file mode 100644
index 00000000000..51e703b1b9c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/load.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/lockkey.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/lockkey.gif
new file mode 100644
index 00000000000..fca03252afd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/lockkey.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/magnify.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/magnify.gif
new file mode 100644
index 00000000000..f7b8f99ec59
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/magnify.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/major.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/major.gif
new file mode 100644
index 00000000000..609dbb7269c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/major.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/minor.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/minor.gif
new file mode 100644
index 00000000000..cd83b96c201
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/minor.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/nav_backward.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/nav_backward.gif
new file mode 100644
index 00000000000..740e8cae8da
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/nav_backward.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/nav_forward.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/nav_forward.gif
new file mode 100644
index 00000000000..19567890aa8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/nav_forward.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/newTask.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/newTask.gif
new file mode 100644
index 00000000000..9d8a4ffb997
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/newTask.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/not_equal.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/not_equal.gif
new file mode 100644
index 00000000000..e512465d3ea
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/not_equal.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/not_equal.xcf b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/not_equal.xcf
new file mode 100644
index 00000000000..13f3d002e37
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/not_equal.xcf
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/old.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/old.gif
new file mode 100644
index 00000000000..d5ba9d48faa
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/old.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/old.xcf b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/old.xcf
new file mode 100644
index 00000000000..3905f8c792b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/old.xcf
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/preview_artifact.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/preview_artifact.gif
new file mode 100644
index 00000000000..b9c7ff9918c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/preview_artifact.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/print.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/print.gif
new file mode 100644
index 00000000000..045de755326
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/print.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/product.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/product.gif
new file mode 100644
index 00000000000..346a94d0201
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/product.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/purge.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/purge.gif
new file mode 100644
index 00000000000..f2f36bdc7b2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/purge.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/query_log.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/query_log.gif
new file mode 100644
index 00000000000..e32b79455ff
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/query_log.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/query_log.xcf b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/query_log.xcf
new file mode 100644
index 00000000000..29d9cc37f1c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/query_log.xcf
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/redExclaim.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/redExclaim.gif
new file mode 100644
index 00000000000..3f43a29d901
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/redExclaim.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/redRemove.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/redRemove.gif
new file mode 100644
index 00000000000..6f647666d32
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/redRemove.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_light.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_light.gif
new file mode 100644
index 00000000000..7d132b6c1a8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_light.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_slash.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_slash.gif
new file mode 100644
index 00000000000..3c355e2708a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_slash.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_user_sm.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_user_sm.gif
new file mode 100644
index 00000000000..f91ca279748
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/red_user_sm.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/refresh.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/refresh.gif
new file mode 100644
index 00000000000..a063c230aca
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/refresh.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/reject.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/reject.gif
new file mode 100644
index 00000000000..c1751c3ff4f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/reject.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/relate.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/relate.gif
new file mode 100644
index 00000000000..870934b6934
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/relate.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/remove.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/remove.gif
new file mode 100644
index 00000000000..2cd9c544436
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/remove.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/removeAll.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/removeAll.gif
new file mode 100644
index 00000000000..28a3785aaca
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/removeAll.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/repository.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/repository.gif
new file mode 100644
index 00000000000..0470e1588d9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/repository.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/results.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/results.gif
new file mode 100644
index 00000000000..4c882068b69
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/results.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/run_exc.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/run_exc.gif
new file mode 100644
index 00000000000..57f410224cf
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/run_exc.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/save.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/save.gif
new file mode 100644
index 00000000000..499dd0ca602
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/save.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/skywalker.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/skywalker.gif
new file mode 100644
index 00000000000..695e5a5cfa5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/skywalker.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/snapshotSave.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/snapshotSave.gif
new file mode 100644
index 00000000000..46e9bfa6684
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/snapshotSave.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/sort.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/sort.gif
new file mode 100644
index 00000000000..2029de0e30e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/sort.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/star.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/star.gif
new file mode 100644
index 00000000000..f1c09d57db8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/star.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/star_9_9.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/star_9_9.gif
new file mode 100644
index 00000000000..e96e43ea722
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/star_9_9.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/task.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/task.gif
new file mode 100644
index 00000000000..36fc007591a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/task.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/test_procedure.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/test_procedure.gif
new file mode 100644
index 00000000000..af2fd7e42a2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/test_procedure.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/transaction.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/transaction.gif
new file mode 100644
index 00000000000..0bf73dc5ca0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/transaction.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/transaction_detail.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/transaction_detail.gif
new file mode 100644
index 00000000000..8564bb7760d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/transaction_detail.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/trash_can.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/trash_can.gif
new file mode 100644
index 00000000000..07061721d7f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/trash_can.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/tree_layout.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/tree_layout.gif
new file mode 100644
index 00000000000..234486172ca
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/tree_layout.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/undo.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/undo.gif
new file mode 100644
index 00000000000..eae118ad168
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/undo.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/up.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/up.gif
new file mode 100644
index 00000000000..07164754e5c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/up.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/user.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/user.gif
new file mode 100644
index 00000000000..5e6e549598a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/user.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/user_sm.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/user_sm.gif
new file mode 100644
index 00000000000..d2780011574
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/user_sm.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/users2.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/users2.gif
new file mode 100644
index 00000000000..d28c326dea2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/users2.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/yellow_m.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/yellow_m.gif
new file mode 100644
index 00000000000..5fc23f9f04f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/images/yellow_m.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/plugin.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/plugin.xml
new file mode 100644
index 00000000000..539224e55a1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/plugin.xml
@@ -0,0 +1,1113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by Boeing (BOEING SHARED SERVICES GROUP) -->
+<?eclipse version="3.0"?>
+<plugin
+>
+ <extension-point id="ArtifactRenderer" name="ArtifactRenderer" schema="schema/ArtifactRenderer.exsd"/>
+ <extension-point id="ArtifactReport" name="ArtifactReport" schema="schema/ArtifactReport.exsd"/>
+ <extension-point id="BlamOperation" name="BlamOperation" schema="schema/BlamOperation.exsd"/>
+ <extension-point id="WordMlProducer" name="WordMlProducer" schema="schema/WordMlProducer.exsd"/>
+ <extension-point id="WordOutlineContentHandler" name="WordOutlineContentHandler" schema="schema/WordOutlineContentHandler.exsd"/>
+ <extension-point id="ArtifactRendererTemplate" name="ArtifactRendererTemplate" schema="schema/ArtifactRendererTemplate.exsd"/>
+ <extension-point id="OseeDictionary" name="OseeDictionary" schema="schema/OseeDictionary.exsd"/>
+ <extension-point id="XWidgetProvider" name="XWidgetProvider" schema="schema/XWidgetProvider.exsd"/>
+ <extension-point id="IgnorePublishAttribute" name="IgnorePublishAttribute" schema="schema/IgnorePublishAttribute.exsd"/>
+ <extension-point id="TemplateProvider" name="TemplateProvider" schema="schema/TemplateProvider.exsd"/>
+ <extension-point id="SimpleTemplateProviderTemplate" name="SimpleTemplateProviderTemplate" schema="schema/SimpleTemplateProviderTemplate.exsd"/>
+ <extension-point id="AttributeXWidgetProvider" name="AttributeXWidgetProvider" schema="schema/AttributeXWidgetProvider.exsd"/>
+ <extension-point id="WorkDefinitionProvider" name="WorkDefinitionProvider" schema="schema/WorkDefinitionProvider.exsd"/>
+ <extension-point id="DBHealthTask" name="DBHealthTask" schema="schema/DBHealthTask.exsd"/>
+
+<extension
+ point="org.eclipse.ui.popupMenus">
+ <objectContribution
+ adaptable="true"
+ id="osee.database.projectContribution"
+ objectClass="org.eclipse.core.resources.IResource">
+ <action
+ class="org.eclipse.osee.framework.ui.skynet.GenerateTypeEnumAction"
+ id="osee.define.popup.open.artifact"
+ label="Generate Type Classes"
+ menubarPath="osee.define.menu.main/main"/>
+ </objectContribution>
+
+</extension>
+ <extension
+ point="org.eclipse.ui.commands">
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.openInEdit.command"
+ name="Open">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.OpenMassEditcommand"
+ name="Mass Edit">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.openArtifactsInAtsWorld.command"
+ name="Open in ATS">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.skywalker.command"
+ name="SKy Walker">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.edit.command"
+ name="Edit">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.revealArtifactInExplorer.command"
+ name="Reveal Artifact in Explorer">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.resource.command"
+ name="Resource History">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.previewArtifact.command"
+ name="Preview Artifact">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.previewArtifactRecurse.command"
+ name="Preview with child recursion">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.openInAtsWorldEditor"
+ name="Open in ATS World Editor">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.openInAtsTaskEditor"
+ name="Open in ATS Task Editor">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.viewerReport"
+ name="View Viewer Report">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.purge.command"
+ name="Purge">
+ </command>
+ </extension>
+ <extension name="Put commands of BranchView here (for now)" point="org.eclipse.ui.commands">
+ <command description="Show the branches in a flat listing" id="org.eclipse.osee.framework.ui.skynet.branch.branchView.flatPresentation.command" name="Flat">
+ </command>
+ <command description="Show the branches in a hierarchical listing" id="org.eclipse.osee.framework.ui.skynet.branch.branchView.hierarchicalPresentation.command" name="Hierarchical">
+ </command>
+ </extension>
+ <extension name="Put commands of ChangeReportView here (for now)" point="org.eclipse.ui.commands">
+ <command id="org.eclipse.osee.framework.ui.skynet.changeReportView.wordChangesMadeTo.command" name="Word changes on this working branch">
+ </command>
+ <command id="org.eclipse.osee.framework.ui.skynet.changeReportView.wordChangesBetweenCurrentAndParent.command" name="Word differences between current/parent branches">
+ </command>
+ <command id="org.eclipse.osee.framework.ui.skynet.changeReportView.wordChangesToParent.command" name="Word changes made to parent branch since creating current branch">
+ </command>
+ <command id="org.eclipse.osee.framework.ui.skynet.changeReportView.revertArtifact.command" name="Revert Artifact...">
+ </command>
+ <command
+ id="org.eclipse.osee.framework.ui.skynet.changeReportView.revertAttribute.command"
+ name="Revert Attribute...">
+ </command>
+ <command id="org.eclipse.osee.framework.ui.skynet.changeReportView.viewWordChangeReport.command" name="View Word Change Report">
+ </command>
+ <command id="org.eclipse.osee.framework.ui.skynet.changeReportView.compressWordAttributes.command" name="Compress Word Attributes">
+ </command>
+ <command
+ description="Expand a Tree Selection"
+ id="org.eclipse.osee.framework.ui.skynet.expandTree.command"
+ name="TreeExpansion">
+ </command>
+ <command
+ description="Collapse a Tree Viewer"
+ id="org.eclipse.osee.framework.ui.skynet.collapseTree.command"
+ name="TreeCollapse">
+ </command>
+ </extension>
+ <extension name="Put commands of ATSWorldView here (for now)" point="org.eclipse.ui.commands">
+ <command id="org.eclipse.osee.ats.worldXView.editChangeType.command" name="Edit Change Type">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.editPriority.command" name="Edit Priority">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.editTargetedVersion.command" name="Edit Targeted Version">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.editActionableItems.command" name="Edit Actionable Items">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.convertToActionableItemTeam.command" name="Convert to Actionable Item/Team">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.openInATSEditor.command" name="Open in ATS Editor">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.openInArtifactEditor.command" name="Open in Artifact Editor">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.deletePurgeATSObject.command" name="Delete/Purge ATS Object">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.addAsFavorite.command" name="Add as Favorite">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.subscribeForNotifications.command" name="Subscribe for Notifications">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.email.command" name="Email">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.resetActionOffChildren.command" name="Reset Action off Children">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.clearAllSorting.command" name="Clear All Sorting">
+ </command>
+ <command id="org.eclipse.osee.ats.worldXView.tableCustomization.command" name="Table Customization">
+ </command>
+ </extension>
+ <extension point="org.eclipse.ui.handlers">
+ <handler class="org.eclipse.osee.framework.ui.skynet.branch.FlatPresentationHandler" commandId="org.eclipse.osee.framework.ui.skynet.branch.branchView.flatPresentation.command">
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.branch.HierarchicalPresentationHandler" commandId="org.eclipse.osee.framework.ui.skynet.branch.branchView.hierarchicalPresentation.command">
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.CopyHandler" commandId="org.eclipse.ui.edit.copy">
+ <activeWhen>
+ <or>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.osee.framework.ui.skynet.branch.BranchView">
+ </equals>
+ </with>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.search.ui.views.SearchView">
+ </equals>
+ </with>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeView">
+ </equals>
+ </with>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.osee.framework.ui.skynet.ArtifactExplorer">
+ </equals>
+ </with>
+ </or>
+ </activeWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.PreviewArtifactNoRecurseHandler" commandId="org.eclipse.osee.framework.ui.skynet.previewArtifact.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.PreviewArtifactWithRecurseHandler" commandId="org.eclipse.osee.framework.ui.skynet.previewArtifactRecurse.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.EditArtifactHandler" commandId="org.eclipse.osee.framework.ui.skynet.edit.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.OpenInEditorHandler" commandId="org.eclipse.osee.framework.ui.skynet.openInEdit.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.OpenMassArtifactEditorHandler" commandId="org.eclipse.osee.framework.ui.skynet.OpenMassEditcommand">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.OpenSkywalkerEditorHandler" commandId="org.eclipse.osee.framework.ui.skynet.skywalker.command">
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.OpenArtifactsInAtsWorldHandler" commandId="org.eclipse.osee.framework.ui.skynet.openArtifactsInAtsWorld.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.ViewWordChangeReportHandler" commandId="org.eclipse.osee.framework.ui.skynet.changeReportView.viewWordChangeReport.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.CompressWordAttributesHandler" commandId="org.eclipse.osee.framework.ui.skynet.changeReportView.compressWordAttributes.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.ShowArtifactInResourceHandler" commandId="org.eclipse.osee.framework.ui.skynet.resource.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.WordChangesToParentHandler" commandId="org.eclipse.osee.framework.ui.skynet.changeReportView.wordChangesToParent.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.WordChangesBetweenCurrentAndParentHandler" commandId="org.eclipse.osee.framework.ui.skynet.changeReportView.wordChangesBetweenCurrentAndParent.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.WordChangesMadeToHandler" commandId="org.eclipse.osee.framework.ui.skynet.changeReportView.wordChangesMadeTo.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler class="org.eclipse.osee.framework.ui.skynet.commandHandlers.RevertArtifactHandler" commandId="org.eclipse.osee.framework.ui.skynet.changeReportView.revertArtifact.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler
+ class="org.eclipse.osee.framework.ui.skynet.commandHandlers.RevealInArtifactExplorer"
+ commandId="org.eclipse.osee.framework.ui.skynet.revealArtifactInExplorer.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler
+ class="org.eclipse.osee.framework.ui.skynet.commandHandlers.ViewerReportHandler"
+ commandId="org.eclipse.osee.framework.ui.skynet.viewerReport">
+ </handler>
+ <handler
+ class="org.eclipse.osee.framework.ui.skynet.commandHandlers.DeleteArtifactHandler"
+ commandId="org.eclipse.ui.edit.delete">
+ <activeWhen>
+ <or>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.search.ui.views.SearchView">
+ </equals>
+ </with>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.osee.framework.ui.skynet.ArtifactExplorer">
+ </equals>
+ </with>
+ </or>
+ </activeWhen>
+ </handler>
+ <handler
+ class="org.eclipse.osee.framework.ui.skynet.commandHandlers.PurgeArtifactHandler"
+ commandId="org.eclipse.osee.framework.ui.skynet.purge.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler
+ class="org.eclipse.osee.framework.ui.skynet.commandHandlers.RevertAttributeHandler"
+ commandId="org.eclipse.osee.framework.ui.skynet.changeReportView.revertAttribute.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler
+ class="org.eclipse.osee.framework.ui.skynet.commandHandlers.ExpandTreeHandler"
+ commandId="org.eclipse.osee.framework.ui.skynet.expandTree.command">
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="+">
+ </count>
+ </with>
+ </enabledWhen>
+ <activeWhen>
+ <or>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.osee.framework.ui.skynet.ArtifactExplorer">
+ </equals>
+ </with>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.osee.framework.ui.skynet.branch.BranchView">
+ </equals>
+ </with>
+ </or>
+ </activeWhen>
+ </handler>
+ <handler
+ class="org.eclipse.osee.framework.ui.skynet.commandHandlers.PasteHandler"
+ commandId="org.eclipse.ui.edit.paste">
+ <activeWhen>
+ <or>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.osee.framework.ui.skynet.ArtifactExplorer">
+ </equals>
+ </with>
+ </or>
+ </activeWhen>
+ </handler>
+ <handler
+ class="org.eclipse.osee.framework.ui.skynet.commandHandlers.CollapseTreeHandler"
+ commandId="org.eclipse.gef.zoom_out">
+ <activeWhen>
+ <or>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.osee.framework.ui.skynet.ArtifactExplorer">
+ </equals>
+ </with>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.osee.framework.ui.skynet.branch.BranchView">
+ </equals>
+ </with>
+ </or>
+ </activeWhen>
+ </handler>
+ </extension>
+ <extension name="The menus for the Branch View." point="org.eclipse.ui.menus">
+ <menuContribution locationURI="menu:org.eclipse.osee.framework.ui.skynet.branch.BranchView">
+ <menu label="Branch Presentation">
+ <command commandId="org.eclipse.osee.framework.ui.skynet.branch.branchView.flatPresentation.command" icon="images/flat_layout.gif" id="org.eclipse.osee.framework.ui.skynet.branch.BranchView.flatCommand" style="radio" tooltip="Show branches as a flat listing">
+ </command>
+ <command commandId="org.eclipse.osee.framework.ui.skynet.branch.branchView.hierarchicalPresentation.command" icon="images/tree_layout.gif" id="org.eclipse.osee.framework.ui.skynet.branch.BranchView.hierarchicalCommand" style="radio" tooltip="Show branches as a hierarchical listing">
+ </command>
+ </menu>
+ </menuContribution>
+ <menuContribution
+ locationURI="popup:org.eclipse.osee.framework.ui.skynet.branch.BranchView">
+ <command
+ commandId="org.eclipse.ui.edit.copy">
+ </command>
+ </menuContribution>
+ </extension>
+ <extension point="org.eclipse.ui.commandImages">
+ <image commandId="org.eclipse.osee.framework.ui.skynet.previewArtifactRecurse.command" icon="images/preview_artifact.gif">
+ </image>
+ <image commandId="org.eclipse.osee.framework.ui.skynet.previewArtifact.command" icon="images/preview_artifact.gif">
+ </image>
+ <image commandId="org.eclipse.osee.framework.ui.skynet.edit.command" icon="images/edit_artifact.gif">
+ </image>
+ <image
+ commandId="org.eclipse.osee.framework.ui.skynet.revealArtifactInExplorer.command"
+ icon="images/magnify.gif">
+ </image>
+ <image
+ commandId="org.eclipse.osee.framework.ui.skynet.resource.command"
+ icon="images/edit.gif">
+ </image>
+ </extension>
+ <extension point="org.eclipse.ui.importWizards">
+ <wizard category="org.eclipse.osee.define.import.category" class="org.eclipse.osee.framework.ui.skynet.Import.ArtifactImportWizard" icon="images/WordMlImport.bmp" id="org.eclipse.osee.framework.ui.skynet.artifact.Import.ImportWizard" name="OSEE Artifacts">
+ <description>
+ Import WordML documents into an existing Define project.
+ </description>
+ </wizard>
+ <wizard category="org.eclipse.osee.define.import.category" class="org.eclipse.osee.framework.ui.skynet.Import.ImportMetaWizard" icon="images/gears.gif" id="osee.define.artifact.Import.ImportMetaWizard" name="OSEE Types">
+ <description>
+ Import Skynet configuration information.
+ </description>
+ </wizard>
+ <category id="org.eclipse.osee.define.import.category" name="OSEE">
+ </category>
+ </extension>
+ <extension
+ point="org.eclipse.ui.exportWizards">
+ <wizard
+ category="org.eclipse.osee.framework.ui.skynet.export"
+ class="org.eclipse.osee.framework.ui.skynet.export.ArtifactExportWizard"
+ icon="images/query_log.gif"
+ id="org.eclipse.osee.framework.ui.skynet.artifactExport"
+ name="OSEE Artifact Export">
+ </wizard>
+ <category
+ id="org.eclipse.osee.framework.ui.skynet.export"
+ name="OSEE">
+ </category>
+ </extension>
+ <extension point="org.eclipse.ui.editors">
+ <editor class="org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor" contributorClass="org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditorContributor" default="false" icon="images/artifact_editor.gif" id="org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor" name="Artifact Editor"/>
+ <editor class="org.eclipse.osee.framework.ui.skynet.blam.BlamEditor" default="false" icon="images/blam.gif" id="org.eclipse.osee.framework.ui.skynet.blam.BlamEditor" name="Blam Editor"/>
+ <editor class="org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassArtifactEditor" default="false" icon="images/artifact_editor.gif" id="org.eclipse.osee.framework.ui.skynet.massEditor.MassArtifactEditor" name="Mass Artifact Editor"/>
+ </extension>
+ <extension point="org.eclipse.ui.preferencePages">
+ <page class="org.eclipse.osee.framework.ui.skynet.OseePreferencePage" name="OSEE" id="org.eclipse.osee.framework.ui.skynet.OseePreferencePage"/>
+ </extension>
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ category="org.eclipse.osee.framework.ui.skynet.OseePreferencePage"
+ class="org.eclipse.osee.framework.ui.skynet.preferences.ConfigurationDetails"
+ id="org.eclipse.osee.framework.ui.skynet.preferences.HttpServerPreferences"
+ name="Configuration Details">
+ </page>
+ </extension>
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ category="org.eclipse.osee.framework.ui.skynet.OseePreferencePage"
+ class="org.eclipse.osee.framework.ui.skynet.preferences.ArbitrationServerPage"
+ id="org.eclipse.osee.framework.ui.skynet.preferences.ArbitrationServerPreferences"
+ name="Arbitration Server">
+ </page>
+ </extension>
+
+ <extension point="org.eclipse.help.contexts">
+ <contexts file="contexts/artifactExplorerContexts.xml"/>
+ <contexts file="contexts/artifactSearchContexts.xml"/>
+ <contexts file="contexts/branchManagerContexts.xml"/>
+ <contexts file="contexts/changeReportContexts.xml"/>
+ <contexts file="contexts/contexts.xml"/>
+ <contexts file="contexts/relationPageContexts.xml"/>
+ <contexts file="contexts/revisionHistoryContexts.xml"/>
+ <contexts file="reference/queryLog/contexts.xml"/>
+ <contexts file="reference/quickSearch/contexts.xml"/>
+ <contexts file="reference/contexts.xml"/>
+ <contexts file="contexts/mergeMangerContexts.xml">
+ </contexts>
+ </extension>
+ <extension point="org.eclipse.help.toc">
+ <toc file="reference/toc.xml" primary="true"/>
+ <toc file="reference/skynet_toc.xml" primary="false"/>
+ </extension>
+ <extension id="org.eclipse.osee.framework.ui.skynet" name="OSEE" point="org.eclipse.ui.views">
+ <view class="org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultView" icon="images/results.gif" category="osee.jdk.core.category" name="Results" id="org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultView">
+ </view>
+ <view allowMultiple="true" category="osee.jdk.core.category" class="org.eclipse.osee.framework.ui.skynet.ArtifactExplorer" icon="images/artifact_explorer.gif" id="org.eclipse.osee.framework.ui.skynet.ArtifactExplorer" name="Artifact Explorer"/>
+ <view allowMultiple="true" category="osee.jdk.core.category" class="org.eclipse.osee.framework.ui.skynet.group.GroupExplorer" icon="images/group.gif" id="org.eclipse.osee.framework.ui.skynet.group.GroupExplorer" name="OSEE Group Explorer"/>
+ <category id="osee.jdk.core.category" name="OSEE"/>
+ <view allowMultiple="true" category="osee.jdk.core.category" class="org.eclipse.osee.framework.ui.skynet.history.RevisionHistoryView" icon="images/edit.gif" id="org.eclipse.osee.framework.ui.skynet.history.RevisionHistoryView" name="Resource History"/>
+ <view allowMultiple="false" category="osee.jdk.core.category" class="org.eclipse.osee.framework.ui.skynet.branch.BranchView" icon="images/branch.gif" id="org.eclipse.osee.framework.ui.skynet.branch.BranchView" name="Branch Manager"/>
+ <view allowMultiple="false" category="osee.jdk.core.category" class="org.eclipse.osee.framework.ui.skynet.queryLog.QueryLogView" icon="images/query_log.gif" id="org.eclipse.osee.framework.ui.skynet.QueryLogView" name="Query Log"/>
+ <view allowMultiple="false" category="osee.jdk.core.category" class="org.eclipse.osee.framework.ui.skynet.search.QuickSearchView" icon="images/artifact_search.gif" id="org.eclipse.osee.framework.ui.skynet.QuickSearchView" name="Quick Search"/>
+ <view allowMultiple="true" category="osee.jdk.core.category" class="org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerView" icon="images/skywalker.gif" id="org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerView" name="Sky Walker"/>
+ <view allowMultiple="true" category="osee.jdk.core.category" class="org.eclipse.osee.framework.ui.skynet.widgets.xcommit.CommitManagerView" icon="images/branch.gif" id="org.eclipse.osee.framework.ui.skynet.widgets.xcommit.CommitManagerView" name="Commit Manager"/>
+ <view
+ allowMultiple="true"
+ category="osee.jdk.core.category"
+ class="org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeView"
+ icon="images/branch_merge.gif"
+ id="org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeView"
+ name="Merge View">
+ </view>
+ <view
+ allowMultiple="true"
+ category="osee.jdk.core.category"
+ class="org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeView"
+ icon="images/branch_change.gif"
+ id="org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeView"
+ name="Change Report">
+ </view>
+ </extension>
+ <extension point="org.eclipse.search.searchPages">
+ <page canSearchEnclosingProjects="true" class="org.eclipse.osee.framework.ui.skynet.search.ArtifactSearchPage" enabled="true" extensions="&quot;*:1&quot;" icon="images/artifact_search.gif" id="org.eclipse.osee.framework.ui.skynet.search.ArtifactSearchPage" label="Artifact Search" showScopeSection="false" sizeHint="&quot;250,250&quot;" tabPosition="1"/>
+ </extension>
+ <extension point="org.eclipse.search.searchResultViewPages">
+ <viewPage class="org.eclipse.osee.framework.ui.skynet.ArtifactSearchViewPage" id="org.eclipse.osee.framework.ui.skynet.ArtifactSearchViewPage" searchResultClass="org.eclipse.osee.framework.ui.skynet.search.ArtifactSearchResult"/>
+ </extension>
+ <extension point="org.eclipse.ui.newWizards">
+ <wizard class="org.eclipse.osee.framework.ui.skynet.branch.RootBranchWizard" icon="images/branch.gif" id="org.eclipse.osee.framework.ui.skynet.rootBranchWizard" name="Root Branch">
+ </wizard>
+ </extension>
+ <extension point="org.eclipse.osee.framework.ui.skynet.ArtifactReport">
+ <report class="org.eclipse.osee.framework.ui.skynet.search.report.ModificationReportJob"/>
+ </extension>
+ <extension point="org.eclipse.osee.framework.skynet.core.ArtifactFactory">
+ <ArtifactFactory classname="org.eclipse.osee.framework.ui.skynet.artifact.SkynetGuiArtifactFactory"/>
+ <ArtifactFactory classname="org.eclipse.osee.framework.ui.skynet.blam.BlamFactory"/>
+ </extension>
+ <extension point="org.eclipse.osee.framework.skynet.core.HttpServerRequest">
+ <IHttpServerRequest classname="org.eclipse.osee.framework.ui.skynet.DefineHttpServerRequest"/>
+ </extension>
+ <extension id="SrsProducer" name="SrsProducer" point="org.eclipse.osee.framework.ui.skynet.WordMlProducer">
+ <producer class="org.eclipse.osee.framework.ui.skynet.render.word.SrsProducer"/>
+ </extension>
+ <extension id="PruneWorkspace" name="PruneWorkspace" point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation className="org.eclipse.osee.framework.ui.skynet.blam.operation.PruneWorkspace"/>
+ </extension>
+ <extension id="DuplicateRelationOpertions" name="DuplicateRelationOpertions" point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation className="org.eclipse.osee.framework.ui.skynet.blam.operation.DuplicateRelationOpertions"/>
+ </extension>
+ <extension id="UniqueNumberOfCurrentOseeUsers" name="Unique Number Of Current Osee Users" point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation className="org.eclipse.osee.framework.ui.skynet.blam.operation.UniqueNumberOfCurrentOseeUsers"/>
+ </extension>
+ <extension id="DeleteTransaction" point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation className="org.eclipse.osee.framework.ui.skynet.blam.operation.DeleteTransaction"/>
+ </extension>
+
+ <extension id="SortRelationsByBranch" point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation className="org.eclipse.osee.framework.ui.skynet.blam.operation.SortRelationsByBranch"/>
+ </extension>
+
+ <extension id="LoadAllArtifactsOnBranch" point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation className="org.eclipse.osee.framework.ui.skynet.blam.operation.LoadAllArtifactsOnBranch"/>
+ </extension>
+
+ <extension id="FindArtifactsWithMinAttributeContraintProblems" point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation className="org.eclipse.osee.framework.ui.skynet.blam.operation.FindArtifactsWithMinAttributeContraintProblems"/>
+ </extension>
+ <extension id="FindInvalidUTF8Chars" point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation className="org.eclipse.osee.framework.ui.skynet.blam.operation.FindInvalidUTF8Chars"/>
+ </extension>
+ <extension id="UpdateFromParentBranch" name="Update From Parent Branch" point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation className="org.eclipse.osee.framework.ui.skynet.blam.operation.UpdateFromParentBranch"/>
+ </extension>
+ <extension
+ id="CopyTransactionDataToBaseline"
+ name="Copy Transaction Data To Baseline"
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.CopyTransactionDataToBaseline">
+ </Operation>
+ </extension>
+ <extension
+ id="ArtifactSnapshotAllItems"
+ name="Regenerate Artifact Preview Snapshots For All Items"
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.ArtifactSnapshotAllItems">
+ </Operation>
+ </extension>
+ <extension id="native" point="org.eclipse.osee.framework.ui.skynet.ArtifactRenderer">
+ <Renderer classname="org.eclipse.osee.framework.ui.skynet.render.NativeRenderer"/>
+ </extension>
+ <extension id="word" point="org.eclipse.osee.framework.ui.skynet.ArtifactRenderer">
+ <Renderer classname="org.eclipse.osee.framework.ui.skynet.render.WordTemplateRenderer"/>
+ </extension>
+ <extension id="tis" point="org.eclipse.osee.framework.ui.skynet.ArtifactRenderer">
+ <Renderer classname="org.eclipse.osee.framework.ui.skynet.render.TisRenderer"/>
+ </extension>
+ <extension id="url" point="org.eclipse.osee.framework.ui.skynet.ArtifactRenderer">
+ <Renderer classname="org.eclipse.osee.framework.ui.skynet.render.UrlRenderer"/>
+ </extension>
+ <extension id="default" point="org.eclipse.osee.framework.ui.skynet.ArtifactRenderer">
+ <Renderer classname="org.eclipse.osee.framework.ui.skynet.render.DefaultArtifactRenderer"/>
+ </extension>
+ <extension id="Whole document" point="org.eclipse.osee.framework.ui.skynet.ArtifactRenderer">
+ <Renderer classname="org.eclipse.osee.framework.ui.skynet.render.WholeDocumentRenderer"/>
+ </extension>
+ <extension
+ id="openOfficeWriter"
+ point="org.eclipse.osee.framework.ui.skynet.ArtifactRenderer">
+ <Renderer
+ classname="org.eclipse.osee.framework.ui.skynet.render.OpenOfficeWriterRenderer">
+ </Renderer>
+ </extension>
+ <extension point="org.eclipse.osee.framework.ui.skynet.ArtifactRendererTemplate">
+ <Template presentationType="ALL" templateFile="support/templates/PREVIEW_ALL.xml" templateName="PREVIEW_ALL"/>
+ <Template presentationType="ALL" templateFile="support/templates/Word Edit Template.xml" templateName="Word Edit Template"/>
+ <Template presentationType="ALL" templateFile="support/templates/PREVIEW Software Requirement with Recursion.xml" templateName="PREVIEW Software Requirement with Recursion"/>
+ <Template
+ presentationType="org.eclipse.osee.framework.ui.skynet.Template1"
+ templateFile="support/templates/PREVIEW_ALL_RECURSE.xml"
+ templateName="Preview Recurse">
+ </Template>
+ </extension>
+ <extension point="org.eclipse.osee.framework.ui.skynet.WordOutlineContentHandler">
+ <Handler class="org.eclipse.osee.framework.ui.skynet.handler.GeneralWordOutlineHandler" id="org.eclipse.osee.framework.ui.skynet.GeneralWordOutlineHandler" name="General Outline Documents"/>
+ </extension>
+ <extension point="org.eclipse.osee.framework.ui.skynet.OseeDictionary">
+ <OseeDictionary classname="org.eclipse.osee.framework.ui.skynet.widgets.SkynetSpellModifyDictionary"/>
+ <OseeDictionary classname="org.eclipse.osee.framework.ui.skynet.util.OseeMainDictionary"/>
+ </extension>
+ <extension point="org.eclipse.osee.framework.skynet.core.ArtifactAnnotation">
+ <ArtifactAnnotation classname="org.eclipse.osee.framework.ui.skynet.artifact.annotation.AttributeAnnotationHandler">
+ </ArtifactAnnotation>
+ </extension>
+ <extension point="org.eclipse.osee.framework.skynet.core.HttpServerRequest">
+ <IHttpServerRequest classname="org.eclipse.osee.framework.ui.skynet.httpRequests.ArtifactRequest">
+ </IHttpServerRequest>
+ </extension>
+ <extension point="org.eclipse.osee.framework.skynet.core.HttpServerRequest">
+ <IHttpServerRequest classname="org.eclipse.osee.framework.ui.skynet.httpRequests.BranchRequest">
+ </IHttpServerRequest>
+ </extension>
+ <extension point="org.eclipse.osee.framework.skynet.core.HttpServerRequest">
+ <IHttpServerRequest classname="org.eclipse.osee.framework.ui.skynet.httpRequests.ArtifactTreeRequest">
+ </IHttpServerRequest>
+ </extension>
+ <extension point="org.eclipse.osee.framework.skynet.core.HttpServerRequest">
+ <IHttpServerRequest classname="org.eclipse.osee.framework.ui.skynet.httpRequests.HttpImageRequest">
+ </IHttpServerRequest>
+ </extension>
+ <extension id="SkynetHttpServer" name="SkynetHttpServer" point="org.eclipse.core.runtime.applications">
+ <application>
+ <run class="org.eclipse.osee.framework.ui.skynet.SkynetHttpServerApplication">
+ </run>
+ </application>
+ </extension>
+ <extension id="AddCommonBranch" name="AddCommonBranch" point="org.eclipse.osee.framework.database.IDbInitializationTask">
+ <DatabaseTask classname="org.eclipse.osee.framework.ui.skynet.dbinit.AddCommonBranch">
+ </DatabaseTask>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.TemplateProvider">
+ <TemplateProvider
+ classname="org.eclipse.osee.framework.ui.skynet.templates.ArtifactTemplateProvider">
+ </TemplateProvider>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.XWidgetProvider">
+ <XWidgetProvider
+ classname="org.eclipse.osee.framework.ui.skynet.widgets.XBranchSelectWidgetProvider">
+ </XWidgetProvider>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.database.IDbInitializationTask"
+ id="SimpleTemplateProviderTask"
+ name="SimpleTemplateProviderTask">
+ <DatabaseTask
+ classname="org.eclipse.osee.framework.ui.skynet.templates.SimpleTemplateProviderDbTask">
+ </DatabaseTask>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.SimpleTemplateProviderTemplate">
+ <Template
+ File="support/templates/PREVIEW_ALL.xml">
+ <MatchCriteria
+ match="org.eclipse.osee.framework.ui.skynet.word PREVIEW PREVIEW_ARTIFACT">
+ </MatchCriteria>
+ <MatchCriteria
+ match="org.eclipse.osee.framework.ui.skynet.word PREVIEW">
+ </MatchCriteria>
+ <MatchCriteria
+ match="org.eclipse.osee.framework.ui.skynet.word DIFF">
+ </MatchCriteria>
+ </Template>
+ <Template
+ File="support/templates/PREVIEW_ALL_RECURSE.xml">
+ <MatchCriteria
+ match="org.eclipse.osee.framework.ui.skynet.word PREVIEW PREVIEW_WITH_RECURSE">
+ </MatchCriteria>
+ </Template>
+ <Template
+ File="support/templates/Word Edit Template.xml">
+ <MatchCriteria
+ match="org.eclipse.osee.framework.ui.skynet.word EDIT">
+ </MatchCriteria>
+ <MatchCriteria
+ match="org.eclipse.osee.framework.ui.skynet.tis Test Information Sheet EDIT">
+ </MatchCriteria>
+ </Template>
+ <Template
+ File="support/templates/Word Edit Template.xml">
+ <MatchCriteria
+ match="org.eclipse.osee.framework.ui.skynet.word MERGE">
+ </MatchCriteria>
+ <MatchCriteria
+ match="org.eclipse.osee.framework.ui.skynet.word MERGE_EDIT">
+ </MatchCriteria>
+ </Template>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.CreateNewUser">
+ </Operation>
+ </extension>
+ <extension name="The menus for the SearchResultsView." point="org.eclipse.ui.menus">
+ <menuContribution locationURI="popup:org.eclipse.osee.framework.ui.skynet.ArtifactSearchView">
+ <command
+ commandId="org.eclipse.ui.edit.delete">
+ </command>
+ <separator
+ name="artifactSearchViewDeleteSeparator"
+ visible="true">
+ </separator>
+ <command commandId="org.eclipse.osee.framework.ui.skynet.skywalker.command">
+ </command>
+ <separator name="artifactSearchViewCopySeparator" visible="true">
+ </separator>
+ <command commandId="org.eclipse.ui.edit.copy">
+ </command>
+ <separator
+ name="artifactSearchViewPurgeSeparator"
+ visible="true">
+ </separator>
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.purge.command">
+ </command>
+ </menuContribution>
+ </extension>
+ <extension
+ name="The merge view"
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ locationURI="popup:org.eclipse.osee.framework.ui.skynetd.widgets.xmerge.MergeView">
+ <separator
+ name="org.eclipse.osee.framework.ui.skynet.mergeView.previewArtifactRecurse.separator"
+ visible="true">
+ </separator>
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.revealArtifactInExplorer.command">
+ </command>
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.resource.command">
+ </command>
+ <separator
+ name="org.eclipse.ui.edit.ChangeView.revert.seperator"
+ visible="true">
+ </separator>
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.changeReportView.revertAttribute.command"
+ label="Revert Source Attribute...">
+ </command>
+ </menuContribution>
+ </extension>
+ <extension
+ name="The new change view"
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ locationURI="popup:org.eclipse.osee.framework.ui.skynetd.widgets.xchange.ChangeView">
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.openInEdit.command"
+ label="Open Final Version">
+ </command>
+ <separator
+ name="org.eclipse.osee.framework.ui.skynet.ChangeView.wordChangesMadeTo.seperatro"
+ visible="true">
+ </separator>
+ <menu
+ label="Preview">
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.previewArtifact.command">
+ </command>
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.previewArtifactRecurse.command">
+ </command>
+ </menu>
+ <separator
+ name="org.eclipse.osee.framework.ui.skynet.changeReportView.previewArtifactRecurse.separator"
+ visible="true">
+ </separator>
+ <separator
+ name="org.eclipse.osee.framework.ui.skynet.changeView.previewArtifactRecurse.separator"
+ visible="true">
+ </separator>
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.revealArtifactInExplorer.command">
+ </command>
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.resource.command">
+ </command>
+ <separator
+ name="org.eclipse.osee.framework.ui.skynet.changeView.wordChangeReport.separator"
+ visible="true">
+ </separator>
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.changeReportView.viewWordChangeReport.command">
+ </command>
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.viewerReport">
+ </command>
+ <separator
+ name="org.eclipse.osee.framework.ui.skynet.ChangeView.viewerReport.separator"
+ visible="true">
+ </separator>
+ <command
+ commandId="org.eclipse.ui.edit.copy">
+ </command>
+ <separator
+ name="org.eclipse.ui.edit.ChangeView.copy.seperator"
+ visible="true">
+ </separator>
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.changeReportView.revertArtifact.command">
+ </command>
+ <command
+ commandId="org.eclipse.osee.framework.ui.skynet.changeReportView.revertAttribute.command">
+ </command>
+ <separator
+ name="org.eclipse.ui.edit.ChangeView.revert.seperator"
+ visible="true">
+ </separator>
+ </menuContribution>
+ </extension>
+ <extension
+ id="DeleteArchivedBranches"
+ name="Delete Archived Branches"
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.DeleteArchivedBranches">
+ </Operation>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.UpdateArtifactTypeImage">
+ </Operation>
+ </extension>
+ <extension
+ id="ValidateArtifactsToDelete"
+ name="ValidateArtifactsToDelete"
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.ValidateArtifactsToDelete">
+ </Operation>
+ </extension>
+ <extension
+ id="SwitchParentBranch"
+ name="Switch Parent Branch"
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.SwitchParentBranch">
+ </Operation>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.XWidgetPopulateExample">
+ </Operation>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.UpdateCurrentColumn">
+ </Operation>
+ </extension>
+ <extension
+ id="SetRequirementCategory"
+ name="SetRequirementCategory"
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.SetRequirementCategory">
+ </Operation>
+ </extension>
+ <extension
+ id="ExportArtifacts"
+ name="ExportArtifacts"
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.ExportArtifacts">
+ </Operation>
+ </extension>
+ <extension
+ id="Database Health"
+ name="Database Health"
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.DatabaseHealth">
+ </Operation>
+ </extension>
+ <extension
+ id="CommitTransactions"
+ name="CommitTransactions"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.CommitTransactions">
+ </Task>
+ </extension>
+ <extension
+ id="ArtifactTxCurrent"
+ name="ArtifactTxCurrent"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.ArtifactTxCurrent">
+ </Task>
+ </extension>
+ <extension
+ id="AttributeTxCurrent"
+ name="AttributeTxCurrent"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.AttributeTxCurrent">
+ </Task>
+ </extension>
+ <extension
+ id="RelLinkTxCurrent"
+ name="RelLinkTxCurrent"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.RelLinkTxCurrent">
+ </Task>
+ </extension>
+ <extension
+ id="DuplicateAttributeCheck"
+ name="DuplicateAttributeCheck"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.DuplicateAttributes">
+ </Task>
+ </extension>
+ <extension
+ id="CleanUpAddressingData"
+ name="CleanUpAddressingData"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.CleanUpAddressingData">
+ </Task>
+ </extension>
+ <extension
+ id="CleanUpAddressingData"
+ name="CleanUpAddressingData"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.CleanUpAddressingData">
+ </Task>
+ </extension>
+ <extension
+ id="RelationIntegrityData"
+ name="RelationIntegrityData"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.RelationDatabaseIntegrityCheck">
+ </Task>
+ </extension>
+ <extension
+ id="CleanUpBackingData"
+ name="CleanUpBackingData"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.CleanUpBackingData">
+ </Task>
+ </extension>
+ <extension
+ id="CommitedNewAndDeleted"
+ name="CommitedNewAndDeleted"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.CommitedNewAndDeleted">
+ </Task>
+ </extension>
+ <extension
+ id="RemoveAttributesWithoutArtifacts"
+ name="RemoveAttributesWithoutArtifacts"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.RemoveAttributesWithoutArtifacts">
+ </Task>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.RelationOrderAnalysisOnBranch">
+ </Operation>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.UpdateWordFormattedContentAttributes">
+ </Operation>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.CleanUpAttrFromDeletedArt">
+ </Task>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.ReportAttributeTypesUsageBlam">
+ </Operation>
+ </extension>
+ <extension
+ id="ParseWindowsDirectoryListing"
+ name="ParseWindowsDirectoryListing"
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.ParseWindowsDirectoryListing">
+ </Operation>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.ui.skynet.BlamOperation">
+ <Operation
+ className="org.eclipse.osee.framework.ui.skynet.blam.operation.FixTemplateContentArtifacts">
+ </Operation>
+ </extension>
+ <extension
+ id="DuplicateRelationCheck"
+ name="DuplicateRelationCheck"
+ point="org.eclipse.osee.framework.ui.skynet.DBHealthTask">
+ <Task
+ class="org.eclipse.osee.framework.ui.skynet.dbHealth.DuplicateRelationCheck">
+ </Task>
+ </extension>
+ <extension
+ id="org.eclipse.osee.framework.ui.skynet.expandtree.binding"
+ name="Expand Tree"
+ point="org.eclipse.ui.bindings">
+ <key
+ commandId="org.eclipse.osee.framework.ui.skynet.expandTree.command"
+ contextId="org.eclipse.ui.contexts.window"
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+ sequence="M1++">
+ </key>
+ </extension>
+</plugin>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_1.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_1.gif
new file mode 100644
index 00000000000..a80dbf5e409
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_1.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_3.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_3.gif
new file mode 100644
index 00000000000..4ad0f15515c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_3.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_4.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_4.gif
new file mode 100644
index 00000000000..b052610b2f9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_4.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_5.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_5.gif
new file mode 100644
index 00000000000..92f41da4873
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_5.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_Manager.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_Manager.html
new file mode 100644
index 00000000000..b2676a1740e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/Merge_Manager.html
@@ -0,0 +1,481 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Merge Manager View</title>
+</head>
+
+<body>
+
+<h1>Merge Manager View</h1>
+<img border="0" src="Merge_1.gif"><br>
+&nbsp;<h2>Purpose</h2>
+<p>The Merge Manager is used to resolve conflicts that arise when doing
+development on parallel branches.&nbsp; The Merge Manager makes conflicts that
+arise easily identifiable and then provides the means for resolving the
+conflicts, so that the working branch can be committed.</p>
+<h2>Icons</h2>
+<ul>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/chkbox_disabled.gif" width="16" height="16">&nbsp;
+ Resolution has been started for the conflict</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/accept.gif" width="16" height="16">&nbsp;
+ Conflict has been resolved and is ready to be committed, In the Merge column
+ it means that the Source and Destination Branches have the same value even
+ though they were both changed. </li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/chkbox_enabled_conflicted.gif" width="16" height="16">&nbsp;
+ After a conflict has been marked as resolved the value changed on the source
+ or destination branch</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/issue.gif" width="16" height="16">&nbsp;
+ A conflict that provides the user special information but does not need to
+ be resolved</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/red_light.gif" width="16" height="16">&nbsp;
+ A conflict that can not be resolved except by reverting the Artifact or
+ Attribute, because it was deleted on the Destination Branch</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/blue_d.gif" width="16" height="16">&nbsp;
+ Shows that the item defined by the column it is in has the Destination
+ Branches value</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/green_s.gif" width="16" height="16">&nbsp;
+ Shows that the item defined by the column it is in has the Source Branches
+ value</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/yellow_m.gif" width="16" height="16">&nbsp;
+ Shows that the item defined by the column it is in has a new value that is
+ neither the Source Branch nor Destination Branch value.</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/conflict.gif" width="16" height="16">&nbsp;
+ Shows that the conflict has not been given an initial value </li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/user.gif" width="16" height="16">&nbsp;
+ Opens the Associated Artifact for the merge</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/branch_change_source.gif" width="16" height="16">&nbsp;
+ Opens up the Change Report for the Source Branch</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/branch_change_dest.gif" width="16" height="16">&nbsp;
+ Opens up the Change Report for the Destination Branch</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/refresh.gif" width="16" height="16">&nbsp;
+ Refreshes the Merge Manger view to find new conflicts</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/customize.gif" width="16" height="16">&nbsp;
+ Allows the user to customize the Merge Manager tables</li>
+ <li>
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/bug.gif" width="16" height="16">&nbsp;
+ Report a bug with the Merge Manager</li>
+</ul>
+<h2>Overview</h2>
+<p>The Merge Manager is in place to find conflicts and help users resolve these
+conflicts.&nbsp; A conflict exists if the value of an attribute/artifact has
+changed on both the Destination and Source Branches.&nbsp; For reference the
+Source Branch is the users working branch.&nbsp; It is the branch that the user
+has been making changes to and would like to then add back into the Destination
+Branch or Baseline Branch.&nbsp; Both branches are identified by name in the
+header of the Merge Manager.&nbsp; </p>
+<p>Depending upon the conflict found, the user may have several choices for
+resolution.&nbsp; These include </p>
+<ul>
+ <li>Accept the value on the Source Branch and overwrite the value on the
+ Destination Branch</li>
+ <li>Accept the value on the Destination Branch and do not add any of the
+ Source Branch changes, (These will still show up as merged on
+ <a href="change_table.html">Change Reports</a>)</li>
+ <li>Create a solution that is a combination of the two changes </li>
+ <li>Revert the changes on the Source Branch&nbsp; (This is the only
+ available solution when the Artifact/Attribute was deleted on the
+ Destination Branch, will show up as no change on the
+ <a href="change_table.html">Change Report</a>)</li>
+ <li>Do nothing (only possible for informational conflicts)</li>
+</ul>
+<p>Committing of Branches is blocked until all conflicts are resolved.</p>
+<h2>The GUI</h2>
+<p>The GUI is organized to provide the user with an ability to quickly identify
+conflicts.</p>
+<ul>
+ <li><b>The Heading</b> - The Heading contains text to help identify what is
+ being merged. It identifies the Source Branch, and the Destination Branch.&nbsp;
+ It also provides the user with information about how many conflicts there
+ are and if they have been resolved.&nbsp; The Heading also contains easy
+ launch icons for additional tools in connection with the Merge Manager.</li>
+ <li><b>The Conflict Resolution Column</b> - This column provides the user
+ information about the state of the conflict.&nbsp; A blank entry in the
+ column means that the conflict is new and has not had any actions performed
+ on it. A
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/chkbox_disabled.gif" width="16" height="16">
+ indicates that conflict is in the modified state.&nbsp; This means the user
+ has begun merging the conflict but has not marked it as resolved.&nbsp; The
+ user may transition it into the resolved state by left clicking on the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/chkbox_disabled.gif" width="16" height="16">
+ icon. The
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/accept.gif" width="16" height="16">
+ icon indicates the user has marked the conflict as resolved.&nbsp; This
+ means they have selected a value for it and have verified the value going in
+ is what they want.&nbsp; No additional changes are allowed on a conflict
+ once it is in the resolved state.&nbsp; It can be placed back into the
+ modified state by left clicking on the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/accept.gif" width="16" height="16">
+ icon. The
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/chkbox_enabled_conflicted.gif" width="16" height="16">
+ means that a conflict was in the resolved state but a new change has
+ occurred on either the Source or Destination Branch.&nbsp; It serves to
+ notify the user that the conflict was not in the finalized state when they
+ resolved the conflict.&nbsp; The user can return to resolved state by left
+ clicking on the&nbsp;
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/chkbox_enabled_conflicted.gif" width="16" height="16">
+ icon.&nbsp; The
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/red_light.gif" width="16" height="16">
+ icon indicates that an Artifact or Attribute must be reverted on the Source
+ Branch.&nbsp; This indicates that the Artifact/Attribute was deleted on the
+ Destination Branch and can not have a change committed onto it.&nbsp; The
+ user must abandon any change to that artifact attribute by using the revert
+ command.&nbsp; Once the Artifact/Attribute has been reverted the Merge
+ Manager will be refreshed and the conflict will be removed. The
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/issue.gif" width="16" height="16">icon
+ indicates an informational conflict.&nbsp; The user does not have to take
+ any action to resolve these conflicts.&nbsp; It just provides the
+ information that the Source Branch deleted the Artifact/Attribute but the
+ Destination Branch has been modified.&nbsp; The user is free to act as
+ desired based on the provided information.</li>
+ <li><b>The Artifact Name Column</b> - This column tells which artifact the
+ conflict occurred on.&nbsp; If the name is different between the Source and
+ Destination Branches, (this will show up as a conflict) it will at first
+ showing use the Source Branch value and then use whatever the name is
+ resolved to be after that has occurred.</li>
+ <li><b>The Artifact Type Column</b> - Simply lists what type of Artifact is
+ conflicted</li>
+ <li><b>The Conflicting Item Column</b> - In the case of an attribute
+ conflict it states what attribute type is conflicting.&nbsp; In the case of
+ an artifact conflict it will always say &quot;Artifact State&quot;</li>
+ <li><b>The Source Value Column</b> - When possible this column tells what
+ value the Source Branch has for the conflict.&nbsp; It will always have a
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/green_s.gif" width="16" height="16">
+ icon. If the conflicting item is Word Formatted Content the words &quot;Stream
+ data&quot; will be shown.&nbsp; For artifact conflicts it will either show
+ &quot;Modified&quot; or &quot;Deleted&quot;.&nbsp; Left clicking on the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/green_s.gif" width="16" height="16">
+ icon will populate the Merge Branch with value found on the Source Branch.</li>
+ <li><b>The Destination Value Column</b> - When possible this column tells
+ what value the Destination Branch has for the conflict.&nbsp; It will always
+ have a
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/blue_d.gif" width="16" height="16">
+ icon. If the conflicting item is Word Formatted Content the words &quot;Stream
+ data&quot; will be shown.&nbsp; For artifact conflicts it will either show
+ &quot;Modified&quot; or &quot;Deleted&quot;.&nbsp; Left clicking on the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/blue_d.gif" width="16" height="16">
+ icon will populate the Merge Branch with value found on the Destination
+ Branch.</li>
+ <li><b>The Merge Value Column</b> - The Merged Value column serves to show
+ the user the value that has been selected for use when the Branch is
+ committed.&nbsp; The Merge value is actually kept on a new &quot;Merge Branch&quot;
+ and so any changes made to it will not affect the value seen on the Source
+ or Destination Branches.&nbsp; When the Merge Value column is blank with no
+ icon, the conflict is informational and no actions are provided.&nbsp; When
+ the Merge Value column contains a&nbsp;
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/conflict.gif" width="16" height="16">icon
+ the value has not been set.&nbsp; This is the icon that should be shown for all
+ conflicts (Except informational conflicts, or same value conflicts) the
+ first time the user brings up the merge manager.&nbsp; The
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/green_s.gif" width="16" height="16">
+ icon indicates that the Source Value was selected as the final value.&nbsp;
+ The actual Source Value text will also be shown in this column if possible.
+ The
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/blue_d.gif" width="16" height="16">
+ icon indicates that the Destination Value was selected as the final value.&nbsp;
+ The Destination Value text will also be shown in this column if possible.
+ The
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/yellow_m.gif" width="16" height="16">
+ icon will be shown when a new value has been selected for the final value.&nbsp;
+ This indicates that the user has modified the final value so that it is no
+ longer a copy of the Source or Destination, but some variation thereof.&nbsp;
+ A
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/accept.gif" width="16" height="16">
+ icon indicates that although both the Source Branch Value and Destination
+ Branch Value have changed they were both changed to the same value and so
+ there is not really a conflict. Left clicking on the icon in the Merge Value
+ column will bring up the Merge Wizard or in the case of un-resolvable
+ conflicts a dialog offering the ability to revert the conflicting item.</li>
+ <li><b><a name="The_Right_Click_Menu">The Right Click Menu</a></b> - Right clicking on any row will display a
+ menu with options for dealing with conflicts.&nbsp;
+<ul>
+ <li>&quot;Set Source as Default Branch&quot; - This selection is a quick way to set
+ the Source Branch as the default branch.&nbsp; If the Source Branch is
+ already set as the Default Branch, the menu item will be grayed out and
+ there will be a check mark next to the option.</li>
+ <li>&quot;Set Destination as Default Branch&quot; - This selection is a quick way to
+ set the Destination Branch as the default branch.&nbsp; If the Destination
+ Branch is already set as the Default Branch, the menu item will be grayed
+ out and there will be a check mark next to the option.</li>
+ <li>&quot;Edit Merge Artifact&quot; - This option is only enabled for Word Formatted
+ Content conflicts and will bring up the Merge Artifact in Word.&nbsp; The
+ Merge Artifact is a separate version of the artifact that will preserve the
+ details of the Merge, and will be reviewable in the Merge Manager after an
+ artifact is committed.&nbsp; IMPORTANT: If the user makes the changes to
+ their Source Branch instead of on the Merge Artifact the Merge Manager will
+ incorrectly represent the merge in future reviews.</li>
+ <li>&quot;Generate Three Way Merge&quot; - Will generate a <a href="#Three_Way_Merge">
+ Three Way Merge</a> for the Word Formatted Content.</li>
+ <li>&quot;Preview&quot; -&gt; &quot;Preview Source Artifact&quot;, &quot;Preview Destination Artifact&quot;,
+ &quot;Preview Merge Artifact&quot; will show a preview in Word of the Artifact based
+ on the version selected.</li>
+ <li>&quot;Differences&quot; -&gt; &quot;Show Source Branch Differences&quot;, &quot;Show Destination
+ Branch Differences&quot;, &quot;Show Source/Destination Differences&quot;, &quot;Show
+ Source/Merge Differences&quot;, &quot;Show Destination/Merge Differences&quot;&nbsp; will
+ generate differences based upon which option is selected.&nbsp; Allows the
+ user to see how different versions of the artifact differ.</li>
+ <li>&quot;Reveal Artifact in Explorer&quot; - This option is only available when
+ either the Source or Destination Branch is set as the default branch.&nbsp;
+ When such is the case this will reveal the artifact in the Artifact Explorer
+ for the Branch that is the default branch.</li>
+ <li>&quot;Resource History&quot; - This option is only available when either the
+ Source or Destination Branch is set as the default branch.&nbsp; When such
+ is the case this will reveal the resource history of the artifact on the
+ Branch that is the default branch.</li>
+</ul></li>
+</ul>
+<p>&nbsp;</p>
+<h2>Resolution Of Conflicts</h2>
+<p>For <a href="#Word_Formatted_Content">Word Formatted Content</a> conflicts see the section below.&nbsp; This
+section addresses all other conflicts.</p>
+<ul>
+ <li><b>Informational Conflicts</b><p>Informational conflicts are identified by
+ the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/issue.gif" width="16" height="16">
+ icon in the conflict resolution column in the GUI.&nbsp; Informational
+ conflicts require no action by the user, and no actions are provided in the
+ GUI other than the ability to use the <a href="#The_Right_Click_Menu">right
+ click menu</a> to examine the artifact using the tools provided there.&nbsp;
+ An informational conflict is generated when the Source branch deletes an
+ Artifact or an Attribute and that same Artifact or Attribute was modified on
+ the Destination Branch.&nbsp; This is to allow the user the opportunity to
+ review a change that was made on the Destination Branch that&nbsp; might
+ make them want to take some action in regards to their deletion.</p>
+ <p>&nbsp;</li>
+ <li><b>Un-resolvable Conflicts</b><p>Un-resolvable Conflicts are identified
+ by the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/red_light.gif" width="16" height="16">
+ icon in the conflict resolution column of the GUI. This conflicts require
+ the user to revert the Artifact or Attribute that caused the conflict on the
+ Source Branch.&nbsp; An Un-resolvable conflict is caused when the
+ Destination Branch deletes an Artifact or Attribute while the Source Branch
+ modifies that same Artifact, Attribute.&nbsp; The reason the user must
+ revert their changes is that committing in their changes would essentially
+ undo that deletion and bring that item back into existence. If the deletion
+ should not have happened the user needs to talk with the committer of the
+ deletion to resolve the issue.</p>
+ <p>&nbsp;</li>
+ <li><b>Attribute Conflicts</b><p>Attribute Conflicts occur when both the
+ Destination and Source branch modify an attribute.&nbsp; This section will
+ cover all attributes except <a href="#Word_Formatted_Content">Word Formatted
+ Content</a> Attributes.&nbsp; The resolution of these Attribute values
+ provide three options.&nbsp; Use the Source attribute value, use the
+ destination attribute value,&nbsp; use a modified value that is some
+ combination of the source and destination values. In order to use the Source
+ Value the user may left click on the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/green_s.gif" width="16" height="16">
+ icon in the Source Value column.&nbsp; This will copy the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/green_s.gif" width="16" height="16">
+ icon and the value displayed in the Source Value column into the Merged
+ Value Column.&nbsp; In order to use the Destination Value the user may left
+ click on the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/blue_d.gif" width="16" height="16">
+ icon in the Destination Value column.&nbsp; This will copy the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/blue_d.gif" width="16" height="16">
+ icon and the value displayed in the Source Value column into the Merged
+ Value Column.&nbsp; Both of these options are also available from the
+ <a href="#Wizard">Merge
+ Wizard</a> (Left click on the icon in the Merge Value column) with the &quot;Load
+ Source Data&quot; and &quot;Load Destination Value&quot; buttons.&nbsp; In order to modify
+ the value to some combination the user must bring up the Merge Wizard which
+ has an embedded editor specific to the attribute that needs to be modified.&nbsp;
+ Once the value is accurately entered in the editor the user may than select
+ &quot;Finish&quot;&nbsp; This will place a
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/yellow_m.gif" width="16" height="16">
+ icon in the Merged Value column along with the new value. The user then right clicks on the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/chkbox_disabled.gif" width="16" height="16">
+ in the Conflict Status Column so that the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/accept.gif" width="16" height="16">
+ icon is displayed.&nbsp; The conflict is resolved and will allow the
+ Source Branch to be committed.</p>
+ <p align="center">
+ <a name="Wizard">
+ <img border="0" src="Merge_4.gif"></a> </p>
+ <p align="center">
+ <font size="4">The Merge Wizard</font></p>
+ </li>
+</ul>
+<h2>Resolution Of Conflicts (<a name="Word_Formatted_Content">Word Formatted Content</a>)</h2>
+<p>Resolution of conflicts is provided in two different ways.&nbsp; They can
+either copy and paste the changes into their Merge Artifact document or they can
+generate a Three Way Merge and accept the changes that show up in the generated
+document.&nbsp; Both approaches have their advantages and disadvantages and are
+best suited for different situations.&nbsp; They can also be combined where the
+situation warrants it, however the three way merge must always be done first if
+this is the case.</p>
+<ul>
+ <li>
+ <h3><b>Manual Merging</b></h3>
+ <ul>
+ <li><b>Usage</b><ul>
+ <li>When one version of the artifact has many changes and the other
+ version has very few changes</li>
+ <li>When both files have formatting changes</li>
+ <li>When three way merging generates a complex document</li>
+ <li>When both versions edit the same text in multiple places</li>
+ </ul>
+ <p>Manual Merging is the process of combining the Source Branch changes
+ and the destination branch changes manually by copying and pasting them
+ into the Merge Artifact document.&nbsp; The Merge Artifact is a separate
+ version of the artifact that will preserve the details of the Merge, and
+ will be reviewable in the Merge Manager after an artifact is committed.&nbsp;
+ IMPORTANT: If the user makes the changes to their Source Branch instead
+ of on the Merge Artifact the Merge Manager will incorrectly represent
+ the merge in future reviews.</p>
+ The following procedure illustrates the functionality available
+ to facilitate a manual merge.</p>
+ <p>The user will first either launch the <a href="#WFC Wizard">Merge Wizard</a> by left clicking
+ on the icon in the Merge Value column of the GUI or they may select the
+ functionality from the <a href="#The_Right_Click_Menu">right click menu</a> for the conflict in question.&nbsp;
+ The first thing to do is to bring up a word document comparison of both
+ the Source Branch Version and the Destination Branch Version.&nbsp;
+ These documents will show all of the changes that have been made to
+ these two artifacts since the Source Branch was created.&nbsp; To launch
+ these difference's the user either select &quot;Show Source Diff&quot; and &quot;Show
+ Destination Diff&quot; from the wizard or &quot;Differences&quot;-&gt;&quot;Show Source Branch
+ Differences&quot; and &quot;Differences&quot;-&gt;&quot;Show Destination Branch Differences&quot;
+ from the right click menu</a>.&nbsp; These will bring up the two
+ difference's in different Word instances with window labels to allow the
+ user to differentiate the files.&nbsp; The intention of bringing up
+ these difference's is twofold.&nbsp; Firstly, it allows the user to
+ identify the file that has the most changes.&nbsp; Secondly, it will
+ come in use later when the user copy's and paste's changes into the
+ Merge document.</p>
+ <p>Upon identifying the branch that has the most changes the user should
+ then set the Merge Artifact to contain that branches value.&nbsp; This
+ is done by either selecting &quot;Populate with Source Data&quot; or &quot;Populate
+ with Destination Data&quot; from the Merge Wizard or left clicking on the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/green_s.gif" width="16" height="16">
+ icon or the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/blue_d.gif" width="16" height="16">
+ icon in the Source and Destination Value columns in the Merge Manager
+ GUI.&nbsp; The user can then bring up the Merge Artifact for editing by
+ clicking on &quot;Edit Merge Artifact&quot; in the Merge Wizard or in the right
+ click menu.&nbsp; The Document that comes up contains the Merge Artifact
+ and any changes made to it will be reflected when the Source Branch is
+ committed.&nbsp; The user can than begin to copy the changes from the
+ diff report that showed the fewest changes (opposite of the one chosen
+ as the baseline).&nbsp; After all changes have been migrated into the
+ Merge Artifact document the user than saves the document, which will
+ preserve the Merge Artifact value.&nbsp; The user should be aware that
+ any changes they do not wish to preserve from either the Source or
+ Destination version of the Artifact need to be omitted on the Merge
+ Artifact. </p>
+ <p>The user then right clicks on the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/chkbox_disabled.gif" width="16" height="16">
+ in the Conflict Status Column so that the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/accept.gif" width="16" height="16">
+ icon is displayed.&nbsp; The conflict is resolved and will allow the
+ Source Branch to be committed.</p>
+ <p>&nbsp;</p></li>
+ </ul>
+ </li>
+ <li>
+ <h3 align="left"><b><a name="Three_Way_Merge">Three Way Merge</a></b></h3>
+ <ul>
+ <li>
+ <p align="left"><b>Usage</b><ul>
+ <li>
+ <p align="left">When both versions have many changes or both versions have few
+ changes.</li>
+ <li>
+ <p align="left">When only one file has formatting changes (Must be combined with
+ Manual Merging in this case)</li>
+ <li>
+ <p align="left">When three way merging generates an understandable document</li>
+ </ul>
+ <p align="left">Three Way Merging leverages Microsoft Words ability to merge
+ documents.&nbsp; At the beginning of any Word Formatted Content merge it
+ is recommended that user generate a Three Way Merge and check the
+ complexity of the document.&nbsp; In most cases Three Way Merging is a
+ quicker way to merge two documents, however in some cases the Three Way
+ Merge will generate a document that is difficult to use and understand.&nbsp;
+ This usually arises when the Source and Destination branches have edited
+ the same text or if one of the branches has touched a large percentage
+ of the file.&nbsp; As it runs fairly quickly it is always a good idea to
+ run it at the beginning of a Merge to check if it is useful.&nbsp; Three
+ Way Merging only allows the user to maintain format changes from one of
+ the documents.&nbsp; If format changes are made on both documents the
+ Three Way Merge will prompt the user as to which format changes they
+ would like to maintain, the user will then need to copy the format
+ changes from the other document into the Merge Artifact document
+ manually.</p>
+ <p align="left">A Three Way Merge is generated by selecting Generate Three Way Merge
+ from either the <a href="#WFC Wizard">Merge Wizard</a> or the <a href="#The_Right_Click_Menu">right click menu</a>.&nbsp; IMPORTANT:
+ Generating a Three Way Merge will discard any changes made to the Merge
+ Artifact, therefore a prompt will make sure this is the intended
+ operation.&nbsp; If a user had started a Three Way Merge previously but
+ had not completed the Merge the user is also given the option of
+ continuing the previous Merge in the prompt (Selecting Edit Merge
+ Artifact will also have this effect). The following is an example of a
+ Three Way Merge in Word.<p align="center"><img border="0" src="Merge_3.gif">
+ </p>
+ <p align="center"><font size="4">A Three Way Merge</font></p><p>
+ The changes made by the Source Branch and Destination Branch are shown
+ in different colors in the Word Document.&nbsp; In this particular case
+ the changes made in Red were done by the Source Branch and the changes
+ made in Blue were done on the Destination Branch.&nbsp; The color scheme
+ is not consistent and the user needs to verify which color equates to
+ which changes by hovering there mouse over one of the changes.&nbsp; A
+ popup will be shown which will identify the author.&nbsp; The following
+ <a href="http://office.microsoft.com/en-us/word/HA010983881033.aspx">
+ Guide</a> will explain how to resolve the changes in the document.
+ IMPORTANT: All changes must be either accepted or rejected before the
+ conflict can be marked as resolved.&nbsp; After the user has resolved
+ all the changes it is a good idea to do generate a difference document
+ between the Source Artifact and the Merge Artifact, and the Destination
+ Artifact and the Merge Artifact by selecting &quot;Show Source/Merge Diff&quot;
+ and &quot;Show Destination/Merge Diff&quot; from the merge Wizard or
+ &quot;Differences&quot;-&gt;&quot;Show Source/Merge Differences&quot; and &quot;Differences&quot;-&gt;&quot;Show
+ Destination/Merge Differences&quot; from the
+ <a href="#The_Right_Click_Menu">right click menu</a>.&nbsp; These
+ views will show the differences between the branch artifact and the
+ merge artifact.&nbsp; For the Source/Merge difference this will show
+ everything that is different between the source document and the Merge
+ document.&nbsp; In the case where the user accepts all changes from the
+ source and destination branches this diff will highlight all of the
+ changes that occurred on the destination branch. In the
+ Destination/Merge diff it will highlight all of the changes that
+ happened on the source branch.&nbsp; It is always possible to use Manual
+ Merging techniques in conjunction with Three Way Merging.</p>
+ <p>The user then right clicks on the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/chkbox_disabled.gif" width="16" height="16">
+ in the Conflict Status Column so that the
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/accept.gif" width="16" height="16">
+ icon is displayed.&nbsp; The conflict is resolved and will allow the
+ Source Branch to be committed.</p>
+ <p align="center"><a name="WFC Wizard">
+ <img border="0" src="Merge_5.gif"></a></p>
+ <p align="center"><font size="4">Word Formatted Content Merge Wizard</font></p>
+ </li>
+ </ul>
+</li>
+</ul>
+<h2>Additional Features</h2>
+<p>The Merge Wizard contains a &quot;Clear the Merge Artifact&quot; that is not available
+from the right click menu and only available for Word Formatted Content.&nbsp; This will empty out the Merge artifact and
+allow the user to start with an empty document for editing.&nbsp; It will also
+place a
+ <img border="0" src="../../org.eclipse.osee.framework.ui.skynet/images/conflict.gif" width="16" height="16">icon
+in the merge value column for that conflict.</p>
+<p>&nbsp;</p>
+<p>&nbsp;</p>
+
+</body>
+
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Diagram README.txt b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Diagram README.txt
new file mode 100644
index 00000000000..45b4a3d68c6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Diagram README.txt
@@ -0,0 +1,2 @@
+OSEE Branch Diagram.pdf and OSEE Branch Differences.pdf come from
+the osee.doc/approach/demos/OSEE Branch Diagram.ppt \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Diagram.pdf b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Diagram.pdf
new file mode 100644
index 00000000000..5f224cc8041
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Diagram.pdf
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Differences.pdf b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Differences.pdf
new file mode 100644
index 00000000000..123f195f609
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/OSEE Branch Differences.pdf
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_explorer_tree.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_explorer_tree.html
new file mode 100644
index 00000000000..fa7fb0cba02
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_explorer_tree.html
@@ -0,0 +1,34 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Artifact Explorer</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Drag and Drop</h1>
+ <h2>Purpose</h2>
+ <p>Artifacts dragged from the explorer produce different results depending on the application they are dropped onto. While artifacts dropped onto the explorer produce a new Default Hierarchal Relationship with the target artifact as the parent and the source as the child.</p>
+
+ <h2>Dragging An Artifact From The Artifact Explorer</h2>
+ <ul>
+ <li>If an artifact is dragged from the explorer into a Word document a hyper link will be created with the artifact name in text and when selected it will open the artifact in the Artifact Editor.</li>
+ <li>If an artifact is dragged into a Text File the name of the artifact will be written inside the document.</li>
+ <li>If an artifact is dragged into a relation in the Relational View of the Artifact Editor a new relation will be created with the source artifact and the target artifact in the editor.</li>
+ <li>If an artifact is dragged within the Artifact Explorer the original Default Hierarchal Relation will be deleted and a new one be created whith the target artifact.</li>
+ </ul>
+
+ <h2>Dropping Onto The Artifact Explorer</h2>
+ <ul>
+ <li>If a file is dropped onto the Artifact Explorer a new artifact will be created with the contents of the source file and a new Default Hierarchal Relationship.</li>
+ </ul>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_search_page.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_search_page.gif
new file mode 100644
index 00000000000..3b4ddb4eee6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_search_page.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_search_page.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_search_page.html
new file mode 100644
index 00000000000..835508dd4c1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/artifact_search_page.html
@@ -0,0 +1,39 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Artifact Search</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Artifact Search</h1>
+ <br/>
+ <img src="artifact_search_page.gif"/>
+ <h2>What it is</h2>
+ The search page in the Eclipse Search window for finding artifacts on the default branch.
+ <h2>How to use it</h2>
+ <p>The Artifact Search page works by building a list of filters which that
+ describe the desired artifacts. Filter types are selected from the drop down at the top
+ of the page. After completing the options for the filter, pressing the <i>Add Filter</i>
+ button will add the filter to the list of filters. If the <i>Not Equal</i> option is checked,
+ then it will be added with the <img src="../images/not_equal.gif"/> image signifying that the
+ complement of the filter will be used.</p>
+ <p>Filters can be removed from the list at anytime by selecting the <img src="../../osee.core/images/remove.gif"/>
+ next to the filter.</p>
+ <p>The radio buttons in the <i>Artifacts that match</i> frame are used to control whether artifacts are returned
+ that match every filter listed or at least one filter listed.</p>
+ <p>Once all of the options have been filled out, the Search button can be pressed to start the search against the
+ default branch. For convenience the default branch is stated at the top of the search page. If
+ a large number of artifacts will be returned then a confirmation will be displayed with a count of the
+ artifacts that are about to be loaded.</p>
+ <p>The Search button will not be enabled until there is at least one filter in the list.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_filtering.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_filtering.html
new file mode 100644
index 00000000000..384b9d11ab1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_filtering.html
@@ -0,0 +1,26 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Branch Filtering</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Branch Filtering</h1>
+ <h2>What it is</h2>
+ A quick way to limit which branches are displayed in the Branch Manager view.
+ <h2>How to do it</h2>
+ Type text in to the box labeled <i>Filter:</i>. As characters are typed, the Branch Manager
+ will update to only display branches whose name contains the text, ignoring the case.<br/>
+ <br/>
+ If no text is entered then all branches will be displayed.
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_manager_view.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_manager_view.html
new file mode 100644
index 00000000000..1a9e415e2d7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_manager_view.html
@@ -0,0 +1,39 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Branch Manager View</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Branch Manager View</h1>
+ <br/>
+ <img src="branch_view.gif"/>
+ <h2>Purpose</h2>
+ <p>The Branch Manager View is used to display all of the branches in Skynet, as well as details for the transactions on each branch.</p>
+ <p>Branches and transactions can be sorted by clicking on the column heading for the column to sort by. Initially, the data will be sorted in
+ ascending order. Clicking the same column multiple times will toggle the sorting between ascending and descending.</p>
+ <p>Locating branches can also be aided by <a href="branch_filtering.html"/>filtering</a> or using <a href="favorite_branch.html">favorites</a>.</p>
+ <h2>Icons</h2>
+ <ul>
+ <li><img src="../images/branch.gif"/> Base image for branches</li>
+ <li><img src="../images/change_managed_branch.gif"/> Base image for branches that are under change managment</li>
+ <li><img src="../images/black_check.gif"/> Overlay to mark branch as the default</li>
+ <li><img src="../images/star_9_9.gif"/> Overlay to mark branch as a favorite</li>
+ <li><img src="../images/transaction.gif"/> Image for transactions</li>
+ <li><img src="../images/relate.gif"/> Base image for relation links</li>
+ <li><img src="../../osee.skynet/images/molecule.gif"/> Base image for attributes</li>
+ <li><img src="../../osee.skynet/images/out_new.gif"/> Overlay to mark item as new</li>
+ <li><img src="../../osee.skynet/images/out_change.gif"/> Overlay to mark item as modified</li>
+ <li><img src="../../osee.skynet/images/out_delete.gif"/> Overlay to mark item as deleted</li>
+ </ul>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_view.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_view.gif
new file mode 100644
index 00000000000..023e2ef8f91
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/branch_view.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/change_report_view.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/change_report_view.gif
new file mode 100644
index 00000000000..5f1abc3bb16
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/change_report_view.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/change_table.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/change_table.html
new file mode 100644
index 00000000000..95ea978242c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/change_table.html
@@ -0,0 +1,51 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Change Report View</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Change Report View</h1>
+ <br/>
+ <img src="change_report_view.gif"/>
+ <h2>Purpose</h2>
+ <p>The Change Report View is used to summarize the changes that have been made on a branch or series of transactions.</p>
+ <h2>Icons</h2>
+ <ul>
+ <li><img src="../images/relate.gif"/> Base image for relation links</li>
+ <li><img src="../../org.eclipse.osee.framework.skynet.core/images/molecule.gif"/> Base image for attributes</li>
+ <li><img src="../../org.eclipse.osee.framework.skynet.core/images/inc_new.gif"/> Overlay to mark item as an incoming new item</li>
+ <li><img src="../../org.eclipse.osee.framework.skynet.core/images/inc_change.gif"/> Overlay to mark item as an incoming modification</li>
+ <li><img src="../../org.eclipse.osee.framework.skynet.core/images/inc_delete.gif"/> Overlay to mark item as an incoming delete</li>
+ <li><img src="../../org.eclipse.osee.framework.skynet.core/images/out_new.gif"/> Overlay to mark item as an outgoing new item</li>
+ <li><img src="../../org.eclipse.osee.framework.skynet.core/images/out_change.gif"/> Overlay to mark item as an outgoing modification</li>
+ <li><img src="../../org.eclipse.osee.framework.skynet.core/images/out_delete.gif"/> Overlay to mark item as an outgoing delete</li>
+ <li><img src="../../org.eclipse.osee.framework.skynet.core/images/con_new.gif"/> Overlay to mark an item as being new but having incoming changes</li>
+ <li><img src="../../org.eclipse.osee.framework.skynet.core/images/con_change.gif"/> Overlay to mark an item as having incoming and outgoing changes</li>
+ <li><img src="../../org.eclipse.osee.framework.skynet.core/images/con_delete.gif"/> Overlay to mark an item as being deleted but having incoming changes</li>
+ </ul>
+ <h2>Branch Change Report</h2>
+ <p>A Change Report can be performed for a branch two ways. The first way is by selecting right-clicking a branch
+ from the Branch Manager then choosing the "Show Change Report" menu item. The second way is to select
+ "Show Change Report" from the Aspect view of an ATS Action that is still in work; this will do a Change
+ Report for the working branch of the Aspect.</p>
+ <p>This type of Change Report will display all of the artifacts on the branch that have had an attribute
+ or relation link modified. It will also do conflict detection on these artifacts against the parent branch.
+ All changes done on the current artifact will appear with a grey right arrow<img src="../../org.eclipse.osee.framework.skynet.core/images/out_change.gif"/>, while all changes from the
+ parent branch will be shown with a blue left arrow<img src="../../org.eclipse.osee.framework.skynet.core/images/inc_change.gif"/>. Attributes and relation links with multiple changes will
+ provide a summarized node that shows the final effect of the changes and can be expanded to view all of the
+ minor changes that were made. If an attribute or relation link was modified on both
+ branches then the summary will show a red conflict mark<img src="../../org.eclipse.osee.framework.skynet.core/images/con_change.gif"/> to signify that a commit will cause an override
+ to occur.
+
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/compare_two_artifacts.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/compare_two_artifacts.html
new file mode 100644
index 00000000000..e0d10d4e913
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/compare_two_artifacts.html
@@ -0,0 +1,24 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>compare tow artifacts</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Compare two artifacts</h1>
+ <h2>What it is</h2>
+ <p> It compares two artifact's word contents to each other.</p>
+
+ <h2>How to do it</h2>
+ <p>Select two artifacts and right click and select “Compare two Artifacts”. A word document will be displayed showing the differences between each of the artifact’s word content.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/contexts.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/contexts.xml
new file mode 100644
index 00000000000..841eba6ee12
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/contexts.xml
@@ -0,0 +1,11 @@
+<contexts>
+ <context id="table_customization" title="Table Customization">
+ <description>Allows the table to be customized, saved and loaded.</description>
+ <topic label="Table Customization" href="reference/table_customization.html"/>
+ </context>
+ <context id="mass_artifact_editor" title="Mass Artifact Editor">
+ <description>Allows viewing and editing of attributes from multiple artifacts.</description>
+ <topic label="Mass Artifact Editor" href="reference/mass_artifact_editor.html"/>
+ <topic label="Table Customization" href="reference/table_customization.html"/>
+ </context>
+</contexts> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/create_branch.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/create_branch.html
new file mode 100644
index 00000000000..091d282812f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/create_branch.html
@@ -0,0 +1,40 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Default Branch</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Default Branch</h1>
+ <h2>What it is</h2>
+ The branch which is returned to any program that asks for the current default branch. For instance,
+ the Artifact Explorer will use the default branch to determine what artifacts to show, and artifact
+ searches are performed against the default branch.
+ <h2>How to tell what the default branch is</h2>
+ The Branch Manager view shows all of the branches with the <img src="../images/branch.gif"/> icon.<br/>
+ <br/>
+ The default branch will have a <img src="../images/black_check.gif"/> at the top right of the normal branch icon.<br/>
+ <br/>
+ Most views and editors that are working with artifacts will show the branch in the status bar next to the branch icon.
+ <h2>How to set it</h2>
+ The default branch is set from the Branch Manager view. Use sorting or filtering in the table to find the
+ desired branch. Right-click on the branch and then select <i>Set Default Branch</i> from the popup menu.<br/>
+ <br/>
+ The <i>Set Default Branch</i> option will be disabled if any of the following cases are true:
+ <ul>
+ <li>The branch selected is already the default</li>
+ <li>The item selected is not a branch</li>
+ <li>More than one item is selected</li>
+ </ul>
+
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/creating_new_artifact.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/creating_new_artifact.html
new file mode 100644
index 00000000000..c4044bb2d7b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/creating_new_artifact.html
@@ -0,0 +1,27 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Creating a new artifact</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Creating a new Artifact</h1>
+ <h2>What it is</h2>
+ <p>New artifacts can be created from the Artifact Explorer.</p>
+
+ <h2>How to do it</h2>
+ <ul>
+ <li>A new artifact may be created from the right click menu by selecting the "New Child" menu item, then next the artifact type.</li>
+ <li>A new artifact may be created from a file by selecting the file and dragging it into the Artifact Explorer</li>
+ </ul>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/creating_new_links.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/creating_new_links.html
new file mode 100644
index 00000000000..1a7212b0ccd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/creating_new_links.html
@@ -0,0 +1,28 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Creating a new Link</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Creating a new Link</h1>
+ <h2>What it is</h2>
+ <p>Linking artifacts to each other.</p>
+
+ <h2>How to do it</h2>
+ <p>New relation links can be created one of two ways.</p>
+ <ul>
+ <li>If the relation link group desired exists on the artifact a new link may be created by dragging another artifact onto the relation link group. </li>
+ <li>If the relation group does not already exist a new relation group may be created by right clicking in the relation page then select “New Relation” and selecting the desired relation group. Only valid relation groups for the specific artifact will be enabling in the menu list. Menus where either artifact can be valid for either side will contain “…” after the text. When selected a dialog box will be displayed where the relation side of the source artifact will be placed.</li>
+ </ul>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/default_branch.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/default_branch.html
new file mode 100644
index 00000000000..6aa4ee847c1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/default_branch.html
@@ -0,0 +1,40 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Default Branch</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Default Branch</h1>
+ <h2>What it is</h2>
+ The branch which is returned to any program that asks for the current default branch. For instance,
+ the Artifact Explorer will use the default branch to determine what artifacts to show, and artifact
+ searches are performed against the default branch.
+ <h2>How to tell what the default branch is</h2>
+ The Branch Manager view shows all of the branches with the <img src="../images/branch.gif"/> icon.<br/>
+ <br/>
+ The default branch will have a <img src="../images/black_check.gif"/> at the top right of the normal branch icon.<br/>
+ <br/>
+ Most views and editors that are working with artifacts will show the branch in the status bar next to the branch icon.
+ <h2>How to set it</h2>
+ The default branch is set from the Branch Manager view. Use sorting or <a href="branch_filtering.html"/>filtering</a> in the table to find the
+ desired branch. Right-click on the branch and then select <i>Set Default Branch</i> from the popup menu.<br/>
+ <br/>
+ The <i>Set Default Branch</i> option will be disabled if any of the following cases are true:
+ <ul>
+ <li>The branch selected is already the default</li>
+ <li>The item selected is not a branch</li>
+ <li>More than one item is selected</li>
+ </ul>
+
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/deleting_artifacts.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/deleting_artifacts.html
new file mode 100644
index 00000000000..1c6b1ab2813
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/deleting_artifacts.html
@@ -0,0 +1,29 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Deleting Artifacts</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Deleting Artifacts</h1>
+ <h2>What it is</h2>
+ <p>Artifacts may be deleted from the Artifact Explorer.
+ <br>
+ <b>Caution</b> should be taken in performing this task because along with the artifact all of its default hierarchy children will also be deleted.</p>
+
+ <h2>How to do it</h2>
+ <p>To delete an artifact and its children select the desired artifact and the right click, next select the “Delete Artifact” menu item. A dialog will be displayed asking for deletion confirmation.</p>
+ <br>
+ <h2>Note:</h2>
+ <p>An artifact may also be deleted by selecting an artifact and pressing the delete key.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/deleting_link.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/deleting_link.html
new file mode 100644
index 00000000000..3bca9d0a247
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/deleting_link.html
@@ -0,0 +1,24 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Deleting a Link</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Deleting a Link</h1>
+ <h2>What it is</h2>
+ <p>Removing a link between two artifacts.</p>
+
+ <h2>How to do it</h2>
+ <p>A link can de deleted by selecting the desired link to be removed then right clicking and selecting the “Delete” menu item. A dialog will be displayed for confirmation.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/favorite_branch.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/favorite_branch.html
new file mode 100644
index 00000000000..bc959644be3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/favorite_branch.html
@@ -0,0 +1,32 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Favorite Branch</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Favorite Branch</h1>
+ <h2>What it is</h2>
+ A branch that the user has marked as a favorite. Any number of branches can be marked as favorite. This is
+ used in conjunction with the <img src="../images/filter.gif"/>Show Favorites First filter to quickly locate
+ branches of interest.
+ <h2>How to tell which branches are favorites</h2>
+ The Branch Manager view shows all of the branches with the <img src="../images/branch.gif"/> icon.<br/>
+ <br/>
+ A favorite branch will have a <img src="../images/star_9_9.gif"/> at the bottom left of the normal branch icon.
+ <h2>How to set/unset it</h2>
+ A favorite branch is set from the Branch Manager view. Use sorting or filtering in the table to find the
+ desired branch. Right-click on the branch and then select <i>Mark As Favorite</i>
+ or <i>Unmark As Favorite</i> from the popup menu.<br/>
+ <br/>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/go_into.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/go_into.html
new file mode 100644
index 00000000000..c0a84494335
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/go_into.html
@@ -0,0 +1,24 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Rooting on an artifact</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Rooting on an artifact</h1>
+ <h2>What it is</h2>
+ <p>It changes the root artifact in the Artifact Explorer to the selected artifact.</p>
+
+ <h2>How to do it</h2>
+ <p>Select the desired artifact from the Artifact Explorer right click and select the “Go Into” menu item.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/mass_artifact_editor.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/mass_artifact_editor.html
new file mode 100644
index 00000000000..e1128ea9c81
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/mass_artifact_editor.html
@@ -0,0 +1,30 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Mass Artifact Editor</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Mass Artifact Editor</h1>
+ <h2>Purpose</h2>
+ <p>The Mass Artifact Editor allows the easy view of multiple artifact along with their attributes.
+ This editor can be viewed from right-click off Artifact Explorer, Search Results page, or via
+ ATS action. Single cells can be edited via Alt-Left-Mouse-Click. After editing any number of
+ artifacts shown, the save button persists this data.</p>
+ <p>Note: This editor will close upon switch of default branch unless the editor is tied to
+ the common branch.</p>
+ <h2>Actions</h2>
+ Select <img src="../images/refresh.gif"/> to refresh the contents.<br/>
+ Select <img src="../images/customize.gif"/> to <A href="table_customization.html"/>Customize Table</A>.<br/>
+ Select <img src="../images/bug.gif"/> to <A href="../../osee.ats/reference/report_a_bug.html"/>Report a Bug</A>.<br/>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/osee_branching.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/osee_branching.html
new file mode 100644
index 00000000000..09c856e02ff
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/osee_branching.html
@@ -0,0 +1,24 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+<head>
+<title>OSEE Branching and Differences Diagrams</title>
+<LINK rel="stylesheet" type="text/css"
+ href="../../osee.help/html/style.css">
+</head>
+
+<body>
+<h1>OSEE Branching and Differences Diagrams</h1>
+<a href="OSEE Branch Diagram.pdf">OSEE Branching Diagram</a>
+<br />
+<a href="OSEE Branch Differences.pdf">OSEE Differeces Diagram</a>
+<br />
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/contexts.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/contexts.xml
new file mode 100644
index 00000000000..0134f0df1d9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/contexts.xml
@@ -0,0 +1,9 @@
+<contexts>
+ <context id="query_log_table" title="Query Log">
+ <description>Displays queries that have been run, along with their run time, bind variables, and the time when they were ran. If a SQLException occurred during execution then it will also be shown.</description>
+ <topic label="Query Log" href="reference/queryLog/query_log_view.html"/>
+ <topic label="Refreshing the log" href="reference/queryLog/refresh_log.html"/>
+ <topic label="Deleting the log" href="reference/queryLog/delete_log.html"/>
+ <topic label="Report a bug" href="../osee.ats/reference/report_a_bug.html"/>
+ </context>
+</contexts> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/delete_log.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/delete_log.html
new file mode 100644
index 00000000000..7b21c3c40e0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/delete_log.html
@@ -0,0 +1,24 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Delete Query Log</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Delete Query Log</h1>
+ <h2>Purpose</h2>
+ Deletes all of the recorded queries from the log then refreshes the view. The log has a max capacity and once it is met
+ no more entries will be added, so deleting the log will be necessary to see any new queries that are being performed.
+ <h2>How to do it</h2>
+ Select the delete button (<img src="../../images/delete_edit.gif"/>) from the toolbar on the top portion of the Query Log view.<br/>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/query_log_view.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/query_log_view.gif
new file mode 100644
index 00000000000..d341f477a53
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/query_log_view.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/query_log_view.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/query_log_view.html
new file mode 100644
index 00000000000..cd0f0327126
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/query_log_view.html
@@ -0,0 +1,39 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Query Log View</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Query Log View</h1>
+ <br/>
+ <img src="query_log_view.gif"/>
+ <h2>Purpose</h2>
+ <p>The Query Log view is used to review queries that have been run for the purpose of debugging. Details about the query
+ such as how long it took to run, if any bind variables were passed, or if an SQL Exception was thrown while attempting to
+ execute the query are all available. Run time is only reported for queries that executed successfully.</p>
+ <p>Queries can be sorted by clicking on the column heading for the column to sort by. Initially, the data will be sorted in
+ ascending order. Clicking the same column multiple times will toggle the sorting between ascending and descending. The table
+ can be sorted on multiple columns by holding the CTRL key and selecting columns in the order which they should be sorted.</p>
+ <h2>Shortcuts</h2>
+ <ul>
+ <li><b>CTRL+A</b> - Select all items displayed</li>
+ <li><b>CTRL+C</b> - Copy the current selected item to the clipboard.
+ <ul>
+ <li>SQL Item - Copies the full SQL Text</li>
+ <li>Bind Variable - Copies the bind variable value, not including the type. Binary data not supported</li>
+ <li>Exception - Copies the exception and stack trace</li>
+ </ul></li>
+ <li><b>CTRL+X</b> - Fully expand selected items</li>
+ </ul>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/refresh_log.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/refresh_log.html
new file mode 100644
index 00000000000..2f66f1dc2df
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/queryLog/refresh_log.html
@@ -0,0 +1,24 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Refresh Query Log</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Refresh Query Log</h1>
+ <h2>Purpose</h2>
+ Repopulates the view with the latest information from the query log. The log has a max capacity and once it is met
+ no more entries will be added. This can be taken care of by <a href="delete_log.html">deleting the log contents</a>.
+ <h2>How to do it</h2>
+ Select the refresh button (<img src="../../images/refresh.gif"/>) from the toolbar on the top portion of the Query Log view.<br/>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/artifact_search.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/artifact_search.gif
new file mode 100644
index 00000000000..799d3d5686c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/artifact_search.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/attribute_tagging.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/attribute_tagging.html
new file mode 100644
index 00000000000..b4866de65a6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/attribute_tagging.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+
+<meta name="copyright" content="Copyright (c) 2004, 2007 Boeing. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Boeing - initial API and implementation" >
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<title>Attribute Tagging for Quick Search</title>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/org.eclipse.help.webapp/advanced/breadcrumbs.css" charset="ISO-8859-1" type="text/css"></link>
+<script type="text/javascript" src="../content/PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/narrow_book.css" type="text/css"></link>
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/win32_narrow_book.css" type="text/css"></link>
+<script type="text/javascript">
+<!--
+if (parent.ContentToolbarFrame && parent.ContentToolbarFrame.setButtonState) parent.ContentToolbarFrame.setButtonState("toggle_highlight","hidden");
+-->
+</script>
+
+</head>
+
+<body>
+
+ <h1>Attribute Tagging for Quick Search</h1>
+
+ <p>When an artifact is saved, each attribute contained in the artifact is analyzed to produce a list of
+ tags that are then associated with the artifact. Quick search is a form of <i>keyword</i> based searching
+ which uses tags to perform contextual artifact searches.</p>
+
+ <p>For an attribute to be tagged by the system, it must meet the following criteria:</p>
+ <ol>
+ <li>The attribute's type must specify an <b>Attribute Tagger</b> to be used by the tagging system.</li>
+ <li>The attribute must contain valid data.</li>
+ <li>The attribute revision must be saved in the database before sending to tagging system.</li>
+ </ol>
+
+ <p>To produce tags, modified attributes are sent to the OSEE application server where the tagging system
+ processes each attribute using an <b>Attribute Tagger</b> specified by the attribute's type. The <b>Attribute Tagger</b>
+ knows how to interpret the attribute's data and how to extract words from the content. At this point, a word is defined
+ as a sequential set of alphanumeric characters delimited by one or more spaces. As words are parsed, they are sent
+ to the tagging system's word encoder where the following processing takes place:
+ </p>
+ <ol>
+ <li>The characters in the original word are converted to lower case.</li>
+ <li>The lower cased version of the word is encoded and stored in the tagging system.</li>
+ <li>The lower cased version of the word is split using punctuation characters such as (<b><code>' '</code>,
+ <code>!</code>, <code>"</code>, <code>#</code>, <code>$</code>,
+ <code>%</code>, <code>(</code>, <code>)</code>, <code>*</code>, <code>+</code>,
+ <code>,</code>, <code>-</code>, <code>.</code>, <code>/</code>, <code>:</code>,
+ <code>;</code>, <code>&lt;</code>, <code>&gt;</code>, <code>?</code>, <code>@</code>,
+ <code>[</code>, <code>\</code>, <code>]</code>, <code>^</code>, <code>{</code>,
+ <code>|</code>, <code>}</code>, <code>~</code>, <code>_</code></b>) as delimiters.</li>
+ <li>Possessive words <i>(ending in 's)</i> are converted into regular form.</li>
+ <li>Each word is converted from plural to singular form.</li>
+ <li>Each word is encoded and stored in the tag system.</li>
+ </ol>
+
+ <p> When encoding words into tags, the tag encoder uses an algorithm which transforms the word's characters
+ into a bit-packed tag that will fit in a 64-bit integer. The tag will represent up to 12 characters
+ (all that can fit into 64-bits). Longer words will be turned into consecutive tags.</p>
+
+ <h3>Tag Encoding Examples</h3>
+ <table style="width:50%;" border="1">
+ <tr style="background:lightgrey">
+ <th>Original</th>
+ <th>Keywords</th>
+ <th>Encoding</th>
+ </tr>
+ <tr>
+ <td>appendeces</td>
+ <td>appendix</td>
+ <td>-220858502</td>
+ </tr>
+ <tr>
+ <td>battery(ies)</td>
+ <td>battery</td>
+ <td>529513131</td>
+ </tr>
+ <tr>
+ <td>alternate/backup</td>
+ <td>
+ <table>
+ <tr><td>alternate</td></tr>
+ <tr><td>backup</td></tr>
+ </table>
+ </td>
+ <td>
+ <table>
+ <tr><td>-1420231874</td></tr>
+ <tr><td>24902827</td></tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+
+ <p><img border="0" src="ngrelr.png" alt="Related reference" /><br>
+ &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<a href="quick_search_view.html">Quick Search View</a>
+ </p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/by_id_option.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/by_id_option.html
new file mode 100644
index 00000000000..81eb20d1807
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/by_id_option.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+
+<meta name="copyright" content="Copyright (c) 2004, 2007 Boeing. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Boeing - initial API and implementation" >
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<title>Quick Search By Id Search Option</title>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/org.eclipse.help.webapp/advanced/breadcrumbs.css" charset="ISO-8859-1" type="text/css"></link>
+<script type="text/javascript" src="../content/PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/narrow_book.css" type="text/css"></link>
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/win32_narrow_book.css" type="text/css"></link>
+<script type="text/javascript">
+<!--
+if (parent.ContentToolbarFrame && parent.ContentToolbarFrame.setButtonState) parent.ContentToolbarFrame.setButtonState("toggle_highlight","hidden");
+-->
+</script>
+</head>
+ <body>
+ <h1>Quick Search By Id Search Option</h1>
+
+ <h2>What it is</h2>
+ <p>An option to search for artifacts with a particular GUID or HRID on the default branch.</p>
+ <h2>How to do it</h2>
+ <p>Type in the desired GUID(s) or HRID(s) separated by commas or spaces. Make sure the <i>By Id</i> option is selected
+ under <i>Options</i>, then press the <i>Search</i> button.
+ </p>
+ <p><b>Note: When <i>By Id</i> option is selected, <i>Name Only</i> option is not allowed. Therefore, selecting <i>By Id</i> option disables the <i>Name Only</i> option by setting its state to not selected.</b></p>
+
+ <h2>Shortcuts</h2>
+ <p>Pressing enter in the text entry box is equivalent to pressing the <i>Search</i> button.</p>
+
+ <p><img border="0" src="ngrelr.png" alt="Related reference" /><br>
+ &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<a href="quick_search_view.html">Quick Search View</a>
+ </p>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/contexts.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/contexts.xml
new file mode 100644
index 00000000000..a0fea0aad60
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/contexts.xml
@@ -0,0 +1,31 @@
+<contexts>
+ <context id="quick_search_text" title="Quick Search">
+ <description>Provides quick access to search for artifacts</description>
+ <topic label="Quick Search" href="reference/quickSearch/quick_search_view.html"/>
+ <topic label="By Id Search Option" href="reference/quickSearch/by_id_option.html"/>
+ <topic label="Include Deleted Search Option" href="reference/quickSearch/include_deleted_option.html"/>
+ <topic label="Name Only Search Option" href="reference/quickSearch/name_search.html"/>
+ <topic label="Match Word Order Search Option" href="reference/quickSearch/word_order_match_option.html"/>
+ <topic label="Report a bug" href="../osee.ats/reference/report_a_bug.html"/>
+ </context>
+ <context id="quick_search_by_id_option" title="Quick Search">
+ <description>Provides quick access to search for artifacts</description>
+ <topic label="Quick Search" href="reference/quickSearch/quick_search_view.html"/>
+ <topic label="By Id Search Option" href="reference/quickSearch/by_id_option.html"/>
+ </context>
+ <context id="quick_search_deleted_option" title="Quick Search">
+ <description>Provides quick access to search for artifacts</description>
+ <topic label="Quick Search" href="reference/quickSearch/quick_search_view.html"/>
+ <topic label="Include Deleted Search Option" href="reference/quickSearch/include_deleted_option.html"/>
+ </context>
+ <context id="quick_search_name_option" title="Quick Search">
+ <description>Provides quick access to search for artifacts</description>
+ <topic label="Quick Search" href="reference/quickSearch/quick_search_view.html"/>
+ <topic label="Name Only Search Option" href="reference/quickSearch/in_name_option.html"/>
+ </context>
+ <context id="quick_search_word_order_option" title="Quick Search">
+ <description>Provides quick access to search for artifacts</description>
+ <topic label="Quick Search" href="reference/quickSearch/quick_search_view.html"/>
+ <topic label="Word Order Match Search Option" href="reference/quickSearch/word_order_match_option.html"/>
+ </context>
+</contexts>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/in_name_option.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/in_name_option.html
new file mode 100644
index 00000000000..47d1911d9a7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/in_name_option.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+
+<meta name="copyright" content="Copyright (c) 2004, 2007 Boeing. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Boeing - initial API and implementation" >
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<title>Quick Search Name Only Search Option</title>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/org.eclipse.help.webapp/advanced/breadcrumbs.css" charset="ISO-8859-1" type="text/css"></link>
+<script type="text/javascript" src="../content/PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/narrow_book.css" type="text/css"></link>
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/win32_narrow_book.css" type="text/css"></link>
+<script type="text/javascript">
+<!--
+if (parent.ContentToolbarFrame && parent.ContentToolbarFrame.setButtonState) parent.ContentToolbarFrame.setButtonState("toggle_highlight","hidden");
+-->
+</script>
+</head>
+ <body>
+ <h1>Quick Search Name Only Search Option</h1>
+
+ <h2>What it is</h2>
+ <p>An option to search for artifacts with a particular name on the default branch.</p>
+
+ <h2>How to do it</h2>
+ <p>Type the name of the artifact(s) to search for. Make sure the <i>Name Only</i> option is selected
+ under <i>Options</i>, then press the <i>Search</i> button.</p>
+ <p><b>Note: When <i>Name Only</i> option is selected, <i>By Id</i> option is not allowed. Therefore, selecting <i>Name Only</i> option disables the <i>By Id</i> option by setting its state to not selected.</b></p>
+
+ <h2>Shortcuts</h2>
+ <p>Pressing enter in the text entry box is equivalent to pressing the <i>Search</i> button.</p>
+
+ <p><img border="0" src="ngrelr.png" alt="Related reference" /><br>
+ &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<a href="quick_search_view.html">Quick Search View</a>
+ </p>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/include_deleted_option.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/include_deleted_option.html
new file mode 100644
index 00000000000..844d3010551
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/include_deleted_option.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+
+<meta name="copyright" content="Copyright (c) 2004, 2007 Boeing. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Boeing - initial API and implementation" >
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<title>Quick Search Include Deleted Search Option</title>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/org.eclipse.help.webapp/advanced/breadcrumbs.css" charset="ISO-8859-1" type="text/css"></link>
+<script type="text/javascript" src="../content/PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/narrow_book.css" type="text/css"></link>
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/win32_narrow_book.css" type="text/css"></link>
+<script type="text/javascript">
+<!--
+if (parent.ContentToolbarFrame && parent.ContentToolbarFrame.setButtonState) parent.ContentToolbarFrame.setButtonState("toggle_highlight","hidden");
+-->
+</script>
+</head>
+ <body>
+ <h1>Quick Search Include Deleted Search Option</h1>
+
+ <h2>What it is</h2>
+ <p>An option to include artifacts that have been deleted as part of a quick search on the default branch.
+ </p>
+ <h2>How to do it</h2>
+ <p>Type in the desired words. Make sure the <i>Include Deleted</i> option is selected
+ under <i>Options</i>, then press the <i>Search</i> button.</p>
+
+ <h2>Shortcuts</h2>
+ <p>Pressing enter in the text entry box is equivalent to pressing the <i>Search</i> button.</p>
+
+ <p><img border="0" src="ngrelr.png" alt="Related reference" /><br>
+ &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<a href="quick_search_view.html">Quick Search View</a>
+ </p>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/ngrelc.png b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/ngrelc.png
new file mode 100644
index 00000000000..161e3aa313b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/ngrelc.png
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/ngrelr.png b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/ngrelr.png
new file mode 100644
index 00000000000..4726f8c43aa
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/ngrelr.png
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/quickSearchView.png b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/quickSearchView.png
new file mode 100644
index 00000000000..336fdd56c75
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/quickSearchView.png
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/quick_search_view.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/quick_search_view.html
new file mode 100644
index 00000000000..b98779a55d1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/quick_search_view.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+
+<meta name="copyright" content="Copyright (c) 2004, 2007 Boeing. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Boeing - initial API and implementation" >
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<title>Quick Search View</title>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/org.eclipse.help.webapp/advanced/breadcrumbs.css" charset="ISO-8859-1" type="text/css"></link>
+<script type="text/javascript" src="../content/PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/narrow_book.css" type="text/css"></link>
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/win32_narrow_book.css" type="text/css"></link>
+<script type="text/javascript">
+<!--
+if (parent.ContentToolbarFrame && parent.ContentToolbarFrame.setButtonState) parent.ContentToolbarFrame.setButtonState("toggle_highlight","hidden");
+-->
+</script>
+</head>
+<body>
+ <h1>Quick Search View</h1>
+
+ <p>The Quick Search view allows users to perform searches for information
+ that is contained <i>inside</i> artifacts in a selected branch.
+ </p>
+
+ <img src="quickSearchView.png" alt="quick search view"/>
+
+ <p>To find all artifacts that contain a particular set of keywords:</p>
+ <ol>
+ <li>Select <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.osee.framework.ui.skynet.QuickSearchView)")'>
+ <img src="artifact_search.gif" alt="search icon" border="0" />
+ <b>Window &gt; Show View &gt; Other... &gt; OSEE &gt; Quick Search</b></a>, to open the view.
+ </li>
+ <li><p>Type your search string in the <b>Enter Search String</b> combo box, or use the
+ pull-down list to select a previously entered search expression. <br/> Special characters such as (<b><code>' '</code>,
+ <code>!</code>, <code>"</code>, <code>#</code>, <code>$</code>,
+ <code>%</code>, <code>(</code>, <code>)</code>, <code>*</code>, <code>+</code>,
+ <code>,</code>, <code>-</code>, <code>.</code>, <code>/</code>, <code>:</code>,
+ <code>;</code>, <code>&lt;</code>, <code>&gt;</code>, <code>?</code>, <code>@</code>,
+ <code>[</code>, <code>\</code>, <code>]</code>, <code>^</code>, <code>{</code>,
+ <code>|</code>, <code>}</code>, <code>~</code>, <code>_</code></b>) are assumed to be word separators unless <i>By Id</i> option is selected.
+ When <i>By Id</i> option is selected, (<b><code>,</code> and <code>' '</code></b>) are treated as separators.</p>
+ <p>For example:
+ <ul>
+ <li>When <i>By Id</i> is not selected, <b><code>hello.world</code></b> will be translated to <b><code>hello</code></b> and <b><code>world</code></b>. The search will match attributes with <b><code>hello</code></b> and <b><code>world</code></b> keywords.</li>
+ <li>When <i>By Id</i> is selected, (<b><code>A+ABG7jFm+0BKaVZIxfqOQ,AFABG7jFm+0BKaVZIxfqOQ PX1FH</code></b>) will be interpreted as 2 GUID(s) and 1 HRID. The search will match artifacts containing <b><code>A+ABG7jFm+0BKaVZIxfqOQ</code></b> and <b><code>AFABG7jFm+0BKaVZIxfqOQ</code></b> as its GUID or <b><code>PX1FH</code></b> as its HRID.</li>
+ </ul>
+ </p>
+ </li>
+ <li>Finish entering your search options, (for example, to scope
+ the search to include deleted artifacts, check the include deleted option),
+ and click <b>Search</b> or press <b>Enter</b> from the combo box to execute the search.
+ </li>
+ <li>The Search view displays the results of your search. Right-click on any item in
+ the Search view to open a pop-up menu that allows you perform various operations
+ on the artifacts such as copy search results to the clipboard or reveal a
+ selected artifact in Artifact Explorer. To open one of the listed artifacts,
+ double-click it or select <b>Open</b> from its pop-up menu.
+ </li>
+ </ol>
+
+ <p><img border="0" src="ngrelc.png" alt="Related concepts" /><br>
+ &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<a href="attribute_tagging.html">Attribute Tagging</a>
+ </p>
+
+ <p><img border="0" src="ngrelr.png" alt="Related reference" /><br>
+ &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<a href="include_deleted_option.html">By Id Search Option</a><br/>
+ &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<a href="include_deleted_option.html">Include Deleted Search Option</a><br/>
+ &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<a href="in_name_option.html">Name Only Search Option</a><br/>
+ &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<a href="word_order_match_option.html">Word Order Match Search Option</a><br/>
+ </p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/word_order_match_option.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/word_order_match_option.html
new file mode 100644
index 00000000000..cd82ffb8018
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/quickSearch/word_order_match_option.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+
+<meta name="copyright" content="Copyright (c) 2004, 2007 Boeing. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Boeing - initial API and implementation" >
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<title>Quick Search Word Order Match Search Option</title>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/org.eclipse.help.webapp/advanced/breadcrumbs.css" charset="ISO-8859-1" type="text/css"></link>
+<script type="text/javascript" src="../content/PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/narrow_book.css" type="text/css"></link>
+<link rel="stylesheet" href="../content/PLUGINS_ROOT/PRODUCT_PLUGIN/win32_narrow_book.css" type="text/css"></link>
+<script type="text/javascript">
+<!--
+if (parent.ContentToolbarFrame && parent.ContentToolbarFrame.setButtonState) parent.ContentToolbarFrame.setButtonState("toggle_highlight","hidden");
+-->
+</script>
+</head>
+ <body>
+ <h1>Quick Search Word Order Match Search Option</h1>
+
+ <h2>What it is</h2>
+ <p>An option to match a phrase against artifacts during a quick search operation on the default branch.
+ </p>
+ <h2>How to do it</h2>
+ <p>Type in the desired words. Make sure the <i>Match Word Order</i> option is selected
+ under <i>Options</i>, then press the <i>Search</i> button.</p>
+
+ <h2>Shortcuts</h2>
+ <p>Pressing enter in the text entry box is equivalent to pressing the <i>Search</i> button.</p>
+
+ <p><img border="0" src="ngrelr.png" alt="Related reference" /><br>
+ &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<a href="quick_search_view.html">Quick Search View</a>
+ </p>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/refresh_change_report.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/refresh_change_report.html
new file mode 100644
index 00000000000..878148fb7f9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/refresh_change_report.html
@@ -0,0 +1,26 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Refresh Change Report</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Refresh Change Report</h1>
+ <h2>Purpose</h2>
+ Forces the Change Report to be recomputed. This is typically used when the Change Report snapshot has become out of date,
+ noted by a <img src="../images/old.gif"/> next to the snapshot description on the first line of the Change Report.
+ <h2>How to do it</h2>
+ Select the refresh button (<img src="../images/refresh.gif"/>) from the toolbar on the top portion of the Change Report view.<br/>
+ <br/>
+ If the Change Report view is empty then the refresh button will do nothing.
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/reorder_links.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/reorder_links.html
new file mode 100644
index 00000000000..ec2d9af382d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/reorder_links.html
@@ -0,0 +1,24 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Reordering Links</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Reordering Links</h1>
+ <h2>What it is</h2>
+ <p>A way to change the link ordering of a relation group. The results from link reordering will be reflected in the Relation Page and the Artifact Explorer.</p>
+
+ <h2>How to do it</h2>
+ <p>Relation links may be reordered within the same relation link group by selecting the link and dropping it into the desired location. Since the target indicator is displayed after the selected artifact pressing the ctrl key will shift the indicator to before the artifact, therefore allowing artifacts to be moved to the bottom of the link group.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/resource_history_view.GIF b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/resource_history_view.GIF
new file mode 100644
index 00000000000..39e5a3fd205
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/resource_history_view.GIF
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/result_view.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/result_view.html
new file mode 100644
index 00000000000..243d6fb9d89
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/result_view.html
@@ -0,0 +1,32 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>ATS Result View</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Result View</h1>
+ <br/>
+ <img src="result_view.jpg"/>
+ <h2>Purpose</h2>
+ Show reports, errors, metrics and other data in a multi-paged view with print, email and exporting capabilities.
+ <h2>How to do it</h2>
+ This view pops up automatically when OSEE needs to report larger amounts of data to the user.
+ <h2>Actions</h2>
+ Select <img src="../images/print.gif"/> to print the current window.<br/>
+ Select <img src="../images/email.gif"/> to email the current results view to an OSEE user.<br/>
+ Select <img src="../images/export.gif"/> to export the current table into a comma seperated value file.<br/>
+ <h2>Mulit-page</h2>
+ Selecting the down arrow will show a list of all pages that have been displayed during the current instance
+ of OSEE running. Selecting from this list will display the previous page.
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/result_view.jpg b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/result_view.jpg
new file mode 100644
index 00000000000..b71a732fbf4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/result_view.jpg
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/revision_history_view.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/revision_history_view.html
new file mode 100644
index 00000000000..16a5322d454
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/revision_history_view.html
@@ -0,0 +1,27 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Resource History View</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Resource History View</h1>
+ <br/>
+ <img src="resource_history_view.gif"/>
+ <h2>Purpose</h2>
+ <p>The Revision History is a view that displays the change history of an artifact.</p>
+ <h2>Icons</h2>
+ <ul>
+ <li><img src="../images/transaction.gif"/> Image for transactions</li>
+ </ul>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/show_change_report.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/show_change_report.html
new file mode 100644
index 00000000000..c70f8597e26
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/show_change_report.html
@@ -0,0 +1,36 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Show Change Report</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Show Change Report</h1>
+ <h2>What it is</h2>
+ A view that shows all of the changes made on a branch, or between two transactions on the same branch.
+ <h2>How to do it</h2>
+ <h3>For a branch</h3>
+ Use <a href="branch_filtering.html">filtering</a> or sorting to locate the branch of interest. Right-click
+ the branch and select <i>Show Change Report</i>. The change report will show all changes made on the branch
+ since its baseline.<br/>
+ <br/>
+ If anything is selected in addition to the one branch, then the <i>Show Change Report</i> menu item will be disabled.
+ <h3>For a range of transactions</h3>
+ Use <a href="branch_filtering.html">filtering</a> or sorting to locate the branch with the transactions. Then locate the
+ starting and ending transactions. Select both of the transactions by ctrl-clicking each transaction, then right-click
+ and select <i>Show Change Report</i>. The change report will show all changes after the earlier transaction, up to and
+ including the later transaction.<br/>
+ <br/>
+ If anything is selected in addition to the two transactions, or the two transactions are on seperate branches,
+ the <i>Show Change Report</i> menu item will be disabled.
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/skynet_toc.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/skynet_toc.xml
new file mode 100644
index 00000000000..a928ca13803
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/skynet_toc.xml
@@ -0,0 +1,43 @@
+<toc label="OSEE Application Framework">
+ <topic label="Views and Editors">
+ <topic label="Branch Manager"
+ href="reference/branch_manager_view.html">
+ <topic label="Default Branch"
+ href="reference/default_branch.html" />
+ <topic label="Favorite Branch"
+ href="reference/favorite_branch.html" />
+ <topic label="Filtering"
+ href="reference/branch_filtering.html" />
+ <topic label="Show Change Report"
+ href="reference/show_change_report.html" />
+ </topic>
+ <topic label="Change Report"
+ href="reference/change_table.html">
+ <topic label="Refresh"
+ href="reference/refresh_change_report.html" />
+ </topic>
+ <topic label="Quick Search" href="reference/quickSearch/quick_search_view.html" >
+ <topic label="In Name Search Option"
+ href="reference/quickSearch/in_name_option.html" />
+ <topic label="Include Deleted Search Option"
+ href="reference/quickSearch/include_deleted_option.html" />
+ <topic label="Attribute Tagging for Quick Search"
+ href="reference/quickSearch/attribute_tagging.html" />
+ </topic>
+ <topic href="reference/mass_artifact_editor.html" label="Mass Editor">
+ </topic>
+ <topic href="reference/Merge_Manager.html" label="Merge Manager">
+ </topic>
+ </topic>
+ <topic label="Table Customization">
+ <topic label="Table Customization"
+ href="reference/table_customization.html" />
+ </topic>
+ <topic label="Spell Checking">
+ <topic label="Spell Checking" href="reference/spell_check.html" />
+ </topic>
+ <topic label="OSEE Branching and Differences Diagrams">
+ <topic label="OSEE Branching and Differences Diagrams"
+ href="reference/osee_branching.html" />
+ </topic>
+</toc>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.gif b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.gif
new file mode 100644
index 00000000000..51299b49c03
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.gif
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.html
new file mode 100644
index 00000000000..c3f73125701
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.html
@@ -0,0 +1,40 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>OSEE Spell Checking</title>
+ </head>
+
+ <body>
+ <h1>OSEE Spell Checking</h1>
+ <br/>
+ <img src="spell_check.jpg"/>
+ <h2>Purpose</h2>
+ Enable data entered in OSEE to be spell checked.
+ <h2>How to do it</h2>
+ As data is entered into OSEE spell-checked fields, a blue line will be displayed if the word is not recognized.
+ Only lower-case words or words with only first character uppercase will be spell checked. Acronyms, words with
+ special characters, numbers and single letter words will be ignored.
+ <h2>Main Dictionary</h2>
+ OSEE has a main dictionary included in it's release. See below for it's source, copyrights and credits.
+ <h2>Additional Released Dictionaries</h2>
+ Additionally dictionaries can be added to OSEE via extension points. These can only be
+ modified by hand and thus included in normal release cycle.
+ <h2>Run-time Global Dictionary</h2>
+ Each OSEE user is able to add words to a Global dictionary stored in the database by right-clicking on the word
+ underlined in blue and selecting to save global. These words are stored in the "Global Preferences" artifact
+ and will then be shown as a valid word in all users's spell checking.
+ <h2>Run-time Personal Dictionary</h2>
+ Each OSEE user is able to add words to their Personal dictionary stored in the database by right-clicking on the word
+ underlined in blue and selecting to save personal. These words are stored in the user's "User" artifact
+ and will then be shown as a valid word only for that user.
+ <br>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.jpg b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.jpg
new file mode 100644
index 00000000000..45ca168e383
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/spell_check.jpg
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/table_customization.html b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/table_customization.html
new file mode 100644
index 00000000000..984444f7779
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/table_customization.html
@@ -0,0 +1,61 @@
+<html>
+<!--
+ Copyright (c) 2004, 2007 Boeing.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Boeing - initial API and implementation
+-->
+ <head>
+ <title>Table Customization</title>
+ <LINK rel="stylesheet" type="text/css" href="../../osee.help/html/style.css">
+ </head>
+
+ <body>
+ <h1>Table Customization</h1>
+ <h2>Purpose</h2>
+ <p>Customize the table to show desired columns, widths with specified sorting and filters. Enables loading of
+ both personal and global customizations and provides the ability to select a customization as the
+ default customization to be loaded upon startup.</p>
+ <h2>Select Customization</h2>
+ <p>Lists current personal and global customizations to be selected from. Double-click to automatically
+ load selected customizationa and close dialog.</p>
+ <ul>
+ <li>"-- Table Default --" - Show the default customization for this table.</li>
+ <li>"-- Current --" - Show the current customization as set from table alterations.</li>
+ <li>"Other" - Shows a stored customization available for loading.</li>
+ </ul>
+ <h2>Select Customization - Icons / Overlays</h2>
+ <ul>
+ <li><img src="../images/customize.gif"/> Customization.</li>
+ <li><img src="../images/customizeD.gif"/> Default customization loaded up restart.</li>
+ <li><img src="../images/customizeG.gif"/> Global customization available to all users.</li>
+ </ul>
+ <h2>Select Customization - Buttons</h2>
+ <ul>
+ <li>Load - Loads the currently selected customization.</li>
+ <li>Load+Close - Loads the selected customization and closes the dialog.</li>
+ <li>Set as Default - Sets the currently selected customization as the default to load upon restart.</li>
+ <li>Delete - Deletes the currently selected customization.</li>
+ </ul>
+ <h2>Configure Customization</h2>
+ <p>Allows for the selected customization to be configured, loaded and saved.</p>
+ <ul>
+ <li>Hidden Columns - Shows the columns that are available to be displays but configured as hidden.</li>
+ <li>Visible Columns - Show the columns that are configured to be displayed for this customization.</li>
+ <li>(x) - shows the currently configured width of the column</li>
+ <li>Sorter - xml representation of the column order to sort by</li>
+ <li>Text Filter - shows the configured text filter to be applied for this customization. Enter as string.</li>
+ <li></li>
+ </ul>
+ <h2>Configure Customization - Buttons</h2>
+ <ul>
+ <li>Load - Loads the configured customization.</li>
+ <li>Load+Close - Loads the configured customization and closes the dialog.</li>
+ <li>Rename - Allows the user to define an alternate name for the column.</li>
+ <li>Save - Saves the configured customization as personal or global (if permissions allow).</li>
+ </ul>
+</body>
+</html> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/toc.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/toc.xml
new file mode 100644
index 00000000000..2b535214797
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/reference/toc.xml
@@ -0,0 +1,3 @@
+<toc label="OSEE Application Framework">
+ <link toc="reference/skynet_toc.xml"/>
+</toc>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactRenderer.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactRenderer.exsd
new file mode 100644
index 00000000000..742b08199f5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactRenderer.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="ArtifactRenderer" name="ArtifactRenderer"/>
+ </appinfo>
+ <documentation>
+ Renderers are responsible for controlling the previewing, editing, and printing of artifacts for certain artifact types. If no ApplicableArtifactType&apos;s are specified then, the renderer implicitly applies to all artifact types.
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence minOccurs="1" maxOccurs="unbounded">
+ <element ref="Renderer" minOccurs="1" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="Renderer">
+ <complexType>
+ <attribute name="classname" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn="osee.skynet.gui.render.IRenderer"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiInfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactRendererTemplate.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactRendererTemplate.exsd
new file mode 100644
index 00000000000..055f7d0ba6d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactRendererTemplate.exsd
@@ -0,0 +1,119 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="ArtifactRendererTemplate" name="ArtifactRendererTemplate"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="Template" minOccurs="1" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="Template">
+ <complexType>
+ <attribute name="presentationType" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="templateFile" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="resource"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ <attribute name="templateName" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactReport.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactReport.exsd
new file mode 100644
index 00000000000..3cb93aa84d4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/ArtifactReport.exsd
@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="ArtifactReport" name="ArtifactReport"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="report" minOccurs="1" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="report">
+ <complexType>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn="osee.skynet.gui.search.report.ReportJob"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/AttributeXWidgetProvider.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/AttributeXWidgetProvider.exsd
new file mode 100644
index 00000000000..953ae40cc4d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/AttributeXWidgetProvider.exsd
@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="AttributeXWidgetProvider" name="AttributeXWidgetProvider"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence minOccurs="1" maxOccurs="unbounded">
+ <element ref="AttributeXWidgetProvider"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="AttributeXWidgetProvider">
+ <complexType>
+ <attribute name="classname" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.osee.framework.ui.skynet.widgets.workflow.IAttributeXWidgetProvider"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/BlamOperation.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/BlamOperation.exsd
new file mode 100644
index 00000000000..7ac6051f663
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/BlamOperation.exsd
@@ -0,0 +1,112 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="BlamOperation" name="BlamOperation"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="Operation"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="Operation">
+ <complexType>
+ <attribute name="className" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn="osee.skynet.gui.blam.BlamOperation"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ <attribute name="usageHtmlFile" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/DBHealthTask.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/DBHealthTask.exsd
new file mode 100644
index 00000000000..062aa1daf1b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/DBHealthTask.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="DBHealthTask" name="DBHealthTask"/>
+ </appinfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="Task"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="Task">
+ <complexType>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn="org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask:"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/IgnorePublishAttribute.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/IgnorePublishAttribute.exsd
new file mode 100644
index 00000000000..72cd84a8c62
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/IgnorePublishAttribute.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="IgnorePublishAttribute" name="IgnorePublishAttribute"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="attribute"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="attribute">
+ <complexType>
+ <attribute name="name" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/OseeDictionary.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/OseeDictionary.exsd
new file mode 100644
index 00000000000..1bfb361e781
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/OseeDictionary.exsd
@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="OseeDictionary" name="OseeDictionary"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="OseeDictionary" minOccurs="1" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="OseeDictionary">
+ <complexType>
+ <attribute name="classname" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn="osee.skynet.gui.util.IOseeDictionary"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/SimpleTemplateProviderTemplate.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/SimpleTemplateProviderTemplate.exsd
new file mode 100644
index 00000000000..bdccba34134
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/SimpleTemplateProviderTemplate.exsd
@@ -0,0 +1,120 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="SimpleTemplateProviderTemplate" name="SimpleTemplateProviderTemplate"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence minOccurs="1" maxOccurs="unbounded">
+ <element ref="Template"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="Template">
+ <complexType>
+ <sequence>
+ <element ref="MatchCriteria" minOccurs="1" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="File" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="resource"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="MatchCriteria">
+ <complexType>
+ <attribute name="match" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/TemplateProvider.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/TemplateProvider.exsd
new file mode 100644
index 00000000000..1a2c46c1dcc
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/TemplateProvider.exsd
@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.skynet.core">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.skynet.core" id="TemplateProvider" name="TemplateProvider"/>
+ </appInfo>
+ <documentation>
+ Contributions to this extension point must implement ITemplateProvider.
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="TemplateProvider"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="TemplateProvider">
+ <complexType>
+ <attribute name="classname" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.osee.framework.skynet.core.word.ITemplateProvider"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WordMlProducer.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WordMlProducer.exsd
new file mode 100644
index 00000000000..c567ccdbc4c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WordMlProducer.exsd
@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="WordMlProducer" name="WordMlProducer"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="producer"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="producer">
+ <complexType>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn="osee.skynet.gui.render.word.IWordMlProducer"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WordOutlineContentHandler.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WordOutlineContentHandler.exsd
new file mode 100644
index 00000000000..852fb30bc43
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WordOutlineContentHandler.exsd
@@ -0,0 +1,119 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="WordOutlineContentHandler" name="WordOutlineContentHandler"/>
+ </appInfo>
+ <documentation>
+ Allows plugins to contribute a handler for use when parsing WordML as an outline. This way implementation specific actions can be taken to handle what content comes in as seperate artifacts, and how the content is split among attributes. All extension points available are presented to the user to select from upon import.
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence minOccurs="1" maxOccurs="unbounded">
+ <element ref="Handler"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="Handler">
+ <complexType>
+ <attribute name="id" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn="osee.skynet.gui.Import.IWordOutlineContentHandler"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WorkDefinitionProvider.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WorkDefinitionProvider.exsd
new file mode 100644
index 00000000000..eaa7f4567eb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/WorkDefinitionProvider.exsd
@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="WorkDefinitionProvider" name="WorkDefinitionProvider"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence minOccurs="1" maxOccurs="unbounded">
+ <element ref="WorkDefinitionProvider"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="WorkDefinitionProvider">
+ <complexType>
+ <attribute name="classname" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.osee.framework.ui.skynet.widgets.workflow.IWorkDefinitionProvider"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/XWidgetProvider.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/XWidgetProvider.exsd
new file mode 100644
index 00000000000..6f9c88a6b51
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/schema/XWidgetProvider.exsd
@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="XWidgetProvider" name="XWidgetProvider"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="XWidgetProvider"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="XWidgetProvider">
+ <complexType>
+ <attribute name="classname" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.osee.framework.ui.skynet.widgets.workflow.IXWidgetProvider"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AdminContributionItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AdminContributionItem.java
new file mode 100644
index 00000000000..951e0f6827c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AdminContributionItem.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class AdminContributionItem extends OseeContributionItem {
+
+ private static final String ID = "ats.admin";
+
+ private static final Image ENABLED_IMAGE = SkynetGuiPlugin.getInstance().getImage("redExclaim.gif");
+ private static final Image DISABLED_IMAGE = ENABLED_IMAGE;
+
+ private static String ENABLED_TOOLTIP = "AtsAdmin";
+ private static String DISABLED_TOOLTIP = "";
+
+ private AdminContributionItem() {
+ super(ID);
+ init();
+ }
+
+ private void init() {
+ updateStatus(true);
+ }
+
+ public static void addTo(IStatusLineManager manager) {
+ boolean wasFound = false;
+ for (IContributionItem item : manager.getItems()) {
+ if (item instanceof AdminContributionItem) {
+ wasFound = true;
+ break;
+ }
+ }
+ if (!wasFound) {
+ manager.add(new AdminContributionItem());
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getDisabledImage()
+ */
+ @Override
+ protected Image getDisabledImage() {
+ return DISABLED_IMAGE;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getDisabledToolTip()
+ */
+ @Override
+ protected String getDisabledToolTip() {
+ return DISABLED_TOOLTIP;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getEnabledImage()
+ */
+ @Override
+ protected Image getEnabledImage() {
+ return ENABLED_IMAGE;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getEnabledToolTip()
+ */
+ @Override
+ protected String getEnabledToolTip() {
+ return ENABLED_TOOLTIP;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AlphabeticalRelationComparator.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AlphabeticalRelationComparator.java
new file mode 100644
index 00000000000..3b8470bb9c7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AlphabeticalRelationComparator.java
@@ -0,0 +1,39 @@
+/**
+ *
+ */
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.Comparator;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.osee.framework.skynet.core.relation.RelationSide;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class AlphabeticalRelationComparator implements Comparator<RelationLink> {
+ private final RelationSide relationSide;
+
+ /**
+ * @param relationSide
+ */
+ public AlphabeticalRelationComparator(RelationSide relationSide) {
+ super();
+ this.relationSide = relationSide;
+ }
+
+ /* (non-Javadoc)
+ * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+ */
+ @Override
+ public int compare(RelationLink relationLink1, RelationLink relationLink2) {
+ try {
+ return relationLink1.getArtifact(relationSide).compareTo(relationLink2.getArtifact(relationSide));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return 0;
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactContentProvider.java
new file mode 100644
index 00000000000..4c835b0a64d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactContentProvider.java
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactChangeListener;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * The basis for the comments in this class can be found at
+ * http://www.eclipse.org/articles/treeviewer-cg/TreeViewerArticle.htm
+ *
+ * @author Ryan D. Brooks
+ */
+public class ArtifactContentProvider implements ITreeContentProvider, ArtifactChangeListener {
+ private static Object[] EMPTY_ARRAY = new Object[0];
+ protected TreeViewer viewer;
+
+ /*
+ * @see IContentProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /**
+ * Notifies this content provider that the given viewer's input has been switched to a different element.
+ * <p>
+ * A typical use for this method is registering the content provider as a listener to changes on the new input (using
+ * model-specific means), and deregistering the viewer from the old input. In response to these change notifications,
+ * the content provider propagates the changes to the viewer.
+ * </p>
+ *
+ * @param viewer the viewer
+ * @param oldInput the old input element, or <code>null</code> if the viewer did not previously have an input
+ * @param newInput the new input element, or <code>null</code> if the viewer does not have an input
+ * @see IContentProvider#inputChanged(Viewer, Object, Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ /**
+ * The tree viewer calls its content provider&#8217;s getChildren method when it needs to create or display the child
+ * elements of the domain object, <b>parent </b>. This method should answer an array of domain objects that represent
+ * the unfiltered children of <b>parent </b>
+ *
+ * @see ITreeContentProvider#getChildren(Object)
+ */
+ @SuppressWarnings("unchecked")
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Artifact) {
+ Artifact parentItem = (Artifact) parentElement;
+
+ try {
+ if (AccessControlManager.checkObjectPermission(parentItem, PermissionEnum.READ)) {
+ Collection<Artifact> children = parentItem.getChildren();
+ if (children != null) {
+ return children.toArray();
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ } else if (parentElement instanceof Collection) {
+ return ((Collection) parentElement).toArray();
+ }
+
+ return EMPTY_ARRAY;
+ }
+
+ /*
+ * @see ITreeContentProvider#getParent(Object)
+ */
+ public Object getParent(Object element) {
+ if (element instanceof Artifact) {
+ try {
+ return ((Artifact) element).getParent();
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * The tree viewer asks its content provider if the domain object represented by <b>element </b> has any children.
+ * This method is used by the tree viewer to determine whether or not a plus or minus should appear on the tree
+ * widget.
+ *
+ * @see ITreeContentProvider#hasChildren(Object)
+ */
+ public boolean hasChildren(Object element) {
+ /*
+ * If the item is an artifact, then use it's optimized check. If it is not an artifact, then
+ * resort to asking the general children
+ */
+ if (element instanceof Artifact) {
+ Artifact artifact = (Artifact) element;
+ try {
+ if (AccessControlManager.checkObjectPermission(artifact, PermissionEnum.READ)) {
+ if (artifact.isDeleted()) return false;
+ return artifact.getRelatedArtifactsCount(CoreRelationEnumeration.DEFAULT_HIERARCHICAL__CHILD) > 0;
+ } else {
+ return false;
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ // Assume it has children if an error happens
+ return true;
+ }
+ } else {
+ return getChildren(element).length > 0;
+ }
+ }
+
+ /**
+ * This is the method invoked by calling the <b>setInput </b> method on the tree viewer. In fact, the <b>getElements
+ * </b> method is called only in response to the tree viewer's <b>setInput </b> method and should answer with the
+ * appropriate domain objects of the inputElement. The <b>getElements </b> and <b>getChildren </b> methods operate in
+ * a similar way. Depending on your domain objects, you may have the <b>getElements </b> simply return the result of
+ * calling <b>getChildren </b>. The two methods are kept distinct because it provides a clean way to differentiate
+ * between the root domain object and all other domain objects.
+ *
+ * @see IStructuredContentProvider#getElements(Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactDoubleClick.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactDoubleClick.java
new file mode 100644
index 00000000000..0e37a21575e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactDoubleClick.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.IATSArtifact;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.search.ui.text.Match;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ArtifactDoubleClick implements IDoubleClickListener {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
+ */
+ public void doubleClick(DoubleClickEvent event) {
+ openArtifact(event.getSelection());
+ }
+
+ public static void openArtifact(ISelection selection) {
+ IStructuredSelection structSel = (IStructuredSelection) selection;
+ Object object = (Object) structSel.getFirstElement();
+ Artifact artifact = null;
+ if (object instanceof Artifact) {
+ artifact = (Artifact) structSel.getFirstElement();
+ } else if (object instanceof Match) {
+ Match match = (Match) object;
+
+ if (match.getElement() instanceof Artifact) {
+ artifact = (Artifact) match.getElement();
+ }
+ }
+
+ if (artifact == null) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, "The artifact associated with the double-click was null");
+ } else {
+ try {
+ if (AccessControlManager.checkObjectPermission(artifact, PermissionEnum.READ)) {
+ if (artifact instanceof IATSArtifact)
+ OseeAts.openATSArtifact(artifact);
+ else
+ ArtifactEditor.editArtifact(artifact);
+ } else {
+ OSEELog.logSevere(SkynetGuiPlugin.class,
+ "The user " + UserManager.getUser() + " does not have read access to " + artifact, true);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactDragDropSupport.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactDragDropSupport.java
new file mode 100644
index 00000000000..dfab3915950
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactDragDropSupport.java
@@ -0,0 +1,167 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactData;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTransfer;
+import org.eclipse.osee.framework.skynet.core.artifact.WorkspaceFileArtifact;
+import org.eclipse.osee.framework.skynet.core.artifact.WorkspaceURL;
+import org.eclipse.osee.framework.skynet.core.relation.RelationManager;
+import org.eclipse.osee.framework.skynet.core.relation.RelationSide;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeSide;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkspace;
+import org.eclipse.osee.framework.ui.skynet.relation.explorer.RelationExplorerWindow;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @author Michael S. Rodgers
+ */
+public class ArtifactDragDropSupport {
+
+ public static void performDragDrop(DropTargetEvent e, RelationExplorerWindow window, Shell shell) {
+ performDragDrop(e, null, window, shell);
+ }
+
+ public static void performDragDrop(DropTargetEvent e, Artifact[] artifacts, RelationExplorerWindow window, Shell shell) {
+
+ if (ArtifactTransfer.getInstance().isSupportedType(e.currentDataType)) {
+
+ if (artifacts != null)
+ addArtifacts(artifacts, window);
+ else {
+ ArtifactData artData = ArtifactTransfer.getInstance().nativeToJava(e.currentDataType);
+ addArtifacts(artData.getArtifacts(), window);
+ }
+ } else if (e.data instanceof String[]) {
+ addFiles((String[]) e.data, window, shell);
+
+ } else if (e.data instanceof String) {
+ addURL((String) e.data, window, shell);
+ }
+ }
+
+ private static void ensureLinkValidity(RelationTypeSide group, Artifact artifact) throws OseeArgumentException {
+ RelationType relationType = group.getRelationType();
+ Artifact otherArtifact = group.getArtifact();
+
+ Artifact artifactA = group.getSide() == RelationSide.SIDE_A ? artifact : otherArtifact;
+ Artifact artifactB = group.getSide() == RelationSide.SIDE_A ? otherArtifact : artifact;
+ RelationManager.ensureRelationCanBeAdded(relationType, artifactA, artifactB);
+ }
+
+ private static void addArtifacts(Artifact[] artifacts, RelationExplorerWindow window) {
+ RelationTypeSide group = window.getRelationGroup();
+ RelationSide relationSide = group.getSide();
+ RelationType relationType = group.getRelationType();
+
+ try {
+ for (Artifact artifact : artifacts) {
+ try {
+ Artifact artA = null;
+ Artifact artB = null;
+ if (relationSide == RelationSide.SIDE_A) {
+ artA = artifact;
+ artB = group.getArtifact();
+ } else {
+ artA = group.getArtifact();
+ artB = artifact;
+ }
+ RelationManager.ensureRelationCanBeAdded(relationType, artA, artB);
+
+ window.addValid(artifact);
+ } catch (IllegalArgumentException ex) {
+ window.addInvalidArtifact(artifact, ex.getMessage());
+ }
+ }
+ } catch (OseeArgumentException ex) {
+ window.addInvalid("All", ex.getMessage());
+ }
+ }
+
+ private static void addFiles(String[] fileNames, RelationExplorerWindow window, Shell shell) {
+ RelationTypeSide group = window.getRelationGroup();
+ IFile iFile;
+ Artifact artifact;
+
+ for (int i = 0; i < fileNames.length; i++) {
+ iFile = AWorkspace.getIFile(fileNames[i]);
+ String location;
+
+ if (iFile == null) {
+ try {
+ location = new File(fileNames[i]).toURL().toString();
+ } catch (MalformedURLException e) {
+ window.addInvalid(fileNames[i], "Malformed URL exception: " + e.getMessage());
+ continue;
+ }
+ } else {
+ location = WorkspaceURL.getURL(iFile);
+ }
+
+ try {
+ artifact = WorkspaceFileArtifact.getArtifactFromWorkspaceFile(location, shell);
+ } catch (Exception ex) {
+ window.addInvalid(location, "Runtime exception: " + ex.getMessage());
+ continue;
+ }
+
+ if (artifact == null) {
+ window.addInvalid(location, "Artifact has been cancelled");
+ } else {
+ try {
+ ensureLinkValidity(group, artifact);
+ window.addValid(artifact);
+ } catch (OseeArgumentException ex) {
+ window.addInvalid(artifact.getDescriptiveName(), ex.getMessage());
+ }
+
+ }
+ }
+ }
+
+ private static void addURL(String url, RelationExplorerWindow window, Shell shell) {
+ RelationTypeSide group = window.getRelationGroup();
+ Artifact artifact;
+ String location;
+
+ try {
+ location = new URL(url).toString();
+ } catch (MalformedURLException e) {
+ window.addInvalid(url, "Malformed Exception : " + e.getMessage());
+ return;
+ }
+
+ try {
+ artifact = WorkspaceFileArtifact.getArtifactFromWorkspaceFile(location, shell);
+ } catch (Exception ex) {
+ window.addInvalid(location, "Runtime exception: " + ex.getMessage());
+ return;
+ }
+
+ if (artifact == null) {
+ window.addInvalid(location, "Artifact has been cancelled");
+ }
+ try {
+ ensureLinkValidity(group, artifact);
+ window.addValid(artifact);
+ } catch (OseeArgumentException ex) {
+ window.addInvalid(artifact.getDescriptiveName(), ex.getMessage());
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java
new file mode 100644
index 00000000000..24ea71223bb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java
@@ -0,0 +1,1655 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.db.connection.exception.ArtifactDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.HashCollection;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.jdk.core.util.StringFormat;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactData;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactModType;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTransfer;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.skynet.core.event.AccessControlEventType;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
+import org.eclipse.osee.framework.skynet.core.event.IAccessControlEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactModifiedEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactsChangeTypeEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IRelationModifiedEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData.ChangeType;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.osee.framework.skynet.core.relation.RelationModType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationSide;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.plugin.util.SelectionCountChangeListener;
+import org.eclipse.osee.framework.ui.plugin.util.Wizards;
+import org.eclipse.osee.framework.ui.skynet.Import.ArtifactImportWizard;
+import org.eclipse.osee.framework.ui.skynet.access.PolicyDialog;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectionDialog;
+import org.eclipse.osee.framework.ui.skynet.history.RevisionHistoryView;
+import org.eclipse.osee.framework.ui.skynet.menu.ArtifactPreviewMenu;
+import org.eclipse.osee.framework.ui.skynet.menu.ArtifactTreeViewerGlobalMenuHelper;
+import org.eclipse.osee.framework.ui.skynet.menu.GlobalMenu;
+import org.eclipse.osee.framework.ui.skynet.menu.GlobalMenuPermissions;
+import org.eclipse.osee.framework.ui.skynet.menu.IGlobalMenuHelper;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerView;
+import org.eclipse.osee.framework.ui.skynet.util.ArtifactClipboard;
+import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
+import org.eclipse.osee.framework.ui.skynet.util.HierarchicalReportDialog;
+import org.eclipse.osee.framework.ui.skynet.util.HtmlReportJob;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.ShowAttributeAction;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetViews;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.osee.framework.ui.swt.MenuItems;
+import org.eclipse.osee.framework.ui.swt.TreeViewerUtility;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.custom.TreeEditor;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ExportResourcesAction;
+import org.eclipse.ui.actions.ImportResourcesAction;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ArtifactExplorer extends ViewPart implements IAccessControlEventListener, IRelationModifiedEventListener, IArtifactModifiedEventListener, IFrameworkTransactionEventListener, IBranchEventListener, IArtifactsPurgedEventListener, IArtifactsChangeTypeEventListener, IActionable, ISelectionProvider {
+ private static final Image ACCESS_DENIED_IMAGE = SkynetGuiPlugin.getInstance().getImage("lockkey.gif");
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.ArtifactExplorer";
+ private static final String ROOT_GUID = "artifact.explorer.last.root_guid";
+ private static final ArtifactClipboard artifactClipboard = new ArtifactClipboard(VIEW_ID);
+ private static final LinkedList<Tree> trees = new LinkedList<Tree>();
+
+ private TreeViewer treeViewer;
+ private Action upAction;
+ private Artifact exploreRoot;
+ private MenuItem editMenuItem;
+ private MenuItem massEditMenuItem;
+ private MenuItem skywalkerMenuItem;
+ private MenuItem createMenuItem;
+ private MenuItem reportMenuItem;
+ private MenuItem openMenuItem;
+ private MenuItem accessControlMenuItem;
+ private MenuItem lockMenuItem;
+ private MenuItem goIntoMenuItem;
+ private MenuItem copyMenuItem;
+ private MenuItem pasteMenuItem;
+ private MenuItem renameArtifactMenuItem;
+ private NeedArtifactMenuListener needArtifactListener;
+ private NeedProjectMenuListener needProjectListener;
+ private Tree myTree;
+ private TreeEditor myTreeEditor;
+ private Text myTextBeingRenamed;
+ final Color myYellowColor = Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW);
+ private Action showArtIds;
+ private Action showArtType;
+ private Action showArtVersion;
+ private Action newArtifactExplorer;
+ private Action collapseAllAction;
+ private ShowAttributeAction attributesAction;
+ IGlobalMenuHelper globalMenuHelper;
+
+ private Composite stackComposite;
+ private Control branchUnreadableWarning;
+ private StackLayout stackLayout;
+
+ public ArtifactExplorer() {
+ }
+
+ public static void explore(Collection<Artifact> artifacts) {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ ArtifactExplorer artifactExplorer;
+ try {
+ artifactExplorer =
+ (ArtifactExplorer) page.showView(ArtifactExplorer.VIEW_ID, new GUID().toString(),
+ IWorkbenchPage.VIEW_ACTIVATE);
+ artifactExplorer.setPartName("Artifacts");
+ artifactExplorer.setContentDescription("These artifact must be handled individually");
+ artifactExplorer.treeViewer.setInput(artifacts);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ private Control createDefaultWarning(Composite parent) {
+ Composite composite = new Composite(parent, SWT.BORDER);
+ composite.setLayout(new GridLayout(2, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+
+ Label image = new Label(composite, SWT.NONE);
+ image.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
+ image.setImage(ACCESS_DENIED_IMAGE);
+ image.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+
+ Label label = new Label(composite, SWT.NONE);
+ Font font = new Font(PlatformUI.getWorkbench().getDisplay(), "Courier New", 10, SWT.BOLD);
+ label.setFont(font);
+ label.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_RED));
+ label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
+ label.setText("Branch Read Access Denied.\nContact your administrator.");
+ label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+
+ return composite;
+ }
+
+ private void checkBranchReadable() throws OseeCoreException {
+ Control control = branchUnreadableWarning;
+ if (false != (new GlobalMenuPermissions(globalMenuHelper)).isDefaultBranchReadable()) {
+ control = treeViewer.getTree();
+ }
+ stackLayout.topControl = control;
+ stackComposite.layout();
+ stackComposite.getParent().layout();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+
+ @Override
+ public void createPartControl(Composite parent) {
+ try {
+ if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) return;
+
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.heightHint = 1000;
+ gridData.widthHint = 1000;
+
+ parent.setLayout(new GridLayout(1, false));
+ parent.setLayoutData(gridData);
+
+ stackComposite = new Composite(parent, SWT.NONE);
+ stackLayout = new StackLayout();
+ stackComposite.setLayout(stackLayout);
+ stackComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ branchUnreadableWarning = createDefaultWarning(stackComposite);
+
+ treeViewer = new TreeViewer(stackComposite);
+ myTree = treeViewer.getTree();
+ Tree tree = treeViewer.getTree();
+ treeViewer.setContentProvider(new ArtifactContentProvider());
+ treeViewer.setLabelProvider(new ArtifactLabelProvider(this));
+ treeViewer.addDoubleClickListener(new ArtifactDoubleClick());
+ treeViewer.getControl().setLayoutData(gridData);
+
+ // We can not use the hash lookup because an artifact may not have a
+ // good equals.
+ // This can be added back once the content provider is converted over to
+ // use job node.
+ treeViewer.setUseHashlookup(false);
+
+ treeViewer.addSelectionChangedListener(new SelectionCountChangeListener(getViewSite()));
+ globalMenuHelper = new ArtifactTreeViewerGlobalMenuHelper(treeViewer);
+
+ createCollapseAllAction();
+ createUpAction();
+ createShowArtVersionAction();
+ createShowArtTypeAction();
+ createAttributesAction();
+ createNewArtifactExplorerAction();
+
+ getSite().setSelectionProvider(treeViewer);
+ addExploreSelection();
+
+ setupPopupMenu();
+
+ new ArtifactExplorerDragAndDrop(tree, VIEW_ID);
+ parent.layout();
+
+ if (AccessControlManager.isOseeAdmin()) {
+ createShowArtIdsAction();
+ }
+ createSetDefaultBranchAction();
+ OseeAts.addBugToViewToolbar(this, this, SkynetActivator.getInstance(), VIEW_ID, "Artifact Explorer");
+
+ OseeContributionItem.addTo(this, false);
+ getViewSite().getActionBars().updateActionBars();
+
+ updateEnablementsEtAl();
+ trees.add(tree);
+ setHelpContexts();
+
+ checkBranchReadable();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+
+ OseeEventManager.addListener(this);
+ }
+
+ /**
+ * Reveal an artifact in the viewer and select it.
+ *
+ * @param artifact TODO
+ */
+ public static void revealArtifact(Artifact artifact) {
+ try {
+
+ if (artifact.isDeleted()) {
+ OSEELog.logSevere(SkynetGuiPlugin.class,
+ "The artifact " + artifact.getDescriptiveName() + " has been deleted.", true);
+ } else {
+ if (artifact.isHistorical()) {
+ artifact = ArtifactQuery.getArtifactFromId(artifact.getArtId(), artifact.getBranch(), false);
+ }
+ if (artifact.isOrphan()) {
+ OSEELog.logSevere(SkynetGuiPlugin.class,
+ "The artifact " + artifact.getDescriptiveName() + " does not have a parent (orphan).", true);
+ } else {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ ArtifactExplorer artifactExplorer = (ArtifactExplorer) page.showView(ArtifactExplorer.VIEW_ID);
+ artifactExplorer.treeViewer.setSelection(new StructuredSelection(artifact), true);
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ private void setupPopupMenu() {
+
+ Menu popupMenu = new Menu(treeViewer.getTree().getParent());
+ needArtifactListener = new NeedArtifactMenuListener();
+ needProjectListener = new NeedProjectMenuListener();
+ popupMenu.addMenuListener(needArtifactListener);
+ popupMenu.addMenuListener(needProjectListener);
+
+ createNewItemMenuItem(popupMenu);
+ createGoIntoMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createOpenMenuItem(popupMenu);
+ createEditMenuItem(popupMenu);
+
+ ArtifactPreviewMenu.createPreviewMenuItem(popupMenu, treeViewer);
+
+ createMassEditMenuItem(popupMenu);
+ createSkywalkerMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ new GlobalMenu(popupMenu, globalMenuHelper);
+ createRenameArtifactMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createReportMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createHistoryMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createImportExportMenuItems(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createLockMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createCopyMenuItem(popupMenu);
+ createPasteMenuItem(popupMenu);
+ createExpandAllMenuItem(popupMenu);
+ createSelectAllMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createAccessControlMenuItem(popupMenu);
+ treeViewer.getTree().setMenu(popupMenu);
+ myTreeEditor = new TreeEditor(myTree);
+ myTreeEditor.horizontalAlignment = SWT.LEFT;
+ myTreeEditor.grabHorizontal = true;
+ myTreeEditor.minimumWidth = 50;
+
+ }
+
+ protected void createUpAction() {
+ upAction = new Action("View Parent") {
+ @Override
+ public void run() {
+ try {
+ Artifact parent = exploreRoot.getParent();
+
+ if (parent == null) return;
+
+ Object[] expanded = treeViewer.getExpandedElements();
+ Object[] expandedPlus = new Object[expanded.length + 1];
+ for (int i = 0; i < expanded.length; i++)
+ expandedPlus[i] = expanded[i];
+ expandedPlus[expandedPlus.length - 1] = exploreRoot;
+
+ explore(parent);
+
+ treeViewer.setExpandedElements(expandedPlus);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ };
+
+ upAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("up.gif"));
+ upAction.setToolTipText("View Parent");
+ updateEnablementsEtAl();
+
+ IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
+ toolbarManager.add(upAction);
+ }
+
+ protected void createShowArtIdsAction() {
+
+ showArtIds = new Action("Show Artifact Ids") {
+ @Override
+ public void run() {
+ setChecked(!isChecked());
+ updateShowArtIdText();
+ treeViewer.refresh();
+ }
+ };
+
+ showArtIds.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("filter.gif"));
+ updateShowArtIdText();
+
+ IMenuManager toolbarManager = getViewSite().getActionBars().getMenuManager();
+ toolbarManager.add(showArtIds);
+ }
+
+ private void createSetDefaultBranchAction() {
+ Action setDefaultBranch = new Action("Set Default Branch", Action.AS_PUSH_BUTTON) {
+ @Override
+ public void run() {
+ BranchSelectionDialog branchSelection = new BranchSelectionDialog("Set Default Branch", false);
+ int result = branchSelection.open();
+ if (result == Window.OK) {
+ try {
+ BranchManager.setDefaultBranch(branchSelection.getSelection());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ }
+ };
+ setDefaultBranch.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("branch_change.gif"));
+ IMenuManager toolbarManager = getViewSite().getActionBars().getMenuManager();
+ toolbarManager.add(setDefaultBranch);
+ }
+
+ protected void createShowArtTypeAction() {
+
+ showArtType = new Action("Show Artifact Type") {
+ @Override
+ public void run() {
+ setChecked(!isChecked());
+ updateShowArtTypeText();
+ treeViewer.refresh();
+ }
+ };
+
+ showArtType.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("filter.gif"));
+ updateShowArtTypeText();
+
+ IMenuManager toolbarManager = getViewSite().getActionBars().getMenuManager();
+ toolbarManager.add(showArtType);
+ }
+
+ protected void createShowArtVersionAction() {
+
+ showArtVersion = new Action("Show Artifact Version") {
+ @Override
+ public void run() {
+ setChecked(!isChecked());
+ updateShowArtVersionText();
+ treeViewer.refresh();
+ }
+ };
+
+ showArtVersion.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("filter.gif"));
+ updateShowArtVersionText();
+
+ IMenuManager toolbarManager = getViewSite().getActionBars().getMenuManager();
+ toolbarManager.add(showArtVersion);
+ }
+
+ private void createNewArtifactExplorerAction() {
+
+ newArtifactExplorer = new Action("New Artifact Explorer") {
+ @Override
+ public void run() {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ ArtifactExplorer artifactExplorer;
+ try {
+ artifactExplorer =
+ (ArtifactExplorer) page.showView(ArtifactExplorer.VIEW_ID, GUID.generateGuidStr(),
+ IWorkbenchPage.VIEW_ACTIVATE);
+ artifactExplorer.explore(ArtifactPersistenceManager.getDefaultHierarchyRootArtifact(BranchManager.getDefaultBranch()));
+ artifactExplorer.setExpandedArtifacts(treeViewer.getExpandedElements());
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ };
+
+ newArtifactExplorer.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("artifact_explorer.gif"));
+
+ IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
+ toolbarManager.add(newArtifactExplorer);
+ }
+
+ private void createCollapseAllAction() {
+
+ collapseAllAction = new Action("Collapse All") {
+ @Override
+ public void run() {
+ if (treeViewer != null) {
+ treeViewer.collapseAll();
+ }
+ }
+ };
+
+ collapseAllAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("collapseAll.gif"));
+
+ IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
+ toolbarManager.add(collapseAllAction);
+ }
+
+ private void updateShowArtIdText() {
+ showArtIds.setText((showArtIds.isChecked() ? "Hide" : "Show") + " Artifact Ids");
+ }
+
+ private void updateShowArtTypeText() {
+ showArtType.setText((showArtType.isChecked() ? "Hide" : "Show") + " Artifact Type");
+ }
+
+ private void updateShowArtVersionText() {
+ showArtVersion.setText((showArtVersion.isChecked() ? "Hide" : "Show") + " Artifact Version");
+ }
+
+ protected void createAttributesAction() {
+ try {
+ attributesAction = new ShowAttributeAction(treeViewer, SkynetGuiPlugin.ARTIFACT_EXPLORER_ATTRIBUTES_PREF);
+ attributesAction.addToView(this);
+ attributesAction.setValidAttributeTypes(SkynetViews.loadAttrTypesFromPreferenceStore(
+ SkynetGuiPlugin.ARTIFACT_EXPLORER_ATTRIBUTES_PREF, BranchManager.getDefaultBranch()));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ public String getSelectedAttributeData(Artifact artifact) throws Exception {
+ return attributesAction.getSelectedAttributeData(artifact);
+ }
+
+ private void createOpenMenuItem(Menu parentMenu) {
+ openMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ openMenuItem.setText("&Open");
+
+ needArtifactListener.add(openMenuItem);
+ openMenuItem.addSelectionListener(new OpenListener());
+ }
+
+ public class OpenListener extends SelectionAdapter {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> itemsIter = selection.iterator();
+
+ while (itemsIter.hasNext()) {
+ ArtifactEditor.editArtifact((Artifact) itemsIter.next());
+ }
+ }
+ }
+
+ private void createNewItemMenuItem(Menu parentMenu) {
+ SelectionAdapter listener = new NewArtifactMenuListener();
+ createMenuItem = new MenuItem(parentMenu, SWT.CASCADE);
+ Menu subMenu = new Menu(parentMenu.getShell(), SWT.DROP_DOWN);
+ createMenuItem.setMenu(subMenu);
+ needProjectListener.add(createMenuItem);
+ createMenuItem.setText("&New Child");
+ createMenuItem.setEnabled(true);
+
+ try {
+ Collection<ArtifactType> data = TypeValidityManager.getValidArtifactTypes(BranchManager.getDefaultBranch());
+ List<ArtifactType> descriptors = new ArrayList<ArtifactType>(data);
+ Collections.sort(descriptors);
+ for (ArtifactType descriptor : descriptors) {
+ if (!descriptor.getName().equals("Root Artifact")) {
+ MenuItem item = new MenuItem(subMenu, SWT.PUSH);
+ item.setText(descriptor.getName());
+ item.setImage(descriptor.getImage());
+ item.setData(descriptor);
+ item.addSelectionListener(listener);
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ private class NewArtifactMenuListener extends SelectionAdapter {
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> itemsIter = selection.iterator();
+ ArtifactType descriptor = (ArtifactType) ((MenuItem) ev.getSource()).getData();
+
+ EntryDialog ed =
+ new EntryDialog("New \"" + descriptor.getName() + "\" Artifact",
+ "Enter name for \"" + descriptor.getName() + "\" Artifact");
+ if (ed.open() != 0) return;
+ try {
+ // If nothing was selected, then the child belongs at the root
+ if (!itemsIter.hasNext()) {
+ exploreRoot.addNewChild(descriptor, ed.getEntry()).persistAttributesAndRelations();
+ ;
+ } else {
+ while (itemsIter.hasNext()) {
+ ((Artifact) itemsIter.next()).addNewChild(descriptor, ed.getEntry()).persistAttributesAndRelations();
+ ;
+ }
+ }
+ treeViewer.refresh();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ treeViewer.refresh(false);
+ }
+ }
+
+ private void createGoIntoMenuItem(Menu parentMenu) {
+ goIntoMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ goIntoMenuItem.setText("&Go Into");
+ needArtifactListener.add(goIntoMenuItem);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ goIntoMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> itemsIter = selection.iterator();
+ if (itemsIter.hasNext()) {
+ try {
+ Object[] expanded = treeViewer.getExpandedElements();
+ explore((Artifact) itemsIter.next());
+ treeViewer.setExpandedElements(expanded);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ });
+ }
+
+ private void createEditMenuItem(Menu parentMenu) {
+ editMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ editMenuItem.setText("&Edit");
+ needArtifactListener.add(editMenuItem);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ editMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+ LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
+ TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
+ try {
+ RendererManager.editInJob(selectedItems);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+
+ private void createMassEditMenuItem(Menu parentMenu) {
+ massEditMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ massEditMenuItem.setText("Mass Edit");
+ needArtifactListener.add(massEditMenuItem);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ massEditMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+ LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
+ TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
+ MassArtifactEditor.editArtifacts("", selectedItems);
+ }
+ });
+ }
+
+ private void createRenameArtifactMenuItem(Menu parentMenu) {
+ renameArtifactMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ renameArtifactMenuItem.setText("Rename Artifact");
+ needArtifactListener.add(renameArtifactMenuItem);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ renameArtifactMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent mySelectionEvent) {
+ handleRenameArtifactSelectionEvent(mySelectionEvent);
+ }
+ });
+ }
+
+ private void handleRenameArtifactSelectionEvent(SelectionEvent mySelectionEvent) {
+ // Clean up any previous editor control
+ Control oldEditor = myTreeEditor.getEditor();
+
+ if (oldEditor != null) {
+ oldEditor.dispose();
+ }
+
+ // Identify the selected row, only allow input if there is a single
+ // selected row
+ TreeItem[] selection = myTree.getSelection();
+
+ if (selection.length != 1) {
+ return;
+ }
+
+ final TreeItem myTreeItem = selection[0];
+
+ if (myTreeItem == null) {
+ return;
+ }
+ myTextBeingRenamed = new Text(myTree, SWT.BORDER);
+ myTextBeingRenamed.setBackground(myYellowColor);
+ Object myTreeItemObject = myTreeItem.getData();
+ myTextBeingRenamed.setText(((Artifact) myTreeItemObject).getDescriptiveName());
+ myTextBeingRenamed.addFocusListener(new FocusAdapter() {
+ @Override
+ public void focusLost(FocusEvent e) {
+ updateText(myTextBeingRenamed.getText(), myTreeItem);
+ myTextBeingRenamed.dispose();
+
+ }
+
+ @Override
+ public void focusGained(FocusEvent e) {
+ }
+ });
+
+ myTextBeingRenamed.addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyReleased(KeyEvent e) {
+ if ((e.character == SWT.CR)) {
+ updateText(myTextBeingRenamed.getText(), myTreeItem);
+ myTextBeingRenamed.dispose();
+ } else if (e.keyCode == SWT.ESC) {
+ myTextBeingRenamed.dispose();
+ }
+ }
+ });
+ myTextBeingRenamed.selectAll();
+ myTextBeingRenamed.setFocus();
+ myTreeEditor.setEditor(myTextBeingRenamed, myTreeItem);
+ }
+
+ private void updateText(String newLabel, TreeItem item) {
+ myTreeEditor.getItem().setText(newLabel);
+ Object myTreeItemObject = item.getData();
+ if (myTreeItemObject instanceof Artifact) {
+ Artifact myArtifact = (Artifact) myTreeItemObject;
+ try {
+ myArtifact.setSoleAttributeValue("Name", newLabel);
+ myArtifact.persistAttributes();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ treeViewer.refresh();
+ }
+
+ private void createSkywalkerMenuItem(Menu parentMenu) {
+ skywalkerMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ skywalkerMenuItem.setText("Sky Walker");
+ needArtifactListener.add(skywalkerMenuItem);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ skywalkerMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+ LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
+ TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
+ SkyWalkerView.exploreArtifact(selectedItems.getFirst());
+ }
+ });
+ }
+
+ private void createSelectAllMenuItem(Menu parentMenu) {
+ MenuItem menuItem = new MenuItem(parentMenu, SWT.PUSH);
+ menuItem.setText("&Select All\tCtrl+A");
+ menuItem.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(org.eclipse.swt.widgets.Event event) {
+ treeViewer.getTree().selectAll();
+ }
+ });
+ }
+
+ private void createHistoryMenuItem(Menu parentMenu) {
+ MenuItem revisionMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ revisionMenuItem.setText("&Show Resource History ");
+ revisionMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Artifact selectedArtifact = (Artifact) selection.getFirstElement();
+
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ try {
+ RevisionHistoryView revisionHistoryView =
+ (RevisionHistoryView) page.showView(RevisionHistoryView.VIEW_ID, selectedArtifact.getGuid(),
+ IWorkbenchPage.VIEW_ACTIVATE);
+ revisionHistoryView.explore(selectedArtifact);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+
+ private void createImportExportMenuItems(Menu parentMenu) {
+ MenuItems.createMenuItem(parentMenu, SWT.PUSH, new ImportResourcesAction(getViewSite().getWorkbenchWindow()));
+ MenuItems.createMenuItem(parentMenu, SWT.PUSH, new ExportResourcesAction(getViewSite().getWorkbenchWindow()));
+ }
+
+ private void createAccessControlMenuItem(Menu parentMenu) {
+ accessControlMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ accessControlMenuItem.setText("&Access Control ");
+ // accessControlMenuItem.setEnabled(false);
+ accessControlMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Artifact selectedArtifact = (Artifact) selection.getFirstElement();
+ try {
+ if (selectedArtifact != null) {
+ PolicyDialog pd = new PolicyDialog(Display.getCurrent().getActiveShell(), selectedArtifact);
+ pd.open();
+ checkBranchReadable();
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+
+ private void createReportMenuItem(Menu parentMenu) {
+ reportMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ reportMenuItem.setText("&Hierarchical Report");
+ reportMenuItem.addSelectionListener(new ReportListener());
+ }
+
+ private void createLockMenuItem(Menu parentMenu) {
+ lockMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ lockMenuItem.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> iterator = selection.iterator();
+
+ while (iterator.hasNext()) {
+ try {
+ Artifact object = (Artifact) iterator.next();
+ if ((new GlobalMenuPermissions(object)).isLocked()) {
+ AccessControlManager.getInstance().unLockObject(object, UserManager.getUser());
+ } else {
+ AccessControlManager.getInstance().lockObject(object, UserManager.getUser());
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ });
+ }
+
+ private void createCopyMenuItem(Menu parentMenu) {
+ copyMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ copyMenuItem.setText("Copy \tCtrl+C");
+ copyMenuItem.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ performCopy();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ });
+ }
+
+ private void performCopy() {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ ArrayList<Artifact> artifactTransferData = new ArrayList<Artifact>();
+ ArrayList<String> textTransferData = new ArrayList<String>();
+ Artifact artifact;
+
+ if (selection != null && !selection.isEmpty()) {
+ for (Object object : selection.toArray()) {
+ if (object instanceof Artifact) {
+ artifact = (Artifact) object;
+
+ artifactTransferData.add(artifact);
+ textTransferData.add(artifact.getDescriptiveName());
+ }
+ }
+ artifactClipboard.setArtifactsToClipboard(artifactTransferData, textTransferData);
+ }
+ }
+
+ private void createPasteMenuItem(Menu parentMenu) {
+ pasteMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ pasteMenuItem.setText("Paste \tCtrl+V");
+ pasteMenuItem.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ performPaste();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ });
+ }
+
+ /**
+ * This method must be called from the display thread
+ */
+ private void performPaste() {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+
+ if (selection != null && !selection.isEmpty()) {
+ Object object = selection.getFirstElement();
+
+ if (object instanceof Artifact) {
+ try {
+ artifactClipboard.pasteArtifactsFromClipboard((Artifact) object);
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+ }
+ }
+ }
+
+ private void createExpandAllMenuItem(Menu parentMenu) {
+ MenuItem menuItem = new MenuItem(parentMenu, SWT.PUSH);
+ menuItem.setText("Expand All\tCtrl++");
+ menuItem.addSelectionListener(new ExpandListener());
+ }
+
+ public class ExpandListener extends SelectionAdapter {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ expandAll((IStructuredSelection) treeViewer.getSelection());
+ }
+ }
+
+ public class ReportListener extends SelectionAdapter {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ Iterator<?> iter = ((IStructuredSelection) treeViewer.getSelection()).iterator();
+ ArrayList<Artifact> artifacts = new ArrayList<Artifact>();
+ while (iter.hasNext()) {
+ artifacts.add((Artifact) iter.next());
+ }
+ if (artifacts.size() > 0) {
+ HierarchicalReportDialog ld = new HierarchicalReportDialog(Display.getCurrent().getActiveShell());
+ int result = ld.open();
+ if (result == 0) {
+ HtmlReportJob job;
+ try {
+ job =
+ new HtmlReportJob("Hierarchical Report", artifacts,
+ CoreRelationEnumeration.DEFAULT_HIERARCHICAL__CHILD);
+ job.setRecurseChildren(ld.isRecurseChildren());
+ Jobs.startJob(job);
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+ }
+ }
+ }
+ }
+
+ private void expandAll(IStructuredSelection selection) {
+ Iterator<?> iter = selection.iterator();
+ while (iter.hasNext()) {
+ treeViewer.expandToLevel(iter.next(), TreeViewer.ALL_LEVELS);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWorkbenchPart#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ if (treeViewer != null) treeViewer.getControl().setFocus();
+ }
+
+ public void explore(Artifact artifact) throws CoreException, IllegalArgumentException {
+ if (artifact == null) {
+ throw new IllegalArgumentException("Can not explore a null artifact.");
+ }
+
+ exploreRoot = artifact;
+
+ if (treeViewer != null) {
+ Object objects[] = treeViewer.getExpandedElements();
+ treeViewer.setInput(exploreRoot);
+ setupPopupMenu();
+ updateEnablementsEtAl();
+ // Attempt to re-expand what was expanded
+ treeViewer.setExpandedElements(objects);
+ }
+ }
+
+ public void setExpandedArtifacts(Object... artifacts) {
+ if (treeViewer != null) {
+ treeViewer.setExpandedElements(artifacts);
+ }
+ }
+
+ private void updateEnablementsEtAl() {
+ // The upAction may be null if this viewpart has not been layed out yet
+ if (upAction != null) {
+ try {
+ upAction.setEnabled(exploreRoot != null && exploreRoot.hasParent());
+ } catch (OseeCoreException ex) {
+ upAction.setEnabled(false);
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ setContentDescription(exploreRoot != null ? exploreRoot.getDescriptiveName() : "");
+
+ if (exploreRoot != null && exploreRoot.isInDb()) {
+ Branch branch = exploreRoot.getBranch();
+ if (editMenuItem != null) {
+ editMenuItem.setText("Edit (" + StringFormat.truncate(branch.getBranchName(), 25) + ")");
+ }
+ } else {
+ if (editMenuItem != null) editMenuItem.setText("Edit");
+ }
+ }
+
+ private class NeedArtifactMenuListener implements MenuListener {
+ private final HashCollection<Class<? extends Artifact>, MenuItem> menuItemMap;
+
+ public NeedArtifactMenuListener() {
+ this.menuItemMap = new HashCollection<Class<? extends Artifact>, MenuItem>();
+ }
+
+ public void add(MenuItem item) {
+ menuItemMap.put(Artifact.class, item);
+ }
+
+ public void add(MenuItem item, Class<? extends Artifact> artifactClass) {
+ menuItemMap.put(artifactClass, item);
+ }
+
+ public void menuHidden(MenuEvent e) {
+ }
+
+ public void menuShown(MenuEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+
+ Object obj = selection.getFirstElement();
+ if (obj != null) {
+ Class<? extends Artifact> selectedClass = obj.getClass().asSubclass(Artifact.class);
+
+ for (Class<? extends Artifact> artifactClass : menuItemMap.keySet()) {
+ boolean valid = artifactClass.isAssignableFrom(selectedClass);
+
+ for (MenuItem item : menuItemMap.getValues(artifactClass)) {
+ if (!(item.getData() instanceof Exception)) {
+ // Only modify enabling if no error is associated
+ item.setEnabled(valid);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private class NeedProjectMenuListener implements MenuListener {
+ Collection<MenuItem> items;
+
+ public NeedProjectMenuListener() {
+ this.items = new LinkedList<MenuItem>();
+ }
+
+ public void add(MenuItem item) {
+ items.add(item);
+ }
+
+ public void menuHidden(MenuEvent e) {
+ }
+
+ public void menuShown(MenuEvent e) {
+ boolean valid = treeViewer.getInput() != null;
+ for (MenuItem item : items)
+ if (!(item.getData() instanceof Exception)) // Only modify
+ // enabling if no
+ // error is
+ // associated
+ item.setEnabled(valid);
+ }
+ }
+
+ /**
+ * Add the selection from the define explorer
+ */
+ private void addExploreSelection() {
+ if (exploreRoot != null) {
+ try {
+ treeViewer.setInput(exploreRoot);
+ } catch (IllegalArgumentException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ /**
+ * @author Jeff C. Phillips
+ */
+ public class ArtifactMenuListener implements MenuListener {
+
+ public void menuHidden(MenuEvent e) {
+ }
+
+ public void menuShown(MenuEvent e) {
+ // Use this menu listener until all menu items can be moved to
+ // GlobaMenu
+ try {
+ GlobalMenuPermissions permiss = new GlobalMenuPermissions(globalMenuHelper);
+
+ lockMenuItem.setText((permiss.isLocked() ? "Unlock: (" + permiss.getSubjectFromLockedObjectName() + ")" : "Lock"));
+
+ lockMenuItem.setEnabled(permiss.isWritePermission() && (!permiss.isLocked() || permiss.isAccessToRemoveLock()));
+ editMenuItem.setEnabled(permiss.isWritePermission());
+ createMenuItem.setEnabled(permiss.isWritePermission());
+ openMenuItem.setEnabled(permiss.isWritePermission());
+ goIntoMenuItem.setEnabled(permiss.isReadPermission());
+ copyMenuItem.setEnabled(permiss.isReadPermission());
+ pasteMenuItem.setEnabled(permiss.isWritePermission());
+
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+
+ }
+ }
+
+ @Override
+ public void init(IViewSite site, IMemento memento) throws PartInitException {
+ super.init(site, memento);
+
+ if (SkynetGuiPlugin.areOSEEServicesAvailable().isFalse()) return;
+
+ try {
+ if (memento != null && memento.getString(ROOT_GUID) != null) {
+ Artifact previousArtifact =
+ ArtifactQuery.getArtifactFromId(memento.getString(ROOT_GUID), BranchManager.getDefaultBranch());
+ explore(previousArtifact);
+ return;
+ }
+ } catch (ArtifactDoesNotExist ex) {
+ /*
+ * simply means that the previous artifact that was used as the root for the artiactExplorer does not exist
+ * because it was deleted or this workspace was last used with a different branch or database, so let the logic
+ * below get the default hierarchy root artifact
+ */
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ try {
+ explore(ArtifactPersistenceManager.getDefaultHierarchyRootArtifact(BranchManager.getDefaultBranch()));
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ @Override
+ public void saveState(IMemento memento) {
+ super.saveState(memento);
+ if (exploreRoot != null) {
+ memento.putString(ROOT_GUID, exploreRoot.getGuid());
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+ */
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ super.dispose();
+ if (treeViewer != null) {
+ trees.remove(treeViewer.getTree());
+ }
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ public boolean showArtIds() {
+ return showArtIds != null && showArtIds.isChecked();
+ }
+
+ public boolean showArtType() {
+ return showArtType != null && showArtType.isChecked();
+ }
+
+ public boolean showArtVersion() {
+ return showArtVersion != null && showArtVersion.isChecked();
+ }
+
+ private class ArtifactExplorerDragAndDrop extends SkynetDragAndDrop {
+
+ public ArtifactExplorerDragAndDrop(Tree tree, String viewId) {
+ super(tree, tree, viewId);
+ }
+
+ @Override
+ public Artifact[] getArtifacts() {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Object[] objects = selection.toArray();
+ Artifact[] artifacts = new Artifact[objects.length];
+
+ for (int index = 0; index < objects.length; index++)
+ artifacts[index] = (Artifact) objects[index];
+
+ return artifacts;
+ }
+
+ @Override
+ public void performDragOver(DropTargetEvent event) {
+ event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL | DND.FEEDBACK_EXPAND;
+
+ if (FileTransfer.getInstance().isSupportedType(event.currentDataType)) {
+ event.detail = DND.DROP_COPY;
+ } else if (isValidForArtifactDrop(event)) {
+ event.detail = DND.DROP_MOVE;
+ } else {
+ event.detail = DND.DROP_NONE;
+ }
+ }
+
+ private boolean isValidForArtifactDrop(DropTargetEvent event) {
+ if (ArtifactTransfer.getInstance().isSupportedType(event.currentDataType)) {
+ ArtifactData artData = ArtifactTransfer.getInstance().nativeToJava(event.currentDataType);
+
+ if (artData != null) {
+
+ Artifact parentArtifact = getSelectedArtifact(event);
+ if (parentArtifact != null && artData.getSource().equals(VIEW_ID)) {
+ Artifact[] artifactsToBeRelated = artData.getArtifacts();
+
+ for (Artifact artifact : artifactsToBeRelated) {
+ if (parentArtifact.equals(artifact)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ } else {
+ // only occurs during the drag on some platforms
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private Artifact getSelectedArtifact(DropTargetEvent event) {
+ TreeItem selected = treeViewer.getTree().getItem(treeViewer.getTree().toControl(event.x, event.y));
+
+ if (selected != null && selected.getData() instanceof Artifact) {
+ return (Artifact) selected.getData();
+ }
+ return null;
+ }
+
+ @Override
+ public void performDrop(final DropTargetEvent event) {
+ final Artifact parentArtifact = getSelectedArtifact(event);
+
+ if (parentArtifact != null) {
+
+ if (ArtifactTransfer.getInstance().isSupportedType(event.currentDataType) && isValidForArtifactDrop(event) && MessageDialog.openQuestion(
+ getViewSite().getShell(),
+ "Confirm Move",
+ "Are you sure you want to make each of the selected artifacts a child of " + parentArtifact.getDescriptiveName() + "?")) {
+ ArtifactData artData = ArtifactTransfer.getInstance().nativeToJava(event.currentDataType);
+ final Artifact[] artifactsToBeRelated = artData.getArtifacts();
+ try {
+ SkynetTransaction transaction = new SkynetTransaction(parentArtifact.getBranch());
+ // Replace all of the parent relations
+ for (Artifact artifact : artifactsToBeRelated) {
+ artifact.setSoleRelation(CoreRelationEnumeration.DEFAULT_HIERARCHICAL__PARENT, parentArtifact);
+ artifact.persistAttributesAndRelations(transaction);
+ }
+ transaction.execute();
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+ }
+
+ else if (FileTransfer.getInstance().isSupportedType(event.currentDataType)) {
+ Object object = FileTransfer.getInstance().nativeToJava(event.currentDataType);
+ if (object instanceof String[]) {
+ String filename = ((String[]) object)[0];
+
+ ArtifactImportWizard wizard = new ArtifactImportWizard();
+ wizard.setImportResourceAndArtifactDestination(new File(filename), parentArtifact);
+
+ Wizards.initAndOpen(wizard, ArtifactExplorer.this);
+ }
+ }
+ }
+ }
+ }
+
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ treeViewer.addSelectionChangedListener(listener);
+ }
+
+ public ISelection getSelection() {
+ return treeViewer.getSelection();
+ }
+
+ public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+ treeViewer.removeSelectionChangedListener(listener);
+ }
+
+ public void setSelection(ISelection selection) {
+ treeViewer.setSelection(selection);
+ }
+
+ private void setHelpContexts() {
+ SkynetGuiPlugin.getInstance().setHelp(treeViewer.getControl(), "artifact_explorer_tree_viewer");
+ }
+ public class MenuEnablingListener implements MenuListener {
+
+ public void menuHidden(MenuEvent e) {
+ }
+
+ public void menuShown(MenuEvent e) {
+ TreeItem[] myTreeItems = myTree.getSelection();
+ if (myTreeItems.length != 1) {
+ renameArtifactMenuItem.setEnabled(false);
+ return;
+ }
+ Object myTreeItemObject = myTreeItems[0].getData();
+ if (myTreeItemObject instanceof Artifact) {
+ Artifact mySelectedArtifact = (Artifact) myTreeItemObject;
+ boolean writePermission;
+ try {
+ writePermission = AccessControlManager.checkObjectPermission(mySelectedArtifact, PermissionEnum.WRITE);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ writePermission = false;
+ }
+
+ renameArtifactMenuItem.setEnabled(writePermission);
+ }
+ }
+ }
+
+ @Override
+ public void handleArtifactsPurgedEvent(Sender sender, LoadedArtifacts loadedArtifacts) {
+ try {
+ if (loadedArtifacts.isNotForDefaultBranch()) {
+ return;
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ treeViewer.refresh();
+ }
+ });
+ }
+
+ @Override
+ public void handleArtifactsChangeTypeEvent(Sender sender, int toArtifactTypeId, final LoadedArtifacts loadedArtifacts) {
+ try {
+ if (loadedArtifacts.isNotForDefaultBranch()) {
+ return;
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ try {
+ Set<Artifact> parents = new HashSet<Artifact>();
+ for (Artifact art : loadedArtifacts.getLoadedArtifacts()) {
+ if (art.getParent() != null) {
+ parents.add(art.getParent());
+ }
+ }
+ treeViewer.refresh(parents);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IFrameworkTransactionEventListener#handleFrameworkTransactionEvent(org.eclipse.osee.framework.ui.plugin.event.Sender.Source, org.eclipse.osee.framework.skynet.core.eventx.FrameworkTransactionData)
+ */
+ @Override
+ public void handleFrameworkTransactionEvent(Sender sender, final FrameworkTransactionData transData) throws OseeCoreException {
+ if (transData.branchId != BranchManager.getDefaultBranch().getBranchId()) {
+ return;
+ }
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ treeViewer.remove(transData.cacheDeletedArtifacts);
+ try {
+ treeViewer.update(transData.getArtifactsInRelations(ChangeType.Changed,
+ CoreRelationEnumeration.DEFAULT_HIERARCHICAL__CHILD.getRelationType()), null);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ try {
+ Set<Artifact> parents = new HashSet<Artifact>();
+ for (Artifact art : transData.getArtifactsInRelations(ChangeType.Added,
+ CoreRelationEnumeration.DEFAULT_HIERARCHICAL__CHILD.getRelationType())) {
+ if (!art.isDeleted() && art.getParent() != null) {
+ parents.add(art.getParent());
+ }
+ }
+ treeViewer.refresh(parents);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IRelationModifiedEventListener#handleRelationModifiedEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.relation.RelationModifiedEvent.RelationModType, org.eclipse.osee.framework.skynet.core.relation.RelationLink, org.eclipse.osee.framework.skynet.core.artifact.Branch, java.lang.String, java.lang.String)
+ */
+ @Override
+ public void handleRelationModifiedEvent(Sender sender, RelationModType relationModType, final RelationLink link, Branch branch, String relationType) {
+ try {
+ if (!BranchManager.getDefaultBranch().equals(branch)) return;
+ if (link.getRelationType().equals(CoreRelationEnumeration.DEFAULT_HIERARCHICAL__CHILD.getRelationType())) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ try {
+ // Since this is always a local event, artifact will always be in cache
+ Artifact aArtifact = link.getArtifactIfLoaded(RelationSide.SIDE_A);
+ if (aArtifact != null) {
+ treeViewer.refresh(aArtifact);
+ }
+ Artifact bArtifact = link.getArtifactIfLoaded(RelationSide.SIDE_B);
+ if (bArtifact != null) {
+ treeViewer.refresh(bArtifact);
+ }
+ } catch (Exception ex) {
+ // do nothing
+ }
+ }
+ });
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IArtifactModifiedEventListener#handleArtifactModifiedEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.ArtifactModifiedEvent.ArtifactModType, org.eclipse.osee.framework.skynet.core.artifact.Artifact)
+ */
+ @Override
+ public void handleArtifactModifiedEvent(Sender sender, final ArtifactModType artifactModType, final Artifact artifact) {
+ try {
+ if (!artifact.getBranch().equals(BranchManager.getDefaultBranch())) {
+ return;
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ try {
+ if (artifactModType == ArtifactModType.Deleted) {
+ treeViewer.remove(artifact);
+ } else if (artifactModType == ArtifactModType.Added) {
+ if (artifact.getParent() != null) {
+ treeViewer.refresh(artifact.getParent());
+ }
+ } else if (artifactModType == ArtifactModType.Changed) {
+ treeViewer.update(artifact, null);
+ } else if (artifactModType == ArtifactModType.Reverted) {
+ if (artifact.getParent() != null) {
+ treeViewer.refresh(artifact.getParent());
+ }
+ }
+ } catch (Exception ex) {
+ // do nothing
+ }
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, org.eclipse.osee.framework.skynet.core.artifact.Branch, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, int branchId) {
+ if (branchModType == BranchEventType.DefaultBranchChanged) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ try {
+ Branch defaultBranch = BranchManager.getDefaultBranch();
+ Artifact candidateRoot = ArtifactPersistenceManager.getDefaultHierarchyRootArtifact(defaultBranch);
+
+ if (exploreRoot != null) {
+ try {
+ candidateRoot = ArtifactQuery.getArtifactFromId(exploreRoot.getGuid(), defaultBranch);
+ } catch (OseeCoreException ex) {
+ // this will happen if the previous root does not exist on this branch, so the DefaultHierarchyRootArtifact will be used if we do nothing
+ }
+ }
+
+ explore(candidateRoot);
+ updateEnablementsEtAl();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+ if (branchModType == BranchEventType.Committed) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ try {
+ Object object = treeViewer.getInput();
+ if (object instanceof Artifact) {
+ Artifact artifact = (Artifact) object;
+ try {
+ explore(ArtifactQuery.getArtifactFromId(artifact.getGuid(), BranchManager.getDefaultBranch()));
+ } catch (CoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IAccessControlEventListener#handleAccessControlArtifactsEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.eventx.AccessControlModType, org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts)
+ */
+ @Override
+ public void handleAccessControlArtifactsEvent(Sender sender, AccessControlEventType accessControlEventType, LoadedArtifacts loadedArtifacts) {
+ try {
+ if (loadedArtifacts.isNotForDefaultBranch()) {
+ return;
+ }
+ if (accessControlEventType == AccessControlEventType.UserAuthenticated || accessControlEventType == AccessControlEventType.ArtifactsLocked || accessControlEventType == AccessControlEventType.ArtifactsLocked) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ treeViewer.refresh();
+ }
+ });
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactLabelProvider.java
new file mode 100644
index 00000000000..d8f48d5a7c1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactLabelProvider.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
+import org.eclipse.search.ui.text.Match;
+import org.eclipse.swt.graphics.Image;
+
+public class ArtifactLabelProvider extends LabelProvider { //StyledCellLabelProvider {
+// /* (non-Javadoc)
+// * @see org.eclipse.jface.viewers.StyledCellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
+// */
+// @Override
+// public void update(ViewerCell cell) {
+// Object element = cell.getElement();
+// if (element instanceof Match) {
+// element = ((Match) element).getElement();
+// }
+//
+// if (element instanceof Artifact) {
+// Artifact artifact = (Artifact) element;
+//
+// String name = artifact.getDescriptiveName();
+// if (artifact.isDeleted()) {
+// name += " <Deleted>";
+// }
+// if (artifactExplorer != null) {
+// if (artifactExplorer.showArtVersion()) {
+// name += " -" + artifact.getGammaId() + "- ";
+// }
+//
+// if (artifactExplorer.showArtIds()) {
+// name += " (" + artifact.getArtId() + ") ";
+// }
+// try {
+// if (artifactExplorer.showArtType()) {
+// name += " <" + artifact.getArtifactTypeName() + "> ";
+// }
+//
+// name += artifactExplorer.getSelectedAttributeData(artifact);
+// } catch (Exception ex) {
+// OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+// name += ex.getLocalizedMessage();
+// }
+// }
+// cell.setText(name);
+// } else {
+// cell.setText(element.toString());
+// }
+// }
+
+ private static final OseeUiActivator plugin = SkynetGuiPlugin.getInstance();
+ private final ArtifactExplorer artifactExplorer;
+
+ public ArtifactLabelProvider(ArtifactExplorer artifactExplorer) {
+ super();
+ this.artifactExplorer = artifactExplorer;
+ }
+
+ public ArtifactLabelProvider() {
+ this(null);
+ }
+
+ /*
+ * @see ILabelProvider#getImage(Object)
+ */
+ public Image getImage(Object element) {
+ if (element instanceof Artifact) {
+ return ((Artifact) element).getImage();
+ } else if (element instanceof Match && ((Match) element).getElement() instanceof Artifact) {
+ return ((Artifact) ((Match) element).getElement()).getImage();
+ }
+ return plugin.getImage("laser_16_16.gif");
+ }
+
+ /*
+ * @see ILabelProvider#getText(Object)
+ */
+ public String getText(Object element) {
+ if (element instanceof Match) {
+ element = ((Match) element).getElement();
+ }
+
+ if (element instanceof Artifact) {
+ Artifact artifact = (Artifact) element;
+
+ String name = artifact.getDescriptiveName();
+ if (artifact.isDeleted()) {
+ name += " <Deleted>";
+ }
+ if (artifactExplorer != null) {
+ if (artifactExplorer.showArtVersion()) {
+ name += " -" + artifact.getGammaId() + "- ";
+ }
+
+ if (artifactExplorer.showArtIds()) {
+ name += " (" + artifact.getArtId() + ") ";
+ }
+ try {
+ if (artifactExplorer.showArtType()) {
+ name += " <" + artifact.getArtifactTypeName() + "> ";
+ }
+
+ name += artifactExplorer.getSelectedAttributeData(artifact);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ name += ex.getLocalizedMessage();
+ }
+ }
+ return name;
+ } else {
+ return element.toString();
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactListContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactListContentProvider.java
new file mode 100644
index 00000000000..4498c693198
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactListContentProvider.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.ui.skynet.search.AbstractArtifactSearchResult;
+import org.eclipse.osee.framework.ui.skynet.search.ArtifactSearchResult;
+
+/**
+ * @author Michael S. Rodgers
+ */
+public class ArtifactListContentProvider implements IStructuredContentProvider {
+ private final Object[] EMPTY_ARR = new Object[0];
+
+ private final ArtifactSearchViewPage aPage;
+ private AbstractArtifactSearchResult aResult;
+
+ public ArtifactListContentProvider(ArtifactSearchViewPage page) {
+ aPage = page;
+ }
+
+ public void dispose() {
+ // nothing to do
+ }
+
+ public Object[] getElements(Object inputElement) {
+
+ if (inputElement instanceof ArtifactSearchResult) {
+ Object[] objs = ((ArtifactSearchResult) inputElement).getElements();
+ return objs;
+ } else
+ return EMPTY_ARR;
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ if (newInput instanceof ArtifactSearchResult) {
+ aResult = (ArtifactSearchResult) newInput;
+ }
+ }
+
+ public void elementsChanged(Object[] updatedElements) {
+ TableViewer viewer = getViewer();
+
+ if (aResult.getMatchCount() > 0) {
+ for (int i = 0; i < updatedElements.length; i++) {
+ if (viewer.testFindItem(updatedElements[i]) != null)
+ viewer.update(updatedElements[i], null);
+ else
+ viewer.add(updatedElements[i]);
+ }
+ } else
+ viewer.remove(updatedElements);
+ }
+
+ public TableViewer getViewer() {
+ return aPage.getViewer();
+ }
+
+ public void clear() {
+ getViewer().refresh();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactSearchViewPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactSearchViewPage.java
new file mode 100644
index 00000000000..b9ced5db6ca
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactSearchViewPage.java
@@ -0,0 +1,892 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.DecoratingLabelProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
+import org.eclipse.osee.framework.skynet.core.utility.Requirements;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.AbstractSelectionEnabledHandler;
+import org.eclipse.osee.framework.ui.plugin.util.Commands;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.history.RevisionHistoryView;
+import org.eclipse.osee.framework.ui.skynet.render.ITemplateRenderer;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.search.AbstractArtifactSearchViewPage;
+import org.eclipse.osee.framework.ui.skynet.search.report.RelationMatrixExportJob;
+import org.eclipse.osee.framework.ui.skynet.search.report.ReportJob;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop;
+import org.eclipse.search.ui.text.Match;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.osgi.framework.Bundle;
+
+public class ArtifactSearchViewPage extends AbstractArtifactSearchViewPage implements IFrameworkTransactionEventListener, IArtifactsPurgedEventListener {
+ private static final AccessControlManager accessControlManager = AccessControlManager.getInstance();
+ private static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynetd.ArtifactSearchView";
+ private IHandlerService handlerService;
+ private TableViewer viewer;
+ private ArtifactLabelProvider artifactLabelProvider;
+
+ private static String[] partitions =
+ new String[] {"ACS", "ARC201", "ARC231", "ASE", "CND", "COMM", "HM", "IOP", "MPEGP", "MPEGR", "MSM", "NAV",
+ "NCO", "REND_H", "REND_L", "REND_R", "REND_T", "SSRD_GW", "USM", "VAM", "WPS"};
+
+ public static class DecoratorIgnoringViewerSorter extends ViewerSorter {
+ private final ILabelProvider aLabelProvider;
+
+ public DecoratorIgnoringViewerSorter(ILabelProvider labelProvider) {
+ super(null); // lazy initialization
+ aLabelProvider = labelProvider;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ String name1 = aLabelProvider.getText(e1);
+ String name2 = aLabelProvider.getText(e2);
+ if (name1 == null) name1 = "";
+ if (name2 == null) name2 = "";
+ return getComparator().compare(name1, name2);
+ }
+ }
+
+ private ArtifactListContentProvider aContentProvider;
+
+ public ArtifactSearchViewPage() {
+ }
+
+ @Override
+ protected void configureTableViewer(final TableViewer viewer) {
+ viewer.setUseHashlookup(true);
+ this.viewer = viewer;
+
+ artifactLabelProvider = new ArtifactLabelProvider();
+
+ viewer.setLabelProvider(new DecoratingLabelProvider(artifactLabelProvider,
+ PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
+
+ aContentProvider = new ArtifactListContentProvider(this);
+ viewer.setContentProvider(aContentProvider);
+ viewer.setSorter(new DecoratorIgnoringViewerSorter(artifactLabelProvider));
+ viewer.addDoubleClickListener(new ArtifactDoubleClick());
+
+ createContextMenu(viewer.getControl());
+
+ new SearchDragAndDrop(viewer.getTable(), VIEW_ID);
+
+ OseeContributionItem.addTo(this, false);
+ getSite().getActionBars().updateActionBars();
+ OseeEventManager.addListener(this);
+ }
+
+ private void createContextMenu(Control menuOnwer) {
+ PlatformUI.getWorkbench().getService(IHandlerService.class);
+ handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
+
+ MenuManager menuManager = new MenuManager();
+ menuManager.setRemoveAllWhenShown(true);
+ menuManager.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ fillPopupMenu(manager);
+ }
+ });
+
+ menuManager.add(new Separator());
+ viewer.getTable().setMenu(menuManager.createContextMenu(viewer.getTable()));
+ getSite().registerContextMenu("org.eclipse.osee.framework.ui.skynet.ArtifactSearchView", menuManager, viewer);
+
+ createReportHandler(menuManager, viewer);
+ createViewTableHandler(menuManager, viewer);
+ menuManager.add(new Separator());
+ createShowInExplorerHandler(menuManager, viewer);
+ createResourceHistoryHandler(menuManager, viewer);
+ menuManager.add(new Separator());
+ createOpenArtifactHandler(menuManager, viewer);
+ createOpenInAtsWorldHandler(menuManager, viewer);
+ createOpenInAtsTaskHandler(menuManager, viewer);
+ createEditArtifactHandler(menuManager, viewer);
+ createPreviewArtifactHandler(menuManager, viewer);
+ createOpenInMassArtifactEditorHandler(menuManager, viewer);
+ menuManager.add(new Separator());
+ createSetAllPartitions(menuManager, viewer);
+ menuManager.add(new Separator());
+
+ // The additions group is a standard group
+ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+
+ private void fillPopupMenu(IMenuManager Manager) {
+ MenuManager menuManager = (MenuManager) Manager;
+ menuManager.add(new Separator());
+ addReportHandler(menuManager, viewer);
+ addViewTableHandler(menuManager, viewer);
+ menuManager.add(new Separator());
+ addShowInExplorerHandler(menuManager, viewer);
+ addResourceHistoryHandler(menuManager, viewer);
+ menuManager.add(new Separator());
+ addExportHandler(menuManager, viewer);
+ menuManager.add(new Separator());
+ addOpenArtifactHandler(menuManager, viewer);
+ addOpenInAtsWorldHandler(menuManager, viewer);
+ addOpenInAtsTaskHandler(menuManager, viewer);
+ addEditArtifactHandler(menuManager, viewer);
+ addPreviewArtifactHandler(menuManager, viewer);
+ addOpenInMassArtifactEditorHandler(menuManager, viewer);
+ menuManager.add(new Separator());
+ addSetAllPartitions(menuManager, viewer);
+ menuManager.add(new Separator());
+
+ // The additions group is a standard group
+ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+
+ /**
+ * @param menuManager
+ * @param viewer
+ */
+ private void addReportHandler(MenuManager menuManager, TableViewer viewer) {
+ MenuManager reportManager = new MenuManager("Run Reports");
+
+ addRelationMatrixReportMenuItem(menuManager, reportManager);
+ addDynamicReportCommands(menuManager, reportManager);
+ menuManager.add(reportManager);
+ }
+
+ private void createReportHandler(MenuManager menuManager, TableViewer viewer) {
+ MenuManager reportManager = new MenuManager("Run Reports");
+
+ createRelationMatrixReportMenuItem(menuManager, reportManager);
+ createDynamicReportCommands(menuManager, reportManager);
+ menuManager.add(reportManager);
+ }
+
+ /**
+ * @param menuManager
+ * @param viewer
+ */
+ private String addOpenArtifactHandler(MenuManager menuManager, final TableViewer viewer) {
+ CommandContributionItem openArtifactCommand =
+ Commands.getLocalCommandContribution("org.eclipse.osee.framework.ui.skynet.openInEdit.command", getSite(),
+ null, null, null, null, null, null, null, null);
+ menuManager.add(openArtifactCommand);
+
+ return openArtifactCommand.getId();
+ }
+
+ private void createOpenArtifactHandler(MenuManager menuManager, final TableViewer viewer) {
+ handlerService.activateHandler(addOpenArtifactHandler(menuManager, viewer),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ArtifactEditor.editArtifacts(getSelectedArtifacts(viewer));
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ return true;
+ }
+ });
+ }
+
+ /**
+ * @param menuManager
+ * @param viewer
+ */
+ private String addEditArtifactHandler(MenuManager menuManager, final TableViewer viewer) {
+ CommandContributionItem editArtifactCommand =
+ Commands.getLocalCommandContribution("org.eclipse.osee.framework.ui.skynet.edit.command", getSite(), null,
+ null, null, null, null, null, null, null);
+ menuManager.add(editArtifactCommand);
+
+ return editArtifactCommand.getId();
+ }
+
+ private void createEditArtifactHandler(MenuManager menuManager, final TableViewer viewer) {
+ handlerService.activateHandler(addEditArtifactHandler(menuManager, viewer),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ try {
+ RendererManager.editInJob(getSelectedArtifacts(viewer));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ boolean isEnabled = true;
+ List<Artifact> artifacts = getSelectedArtifacts(viewer);
+ isEnabled = accessControlManager.checkObjectListPermission(artifacts, PermissionEnum.WRITE);
+ //whole word artifacts can only be viewed as a single document
+ for (Artifact artifact : artifacts) {
+ if (artifact instanceof WordArtifact && ((WordArtifact) artifact).isWholeWordArtifact()) {
+ isEnabled &= artifacts.size() == 1;
+ break;
+ }
+ }
+ return isEnabled;
+ }
+ });
+ }
+
+ /**
+ * @param menuManager
+ * @param viewer
+ */
+
+ private void addPreviewArtifactHandler(MenuManager menuManager, final TableViewer viewer) {
+ MenuManager previewMenu = new MenuManager("Preview");
+
+ CommandContributionItem previewArtifactCommand =
+ Commands.getLocalCommandContribution("org.eclipse.osee.framework.ui.skynet.previewArtifact.command",
+ getSite(), null, null, null, null, null, null, null, null);
+ previewMenu.add(previewArtifactCommand);
+
+ CommandContributionItem previewArtifactRecurseCommand =
+ Commands.getLocalCommandContribution("org.eclipse.osee.framework.ui.skynet.previewArtifactRecurse.command",
+ getSite(), null, null, null, null, null, null, null, null);
+ previewMenu.add(previewArtifactRecurseCommand);
+
+ menuManager.add(previewMenu);
+ }
+
+ private void createPreviewArtifactHandler(MenuManager menuManager, final TableViewer viewer) {
+ MenuManager previewMenu = new MenuManager("Preview");
+
+ CommandContributionItem previewArtifactCommand =
+ Commands.getLocalCommandContribution("org.eclipse.osee.framework.ui.skynet.previewArtifact.command",
+ getSite(), null, null, null, null, null, null, null, null);
+ previewMenu.add(previewArtifactCommand);
+
+ handlerService.activateHandler(previewArtifactCommand.getId(),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ try {
+ RendererManager.previewInJob(getSelectedArtifacts(viewer));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ boolean isEnabled = true;
+ List<Artifact> artifacts = getSelectedArtifacts(viewer);
+ isEnabled = accessControlManager.checkObjectListPermission(artifacts, PermissionEnum.READ);
+ //whole word artifacts can only be viewed as a single document
+ for (Artifact artifact : artifacts) {
+ if (artifact instanceof WordArtifact && ((WordArtifact) artifact).isWholeWordArtifact()) {
+ isEnabled &= artifacts.size() == 1;
+ break;
+ }
+ }
+ return isEnabled;
+ }
+ });
+
+ CommandContributionItem previewArtifactRecurseCommand =
+ Commands.getLocalCommandContribution("org.eclipse.osee.framework.ui.skynet.previewArtifactRecurse.command",
+ getSite(), null, null, null, null, null, null, null, null);
+ previewMenu.add(previewArtifactRecurseCommand);
+
+ handlerService.activateHandler(previewArtifactRecurseCommand.getId(),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ try {
+ RendererManager.previewInJob(getSelectedArtifacts(viewer), new VariableMap(
+ ITemplateRenderer.PREVIEW_WITH_RECURSE_OPTION_PAIR));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ boolean isEnabled = true;
+ List<Artifact> artifacts = getSelectedArtifacts(viewer);
+ isEnabled = accessControlManager.checkObjectListPermission(artifacts, PermissionEnum.READ);
+ //whole word artifacts can only be viewed as a single document
+ for (Artifact artifact : artifacts) {
+ if (artifact instanceof WordArtifact && ((WordArtifact) artifact).isWholeWordArtifact()) {
+ isEnabled &= artifacts.size() == 1;
+ break;
+ }
+ }
+ return isEnabled;
+ }
+ });
+
+ menuManager.add(previewMenu);
+ }
+
+ private String addViewTableHandler(MenuManager menuManager, final TableViewer viewer) {
+ CommandContributionItem openArtifactsCommand =
+ Commands.getLocalCommandContribution(ArtifactSearchViewPage.VIEW_ID, getSite(), "viewTableCommand",
+ "View Table Report", null, null, null, "V", null, null);
+
+ menuManager.add(openArtifactsCommand);
+
+ return openArtifactsCommand.getId();
+ }
+
+ private void createViewTableHandler(MenuManager menuManager, final TableViewer viewer) {
+ handlerService.activateHandler(addViewTableHandler(menuManager, viewer),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ (new TableViewerReport(viewer)).open();
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ return true;
+ }
+ });
+ }
+
+ private void addDynamicReportCommands(MenuManager parentMenuManager, MenuManager childMenuManager) {
+ IExtensionPoint point =
+ Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.framework.ui.skynet.ArtifactReport");
+ for (IExtension extension : point.getExtensions()) {
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+ String classname = null;
+ String bundleName = null;
+ for (IConfigurationElement element : elements) {
+ if (element.getName().equals("report")) {
+ classname = element.getAttribute("class");
+ bundleName = element.getContributor().getName();
+
+ if (classname != null && bundleName != null) {
+ Bundle bundle = Platform.getBundle(bundleName);
+ try {
+ Class<?> reportClass = bundle.loadClass(classname);
+ Object obj = reportClass.newInstance();
+ ReportJob reportJob = (ReportJob) obj;
+ addReportJobCommand(parentMenuManager, childMenuManager, reportJob);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ } catch (NoClassDefFoundError er) {
+ OseeLog.log(
+ SkynetGuiPlugin.class,
+ Level.WARNING,
+ "Failed to find a class definition for " + classname + ", registered from bundle " + bundleName,
+ er);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private void createDynamicReportCommands(MenuManager parentMenuManager, MenuManager childMenuManager) {
+ IExtensionPoint point =
+ Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.framework.ui.skynet.ArtifactReport");
+ for (IExtension extension : point.getExtensions()) {
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+ String classname = null;
+ String bundleName = null;
+ for (IConfigurationElement element : elements) {
+ if (element.getName().equals("report")) {
+ classname = element.getAttribute("class");
+ bundleName = element.getContributor().getName();
+
+ if (classname != null && bundleName != null) {
+ Bundle bundle = Platform.getBundle(bundleName);
+ try {
+ Class<?> reportClass = bundle.loadClass(classname);
+ Object obj = reportClass.newInstance();
+ ReportJob reportJob = (ReportJob) obj;
+ createReportJobCommand(parentMenuManager, childMenuManager, reportJob);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ } catch (NoClassDefFoundError er) {
+ OseeLog.log(
+ SkynetGuiPlugin.class,
+ Level.WARNING,
+ "Failed to find a class definition for " + classname + ", registered from bundle " + bundleName,
+ er);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private String addReportJobCommand(MenuManager parentMenuManager, MenuManager childMenuManager, final ReportJob reportJob) {
+ CommandContributionItem reportCommand =
+ Commands.getLocalCommandContribution(
+ "org.eclipse.osee.framework.ui.skynet." + reportJob.getName() + ".command", getSite(), null,
+ reportJob.getName(), null, null, null, null, null, null);
+ childMenuManager.add(reportCommand);
+ return reportCommand.getId();
+ }
+
+ private void createReportJobCommand(MenuManager parentMenuManager, MenuManager childMenuManager, final ReportJob reportJob) {
+ String id = addReportJobCommand(parentMenuManager, childMenuManager, reportJob);
+
+ handlerService.activateHandler(id,
+
+ new AbstractSelectionEnabledHandler(parentMenuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ Jobs.startJob(reportJob);
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ return true;
+ }
+ });
+ }
+
+ private void addRelationMatrixReportMenuItem(MenuManager menuManager, MenuManager reportManager) {
+ MenuManager matrixManager = new MenuManager("Relation Matrix Reports");
+
+ try {
+ for (RelationType descriptor : RelationTypeManager.getValidTypes(BranchManager.getDefaultBranch())) {
+ final ReportJob reportJob = new RelationMatrixExportJob(descriptor);
+ addReportJobCommand(menuManager, matrixManager, reportJob);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ reportManager.add(matrixManager);
+ }
+
+ private void createRelationMatrixReportMenuItem(MenuManager menuManager, MenuManager reportManager) {
+ MenuManager matrixManager = new MenuManager("Relation Matrix Reports");
+ try {
+ for (RelationType descriptor : RelationTypeManager.getValidTypes(BranchManager.getDefaultBranch())) {
+ final ReportJob reportJob = new RelationMatrixExportJob(descriptor);
+ createReportJobCommand(menuManager, matrixManager, reportJob);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ reportManager.add(matrixManager);
+ }
+
+ private String addExportHandler(MenuManager menuManager, final TableViewer viewer) {
+ CommandContributionItem openArtifactsCommand =
+ Commands.getLocalCommandContribution(ArtifactSearchViewPage.VIEW_ID, getSite(), "createExportCommand",
+ "Export Artifact(s)", null, null, null, "V", null, null);
+ menuManager.add(openArtifactsCommand);
+
+ return openArtifactsCommand.getId();
+ }
+
+ private String addResourceHistoryHandler(MenuManager menuManager, final TableViewer viewer) {
+ CommandContributionItem resourceHistoryCommand =
+ Commands.getLocalCommandContribution("org.eclipse.osee.framework.ui.skynet.resource.command", getSite(),
+ null, null, null, null, null, null, null, null);
+ menuManager.add(resourceHistoryCommand);
+
+ return resourceHistoryCommand.getId();
+ }
+
+ private void createResourceHistoryHandler(MenuManager menuManager, final TableViewer viewer) {
+ handlerService.activateHandler(addResourceHistoryHandler(menuManager, viewer),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ Artifact selectedArtifact = getSelectedArtifact(viewer);
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ try {
+ RevisionHistoryView revisionHistoryView =
+ (RevisionHistoryView) page.showView(RevisionHistoryView.VIEW_ID, selectedArtifact.getGuid(),
+ IWorkbenchPage.VIEW_VISIBLE);
+ revisionHistoryView.explore(selectedArtifact);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ return true;
+ }
+ });
+ }
+
+ private String addShowInExplorerHandler(MenuManager menuManager, final TableViewer viewer) {
+ CommandContributionItem showInArtifactExplorerCommand =
+ Commands.getLocalCommandContribution(
+ "org.eclipse.osee.framework.ui.skynet.revealArtifactInExplorer.command", getSite(), null, null, null,
+ null, null, null, null, null);
+ menuManager.add(showInArtifactExplorerCommand);
+
+ return showInArtifactExplorerCommand.getId();
+ }
+
+ private void createShowInExplorerHandler(MenuManager menuManager, final TableViewer viewer) {
+ handlerService.activateHandler(addShowInExplorerHandler(menuManager, viewer),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ Artifact artifact = getSelectedArtifact(viewer);
+ ArtifactExplorer.revealArtifact(artifact);
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ return true;
+ }
+ });
+ }
+
+ private String addOpenInMassArtifactEditorHandler(MenuManager menuManager, final TableViewer viewer) {
+ CommandContributionItem editArtifactCommand =
+ Commands.getLocalCommandContribution("org.eclipse.osee.framework.ui.skynet.OpenMassEditcommand", getSite(),
+ null, null, null, null, null, null, null, null);
+ menuManager.add(editArtifactCommand);
+
+ return editArtifactCommand.getId();
+ }
+
+ private void createOpenInMassArtifactEditorHandler(MenuManager menuManager, final TableViewer viewer) {
+ handlerService.activateHandler(addOpenInMassArtifactEditorHandler(menuManager, viewer),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ MassArtifactEditor.editArtifacts("", getSelectedArtifacts(viewer));
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ return accessControlManager.checkObjectListPermission(getSelectedArtifacts(viewer), PermissionEnum.WRITE);
+ }
+ });
+ }
+
+ private String addOpenInAtsWorldHandler(MenuManager menuManager, final TableViewer viewer) {
+ CommandContributionItem openInAtsWorldCommand =
+ Commands.getLocalCommandContribution("org.eclipse.osee.framework.ui.skynet.openInAtsWorldEditor",
+ getSite(), null, null, null, null, null, null, null, null);
+ menuManager.add(openInAtsWorldCommand);
+
+ return openInAtsWorldCommand.getId();
+ }
+
+ private void createOpenInAtsWorldHandler(MenuManager menuManager, final TableViewer viewer) {
+ handlerService.activateHandler(addOpenInAtsWorldHandler(menuManager, viewer),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ try {
+ if (OseeAts.getAtsLib() != null) OseeAts.getAtsLib().openInAtsWorldEditor("ATS",
+ getSelectedArtifacts(viewer));
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ return true;
+ }
+ });
+ }
+
+ private String addOpenInAtsTaskHandler(MenuManager menuManager, final TableViewer viewer) {
+ CommandContributionItem openInAtsTaskCommand =
+ Commands.getLocalCommandContribution("org.eclipse.osee.framework.ui.skynet.openInAtsTaskEditor", getSite(),
+ null, null, null, null, null, null, null, null);
+ menuManager.add(openInAtsTaskCommand);
+
+ return openInAtsTaskCommand.getId();
+ }
+
+ private void createOpenInAtsTaskHandler(MenuManager menuManager, final TableViewer viewer) {
+ handlerService.activateHandler(addOpenInAtsTaskHandler(menuManager, viewer),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ try {
+ if (OseeAts.getAtsLib() != null) OseeAts.getAtsLib().openInAtsTaskEditor("Tasks",
+ getSelectedArtifacts(viewer));
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ return true;
+ }
+ });
+ }
+
+ private String addSetAllPartitions(MenuManager menuManager, final TableViewer viewer) {
+ CommandContributionItem setAllPartitionsCommand =
+ Commands.getLocalCommandContribution("org.eclipse.osee.framework.ui.skynet.SetAllPartitions", getSite(),
+ null, "Set all Partitions", null, null, null, null, null, null);
+ menuManager.add(setAllPartitionsCommand);
+
+ return setAllPartitionsCommand.getId();
+ }
+
+ private void createSetAllPartitions(MenuManager menuManager, final TableViewer viewer) {
+ handlerService.activateHandler(addSetAllPartitions(menuManager, viewer),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ StringBuffer sb = new StringBuffer();
+ final Set<Artifact> arts = new HashSet<Artifact>();
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+ Iterator<?> iter = selection.iterator();
+ while (iter.hasNext()) {
+ Artifact art = (Artifact) ((Match) iter.next()).getElement();
+ arts.add(art);
+ sb.append(art.getDescriptiveName() + "\n");
+ }
+ if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Set All Partitions",
+ "Set All Partitions on Artifacts\n\n" + sb.toString())) {
+ try {
+ SkynetTransaction transaction = new SkynetTransaction(BranchManager.getDefaultBranch());
+
+ for (Artifact art : arts) {
+ for (String partition : partitions) {
+ boolean found = false;
+ for (Attribute<?> attr : art.getAttributes(Requirements.PARTITION)) {
+ if (attr.toString().equals(partition)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ art.addAttribute(Requirements.PARTITION, partition);
+ }
+ }
+ for (Attribute<?> attr : art.getAttributes(Requirements.PARTITION)) {
+ if (attr.toString().equals("Unspecified")) attr.delete();
+ }
+
+ art.persistAttributes(transaction);
+ }
+ transaction.execute();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ return AccessControlManager.isOseeAdmin() && accessControlManager.checkObjectListPermission(
+ getSelectedArtifacts(viewer), PermissionEnum.WRITE);
+ }
+ });
+ }
+
+ @Override
+ protected void elementsChanged(Object[] objects) {
+ if (aContentProvider != null) {
+ aContentProvider.elementsChanged(objects);
+ }
+ }
+
+ private Artifact getSelectedArtifact(TableViewer viewer) {
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+ if (selection.size() > 0) {
+ return (Artifact) ((Match) selection.getFirstElement()).getElement();
+ }
+ return null;
+ }
+
+ private List<Artifact> getSelectedArtifacts(TableViewer viewer) {
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+ Object[] objects = selection.toArray();
+ LinkedList<Artifact> artifacts = new LinkedList<Artifact>();
+
+ if (objects.length == 0) return new ArrayList<Artifact>(0);
+
+ if (objects[0] instanceof Match) {
+ for (Object object : objects) {
+ artifacts.add((Artifact) ((Match) object).getElement());
+ }
+ }
+ return artifacts;
+ }
+
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ super.dispose();
+ }
+
+ private class SearchDragAndDrop extends SkynetDragAndDrop {
+
+ public SearchDragAndDrop(Table table, String viewId) {
+ super(table, viewId);
+ }
+
+ @Override
+ public Artifact[] getArtifacts() {
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+
+ Object[] matches = selection.toArray();
+ Artifact[] artifacts = new Artifact[matches.length];
+
+ for (int index = 0; index < matches.length; index++) {
+ Match match = (Match) matches[index];
+ artifacts[index] = (Artifact) match.getElement();
+ }
+
+ return artifacts;
+ }
+
+ @Override
+ public void performDragOver(DropTargetEvent event) {
+ event.detail = DND.DROP_NONE;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.menu.IGlobalMenuHelper#getSelectedArtifacts()
+ */
+ public Collection<Artifact> getSelectedArtifacts() {
+ return getSelectedArtifacts(viewer);
+ }
+
+ /**
+ * @return the viewer
+ */
+ @Override
+ public TableViewer getViewer() {
+ return viewer;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IFrameworkTransactionEventListener#handleFrameworkTransactionEvent(org.eclipse.osee.framework.ui.plugin.event.Sender.Source, org.eclipse.osee.framework.skynet.core.eventx.FrameworkTransactionData)
+ */
+ @Override
+ public void handleFrameworkTransactionEvent(Sender sender, final FrameworkTransactionData transData) throws OseeCoreException {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ if (viewer != null) {
+ viewer.remove(transData.cacheDeletedArtifacts);
+ viewer.refresh();
+ }
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener#handleArtifactsPurgedEvent(org.eclipse.osee.framework.skynet.core.event.Sender, java.util.Collection, java.util.Collection)
+ */
+ @Override
+ public void handleArtifactsPurgedEvent(Sender sender, final LoadedArtifacts loadedArtifacts) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ try {
+ if (viewer != null) {
+ viewer.remove(loadedArtifacts.getLoadedArtifacts());
+ viewer.refresh();
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactViewerSorter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactViewerSorter.java
new file mode 100644
index 00000000000..ec2b2261f44
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactViewerSorter.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+public class ArtifactViewerSorter extends ViewerSorter {
+
+ private final boolean reverse;
+
+ public ArtifactViewerSorter() {
+ this(false);
+ }
+
+ public ArtifactViewerSorter(boolean reverse) {
+ super();
+ this.reverse = reverse;
+ }
+
+ @SuppressWarnings("unchecked")
+ public int compare(Viewer viewer, Object o1, Object o2) {
+ if (reverse)
+ return getComparator().compare(((Artifact) o2).getDescriptiveName(), ((Artifact) o1).getDescriptiveName());
+ else
+ return getComparator().compare(((Artifact) o1).getDescriptiveName(), ((Artifact) o2).getDescriptiveName());
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeCellModifier.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeCellModifier.java
new file mode 100644
index 00000000000..c2a4504d09c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeCellModifier.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.BinaryAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.BooleanAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.DateAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.EnumeratedAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.cellEditor.DateValue;
+import org.eclipse.osee.framework.ui.skynet.widgets.cellEditor.EnumeratedValue;
+import org.eclipse.osee.framework.ui.skynet.widgets.cellEditor.StringValue;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+import org.eclipse.swt.widgets.Item;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class AttributeCellModifier implements ICellModifier {
+ private TableViewer tableViewer;
+ private DateValue dateValue;
+ private EnumeratedValue enumeratedValue;
+ private StringValue stringValue;
+ private IDirtiableEditor editor;
+
+ private AttributesComposite attrComp;
+
+ public AttributeCellModifier(IDirtiableEditor editor, TableViewer tableViewer, AttributesComposite attrComp) {
+ super();
+ this.tableViewer = tableViewer;
+ this.attrComp = attrComp;
+ this.dateValue = new DateValue();
+ this.enumeratedValue = new EnumeratedValue();
+ this.stringValue = new StringValue();
+ this.editor = editor;
+
+ // this.pList = new PermissionList();
+ // pList.addPermission(Permission.PermissionEnum.EDITREQUIREMENT);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String)
+ */
+ public boolean canModify(Object element, String property) {
+ attrComp.updateLabel("");
+ if (element != null) {
+ if (element instanceof Item) {
+ element = ((Item) element).getData();
+ }
+ try {
+ Attribute<?> attribute = (Attribute<?>) element;
+
+ if (attribute instanceof WordAttribute) {
+ return false;
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ return property.equals("value");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String)
+ */
+ public Object getValue(Object element, String property) {
+ try {
+ Attribute<?> attribute = (Attribute<?>) element;
+ Object object = attribute.getValue();
+ if (attribute instanceof EnumeratedAttribute) {
+ enumeratedValue.setValue(attribute.getDisplayableString());
+ enumeratedValue.setChocies(((EnumeratedAttribute) attribute).getChoices());
+ return enumeratedValue;
+ } else if (attribute instanceof BooleanAttribute) {
+ enumeratedValue.setValue(attribute.getDisplayableString());
+ enumeratedValue.setChocies(BooleanAttribute.booleanChoices);
+ return enumeratedValue;
+ } else if (object instanceof Date) {
+ dateValue.setValue((Date) object);
+ return dateValue;
+ } else {
+ stringValue.setValue(attribute.getDisplayableString() != null ? attribute.getDisplayableString() : "" );
+ return stringValue;
+ }
+ } catch (OseeCoreException ex) {
+ return Lib.exceptionToString(ex);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String,
+ * java.lang.Object)
+ */
+ public void modify(Object element, String property, Object value) {
+ if (element != null) {
+ // Note that it is possible for an SWT Item to be passed instead of the model element.
+ if (element instanceof Item) {
+ element = ((Item) element).getData();
+ }
+ try {
+ Attribute<?> attribute = (Attribute<?>) element;
+
+ if (attribute instanceof DateAttribute) {
+ if (value instanceof GregorianCalendar) {
+ ((DateAttribute) attribute).setValue(new Date(((GregorianCalendar) value).getTimeInMillis()));
+ } else {
+ ((DateAttribute) attribute).setValue((Date) value);
+ }
+ } else if (!(attribute instanceof BinaryAttribute)) {
+ //binary attributes should not be changed.
+ attribute.setFromString((String) value);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ tableViewer.update(element, null);
+ editor.onDirtied();
+ attrComp.notifyModifyAttribuesListeners();
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeContentProvider.java
new file mode 100644
index 00000000000..0b1fd9cfa85
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeContentProvider.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class AttributeContentProvider implements IStructuredContentProvider {
+ private Object[] dummyArray = new Object[0];
+
+ /**
+ *
+ */
+ public AttributeContentProvider() {
+ super();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof Artifact) {
+ try {
+ return ((Artifact) inputElement).getAttributes(false).toArray();
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ return dummyArray;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeLabelProvider.java
new file mode 100644
index 00000000000..3dd5c8a972f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeLabelProvider.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class AttributeLabelProvider implements ITableLabelProvider {
+
+ /**
+ *
+ */
+ public AttributeLabelProvider() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+ */
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+ */
+ public String getColumnText(Object element, int columnIndex) {
+ Attribute<?> attribute = (Attribute<?>) element;
+ if (columnIndex == 0) {
+ return attribute.getAttributeType().getName();
+ }
+ try {
+ return attribute.getDisplayableString();
+ } catch (OseeCoreException ex) {
+ return Lib.exceptionToString(ex);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+ * java.lang.String)
+ */
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeMenuSelectionListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeMenuSelectionListener.java
new file mode 100644
index 00000000000..65e0c6f9d93
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributeMenuSelectionListener.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.MenuItem;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class AttributeMenuSelectionListener extends SelectionAdapter {
+ private AttributesComposite attrsComp;
+ private TableViewer tableViewer;
+ private IDirtiableEditor editor;
+
+ public AttributeMenuSelectionListener(AttributesComposite attrsComp, TableViewer tableViewer, IDirtiableEditor editor) {
+ this.attrsComp = attrsComp;
+ this.tableViewer = tableViewer;
+ this.editor = editor;
+ }
+
+ /*
+ * (non-Javadoc) @@see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclips
+ * e.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+ AttributeType attributeType = (AttributeType) ((MenuItem) ev.getSource()).getData();
+ attrsComp.getArtifact().createAttribute(attributeType, true);
+
+ tableViewer.refresh();
+ attrsComp.layout();
+ attrsComp.getParent().layout();
+ editor.onDirtied();
+ attrsComp.notifyModifyAttribuesListeners();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributesComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributesComposite.java
new file mode 100644
index 00000000000..842dd0c7ad0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/AttributesComposite.java
@@ -0,0 +1,336 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.ArrayList;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ColumnViewerEditor;
+import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerEditor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.cellEditor.UniversalCellEditor;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.events.ArmEvent;
+import org.eclipse.swt.events.ArmListener;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+
+public class AttributesComposite extends Composite {
+ private TableViewer tableViewer;
+ private Table table;
+ private Text helpText;
+ private static final String[] columnNames = new String[] {"name", "value"};
+ private static final Integer[] columnWidths = new Integer[] {200, 600};
+ private Artifact artifact;
+ private final IDirtiableEditor editor;
+ private Label warningLabel;
+ private final boolean displayNameAttribute = true;
+ private final ArrayList<ModifyAttributesListener> modifyAttrListeners = new ArrayList<ModifyAttributesListener>();
+ private MenuItem deleteItem;
+ private final ToolBar toolBar;
+
+ public static final int NAME_COLUMN_INDEX = 0;
+ public static final int VALUE_COLUMN_INDEX = 1;
+
+ public AttributesComposite(IDirtiableEditor editor, Composite parent, int style, Artifact artifact) {
+ this(editor, parent, style, artifact, null);
+ }
+
+ public AttributesComposite(IDirtiableEditor editor, Composite parent, int style, Artifact artifact, ToolBar toolBar) {
+ super(parent, style);
+ this.artifact = artifact;
+ this.editor = editor;
+
+ create(this);
+ Menu popupMenu = new Menu(parent);
+ createAddMenuItem(popupMenu);
+ createDeleteMenuItem(popupMenu);
+ popupMenu.addMenuListener(new AttributeMenuListener());
+ tableViewer.getTable().setMenu(popupMenu);
+
+ this.toolBar = toolBar;
+ }
+
+ public void updateLabel(String msg) {
+ warningLabel.setText(msg);
+ layout();
+ }
+
+ private void create(Composite parent) {
+ this.setLayout(new GridLayout());
+ this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ SashForm mainSash = new SashForm(this, SWT.NONE);
+ mainSash.setLayout(new GridLayout());
+ mainSash.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ mainSash.setOrientation(SWT.VERTICAL);
+
+ createTableArea(mainSash);
+
+ SashForm sashForm = new SashForm(mainSash, SWT.NONE);
+ sashForm.setLayout(new GridLayout());
+ sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ sashForm.setOrientation(SWT.HORIZONTAL);
+
+ createWarningArea(sashForm);
+ createHelpArea(sashForm);
+
+ mainSash.setWeights(new int[] {8, 2});
+ sashForm.setWeights(new int[] {5, 5});
+
+ setHelpContexts();
+ }
+
+ private void createTableArea(Composite parent) {
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setLayout(new GridLayout());
+ composite.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+ composite.setText("Attributes");
+
+ createTable(composite);
+ createColumns();
+ createTableViewer(composite);
+
+ tableViewer.refresh();
+ attachTableListeners();
+ }
+
+ private void createTable(Composite parent) {
+ table =
+ new Table(parent,
+ SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION);
+ table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
+ }
+
+ private void attachTableListeners() {
+ tableViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+ Object selected = selection.getFirstElement();
+
+ if (selected instanceof Attribute) {
+ Attribute<?> attribute = (Attribute<?>) selected;
+ AttributeType attributeType = attribute.getAttributeType();
+ if (attributeType.getTipText() != null && !attributeType.getTipText().equals("null"))
+ helpText.setText(attributeType.getTipText());
+ else
+ helpText.setText("");
+ }
+ }
+ });
+ }
+
+ private void createTableViewer(Composite parent) {
+ tableViewer = new TableViewer(table);
+
+ TableViewerEditor.create(
+ tableViewer,
+ new ColumnViewerEditorActivationStrategy(tableViewer),
+ ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
+ tableViewer.setUseHashlookup(true);
+ tableViewer.setColumnProperties(columnNames);
+
+ if (!artifact.isReadOnly()) {
+ CellEditor[] editors = new CellEditor[columnNames.length];
+ editors[VALUE_COLUMN_INDEX] = new UniversalCellEditor(table, SWT.NONE);
+
+ tableViewer.setCellEditors(editors);
+ tableViewer.setCellModifier(new AttributeCellModifier(editor, tableViewer, this));
+ }
+ tableViewer.setContentProvider(new AttributeContentProvider());
+ tableViewer.setLabelProvider(new AttributeLabelProvider());
+ tableViewer.setInput(artifact);
+ }
+
+ private void createColumns() {
+ for (int index = 0; index < columnNames.length; index++) {
+ TableColumn column = new TableColumn(table, SWT.LEFT, index);
+ column.setText(columnNames[index]);
+ column.setWidth(columnWidths[index]);
+ }
+ }
+
+ private void createHelpArea(Composite parent) {
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setLayout(new GridLayout());
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setText("Tips");
+
+ helpText = new Text(composite, SWT.WRAP | SWT.READ_ONLY);
+ helpText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ }
+
+ private void createWarningArea(Composite parent) {
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setLayout(new GridLayout());
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setText("Warnings");
+
+ warningLabel = new Label(composite, SWT.NONE);
+ warningLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ warningLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+ updateLabel("");
+ }
+
+ private void createAddMenuItem(Menu parentMenu) {
+ MenuItem addItem = new MenuItem(parentMenu, SWT.CASCADE);
+ addItem.setText("Add");
+ addItem.setEnabled(true && !artifact.isReadOnly());
+
+ // Update the enabled values for the popup menu each time it comes up
+ addItem.addArmListener(new ArmListener() {
+
+ public void widgetArmed(ArmEvent e) {
+ MenuItem addItem = (MenuItem) e.getSource();
+ for (MenuItem attrItem : addItem.getMenu().getItems()) {
+ try {
+ attrItem.setEnabled(artifact.getRemainingAttributeCount((AttributeType) attrItem.getData()) > 0);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ });
+
+ Menu attributesMenu = new Menu(parentMenu);
+
+ try {
+ SelectionAdapter listener = new AttributeMenuSelectionListener(this, tableViewer, editor);
+ for (AttributeType attributeType : artifact.getAttributeTypes()) {
+ MenuItem item = new MenuItem(attributesMenu, SWT.CASCADE);
+ item.setText(attributeType.getName() + " Attribute");
+ item.setData(attributeType);
+ item.addSelectionListener(listener);
+ }
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ addItem.setMenu(attributesMenu);
+ }
+
+ private void createDeleteMenuItem(Menu parentMenu) {
+ deleteItem = new MenuItem(parentMenu, SWT.PUSH);
+ deleteItem.setImage(null);
+ deleteItem.setText("Delete");
+ deleteItem.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ Attribute<?> attribute = getSelectedAttribute();
+ attribute.delete();
+ editor.onDirtied();
+ notifyModifyAttribuesListeners();
+ tableViewer.refresh();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+ }
+
+ private Attribute<?> getSelectedAttribute() {
+ TableItem[] items = tableViewer.getTable().getSelection();
+ if (items.length > 0)
+ return (Attribute<?>) (tableViewer.getTable().getSelection()[0]).getData();
+ else
+ return null;
+ }
+
+ public class AttributeMenuListener implements MenuListener {
+ public void menuHidden(MenuEvent e) {
+ }
+
+ public void menuShown(MenuEvent e) {
+ Attribute<?> attribute = getSelectedAttribute();
+
+ if (attribute == null) {
+ deleteItem.setText("Delete - No Attribute Selected");
+ deleteItem.setEnabled(false);
+ } else if (!attribute.canDelete()) {
+ deleteItem.setText("Delete - Lower Limit Met");
+ deleteItem.setEnabled(false);
+ } else {
+ deleteItem.setText("Delete");
+ deleteItem.setEnabled(!artifact.isReadOnly());
+ }
+ }
+ }
+
+ public Artifact getArtifact() {
+ return artifact;
+ }
+
+ public void refreshArtifact(Artifact artifact) {
+ this.artifact = artifact;
+
+ if (tableViewer.getContentProvider() != null) {
+ tableViewer.setInput(artifact);
+ tableViewer.refresh();
+ }
+ }
+
+ public boolean isDisplayNameAttribute() {
+ return displayNameAttribute;
+ }
+
+ public void addModifyAttributesListener(ModifyAttributesListener listener) {
+ if (!modifyAttrListeners.contains(listener)) modifyAttrListeners.add(listener);
+ }
+
+ public void removeModifyAttributesListener(ModifyAttributesListener listener) {
+ modifyAttrListeners.remove(listener);
+ }
+
+ public void notifyModifyAttribuesListeners() {
+ for (ModifyAttributesListener listener : modifyAttrListeners)
+ listener.handleEvent();
+ }
+
+ private void setHelpContexts() {
+ SkynetGuiPlugin.getInstance().setHelp(tableViewer.getControl(), "artifact_editor");
+ }
+
+ /**
+ * @return the toolBar
+ */
+ public ToolBar getToolBar() {
+ return toolBar;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DefaultBranchContributionItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DefaultBranchContributionItem.java
new file mode 100644
index 00000000000..f7dad333d5d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DefaultBranchContributionItem.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchLabelProvider;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectionDialog;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.part.MultiPageEditorPart;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class DefaultBranchContributionItem extends OseeContributionItem implements IBranchEventListener {
+ private static final String ID = "skynet.defaultBranch";
+ private static final Image ENABLED = SkynetGuiPlugin.getInstance().getImage("branch.gif");
+ private static final String ENABLED_TOOLTIP =
+ "The default branch that Skynet is working from.\nDouble-click to change.";
+ private static final String DISABLED_TOOLTIP = ENABLED_TOOLTIP;
+
+ private DefaultBranchContributionItem() {
+ super(ID, 25);
+ init();
+ }
+
+ private void init() {
+ setActionHandler(new Action() {
+ @Override
+ public void run() {
+ BranchSelectionDialog branchSelection = new BranchSelectionDialog("Set Default Branch", false);
+ int result = branchSelection.open();
+ if (result == Window.OK) {
+ try {
+ BranchManager.setDefaultBranch(branchSelection.getSelection());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ }
+ });
+ updateStatus(true);
+ updateInfo();
+ OseeEventManager.addListener(this);
+ }
+
+ private void updateInfo() {
+ setText(BranchManager.getDefaultBranch().getDisplayName());
+ }
+
+ public static void addTo(IStatusLineManager manager) {
+ boolean wasFound = false;
+ for (IContributionItem item : manager.getItems()) {
+ if (item instanceof DefaultBranchContributionItem) {
+ wasFound = true;
+ break;
+ }
+ }
+ if (!wasFound) {
+ manager.add(new DefaultBranchContributionItem());
+ }
+ }
+
+ public static void addTo(ViewPart view, boolean update) {
+ addTo(view.getViewSite().getActionBars().getStatusLineManager());
+ if (update) view.getViewSite().getActionBars().updateActionBars();
+ }
+
+ public static void addTo(MultiPageEditorPart editorPart, boolean update) {
+ addTo(editorPart.getEditorSite().getActionBars().getStatusLineManager());
+ if (update) editorPart.getEditorSite().getActionBars().updateActionBars();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, int branchId) {
+ if (branchModType == BranchEventType.DefaultBranchChanged) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ updateInfo();
+ }
+ });
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+ }
+
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ super.dispose();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getDisabledImage()
+ */
+ @Override
+ protected Image getDisabledImage() {
+ return ENABLED;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getDisabledToolTip()
+ */
+ @Override
+ protected String getDisabledToolTip() {
+ return DISABLED_TOOLTIP;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getEnabledImage()
+ */
+ @Override
+ protected Image getEnabledImage() {
+ return BranchLabelProvider.getBranchImage(BranchManager.getDefaultBranch());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getEnabledToolTip()
+ */
+ @Override
+ protected String getEnabledToolTip() {
+ return ENABLED_TOOLTIP;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DefineHttpServerRequest.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DefineHttpServerRequest.java
new file mode 100644
index 00000000000..77c1629241f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DefineHttpServerRequest.java
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.core.client.server.HttpRequest;
+import org.eclipse.osee.framework.core.client.server.HttpResponse;
+import org.eclipse.osee.framework.core.client.server.HttpUrlBuilder;
+import org.eclipse.osee.framework.core.client.server.IHttpServerRequest;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class DefineHttpServerRequest implements IHttpServerRequest {
+
+ private static DefineHttpServerRequest instance = new DefineHttpServerRequest();
+
+ public DefineHttpServerRequest() {
+ super();
+ }
+
+ public static DefineHttpServerRequest getInstance() {
+ return instance;
+ }
+
+ public String getUrl(Artifact artifact) {
+ Map<String, String> keyValues = new HashMap<String, String>();
+ String guid = artifact.getGuid();
+ if (Strings.isValid(guid)) {
+ keyValues.put("guid", guid);
+ }
+ return HttpUrlBuilder.getInstance().getUrlForLocalSkynetHttpServer(getRequestType(), keyValues);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.skynet.core.linking.IHttpServerRequest#getRequestType()
+ */
+ public String getRequestType() {
+ return "Define";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.linking.IHttpServerRequest#processRequest(org.eclipse.osee.framework.skynet.core.linking.HttpRequest, org.eclipse.osee.framework.skynet.core.linking.HttpResponse)
+ */
+ public void processRequest(HttpRequest httpRequest, HttpResponse httpResponse) {
+ final Branch branch = BranchManager.getDefaultBranch();
+ String guid = httpRequest.getParameter("guid");
+ try {
+ final Artifact artifact = ArtifactQuery.getArtifactFromId(guid, branch);
+ if (artifact == null) {
+ httpResponse.outputStandardError(400, "Artifact can not be found in OSEE on branch " + branch);
+ return;
+ }
+ Displays.ensureInDisplayThread(new Runnable() {
+
+ public void run() {
+
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ try {
+ page.openEditor(new ArtifactEditorInput(artifact),
+ "org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor");
+ page.getViewReferences();
+ } catch (PartInitException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ String html =
+ AHTML.simplePage(artifact.getDescriptiveName() + " has been opened in OSEE on branch " + branch + "<br><br>" + "<form><input type=button onClick='window.opener=self;window.close()' value='Close'></form>");
+ httpResponse.getPrintStream().println(html);
+ } catch (Exception ex) {
+ httpResponse.outputStandardError(400, "Exception handling request", ex);
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DialogPopupLoggerListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DialogPopupLoggerListener.java
new file mode 100644
index 00000000000..1a4d7efcddb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/DialogPopupLoggerListener.java
@@ -0,0 +1,74 @@
+/*
+ * Created on Jun 25, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.osee.framework.logging.ILoggerListener;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author b1528444
+ */
+public class DialogPopupLoggerListener implements ILoggerListener {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.logging.ILoggerListener#log(java.lang.String, java.lang.String, java.util.logging.Level, java.lang.String, java.lang.Throwable)
+ */
+ @Override
+ public void log(String loggerName, Level level, String message, Throwable th) {
+ if (level == OseeLevel.SEVERE_POPUP) {
+ String title = "OSEE Error";
+ String messageText = message;
+ String reasonMessage = "";
+ if (th != null) {
+ reasonMessage = th.getMessage();
+ }
+ final IStatus status;
+ if (th != null) {
+ List<IStatus> exc = new ArrayList<IStatus>();
+ exceptionToString(true, loggerName, th, exc);
+ status = new MultiStatus(loggerName, Status.ERROR, exc.toArray(new IStatus[exc.size()]), reasonMessage, th);
+ } else {
+ status = new Status(Status.ERROR, loggerName, -20, reasonMessage, th);
+ }
+ final String realTitle = title;
+ final String realMessageText = messageText;
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
+ public void run() {
+ ErrorDialog.openError(Display.getDefault().getActiveShell(), realTitle, realMessageText, status);
+ }
+ });
+ }
+ }
+
+ private static void exceptionToString(boolean firstTime, String loggerName, Throwable ex, List<IStatus> exc) {
+ if (ex == null) {
+ return;
+ }
+ if (!firstTime) {
+ exc.add(new Status(Status.ERROR, loggerName, ex.getMessage()));
+ }
+ StackTraceElement st[] = ex.getStackTrace();
+ for (int i = 0; i < st.length; i++) {
+ StackTraceElement ste = st[i];
+ exc.add(new Status(Status.ERROR, loggerName, ste.toString()));
+ }
+ Throwable cause = ex.getCause();
+ if (cause != null) {
+ exc.add(new Status(Status.ERROR, loggerName, " caused by "));
+ exceptionToString(false, loggerName, cause, exc);
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/GenerateTypeEnumAction.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/GenerateTypeEnumAction.java
new file mode 100644
index 00000000000..7a9e8966057
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/GenerateTypeEnumAction.java
@@ -0,0 +1,167 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.database.SkynetTypesEnumGenerator;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkspace;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IActionDelegate;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+
+public class GenerateTypeEnumAction implements IActionDelegate {
+
+ public GenerateTypeEnumAction() {
+ super();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void run(IAction action) {
+ try {
+ StructuredSelection sel = AWorkspace.getSelection();
+ Iterator i = sel.iterator();
+ File selection = null;
+ while (i.hasNext()) {
+ Object obj = i.next();
+ if (obj instanceof IResource) {
+ IResource resource = (IResource) obj;
+ if (resource != null) {
+ selection = resource.getLocation().toFile();
+ if (selection != null) {
+
+ Object destinationObj = getFolderToStoreAutoGenFilesIn(resource);
+ if (destinationObj instanceof IContainer) {
+ IContainer destinationFolder = (IContainer) destinationObj;
+ File storeAt = destinationFolder.getLocation().toFile();
+ SkynetTypesEnumGenerator gen = new SkynetTypesEnumGenerator();
+ gen.extractTypesFromSheet(selection, storeAt);
+ gen.finish();
+
+ destinationFolder.refreshLocal(IResource.DEPTH_INFINITE, null);
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private Object getFolderToStoreAutoGenFilesIn(IResource resource) {
+ CheckedTreeSelectionDialog resourceDialog =
+ new ResourceSelectionTree(PlatformUI.getWorkbench().getDisplay().getActiveShell(),
+ new WorkbenchLabelProvider(), new WorkbenchContentProvider());
+
+ resourceDialog.setInput(resource.getWorkspace().getRoot());
+ resourceDialog.addFilter(new ViewerFilter() {
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ IResource resource = null;
+ if (element instanceof IContainer) {
+ IContainer container = (IContainer) element;
+ String name = container.getName();
+ if (name.startsWith(".") == false && name.equals("bin") == false) {
+ resource = container;
+ }
+ }
+ if (resource != null) {
+ return true;
+ }
+ return false;
+ }
+ });
+ resourceDialog.setMessage("Select where Auto-Generated classes should be stored.");
+ resourceDialog.setTitle("Select Destination");
+ resourceDialog.setEmptyListMessage("No Projects Available");
+ IContainer container = resource.getParent();
+ resourceDialog.setInitialSelection(container);
+ List<Object> expand = new ArrayList<Object>();
+ expand.add(container);
+ if (container.getParent() != null) {
+ expand.add(container.getParent());
+ }
+ resourceDialog.setExpandedElements(expand.toArray(new Object[expand.size()]));
+ int result = resourceDialog.open();
+ return result != Window.CANCEL ? resourceDialog.getFirstResult() : null;
+ }
+
+ public void selectionChanged(IAction action, ISelection selection) {
+ }
+
+ private final class ResourceSelectionTree extends CheckedTreeSelectionDialog {
+
+ public ResourceSelectionTree(Shell parent, ILabelProvider labelProvider, ITreeContentProvider contentProvider) {
+ super(parent, labelProvider, contentProvider);
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+ layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+ layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
+ layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+ applyDialogFont(composite);
+
+ Label messageLabel = createMessageArea(composite);
+ CheckboxTreeViewer treeViewer = createTreeViewer(composite);
+ GridData data = new GridData(GridData.FILL_BOTH);
+ data.widthHint = convertWidthInCharsToPixels(80);
+ data.heightHint = convertHeightInCharsToPixels(16);
+ Tree treeWidget = treeViewer.getTree();
+ treeViewer.addCheckStateListener(new ICheckStateListener() {
+
+ public void checkStateChanged(CheckStateChangedEvent event) {
+ boolean wasChecked = event.getChecked();
+ getTreeViewer().setAllChecked(false);
+ event.getCheckable().setChecked(event.getElement(), wasChecked);
+ }
+
+ });
+ treeWidget.setLayoutData(data);
+ treeWidget.setFont(parent.getFont());
+ messageLabel.setEnabled(true);
+ treeWidget.setEnabled(true);
+ return composite;
+ }
+ };
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/HTMLTransferFormatter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/HTMLTransferFormatter.java
new file mode 100644
index 00000000000..949888b53a6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/HTMLTransferFormatter.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.preferences.PreferenceConstants;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class HTMLTransferFormatter {
+ private static final String START = "<A href=\"";
+ private static final String END = "</A>";
+ private static IPreferenceStore prefStore = SkynetGuiPlugin.getInstance().getPreferenceStore();
+
+ public static String getHtml(Artifact... artifacts) {
+ boolean applyWordTagWrap =
+ prefStore.getString(PreferenceConstants.WORDWRAP_KEY) != null && prefStore.getString(
+ PreferenceConstants.WORDWRAP_KEY).equals(IPreferenceStore.TRUE);
+
+ if (artifacts != null) {
+ StringBuilder sb = new StringBuilder();
+
+ if (applyWordTagWrap) {
+ sb.append("Version:1.0\r\nStartHTML:2\r\nEndHTML:170\r\nStartFragment:140\r\nEndFragment:160\r\n" + "StartSelection:140\r\nEndSelection:160\r\n<HTML><HEAD><TITLE> The HTML Clipboard</TITLE></HEAD><BODY>\r\n" + "<!--StartFragment -->\r\n");
+ }
+
+ List<String> urls = new ArrayList<String>(artifacts.length);
+ for (Artifact artifact : artifacts)
+ urls.add(DefineHttpServerRequest.getInstance().getUrl(artifact) + "\">" + artifact.getDescriptiveName());
+
+ sb.append(Collections.toString(urls, START, END + ", " + START, END));
+
+ if (applyWordTagWrap) {
+ sb.append("\r\n<!--EndFragment --></BODY></HTML>");
+ }
+
+ return sb.toString();
+ } else {
+ throw new IllegalArgumentException("The artifact can not be null");
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/IHelpContextIds.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/IHelpContextIds.java
new file mode 100644
index 00000000000..3b0ab8d09cd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/IHelpContextIds.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public interface IHelpContextIds {
+ public static final String PREFIX = "org.eclipse.osee.framework.ui.skynet.";
+ public static final String MAIN_WORKFLOW_PAGE = PREFIX + "main_workflow_page";
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AbstractArtifactExtractor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AbstractArtifactExtractor.java
new file mode 100644
index 00000000000..75d1afae53a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AbstractArtifactExtractor.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public abstract class AbstractArtifactExtractor implements ArtifactExtractor {
+ private final ArrayList<RoughArtifact> roughArtifacts;
+ private final ArrayList<RoughRelation> roughRelations;
+ private final Branch branch;
+
+ public AbstractArtifactExtractor(Branch branch) {
+ super();
+ this.roughArtifacts = new ArrayList<RoughArtifact>();
+ this.roughRelations = new ArrayList<RoughRelation>();
+ this.branch = branch;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.define.artifact.Import.ArtifactExtractor#getRoughArtifacts()
+ */
+ public List<RoughArtifact> getRoughArtifacts() {
+ return roughArtifacts;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.define.artifact.Import.ArtifactExtractor#getRoughRelations(osee.define.artifact.Import.RoughArtifact)
+ */
+ public List<RoughRelation> getRoughRelations(RoughArtifact parent) throws Exception {
+ determineParentChildRelations();
+
+ if (parent != null) {
+ for (RoughArtifact roughArtifact : roughArtifacts) {
+ if (!roughArtifact.hasParent()) {
+ parent.addChild(roughArtifact);
+ }
+ }
+ }
+ return roughRelations;
+ }
+
+ private void determineParentChildRelations() {
+ for (RoughArtifact roughArtifact : roughArtifacts) {
+ if (roughArtifact.hasHierarchicalRelation()) {
+ determineParentChildRelationsFor(roughArtifact);
+ }
+ }
+ }
+
+ private void determineParentChildRelationsFor(RoughArtifact roughReq) {
+ // find all children and then save then by their order
+ for (RoughArtifact otherRoughReq : roughArtifacts) {
+ if (roughReq != otherRoughReq) { // don't compare to self
+ if (roughReq.isChild(otherRoughReq)) {
+ roughReq.addChild(otherRoughReq);
+ }
+ }
+ }
+ }
+
+ public void addRoughArtifact(RoughArtifact roughArtifact) {
+ roughArtifacts.add(roughArtifact);
+ }
+
+ public void addRoughRelation(RoughRelation roughRelation) {
+ roughRelations.add(roughRelation);
+ }
+
+ /**
+ * @return the branch
+ */
+ public Branch getBranch() {
+ return branch;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactExtractor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactExtractor.java
new file mode 100644
index 00000000000..10a29b9169f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactExtractor.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.util.List;
+
+public interface ArtifactExtractor {
+ /**
+ * called before getRoughArtifacts and getRoughRelations to discover the data that they will return
+ *
+ * @param artifactsFile file from which to extract artifact data
+ * @throws Exception
+ */
+ public abstract void discoverArtifactAndRelationData(File artifactsFile) throws Exception;
+
+ public abstract List<RoughArtifact> getRoughArtifacts() throws Exception;
+
+ public abstract List<RoughRelation> getRoughRelations(RoughArtifact potentialParent) throws Exception;
+
+ public abstract FileFilter getFileFilter();
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportJob.java
new file mode 100644
index 00000000000..30fd7c580b2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportJob.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class ArtifactImportJob extends Job {
+ private final File file;
+ private final ArtifactType folderDescriptor;
+ private final IArtifactImportResolver artifactResolver;
+ private ArtifactExtractor extractor;
+ private final ArrayList<RoughArtifact> roughArtifacts;
+ private final ArrayList<RoughRelation> roughRelations;
+ private final Branch branch;
+ private final Artifact importRoot;
+
+ public ArtifactImportJob(File file, Artifact importRoot, ArtifactExtractor extractor, Branch branch, IArtifactImportResolver artifactResolver) throws OseeCoreException {
+ super("Importing");
+
+ this.file = file;
+ this.extractor = extractor;
+ this.folderDescriptor = ArtifactTypeManager.getType("Folder");
+ this.artifactResolver = artifactResolver;
+ this.roughArtifacts = new ArrayList<RoughArtifact>();
+ this.roughRelations = new ArrayList<RoughRelation>();
+ this.branch = branch;
+ this.importRoot = importRoot;
+ }
+
+ public IStatus run(final IProgressMonitor monitor) {
+ IStatus toReturn;
+ try {
+ final RoughArtifact rootRoughArtifact = new RoughArtifact(importRoot);
+ extractArtifacts(new File[] {file}, rootRoughArtifact);
+
+ if (monitor.isCanceled()) {
+ return new Status(Status.CANCEL, SkynetGuiPlugin.PLUGIN_ID, "User Cancled the operation.");
+ }
+
+ monitor.beginTask("Creating Artifacts", roughArtifacts.size() + roughRelations.size());
+
+ SkynetTransaction transaction = new SkynetTransaction(branch);
+ for (RoughArtifact roughArtifact : rootRoughArtifact.getChildren()) {
+ // the getReal call with recursively call get real on all descendants of roughArtifact
+ importRoot.addChild(roughArtifact.getReal(transaction, monitor, artifactResolver));
+ }
+
+ monitor.setTaskName("Creating Relations");
+ for (RoughRelation roughRelation : roughRelations) {
+ roughRelation.makeReal(transaction, monitor);
+ }
+ importRoot.persistAttributesAndRelations(transaction);
+
+ monitor.setTaskName("Committing Transaction");
+ monitor.subTask(""); // blank out leftover relation subtask
+ monitor.worked(1); // cause the status to update
+ transaction.execute();
+ toReturn = Status.OK_STATUS;
+ } catch (Exception ex) {
+ toReturn = new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, -1, ex.getMessage(), ex);
+ } finally {
+ monitor.done();
+ }
+ return toReturn;
+ }
+
+ /**
+ * used recursively when originally passed a directory, thus an array of files is accepted
+ *
+ * @param files
+ * @param parentArtifact
+ * @throws Exception
+ */
+ private void extractArtifacts(File[] files, RoughArtifact parentArtifact) throws Exception {
+ for (File file : files) {
+ if (file.isFile()) {
+ extractor.discoverArtifactAndRelationData(file);
+ List<RoughArtifact> tempArtifacts = extractor.getRoughArtifacts();
+ roughArtifacts.addAll(tempArtifacts);
+ roughRelations.addAll(extractor.getRoughRelations(parentArtifact));
+
+ for (RoughArtifact roughArtifact : tempArtifacts) {
+ if (roughArtifact.getRoughParent() == null) {
+ parentArtifact.addChild(roughArtifact);
+ }
+ }
+ } else if (file.isDirectory()) {
+ RoughArtifact directoryArtifact = new RoughArtifact(branch, file.getName());
+ directoryArtifact.setHeadingDescriptor(folderDescriptor);
+ directoryArtifact.setPrimaryDescriptor(folderDescriptor);
+ roughArtifacts.add(directoryArtifact);
+ parentArtifact.addChild(directoryArtifact);
+
+ extractArtifacts(file.listFiles(extractor.getFileFilter()), directoryArtifact);
+ } else {
+ throw new IllegalStateException(file + " is not a file or directory");
+ }
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportPage.java
new file mode 100644
index 00000000000..4d858b3a3bc
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportPage.java
@@ -0,0 +1,429 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.logging.Level;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.ui.plugin.util.DirectoryOrFileSelector;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectComposite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ArtifactImportPage extends WizardDataTransferPage {
+ public enum ImportMethod {
+ EXCEL, GENERAL, WHOLE_WORD, WORD_OUTLINE
+ };
+
+ public static final String PAGE_NAME = "osee.define.wizardPage.artifactImportPage";
+ private final Artifact destinationArtifact;
+ private List typeList;
+ private BranchSelectComposite branchSelectComposite;
+
+ private Button chkReuseArtifacts;
+ private Button radImportUnderDhRoot;
+ private Button radImportUnderNamedRootFolder;
+ private Button radImportUnderSelection;
+ private Text txtImportUnderFolderName;
+
+ private DirectoryOrFileSelector directoryFileSelector;
+
+ private Button radWordOutlineExtractor;
+ private Button radExcelExtractor;
+ private Button radWholeWordExtractor;
+ private Button radGeneralExtractor;
+
+ private File importResource;
+
+ private boolean built;
+
+ /**
+ * Constructor used by the Skynet drag-n-drop
+ */
+ public ArtifactImportPage(File importResource, Artifact reuseRootArtifact) {
+ super(PAGE_NAME);
+ Assert.isNotNull(importResource, "importResource can not be null");
+ Assert.isNotNull(reuseRootArtifact, "reuseRootArtifact can not be null");
+
+ this.importResource = importResource;
+ this.destinationArtifact = reuseRootArtifact;
+ this.built = false;
+ }
+
+ /**
+ * Constructor that is used by the Eclipse framework
+ *
+ * @param pageName
+ * @param selection
+ */
+ public ArtifactImportPage(IStructuredSelection selection) {
+ super(PAGE_NAME);
+
+ this.importResource = null;
+ Artifact selectedArtifact = null;
+ if (selection != null && selection.size() == 1) {
+ Object firstElement = selection.getFirstElement();
+ if (firstElement instanceof IAdaptable) {
+ Object resource = ((IAdaptable) firstElement).getAdapter(IResource.class);
+ if (resource instanceof IResource) {
+ importResource = ((IResource) resource).getLocation().toFile();
+ }
+ } else if (firstElement instanceof Artifact) {
+ selectedArtifact = (Artifact) firstElement;
+ }
+ }
+
+ this.destinationArtifact = selectedArtifact;
+ this.built = false;
+ }
+
+ /**
+ * (non-Javadoc) Method declared on IDialogPage.
+ */
+ public void createControl(Composite parent) {
+
+ initializeDialogUnits(parent);
+
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout(1, false));
+ composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
+ composite.setFont(parent.getFont());
+
+ createSourceGroup(composite);
+
+ createOptionsGroup(composite);
+
+ built = true;
+
+ restoreWidgetValues();
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+
+ setControl(composite);
+ }
+
+ /**
+ * The <code>WizardResourceImportPage</code> implementation of this <code>Listener</code> method handles all events
+ * and enablements for controls on this page. Subclasses may extend.
+ *
+ * @param event Event
+ */
+ public void handleEvent(Event event) {
+ setPageComplete(determinePageCompletion());
+
+ updateWidgetEnablements();
+ }
+
+ private void createSourceGroup(Composite parent) {
+ createImportSource(parent);
+ createImportMethodSelection(parent);
+ setPageComplete(determinePageCompletion());
+ }
+
+ private void createImportSource(Composite parent) {
+
+ directoryFileSelector = new DirectoryOrFileSelector(parent, SWT.NONE, "Import Source", this);
+
+ if (importResource == null) {
+ // Select directory as the default
+ directoryFileSelector.setDirectorySelected(true);
+ } else {
+ directoryFileSelector.setDirectorySelected(!importResource.isFile());
+ directoryFileSelector.setText(importResource.getAbsolutePath());
+ }
+
+ Group composite = new Group(parent, SWT.NONE);
+ GridLayout layout = new GridLayout(2, false);
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ radImportUnderDhRoot = new Button(composite, SWT.RADIO);
+ radImportUnderDhRoot.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 2, 1));
+ radImportUnderDhRoot.setText("Add to Default Hierarchy Root");
+ radImportUnderDhRoot.setToolTipText("All the top level artifacts that are imported " + "will become root level children.");
+ radImportUnderDhRoot.addListener(SWT.Selection, this);
+
+ radImportUnderNamedRootFolder = new Button(composite, SWT.RADIO);
+ radImportUnderNamedRootFolder.setText("Add to Root Level Folder:");
+ radImportUnderNamedRootFolder.setToolTipText("All the top level artifacts that are imported " + "will become children of the named folder at the root level.");
+ radImportUnderNamedRootFolder.addListener(SWT.Selection, this);
+ txtImportUnderFolderName = new Text(composite, SWT.BORDER);
+ txtImportUnderFolderName.setText("Recent Imports");
+ txtImportUnderFolderName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ radImportUnderSelection = new Button(composite, SWT.RADIO);
+ radImportUnderSelection.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 2, 1));
+ radImportUnderSelection.setText("Add to Selected Artifact:" + destinationArtifact);
+ radImportUnderSelection.setToolTipText("All the top level artifacts that are imported " + "will become children of the selected artifact.");
+ radImportUnderSelection.addListener(SWT.Selection, this);
+ radImportUnderSelection.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (radImportUnderSelection.getSelection()) {
+ Branch branch = destinationArtifact.getBranch();
+ branchSelectComposite.setSelected(branch);
+ populateTypeList(branch);
+ }
+ }
+ });
+
+ chkReuseArtifacts = new Button(composite, SWT.CHECK);
+ chkReuseArtifacts.addListener(SWT.Selection, this);
+ chkReuseArtifacts.setText("Re-use Artifacts");
+ chkReuseArtifacts.setEnabled(true);
+ chkReuseArtifacts.setToolTipText("All imported artifacts will be checked against the root\n" + "import artifact and the content will be placed on the artifact\n" + "that has the same identifying attributes and level from the root");
+
+ chkReuseArtifacts.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false, 2, 1));
+
+ // Setup initial selections
+ chkReuseArtifacts.setSelection(false);
+ if (destinationArtifact == null) {
+ radImportUnderDhRoot.setSelection(true);
+ } else {
+ radImportUnderSelection.setSelection(true);
+ }
+ }
+
+ /*
+ * @see WizardPage#becomesVisible
+ */
+ @Override
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ // policy: wizards are not allowed to come up with an error message
+ if (visible) {
+ setErrorMessage(null);
+ }
+ }
+
+ @Override
+ protected boolean validateSourceGroup() {
+ return directoryFileSelector.validate(this);
+ }
+
+ @Override
+ protected void createOptionsGroup(Composite parent) {
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setText("Options");
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setLayout(new GridLayout(2, false));
+
+ Label label = new Label(composite, SWT.NONE);
+ label.setText("Branch:");
+ label.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+
+ label = new Label(composite, SWT.NONE);
+ label.setText("Artifact Type:");
+ label.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+
+ branchSelectComposite = new BranchSelectComposite(composite, SWT.BORDER, false);
+
+ typeList = new List(composite, SWT.BORDER | SWT.V_SCROLL);
+ GridData gridData = new GridData(GridData.FILL_BOTH);
+ gridData.heightHint = 300;
+ typeList.setLayoutData(gridData);
+
+ Branch defaultBranch;
+ if (destinationArtifact == null) {
+ defaultBranch = BranchManager.getDefaultBranch();
+ } else {
+ defaultBranch = destinationArtifact.getBranch();
+ }
+
+ populateTypeList(defaultBranch);
+ // Start out with an item selected
+ typeList.setSelection(0);
+
+ branchSelectComposite.addListener(new Listener() {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ @Override
+ public void handleEvent(Event event) {
+ populateTypeList(branchSelectComposite.getSelectedBranch());
+ }
+ });
+ }
+
+ private void populateTypeList(Branch branch) {
+ if (branch == null) return;
+ try {
+ String[] selection = typeList.getSelection();
+ typeList.removeAll();
+ ArrayList<ArtifactType> validArtifactTypes =
+ new ArrayList<ArtifactType>(TypeValidityManager.getValidArtifactTypes(branch));
+ Collections.sort(validArtifactTypes);
+ for (ArtifactType descriptor : validArtifactTypes) {
+ typeList.add(descriptor.getName());
+ typeList.setData(descriptor.getName(), descriptor);
+ }
+ typeList.setSelection(selection);
+ // If the item wasn't available in the new list
+ if (typeList.getSelectionCount() == 0) {
+ typeList.select(0);
+ }
+ typeList.showSelection();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ typeList.add("error loading artifact types");
+ }
+ }
+
+ private void createImportMethodSelection(Composite parent) {
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setText("Import Method");
+ composite.setToolTipText("Select the method to be used for importing the selected file or directory");
+ GridLayout layout = new GridLayout(2, true);
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ radWordOutlineExtractor = new Button(composite, SWT.RADIO);
+ radWordOutlineExtractor.setText("Word Outline");
+ radWordOutlineExtractor.setToolTipText(WordOutlineExtractor.getDescription());
+ radWordOutlineExtractor.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false, 1, 1));
+ radWordOutlineExtractor.addListener(SWT.Selection, this);
+
+ radWholeWordExtractor = new Button(composite, SWT.RADIO);
+ radWholeWordExtractor.setText("Whole Word Document");
+ radWholeWordExtractor.setToolTipText(WholeWordDocumentExtractor.getDescription());
+ radWholeWordExtractor.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false, 1, 1));
+ radWholeWordExtractor.addListener(SWT.Selection, this);
+
+ radExcelExtractor = new Button(composite, SWT.RADIO);
+ radExcelExtractor.setText("Excel XML Artifacts");
+ radExcelExtractor.setToolTipText(ExcelArtifactExtractor.getDescription());
+ radExcelExtractor.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false, 1, 1));
+ radExcelExtractor.addListener(SWT.Selection, this);
+
+ radGeneralExtractor = new Button(composite, SWT.RADIO);
+ radGeneralExtractor.setText("General Documents (All Formats)");
+ radGeneralExtractor.setToolTipText(NativeDocumentExtractor.getDescription());
+ radGeneralExtractor.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false, 1, 1));
+ radGeneralExtractor.addListener(SWT.Selection, this);
+
+ radWordOutlineExtractor.setSelection(true);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.WizardResourceImportPage#allowNewContainerName()
+ */
+ @Override
+ protected boolean allowNewContainerName() {
+ return true;
+ }
+
+ public File getImportFile() {
+ return directoryFileSelector.getFile();
+ }
+
+ public boolean isExcelExtractor() {
+ return radExcelExtractor.getSelection();
+ }
+
+ public boolean isWholeWordExtractor() {
+ return radWholeWordExtractor.getSelection();
+ }
+
+ public boolean isGeneralDocumentExtractor() {
+ return radGeneralExtractor.getSelection();
+ }
+
+ public boolean isWordOutlineExtractor() {
+ return radWordOutlineExtractor.getSelection();
+ }
+
+ public ArtifactType getSelectedType() {
+ String itemName = typeList.getItem(typeList.getSelectionIndex());
+ return (ArtifactType) typeList.getData(itemName);
+ }
+
+ public Branch getSelectedBranch() {
+ if (chkReuseArtifacts.getSelection()) {
+ return destinationArtifact.getBranch();
+ } else {
+ return branchSelectComposite.getSelectedBranch();
+ }
+ }
+
+ public Artifact getImportRoot() throws OseeCoreException {
+ Artifact importRoot;
+
+ if (radImportUnderDhRoot.getSelection()) {
+ importRoot = ArtifactPersistenceManager.getDefaultHierarchyRootArtifact(getSelectedBranch());
+ } else if (radImportUnderNamedRootFolder.getSelection()) {
+ importRoot =
+ ArtifactPersistenceManager.getDefaultHierarchyRootArtifact(getSelectedBranch()).getChild(
+ txtImportUnderFolderName.getText());
+ } else if (radImportUnderSelection.getSelection()) {
+ importRoot = destinationArtifact;
+ } else {
+ throw new IllegalStateException("One of the 3 radio buttons should be selected.");
+ }
+
+ return importRoot;
+ }
+
+ public Artifact getReuseArtifactRoot() {
+ if (chkReuseArtifacts.getSelection()) {
+ return destinationArtifact;
+ }
+ return null;
+ }
+
+ /*
+ * The page may not be init'd here
+ */
+ @Override
+ protected void updateWidgetEnablements() {
+ super.updateWidgetEnablements();
+
+ if (built) {
+ branchSelectComposite.setEnabled(!radImportUnderSelection.getSelection());
+
+ txtImportUnderFolderName.setEnabled(false);// TODO future development
+ radImportUnderSelection.setEnabled(destinationArtifact != null);
+
+ typeList.setEnabled(radGeneralExtractor.getSelection() || radWordOutlineExtractor.getSelection() || radWholeWordExtractor.getSelection());
+ }
+
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportWizard.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportWizard.java
new file mode 100644
index 00000000000..646efe218a7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ArtifactImportWizard.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ArtifactImportWizard extends Wizard implements IImportWizard {
+ private static final String TITLE = "Import artifacts into Define";
+ private ArtifactImportPage mainPage;
+ private AttributeTypePage attributeTypePage;
+ private OutlineContentHandlerPage handlerPage;
+ private File importFile;
+ private Artifact reuseRootArtifact;
+
+ public ArtifactImportWizard() {
+ super();
+ setDialogSettings(SkynetGuiPlugin.getInstance().getDialogSettings());
+ setWindowTitle("Artifact Import Wizard");
+ }
+
+ public void setImportResourceAndArtifactDestination(File importFile, Artifact reuseRootArtifact) {
+ Assert.isNotNull(importFile);
+ Assert.isNotNull(reuseRootArtifact);
+
+ this.importFile = importFile;
+ this.reuseRootArtifact = reuseRootArtifact;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ @Override
+ public boolean performFinish() {
+ File file = mainPage.getImportFile();
+ Branch branch = mainPage.getSelectedBranch();
+ IArtifactImportResolver artifactResolver = null;
+
+ Artifact reuseArtifactRoot = mainPage.getReuseArtifactRoot();
+ if (reuseArtifactRoot == null) {
+ artifactResolver = new NewArtifactImportResolver();
+ } else { // only non-null when reuse artifacts is checked
+ Collection<AttributeType> identifyingAttributes = attributeTypePage.getSelectedAttributeDescriptors();
+ artifactResolver = new RootAndAttributeBasedArtifactResolver(identifyingAttributes, false);
+ }
+
+ ArtifactType mainDescriptor = null;
+
+ if (mainPage.isGeneralDocumentExtractor() || mainPage.isWholeWordExtractor() || mainPage.isWordOutlineExtractor()) {
+ mainDescriptor = mainPage.getSelectedType();
+ }
+
+ try {
+ ArtifactExtractor extractor = getNewArtifactExtractor(mainDescriptor, branch, reuseArtifactRoot != null);
+ Artifact importRoot = mainPage.getImportRoot();
+ Jobs.startJob(new ArtifactImportJob(file, importRoot, extractor, branch, artifactResolver));
+ } catch (Exception ex) {
+ ErrorDialog.openError(getShell(), "Import Error", "An error has occured while importing a document.",
+ new Status(IStatus.ERROR, "org.eclipse.osee.framework.jdk.core", IStatus.ERROR,
+ "Exception occured during artifact import", ex));
+ }
+ return true;
+ }
+
+ public ArtifactExtractor getNewArtifactExtractor(ArtifactType primaryDescriptor, Branch branch, boolean reuseArtifacts) throws OseeCoreException {
+ if (mainPage.isWordOutlineExtractor()) {
+ return new WordOutlineExtractor(primaryDescriptor, branch, 0, handlerPage.getSelectedOutlineContentHandler());
+ } else if (mainPage.isExcelExtractor()) {
+ return new ExcelArtifactExtractor(branch, reuseArtifacts);
+ } else if (mainPage.isWholeWordExtractor()) {
+ return new WholeWordDocumentExtractor(primaryDescriptor, branch);
+ } else if (mainPage.isGeneralDocumentExtractor()) {
+ return new NativeDocumentExtractor(primaryDescriptor, branch);
+ } else {
+ throw new OseeCoreException("None of the expected extractor buttons are selected");
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench,
+ * org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ if (importFile != null && reuseRootArtifact != null) {
+ this.mainPage = new ArtifactImportPage(importFile, reuseRootArtifact);
+ } else {
+ this.mainPage = new ArtifactImportPage(selection);
+ }
+ this.attributeTypePage = new AttributeTypePage();
+ this.handlerPage = new OutlineContentHandlerPage();
+
+ mainPage.setTitle(TITLE);
+ mainPage.setDescription("Import artifacts into Define");
+ attributeTypePage.setTitle(TITLE);
+ handlerPage.setTitle(TITLE);
+ handlerPage.setDescription("Handler to use for getting Artifacts from the outline");
+ }
+
+ /**
+ * (non-Javadoc) Method declared on Wizard.
+ */
+ public void addPages() {
+ addPage(mainPage);
+ addPage(attributeTypePage);
+ addPage(handlerPage);
+ }
+
+ @Override
+ public IWizardPage getNextPage(IWizardPage page) {
+ if (page == mainPage && mainPage.getReuseArtifactRoot() != null) {
+ try {
+ ArtifactType rootDescriptor = mainPage.getReuseArtifactRoot().getArtifactType();
+ ArtifactType importDescriptor = mainPage.getSelectedType();
+
+ HashSet<AttributeType> rootAttributes =
+ new HashSet<AttributeType>(TypeValidityManager.getAttributeTypesFromArtifactType(rootDescriptor,
+ mainPage.getSelectedBranch()));
+
+ if (rootDescriptor == importDescriptor) {
+ attributeTypePage.setDescription("Identifying attributes for " + rootDescriptor.getName() + " artifacts");
+ attributeTypePage.setDescriptors(rootAttributes);
+ } else {
+ HashSet<AttributeType> importAttributes =
+ new HashSet<AttributeType>(TypeValidityManager.getAttributeTypesFromArtifactType(importDescriptor,
+ mainPage.getSelectedBranch()));
+
+ attributeTypePage.setDescription("Identifying attributes common to " + rootDescriptor.getName() + " and " + importDescriptor.getName() + " artifacts");
+
+ importAttributes.addAll(rootAttributes);
+ attributeTypePage.setDescriptors(importAttributes);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return attributeTypePage;
+ } else if (mainPage.isWordOutlineExtractor() && page != handlerPage) {
+ return handlerPage;
+ }
+ return null;
+ }
+
+ @Override
+ public IWizardPage getPreviousPage(IWizardPage page) {
+ if (page == attributeTypePage || (page == handlerPage && mainPage.getReuseArtifactRoot() == null)) {
+ return mainPage;
+ } else if (page == handlerPage) {
+ return attributeTypePage;
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean canFinish() {
+ return mainPage.isPageComplete() && (mainPage.getReuseArtifactRoot() == null || attributeTypePage.isPageComplete()) && (!mainPage.isWordOutlineExtractor() || handlerPage.isPageComplete());
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AttributeImportType.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AttributeImportType.java
new file mode 100644
index 00000000000..175594667f2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AttributeImportType.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public enum AttributeImportType {
+ UNIQUE, UPDATE, NONE
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AttributeTypePage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AttributeTypePage.java
new file mode 100644
index 00000000000..c61583b645f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/AttributeTypePage.java
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class AttributeTypePage extends WizardDataTransferPage implements Listener {
+ public static final String PAGE_NAME = "osee.define.wizardPage.attributeTypePage";
+ private List typeList;
+ private boolean hasDescriptors;
+
+ /**
+ * @param descriptors Available descriptors to select from
+ */
+ public AttributeTypePage() {
+ super(PAGE_NAME);
+
+ hasDescriptors = false;
+ }
+
+ /**
+ * (non-Javadoc) Method declared on IDialogPage.
+ */
+ public void createControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout(1, false));
+ composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
+ composite.setFont(parent.getFont());
+
+ createOptionsGroup(composite);
+
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+
+ setControl(composite);
+ }
+
+ /**
+ * The <code>WizardResourceImportPage</code> implementation of this <code>Listener</code> method handles all
+ * events and enablements for controls on this page. Subclasses may extend.
+ *
+ * @param event Event
+ */
+ public void handleEvent(Event event) {
+ setPageComplete(determinePageCompletion());
+
+ updateWidgetEnablements();
+ }
+
+ /*
+ * @see WizardPage#becomesVisible
+ */
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ // policy: wizards are not allowed to come up with an error message
+ if (visible) {
+ setErrorMessage(null);
+ }
+ }
+
+ protected void createOptionsGroup(Composite parent) {
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setText("Attribute Types");
+ composite.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, true, true));
+ composite.setLayout(new GridLayout(1, true));
+
+ typeList = new List(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);
+ typeList.addListener(SWT.Selection, this);
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.heightHint = 300;
+ typeList.setLayoutData(gridData);
+
+ }
+
+ /**
+ * @param descriptors the descriptors to set
+ */
+ public void setDescriptors(Collection<AttributeType> descriptors) {
+ java.util.List<AttributeType> sortedDescriptors =
+ new ArrayList<AttributeType>(descriptors);
+ Collections.sort(sortedDescriptors, new Comparator<AttributeType>() {
+ public int compare(AttributeType o1, AttributeType o2) {
+ return o1.getName().compareToIgnoreCase(o2.getName());
+ }
+ });
+
+ String[] selection = typeList.getSelection();
+ typeList.removeAll();
+
+ hasDescriptors = !sortedDescriptors.isEmpty();
+ if (hasDescriptors) {
+ for (AttributeType descriptor : sortedDescriptors) {
+ typeList.add(descriptor.getName());
+ typeList.setData(descriptor.getName(), descriptor);
+ }
+ } else {
+ typeList.add("<No Attribute Types>");
+ }
+
+ // Restore any prior selections
+ typeList.setSelection(selection);
+ typeList.getParent().pack(true);
+ }
+
+ @Override
+ protected boolean allowNewContainerName() {
+ return false;
+ }
+
+ public Collection<AttributeType> getSelectedAttributeDescriptors() {
+ Collection<AttributeType> selectedAttributeDescriptors =
+ new ArrayList<AttributeType>(typeList.getSelectionCount());
+
+ if (hasDescriptors) {
+ for (String attributeName : typeList.getSelection()) {
+ selectedAttributeDescriptors.add((AttributeType) typeList.getData(attributeName));
+ }
+ }
+
+ return selectedAttributeDescriptors;
+ }
+
+ @Override
+ protected boolean validateOptionsGroup() {
+ return hasDescriptors && typeList.getSelectionCount() > 0;
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/BranchImportPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/BranchImportPage.java
new file mode 100644
index 00000000000..09e1ff04670
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/BranchImportPage.java
@@ -0,0 +1,256 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import java.util.logging.Level;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.plugin.util.FileSelector;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class BranchImportPage extends WizardDataTransferPage {
+ public enum ImportMethod {
+ EXCEL, GENERAL, POWER_POINT, WHOLE_WORD, WORD_OUTLINE, VISIO
+ };
+
+ public static final String PAGE_NAME = "osee.define.wizardPage.artifactImportPage";
+
+ private Button chkIncludeMainLevelBranch;
+ private Button chkIncludeDescendantBranches;
+ private FileSelector fileSelector;
+ private List branchList;
+
+ private File importResource;
+ private final Branch destinationBranch;
+
+ /**
+ * Constructor used by the Skynet drag-n-drop
+ */
+ public BranchImportPage(File importResource, Branch destinationBranch) {
+ super(PAGE_NAME);
+ if (importResource == null) throw new IllegalArgumentException("importResource can not be null");
+ if (destinationBranch == null) throw new IllegalArgumentException("destinationBranch can not be null");
+
+ // Assert.isNotNull(importResource, "importResource");
+ // Assert.isNotNull(reuseRootArtifact, "reuseRootArtifact");
+
+ this.importResource = importResource;
+ this.destinationBranch = destinationBranch;
+ }
+
+ /**
+ * Constructor that is used by the Eclipse framework
+ *
+ * @param pageName
+ * @param selection
+ */
+ public BranchImportPage(IStructuredSelection selection) {
+ super(PAGE_NAME);
+
+ this.importResource = null;
+ Branch selectedBranch = null;
+ if (selection != null && selection.size() == 1) {
+ Object firstElement = selection.getFirstElement();
+ if (firstElement instanceof IAdaptable) {
+ IAdaptable adaptable = (IAdaptable) firstElement;
+ Object adapter = adaptable.getAdapter(IResource.class);
+ if (adapter instanceof IResource) {
+ importResource = ((IResource) adapter).getLocation().toFile();
+ }
+ adapter = adaptable.getAdapter(Branch.class);
+ if (adapter instanceof Branch) {
+ selectedBranch = (Branch) adapter;
+ }
+ }
+ }
+
+ this.destinationBranch = selectedBranch;
+ }
+
+ /**
+ * (non-Javadoc) Method declared on IDialogPage.
+ */
+ public void createControl(Composite parent) {
+
+ initializeDialogUnits(parent);
+
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout(1, false));
+ composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
+ composite.setFont(parent.getFont());
+
+ createSourceGroup(composite);
+
+ createOptionsGroup(composite);
+
+ restoreWidgetValues();
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+
+ setControl(composite);
+ }
+
+ /**
+ * The <code>WizardResourceImportPage</code> implementation of this <code>Listener</code> method handles all events
+ * and enablements for controls on this page. Subclasses may extend.
+ *
+ * @param event Event
+ */
+ public void handleEvent(Event event) {
+ setPageComplete(determinePageCompletion());
+
+ updateWidgetEnablements();
+ }
+
+ private void createSourceGroup(Composite parent) {
+ createImportSource(parent);
+ setPageComplete(determinePageCompletion());
+ }
+
+ private void createImportSource(Composite parent) {
+
+ fileSelector = new FileSelector(parent, SWT.NONE, "Import Source", this);
+
+ Group composite = new Group(parent, SWT.NONE);
+ GridLayout layout = new GridLayout(1, false);
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ chkIncludeMainLevelBranch = new Button(composite, SWT.CHECK);
+ chkIncludeMainLevelBranch.addListener(SWT.Selection, this);
+ chkIncludeMainLevelBranch.setText("Main Level Branch");
+ chkIncludeMainLevelBranch.setToolTipText("Import the main level branch from the import file");
+ chkIncludeMainLevelBranch.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));
+
+ chkIncludeDescendantBranches = new Button(composite, SWT.CHECK);
+ chkIncludeDescendantBranches.addListener(SWT.Selection, this);
+ chkIncludeDescendantBranches.setText("Descendant Branches");
+ chkIncludeDescendantBranches.setToolTipText("Import the desendant branches from the import file");
+ chkIncludeDescendantBranches.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));
+
+ // Setup initial selections
+ chkIncludeMainLevelBranch.setSelection(true);
+ chkIncludeDescendantBranches.setSelection(true);
+
+ if (importResource != null) {
+ fileSelector.setText(importResource.getAbsolutePath());
+ }
+ }
+
+ /*
+ * @see WizardPage#becomesVisible
+ */
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ // policy: wizards are not allowed to come up with an error message
+ if (visible) {
+ setErrorMessage(null);
+ }
+ }
+
+ @Override
+ protected boolean validateSourceGroup() {
+ return fileSelector.validate(this) && (chkIncludeDescendantBranches.getSelection() || chkIncludeMainLevelBranch.getSelection());
+ }
+
+ protected void createOptionsGroup(Composite parent) {
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setText("Destination");
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setLayout(new GridLayout(1, true));
+
+ Label label = new Label(composite, SWT.NONE);
+ label.setText("Branch:");
+ label.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+
+ branchList = new List(composite, SWT.BORDER | SWT.V_SCROLL);
+ GridData gridData = new GridData(GridData.FILL_BOTH);
+ gridData.heightHint = 300;
+ branchList.setLayoutData(gridData);
+
+ Branch defaultBranch;
+ if (destinationBranch == null) {
+ defaultBranch = BranchManager.getDefaultBranch();
+ } else {
+ defaultBranch = destinationBranch;
+ }
+
+ try {
+ int defaultBranchIndex = 0;
+ for (Branch branch : BranchManager.getNormalBranches()) {
+ branchList.add(branch.getBranchName());
+ branchList.setData(branch.getBranchName(), branch);
+ if (branch.equals(defaultBranch)) {
+ branchList.select(defaultBranchIndex);
+ } else {
+ defaultBranchIndex++;
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.WizardResourceImportPage#allowNewContainerName()
+ */
+ @Override
+ protected boolean allowNewContainerName() {
+ return true;
+ }
+
+ public File getImportFile() {
+ return fileSelector.getFile();
+ }
+
+ /**
+ * @return returns the selectedBranch
+ */
+ public Branch getSelectedBranch() {
+ String itemName = branchList.getItem(branchList.getSelectionIndex());
+ return (Branch) branchList.getData(itemName);
+ }
+
+ /**
+ * @return returns the includeMainLevelBranch
+ */
+ public boolean isIncludeMainLevelBranch() {
+ return chkIncludeMainLevelBranch.getSelection();
+ }
+
+ /**
+ * @return returns the includeDescendantBranches
+ */
+ public boolean isIncludeDescendantBranches() {
+ return chkIncludeDescendantBranches.getSelection();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ExcelArtifactExtractor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ExcelArtifactExtractor.java
new file mode 100644
index 00000000000..c34c39579e1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ExcelArtifactExtractor.java
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.DoubleKeyHashMap;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelSaxHandler;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ExcelArtifactExtractor extends AbstractArtifactExtractor implements RowProcessor {
+ private static final String description =
+ "Extract each row as an artifact - header <section #, atrribute1, atrribute2 ...>";
+ private ExcelSaxHandler excelHandler;
+ private String[] headerRow;
+ private ArtifactType primaryDescriptor;
+ private boolean importingRelations;
+ private boolean reuseArtifacts;
+ private AttributeImportType[] types;
+ private int rowCount;
+ private DoubleKeyHashMap<String, Integer, RoughArtifact> relationHelper;
+ private static final Pattern guidPattern = Pattern.compile("(\\d*);(.*)");
+ private final Matcher guidMatcher;
+
+ public static String getDescription() {
+ return description;
+ }
+
+ public ExcelArtifactExtractor(Branch branch, boolean reuseArtifacts) {
+ super(branch);
+ this.reuseArtifacts = reuseArtifacts;
+ relationHelper = new DoubleKeyHashMap<String, Integer, RoughArtifact>();
+ guidMatcher = guidPattern.matcher("");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.define.artifact.Import.RowProcessor#processHeaderRow(java.lang.String[])
+ */
+ public void processHeaderRow(String[] headerRow) {
+ rowCount++;
+ this.headerRow = headerRow.clone();
+ for (int i = 0; i < this.headerRow.length; i++) {
+ if (headerRow[i] != null && headerRow[i].trim().length() == 0) {
+ this.headerRow[i] = null;
+ }
+ }
+ types = new AttributeImportType[headerRow.length];
+ for (int i = 0; i < types.length; i++) {
+ types[i] = AttributeImportType.NONE;
+ }
+ }
+
+ /**
+ * import Artifacts
+ *
+ * @param row
+ */
+ public void processRow(String[] row) {
+ rowCount++;
+ if (importingRelations) {
+ String guida = null;
+ String guidb = null;
+ try {
+ guida = getGuid(row[1]);
+ guidb = getGuid(row[2]);
+ } catch (Exception ex) {
+ throw new IllegalStateException(ex);
+ }
+
+ if (guida == null || guidb == null) {
+ OseeLog.log(SkynetActivator.class, Level.WARNING,
+ "we failed to add a relation because at least on of the guids is null");
+ }
+ addRoughRelation(new RoughRelation(row[0], guida, guidb, row[5], Integer.parseInt(row[3]),
+ Integer.parseInt(row[4])));
+ } else {
+ RoughArtifact roughArtifact = new RoughArtifact(getBranch());
+ roughArtifact.setHeadingDescriptor(primaryDescriptor);
+ roughArtifact.setPrimaryDescriptor(primaryDescriptor);
+ for (int i = 0; i < row.length; i++) {
+ if (headerRow[i] == null) continue;
+ if (headerRow[i].equalsIgnoreCase("Outline Number")) {
+ if (row[i] == null) {
+ throw new IllegalArgumentException("Outline Number must not be blank");
+ }
+ roughArtifact.setSectionNumber(row[i]);
+ } else if (headerRow[i].equalsIgnoreCase("GUID")) {
+ roughArtifact.setGuid(row[i]);
+ } else if (headerRow[i].equalsIgnoreCase("Human Readable Id")) {
+ roughArtifact.setHumandReadableId(row[i]);
+ } else {
+ roughArtifact.addAttribute(headerRow[i], row[i], types[i]);
+ }
+ }
+ addRoughArtifact(roughArtifact);
+
+ relationHelper.put(primaryDescriptor.getName(), new Integer(rowCount), roughArtifact);
+ }
+ }
+
+ /**
+ * @param string
+ * @throws Exception
+ */
+ private String getGuid(String string) {
+ if (GUID.isValid(string)) {//it may be real guid
+ return string;
+ }
+ guidMatcher.reset(string);
+ if (guidMatcher.matches()) {
+ Integer row = Integer.parseInt(guidMatcher.group(1));
+ String sheet = guidMatcher.group(2);
+ RoughArtifact artifact = relationHelper.get(sheet, row);
+ return artifact.getGuid();
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.define.artifact.Import.ArtifactExtractor#discoverArtifactAndRelationData(java.io.File)
+ */
+ public void discoverArtifactAndRelationData(File artifactsFile) throws Exception {
+ XMLReader xmlReader = XMLReaderFactory.createXMLReader();
+ excelHandler = new ExcelSaxHandler(this, true);
+ xmlReader.setContentHandler(excelHandler);
+ xmlReader.parse(new InputSource(new InputStreamReader(new FileInputStream(artifactsFile), "UTF-8")));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.define.artifact.Import.RowProcessor#processEmptyRow()
+ */
+ public void processEmptyRow() {
+ rowCount++;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.define.artifact.Import.RowProcessor#processCommentRow(java.lang.String[])
+ */
+ public void processCommentRow(String[] row) {
+ rowCount++;
+ if (reuseArtifacts) {
+ for (int i = 0; i < row.length; i++) {
+ if (row[i] != null) {
+ try {
+ types[i] = AttributeImportType.valueOf(row[i]);
+ } catch (Throwable th) {
+ types[i] = AttributeImportType.NONE;
+ }
+ } else {
+ types[i] = AttributeImportType.NONE;
+ }
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.define.artifact.Import.RowProcessor#reachedEndOfWorksheet()
+ */
+ public void reachedEndOfWorksheet() {
+ }
+
+ /* (non-Javadoc)
+ * @see osee.define.artifact.Import.RowProcessor#detectedTotalRowCount(int)
+ */
+ public void detectedRowAndColumnCounts(int rowCount, int columnCount) {
+ }
+
+ /* (non-Javadoc)
+ * @see osee.define.artifact.Import.RowProcessor#foundStartOfWorksheet(java.lang.String)
+ */
+ public void foundStartOfWorksheet(String sheetName) {
+ rowCount = 0;
+ try {
+ if (sheetName.equals("relations")) {
+ importingRelations = true;
+ return;
+ }
+ primaryDescriptor = ArtifactTypeManager.getType(sheetName);
+ if (primaryDescriptor == null) {
+ throw new OseeArgumentException("The sheet name: " + sheetName + " is not a valid artifact type name.");
+ }
+ } catch (OseeCoreException ex) {
+ throw new IllegalArgumentException("The sheet name: " + sheetName + " is not a valid artifact type name: ", ex);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.Import.ArtifactExtractor#getFileFilter()
+ */
+ public FileFilter getFileFilter() {
+ return new FileFilter() {
+ public boolean accept(File file) {
+ return file.isDirectory() || (file.isFile() && file.getName().endsWith(".xml"));
+ }
+ };
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/IArtifactImportResolver.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/IArtifactImportResolver.java
new file mode 100644
index 00000000000..0746a85550f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/IArtifactImportResolver.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+/**
+ * Used during imports that ask for artifact re-use to resolve the Artifact to be used for a particular RoughArtifact
+ *
+ * @author Robert A. Fisher
+ */
+public interface IArtifactImportResolver {
+
+ public Artifact resolve(RoughArtifact roughArtifact) throws OseeCoreException;
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/IWordOutlineContentHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/IWordOutlineContentHandler.java
new file mode 100644
index 00000000000..47e5170d508
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/IWordOutlineContentHandler.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+
+/**
+ * @author Robert A. Fisher
+ */
+public interface IWordOutlineContentHandler extends IExecutableExtension {
+
+ /**
+ * Opportunity to setup state data prior to an outline being processed. This method may be called many times on the
+ * same object.
+ *
+ * @param extractor The extractor where RoughArtifacts that are created can be added to
+ * @param headingDescriptor The descriptor to use for headings
+ * @param mainDescriptor
+ */
+ public void init(WordOutlineExtractor extractor, ArtifactType headingDescriptor, ArtifactType mainDescriptor);
+
+ /**
+ * Opportunity to release resources. This method may be called many times on the same object.
+ */
+ public void dispose();
+
+ /**
+ * Provides a name that can be displayed in the UI for the user to make a decision on which extension point should be
+ * used.
+ */
+ public String getName();
+
+ /**
+ * Called as content is parsed out of a WordML source. A typical action to take would be to create a RoughArtifact
+ * and initialize it with data from the content, or to append the content to the last, or a prior created
+ * RoughArtifact.
+ *
+ * @param forceBody
+ * @param forcePrimaryType
+ * @param headerNumber
+ * @param listIdentifier
+ * @param paragraphStyle
+ * @param content
+ * @param isParagraph
+ */
+ public void processContent(boolean forceBody, boolean forcePrimaryType, String headerNumber, String listIdentifier, String paragraphStyle, String content, boolean isParagraph);
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaJob.java
new file mode 100644
index 00000000000..e8e0df0a8f9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaJob.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import java.io.FileInputStream;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.jdk.core.util.io.ExtensionFilter;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.importing.SkynetTypesImporter;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Robert A. Fisher
+ * @author Jeff C. Phillips
+ */
+public class ImportMetaJob extends Job {
+ private final Branch branch;
+ private final File file;
+
+ public ImportMetaJob(File file, Branch branch) {
+ super("Importing Skynet Types");
+ this.branch = branch;
+ this.file = file;
+ }
+
+ public IStatus run(IProgressMonitor monitor) {
+ try {
+
+ SkynetTypesImporter importer = new SkynetTypesImporter(branch);
+ if (file.isFile()) {
+ monitor.beginTask("Importing " + file.getName(), 2);
+ importer.extractTypesFromSheet(new FileInputStream(file));
+ monitor.worked(1);
+ } else if (file.isDirectory()) {
+ File[] children = file.listFiles(new ExtensionFilter(".xml"));
+ monitor.beginTask("Importing files", children.length + 1);
+ for (File childFile : children) {
+ if (monitor.isCanceled()) {
+ monitor.done();
+ return Status.CANCEL_STATUS;
+ }
+
+ monitor.subTask(childFile.getName());
+ importer.extractTypesFromSheet(new FileInputStream(childFile));
+ monitor.worked(1);
+ }
+ }
+ if (monitor.isCanceled()) {
+ monitor.done();
+ return Status.CANCEL_STATUS;
+ }
+
+ monitor.subTask("Finalizing");
+ importer.finish();
+ monitor.done();
+ return Status.OK_STATUS;
+ } catch (Exception ex) {
+ return new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, -1, ex.getLocalizedMessage(), ex);
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaPage.java
new file mode 100644
index 00000000000..ad3af9bdd4e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaPage.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.plugin.util.DirectoryOrFileSelector;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectComposite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+
+/**
+ * @author Robert A. Fisher
+ * @author Jeff C. Phillips
+ */
+public class ImportMetaPage extends WizardDataTransferPage {
+ public static final String PAGE_NAME = "osee.define.wizardPage.importMetaPage";
+
+ private DirectoryOrFileSelector directoryFileSelector;
+ private BranchSelectComposite branchSelectComposite;
+
+ private IResource currentResourceSelection;
+
+ /**
+ * @param name
+ * @param selection
+ */
+ public ImportMetaPage(IStructuredSelection selection) {
+ super(PAGE_NAME);
+
+ if (selection != null && selection.size() == 1) {
+ Object firstElement = selection.getFirstElement();
+ if (firstElement instanceof IAdaptable) {
+ currentResourceSelection = (IResource) ((IAdaptable) firstElement).getAdapter(IResource.class);
+ }
+ }
+ }
+
+ /**
+ * (non-Javadoc) Method declared on IDialogPage.
+ */
+ public void createControl(Composite parent) {
+
+ initializeDialogUnits(parent);
+
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout());
+ composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
+ composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ composite.setFont(parent.getFont());
+
+ createSourceGroup(composite);
+
+ restoreWidgetValues();
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+
+ setControl(composite);
+ }
+
+ /**
+ * The <code>WizardResourceImportPage</code> implementation of this <code>Listener</code> method handles all events
+ * and enablements for controls on this page. Subclasses may extend.
+ *
+ * @param event Event
+ */
+ public void handleEvent(Event event) {
+ setPageComplete(determinePageCompletion());
+ }
+
+ protected void createSourceGroup(Composite parent) {
+ directoryFileSelector = new DirectoryOrFileSelector(parent, SWT.NONE, "Import Source", this);
+
+ if (currentResourceSelection == null) {
+ // Select directory as the default
+ directoryFileSelector.setDirectorySelected(true);
+ } else {
+ directoryFileSelector.setDirectorySelected(currentResourceSelection.getType() != IResource.FILE);
+ directoryFileSelector.setText(currentResourceSelection.getLocation().toString());
+ }
+
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setText("Destination Branch");
+ GridLayout gd = new GridLayout();
+ composite.setLayout(gd);
+ composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ branchSelectComposite = new BranchSelectComposite(composite, SWT.BORDER, false);
+
+ setPageComplete(determinePageCompletion());
+ }
+
+ /*
+ * @see WizardPage#becomesVisible
+ */
+ @Override
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ // policy: wizards are not allowed to come up with an error message
+ if (visible) {
+ setErrorMessage(null);
+ }
+ }
+
+ @Override
+ protected boolean validateSourceGroup() {
+ return directoryFileSelector.validate(this);
+ }
+
+ public File getImportFile() {
+ return directoryFileSelector.getFile();
+ }
+
+ public Branch getSelectedBranch() {
+ return branchSelectComposite.getSelectedBranch();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.WizardResourceImportPage#allowNewContainerName()
+ */
+ @Override
+ protected boolean allowNewContainerName() {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaWizard.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaWizard.java
new file mode 100644
index 00000000000..82f92ae9ea9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ImportMetaWizard.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * @author Robert A. Fisher
+ * @author Jeff C. Phillips
+ */
+public class ImportMetaWizard extends Wizard implements IImportWizard {
+ private ImportMetaPage mainPage;
+ private IStructuredSelection selection;
+
+ /**
+ *
+ */
+ public ImportMetaWizard() {
+ super();
+ setWindowTitle("Skynet Types Import Wizard");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ @Override
+ public boolean performFinish() {
+ try {
+ Branch branch = mainPage.getSelectedBranch();
+ File file = mainPage.getImportFile();
+ Jobs.startJob(new ImportMetaJob(file, branch));
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), "Define Import Error", ex, true);
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench,
+ * org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ this.selection = selection;
+ }
+
+ /**
+ * (non-Javadoc) Method declared on Wizard.
+ */
+ public void addPages() {
+ mainPage = new ImportMetaPage(selection);
+ mainPage.setTitle("Import Skynet types into Define");
+ mainPage.setDescription("Import Skynet types into Define");
+
+ addPage(mainPage);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/NativeDocumentExtractor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/NativeDocumentExtractor.java
new file mode 100644
index 00000000000..683f86010fe
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/NativeDocumentExtractor.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import java.io.FileFilter;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.NativeArtifact;
+
+public class NativeDocumentExtractor extends AbstractArtifactExtractor {
+ private final static String description = "Extract the content of each native document as one artifact";
+ private final ArtifactType folderDescriptor;
+ private final ArtifactType primaryDescriptor;
+
+ public NativeDocumentExtractor(ArtifactType primaryDescriptor, Branch branch) throws OseeCoreException {
+ super(branch);
+ folderDescriptor = ArtifactTypeManager.getType("Folder");
+ this.primaryDescriptor = primaryDescriptor;
+ }
+
+ public static String getDescription() {
+ return description;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.define.artifact.Import.ArtifactExtractor#discoverArtifactAndRelationData(java.io.File)
+ */
+ public void discoverArtifactAndRelationData(File importFile) throws Exception {
+ RoughArtifact roughArtifact = new RoughArtifact(getBranch(), Lib.removeExtension(importFile.getName()));
+ roughArtifact.setHeadingDescriptor(folderDescriptor);
+ roughArtifact.setPrimaryDescriptor(primaryDescriptor);
+ addRoughArtifact(roughArtifact);
+ roughArtifact.addAttribute("Extension", Lib.getExtension(importFile.getName()));
+ roughArtifact.addFileAttribute(NativeArtifact.CONTENT_NAME, importFile);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.Import.ArtifactExtractor#getFileFilter()
+ */
+ public FileFilter getFileFilter() {
+ return new FileFilter() {
+ public boolean accept(File file) {
+ return true;
+ }
+ };
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/NewArtifactImportResolver.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/NewArtifactImportResolver.java
new file mode 100644
index 00000000000..050363bb038
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/NewArtifactImportResolver.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactProcessor;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.factory.PolymorphicArtifactFactory;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class NewArtifactImportResolver implements IArtifactImportResolver {
+ private static boolean usePolymorphicArtifactFactory = false;
+ private static PolymorphicArtifactFactory polymorphicArtifactFactory = PolymorphicArtifactFactory.getInstance();
+
+ public NewArtifactImportResolver() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.Import.IArtifactImportResolver#resolve(org.eclipse.osee.framework.ui.skynet.Import.RoughArtifact)
+ */
+ public Artifact resolve(final RoughArtifact roughArtifact) throws OseeCoreException {
+ ArtifactType descriptor = roughArtifact.getDescriptorForGetReal();
+
+ Artifact realArtifact = null;
+ ArtifactFactory factory = null;
+ if (usePolymorphicArtifactFactory) {
+ factory = polymorphicArtifactFactory;
+ } else {
+ factory = descriptor.getFactory();
+ }
+ realArtifact =
+ factory.makeNewArtifact(roughArtifact.getBranch(), descriptor, roughArtifact.getGuid(),
+ roughArtifact.getHumandReadableId(), new ArtifactProcessor() {
+ @Override
+ public void run(Artifact artifact) throws OseeCoreException {
+ roughArtifact.conferAttributesUpon(artifact);
+ }
+ });
+
+ return realArtifact;
+ }
+
+ /**
+ * @return the usePolymorphicArtifactFactory
+ */
+ public static boolean isUsePolymorphicArtifactFactory() {
+ return usePolymorphicArtifactFactory;
+ }
+
+ /**
+ * @param usePolymorphicArtifactFactory the usePolymorphicArtifactFactory to set
+ */
+ public static void setUsePolymorphicArtifactFactory(boolean usePolymorphicArtifactFactory) {
+ NewArtifactImportResolver.usePolymorphicArtifactFactory = usePolymorphicArtifactFactory;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/OutlineContentHandlerPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/OutlineContentHandlerPage.java
new file mode 100644
index 00000000000..8372c5327fc
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/OutlineContentHandlerPage.java
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class OutlineContentHandlerPage extends WizardDataTransferPage implements Listener {
+ public static final String PAGE_NAME = "osee.define.wizardPage.outlineContentHandlerPage";
+ private List handlerList;
+ private boolean hasHandlers;
+
+ /**
+ * @param descriptors Available descriptors to select from
+ */
+ public OutlineContentHandlerPage() {
+ super(PAGE_NAME);
+
+ hasHandlers = false;
+ }
+
+ /**
+ * (non-Javadoc) Method declared on IDialogPage.
+ */
+ public void createControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout(1, false));
+ composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
+ composite.setFont(parent.getFont());
+
+ createOptionsGroup(composite);
+
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+
+ setControl(composite);
+ }
+
+ /**
+ * The <code>WizardResourceImportPage</code> implementation of this <code>Listener</code> method handles all events
+ * and enablements for controls on this page. Subclasses may extend.
+ *
+ * @param event Event
+ */
+ public void handleEvent(Event event) {
+ setPageComplete(determinePageCompletion());
+
+ updateWidgetEnablements();
+ }
+
+ /*
+ * @see WizardPage#becomesVisible
+ */
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ // policy: wizards are not allowed to come up with an error message
+ if (visible) {
+ setErrorMessage(null);
+ }
+ }
+
+ protected void createOptionsGroup(Composite parent) {
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setText("Outline Handlers");
+ composite.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, true, true));
+ composite.setLayout(new GridLayout(1, true));
+
+ handlerList = new List(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE);
+ handlerList.addListener(SWT.Selection, this);
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.heightHint = 300;
+ handlerList.setLayoutData(gridData);
+
+ initList();
+ }
+
+ private void initList() {
+ java.util.List<IWordOutlineContentHandler> extensionPointHandlers = new LinkedList<IWordOutlineContentHandler>();
+
+ IExtensionPoint point =
+ Platform.getExtensionRegistry().getExtensionPoint(
+ "org.eclipse.osee.framework.ui.skynet.WordOutlineContentHandler");
+ IExtension[] extensions = point.getExtensions();
+ for (IExtension extension : extensions) {
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+ for (IConfigurationElement element : elements) {
+ if (element.getName().equals("Handler")) {
+ try {
+ extensionPointHandlers.add((IWordOutlineContentHandler) element.createExecutableExtension("class"));
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ }
+
+ hasHandlers = !extensionPointHandlers.isEmpty();
+ if (hasHandlers) {
+ Collections.sort(extensionPointHandlers, new Comparator<IWordOutlineContentHandler>() {
+
+ public int compare(IWordOutlineContentHandler o1, IWordOutlineContentHandler o2) {
+ return o1.getName().compareToIgnoreCase(o2.getName());
+ }
+ });
+
+ for (IWordOutlineContentHandler handler : extensionPointHandlers) {
+ handlerList.add(handler.getName());
+ handlerList.setData(handler.getName(), handler);
+ }
+ } else {
+ handlerList.add("<No Handlers Installed>");
+ }
+
+ handlerList.getParent().pack(true);
+ }
+
+ @Override
+ protected boolean allowNewContainerName() {
+ return false;
+ }
+
+ public IWordOutlineContentHandler getSelectedOutlineContentHandler() {
+ if (handlerList.getSelectionCount() == 1) {
+ return (IWordOutlineContentHandler) handlerList.getData(handlerList.getSelection()[0]);
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ protected boolean validateOptionsGroup() {
+ return hasHandlers && handlerList.getSelectionCount() == 1;
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ReqNumbering.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ReqNumbering.java
new file mode 100644
index 00000000000..f2fb10ba524
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/ReqNumbering.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class ReqNumbering {
+ private String number;
+ private String[] values;
+
+ public ReqNumbering(String number) {
+ this.number = number;
+ values = tokenize();
+ }
+
+ public String getNumberString() {
+ return number;
+ }
+
+ /**
+ * @param numbering
+ * @return returns whether the numbering argument is a child of this number
+ */
+ public boolean isChild(ReqNumbering numbering) {
+ String[] numberVals = numbering.values;
+ if ((values.length + 1) != numberVals.length) {
+ return false;
+ }
+
+ for (int i = 0; i < values.length; i++) {
+ if (!values[i].equals(numberVals[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private String[] tokenize() {
+ String[] returnVal = number.split("\\.");
+
+ // If the very last token is a 0, then chop it off
+ if (returnVal[returnVal.length - 1].equals("0")) {
+ String[] temp = new String[returnVal.length - 1];
+ System.arraycopy(returnVal, 0, temp, 0, temp.length);
+ returnVal = temp;
+ }
+ return returnVal;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RootAndAttributeBasedArtifactResolver.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RootAndAttributeBasedArtifactResolver.java
new file mode 100644
index 00000000000..e8803cf24b3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RootAndAttributeBasedArtifactResolver.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.HashCollection;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.Import.RoughArtifact.NameAndVal;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class RootAndAttributeBasedArtifactResolver extends NewArtifactImportResolver {
+ private final LinkedList<AttributeType> identifyingAttributeDescriptors;
+ private final Collection<String> EMPTY = new ArrayList<String>(0);
+ private final boolean createNewIfNotExist;
+
+ /**
+ * @param identifyingAttributeDescriptors
+ */
+ public RootAndAttributeBasedArtifactResolver(Collection<AttributeType> identifyingAttributeDescriptors, boolean createNewIfNotExist) {
+ if (identifyingAttributeDescriptors == null) throw new IllegalArgumentException(
+ "identifyingAttributeDescriptors can not be null");
+ if (identifyingAttributeDescriptors.isEmpty()) throw new IllegalArgumentException(
+ "identifyingAttributeDescriptors can not be empty");
+
+ this.identifyingAttributeDescriptors = new LinkedList<AttributeType>(identifyingAttributeDescriptors);
+ this.createNewIfNotExist = createNewIfNotExist;
+ }
+
+ private boolean attributeValuesMatch(RoughArtifact roughArtifact, Artifact artifact) throws OseeCoreException {
+
+ Collection<NameAndVal> roughAttributeCollection = roughArtifact.getAttributes();
+ HashCollection<String, String> roughAttributeMap = new HashCollection<String, String>();
+ for (NameAndVal roughAttribute : roughAttributeCollection) {
+ roughAttributeMap.put(roughAttribute.getName(), roughAttribute.getValue());
+ }
+
+ for (AttributeType attributeType : identifyingAttributeDescriptors) {
+ Collection<String> attributeValues = artifact.getAttributesToStringList(attributeType.getName());
+ Collection<String> roughAttributes = roughAttributeMap.getValues(attributeType.getName());
+
+ if (roughAttributes == null) {
+ roughAttributes = EMPTY;
+ }
+
+ if (attributeValues.size() == roughAttributes.size()) {
+ for (String attributeValue : attributeValues) {
+ boolean attributeEqual = false;
+ Iterator<String> iter = roughAttributes.iterator();
+
+ String normalizedAttributeValue = normalizeAttributeValue(attributeValue);
+ while (iter.hasNext()) {
+ String otherAttribute = iter.next();
+
+ if (normalizedAttributeValue.equals(normalizeAttributeValue(otherAttribute))) {
+ // Make sure we don't count this attribute more than once for equality
+ iter.remove();
+ attributeEqual = true;
+ break;
+ }
+ }
+
+ if (!attributeEqual) {
+ return false;
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+ private String normalizeAttributeValue(String value) {
+ return value.trim().replaceAll("\\.$", "").toLowerCase();
+ }
+
+ public Artifact resolve(RoughArtifact roughArtifact) throws OseeCoreException {
+ try {
+ Artifact realArtifact = null;
+ RoughArtifact roughParent = roughArtifact.getRoughParent();
+
+ if (roughParent != null) {
+ List<Artifact> siblings = roughParent.getAssociatedArtifact().getChildren();
+ Collection<Artifact> candidates = new LinkedList<Artifact>();
+
+ for (Artifact artifact : siblings) {
+ if (attributeValuesMatch(roughArtifact, artifact)) {
+ candidates.add(artifact);
+ }
+ }
+
+ if (candidates.size() == 1) {
+ realArtifact = candidates.iterator().next();
+ roughArtifact.updateValues(realArtifact);
+ } else {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO,
+ "Found " + candidates.size() + " candidates during reuse import for " + roughArtifact.getName());
+ if (createNewIfNotExist) {
+ realArtifact = super.resolve(roughArtifact);
+ }
+ }
+ }
+
+ return realArtifact;
+ } catch (Exception ex) {
+ throw new OseeCoreException(ex);
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RoughArtifact.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RoughArtifact.java
new file mode 100644
index 00000000000..028d6643cf5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RoughArtifact.java
@@ -0,0 +1,292 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map.Entry;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+
+/**
+ * @author Robert A. Fisher
+ * @author Ryan D. Brooks
+ */
+public class RoughArtifact {
+ private Artifact realArtifact;
+ private RoughArtifact roughParent;
+ private ReqNumbering number;
+ private List<NameAndVal> attributes;
+ private Collection<RoughArtifact> children;
+ private String guid;
+ private String humandReadableId;
+ private ArtifactType headingDescriptor;
+ private ArtifactType primaryDescriptor;
+ private boolean forcePrimaryType;
+ private HashMap<String, File> fileAttributes;
+ private final Branch branch;
+
+ public RoughArtifact(Branch branch) {
+ attributes = new ArrayList<NameAndVal>();
+ children = new ArrayList<RoughArtifact>();
+ forcePrimaryType = false;
+ this.branch = branch;
+ }
+
+ public RoughArtifact(Artifact associatedArtifact) {
+ this(associatedArtifact.getBranch());
+ realArtifact = associatedArtifact;
+ }
+
+ public RoughArtifact(Branch branch, String name) {
+ this(branch);
+ addAttribute("Name", name);
+ }
+
+ public boolean hasHierarchicalRelation() {
+ return number != null;
+ }
+
+ public void addChild(RoughArtifact child) {
+ child.roughParent = this;
+ children.add(child);
+ }
+
+ public boolean hasParent() {
+ return roughParent != null;
+ }
+
+ /**
+ * @return the roughParent
+ */
+ public RoughArtifact getRoughParent() {
+ return roughParent;
+ }
+
+ public Artifact getAssociatedArtifact() {
+ return realArtifact;
+ }
+
+ public String toString() {
+ return getName();
+ }
+
+ public void addFileAttribute(String name, File file) {
+ if (fileAttributes == null) {
+ fileAttributes = new HashMap<String, File>(2, 1);
+ }
+ fileAttributes.put(name, file);
+ }
+
+ public void addAttribute(String name, String value) {
+ attributes.add(new NameAndVal(name, value));
+ }
+
+ public void addAttribute(String name, String value, AttributeImportType type) {
+ attributes.add(new NameAndVal(name, value, type));
+ }
+
+ public boolean isChild(RoughArtifact otherArtifact) {
+ return number.isChild(otherArtifact.number);
+ }
+
+ public void conferAttributesUpon(Artifact artifact) throws OseeCoreException {
+ try {
+ for (NameAndVal roughtAttribute : attributes) {
+ if (roughtAttribute.getValue() != null) {
+ artifact.addAttribute(roughtAttribute.getName(), roughtAttribute.getValue());
+ }
+ }
+ setFileAttributes(artifact);
+ } catch (Exception ex) {
+ throw new OseeCoreException(ex);
+ }
+ }
+
+ private void setFileAttributes(Artifact artifact) throws OseeCoreException, FileNotFoundException {
+ if (fileAttributes != null) {
+ for (Entry<String, File> entry : fileAttributes.entrySet()) {
+ artifact.setSoleAttributeFromStream(entry.getKey(), new FileInputStream(entry.getValue()));
+ }
+ }
+ }
+
+ /**
+ * @param number The number to set.
+ */
+ public void setSectionNumber(String number) {
+ this.number = new ReqNumbering(number);
+ }
+
+ public class NameAndVal {
+ private String name;
+ private String value;
+ private AttributeImportType type;
+
+ /**
+ * @param name
+ * @param value
+ */
+ public NameAndVal(String name, String value, AttributeImportType type) {
+ super();
+ this.name = name;
+ this.value = value;
+ this.type = type;
+ }
+
+ public NameAndVal(String name, String value) {
+ this(name, value, AttributeImportType.NONE);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public AttributeImportType getType() {
+ return type;
+ }
+
+ public String toString() {
+ return name + ": " + value;
+ }
+ }
+
+ public Collection<NameAndVal> getAttributes() {
+ return attributes;
+ }
+
+ /**
+ * @return Returns the children.
+ */
+ public Collection<RoughArtifact> getChildren() {
+ return children;
+ }
+
+ public Artifact getReal(SkynetTransaction transaction, IProgressMonitor monitor, IArtifactImportResolver artifactResolver) throws OseeCoreException {
+ if (realArtifact != null) {
+ return realArtifact;
+ }
+
+ realArtifact = artifactResolver.resolve(this);
+
+ if (monitor != null) {
+ monitor.subTask(getName());
+ monitor.worked(1);
+ }
+
+ for (RoughArtifact roughArtifact : children) {
+ Artifact tempArtifact = roughArtifact.getReal(transaction, monitor, artifactResolver);
+ if (realArtifact != null && tempArtifact != null) {
+ if (tempArtifact.getParent() == null) {
+ realArtifact.addChild(tempArtifact);
+ } else if (tempArtifact.getParent() != realArtifact) {
+ throw new IllegalStateException(
+ "Artifact already has a parent that is not inline with the import parent");
+ }
+ }
+ }
+
+ if (realArtifact != null) {
+ realArtifact.persistAttributesAndRelations(transaction);
+ }
+ return realArtifact;
+ }
+
+ public ArtifactType getDescriptorForGetReal() {
+ return children.isEmpty() || forcePrimaryType ? primaryDescriptor : headingDescriptor;
+ }
+
+ public void updateValues(Artifact artifact) throws OseeCoreException, FileNotFoundException {
+ for (NameAndVal value : attributes) {
+ artifact.setSoleAttributeFromString(value.getName(), value.getValue());
+ }
+
+ setFileAttributes(artifact);
+ }
+
+ /**
+ * @param guid The guid to set.
+ */
+ public void setGuid(String guid) {
+ this.guid = guid;
+ }
+
+ /**
+ * @return Returns the guid.
+ */
+ public String getGuid() {
+ return guid;
+ }
+
+ /**
+ * @param humandReadableId The humandReadableId to set.
+ */
+ public void setHumandReadableId(String humandReadableId) {
+ this.humandReadableId = humandReadableId;
+ }
+
+ public String getHumandReadableId() {
+ return humandReadableId;
+ }
+
+ /**
+ * @param headingDescriptor The headingDescriptor to set.
+ */
+ public void setHeadingDescriptor(ArtifactType headingDescriptor) {
+ this.headingDescriptor = headingDescriptor;
+ }
+
+ /**
+ * @param primaryDescriptor The leafDescriptor to set.
+ */
+ public void setPrimaryDescriptor(ArtifactType primaryDescriptor) {
+ this.primaryDescriptor = primaryDescriptor;
+ }
+
+ /**
+ * @param forcePrimaryType The forcePrimaryType to set.
+ */
+ public void setForcePrimaryType(boolean forcePrimaryType) {
+ this.forcePrimaryType = forcePrimaryType;
+ }
+
+ public String getName() {
+ if (realArtifact != null) {
+ return realArtifact.getDescriptiveName();
+ }
+ for (NameAndVal attr : attributes) {
+ if (attr.getName().equals("Name")) {
+ return attr.getValue();
+ }
+ }
+ return "";
+ }
+
+ /**
+ * @return the branch
+ */
+ public Branch getBranch() {
+ return branch;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RoughRelation.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RoughRelation.java
new file mode 100644
index 00000000000..3ca2596acf5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/RoughRelation.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.relation.RelationManager;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class RoughRelation {
+ private String relTypeName;
+ private String aGuid;
+ private String bGuid;
+ private String rationale;
+ private int aOrderValue;
+ private int bOrderValue;
+
+ public RoughRelation(String relTypeName, String aGuid, String bGuid, String rationale, int aOrderValue, int bOrderValue) {
+ this.relTypeName = relTypeName;
+ this.aGuid = aGuid;
+ this.bGuid = bGuid;
+ this.rationale = rationale;
+ this.aOrderValue = aOrderValue;
+ this.bOrderValue = bOrderValue;
+ }
+
+ public void makeReal(SkynetTransaction transaction, IProgressMonitor monitor) throws OseeCoreException {
+ RelationType relationType = RelationTypeManager.getType(relTypeName);
+ Artifact aArt = ArtifactQuery.getArtifactFromId(aGuid, transaction.getBranch());
+ Artifact bArt = ArtifactQuery.getArtifactFromId(bGuid, transaction.getBranch());
+
+ if (aArt == null || bArt == null) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING,
+ "The relation of type " + relTypeName + " could not be created.");
+ if (aArt == null) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, "The artifact with guid: " + aGuid + " does not exist.");
+ }
+ if (bArt == null) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, "The artifact with guid: " + bGuid + " does not exist.");
+ }
+ } else {
+ try {
+ monitor.subTask(aArt.getDescriptiveName() + " <--> " + bArt.getDescriptiveName());
+ monitor.worked(1);
+ RelationManager.addRelation(relationType, aArt, bArt, rationale);
+ aArt.persistRelations(transaction);
+ } catch (IllegalArgumentException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, ex.getLocalizedMessage());
+ }
+ }
+ }
+
+ /**
+ * @return Returns the relTypeName.
+ */
+ public String getRelTypeName() {
+ return relTypeName;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WholeWordDocumentExtractor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WholeWordDocumentExtractor.java
new file mode 100644
index 00000000000..8ef4cac0669
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WholeWordDocumentExtractor.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.File;
+import java.io.FileFilter;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+
+public class WholeWordDocumentExtractor extends WordExtractor {
+ private static final String description = "Extract all the content of each Word XML document as one artifact";
+ private final ArtifactType primaryDescriptor;
+
+ public WholeWordDocumentExtractor(ArtifactType primaryDescriptor, Branch branch) {
+ super(branch);
+ this.primaryDescriptor = primaryDescriptor;
+ }
+
+ public static String getDescription() {
+ return description;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.define.artifact.Import.ArtifactExtractor#discoverArtifactAndRelationData(java.io.File)
+ */
+ public void discoverArtifactAndRelationData(File importFile) throws Exception {
+ if (importFile == null) throw new IllegalArgumentException("importFile can not be null");
+ RoughArtifact roughArtifact = new RoughArtifact(getBranch(), Lib.removeExtension(importFile.getName()));
+ roughArtifact.setPrimaryDescriptor(primaryDescriptor);
+ addRoughArtifact(roughArtifact);
+ roughArtifact.addFileAttribute(WordAttribute.WHOLE_WORD_CONTENT, importFile);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.Import.ArtifactExtractor#getFileFilter()
+ */
+ public FileFilter getFileFilter() {
+ return new FileFilter() {
+ public boolean accept(File file) {
+ return file.isDirectory() || (file.isFile() && file.getName().endsWith(".xml"));
+ }
+ };
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordExtractor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordExtractor.java
new file mode 100644
index 00000000000..95cb58656d2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordExtractor.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public abstract class WordExtractor extends AbstractArtifactExtractor {
+
+ protected static final String BODY_START = "<w:body>";
+ protected static final String BODY_END = "</w:body>";
+
+ /**
+ * @param branch
+ */
+ public WordExtractor(Branch branch) {
+ super(branch);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordOutlineContentHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordOutlineContentHandler.java
new file mode 100644
index 00000000000..940e24bf259
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordOutlineContentHandler.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+
+/**
+ * @author Robert A. Fisher
+ */
+public abstract class WordOutlineContentHandler implements IWordOutlineContentHandler {
+ protected WordOutlineExtractor extractor;
+ protected ArtifactType headingDescriptor;
+ protected ArtifactType mainDescriptor;
+ private String name;
+
+ public WordOutlineContentHandler() {
+ this.extractor = null;
+ this.headingDescriptor = null;
+ this.mainDescriptor = null;
+ this.name = null;
+ }
+
+ /**
+ * Returns the name that was in the extension point. Clients may re-implement this method.
+ */
+ public String getName() {
+ if (name == null) {
+ throw new IllegalStateException("Not yet initialized");
+ }
+ return name;
+ }
+
+ /**
+ * Setup the name from the extension point.
+ */
+ public final void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
+ name = config.getAttribute("name");
+ if (name == null || name.equals("")) {
+ name = "<no name>";
+ }
+ }
+
+ /**
+ * Get rid of references setup in init. Subclasses should extend this method if any other resources should be
+ * released.
+ */
+ public void dispose() {
+ extractor = null;
+ headingDescriptor = null;
+ mainDescriptor = null;
+ }
+
+ /**
+ * Save off references. Subclasses should extend this method if anyother resources need to be setup.
+ */
+ public void init(WordOutlineExtractor extractor, ArtifactType headingDescriptor, ArtifactType mainDescriptor) {
+ this.extractor = extractor;
+ this.headingDescriptor = headingDescriptor;
+ this.mainDescriptor = mainDescriptor;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordOutlineExtractor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordOutlineExtractor.java
new file mode 100644
index 00000000000..79c6b293f2f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/Import/WordOutlineExtractor.java
@@ -0,0 +1,276 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.Import;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.Iterator;
+import java.util.Stack;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Readers;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.word.WordUtil;
+
+/**
+ * @author Andrew M. Finkbeiner
+ * @author Robert A. Fisher
+ */
+public class WordOutlineExtractor extends WordExtractor {
+ private static final String description =
+ "Extract data from a Word XML file with an outline, making an artifact for each outline numbered section";
+ private static final String PARAGRAPH_TAG_WITH_ATTRS = "<w:p ";
+ private static final String PARAGRAPH_TAG_EMPTY = "<w:p/>";
+ private static final String PARAGRAPH_TAG = "<w:p>";
+ private static final String TABLE_TAG_WITH_ATTRS = "<w:tbl ";
+ private static final String TABLE_TAG_EMPTY = "<w:tbl/>";
+ private static final String TABLE_TAG = "<w:tbl>";
+ private static final CharSequence[] BODY_TAGS =
+ new CharSequence[] {PARAGRAPH_TAG, PARAGRAPH_TAG_EMPTY, PARAGRAPH_TAG_WITH_ATTRS, TABLE_TAG, TABLE_TAG_EMPTY,
+ TABLE_TAG_WITH_ATTRS, BODY_END};
+
+ // A regex for reading xml elements. Assumes that an element never has a descendant with the same name as itself
+ private static final Pattern internalAttributeElementsPattern =
+ Pattern.compile("<((\\w+:)?(\\w+))(\\s+.*?)((/>)|(>(.*?)</\\1>))",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern proofErrTagKiller = Pattern.compile("</?w:proofErr.*?/?>");
+ private static final int NAMESPACE_GROUP = 2;
+ private static final int ELEMENT_NAME_GROUP = 3;
+ private static final int ATTRIBUTE_BLOCK_GROUP = 4;
+ private static final int CONTENT_GROUP = 8;
+
+ private Matcher reqNumberMatcher;
+ private Matcher reqListMatcher;
+ private Stack<String> currentListStack;
+ private Stack<String> clonedCurrentListStack;
+ private int lastDepthNumber;
+ private String headerNumber;
+ private String listIdentifier;
+ private final ArtifactType headingDescriptor;
+ private final ArtifactType mainDescriptor;
+ private final int maxExtractionDepth;
+ private boolean forceBody;
+ private boolean forcePrimaryType;
+ private String paragraphStyle;
+
+ private final IWordOutlineContentHandler handler;
+
+ public WordOutlineExtractor(ArtifactType mainDescriptor, Branch branch, int maxExtractionDepth, IWordOutlineContentHandler handler) throws OseeCoreException {
+
+ super(branch);
+
+ if (mainDescriptor == null) throw new IllegalArgumentException("mainDescriptor can not be null");
+ if (branch == null) throw new IllegalArgumentException("branch can not be null");
+ if (handler == null) throw new IllegalArgumentException("handler can not be null");
+
+ this.handler = handler;
+
+ this.headerNumber = "";
+ this.listIdentifier = "";
+ this.reqNumberMatcher = Pattern.compile("(\\d+\\.)*(\\d+\\.?)\\s*").matcher("");
+ this.reqListMatcher = Pattern.compile("\\w+\\)", Pattern.CASE_INSENSITIVE).matcher("");
+
+ this.currentListStack = new Stack<String>();
+ this.clonedCurrentListStack = new Stack<String>();
+ this.headingDescriptor = ArtifactTypeManager.getType("Heading");
+ this.mainDescriptor = mainDescriptor;
+ this.maxExtractionDepth = maxExtractionDepth;
+ }
+
+ public static String getDescription() {
+ return description;
+ }
+
+ public void discoverArtifactAndRelationData(File importFile) throws Exception {
+
+ Reader reader = new BufferedReader(new InputStreamReader(new FileInputStream(importFile), "UTF-8"));
+
+ if (Readers.forward(reader, BODY_START) == null) {
+ throwFileFormatError(importFile, "no start of body tag");
+ }
+
+ handler.init(this, headingDescriptor, mainDescriptor);
+
+ try {
+ CharSequence element;
+ StringBuilder content = new StringBuilder(2000);
+
+ // Process the next available body tag
+ while ((element = Readers.forward(reader, BODY_TAGS)) != null) {
+
+ if (element == BODY_END) {
+ return;
+ } else {
+ // Get the next parsable chunk from the stream. This will throttle the amount of the file read in to
+ // memory at one time to the smallest area that will provide all the necessary context.
+ content.setLength(0);
+ content.append(element);
+
+ boolean emptyTagWithAttrs = false;
+ // If the tag had attributes, check that it isn't empty
+ if (element == PARAGRAPH_TAG_WITH_ATTRS || element == TABLE_TAG_WITH_ATTRS) {
+ if (Readers.forward(reader, (Appendable) content, ">") == null) {
+ throwFileFormatError(importFile, "did not find expected end of tag");
+ }
+ emptyTagWithAttrs = content.toString().endsWith("/>");
+ }
+
+ if (element == PARAGRAPH_TAG || (!emptyTagWithAttrs && element == PARAGRAPH_TAG_WITH_ATTRS)) {
+ Readers.xmlForward(reader, (Appendable) content, "w:p");
+ } else if (element == TABLE_TAG || (!emptyTagWithAttrs && element == TABLE_TAG_WITH_ATTRS)) {
+ Readers.xmlForward(reader, (Appendable) content, "w:tbl");
+ } else if (element != PARAGRAPH_TAG_WITH_ATTRS && element != TABLE_TAG_WITH_ATTRS && element != PARAGRAPH_TAG_EMPTY && element != TABLE_TAG_EMPTY) {
+ throw new IllegalStateException("Unexpected element returned");
+ }
+
+ // Word places proofErr tags in manners discontigous with the standard XML tree so only some
+ // of them get picked up causing a misbalance from what Word expects, and effectively corrupting
+ // the content as far as Word is concerned, so just remove all of them and let word recompute
+ // them if it is really that concerned about our grammar
+ content = new StringBuilder(proofErrTagKiller.matcher(content).replaceAll(""));
+
+ // forceBody doesn't reset per paragraph
+ forcePrimaryType = false;
+ headerNumber = "";
+ listIdentifier = "";
+ paragraphStyle = null;
+ parseContentDetails(content, new Stack<String>());
+ handler.processContent(forceBody, forcePrimaryType, headerNumber, listIdentifier, paragraphStyle,
+ content.toString(), element == PARAGRAPH_TAG);
+ }
+ }
+ } finally {
+ handler.dispose();
+ }
+
+ throwFileFormatError(importFile, "did not find expected end of body tag");
+ }
+
+ private void parseContentDetails(CharSequence content, Stack<String> parentElementNames) {
+
+ Matcher matcher = internalAttributeElementsPattern.matcher(content);
+
+ String elementNamespace;
+ String elementName;
+ String elementAttributes;
+ String elementContent;
+ while (matcher.find()) {
+ elementName = matcher.group(ELEMENT_NAME_GROUP);
+ elementNamespace = matcher.group(NAMESPACE_GROUP);
+ elementAttributes = matcher.group(ATTRIBUTE_BLOCK_GROUP) == null ? "" : matcher.group(ATTRIBUTE_BLOCK_GROUP);
+ elementContent = matcher.group(CONTENT_GROUP) == null ? "" : matcher.group(CONTENT_GROUP);
+
+ if (elementName.equals("forceBodyOn")) {
+ forceBody = true;
+ } else if (elementName.equals("forceBodyOff")) {
+ forceBody = false;
+ } else if (elementName.equals("pStyle")) {
+ paragraphStyle = getAttributeValue("w:val", elementAttributes);
+ } else if (elementName.equals("forcePrimaryType")) {
+ forcePrimaryType = true;
+ } else if (elementNamespace.startsWith("w") && elementName.equals("t")) {
+ String numberCandidate = getAttributeValue("wx:val", elementAttributes);
+
+ reqNumberMatcher.reset(numberCandidate);
+ reqListMatcher.reset(numberCandidate);
+
+ if (reqNumberMatcher.matches()) {
+ if (WordUtil.isHeadingStyle(paragraphStyle)) {
+ headerNumber = numberCandidate;
+ if (headerNumber.endsWith(".0")) {
+ headerNumber = headerNumber.substring(0, headerNumber.length() - 2);
+ }
+ }
+ } else if (reqListMatcher.matches()) {
+ if (isListStyle(parentElementNames)) {
+ listIdentifier =
+ processListId(Integer.parseInt(getAttributeValue("w:val", elementAttributes)), numberCandidate);
+ }
+ }
+ }
+
+ parentElementNames.push(elementName);
+ parseContentDetails(elementContent, parentElementNames);
+ parentElementNames.pop();
+ }
+ }
+
+ private static final String getAttributeValue(String attributeName, String attributeStorage) {
+
+ attributeName += "=\"";
+
+ int index = attributeStorage.indexOf(attributeName);
+ if (index == -1) {
+ return "";
+ } else {
+ int startIndex = index + attributeName.length();
+ return attributeStorage.substring(startIndex, attributeStorage.indexOf('"', startIndex + 1)).trim();
+ }
+ }
+
+ private static final void throwFileFormatError(File file, String msg) {
+ throw new IllegalArgumentException("File " + file.getName() + " not of expected format: " + msg);
+ }
+
+ private boolean isListStyle(Stack<String> parentElementNames) {
+ Iterator<String> iter = parentElementNames.iterator();
+
+ return iter.hasNext() && iter.next().equals("ilvl") && iter.hasNext() && iter.next().equals("listPr");
+ }
+
+ @SuppressWarnings("unchecked")
+ private String processListId(int currentDepthNumber, String numberCandidate) throws IllegalArgumentException {
+ String id = "";
+
+ if (currentDepthNumber == 0) {
+ currentListStack.clear();
+
+ currentListStack.push(numberCandidate);
+ clonedCurrentListStack = (Stack) currentListStack.clone();
+ lastDepthNumber = currentDepthNumber;
+ } else {
+
+ for (int i = currentDepthNumber; i <= lastDepthNumber; i++) {
+ currentListStack.pop();
+ }
+
+ lastDepthNumber = currentDepthNumber;
+ currentListStack.push(numberCandidate);
+ clonedCurrentListStack = (Stack) currentListStack.clone();
+ }
+ while (!clonedCurrentListStack.empty()) {
+ id = clonedCurrentListStack.pop() + id;
+ }
+
+ if (currentDepthNumber > maxExtractionDepth) {
+ return null;
+ }
+ return id.replaceAll("\\)", ".");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.Import.ArtifactExtractor#getFileFilter()
+ */
+ public FileFilter getFileFilter() {
+ return new FileFilter() {
+ public boolean accept(File file) {
+ return file.isDirectory() || (file.isFile() && file.getName().endsWith(".xml"));
+ }
+ };
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/LabelSorter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/LabelSorter.java
new file mode 100644
index 00000000000..76de3d46948
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/LabelSorter.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import org.eclipse.jface.viewers.ContentViewer;
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+public class LabelSorter extends ViewerSorter {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ViewerSorter#category(java.lang.Object)
+ */
+ @Override
+ public int category(Object element) {
+ return super.category(element);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ViewerSorter#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+
+ Artifact art1 = null;
+ Artifact art2 = null;
+
+ if (e1 instanceof Artifact) art1 = (Artifact) e1;
+ if (e2 instanceof Artifact) art2 = (Artifact) e2;
+
+ boolean e1IsHeading = (art1 != null && art1.getArtifactTypeName().equals("Heading"));
+ boolean e2IsHeading = (art2 != null && art2.getArtifactTypeName().equals("Heading"));
+ boolean e1IsNarrative =
+ (art1 != null && !e1IsHeading && art1.getArtifactTypeName().equals("Narrative"));
+ boolean e2IsNarrative =
+ (art2 != null && !e2IsHeading && art2.getArtifactTypeName().equals("Narrative"));
+
+ if (e1IsHeading ^ e2IsHeading) return (e1IsHeading ? -1 : 1);
+
+ if (e1IsNarrative ^ e2IsNarrative) return (e1IsNarrative ? -1 : 1);
+
+ int cat1 = category(e1);
+ int cat2 = category(e2);
+
+ if (cat1 != cat2) return cat1 - cat2;
+
+ String name1;
+ String name2;
+
+ if (viewer == null || !(viewer instanceof ContentViewer)) {
+ name1 = e1.toString();
+ name2 = e2.toString();
+ } else {
+ IBaseLabelProvider prov = ((ContentViewer) viewer).getLabelProvider();
+ if (prov instanceof ILabelProvider) {
+ ILabelProvider lprov = (ILabelProvider) prov;
+ name1 = lprov.getText(e1);
+ name2 = lprov.getText(e2);
+ } else {
+ name1 = e1.toString();
+ name2 = e2.toString();
+ }
+ }
+ if (name1 == null) name1 = "";
+ if (name2 == null) name2 = "";
+ return getComparator().compare(name1, name2);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ViewerSorter#isSorterProperty(java.lang.Object, java.lang.String)
+ */
+ @Override
+ public boolean isSorterProperty(Object element, String property) {
+ return super.isSorterProperty(element, property);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ViewerSorter#sort(org.eclipse.jface.viewers.Viewer, java.lang.Object[])
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void sort(final Viewer viewer, Object[] elements) {
+ Arrays.sort(elements, new Comparator() {
+ public int compare(Object a, Object b) {
+ return LabelSorter.this.compare(viewer, a, b);
+ }
+ });
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ModifyAttributesListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ModifyAttributesListener.java
new file mode 100644
index 00000000000..42660e459f9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ModifyAttributesListener.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class ModifyAttributesListener {
+
+ public abstract void handleEvent();
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeContributionItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeContributionItem.java
new file mode 100644
index 00000000000..750e2ed5b1a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeContributionItem.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.search.AbstractArtifactSearchViewPage;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.part.MultiPageEditorPart;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.texteditor.StatusLineContributionItem;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public abstract class OseeContributionItem extends StatusLineContributionItem {
+
+ protected OseeContributionItem(String id) {
+ this(id, 4);
+ }
+
+ protected OseeContributionItem(String id, int width) {
+ super(id, true, width);
+ }
+
+ protected abstract String getEnabledToolTip();
+
+ protected abstract String getDisabledToolTip();
+
+ protected abstract Image getEnabledImage();
+
+ protected abstract Image getDisabledImage();
+
+ protected void updateStatus(final boolean isActive) {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ Image image = isActive ? getEnabledImage() : getDisabledImage();
+ String toolTip = isActive ? getEnabledToolTip() : getDisabledToolTip();
+
+ if (image != null) {
+ setImage(image);
+ }
+ if (toolTip != null) {
+ setToolTipText(toolTip);
+ }
+ }
+ });
+ }
+
+ public static void addTo(IStatusLineManager manager) {
+ DefaultBranchContributionItem.addTo(manager);
+ if (OseeAts.isAtsAdmin()) {
+ AdminContributionItem.addTo(manager);
+ }
+ SkynetServiceContributionItem.addTo(manager);
+ OseeServicesStatusContributionItem.addTo(manager);
+ SessionContributionItem.addTo(manager);
+ }
+
+ public static void addTo(AbstractArtifactSearchViewPage view, boolean update) {
+ addTo(view.getSite().getActionBars().getStatusLineManager());
+
+ if (update) {
+ view.getSite().getActionBars().updateActionBars();
+ }
+ }
+
+ public static void addTo(ViewPart view, boolean update) {
+ addTo(view.getViewSite().getActionBars().getStatusLineManager());
+
+ if (update) {
+ view.getViewSite().getActionBars().updateActionBars();
+ }
+ }
+
+ public static void addTo(MultiPageEditorPart editorPart, boolean update) {
+ addTo(editorPart.getEditorSite().getActionBars().getStatusLineManager());
+ if (update) {
+ editorPart.getEditorSite().getActionBars().updateActionBars();
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseePreferencePage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseePreferencePage.java
new file mode 100644
index 00000000000..32fe7a49d66
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseePreferencePage.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.HashMap;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.osee.framework.core.client.CoreClientActivator;
+import org.eclipse.osee.framework.core.client.CorePreferences;
+import org.eclipse.osee.framework.jdk.core.util.Network;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.skynet.core.preferences.PreferenceConstants;
+import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class represents a preference page that is contributed to the Preferences dialog. By subclassing
+ * <samp>FieldEditorPreferencePage</samp>, we can use the field support built into JFace that allows us to create a page
+ * that is small and knows how to save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They are stored in the preference store that belongs to the main
+ * plug-in class. That way, preferences can be accessed directly via the preference store.
+ */
+
+public class OseePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+ private HashMap<InetAddress, Button> networkButtons;
+ private Button wordWrapChkBox;
+ private OseeUiActivator plugin = SkynetActivator.getInstance();
+
+ private void createNetworkAdapterArea(Composite parent) {
+ addDialogControls(parent);
+ setupWordWrapChkButton();
+ }
+
+ private void addDialogControls(Composite parent) {
+ Group group = new Group(parent, SWT.NONE);
+ group.setLayout(new GridLayout(2, false));
+
+ GridData gd = new GridData();
+ gd.verticalAlignment = GridData.FILL;
+ gd.horizontalAlignment = GridData.FILL;
+ gd.grabExcessHorizontalSpace = true;
+ group.setLayoutData(gd);
+
+ wordWrapChkBox = new Button(group, SWT.CHECK);
+ wordWrapChkBox.setText("Use alternate hyperlink drag method");
+
+ // setup the default network selection
+ Group networkAdapter = new Group(parent, SWT.NONE);
+ networkAdapter.setLayout(new GridLayout());
+ networkAdapter.setText("Select a Default Network Adaptor");
+
+ gd = new GridData();
+ gd.verticalAlignment = GridData.FILL;
+ gd.horizontalAlignment = GridData.FILL;
+ gd.grabExcessHorizontalSpace = true;
+ networkAdapter.setLayoutData(gd);
+
+ setupInetAddressButtons(networkAdapter);
+ }
+
+ private void setupInetAddressButtons(Group group) {
+ InetAddress[] addrs = null;
+ try {
+ addrs = Network.getLocalNetworkAdapters();
+ } catch (UnknownHostException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ networkButtons = new HashMap<InetAddress, Button>();
+
+ Button defaultButton = new Button(group, SWT.RADIO);
+ defaultButton.setText("Default");
+ for (int i = 0; addrs != null && i < addrs.length; i++) {
+ Button button = new Button(group, SWT.RADIO);
+ button.setText(addrs[i].getHostAddress() + " " + addrs[i].getHostName());
+ networkButtons.put(addrs[i], button);
+ }
+
+ Preferences prefStore = CoreClientActivator.getInstance().getPluginPreferences();
+ String inetaddress = prefStore.getString(CorePreferences.INETADDRESS_KEY);
+
+ boolean addressSelected = false;
+ if (inetaddress != null && !inetaddress.equals("")) {
+ for (InetAddress address : networkButtons.keySet()) {
+ if (address.getHostAddress().equals(inetaddress)) {
+ networkButtons.get(address).setSelection(true);
+ addressSelected = true;
+ }
+ }
+ }
+
+ if (!addressSelected) {
+ defaultButton.setSelection(true);
+ }
+ }
+
+ private void setupWordWrapChkButton() {
+ IPreferenceStore prefStore = plugin.getPreferenceStore();
+ wordWrapChkBox.setSelection(prefStore.getString(PreferenceConstants.WORDWRAP_KEY) != null && prefStore.getString(
+ PreferenceConstants.WORDWRAP_KEY).equals(IPreferenceStore.TRUE));
+ }
+
+ private void createBlankArea(Composite parent, int height, boolean allVertical) {
+ Composite blank = new Composite(parent, SWT.NONE);
+ GridLayout gridLayout = new GridLayout();
+ GridData gd = new GridData();
+ gd.minimumHeight = height;
+ gd.grabExcessHorizontalSpace = true;
+ gd.grabExcessVerticalSpace = allVertical;
+ blank.setLayout(gridLayout);
+ blank.setLayoutData(gd);
+ }
+
+ protected Control createContents(Composite parent) {
+ createNetworkAdapterArea(parent);
+ createBlankArea(parent, 300, true);
+
+ return parent;
+ }
+
+ /**
+ * initialize the preference store to use with the workbench
+ */
+ public void init(IWorkbench workbench) {
+ // Initialize the preference store we wish to use
+ setPreferenceStore(plugin.getPreferenceStore());
+ }
+
+ protected void performDefaults() {
+ }
+
+ protected void performApply() {
+ performOk();
+ }
+
+ public boolean performOk() {
+ Preferences prefStore = CoreClientActivator.getInstance().getPluginPreferences();
+ prefStore.setValue(CorePreferences.INETADDRESS_KEY, "");
+ for (InetAddress address : networkButtons.keySet()) {
+ if (networkButtons.get(address).getSelection()) {
+ prefStore.setValue(CorePreferences.INETADDRESS_KEY, address.getHostAddress());
+ break;
+ }
+ }
+
+ SkynetActivator.getInstance().getPreferenceStore().putValue(PreferenceConstants.WORDWRAP_KEY,
+ wordWrapChkBox.getSelection() ? IPreferenceStore.TRUE : IPreferenceStore.FALSE);
+
+ return super.performOk();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeServicesStatusContributionItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeServicesStatusContributionItem.java
new file mode 100644
index 00000000000..b0215955e21
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeServicesStatusContributionItem.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.osee.framework.logging.IHealthStatus;
+import org.eclipse.osee.framework.logging.IStatusListener;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.OverlayImage;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class OseeServicesStatusContributionItem extends OseeContributionItem implements IStatusListener {
+ private static final String ID = "osee.service.status";
+ private static final Image ENABLED_IMAGE = SkynetGuiPlugin.getInstance().getImage("appserver.gif");
+ private static final Image DISABLED_IMAGE =
+ new OverlayImage(ENABLED_IMAGE, SkynetGuiPlugin.getInstance().getImageDescriptor("red_slash.gif")).createImage();
+
+ private static String errorMessage;
+ private static String okMessage;
+
+ private OseeServicesStatusContributionItem() {
+ super(ID);
+ errorMessage = null;
+ okMessage = null;
+ updateStatus(true);
+ OseeLog.register(this);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.action.ContributionItem#dispose()
+ */
+ @Override
+ public void dispose() {
+ OseeLog.deregister(this);
+ super.dispose();
+ }
+
+ public static void addTo(IStatusLineManager manager) {
+ boolean wasFound = false;
+ for (IContributionItem item : manager.getItems()) {
+ if (item instanceof OseeServicesStatusContributionItem) {
+ wasFound = true;
+ break;
+ }
+ }
+ if (!wasFound) {
+ manager.add(new OseeServicesStatusContributionItem());
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getDisabledImage()
+ */
+ @Override
+ protected Image getDisabledImage() {
+ return DISABLED_IMAGE;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getDisabledToolTip()
+ */
+ @Override
+ protected String getDisabledToolTip() {
+ return errorMessage;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getEnabledImage()
+ */
+ @Override
+ protected Image getEnabledImage() {
+ return ENABLED_IMAGE;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getEnabledToolTip()
+ */
+ @Override
+ protected String getEnabledToolTip() {
+ return okMessage;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.logging.IStatusListener#onStatus(org.eclipse.osee.framework.logging.IHealthStatus)
+ */
+ @Override
+ public void onStatus(final IHealthStatus status) {
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ if (status.isOk()) {
+ okMessage = status.getMessage();
+ } else {
+ Throwable error = status.getException();
+ errorMessage = error != null ? error.getLocalizedMessage() : "Undefined Error";
+ }
+ updateStatus(status.isOk());
+ }
+ });
+
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationCellModifier.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationCellModifier.java
new file mode 100644
index 00000000000..d8ca8d9d749
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationCellModifier.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionList;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.swt.widgets.Item;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class RelationCellModifier implements ICellModifier {
+ private TreeViewer treeViewer;
+
+ private PermissionList pList;
+
+ /**
+ *
+ */
+ public RelationCellModifier(TreeViewer treeViewer) {
+ super();
+ this.treeViewer = treeViewer;
+ pList = new PermissionList();
+ // pList.addPermission(Permission.PermPermissionEnum.EDITREQUIREMENT);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String)
+ */
+ public boolean canModify(Object element, String property) {
+ try {
+ SkynetGuiPlugin.securityManager.checkPermission(UserManager.getUser(), pList);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return false;
+ }
+ return element instanceof RelationLink;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String)
+ */
+ public Object getValue(Object element, String property) {
+ RelationLink relLink = (RelationLink) element;
+ return relLink.getRationale();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String,
+ * java.lang.Object)
+ */
+ public void modify(Object element, String property, Object value) {
+ // Note that it is possible for an SWT Item to be passed instead of the model element.
+ if (element instanceof Item) {
+ element = ((Item) element).getData();
+ }
+ RelationLink relLink = (RelationLink) element;
+ relLink.setRationale((String) value, true);
+ treeViewer.update(element, null);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationContentProvider.java
new file mode 100644
index 00000000000..07b7fd9d1d0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationContentProvider.java
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.osee.framework.skynet.core.relation.RelationSide;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeSide;
+
+/**
+ * The basis for the comments in this class can be found at
+ * http://www.eclipse.org/articles/treeviewer-cg/TreeViewerArticle.htm
+ *
+ * @author Ryan D. Brooks
+ */
+public class RelationContentProvider implements ITreeContentProvider {
+ private static Object[] EMPTY_ARRAY = new Object[0];
+ private Artifact artifact;
+
+ /*
+ * @see IContentProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /**
+ * Notifies this content provider that the given viewer's input has been switched to a different element.
+ * <p>
+ * A typical use for this method is registering the content provider as a listener to changes on the new input (using
+ * model-specific means), and deregistering the viewer from the old input. In response to these change notifications,
+ * the content provider propagates the changes to the viewer.
+ * </p>
+ *
+ * @param viewer the viewer
+ * @param oldInput the old input element, or <code>null</code> if the viewer did not previously have an input
+ * @param newInput the new input element, or <code>null</code> if the viewer does not have an input
+ * @see IContentProvider#inputChanged(Viewer, Object, Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ this.artifact = (Artifact) newInput;
+ }
+
+ /**
+ * The tree viewer calls its content provider&#8217;s getChildren method when it needs to create or display the child
+ * elements of the domain object, <b>parent </b>. This method should answer an array of domain objects that represent
+ * the unfiltered children of <b>parent </b>
+ *
+ * @see ITreeContentProvider#getChildren(Object)
+ */
+ public Object[] getChildren(Object parentElement) {
+ try {
+ if (parentElement instanceof Artifact) {
+ Artifact artifact = (Artifact) parentElement;
+ List<RelationType> relationTypes =
+ RelationTypeManager.getValidTypes(artifact.getArtifactType(), artifact.getBranch());
+ return relationTypes.toArray();
+ } else if (parentElement instanceof RelationType) {
+ RelationType relationType = (RelationType) parentElement;
+ int sideAMax =
+ RelationTypeManager.getRelationSideMax(relationType, artifact.getArtifactType(), RelationSide.SIDE_A);
+ int sideBMax =
+ RelationTypeManager.getRelationSideMax(relationType, artifact.getArtifactType(), RelationSide.SIDE_B);
+ RelationTypeSide sideA = new RelationTypeSide(relationType, RelationSide.SIDE_A, artifact);
+ RelationTypeSide sideB = new RelationTypeSide(relationType, RelationSide.SIDE_B, artifact);
+ boolean onSideA = sideBMax > 0;
+ boolean onSideB = sideAMax > 0;
+ if (onSideA && onSideB) {
+ return new Object[] {sideA, sideB};
+ } else if (onSideA) {
+ return new Object[] {sideA};
+ } else if (onSideB) {
+ return new Object[] {sideB};
+ }
+ } else if (parentElement instanceof RelationTypeSide) {
+ RelationTypeSide relationTypeSide = (RelationTypeSide) parentElement;
+ artifact.getRelatedArtifacts(relationTypeSide); // ensure the artifacts are bulk loaded; otherwise the sort will be slower
+ List<RelationLink> relations = artifact.getRelations(relationTypeSide);
+ if (!relationTypeSide.getRelationType().isOrdered()) {
+ Collections.sort(relations, new AlphabeticalRelationComparator(relationTypeSide.getSide()));
+ }
+ return relations.toArray();
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ return EMPTY_ARRAY;
+ }
+
+ /*
+ * @see ITreeContentProvider#getParent(Object)
+ */
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ /**
+ * The tree viewer asks its content provider if the domain object represented by <b>element </b> has any children.
+ * This method is used by the tree viewer to determine whether or not a plus or minus should appear on the tree
+ * widget.
+ *
+ * @see ITreeContentProvider#hasChildren(Object)
+ */
+ public boolean hasChildren(Object element) {
+ if (element instanceof RelationTypeSide) {
+ try {
+ return artifact.getRelatedArtifactsCount((RelationTypeSide) element) > 0;
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return false;
+ }
+ }
+ return getChildren(element).length > 0;
+ }
+
+ /**
+ * This is the method invoked by calling the <b>setInput </b> method on the tree viewer. In fact, the <b>getElements
+ * </b> method is called only in response to the tree viewer's <b>setInput </b> method and should answer with the
+ * appropriate domain objects of the inputElement. The <b>getElements </b> and <b>getChildren </b> methods operate in
+ * a similar way. Depending on your domain objects, you may have the <b>getElements </b> simply return the result of
+ * calling <b>getChildren </b>. The two methods are kept distinct because it provides a clean way to differentiate
+ * between the root domain object and all other domain objects.
+ *
+ * @see IStructuredContentProvider#getElements(Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationLabelProvider.java
new file mode 100644
index 00000000000..561ee5c619e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationLabelProvider.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeSide;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class RelationLabelProvider implements ITableLabelProvider, ILabelProvider {
+ private static Image RELATION_IMAGE = SkynetGuiPlugin.getInstance().getImage("relate.gif");
+ private Artifact artifact;
+
+ public RelationLabelProvider(Artifact artifact) {
+ this.artifact = artifact;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+ */
+ public Image getColumnImage(Object element, int columnIndex) {
+ if (element instanceof RelationType && columnIndex == 0) {
+ return RELATION_IMAGE;
+ } else if (element instanceof RelationLink && columnIndex == 0) {
+ RelationLink relation = (RelationLink) element;
+ try {
+ return relation.getArtifactOnOtherSide(artifact).getArtifactType().getImage();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+ */
+ public String getColumnText(Object element, int columnIndex) {
+ if (element instanceof RelationTypeSide && columnIndex == 0) {
+ return ((RelationTypeSide) element).getSideName();
+ } else if (element instanceof RelationType) {
+ if (columnIndex == 0) return ((RelationType) element).getTypeName();
+ } else if (element instanceof RelationLink) {
+ RelationLink link = (RelationLink) element;
+ if (columnIndex == 0) {
+ try {
+ return link.getArtifactOnOtherSide(artifact).getDescriptiveName();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ } else if (columnIndex == 1) {
+ return link.getRationale();
+ }
+ }
+ return "";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+ * java.lang.String)
+ */
+ public boolean isLabelProperty(Object element, String property) {
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public Image getImage(Object element) {
+ return getColumnImage(element, 0);
+ }
+
+ public String getText(Object element) {
+ return getColumnText(element, 0);
+ }
+
+ /**
+ * @param artifact The artifact to set.
+ */
+ public void setArtifact(Artifact artifact) {
+ this.artifact = artifact;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationsComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationsComposite.java
new file mode 100644
index 00000000000..7d2f8c8640e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/RelationsComposite.java
@@ -0,0 +1,797 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ITreeViewerListener;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.jface.viewers.TreeExpansionEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.ArtifactDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactData;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
+import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IRelationModifiedEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.osee.framework.skynet.core.relation.RelationManager;
+import org.eclipse.osee.framework.skynet.core.relation.RelationModType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationSide;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeSide;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.relation.explorer.RelationExplorerWindow;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseMoveListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class RelationsComposite extends Composite implements IRelationModifiedEventListener, IFrameworkTransactionEventListener {
+ private TreeViewer treeViewer;
+ private Tree tree;
+ private NeedSelectedArtifactListener needSelectedArtifactListener;
+ private NeedArtifactMenuListener needArtifactListener;
+ private final IDirtiableEditor editor;
+ public static final String VIEW_ID = "osee.define.relation.RelationExplorer";
+ public static final String[] columnNames = new String[] {" ", "Rationale"};
+ // the index of column order
+ private static int COLUMN_ORDER = 1;
+
+ private MenuItem openMenuItem;
+ private MenuItem editMenuItem;
+ private MenuItem viewRelationTreeItem;
+ private MenuItem deleteRelationMenuItem;
+ private MenuItem deleteArtifactMenuItem;
+ private MenuItem massEditMenuItem;
+ private final Artifact artifact;
+ private final boolean readOnly;
+ private final RelationLabelProvider relationLabelProvider;
+ private final ToolBar toolBar;
+
+ private final Map<Integer, RelationLink> artifactToLinkMap;
+
+ public RelationsComposite(IDirtiableEditor editor, Composite parent, int style, Artifact artifact) {
+ this(editor, parent, style, artifact, false, null);
+ }
+
+ public RelationsComposite(IDirtiableEditor editor, Composite parent, int style, Artifact artifact, ToolBar toolBar) {
+ this(editor, parent, style, artifact, false, toolBar);
+ }
+
+ public RelationsComposite(IDirtiableEditor editor, Composite parent, int style, Artifact artifact, boolean readOnly, ToolBar toolBar) {
+ super(parent, style);
+ this.readOnly = readOnly;
+
+ if (artifact == null) throw new IllegalArgumentException("Can not edit a null artifact");
+
+ this.artifact = artifact;
+ this.editor = editor;
+ this.relationLabelProvider = new RelationLabelProvider(artifact);
+ this.artifactToLinkMap = new HashMap<Integer, RelationLink>();
+
+ createPartControl();
+ OseeEventManager.addListener(this);
+ this.toolBar = toolBar;
+ }
+
+ public TreeViewer getTreeViewer() {
+ return treeViewer;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+ public void createPartControl() {
+ this.setLayout(new GridLayout());
+ this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ createTreeArea(this);
+ createColumns();
+ packColumnData();
+
+ needSelectedArtifactListener = new NeedSelectedArtifactListener();
+ needArtifactListener = new NeedArtifactMenuListener();
+ tree.setMenu(getPopupMenu());
+
+ setHelpContexts();
+ }
+
+ private void createTreeArea(Composite parent) {
+ treeViewer = new TreeViewer(parent, SWT.FULL_SELECTION | SWT.MULTI);
+ tree = treeViewer.getTree();
+ tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ tree.setHeaderVisible(true);
+
+ CellEditor[] editors = new CellEditor[columnNames.length];
+ editors[1] = new TextCellEditor(tree);
+ treeViewer.setCellEditors(editors);
+ treeViewer.setCellModifier(new RelationCellModifier(treeViewer));
+ treeViewer.setColumnProperties(columnNames);
+ treeViewer.setContentProvider(new RelationContentProvider());
+ treeViewer.setLabelProvider(relationLabelProvider);
+ treeViewer.setSorter(new LabelSorter() {
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ if (e1 instanceof RelationLink && e2 instanceof RelationLink) {
+ return 0;
+ }
+ return super.compare(viewer, e1, e2);
+ }
+ });
+ treeViewer.setUseHashlookup(true);
+ treeViewer.setInput(artifact);
+
+ treeViewer.addDoubleClickListener(new DoubleClickListener());
+ tree.addKeyListener(new keySelectedListener());
+ treeViewer.addTreeListener(new ITreeViewerListener() {
+
+ public void treeCollapsed(TreeExpansionEvent event) {
+ Display.getCurrent().asyncExec(new Runnable() {
+ public void run() {
+ packColumnData();
+ }
+ });
+
+ }
+
+ public void treeExpanded(TreeExpansionEvent event) {
+ Display.getCurrent().asyncExec(new Runnable() {
+ public void run() {
+ packColumnData();
+ }
+ });
+ }
+
+ });
+
+ tree.addMouseMoveListener(new MouseMoveListener() {
+
+ public void mouseMove(MouseEvent e) {
+ // System.out.println("MouseEvent at " + e.x + "," + e.y);
+ // TreeItem item = tree.getItem(new Point(e.x, e.y));
+ // if (item != null)
+ // System.out.println("WOOT");
+ // tree.setInsertMark(item, true);
+
+ }
+ });
+
+ expandItemsThatHaveChildren();
+ new RelationSkynetDragAndDrop(tree, VIEW_ID);
+ }
+
+ private void expandItemsThatHaveChildren() {
+ //expand items that have children
+ Object[] types = ((ITreeContentProvider) treeViewer.getContentProvider()).getChildren(treeViewer.getInput());
+ for (Object obj : types) {
+ if (obj instanceof RelationType) {
+ RelationType type = (RelationType) obj;
+ if (RelationManager.getRelatedArtifactsCount(artifact, type, null) > 0) {
+ treeViewer.expandToLevel(obj, 1);
+ }
+ }
+ }
+ }
+
+ private void createColumns() {
+ for (int index = 0; index < columnNames.length; index++) {
+ TreeColumn column = new TreeColumn(tree, SWT.LEFT, index);
+ column.setText(columnNames[index]);
+ }
+ }
+
+ private void packColumnData() {
+ TreeColumn[] columns = treeViewer.getTree().getColumns();
+ for (TreeColumn column : columns) {
+ column.pack();
+ }
+ }
+
+ public Menu getPopupMenu() {
+ Menu popupMenu = new Menu(this);
+ popupMenu.addMenuListener(needSelectedArtifactListener);
+ popupMenu.addMenuListener(needArtifactListener);
+
+ createOpenMenuItem(popupMenu);
+ if (!readOnly) {
+ createEditMenuItem(popupMenu);
+ createMassEditMenuItem(popupMenu);
+ }
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createViewRelationTreeMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createDeleteRelationMenuItem(popupMenu);
+ createDeleteArtifactMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+
+ createExpandAllMenuItem(popupMenu);
+ createSelectAllMenuItem(popupMenu);
+
+ popupMenu.addMenuListener(new RelationMenuListener());
+ return popupMenu;
+ }
+
+ public class DoubleClickListener implements IDoubleClickListener {
+ public void doubleClick(DoubleClickEvent event) {
+ openViewer((IStructuredSelection) event.getSelection());
+ }
+ }
+
+ private void createDeleteRelationMenuItem(final Menu parentMenu) {
+ deleteRelationMenuItem = new MenuItem(parentMenu, SWT.CASCADE);
+ deleteRelationMenuItem.setText("&Delete Relation");
+ deleteRelationMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+
+ try {
+ performDeleteRelation(selection);
+ } catch (ArtifactDoesNotExist ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+
+ deleteRelationMenuItem.setEnabled(true);
+ }
+
+ private void createDeleteArtifactMenuItem(final Menu parentMenu) {
+ deleteArtifactMenuItem = new MenuItem(parentMenu, SWT.CASCADE);
+ deleteArtifactMenuItem.setText("&Delete Artifact");
+ deleteArtifactMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+
+ performDeleteArtifact(selection);
+ }
+ });
+
+ deleteArtifactMenuItem.setEnabled(true);
+ }
+
+ private void createMassEditMenuItem(final Menu parentMenu) {
+ massEditMenuItem = new MenuItem(parentMenu, SWT.CASCADE);
+ massEditMenuItem.setText("&Mass Edit");
+ massEditMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+
+ performMassEdit(selection);
+ }
+ });
+
+ massEditMenuItem.setEnabled(true);
+ }
+
+ private void createViewRelationTreeMenuItem(Menu menu) {
+ viewRelationTreeItem = new MenuItem(menu, SWT.PUSH);
+ viewRelationTreeItem.setText("&View Relation Table Report");
+ viewRelationTreeItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ TreeViewerReport report =
+ new TreeViewerReport("Relation View Report for " + artifact.getDescriptiveName(), treeViewer);
+ ArrayList<Integer> ignoreCols = new ArrayList<Integer>();
+ ignoreCols.add(COLUMN_ORDER);
+ report.setIgnoreColumns(ignoreCols);
+ report.open();
+ }
+ });
+ }
+
+ private void createOpenMenuItem(Menu parentMenu) {
+ openMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ openMenuItem.setText("Open");
+
+ needArtifactListener.add(openMenuItem);
+ needSelectedArtifactListener.add(openMenuItem);
+ openMenuItem.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ openViewer((IStructuredSelection) treeViewer.getSelection());
+ }
+ });
+ }
+
+ private void openViewer(IStructuredSelection selection) {
+ // TODO: check permission
+ Object object = selection.getFirstElement();
+ Artifact selectedArtifact = null;
+
+ if (object instanceof RelationLink) {
+ RelationLink link = (RelationLink) object;
+ try {
+ selectedArtifact = link.getArtifactOnOtherSide(artifact);
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ ArtifactEditor.editArtifact(selectedArtifact);
+ }
+ }
+
+ private void performMassEdit(IStructuredSelection selection) {
+ // TODO: check permission
+ Set<Artifact> selectedArtifacts = new HashSet<Artifact>();
+ Iterator<?> iter = selection.iterator();
+ while (iter.hasNext()) {
+ Object object = iter.next();
+ if (object instanceof RelationLink) {
+ RelationLink link = (RelationLink) object;
+ try {
+ selectedArtifacts.add(link.getArtifactB());
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+ MassArtifactEditor.editArtifacts("Mass Edit", selectedArtifacts);
+ }
+
+ private void createEditMenuItem(Menu parentMenu) {
+ editMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ editMenuItem.setText("&Edit");
+
+ needArtifactListener.add(editMenuItem);
+ editMenuItem.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Object object = selection.getFirstElement();
+
+ if (object instanceof Artifact) {
+ try {
+ RendererManager.editInJob((Artifact) object);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ });
+ }
+
+ private void createExpandAllMenuItem(Menu parentMenu) {
+ MenuItem menuItem = new MenuItem(parentMenu, SWT.PUSH);
+ menuItem.setText("Expand All\tCtrl+X");
+ menuItem.addSelectionListener(new ExpandListener());
+ }
+
+ public class ExpandListener extends SelectionAdapter {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> iter = selection.iterator();
+ while (iter.hasNext()) {
+ treeViewer.expandToLevel(iter.next(), TreeViewer.ALL_LEVELS);
+ }
+ packColumnData();
+ }
+ }
+
+ public class NeedSelectedArtifactListener implements MenuListener {
+ Collection<MenuItem> items;
+
+ public NeedSelectedArtifactListener() {
+ this.items = new LinkedList<MenuItem>();
+ }
+
+ public void add(MenuItem item) {
+ items.add(item);
+ }
+
+ public void menuHidden(MenuEvent e) {
+ }
+
+ public void menuShown(MenuEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ boolean valid = selection.getFirstElement() instanceof Artifact;
+ for (MenuItem item : items)
+ item.setEnabled(valid);
+ }
+ }
+
+ public class NeedArtifactMenuListener implements MenuListener {
+ Collection<MenuItem> items;
+
+ public NeedArtifactMenuListener() {
+ this.items = new LinkedList<MenuItem>();
+ }
+
+ public void add(MenuItem item) {
+ items.add(item);
+ }
+
+ public void menuHidden(MenuEvent e) {
+ }
+
+ public void menuShown(MenuEvent e) {
+ boolean valid = treeViewer.getInput() instanceof Artifact;
+ for (MenuItem item : items)
+ item.setEnabled(valid);
+ }
+ }
+
+ public class RelationMenuListener implements MenuListener {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.events.ArmListener#widgetArmed(org.eclipse.swt.events.ArmEvent)
+ */
+ public void menuHidden(MenuEvent e) {
+ }
+
+ public void menuShown(MenuEvent e) {
+ // check permission
+ }
+ }
+
+ private void createSelectAllMenuItem(Menu parentMenu) {
+ MenuItem menuItem = new MenuItem(parentMenu, SWT.PUSH);
+ menuItem.setText("&Select All\tCtrl+A");
+ menuItem.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(org.eclipse.swt.widgets.Event event) {
+ treeViewer.getTree().selectAll();
+ }
+ });
+ }
+
+ public void disposeRelationsComposite() {
+ OseeEventManager.removeListener(this);
+ }
+
+ private void expandAll(IStructuredSelection selection) {
+ Iterator<?> iter = selection.iterator();
+ while (iter.hasNext()) {
+ treeViewer.expandToLevel(iter.next(), TreeViewer.ALL_LEVELS);
+ }
+ this.packColumnData();
+ }
+
+ /**
+ * Performs the deletion functionality
+ *
+ * @param selection
+ */
+ private void performDeleteArtifact(IStructuredSelection selection) {
+ Object object = selection.getFirstElement();
+ try {
+ if (object instanceof RelationLink) {
+ RelationLink relLink = (RelationLink) object;
+ Artifact artToDelete = null;
+ if (relLink.getArtifactA() == artifact)
+ artToDelete = relLink.getArtifactB();
+ else
+ artToDelete = relLink.getArtifactA();
+ if (MessageDialog.openConfirm(
+ Display.getCurrent().getActiveShell(),
+ "Delete Artifact",
+ "Delete Artifact?\n\n\"" + artToDelete + "\"\n\nNOTE: This will delete the artifact from the system. Use \"Delete Relation\" to remove this artifact from the relation.")) {
+ artToDelete.delete();
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ refresh();
+ }
+
+ /**
+ * Performs the deletion functionality
+ *
+ * @param selection
+ * @throws ArtifactDoesNotExist
+ */
+ private void performDeleteRelation(IStructuredSelection selection) throws ArtifactDoesNotExist {
+ Object[] objects = selection.toArray();
+ for (Object object : objects) {
+ if (object instanceof RelationLink) {
+ ((RelationLink) object).delete(true);
+
+ RelationType relationType = ((RelationLink) object).getRelationType();
+ int sideAMax =
+ RelationTypeManager.getRelationSideMax(relationType, artifact.getArtifactType(), RelationSide.SIDE_A);
+ int sideBMax =
+ RelationTypeManager.getRelationSideMax(relationType, artifact.getArtifactType(), RelationSide.SIDE_B);
+ RelationTypeSide sideA = new RelationTypeSide(relationType, RelationSide.SIDE_A, artifact);
+ RelationTypeSide sideB = new RelationTypeSide(relationType, RelationSide.SIDE_B, artifact);
+ boolean onSideA = sideBMax > 0;
+ boolean onSideB = sideAMax > 0;
+ if (onSideA && onSideB) {
+ treeViewer.refresh(sideA);
+ } else if (onSideA) {
+ treeViewer.refresh(sideA);
+ treeViewer.refresh(sideB);
+ } else if (onSideB) {
+ treeViewer.refresh(sideB);
+ }
+ } else if (object instanceof RelationType) {
+ RelationType relationType = (RelationType) object;
+ RelationManager.deleteRelations(artifact, relationType, null);
+ treeViewer.refresh(relationType);
+ } else if (object instanceof RelationTypeSide) {
+ RelationTypeSide group = (RelationTypeSide) object;
+ RelationManager.deleteRelations(artifact, group.getRelationType(), group.getSide());
+ treeViewer.refresh(group);
+ }
+ }
+ }
+
+ public void refresh() {
+ if (!treeViewer.getTree().isDisposed()) {
+ treeViewer.refresh();
+ packColumnData();
+ }
+ }
+
+ private class keySelectedListener implements KeyListener {
+ public void keyPressed(KeyEvent e) {
+ }
+
+ public void keyReleased(KeyEvent e) {
+ if (e.keyCode == SWT.DEL) {
+ try {
+ performDeleteRelation((IStructuredSelection) treeViewer.getSelection());
+ } catch (ArtifactDoesNotExist ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ if (e.keyCode == 'a' && e.stateMask == SWT.CONTROL) {
+ treeViewer.getTree().selectAll();
+ }
+ if (e.keyCode == 'x' && e.stateMask == SWT.CONTROL) {
+ expandAll((IStructuredSelection) treeViewer.getSelection());
+ }
+ }
+ }
+
+ /**
+ * @return Returns the artifact.
+ */
+ public Artifact getArtifact() {
+ return artifact;
+ }
+
+ public void refreshArtifact(Artifact newArtifact) {
+ relationLabelProvider.setArtifact(newArtifact);
+ treeViewer.setInput(newArtifact);
+ expandItemsThatHaveChildren();
+ refresh();
+ }
+
+ private class RelationSkynetDragAndDrop extends SkynetDragAndDrop {
+ boolean isFeedbackAfter = false;
+
+ public RelationSkynetDragAndDrop(Tree tree, String viewId) {
+ super(tree, viewId);
+ }
+
+ @Override
+ public Artifact[] getArtifacts() {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Object[] objects = selection.toArray();
+ Artifact[] artifacts = null;
+
+ if (objects.length > 0 && objects[0] instanceof RelationLink) {
+ artifacts = new Artifact[objects.length];
+
+ for (int index = 0; index < objects.length; index++) {
+ RelationLink link = (RelationLink) objects[index];
+ Artifact selectedArtifact = null;
+ try {
+ selectedArtifact = link.getArtifactOnOtherSide(artifact);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ artifacts[index] = selectedArtifact;
+ artifactToLinkMap.put(selectedArtifact.getArtId(), link);
+ }
+ }
+ return artifacts;
+ }
+
+ @Override
+ public void performDragOver(DropTargetEvent event) {
+ Tree tree = treeViewer.getTree();
+ TreeItem selected = tree.getItem(treeViewer.getTree().toControl(event.x, event.y));
+
+ event.feedback = DND.FEEDBACK_EXPAND;
+ event.detail = DND.DROP_NONE;
+
+ if (selected != null && selected.getData() instanceof RelationTypeSide) {
+ event.detail = DND.DROP_COPY;
+ tree.setInsertMark(null, false);
+ } else if (selected != null && selected.getData() instanceof RelationLink) {
+ RelationLink targetLink = (RelationLink) selected.getData();
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Object obj = selection.getFirstElement();
+ if (obj instanceof RelationLink) {
+ RelationLink dropTarget = (RelationLink) obj;
+
+ // the links must be in the same group
+
+ if (targetLink.getSide(artifact).equals(dropTarget.getSide(artifact)) && targetLink.getRelationType().equals(
+ dropTarget.getRelationType())) {
+ if (isFeedbackAfter) {
+ event.feedback = DND.FEEDBACK_INSERT_AFTER;
+ } else {
+ event.feedback = DND.FEEDBACK_INSERT_BEFORE;
+ }
+ event.detail = DND.DROP_MOVE;
+ }
+ }
+ } else {
+ tree.setInsertMark(null, false);
+ }
+ }
+
+ @Override
+ public void operationChanged(DropTargetEvent event) {
+ if (!isCtrlPressed(event)) {
+ isFeedbackAfter = false;
+ }
+ }
+
+ private boolean isCtrlPressed(DropTargetEvent event) {
+ boolean ctrPressed = (event.detail == 1);
+
+ if (ctrPressed) {
+ isFeedbackAfter = true;
+ }
+ return ctrPressed;
+ }
+
+ @Override
+ public void performDrop(DropTargetEvent event) {
+ TreeItem selected = treeViewer.getTree().getItem(treeViewer.getTree().toControl(event.x, event.y));
+ Object object = selected.getData();
+ try {
+
+ System.out.println(event.getSource());
+
+ if (object instanceof RelationLink) {//used for ordering
+ RelationLink targetLink = (RelationLink) object;
+ // RelationManager.addRelationAndModifyOrder(artifact, targetLink.getArtifactOnOtherSide(artifact),
+ // ((ArtifactData) event.data).getArtifacts(), targetLink.getRelationType(), true);
+
+ Artifact target = targetLink.getArtifactOnOtherSide(artifact);
+ for (Artifact art : ((ArtifactData) event.data).getArtifacts()) {
+ artifact.setRelationOrder(target, isFeedbackAfter, new RelationTypeSide(targetLink.getRelationType(),
+ targetLink.getSide(artifact).oppositeSide(), artifact), art);
+ target = art;
+ }
+ treeViewer.refresh();
+ editor.onDirtied();
+ } else if (object instanceof RelationTypeSide) {
+ RelationTypeSide group = (RelationTypeSide) object;
+
+ RelationExplorerWindow window = new RelationExplorerWindow(treeViewer, group);
+
+ ArtifactDragDropSupport.performDragDrop(event, window,
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+ window.createArtifactInformationBox(null);
+ }
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+
+ isFeedbackAfter = false;
+ }
+ }
+
+ private void setHelpContexts() {
+ SkynetGuiPlugin.getInstance().setHelp(treeViewer.getControl(), "relation_page_tree_viewer");
+ }
+
+ /**
+ * @return the toolBar
+ */
+ public ToolBar getToolBar() {
+ return toolBar;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IRelationModifiedEventListener#handleRelationModifiedEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.relation.RelationModifiedEvent.RelationModType, org.eclipse.osee.framework.skynet.core.relation.RelationLink, org.eclipse.osee.framework.skynet.core.artifact.Branch, java.lang.String, java.lang.String)
+ */
+ @Override
+ public void handleRelationModifiedEvent(Sender sender, RelationModType relationModType, RelationLink link, Branch branch, String relationType) {
+ try {
+ if (link.getArtifactA().equals(this.artifact) || link.getArtifactB().equals(this.artifact)) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ treeViewer.refresh();
+ }
+ });
+ }
+ } catch (Exception ex) {
+ // do nothing
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IFrameworkTransactionEventListener#handleFrameworkTransactionEvent(org.eclipse.osee.framework.ui.plugin.event.Sender.Source, org.eclipse.osee.framework.skynet.core.eventx.FrameworkTransactionData)
+ */
+ @Override
+ public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException {
+ if (transData.isRelAddedChangedDeleted(this.artifact)) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ treeViewer.refresh();
+ }
+ });
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SessionContributionItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SessionContributionItem.java
new file mode 100644
index 00000000000..6546d63e36b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SessionContributionItem.java
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.logging.Level;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.core.client.ClientSessionManager;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.event.AccessControlEventType;
+import org.eclipse.osee.framework.skynet.core.event.IAccessControlEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.OverlayImage;
+import org.eclipse.osee.framework.ui.skynet.dialogs.AuthenticationDialog;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class SessionContributionItem extends OseeContributionItem implements IAccessControlEventListener {
+
+ private static final String ID = "session.contribution.item";
+
+ private static final Image ENABLED_IMAGE = SkynetGuiPlugin.getInstance().getImage("user.gif");
+ private static final Image DISABLED_IMAGE =
+ new OverlayImage(ENABLED_IMAGE, SkynetGuiPlugin.getInstance().getImageDescriptor("red_slash.gif")).createImage();
+
+ private static String ENABLED_TOOLTIP = "Authenticated as: %s (%s) - session(%s)\nDouble-Click to Log Off.";
+ private static String DISABLED_TOOLTIP = "Not Authenticated.\nDouble-Click to Log On.";
+
+ private SessionContributionItem() {
+ super(ID);
+ init();
+ updateStatus(true);
+ OseeEventManager.addListener(this);
+ }
+
+ private void init() {
+ setActionHandler(new Action() {
+
+ @Override
+ public void run() {
+ try {
+ if (ClientSessionManager.isSessionValid()) {
+ boolean result =
+ MessageDialog.openQuestion(PlatformUI.getWorkbench().getDisplay().getActiveShell(),
+ "Log Off...", "Are you sure you want to log off and exit OSEE?");
+ if (result) {
+ ClientSessionManager.releaseSession();
+
+ PlatformUI.getWorkbench().close();
+ }
+ } else {
+ // if (oseeAuthentication.isLoginAllowed()) {
+ AuthenticationDialog.openDialog();
+ // } else {
+ // oseeAuthentication.authenticate("", "", "", false);
+ // }
+ if (ClientSessionManager.isSessionValid()) {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ try {
+ OseeEventManager.kickAccessControlArtifactsEvent(this,
+ AccessControlEventType.UserAuthenticated, LoadedArtifacts.EmptyLoadedArtifacts());
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+
+ }
+
+ public static void addTo(IStatusLineManager manager) {
+ boolean wasFound = false;
+ for (IContributionItem item : manager.getItems()) {
+ if (item instanceof SessionContributionItem) {
+ wasFound = true;
+ break;
+ }
+ }
+ if (!wasFound) {
+ manager.add(new SessionContributionItem());
+ }
+ }
+
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ super.dispose();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IAccessControlEventListener#handleAccessControlArtifactsEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.eventx.AccessControlModType, org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts)
+ */
+ @Override
+ public void handleAccessControlArtifactsEvent(Sender sender, AccessControlEventType accessControlEventType, LoadedArtifacts loadedArtifactss) {
+ if (accessControlEventType == AccessControlEventType.UserAuthenticated) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ updateStatus(ClientSessionManager.isSessionValid());
+ }
+ });
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getDisabledImage()
+ */
+ @Override
+ protected Image getDisabledImage() {
+ return DISABLED_IMAGE;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getDisabledToolTip()
+ */
+ @Override
+ protected String getDisabledToolTip() {
+ return DISABLED_TOOLTIP;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getEnabledImage()
+ */
+ @Override
+ protected Image getEnabledImage() {
+ return ENABLED_IMAGE;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getEnabledToolTip()
+ */
+ @Override
+ protected String getEnabledToolTip() {
+ if (ClientSessionManager.isSessionValid()) {
+ String skynetName = "Unknown";
+ String userId = "-";
+ String sessionId = "-";
+ try {
+ skynetName = UserManager.getUser().getName();
+ userId = UserManager.getUser().getUserId();
+ sessionId = ClientSessionManager.getSessionId();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return String.format(ENABLED_TOOLTIP, skynetName, userId, sessionId);
+ }
+ return DISABLED_TOOLTIP;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetGuiPlugin.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetGuiPlugin.java
new file mode 100644
index 00000000000..5f274340b7f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetGuiPlugin.java
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.logging.Level;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.core.client.ClientSessionManager;
+import org.eclipse.osee.framework.core.exception.OseeAuthenticationRequiredException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.event.BroadcastEventType;
+import org.eclipse.osee.framework.skynet.core.event.IBroadcastEventListneer;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.ui.plugin.OseeFormActivator;
+import org.eclipse.osee.framework.ui.skynet.access.OseeSecurityManager;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchListener;
+import org.eclipse.ui.PlatformUI;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.packageadmin.PackageAdmin;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class SkynetGuiPlugin extends OseeFormActivator implements IBroadcastEventListneer {
+ private static SkynetGuiPlugin pluginInstance; // The shared instance.
+ public static final String PLUGIN_ID = "org.eclipse.osee.framework.ui.skynet";
+ public static final String CHANGE_REPORT_ATTRIBUTES_PREF =
+ "org.eclipse.osee.framework.ui.skynet.changeReportAttributes";
+ public static final String ARTIFACT_EXPLORER_ATTRIBUTES_PREF =
+ "org.eclipse.osee.framework.ui.skynet.artifactExplorerAttributes";
+ public static OseeSecurityManager securityManager;
+ private ServiceTracker packageAdminTracker;
+
+ public SkynetGuiPlugin() {
+ super();
+ pluginInstance = this;
+ securityManager = OseeSecurityManager.getInstance();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.plugin.OseeFormActivator#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ super.stop(context);
+ packageAdminTracker.close();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.plugin.OseeUiActivator#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ packageAdminTracker = new ServiceTracker(context, PackageAdmin.class.getName(), null);
+ packageAdminTracker.open();
+ OseeEventManager.addListener(this);
+ OseeLog.registerLoggerListener(new DialogPopupLoggerListener());
+
+ if (PlatformUI.isWorkbenchRunning()) {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ workbench.addWorkbenchListener(new IWorkbenchListener() {
+
+ @Override
+ public void postShutdown(IWorkbench workbench) {
+ }
+
+ @Override
+ public boolean preShutdown(IWorkbench workbench, boolean forced) {
+ try {
+ UserManager.getUser().saveSettings();
+ } catch (Throwable th) {
+ th.printStackTrace();
+ }
+ return true;
+ }
+ });
+ }
+ }
+
+ /**
+ * Returns the shared instance.
+ */
+ public static SkynetGuiPlugin getInstance() {
+ return pluginInstance;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.plugin.core.util.plugin.OseePlugin#getPluginName()
+ */
+ @Override
+ protected String getPluginName() {
+ return PLUGIN_ID;
+ }
+
+ /**
+ * @return PackageAdmin
+ */
+ public PackageAdmin getPackageAdmin() {
+ return (PackageAdmin) this.packageAdminTracker.getService();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBroadcastEventListneer#handleBroadcastEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, java.lang.String)
+ */
+ @Override
+ public void handleBroadcastEvent(Sender sender, BroadcastEventType broadcastEventType, String[] userIds, final String message) {
+ boolean isShutdownAllowed = false;
+
+ // Determine whether this is a shutdown event
+ // Prevent shutting down users without a valid message
+ if (broadcastEventType == BroadcastEventType.Force_Shutdown) {
+ if (message == null || message.length() == 0) return;
+ try {
+ User user = UserManager.getUser();
+ if (user != null) {
+ String userId = user.getUserId();
+ for (String temp : userIds) {
+ if (temp.equals(userId)) {
+ isShutdownAllowed = true;
+ break;
+ }
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetActivator.class, Level.SEVERE, "Error processing shutdown", ex);
+ }
+ final boolean isShutdownRequest = isShutdownAllowed;
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ if (isShutdownRequest) {
+ MessageDialog.openWarning(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+ "Shutdown Requested", message);
+ // Shutdown the bench when this event is received
+ PlatformUI.getWorkbench().close();
+ }
+ }
+ });
+ } else if (broadcastEventType == BroadcastEventType.Message) {
+ if (message == null || message.length() == 0) return;
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+ "Remote Message", message);
+ }
+ });
+ } else if (broadcastEventType == BroadcastEventType.Ping) {
+ // Another client ping'd this client for session information; Pong back with
+ // original client's session id so it can be identified as the correct pong
+ try {
+ OseeEventManager.kickBroadcastEvent(this, BroadcastEventType.Pong, new String[] {},
+ sender.getOseeSession().toString());
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ } else if (broadcastEventType == BroadcastEventType.Pong) {
+ // Got pong from another client; If message == this client's sessionId, then it's
+ // the response from this client's ping
+ try {
+ if (message != null && message.equals(ClientSessionManager.getSession().toString())) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, "Pong: " + sender.toString());
+ }
+ } catch (OseeAuthenticationRequiredException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, "Pong: " + sender.toString(), ex);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetHttpServerApplication.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetHttpServerApplication.java
new file mode 100644
index 00000000000..d34e2553fae
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetHttpServerApplication.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.osee.framework.core.client.server.HttpServer;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class SkynetHttpServerApplication implements IApplication {
+
+ private Object object;
+
+ public SkynetHttpServerApplication() {
+ object = new Object();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
+ */
+ public Object start(IApplicationContext context) throws Exception {
+ HttpServer.remoteServerStartup();
+
+ synchronized (object) {
+ this.object.wait();
+ }
+ HttpServer.stopServers();
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.equinox.app.IApplication#stop()
+ */
+ public void stop() {
+ synchronized (object) {
+ this.object.notify();
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetServiceContributionItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetServiceContributionItem.java
new file mode 100644
index 00000000000..ef31defa2b1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetServiceContributionItem.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.osee.framework.skynet.core.event.IRemoteEventManagerEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.RemoteEventManager;
+import org.eclipse.osee.framework.skynet.core.event.RemoteEventServiceEventType;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.OverlayImage;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class SkynetServiceContributionItem extends OseeContributionItem implements IRemoteEventManagerEventListener {
+
+ public static final String ID = "skynet.service";
+ private static final SkynetGuiPlugin skynetGuiPlugin = SkynetGuiPlugin.getInstance();
+ private static final Image ENABLED_IMAGE =
+ new OverlayImage(skynetGuiPlugin.getImage("gear.gif"), skynetGuiPlugin.getImageDescriptor("laser_8_8.gif")).createImage();
+ private static final Image DISABLED_IMAGE =
+ new OverlayImage(ENABLED_IMAGE, skynetGuiPlugin.getImageDescriptor("red_slash.gif")).createImage();
+ private static final String ENABLED_TOOLTIP = "Remote event service is connected.";
+ private static final String DISABLED_TOOLTIP = "Remote event service is disconnected.";
+
+ public SkynetServiceContributionItem() {
+ super(ID);
+ updateStatus(RemoteEventManager.isConnected());
+ OseeEventManager.addListener(this);
+ }
+
+ public static void addTo(IStatusLineManager manager) {
+ boolean wasFound = false;
+ for (IContributionItem item : manager.getItems()) {
+ if (item instanceof SkynetServiceContributionItem) {
+ wasFound = true;
+ break;
+ }
+ }
+ if (!wasFound) {
+ manager.add(new SkynetServiceContributionItem());
+ }
+ }
+
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ super.dispose();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IRemoteEventManagerEventListener#handleRemoteEventManagerEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.eventx.RemoteEventModType)
+ */
+ @Override
+ public void handleRemoteEventManagerEvent(Sender sender, final RemoteEventServiceEventType remoteEventServiceEventType) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ updateStatus(remoteEventServiceEventType == RemoteEventServiceEventType.Connected);
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getDisabledImage()
+ */
+ @Override
+ protected Image getDisabledImage() {
+ return DISABLED_IMAGE;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getDisabledToolTip()
+ */
+ @Override
+ protected String getDisabledToolTip() {
+ return DISABLED_TOOLTIP;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getEnabledImage()
+ */
+ @Override
+ protected Image getEnabledImage() {
+ return ENABLED_IMAGE;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.OseeContributionItem#getEnabledToolTip()
+ */
+ @Override
+ protected String getEnabledToolTip() {
+ return ENABLED_TOOLTIP;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/TableViewerReport.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/TableViewerReport.java
new file mode 100644
index 00000000000..e00886868db
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/TableViewerReport.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.ArrayList;
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+
+public class TableViewerReport {
+
+ private final TableViewer tableViewer;
+ private final String title;
+
+ public TableViewerReport(String title, TableViewer tableViewer) {
+ this.title = title;
+ this.tableViewer = tableViewer;
+ }
+
+ public TableViewerReport(TableViewer tableViewer) {
+ this("Table View Report", tableViewer);
+ }
+
+ public void open() {
+ open(tableViewer.getTable().getItems());
+ }
+
+ public void open(TableItem items[]) {
+ String html = getHtml(items);
+ XResultData xResultData = new XResultData();
+ xResultData.addRaw(html);
+ xResultData.report(title, Manipulations.RAW_HTML);
+ }
+
+ public String getHtml(TableItem items[]) {
+ String html = "<html><body>";
+ html += AHTML.beginMultiColumnTable(100, 1);
+ TableColumn cols[] = tableViewer.getTable().getColumns();
+ Integer width[] = new Integer[cols.length + 1];
+ String colNames[] = new String[cols.length + 1];
+ for (int x = 0; x < cols.length + 1; x++) {
+ if (x < cols.length) {
+ TableColumn col = cols[x];
+ width[x] = col.getWidth();
+ colNames[x] = col.getText();
+ } else {
+ width[x] = 20;
+ colNames[x] = "ID";
+ }
+ }
+ html += AHTML.addHeaderRowMultiColumnTable(colNames, width);
+ // Get column widths and column name and setup the columns
+ IBaseLabelProvider labelProvider = tableViewer.getLabelProvider();
+ ArrayList<String[]> list = new ArrayList<String[]>();
+ for (TableItem item : items) {
+ addRow(item, list, labelProvider, cols.length > 0 ? cols.length : 1, 1);
+ }
+ for (String[] strs : list) {
+ html += AHTML.addRowMultiColumnTable(strs);
+ }
+ html += AHTML.endMultiColumnTable();
+ html += "</body></html>";
+ return html;
+ }
+
+ public void addRow(TableItem item, ArrayList<String[]> list, IBaseLabelProvider labelProvider, int numCols, int level) {
+ String str[] = new String[numCols + 1];
+ for (int x = 0; x < numCols; x++) {
+ str[x] = "";
+ if (x == 0) {
+ for (int y = 0; y < level; y++)
+ str[x] += "&nbsp;&nbsp;&nbsp;&nbsp;";
+ }
+
+ if (labelProvider instanceof LabelProvider) {
+ str[x] += ((LabelProvider) labelProvider).getText(item.getData());
+ } else if (labelProvider instanceof ITableLabelProvider) {
+ str[x] += ((ITableLabelProvider) labelProvider).getColumnText(item.getData(), x);
+ }
+ // str[numCols] = GUID.toHumanId(((BaseModel)item.getData()).guid.get());
+ }
+ list.add(str);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ToStringViewerSorter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ToStringViewerSorter.java
new file mode 100644
index 00000000000..eee05c72480
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ToStringViewerSorter.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.text.Collator;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ToStringViewerSorter extends ViewerSorter {
+
+ /**
+ *
+ */
+ public ToStringViewerSorter() {
+ }
+
+ /**
+ * @param collator
+ */
+ public ToStringViewerSorter(Collator collator) {
+ super(collator);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ return getComparator().compare(e1.toString(), e2.toString());
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/TreeViewerReport.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/TreeViewerReport.java
new file mode 100644
index 00000000000..66f24d9946e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/TreeViewerReport.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.util.ArrayList;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.swt.widgets.TreeItem;
+
+public class TreeViewerReport {
+
+ private final TreeViewer treeViewer;
+ private ArrayList<Integer> ignoreCols = new ArrayList<Integer>();
+ private final String title;
+
+ public TreeViewerReport(String title, TreeViewer treeViewer) {
+ this.title = title;
+ this.treeViewer = treeViewer;
+ }
+
+ public TreeViewerReport(TreeViewer treeViewer) {
+ this("Table View Report", treeViewer);
+ }
+
+ public void open() {
+ open(treeViewer.getTree().getItems());
+ }
+
+ public void setIgnoreColumns(ArrayList<Integer> ignoreCols) {
+ this.ignoreCols = ignoreCols;
+ }
+
+ public void open(TreeItem items[]) {
+ String html = getHtml(items);
+ XResultData xResultData = new XResultData();
+ xResultData.addRaw(html);
+ xResultData.report(title, Manipulations.RAW_HTML);
+ }
+
+ public String getHtml(TreeItem items[]) {
+ String html = "<html><body>";
+ if (!title.equals("WebDialog")) {
+ html += AHTML.heading(3, title);
+ }
+ html += AHTML.beginMultiColumnTable(100, 1);
+ TreeColumn cols[] = treeViewer.getTree().getColumns();
+ Integer width[] = new Integer[cols.length - ignoreCols.size()];
+ String colNames[] = new String[cols.length - ignoreCols.size()];
+ int colNum = 0;
+ for (int x = 0; x < cols.length; x++) {
+ if (!ignoreCols.contains(x)) {
+ TreeColumn col = cols[x];
+ width[colNum] = col.getWidth();
+ colNames[colNum++] = col.getText();
+ }
+ }
+ html += AHTML.addHeaderRowMultiColumnTable(colNames, width);
+ // Get column widths and column name and setup the columns
+ ITableLabelProvider labelProv = (ITableLabelProvider) treeViewer.getLabelProvider();
+ ArrayList<String[]> list = new ArrayList<String[]>();
+ for (TreeItem item : items) {
+ addRow(item, list, labelProv, cols.length, 1);
+ }
+ for (String[] strs : list) {
+ html += AHTML.addRowMultiColumnTable(strs);
+ }
+ html += AHTML.endMultiColumnTable();
+ html += "</body></html>";
+ return html;
+ }
+
+ public void addRow(TreeItem item, ArrayList<String[]> list, ITableLabelProvider labelProv, int numCols, int level) {
+ String str[] = new String[numCols - ignoreCols.size()];
+ int colNum = 0;
+ for (int x = 0; x < numCols; x++) {
+ if (!ignoreCols.contains(x)) {
+ str[colNum] = "";
+ if (x == 0) {
+ for (int y = 0; y < level; y++)
+ str[colNum] += "&nbsp;&nbsp;&nbsp;&nbsp;";
+ }
+ str[colNum++] += labelProv.getColumnText(item.getData(), x);
+ }
+ }
+ list.add(str);
+ if (item.getExpanded()) {
+ for (TreeItem i : item.getItems()) {
+ addRow(i, list, labelProv, numCols, level + 1);
+ }
+ }
+
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/XFormToolkit.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/XFormToolkit.java
new file mode 100644
index 00000000000..b207edcfd44
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/XFormToolkit.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.FormColors;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ImageHyperlink;
+import org.eclipse.ui.forms.widgets.Section;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class XFormToolkit extends FormToolkit {
+
+ /**
+ * @param display
+ */
+ public XFormToolkit(Display display) {
+ super(display);
+ }
+
+ /**
+ * @param colors
+ */
+ public XFormToolkit(FormColors colors) {
+ super(colors);
+ }
+
+ public Combo createCombo(Composite parent, int style) {
+ Combo combo = new Combo(parent, style | SWT.FLAT);
+ adapt(combo, true, true);
+ return combo;
+ }
+
+ public Composite createClientContainer(Section section, int span) {
+ Composite container = createContainer(section, span);
+ section.setClient(container);
+ return container;
+ }
+
+ public Composite createContainer(Composite parent, int span) {
+ Composite container = createComposite(parent);
+ GridLayout layout = new GridLayout(span, false);
+ layout.marginWidth = layout.marginHeight = 2;
+ container.setLayout(layout);
+ paintBordersFor(container);
+ return container;
+ }
+
+ public void addHelpLinkToSection(Section section, final String helpPath) {
+ Control control = section.getTextClient();
+ Composite parent = null;
+ if (control == null) {
+ parent = section;
+ } else {
+ parent = (Composite) control; // assumes that if this link is being added with exising controls they are contained in a composite
+ }
+ ImageHyperlink helpLink = new ImageHyperlink(parent, SWT.NULL);
+ adapt(helpLink, true, true);
+ helpLink.setImage(SkynetGuiPlugin.getInstance().getImage("help.gif"));
+ helpLink.setBackground(section.getTitleBarGradientBackground());
+ helpLink.addHyperlinkListener(new HyperlinkAdapter() {
+ public void linkActivated(HyperlinkEvent e) {
+ PlatformUI.getWorkbench().getHelpSystem().displayHelpResource(helpPath);
+ }
+ });
+ if (control == null) {
+ section.setTextClient(helpLink);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/XWidgetParser.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/XWidgetParser.java
new file mode 100644
index 00000000000..3623368b957
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/XWidgetParser.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.widgets.XOption;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class XWidgetParser {
+
+ public static List<DynamicXWidgetLayoutData> extractWorkAttributes(DynamicXWidgetLayout dynamicXWidgetLayout, String xml) throws ParserConfigurationException, SAXException, IOException {
+ Document document = Jaxp.readXmlDocument(xml);
+ Element rootElement = document.getDocumentElement();
+
+ return extractlayoutDatas(dynamicXWidgetLayout, rootElement);
+ }
+
+ public static DynamicXWidgetLayoutData extractlayoutData(DynamicXWidgetLayout dynamicXWidgetLayout, String xml) throws ParserConfigurationException, SAXException, IOException {
+ Document document = Jaxp.readXmlDocument(xml);
+ Element rootElement = document.getDocumentElement();
+ return extractWorkAttribute(dynamicXWidgetLayout, rootElement);
+ }
+
+ public static List<DynamicXWidgetLayoutData> extractlayoutDatas(DynamicXWidgetLayout dynamicXWidgetLayout, Element xWidgets) throws ParserConfigurationException, SAXException, IOException {
+ NodeList widgets = xWidgets.getElementsByTagName(DynamicXWidgetLayout.XWIDGET);
+ List<DynamicXWidgetLayoutData> layoutDatas = new ArrayList<DynamicXWidgetLayoutData>(widgets.getLength());
+
+ for (int i = 0; i < widgets.getLength(); i++) {
+ layoutDatas.add(extractWorkAttribute(dynamicXWidgetLayout, (Element) widgets.item(i)));
+ }
+ return layoutDatas;
+ }
+
+ public static String toXml(DynamicXWidgetLayoutData data) throws OseeCoreException, ParserConfigurationException, TransformerException {
+ Document doc = Jaxp.newDocument();
+ Element element = doc.createElement(DynamicXWidgetLayout.XWIDGET);
+ element.setAttribute("displayName", data.getName());
+ element.setAttribute("storageName", data.getStorageName());
+ element.setAttribute("toolTip", data.getToolTip());
+ element.setAttribute("id", data.getId());
+ element.setAttribute("xwidgetType", data.getXWidgetName());
+ element.setAttribute("defaultValue", data.getDefaultValue());
+ for (XOption xOption : data.getXOptionHandler().getXOptions()) {
+ if (xOption == XOption.ALIGN_CENTER)
+ element.setAttribute("align", "Center");
+ else if (xOption == XOption.ALIGN_LEFT)
+ element.setAttribute("align", "Left");
+ else if (xOption == XOption.ALIGN_RIGHT)
+ element.setAttribute("align", "Right");
+ else if (xOption == XOption.EDITABLE)
+ element.setAttribute("editable", "true");
+ else if (xOption == XOption.BEGIN_COMPOSITE_4)
+ element.setAttribute("beginComposite", "4");
+ else if (xOption == XOption.BEGIN_COMPOSITE_6)
+ element.setAttribute("beginComposite", "6");
+ else if (xOption == XOption.BEGIN_COMPOSITE_8)
+ element.setAttribute("beginComposite", "8");
+ else if (xOption == XOption.BEGIN_COMPOSITE_10)
+ element.setAttribute("beginComposite", "10");
+ else if (xOption == XOption.END_COMPOSITE)
+ element.setAttribute("endComposite", "true");
+ else if (xOption == XOption.NOT_EDITABLE)
+ element.setAttribute("editable", "false");
+ else if (xOption == XOption.ENABLED)
+ element.setAttribute("enabled", "true");
+ else if (xOption == XOption.NOT_ENABLED)
+ element.setAttribute("enabled", "false");
+ else if (xOption == XOption.REQUIRED)
+ element.setAttribute("required", "true");
+ else if (xOption == XOption.NOT_REQUIRED)
+ element.setAttribute("required", "false");
+ else if (xOption == XOption.FILL_HORIZONTALLY)
+ element.setAttribute("fill", "Horizontally");
+ else if (xOption == XOption.FILL_VERTICALLY)
+ element.setAttribute("fill", "Vertically");
+ else if (xOption == XOption.HORIZONTAL_LABEL)
+ element.setAttribute("horizontalLabel", "true");
+ else if (xOption == XOption.VERTICAL_LABEL)
+ element.setAttribute("horizontalLabel", "false");
+ else if (xOption == XOption.LABEL_AFTER)
+ element.setAttribute("labelAfter", "true");
+ else if (xOption == XOption.LABEL_BEFORE)
+ element.setAttribute("labelAfter", "false");
+ else if (xOption == XOption.NONE)
+ // do nothing
+ ;
+ else
+ throw new OseeArgumentException("Unhandled xOption \"" + xOption + "\"");
+ }
+ doc.appendChild(element);
+ return Jaxp.getDocumentXml(doc);
+ }
+
+ private static DynamicXWidgetLayoutData extractWorkAttribute(DynamicXWidgetLayout dynamicXWidgetLayout, Element widget) {
+ DynamicXWidgetLayoutData dynamicXWidgetLayoutData = new DynamicXWidgetLayoutData(dynamicXWidgetLayout);
+
+ // Loop through attributes to ensure all are valid and processed
+ NamedNodeMap attributes = widget.getAttributes();
+ for (int x = 0; x < attributes.getLength(); x++) {
+ Node node = attributes.item(x);
+ String nodeName = node.getNodeName();
+ if (nodeName.equals("displayName")) {
+ dynamicXWidgetLayoutData.setName(node.getNodeValue());
+ if (dynamicXWidgetLayoutData.getStorageName().equals("")) dynamicXWidgetLayoutData.setStorageName(node.getNodeValue());
+ } else if (nodeName.equals("storageName")) {
+ dynamicXWidgetLayoutData.setStorageName(node.getNodeValue());
+ if (dynamicXWidgetLayoutData.getName().equals("")) dynamicXWidgetLayoutData.setName(node.getNodeValue());
+ } else if (nodeName.equals("toolTip"))
+ dynamicXWidgetLayoutData.setToolTip(node.getNodeValue());
+ else if (nodeName.equals("id"))
+ dynamicXWidgetLayoutData.setId(node.getNodeValue());
+ else if (nodeName.equals("horizontalLabel"))
+ dynamicXWidgetLayoutData.getXOptionHandler().add(
+ Boolean.parseBoolean((node.getNodeValue())) ? XOption.HORIZONTAL_LABEL : XOption.NONE);
+ else if (nodeName.equals("labelAfter"))
+ dynamicXWidgetLayoutData.getXOptionHandler().add(
+ Boolean.parseBoolean((node.getNodeValue())) ? XOption.LABEL_AFTER : XOption.NONE);
+ else if (nodeName.equals("required"))
+ dynamicXWidgetLayoutData.getXOptionHandler().add(
+ Boolean.parseBoolean(node.getNodeValue()) ? XOption.REQUIRED : XOption.NONE);
+ else if (nodeName.equals("beginComposite"))
+ dynamicXWidgetLayoutData.setBeginComposite(Integer.parseInt(node.getNodeValue()));
+ else if (nodeName.equals("endComposite"))
+ dynamicXWidgetLayoutData.setEndComposite(Boolean.parseBoolean((node.getNodeValue())));
+ else if (nodeName.equals("editable"))
+ dynamicXWidgetLayoutData.getXOptionHandler().add(
+ Boolean.parseBoolean(node.getNodeValue()) ? XOption.EDITABLE : XOption.NONE);
+ else if (nodeName.equals("xwidgetType"))
+ dynamicXWidgetLayoutData.setXWidgetName(node.getNodeValue());
+ else if (nodeName.equals("fill")) {
+ String value = node.getNodeValue();
+ if (value.equalsIgnoreCase("Horizontally"))
+ dynamicXWidgetLayoutData.getXOptionHandler().add(XOption.FILL_HORIZONTALLY);
+ else if (value.equalsIgnoreCase("Vertically"))
+ dynamicXWidgetLayoutData.getXOptionHandler().add(XOption.FILL_VERTICALLY);
+ else
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, new IllegalArgumentException(
+ "Unknown Fill Value \"" + value + "\""));
+ } else if (nodeName.equals("height"))
+ dynamicXWidgetLayoutData.setHeight(Integer.parseInt(node.getNodeValue()));
+ else if (nodeName.equals("align")) {
+ String value = node.getNodeValue();
+ if (value.equalsIgnoreCase("Left"))
+ dynamicXWidgetLayoutData.getXOptionHandler().add(XOption.ALIGN_LEFT);
+ else if (value.equalsIgnoreCase("Right"))
+ dynamicXWidgetLayoutData.getXOptionHandler().add(XOption.ALIGN_RIGHT);
+ else if (value.equalsIgnoreCase("Center"))
+ dynamicXWidgetLayoutData.getXOptionHandler().add(XOption.ALIGN_CENTER);
+ else
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, new IllegalArgumentException(
+ "Unknown Align Value \"" + value + "\""));
+ } else if (nodeName.equals("defaultValue"))
+ dynamicXWidgetLayoutData.setDefaultValue(node.getNodeValue());
+ else if (nodeName.equals("keyedBranch"))
+ dynamicXWidgetLayoutData.setKeyedBranchName(node.getNodeValue());
+ else {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, new IllegalArgumentException(
+ "Unsupported XWidget attribute \"" + nodeName + "\""));
+ }
+ }
+
+ return dynamicXWidgetLayoutData;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/OseeSecurityManager.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/OseeSecurityManager.java
new file mode 100644
index 00000000000..c0dc757d49e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/OseeSecurityManager.java
@@ -0,0 +1,138 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.access;
+
+import java.util.ArrayList;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.access.NoPoliciesException;
+import org.eclipse.osee.framework.skynet.core.access.PermissionList;
+import org.eclipse.swt.widgets.MenuItem;
+
+/**
+ * Provides security for OSEE applications
+ *
+ * @author Jeff C. Phillips
+ */
+
+public class OseeSecurityManager extends SecurityManager {
+
+ private static OseeSecurityManager ref = null;
+
+ // private AccessControl accessControl = null;
+
+ OseeSecurityManager() {
+ // accessControl = new AccessControl();
+ }
+
+ public static synchronized OseeSecurityManager getInstance() {
+ if (ref == null) {
+ ref = new OseeSecurityManager();
+ }
+ return ref;
+ }
+
+ /**
+ * @param person
+ * @param policyIds
+ * @throws SecurityException if a person does not have permission for action
+ * @throws NoPoliciesException if a person does not have any policies
+ */
+ public void checkPermission(User person, ArrayList<Integer> policyIds) throws SecurityException, NoPoliciesException {
+ return;
+
+ // for (int policyId : policyIds)
+ // checkPermission(person, null, policyId);
+ }
+
+ public void checkPermission(MenuItem[] items, User person, ArrayList<Integer> policyIds) {
+ return;
+
+ // for (MenuItem item : items)
+ // for (int policyId : policyIds)
+ // checkPermission(item, person, policyId);
+ }
+
+ public void checkPermission(MenuItem item, User person, ArrayList<Integer> policyIds) {
+ return;
+
+ // for (int policyId : policyIds)
+ // checkPermission(item, person, policyId);
+ }
+
+ /**
+ * @param item
+ * @param person
+ * @param policyId
+ * @throws SecurityException
+ * @throws NoPoliciesException
+ */
+ public void checkPermission(MenuItem item, User person, int policyId) {
+ return;
+
+ // try {
+ // checkPermission(person, null, policyId);
+ // item.setEnabled(true);
+ // item.setImage(null);
+ // }
+ // catch (NoPoliciesException ex) {
+ // item.setEnabled(false);
+ // item.setImage(CorePlugin.getInstance().getImage("errorSm.gif"));
+ // }
+ // catch (SecurityException ex) {
+ // item.setEnabled(false);
+ // item.setImage(CorePlugin.getInstance().getImage("permission.bmp"));
+ // }
+ }
+
+ /**
+ * @param person
+ * @param permission
+ * @throws SecurityException if a person does not have permission for action
+ * @throws NoPoliciesException if a person does not have any policies
+ */
+ public void checkPermission(User person, PermissionList permission) throws SecurityException, NoPoliciesException {
+ return;
+
+ // checkPermission(person, permission, -1);
+ }
+
+ public void checkPermission(PermissionList permission) throws SecurityException, NoPoliciesException, OseeCoreException {
+ checkPermission(UserManager.getUser(), permission);
+ }
+
+ /**
+ * @param person person object containing policies
+ * @param permission permission to perform a specific action
+ * @throws SecurityException if a person does not have permission for action
+ * @throws NoPoliciesException if a person does not have any policies
+ */
+ public void checkPermission(User person, PermissionList permission, int policyId) throws SecurityException, NoPoliciesException {
+ return;
+
+ // if (ConfigUtil.getConfigFactory().getOseeConfig().isBypassSecurity() || true)
+ // return;
+ //
+ // if (person == null)
+ // return;
+ //
+ // if (!person.getPolicies().isEmpty()) {
+ //
+ // if (policyId < 0 && permission != null)
+ // accessControl.checkPermission(person, permission);
+ // else
+ // accessControl.checkPermission(person, policyId);
+ // }
+ // else
+ // throw new NoPoliciesException(person.getName());
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyDialog.java
new file mode 100644
index 00000000000..331edf51afe
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyDialog.java
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.access;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.logging.Level;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlData;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+
+/**
+ * GUI that is used to maintain an <Code>Artifact</Code> access contol list.
+ *
+ * @author Jeff C. Phillips
+ */
+public class PolicyDialog extends Dialog {
+ private PolicyTableViewer policyTableViewer;
+ private Button radEnabled;
+ private Button radDisabled;
+ private Button btnAdd;
+ private Button chkChildrenPermission;
+ private Combo cmbUsers;
+ private Combo cmbPermissionLevel;
+ private final Object object;
+ private Label accessLabel;
+
+ public PolicyDialog(Shell parentShell, Object object) {
+ super(parentShell);
+
+ this.object = object;
+ setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | getDefaultOrientation() | SWT.RESIZE);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ getShell().setText("Access Control List: " + getHeadertName(object));
+ Composite mainComposite = new Composite(parent, SWT.NONE);
+ mainComposite.setFont(parent.getFont());
+ mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ mainComposite.setLayout(new GridLayout(1, false));
+
+ addDialogContols(mainComposite);
+ try {
+ setInputs();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ addListeners();
+ checkEnabled();
+
+ return mainComposite;
+ }
+
+ private void setInputs() throws OseeCoreException {
+ cmbUsers.setText("-Select Person-");
+ cmbPermissionLevel.setText("-Select Permission-");
+ ArrayList<Artifact> subjectList = new ArrayList<Artifact>();
+ subjectList.addAll(UserManager.getUsersSortedByName());
+ subjectList.addAll(ArtifactQuery.getArtifactsFromType("User Group", BranchManager.getCommonBranch()));
+ Collections.sort(subjectList, new userComparator<Artifact>());
+ for (Artifact subject : subjectList) {
+ String name = subject.getDescriptiveName();
+ cmbUsers.add(name);
+ cmbUsers.setData(name, subject);
+ }
+
+ PermissionEnum[] permissions = PermissionEnum.values();
+ Arrays.sort(permissions, new Comparator<PermissionEnum>() {
+
+ public int compare(PermissionEnum o1, PermissionEnum o2) {
+ return o1.getName().compareToIgnoreCase(o2.getName());
+ }
+ });
+
+ for (PermissionEnum permission : permissions) {
+ if (!permission.equals(PermissionEnum.LOCK)) {
+ cmbPermissionLevel.add(permission.getName() + " - Rank = " + permission.getRank() + "");
+ cmbPermissionLevel.setData(permission.getName(), permission);
+ }
+ }
+ }
+ private class userComparator<T> implements Comparator<T> {
+
+ /* (non-Javadoc)
+ * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+ */
+ @Override
+ public int compare(T o1, T o2) {
+ if (o1 instanceof Artifact && o2 instanceof Artifact) {
+ return ((Artifact) o1).getDescriptiveName().compareToIgnoreCase(((Artifact) o2).getDescriptiveName());
+ }
+ return 0;
+ }
+
+ }
+
+ private void addListeners() {
+ radDisabled.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ checkEnabled();
+ }
+ });
+
+ radEnabled.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ checkEnabled();
+ }
+ });
+
+ btnAdd.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ Artifact subject = (Artifact) cmbUsers.getData(cmbUsers.getText().replaceAll(" - Rank.*", ""));
+ PermissionEnum permission =
+ (PermissionEnum) cmbPermissionLevel.getData(cmbPermissionLevel.getText().replaceAll(" - Rank.*", ""));
+
+ if (subject != null && permission != null) {
+ policyTableViewer.addItem(subject, object, permission);
+ }
+ }
+ });
+ }
+
+ private void addDialogContols(Composite mainComposite) {
+
+ accessLabel = new Label(mainComposite, SWT.NONE);
+
+ radDisabled = new Button(mainComposite, SWT.RADIO);
+ radDisabled.setText("Disabled");
+ radDisabled.setEnabled(false);
+
+ radEnabled = new Button(mainComposite, SWT.RADIO);
+ radEnabled.setText("Enabled");
+
+ Group group = new Group(mainComposite, SWT.NULL);
+ group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ group.setLayout(new GridLayout(1, false));
+
+ Table table = new Table(group, SWT.BORDER | SWT.V_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION);
+ policyTableViewer = new PolicyTableViewer(table, object);
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.heightHint = 100;
+ gridData.widthHint = 500;
+ table.setLayoutData(gridData);
+
+ Composite composite = new Composite(group, SWT.NONE);
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
+ composite.setLayout(new GridLayout(3, false));
+
+ cmbUsers = new Combo(composite, SWT.NONE);
+ cmbPermissionLevel = new Combo(composite, SWT.NONE);
+ btnAdd = new Button(composite, SWT.PUSH);
+ btnAdd.setText("Add");
+
+ (new Label(group, SWT.NONE)).setText(" NOTE: Higher permission rank overrides lower rank.");
+
+ chkChildrenPermission = new Button(mainComposite, SWT.CHECK);
+ chkChildrenPermission.setText("Set permission for artifact's default hierarchy descendents.");
+ }
+
+ private void checkEnabled() {
+ // get information from db
+ boolean accessEnabled;
+ try {
+ accessEnabled = AccessControlManager.checkObjectPermission(object, PermissionEnum.WRITE);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ accessEnabled = false;
+ }
+
+ accessLabel.setText(accessEnabled ? "" : "You do not have permissions to modify access.");
+ radEnabled.setSelection(true);
+
+ boolean enable = radEnabled.getSelection() && accessEnabled;
+ boolean isArtifact = object instanceof Artifact;
+
+ cmbUsers.setEnabled(enable);
+ cmbPermissionLevel.setEnabled(enable);
+ btnAdd.setEnabled(enable);
+ policyTableViewer.setEnabled(enable);
+
+ chkChildrenPermission.setEnabled(isArtifact);
+ }
+
+ @Override
+ protected void okPressed() {
+ for (AccessControlData data : policyTableViewer.getAccessControlList().values()) {
+ if (data.isDirty()) data.persist(chkChildrenPermission.getSelection());
+ }
+ super.okPressed();
+ }
+
+ private String getHeadertName(Object object) {
+ String name = "";
+ if (object instanceof Artifact) {
+ name = ((Artifact) object).getDescriptiveName();
+ } else if (object instanceof Branch) {
+ name = ((Branch) object).getBranchName();
+ }
+ return name;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyLabelProvider.java
new file mode 100644
index 00000000000..592f7025318
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyLabelProvider.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.access;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlData;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.ui.plugin.OseePluginUiActivator;
+import org.eclipse.osee.framework.ui.skynet.access.PolicyTableViewer.Columns;
+import org.eclipse.swt.graphics.Image;
+
+public class PolicyLabelProvider implements ITableLabelProvider {
+
+ public PolicyLabelProvider() {
+ super();
+ };
+
+ /**
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+ */
+ public String getColumnText(Object element, int columnIndex) {
+ try {
+ if (element instanceof AccessControlData) {
+ AccessControlData data = (AccessControlData) element;
+ if (columnIndex == Columns.Person.ordinal()) {
+ return data.getSubject().getDescriptiveName();
+ } else if (columnIndex == Columns.Branch.ordinal()) {
+ PermissionEnum permissionEnum = data.getBranchPermission();
+ if (permissionEnum != null) return permissionEnum.getName();
+ } else if (columnIndex == Columns.Artifact.ordinal()) {
+ PermissionEnum permissionEnum = data.getArtifactPermission();
+ if (permissionEnum != null) return permissionEnum.getName();
+ } else if (columnIndex == Columns.Artifact_Type.ordinal()) {
+ PermissionEnum permissionEnum = data.getArtifactTypePermission();
+ if (permissionEnum != null) return permissionEnum.getName();
+ } else if (columnIndex == Columns.Total.ordinal()) {
+ PermissionEnum permissionEnum = data.getPermission();
+ if (permissionEnum != null) return permissionEnum.getName();
+ }
+ }
+ } catch (Exception ex) {
+ return "Error: " + ex.getLocalizedMessage();
+ }
+ return "";
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+ */
+ public Image getColumnImage(Object element, int columnIndex) {
+ if (columnIndex == Columns.Delete.ordinal()) return OseePluginUiActivator.getInstance().getImage("remove.gif");
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+ * java.lang.String)
+ */
+ public boolean isLabelProperty(Object element, String property) {
+ return true;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyTableCellModifier.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyTableCellModifier.java
new file mode 100644
index 00000000000..9502f64dc7f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyTableCellModifier.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.access;
+
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlData;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.ui.skynet.access.PolicyTableViewer.Columns;
+import org.eclipse.swt.widgets.TableItem;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class PolicyTableCellModifier implements ICellModifier {
+
+ private PolicyTableViewer policyTableViewer;
+ private boolean enabled = true;
+
+ public PolicyTableCellModifier(PolicyTableViewer policyTableViewer) {
+ super();
+ this.policyTableViewer = policyTableViewer;
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String)
+ */
+ public boolean canModify(Object element, String property) {
+ // Find the index of the column
+ int columnIndex = Columns.valueOf(property).ordinal();
+ if (columnIndex == Columns.Delete.ordinal() && isEnabled()) return true;
+ return false;
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String)
+ */
+ public Object getValue(Object element, String property) {
+ // Find the index of the column
+ int columnIndex = Columns.valueOf(property).ordinal();
+ if (columnIndex == Columns.Delete.ordinal()) {
+ return new Boolean(false);
+ } else if (columnIndex == Columns.Artifact.ordinal()) {
+ return ((AccessControlData) element).getPermission().ordinal();
+ }
+ return "";
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String, java.lang.Object)
+ */
+ public void modify(Object element, String property, Object value) {
+
+ // Find the index of the column
+ int columnIndex = Columns.valueOf(property).ordinal();
+
+ TableItem item = (TableItem) element;
+ AccessControlData data = (AccessControlData) item.getData();
+
+ if (columnIndex == Columns.Delete.ordinal()) {
+ policyTableViewer.removeData(data);
+ } else if (columnIndex == Columns.Delete.ordinal()) {
+ int index = (Integer) value;
+ if (index != -1) policyTableViewer.modifyPermissionLevel(data, PermissionEnum.values()[index]);
+ }
+ policyTableViewer.refresh();
+ }
+
+ /**
+ * @return the enabled
+ */
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ /**
+ * Don't disable entire viewer, just delete button
+ *
+ * @param enabled the enabled to set
+ */
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyTableViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyTableViewer.java
new file mode 100644
index 00000000000..7efea1e6e00
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/access/PolicyTableViewer.java
@@ -0,0 +1,211 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.access;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.CheckboxCellEditor;
+import org.eclipse.jface.viewers.ComboBoxCellEditor;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlData;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.AccessObject;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+
+/**
+ * Displays an <Code>Artifact</Code> access control list, used by the <Code>PolicyDialog</Code>.
+ *
+ * @author Jeff C. Phillips
+ */
+public class PolicyTableViewer {
+
+ private static final AccessControlManager accessManager = AccessControlManager.getInstance();
+ private Table table;
+ private TableViewer tableViewer;
+ private Map<String, AccessControlData> accessControlList;
+ private Object object;
+ public static enum Columns {
+ Delete, Person, Total, Branch, Artifact_Type, Artifact
+ };
+ private final static int[] columnWidths = new int[] {25, 125, 75, 75, 75, 75};
+ private String[] columnNames;
+
+ /**
+ * @param table -
+ */
+ public PolicyTableViewer(Table table, Object object) {
+ this.table = table;
+ this.createControl();
+ this.accessControlList = new HashMap<String, AccessControlData>();
+ this.object = object;
+
+ tableViewer.setContentProvider(new PolicyContentProvider());
+ tableViewer.setLabelProvider(new PolicyLabelProvider());
+ tableViewer.setInput(accessControlList.values());
+ }
+
+ /**
+ * Disables the cell modifiers, not the entire table so user can still scroll
+ *
+ * @param enabled
+ */
+ public void setEnabled(boolean enabled) {
+ ((PolicyTableCellModifier) tableViewer.getCellModifier()).setEnabled(enabled);
+ }
+
+ public void addItem(Artifact subject, Object object, PermissionEnum permission) {
+ AccessObject accessObject = accessManager.getAccessObject(object);
+ AccessControlData data = new AccessControlData(subject, accessObject, permission, true);
+ accessControlList.put(data.getSubject().getGuid(), data);
+ tableViewer.refresh();
+ }
+
+ private void createControl() {
+ createColumns();
+ createTableViewer();
+ }
+
+ /**
+ * Create the TableViewer
+ */
+ private void createTableViewer() {
+
+ tableViewer = new TableViewer(table);
+ tableViewer.setUseHashlookup(true);
+ columnNames = new String[Columns.values().length];
+ for (Columns col : Columns.values())
+ columnNames[col.ordinal()] = col.name();
+ tableViewer.setColumnProperties(columnNames);
+
+ CellEditor[] validEditors = new CellEditor[Columns.values().length];
+ validEditors[Columns.Delete.ordinal()] = new CheckboxCellEditor(table, SWT.NONE);
+ validEditors[Columns.Artifact.ordinal()] =
+ new ComboBoxCellEditor(table, PermissionEnum.getPermissionNames(), SWT.READ_ONLY);
+
+ // Assign the cell editors to the viewer
+ tableViewer.setCellEditors(validEditors);
+ // Assign the cell modifier to the viewer
+ tableViewer.setCellModifier(new PolicyTableCellModifier(this));
+ }
+
+ /**
+ * Create the Columns
+ */
+ private void createColumns() {
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
+
+ for (Columns col : Columns.values()) {
+ TableColumn column = new TableColumn(table, SWT.LEFT, col.ordinal());
+ column.setText(col.name());
+ column.setWidth(columnWidths[col.ordinal()]);
+ }
+
+ }
+
+ public Map<String, AccessControlData> getAccessControlList() {
+ return this.accessControlList;
+ }
+
+ public void refresh() {
+ tableViewer.refresh();
+ }
+
+ /**
+ * @return Returns the table.
+ */
+ public Table getTable() {
+ return table;
+ }
+
+ public void removeData(AccessControlData data) {
+ try {
+ accessManager.removeAccessControlData(data);
+ } catch (OseeDataStoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ accessControlList.remove(data.getSubject().getGuid());
+ }
+
+ public void modifyPermissionLevel(AccessControlData data, PermissionEnum permission) {
+ data.setPermission(permission);
+ }
+
+ public int getCount() {
+ return accessControlList.size();
+ }
+ /**
+ * InnerClass that acts as a proxy for the FilterModelList providing content for the Table. It implements the
+ * IFilterListViewer interface since it must register changeListeners with the FilterModelList
+ */
+ class PolicyContentProvider implements IStructuredContentProvider {
+
+ public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+ }
+
+ public void dispose() {
+ }
+
+ public Object[] getElements(Object object) {
+ populateSubjectsFromDb();
+ Object[] accessControlListArray = accessControlList.values().toArray();
+ Arrays.sort(accessControlListArray);
+ return accessControlListArray;
+ }
+
+ private void populateSubjectsFromDb() {
+ Collection<AccessControlData> datas = accessManager.getAccessControlList(object);
+
+ for (AccessControlData data : datas) {
+ if (!accessControlList.containsKey(data.getSubject().getGuid()) && data.getPermission() != PermissionEnum.LOCK) accessControlList.put(
+ data.getSubject().getGuid(), data);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see IFilterListViewer#addFilter(FilterModel)
+ */
+ public void addFilter(AccessControlData data) {
+ tableViewer.add(data);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see IFilterListViewer#removeFilter(FilterModel)
+ */
+ public void removeFilter(AccessControlData data) {
+ tableViewer.remove(data);
+ }
+ }
+
+ /**
+ * @return the columnNames
+ */
+ public String[] getColumnNames() {
+ return columnNames;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/ArtifactPromptChange.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/ArtifactPromptChange.java
new file mode 100644
index 00000000000..0fcfa54bc9d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/ArtifactPromptChange.java
@@ -0,0 +1,228 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.artifact;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+import org.eclipse.osee.framework.db.connection.exception.AttributeDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.skynet.core.attribute.BooleanAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.DateAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.EnumeratedAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.FloatingPointAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.IntegerAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.StringAttribute;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.artifact.EnumSelectionDialog.Selection;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.DateSelectionDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ArtifactPromptChange {
+
+ private final static String VALID_FLOAT_REG_EX = "^[0-9\\.]+$";
+ private final static String VALID_INTEGER_REG_EX = "^[0-9]+$";
+ private final static String VALID_PERCENT_REG_EX =
+ "^(0*100{1,1}\\.?((?<=\\.)0*)?%?$)|(^0*\\d{0,2}\\.?((?<=\\.)\\d*)?%?)$";
+
+ public static boolean promptChangeAttribute(String attributeName, String displayName, final Collection<? extends Artifact> artifacts, boolean persist) {
+ try {
+ Class<? extends Attribute<?>> attributeBaseType =
+ AttributeTypeManager.getType(attributeName).getBaseAttributeClass();
+ if (attributeBaseType.equals(DateAttribute.class)) {
+ return ArtifactPromptChange.promptChangeDate(attributeName, displayName, artifacts, persist);
+ } else if (attributeBaseType.equals(FloatingPointAttribute.class)) {
+ return ArtifactPromptChange.promptChangeFloatAttribute(attributeName, displayName, artifacts, persist);
+ } else if (attributeBaseType.equals(IntegerAttribute.class)) {
+ return ArtifactPromptChange.promptChangeIntegerAttribute(attributeName, displayName, artifacts, persist);
+ } else if (attributeBaseType.equals(BooleanAttribute.class)) {
+ return ArtifactPromptChange.promptChangeBoolean(attributeName, displayName, artifacts, null, persist);
+ } else if (attributeBaseType.equals(EnumeratedAttribute.class)) {
+ return ArtifactPromptChange.promptChangeEnumeratedAttribute(attributeName, displayName, artifacts, persist);
+ } else if (attributeBaseType.equals(StringAttribute.class)) {
+ return ArtifactPromptChange.promptChangeStringAttribute(attributeName, displayName, artifacts, persist,
+ true);
+ } else
+ AWorkbench.popup("ERROR", "Unhandled attribute type. Can't edit through this view");
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return false;
+ }
+
+ public static boolean promptChangeIntegerAttribute(String attributeName, String displayName, final Collection<? extends Artifact> artifacts, boolean persist) throws Exception {
+ return promptChangeStringAttribute(attributeName, displayName, VALID_INTEGER_REG_EX, artifacts, persist, false);
+ }
+
+ public static boolean promptChangeIntegerAttribute(String attributeName, String displayName, final Artifact artifact, boolean persist) throws Exception {
+ return promptChangeStringAttribute(attributeName, displayName, VALID_INTEGER_REG_EX, Arrays.asList(artifact),
+ persist, false);
+ }
+
+ public static boolean promptChangePercentAttribute(String attributeName, String displayName, final Artifact artifact, boolean persist) throws Exception {
+ return promptChangeStringAttribute(attributeName, displayName, VALID_PERCENT_REG_EX, Arrays.asList(artifact),
+ persist, false);
+ }
+
+ public static boolean promptChangePercentAttribute(String attributeName, String displayName, final Collection<? extends Artifact> artifacts, boolean persist) throws Exception {
+ return promptChangeStringAttribute(attributeName, displayName, VALID_PERCENT_REG_EX, artifacts, persist, false);
+ }
+
+ public static boolean promptChangeFloatAttribute(String attributeName, String displayName, final Artifact artifact, boolean persist) throws Exception {
+ return promptChangeFloatAttribute(attributeName, displayName, Arrays.asList(artifact), persist);
+ }
+
+ public static boolean promptChangeFloatAttribute(String attributeName, String displayName, final Collection<? extends Artifact> smas, boolean persist) throws Exception {
+ return promptChangeStringAttribute(attributeName, displayName, VALID_FLOAT_REG_EX, smas, persist, false);
+ }
+
+ public static boolean promptChangeStringAttribute(String attributeName, String displayName, final Artifact artifact, boolean persist, boolean multiLine) throws Exception {
+ return promptChangeStringAttribute(attributeName, displayName, null, Arrays.asList(artifact), persist, multiLine);
+ }
+
+ public static boolean promptChangeStringAttribute(String attributeName, String displayName, final Collection<? extends Artifact> smas, boolean persist, boolean multiLine) throws Exception {
+ return promptChangeStringAttribute(attributeName, displayName, null, smas, persist, multiLine);
+ }
+
+ public static boolean promptChangeDate(String attributeName, String displayName, Artifact artifact, boolean persist) throws Exception {
+ return promptChangeDate(attributeName, displayName, Arrays.asList(artifact), persist);
+ }
+
+ public static boolean promptChangeDate(String attributeName, String displayName, final Collection<? extends Artifact> artifacts, boolean persist) throws Exception {
+ // prompt that current release is (get from attribute); want to change
+ DateSelectionDialog diag =
+ new DateSelectionDialog("Select " + displayName, "Select " + displayName,
+ artifacts.size() == 1 ? artifacts.iterator().next().getSoleAttributeValue(attributeName, null,
+ Date.class) : null);
+ if (diag.open() == 0) {
+ for (Artifact artifact : artifacts) {
+ if (diag.isNoneSelected())
+ artifact.deleteSoleAttribute(attributeName);
+ else
+ artifact.setSoleAttributeValue(attributeName, diag.getSelectedDate());
+ if (persist) artifact.persistAttributes();
+ }
+ }
+ return true;
+ }
+
+ public static boolean promptChangeEnumeratedAttribute(String attributeName, String displayName, Artifact artifact, boolean persist) throws Exception {
+ return promptChangeEnumeratedAttribute(attributeName, displayName, Arrays.asList(artifact), persist);
+ }
+
+ public static boolean promptChangeEnumeratedAttribute(String attributeName, String displayName, final Collection<? extends Artifact> artifacts, boolean persist) throws Exception {
+ String type = artifacts.iterator().next().getArtifactTypeName();
+ for (Artifact art : artifacts) {
+ if (!type.equals(art.getArtifactTypeName())) {
+ AWorkbench.popup("ERROR", "Artifact types must all match to change enumerated type.");
+ return false;
+ }
+ }
+ EnumSelectionDialog diag = new EnumSelectionDialog(attributeName, artifacts);
+ if (diag.open() == 0) {
+ Set<String> selected = new HashSet<String>();
+ for (Object obj : diag.getResult())
+ selected.add((String) obj);
+ for (Artifact artifact : artifacts) {
+ List<String> current = artifact.getAttributesToStringList(attributeName);
+ if (diag.getSelected() == Selection.AddSelection) {
+ current.addAll(selected);
+ artifact.setAttributeValues(attributeName, current);
+ } else if (diag.getSelected() == Selection.DeleteSelected) {
+ current.removeAll(selected);
+ artifact.setAttributeValues(attributeName, current);
+ } else if (diag.getSelected() == Selection.ReplaceAll) {
+ artifact.setAttributeValues(attributeName, selected);
+ } else {
+ AWorkbench.popup("ERROR", "Unhandled selection type => " + diag.getSelected().name());
+ return false;
+ }
+ if (persist) artifact.persistAttributes();
+ }
+ }
+ return true;
+ }
+
+ public static boolean promptChangeStringAttribute(String attributeName, String displayName, String validationRegEx, final Collection<? extends Artifact> smas, boolean persist, boolean multiLine) throws OseeCoreException {
+ EntryDialog ed =
+ new EntryDialog(Display.getCurrent().getActiveShell(), "Enter " + displayName, null,
+ "Enter " + displayName, MessageDialog.QUESTION, new String[] {"OK", "Clear", "Cancel"}, 0);
+ ed.setFillVertically(multiLine);
+ if (smas.size() == 1) {
+ try {
+ Object obj = smas.iterator().next().getSoleAttributeValue(attributeName);
+ if (obj != null) ed.setEntry(String.valueOf(obj));
+ } catch (AttributeDoesNotExist ex) {
+ // do nothing - not an incorrect state
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ if (validationRegEx != null) ed.setValidationRegularExpression(validationRegEx);
+ int result = ed.open();
+ if (result == 0 || result == 1) {
+ for (Artifact sma : smas) {
+ String value = ed.getEntry();
+ if (result == 0) {
+ sma.setSoleAttributeFromString(attributeName, value);
+ } else {
+ if (attributeName.equals("Name")) {
+ throw new OseeArgumentException("Can not delete Name attribute");
+ }
+ sma.deleteSoleAttribute(attributeName);
+ }
+ if (persist) sma.persistAttributes();
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean promptChangeBoolean(String attributeName, String displayName, final Artifact artifact, String toggleMessage, boolean persist) throws OseeCoreException {
+ return promptChangeBoolean(attributeName, displayName, Arrays.asList(artifact), toggleMessage, persist);
+ }
+
+ public static boolean promptChangeBoolean(String attributeName, String displayName, final Collection<? extends Artifact> smas, String toggleMessage, boolean persist) throws OseeCoreException {
+ boolean set = false;
+ if (smas.size() == 1) set = smas.iterator().next().getSoleAttributeValue(attributeName, false);
+ MessageDialogWithToggle md =
+ new MessageDialogWithToggle(Display.getCurrent().getActiveShell(), displayName, null, displayName,
+ MessageDialog.QUESTION, new String[] {"Ok", "Cancel"}, MessageDialog.OK,
+ toggleMessage != null ? toggleMessage : displayName, set);
+
+ int result = md.open();
+ if (result == 256) {
+ for (Artifact sma : smas) {
+ sma.setSoleAttributeValue(attributeName, md.getToggleState());
+ if (persist) sma.persistAttributes();
+ }
+ return true;
+ }
+ return false;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/EnumSelectionDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/EnumSelectionDialog.java
new file mode 100644
index 00000000000..76275e06daf
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/EnumSelectionDialog.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.ui.plugin.util.ArrayTreeContentProvider;
+import org.eclipse.osee.framework.ui.plugin.util.StringLabelProvider;
+import org.eclipse.osee.framework.ui.plugin.util.StringViewerSorter;
+import org.eclipse.osee.framework.ui.skynet.widgets.XRadioButton;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class EnumSelectionDialog extends CheckedTreeSelectionDialog {
+
+ private XRadioButton addSelectedRadioButton =
+ new XRadioButton("Add selected item(s) to existing if not already chosen.");
+ private XRadioButton replaceAllRadioButton = new XRadioButton("Replace all existing with selected item(s)");
+ private XRadioButton deleteSelectedRadioButton = new XRadioButton("Remove selected item(s) if already chosen.");
+ public static enum Selection {
+ AddSelection, ReplaceAll, DeleteSelected
+ };
+ private Selection selected = Selection.AddSelection;
+
+ /**
+ * @param parent
+ * @param artifacts
+ */
+ public EnumSelectionDialog(String attributeName, Collection<? extends Artifact> artifacts) {
+ super(Display.getCurrent().getActiveShell(), new StringLabelProvider(), new ArrayTreeContentProvider());
+ setTitle("Select Options");
+ setMessage("Select option(s) to add, delete or replace.");
+ Set<String> options;
+ try {
+ options =
+ AttributeTypeManager.getValidEnumerationAttributeValues(attributeName,
+ artifacts.iterator().next().getBranch());
+ } catch (Exception ex) {
+ options = new HashSet<String>();
+ options.add(ex.getLocalizedMessage());
+ }
+ setInput(options);
+ setComparator(new StringViewerSorter());
+ }
+
+ @Override
+ protected Control createDialogArea(Composite container) {
+ Control c = super.createDialogArea(container);
+
+ Composite comp = new Composite(container, SWT.NONE);
+ comp.setLayout(new GridLayout(2, false));
+
+ addSelectedRadioButton.createWidgets(comp, 2);
+ addSelectedRadioButton.setSelected(true);
+ addSelectedRadioButton.addSelectionListener(new SelectionAdapter() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ if (addSelectedRadioButton.isSelected()) selected = Selection.AddSelection;
+ }
+ });
+
+ replaceAllRadioButton.createWidgets(comp, 2);
+ replaceAllRadioButton.addSelectionListener(new SelectionAdapter() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ if (replaceAllRadioButton.isSelected()) selected = Selection.ReplaceAll;
+ }
+ });
+
+ deleteSelectedRadioButton.createWidgets(comp, 2);
+ deleteSelectedRadioButton.addSelectionListener(new SelectionAdapter() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ if (deleteSelectedRadioButton.isSelected()) selected = Selection.DeleteSelected;
+ }
+ });
+ return c;
+ }
+
+ public Selection getSelected() {
+ return selected;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/OpenArtifactAction.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/OpenArtifactAction.java
new file mode 100644
index 00000000000..104a8326b32
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/OpenArtifactAction.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.WorkspaceFileArtifact;
+import org.eclipse.osee.framework.skynet.core.artifact.WorkspaceURL;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkspace;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class OpenArtifactAction implements IObjectActionDelegate {
+ private IWorkbenchPart targetPart;
+ private Shell shell;
+
+ public OpenArtifactAction() {
+ super();
+ }
+
+ public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+ this.targetPart = targetPart;
+ shell = targetPart.getSite().getShell();
+ }
+
+ public void run(IAction action) {
+ Object object = (Object) AWorkspace.getSelection(targetPart).getFirstElement();
+ Artifact artifact = null;
+ IFile iFile = null;
+
+ if (object instanceof IFile) {
+ iFile = (IFile) object;
+ try {
+ artifact = WorkspaceFileArtifact.getArtifactFromWorkspaceFile(WorkspaceURL.getURL(iFile), shell);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+
+ if (artifact != null) {
+ ArtifactEditor.editArtifact(artifact);
+ }
+ }
+ }
+
+ public void selectionChanged(IAction action, ISelection selection) {
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/SkynetGuiArtifactFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/SkynetGuiArtifactFactory.java
new file mode 100644
index 00000000000..2de37f127a4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/SkynetGuiArtifactFactory.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact;
+
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.GlobalPreferences;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.XViewerCustomizationArtifact;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class SkynetGuiArtifactFactory extends ArtifactFactory {
+ private static SkynetGuiArtifactFactory factory = null;
+
+ private SkynetGuiArtifactFactory(int factoryId) {
+ super(factoryId);
+ }
+
+ public static SkynetGuiArtifactFactory getInstance(int factoryId) {
+ if (factory == null) {
+ factory = new SkynetGuiArtifactFactory(factoryId);
+ }
+ return factory;
+ }
+
+ public static SkynetGuiArtifactFactory getInstance() {
+ return factory;
+ }
+
+ public @Override
+ Artifact getArtifactInstance(String guid, String humandReadableId, String factoryKey, Branch branch, ArtifactType artifactType) {
+ if (factoryKey.equals(XViewerCustomizationArtifact.ARTIFACT_TYPE_NAME)) {
+ return new XViewerCustomizationArtifact(this, guid, humandReadableId, branch, artifactType);
+ }
+ if (factoryKey.equals(GlobalPreferences.ARTIFACT_NAME)) {
+ return new GlobalPreferences(this, guid, humandReadableId, branch, artifactType);
+ }
+
+ throw new IllegalArgumentException("did not recognize the factory key: " + factoryKey);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/annotation/AnnotationComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/annotation/AnnotationComposite.java
new file mode 100644
index 00000000000..df4fd2c4f04
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/annotation/AnnotationComposite.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.annotation;
+
+import java.util.logging.Level;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.annotation.ArtifactAnnotation;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class AnnotationComposite extends Composite {
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public AnnotationComposite(Composite parent, int style, Artifact artifact) {
+ this(null, parent, style, artifact);
+ }
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public AnnotationComposite(FormToolkit toolkit, Composite parent, int style, Artifact artifact) {
+ super(parent, style);
+
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = 4;
+ setLayoutData(gd);
+ setLayout(ALayout.getZeroMarginLayout(2, false));
+
+ for (ArtifactAnnotation.Type type : ArtifactAnnotation.Type.getOrderedTypes()) {
+ for (ArtifactAnnotation notify : artifact.getAnnotations()) {
+ if (notify.getType() != type) continue;
+ if (notify.getType() == ArtifactAnnotation.Type.None) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, new IllegalStateException(
+ "None is an invalid annotation type - " + artifact.getHumanReadableId()));
+ continue;
+ }
+ Label iconLabel = toolkit != null ? toolkit.createLabel(this, "") : new Label(this, SWT.NONE);
+ iconLabel.setImage(notify.getType().getImage());
+
+ Label alertLabel = toolkit != null ? toolkit.createLabel(this, "") : new Label(this, SWT.NONE);
+ alertLabel.setText(notify.getType().name() + ": " + notify.getContent());
+ }
+ }
+ if (toolkit != null) toolkit.adapt(this);
+
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/annotation/AttributeAnnotationHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/annotation/AttributeAnnotationHandler.java
new file mode 100644
index 00000000000..5f4be7e521b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/annotation/AttributeAnnotationHandler.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.annotation;
+
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.annotation.ArtifactAnnotation;
+import org.eclipse.osee.framework.skynet.core.artifact.annotation.AttributeAnnotationManager;
+import org.eclipse.osee.framework.skynet.core.artifact.annotation.IArtifactAnnotation;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class AttributeAnnotationHandler implements IArtifactAnnotation {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.skynet.core.artifact.annotation.IArtifactAnnotation#getAnnotations(org.eclipse.osee.framework.skynet.core.artifact.Artifact)
+ */
+ public void getAnnotations(Artifact artifact, Set<ArtifactAnnotation> annotations) {
+ try {
+ if (artifact.isAttributeTypeValid(AttributeAnnotationManager.ANNOTATION_ATTRIBUTE)) {
+ AttributeAnnotationManager mgr = new AttributeAnnotationManager(artifact);
+ annotations.addAll(mgr.getAnnotations());
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/AbstractArtifactEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/AbstractArtifactEditor.java
new file mode 100644
index 00000000000..545674660ce
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/AbstractArtifactEditor.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.editor;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.XFormToolkit;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.forms.editor.FormEditor;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public abstract class AbstractArtifactEditor extends FormEditor implements IDirtiableEditor {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.editor.FormEditor#createToolkit(org.eclipse.swt.widgets.Display)
+ */
+ @Override
+ protected XFormToolkit createToolkit(Display display) {
+ // Create a toolkit that shares colors between editors.
+ // the toolkit will be disposed by the super class (FormEditor)
+ return new XFormToolkit(SkynetGuiPlugin.getInstance().getSharedFormColors(display));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void doSave(IProgressMonitor monitor) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.EditorPart#doSaveAs()
+ */
+ @Override
+ public void doSaveAs() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
+ */
+ @Override
+ public boolean isSaveAsAllowed() {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.jdk.core.swt.IDirtiableEditor#onDirtied()
+ */
+ public void onDirtied() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.editor.FormEditor#getToolkit()
+ */
+ @Override
+ public XFormToolkit getToolkit() {
+ return (XFormToolkit) super.getToolkit();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditor.java
new file mode 100644
index 00000000000..78fc41a5d1b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditor.java
@@ -0,0 +1,839 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.artifact.editor;
+
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.db.connection.exception.ArtifactDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactModType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.event.AccessControlEventType;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
+import org.eclipse.osee.framework.skynet.core.event.IAccessControlEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactModifiedEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactsChangeTypeEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IRelationModifiedEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.osee.framework.skynet.core.relation.RelationModType;
+import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.ArtifactExplorer;
+import org.eclipse.osee.framework.ui.skynet.AttributesComposite;
+import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
+import org.eclipse.osee.framework.ui.skynet.RelationsComposite;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.access.PolicyDialog;
+import org.eclipse.osee.framework.ui.skynet.artifact.annotation.AnnotationComposite;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchView;
+import org.eclipse.osee.framework.ui.skynet.history.RevisionHistoryView;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.ProgressEvent;
+import org.eclipse.swt.browser.ProgressListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ArtifactEditor extends MultiPageEditorPart implements IDirtiableEditor, IArtifactsPurgedEventListener, IBranchEventListener, IAccessControlEventListener, IArtifactModifiedEventListener, IArtifactsChangeTypeEventListener, IRelationModifiedEventListener, IFrameworkTransactionEventListener, IActionable {
+ public static final String EDITOR_ID = "org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor";
+ private int previewPageIndex;
+ private int attributesPageIndex;
+ private int newAttributesPageIndex;
+ private int relationsPageIndex;
+ private int detailsCompositeIndex;
+ private Artifact artifact;
+ private final MultiPageEditorPart editor;
+ private BrowserComposite previewComposite;
+ private RelationsComposite relationsComposite;
+ private AttributesComposite attributeComposite;
+ private NewAttributesComposite newAttributeComposite;
+ private DetailsBrowserComposite detailsComposite;
+ private ToolItem forward;
+ private ToolItem back;
+
+ // correspond to the indices of tool items on the toolbar
+ private static final int REVEAL_ARTIFACT_INDEX = 2;
+ private static final int EDIT_ARTIFACT_INDEX = 4;
+
+ public ArtifactEditor() {
+ super();
+ editor = this;
+ }
+
+ public RelationsComposite getRelationsComposite() {
+ return relationsComposite;
+ }
+
+ public static void editArtifacts(final Collection<Artifact> artifacts) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ try {
+ for (Artifact artifact : artifacts) {
+ if (!AccessControlManager.checkObjectPermission(artifact, PermissionEnum.READ)) {
+ OSEELog.logSevere(SkynetGuiPlugin.class,
+ "The user " + UserManager.getUser() + " does not have read access to " + artifact, true);
+ } else
+ AWorkbench.getActivePage().openEditor(new ArtifactEditorInput(artifact), EDITOR_ID);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ });
+ }
+
+ public static void editArtifact(final Artifact artifact) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ try {
+ if (!AccessControlManager.checkObjectPermission(artifact, PermissionEnum.READ)) {
+ OSEELog.logSevere(SkynetGuiPlugin.class,
+ "The user " + UserManager.getUser() + " does not have read access to " + artifact, true);
+ } else if (artifact != null) {
+ AWorkbench.getActivePage().openEditor(new ArtifactEditorInput(artifact), EDITOR_ID);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ });
+ }
+
+ @Override
+ public boolean isDirty() {
+ return reportIsDirty().isTrue();
+ }
+
+ public Result reportIsDirty() {
+ if (artifact.isDeleted()) return Result.FalseResult;
+
+ try {
+ if (artifact.isReadOnly()) return Result.FalseResult;
+ Result result = artifact.reportIsDirty(true);
+ if (result.isTrue()) return result;
+
+ //TODO The new attribute composite dirty logic is always returning true ....
+ if (false) {
+ result = newAttributeComposite.isDirty();
+ System.out.println("New Attribute Composite - isDirt => " + result);
+ if (result.isTrue()) {
+ return result;
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ return Result.FalseResult;
+ }
+
+ public void onDirtied() {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+ firePropertyChange(PROP_DIRTY);
+ }
+ });
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.MultiPageEditorPart#createPages()
+ */
+ @Override
+ protected void createPages() {
+ OseeContributionItem.addTo(this, true);
+
+ previewPageIndex = createPreviewPage();
+ setPageText(previewPageIndex, "Preview");
+
+ attributesPageIndex = createAttributesPage();
+ setPageText(attributesPageIndex, "Attributes");
+
+ if (false) {
+ newAttributesPageIndex = createNewAttributesPage();
+ setPageText(newAttributesPageIndex, "Attributes2");
+ }
+
+ relationsPageIndex = createRelationsPage();
+ setPageText(relationsPageIndex, "Relations");
+
+ detailsCompositeIndex = createDetailsPage();
+ setPageText(detailsCompositeIndex, "Details");
+
+ setPartName(getEditorInput().getName());
+ setTitleImage(artifact.getImage());
+
+ OseeEventManager.addListener(this);
+
+ }
+
+ @Override
+ public void doSave(IProgressMonitor monitor) {
+ try {
+ artifact.persistAttributesAndRelations();
+ firePropertyChange(PROP_DIRTY);
+ } catch (OseeCoreException ex) {
+ onDirtied();
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ @Override
+ public void doSaveAs() {
+ }
+
+ @Override
+ public boolean isSaveAsAllowed() {
+ return false;
+ }
+
+ @Override
+ public void setFocus() {
+ int activePage = getActivePage();
+
+ if (activePage == previewPageIndex) {
+ previewComposite.setFocus();
+ } else if (activePage == attributesPageIndex) {
+ attributeComposite.setFocus();
+ } else if (activePage == relationsPageIndex) {
+ relationsComposite.setFocus();
+ } else if (activePage == detailsCompositeIndex) {
+ detailsComposite.setFocus();
+ } else {
+ super.setFocus();
+ }
+ }
+
+ private int createPreviewPage() {
+
+ renderPreviewPage();
+ return addPage(previewComposite.getParent());
+ }
+
+ private int createDetailsPage() {
+
+ renderDetailsPage();
+ return addPage(detailsComposite.getParent());
+ }
+
+ private void renderDetailsPage() {
+ if (detailsComposite == null) {
+ Composite composite = createCommonPageComposite();
+ detailsComposite = new DetailsBrowserComposite(artifact, composite, SWT.BORDER, createToolBar(composite));
+ }
+ }
+
+ private void renderPreviewPage() {
+ if (previewComposite == null) {
+ Composite composite = createCommonPageComposite();
+ previewComposite = new BrowserComposite(composite, SWT.BORDER, createPreviewToolBar(composite));
+ if (artifact.getAnnotations().size() > 0) {
+ new AnnotationComposite(previewComposite, SWT.BORDER, artifact);
+ }
+ previewComposite.addProgressListener(new BrowserProgressListener(previewComposite, back, forward));
+ }
+
+ RendererManager.previewInComposite(previewComposite, artifact);
+ }
+
+ private int createAttributesPage() {
+ Composite composite = createCommonPageComposite();
+ attributeComposite = new AttributesComposite(this, composite, SWT.NONE, artifact, createToolBar(composite));
+
+ return addPage(composite);
+ }
+
+ private int createNewAttributesPage() {
+ Composite composite = createCommonPageComposite();
+ newAttributeComposite = new NewAttributesComposite(this, composite, SWT.NONE, artifact, createToolBar(composite));
+
+ return addPage(composite);
+ }
+
+ private Composite createCommonPageComposite() {
+ Composite composite = new Composite(getContainer(), SWT.NONE);
+ GridLayout layout = new GridLayout(1, false);
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ layout.verticalSpacing = 0;
+ composite.setLayout(layout);
+
+ return composite;
+ }
+
+ private int createRelationsPage() {
+ Composite composite = createCommonPageComposite();
+ relationsComposite = new RelationsComposite(this, composite, SWT.NONE, artifact, createToolBar(composite));
+
+ return addPage(composite);
+ }
+
+ public ToolBar createToolBar(Composite parent) {
+ return createToolBar(parent, this, artifact);
+ }
+
+ private ToolBar createPreviewToolBar(Composite parent) {
+ ToolBar toolBar = createToolBar(parent, this, artifact);
+
+ // Add Navigation Browser Navigation Buttons
+ back = new ToolItem(toolBar, SWT.NONE);
+ back.setImage(SkynetGuiPlugin.getInstance().getImage("nav_backward.gif"));
+ back.setToolTipText("Back to previous page");
+ back.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ previewComposite.back();
+ }
+ });
+ forward = new ToolItem(toolBar, SWT.NONE);
+ forward.setImage(SkynetGuiPlugin.getInstance().getImage("nav_forward.gif"));
+ forward.setToolTipText("Forward to the next page.");
+ forward.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ previewComposite.forward();
+ }
+ });
+
+ ToolItem refresh = new ToolItem(toolBar, SWT.NONE);
+ refresh.setImage(SkynetGuiPlugin.getInstance().getImage("refresh.gif"));
+ refresh.setToolTipText("Refresh the current page");
+ refresh.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ previewComposite.refresh();
+ }
+ });
+
+ ToolItem isDirty = new ToolItem(toolBar, SWT.NONE);
+ isDirty.setImage(SkynetGuiPlugin.getInstance().getImage("dirty.gif"));
+ isDirty.setToolTipText("Show what attribute or relation making editor dirty.");
+ isDirty.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ Result result = reportIsDirty();
+ AWorkbench.popup("Dirty Report", result.isFalse() ? "Not Dirty" : "Dirty -> " + result.getText());
+ }
+ });
+
+ ToolItem snapshotSave = new ToolItem(toolBar, SWT.NONE);
+ snapshotSave.setImage(SkynetGuiPlugin.getInstance().getImage("snapshotSave.gif"));
+ snapshotSave.setToolTipText("Store a snapshot of the preview by rendering the artifact and storing a copy for others to use in their preview window.");
+ snapshotSave.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ final String oldUrl = previewComposite.getUrl();
+ if (oldUrl.contains("GET.ARTIFACT") && !oldUrl.contains("&force=true")) {
+ previewComposite.setUrl(oldUrl + "&force=true");
+ Job job = new Job("Update Preview") {
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ renderPreviewPage();
+ return Status.OK_STATUS;
+ }
+ };
+ job.setUser(false);
+ job.setPriority(Job.SHORT);
+ job.schedule(2000);
+ }
+ }
+ });
+ return toolBar;
+
+ }
+
+ private ToolBar createToolBar(Composite parent, IActionable actionable, final Artifact artifact) {
+ Composite toolBarComposite = new Composite(parent, SWT.BORDER);
+ GridData gridData = new GridData(SWT.FILL, SWT.BEGINNING, true, false, 1, 1);
+ toolBarComposite.setLayoutData(gridData);
+ GridLayout layout = new GridLayout(2, false);
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ toolBarComposite.setLayout(layout);
+
+ ToolBar toolBar = new ToolBar(toolBarComposite, SWT.FLAT | SWT.RIGHT);
+
+ gridData = new GridData(SWT.FILL, SWT.BEGINNING, true, true, 1, 1);
+ toolBar.setLayoutData(gridData);
+ SkynetGuiPlugin skynetGuiPlugin = SkynetGuiPlugin.getInstance();
+ ToolItem item;
+
+ if (actionable != null) {
+ OseeAts.addButtonToEditorToolBar(actionable, SkynetGuiPlugin.getInstance(), toolBar, EDITOR_ID,
+ "Artifact Editor");
+ }
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(skynetGuiPlugin.getImage("edit.gif"));
+ item.setToolTipText("Show this artifact in the Resource History");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ RevisionHistoryView.open(artifact);
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(skynetGuiPlugin.getImage("magnify.gif"));
+ item.setToolTipText("Reveal this artifact in the Artifact Explorer");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ try {
+ ArtifactExplorer.revealArtifact(artifact);
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+ }
+ });
+ item.setEnabled(artifact.getBranch().equals(BranchManager.getDefaultBranch()));
+
+ item = new ToolItem(toolBar, SWT.SEPARATOR);
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(skynetGuiPlugin.getImage("edit_artifact.gif"));
+ item.setToolTipText("Present this artifact for editing");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ try {
+ RendererManager.editInJob(artifact);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ item.setEnabled(!artifact.isReadOnly() && artifact.getBranch().equals(BranchManager.getDefaultBranch()));
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(skynetGuiPlugin.getImage("preview_artifact.gif"));
+ item.setToolTipText("Present this artifact for previewing (read-only)");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ try {
+ RendererManager.previewInJob(artifact);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+
+ final DeleteArtifactAction deleteAction = new DeleteArtifactAction(artifact);
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(skynetGuiPlugin.getImage("delete.gif"));
+ item.setToolTipText(deleteAction.getText());
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ deleteAction.run();
+ }
+ });
+ item.setEnabled(!artifact.isReadOnly() && artifact.getBranch().equals(BranchManager.getDefaultBranch()));
+
+ item = new ToolItem(toolBar, SWT.SEPARATOR);
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("branch.gif"));
+ item.setToolTipText("Reveal the branch this artifact is on in the Branch Manager");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ BranchView.revealBranch(artifact.getBranch());
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.SEPARATOR);
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("authenticated.gif"));
+ item.setToolTipText("Access Control");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ PolicyDialog pd = new PolicyDialog(Display.getCurrent().getActiveShell(), artifact);
+ pd.open();
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.SEPARATOR);
+
+ Text artifactInfoLabel = new Text(toolBarComposite, SWT.END);
+ artifactInfoLabel.setEditable(false);
+
+ artifactInfoLabel.setText("Type: \"" + artifact.getArtifactTypeName() + "\" HRID: " + artifact.getHumanReadableId());
+ artifactInfoLabel.setToolTipText("The human readable id and database id for this artifact");
+
+ return toolBar;
+ }
+ private final class DeleteArtifactAction extends Action {
+
+ private final Artifact artifact;
+
+ public DeleteArtifactAction(Artifact artifact) {
+ super("&Delete Artifact\tDelete", Action.AS_PUSH_BUTTON);
+ this.artifact = artifact;
+ }
+
+ @Override
+ public void run() {
+ try {
+ MessageDialog dialog =
+ new MessageDialog(Display.getCurrent().getActiveShell(), "Confirm Artifact Deletion", null,
+ " Are you sure you want to delete this artifact and all of the default hierarchy children?",
+ MessageDialog.QUESTION, new String[] {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL}, 1);
+ if (dialog.open() == Window.OK) {
+ artifact.delete();
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+
+ private void checkEnabledTooltems() {
+ if (!attributeComposite.isDisposed()) {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ boolean areBranchesEqual = artifact.getBranch().equals(BranchManager.getDefaultBranch());
+ boolean isEditAllowed = artifact.isReadOnly() != true;
+
+ previewComposite.getToolBar().getItem(REVEAL_ARTIFACT_INDEX).setEnabled(areBranchesEqual);
+ previewComposite.getToolBar().getItem(EDIT_ARTIFACT_INDEX).setEnabled(isEditAllowed && areBranchesEqual);
+ previewComposite.getToolBar().update();
+
+ attributeComposite.getToolBar().getItem(REVEAL_ARTIFACT_INDEX).setEnabled(areBranchesEqual);
+ attributeComposite.getToolBar().getItem(EDIT_ARTIFACT_INDEX).setEnabled(
+ isEditAllowed && areBranchesEqual);
+ attributeComposite.getToolBar().update();
+
+ relationsComposite.getToolBar().getItem(REVEAL_ARTIFACT_INDEX).setEnabled(areBranchesEqual);
+ relationsComposite.getToolBar().getItem(EDIT_ARTIFACT_INDEX).setEnabled(
+ isEditAllowed && areBranchesEqual);
+ relationsComposite.getToolBar().update();
+ }
+ });
+ }
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ try {
+ // If the artifact is dirty when the editor get's disposed, then it needs to be reverted
+ if (!artifact.isDeleted() && (artifact.isDirty(true))) {
+ try {
+ artifact.reloadAttributesAndRelations();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ relationsComposite.disposeRelationsComposite();
+ super.dispose();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ private void changeToArtifact(final Artifact artifact) {
+ if (artifact == null || artifact == null) {
+ closeEditor();
+ return;
+ }
+
+ // The events coming to this editor are based on guid, so it is important that this case is
+ // always true.
+ if (!artifact.getGuid().equals(artifact.getGuid())) throw new IllegalArgumentException(
+ "Can only change the editor to a different version of the Artifact being editted");
+
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+
+ ArtifactEditorInput input = new ArtifactEditorInput(artifact);
+ setInput(input);
+ setPartName(artifact.getDescriptiveName());
+ setTitleImage(artifact.getImage());
+
+ attributeComposite.refreshArtifact(artifact);
+ relationsComposite.refreshArtifact(artifact);
+ renderPreviewPage();
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.EditorPart#setInput(org.eclipse.ui.IEditorInput)
+ */
+ @Override
+ protected void setInput(IEditorInput input) {
+ super.setInput(input);
+ this.artifact = ((ArtifactEditorInput) input).getArtifact();
+ }
+
+ private final class BrowserProgressListener implements ProgressListener {
+
+ private final BrowserComposite browserComposite;
+ private final ToolItem back;
+ private final ToolItem forward;
+
+ private BrowserProgressListener(BrowserComposite browserComposite, ToolItem back, ToolItem forward) {
+ this.browserComposite = browserComposite;
+ this.back = back;
+ this.forward = forward;
+ }
+
+ private void updateBackNextBusy() {
+ back.setEnabled(browserComposite.isBackEnabled());
+ forward.setEnabled(browserComposite.isForwardEnabled());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.browser.ProgressListener#changed(org.eclipse.swt.browser.ProgressEvent)
+ */
+ public void changed(ProgressEvent event) {
+ if (event.total != 0) {
+ updateBackNextBusy();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.browser.ProgressListener#completed(org.eclipse.swt.browser.ProgressEvent)
+ */
+ public void completed(ProgressEvent event) {
+ updateBackNextBusy();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, org.eclipse.osee.framework.skynet.core.artifact.Branch, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, int branchId) {
+ if (branchModType == BranchEventType.Committed) {
+ try {
+ changeToArtifact(ArtifactQuery.getArtifactFromId(artifact.getGuid(), BranchManager.getDefaultBranch()));
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ closeEditor();
+ }
+ }
+ if (branchModType == BranchEventType.DefaultBranchChanged) {
+ try {
+ if (artifact.getBranch().equals(BranchManager.getDefaultBranch()) != true && !artifact.isReadOnly()) {
+ try {
+ changeToArtifact(ArtifactQuery.getArtifactFromId(artifact.getGuid(), BranchManager.getDefaultBranch()));
+ } catch (ArtifactDoesNotExist ex) {
+ System.err.println("Attention: Artifact " + artifact.getArtId() + " does not exist on new default branch. Closing the editor.");
+ closeEditor();
+ }
+ }
+ checkEnabledTooltems();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IFrameworkTransactionEventListener#handleFrameworkTransactionEvent(org.eclipse.osee.framework.ui.plugin.event.Sender.Source, org.eclipse.osee.framework.skynet.core.eventx.FrameworkTransactionData)
+ */
+ @Override
+ public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException {
+ if (!transData.isHasEvent(artifact)) {
+ return;
+ }
+ if (transData.isDeleted(artifact)) {
+ closeEditor();
+ }
+ if (transData.isRelAddedChangedDeleted(artifact)) {
+ refreshRelationsComposite();
+ }
+ if (transData.isChanged(artifact)) {
+ refreshDirtyArtifact();
+ }
+ onDirtied();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IArtifactModifiedEventListener#handleArtifactModifiedEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.ArtifactModifiedEvent.ArtifactModType, org.eclipse.osee.framework.skynet.core.artifact.Artifact)
+ */
+ @Override
+ public void handleArtifactModifiedEvent(Sender sender, ArtifactModType artifactModType, Artifact artifact) {
+ if (!this.artifact.equals(artifact)) return;
+ if (artifactModType == ArtifactModType.Added || artifactModType == ArtifactModType.Changed || artifactModType == ArtifactModType.Reverted) {
+ refreshDirtyArtifact();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IArtifactsPurgedEventListener#handleArtifactsPurgedEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, java.util.Collection, java.util.Collection)
+ */
+ @Override
+ public void handleArtifactsPurgedEvent(Sender sender, LoadedArtifacts loadedArtifacts) {
+ try {
+ if (loadedArtifacts.getLoadedArtifacts().contains(artifact)) {
+ closeEditor();
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IArtifactsChangeTypeEventListener#handleArtifactsChangeTypeEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, int, java.util.Collection, java.util.Collection)
+ */
+ @Override
+ public void handleArtifactsChangeTypeEvent(Sender sender, int toArtifactTypeId, LoadedArtifacts loadedArtifacts) {
+ try {
+ if (loadedArtifacts.getLoadedArtifacts().contains(artifact)) {
+ closeEditor();
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ public void handleRelationModifiedEvent(Sender sender, RelationModType relationModType, RelationLink link, Branch branch, String relationType) {
+ try {
+ if (link.getArtifactA().equals(artifact) || link.getArtifactB().equals(artifact)) {
+ refreshRelationsComposite();
+ onDirtied();
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ private void refreshDirtyArtifact() {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ setPartName(getEditorInput().getName());
+ setTitleImage(artifact.getImage());
+ attributeComposite.refreshArtifact(artifact);
+ onDirtied();
+ }
+ });
+ renderPreviewPage();
+ }
+
+ private void refreshRelationsComposite() {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ if (!relationsComposite.isDisposed()) {
+ relationsComposite.refresh();
+ onDirtied();
+ }
+ }
+ });
+ }
+
+ public void closeEditor() {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ AWorkbench.getActivePage().closeEditor(editor, false);
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IAccessControlEventListener#handleAccessControlArtifactsEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.eventx.AccessControlModType, org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts)
+ */
+ @Override
+ public void handleAccessControlArtifactsEvent(Sender sender, AccessControlEventType accessControlEventType, LoadedArtifacts loadedArtifacts) {
+ try {
+ if (accessControlEventType == AccessControlEventType.ArtifactsLocked || accessControlEventType == AccessControlEventType.ArtifactsLocked) {
+ if (loadedArtifacts.getLoadedArtifacts().contains(artifact)) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ setTitleImage(artifact.getImage());
+ }
+ });
+ }
+ }
+ } catch (Exception ex) {
+ // do nothing
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorContributor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorContributor.java
new file mode 100644
index 00000000000..60a8be77677
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorContributor.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.editor;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ICoolBarManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.SelectionCountChangeListener;
+import org.eclipse.osee.framework.ui.skynet.ArtifactExplorer;
+import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.part.MultiPageEditorActionBarContributor;
+import org.eclipse.ui.texteditor.StatusLineContributionItem;
+
+/**
+ * Manages the installation/deinstallation of global actions for multi-page editors. Responsible for the redirection of
+ * global actions to the active editor. Multi-page contributor replaces the contributors for the individual editors in
+ * the multi-page editor.
+ */
+public class ArtifactEditorContributor extends MultiPageEditorActionBarContributor {
+
+ private StatusLineContributionItem typeStatusItem;
+ private ShowInExplorerAction showInExplorerAction;
+
+ /**
+ * Creates a multi-page contributor.
+ */
+ public ArtifactEditorContributor() {
+ super();
+
+ createActions();
+ }
+
+ @Override
+ public void setActiveEditor(IEditorPart part) {
+ super.setActiveEditor(part);
+ if (part instanceof ArtifactEditor) {
+ ArtifactEditor artifactEditor = (ArtifactEditor) part;
+ Artifact artifact = ((ArtifactEditorInput) artifactEditor.getEditorInput()).getArtifact();
+ typeStatusItem.setText(artifact.getArtifactType().getName());
+ typeStatusItem.setImage(artifact.getArtifactType().getImage());
+ showInExplorerAction.setArtifact(artifact);
+
+ artifactEditor.getRelationsComposite().getTreeViewer().addSelectionChangedListener(
+ new SelectionCountChangeListener(this.getActionBars().getStatusLineManager()));
+ }
+ }
+
+ @Override
+ public void setActivePage(IEditorPart part) {
+ }
+
+ private void createActions() {
+ typeStatusItem = new StatusLineContributionItem("skynet.artifactType", true, 25);
+ typeStatusItem.setToolTipText("The type of the artifact being edited.");
+
+ showInExplorerAction = new ShowInExplorerAction();
+ }
+
+ @Override
+ public void contributeToStatusLine(IStatusLineManager statusLineManager) {
+ statusLineManager.add(typeStatusItem);
+ OseeContributionItem.addTo(statusLineManager);
+ }
+
+ @Override
+ public void contributeToCoolBar(ICoolBarManager coolBarManager) {
+ coolBarManager.add(showInExplorerAction);
+ }
+
+ private static class ShowInExplorerAction extends Action {
+ private Artifact artifact;
+
+ public ShowInExplorerAction() {
+ setText("Show in Artifact Explorer");
+ setToolTipText("Show the Artifact being edited in the Artifact Explorer");
+ }
+
+ public void setArtifact(Artifact artifact) {
+ this.artifact = artifact;
+ }
+
+ @Override
+ public void run() {
+ ArtifactExplorer.revealArtifact(artifact);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorInput.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorInput.java
new file mode 100644
index 00000000000..a9508824e98
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorInput.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.editor;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ArtifactEditorInput implements IEditorInput {
+ protected Artifact artifact;
+
+ public ArtifactEditorInput(Artifact artifact) {
+ this.artifact = artifact;
+ }
+
+ public boolean equals(Object obj) {
+ boolean equals = false;
+ if (obj instanceof ArtifactEditorInput) {
+ ArtifactEditorInput otherEdInput = (ArtifactEditorInput) obj;
+
+ equals = (artifact == otherEdInput.artifact);
+ }
+ return equals;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#exists()
+ */
+ public boolean exists() {
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
+ */
+ public ImageDescriptor getImageDescriptor() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getName()
+ */
+ public String getName() {
+ if (artifact == null) {
+ return "No Artifact Input Provided";
+ }
+ return artifact.getVersionedName();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getPersistable()
+ */
+ public IPersistableElement getPersistable() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getToolTipText()
+ */
+ public String getToolTipText() {
+ return getName();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+ */
+ @SuppressWarnings("unchecked")
+ public Object getAdapter(Class adapter) {
+ return null;
+ }
+
+ public Artifact getArtifact() {
+ return artifact;
+ }
+
+ /**
+ * @param artifact the artifact to set
+ */
+ public void setArtifact(Artifact artifact) {
+ this.artifact = artifact;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/BrowserComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/BrowserComposite.java
new file mode 100644
index 00000000000..f9321eb2ad0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/BrowserComposite.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.artifact.editor;
+
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.browser.ProgressListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.ToolBar;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class BrowserComposite extends Composite {
+ private Browser previewBrowser;
+ private ToolBar toolBar;
+
+ public BrowserComposite(Composite parent, int style) {
+ this(parent, style, null);
+ }
+
+ public BrowserComposite(Composite parent, int style, ToolBar toolBar) {
+ super(parent, style);
+ setLayout(ALayout.getZeroMarginLayout());
+ GridData gridData = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH);
+ setLayoutData(gridData);
+
+ previewBrowser = new Browser(this, SWT.NONE);
+ gridData = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH);
+ previewBrowser.setLayoutData(gridData);
+
+ this.toolBar = toolBar;
+ }
+
+ public void setHtml(String html) throws SWTException, IllegalArgumentException {
+ previewBrowser.setText(html);
+ }
+
+ public void setUrl(String url) throws SWTException, IllegalArgumentException {
+ previewBrowser.setUrl(url);
+ }
+
+ public void refresh() {
+ previewBrowser.refresh();
+ }
+
+ public boolean back() {
+ if (previewBrowser == null) return false;
+ return previewBrowser.back();
+ }
+
+ public boolean forward() {
+ if (previewBrowser == null) return false;
+ return previewBrowser.forward();
+ }
+
+ public boolean isBackEnabled() {
+ if (previewBrowser == null) return false;
+ return previewBrowser.isBackEnabled();
+ }
+
+ public boolean isForwardEnabled() {
+ if (previewBrowser == null) return false;
+ return previewBrowser.isForwardEnabled();
+ }
+
+ public void addProgressListener(ProgressListener listener) {
+ previewBrowser.addProgressListener(listener);
+ }
+
+ /**
+ * @return the toolBar
+ */
+ protected ToolBar getToolBar() {
+ return toolBar;
+ }
+
+ protected String getUrl() {
+ return previewBrowser.getUrl();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/DetailsBrowserComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/DetailsBrowserComposite.java
new file mode 100644
index 00000000000..57c81043355
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/DetailsBrowserComposite.java
@@ -0,0 +1,48 @@
+/*
+ * Created on Oct 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.artifact.editor;
+
+import java.util.logging.Level;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.ToolBar;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class DetailsBrowserComposite extends BrowserComposite {
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public DetailsBrowserComposite(Artifact artifact, Composite parent, int style, ToolBar toolBar) {
+ super(parent, style, toolBar);
+ StringBuffer sb =
+ new StringBuffer(AHTML.getLabelValueStr("Name", artifact.getDescriptiveName()) + AHTML.newline());
+ try {
+ sb.append(AHTML.getLabelValueStr("GUID", artifact.getGuid()) + AHTML.newline());
+ sb.append(AHTML.getLabelValueStr("Branch", artifact.getBranch().toString()) + AHTML.newline());
+ sb.append(AHTML.getLabelValueStr("Branch Id", String.valueOf(artifact.getBranch().getBranchId())) + AHTML.newline());
+ sb.append(AHTML.getLabelValueStr("Artifact Id", String.valueOf(artifact.getArtId())) + AHTML.newline());
+ sb.append(AHTML.getLabelValueStr("Artifact Type Name", artifact.getArtifactTypeName()) + AHTML.newline());
+ sb.append(AHTML.getLabelValueStr("Artifact Type Id", String.valueOf(artifact.getArtTypeId())) + AHTML.newline());
+ sb.append(AHTML.getLabelValueStr("Gamma Id", String.valueOf(artifact.getGammaId())) + AHTML.newline());
+ sb.append(AHTML.getLabelValueStr("Historical", String.valueOf(artifact.isHistorical())) + AHTML.newline());
+ sb.append(AHTML.getLabelValueStr("Revision", String.valueOf(artifact.getTransactionNumber())) + AHTML.newline());
+ sb.append(AHTML.getLabelValueStr("Last Modified", String.valueOf(artifact.getLastModified())) + AHTML.newline());
+ sb.append(AHTML.getLabelValueStr("Last Modified By", String.valueOf(artifact.getLastModifiedBy())) + AHTML.newline());
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ sb.append(AHTML.getLabelStr("Exception in rendering details: ", ex.getLocalizedMessage()));
+ }
+ setHtml(AHTML.simplePage(sb.toString()));
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/NewAttributesComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/NewAttributesComposite.java
new file mode 100644
index 00000000000..177e77d85db
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/NewAttributesComposite.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.editor;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.AttributeXWidgetFactory;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DefaultXWidgetOptionResolver;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPage;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+
+public class NewAttributesComposite extends Composite {
+ private Artifact artifact;
+ private Label warningLabel;
+ private ToolBar toolBar;
+ private FormToolkit toolkit;
+ private ScrolledForm scrolledForm;
+ private Composite mainComp;
+ private WorkPage workPage;
+
+ public static final int NAME_COLUMN_INDEX = 0;
+ public static final int VALUE_COLUMN_INDEX = 1;
+ private final IDirtiableEditor iDirtiableEditor;
+
+ public NewAttributesComposite(IDirtiableEditor iDirtiableEditor, Composite parent, int style, Artifact artifact, ToolBar toolBar) {
+ super(parent, style);
+ this.iDirtiableEditor = iDirtiableEditor;
+ this.artifact = artifact;
+ this.toolBar = toolBar;
+ setLayout(ALayout.getZeroMarginLayout(1, true));
+ setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ toolkit = new FormToolkit(getDisplay());
+ scrolledForm = toolkit.createScrolledForm(this);
+ scrolledForm.setLayout(new GridLayout(1, false));
+ scrolledForm.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ mainComp = scrolledForm.getBody();
+ mainComp.setLayout(new GridLayout(1, false));
+ mainComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+ // mainComp.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW));
+ mainComp.layout();
+
+ try {
+ List<DynamicXWidgetLayoutData> widgets = new ArrayList<DynamicXWidgetLayoutData>();
+ for (AttributeType attrType : getOrderedArtifactTypes()) {
+ widgets.add(AttributeXWidgetFactory.getAttributeXWidgetProvider(attrType).getDynamicXWidgetLayoutData(
+ attrType));
+ }
+
+ workPage = new WorkPage(widgets, new DefaultXWidgetOptionResolver());
+ workPage.createBody(toolkit, mainComp, artifact, xModifiedListener, true);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ XModifiedListener xModifiedListener = new XModifiedListener() {
+ public void widgetModified(XWidget widget) {
+ System.out.println("new attr comp - modified listener");
+ mainComp.layout();
+ iDirtiableEditor.onDirtied();
+ };
+ };
+
+ public Result isDirty() throws Exception {
+ if (workPage == null) return Result.FalseResult;
+ for (DynamicXWidgetLayoutData xLayoutData : workPage.getlayoutDatas()) {
+ for (XWidget widget : xLayoutData.getDynamicXWidgetLayout().getXWidgets()) {
+ if (widget instanceof IArtifactWidget) {
+ Result result = ((IArtifactWidget) widget).isDirty();
+ if (result.isTrue()) return result;
+ }
+ }
+ }
+ return Result.FalseResult;
+ }
+
+ private List<AttributeType> getOrderedArtifactTypes() throws Exception {
+ List<AttributeType> allTypes = new ArrayList<AttributeType>(artifact.getAttributeTypes());
+ List<AttributeType> types = new ArrayList<AttributeType>();
+
+ // Name attribute first
+ for (AttributeType type : artifact.getAttributeTypes()) {
+ if (type.getName().equals("Name")) {
+ types.add(type);
+ allTypes.remove(type);
+ break;
+ }
+ }
+
+ // All all attributes that have a value
+ for (AttributeType attributeType : artifact.getAttributeTypes()) {
+ if (artifact.getAttributes(attributeType.getName()).size() > 0 && !attributeType.getName().equals("Name")) {
+ types.add(attributeType);
+ allTypes.remove(attributeType);
+ }
+ }
+
+ // Add all remaining
+ types.addAll(allTypes);
+
+ return types;
+ }
+
+ public void updateLabel(String msg) {
+ warningLabel.setText(msg);
+ layout();
+ }
+
+ public Artifact getArtifact() {
+ return artifact;
+ }
+
+ /**
+ * @return the toolBar
+ */
+ public ToolBar getToolBar() {
+ return toolBar;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditor.java
new file mode 100644
index 00000000000..c240d595c59
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditor.java
@@ -0,0 +1,371 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.massEditor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.AbstractArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateComposite.TableLoadOption;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MassArtifactEditor extends AbstractArtifactEditor implements IDirtiableEditor, IBranchEventListener, IActionable {
+ public static final String EDITOR_ID = "org.eclipse.osee.framework.ui.skynet.massEditor.MassArtifactEditor";
+ private int artifactsPageIndex;
+ private Collection<? extends Artifact> artifacts = new HashSet<Artifact>();
+ private MassXViewer xViewer;
+ private Label branchLabel;
+
+ /**
+ * @return the xViewer
+ */
+ public MassXViewer getXViewer() {
+ return xViewer;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.artifact.editor.AbstractArtifactEditor#doSave(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void doSave(IProgressMonitor monitor) {
+ try {
+ Artifacts.persistInTransaction(artifacts);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ onDirtied();
+ }
+
+ public static void editArtifacts(final String name, final Collection<? extends Artifact> artifacts, TableLoadOption... tableLoadOptions) {
+ Set<TableLoadOption> options = new HashSet<TableLoadOption>();
+ options.addAll(Arrays.asList(tableLoadOptions));
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ boolean accessControlFilteredResults = false;
+ try {
+ Set<Artifact> accessibleArts = new HashSet<Artifact>();
+ for (Artifact artifact : artifacts) {
+ if (!AccessControlManager.checkObjectPermission(artifact, PermissionEnum.READ)) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO,
+ "The user " + UserManager.getUser() + " does not have read access to " + artifact);
+ accessControlFilteredResults = true;
+ } else
+ accessibleArts.add(artifact);
+ }
+ if (accessibleArts.size() == 0)
+ AWorkbench.popup("ERROR", "No Artifacts to edit");
+ else
+
+ AWorkbench.getActivePage().openEditor(
+ new MassArtifactEditorInput(name, accessibleArts, new MassXViewerFactory(accessibleArts)),
+ EDITOR_ID);
+ if (accessControlFilteredResults) AWorkbench.popup("ERROR",
+ "Some Artifacts not loaded due to access control limitations.");
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }, options.contains(TableLoadOption.ForcePend));
+ }
+
+ public static void editArtifact(final Artifact artifact, TableLoadOption... tableLoadOptions) {
+ editArtifacts("", Arrays.asList(artifact));
+ }
+
+ public void createTaskActionBar(Composite parent) {
+
+ // Button composite for state transitions, etc
+ Composite bComp = new Composite(parent, SWT.NONE);
+ // bComp.setBackground(mainSComp.getDisplay().getSystemColor(SWT.COLOR_CYAN));
+ bComp.setLayout(ALayout.getZeroMarginLayout(2, false));
+ bComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Composite leftComp = new Composite(bComp, SWT.NONE);
+ leftComp.setLayout(new GridLayout());
+ leftComp.setLayoutData(new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL));
+
+ branchLabel = new Label(leftComp, SWT.NONE);
+ branchLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Composite rightComp = new Composite(bComp, SWT.NONE);
+ rightComp.setLayout(new GridLayout());
+ rightComp.setLayoutData(new GridData(GridData.END));
+
+ ToolBar toolBar = new ToolBar(rightComp, SWT.FLAT | SWT.RIGHT);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ toolBar.setLayoutData(gd);
+ ToolItem item = null;
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("refresh.gif"));
+ item.setToolTipText("Refresh");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ xViewer.refresh();
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("customize.gif"));
+ item.setToolTipText("Customize Table");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ xViewer.getCustomizeMgr().handleTableCustomization();
+ }
+ });
+
+ OseeAts.addButtonToEditorToolBar(this, SkynetGuiPlugin.getInstance(), toolBar, EDITOR_ID, "Mass Artifact Editor");
+ }
+
+ public static void editArtifacts(final MassArtifactEditorInput input) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ try {
+ page.openEditor(input, EDITOR_ID);
+ } catch (PartInitException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ });
+
+ }
+
+ @Override
+ public boolean isSaveOnCloseNeeded() {
+ return isDirty();
+ }
+
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ super.dispose();
+
+ for (Artifact taskArt : artifacts)
+ try {
+ if (taskArt != null && !taskArt.isDeleted() && taskArt.isDirty()) taskArt.reloadAttributesAndRelations();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ public ArrayList<Artifact> getLoadedArtifacts() {
+ return xViewer.getLoadedArtifacts();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.editor.FormEditor#isDirty()
+ */
+ @Override
+ public boolean isDirty() {
+ for (Artifact taskArt : artifacts) {
+ if (!taskArt.isDeleted() && taskArt.isDirty()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return "MassArtifactEditor";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
+ */
+ @Override
+ protected void addPages() {
+
+ IEditorInput editorInput = getEditorInput();
+ if (editorInput instanceof MassArtifactEditorInput) {
+ MassArtifactEditorInput aei = (MassArtifactEditorInput) editorInput;
+ artifacts = (aei).getArtifacts();
+ } else
+ throw new IllegalArgumentException("Editor Input not TaskEditorInput");
+
+ if (((MassArtifactEditorInput) editorInput).getName().equals(""))
+ setPartName("Mass Artifact Editor");
+ else
+ setPartName(((MassArtifactEditorInput) editorInput).getName());
+
+ SkynetGuiPlugin.getInstance().setHelp(getContainer(), "mass_artifact_editor");
+
+ Composite comp = new Composite(getContainer(), SWT.NONE);
+ comp.setLayout(new GridLayout(1, true));
+ comp.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ createTaskActionBar(comp);
+
+ xViewer = new MassXViewer(comp, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION, this);
+ xViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+ xViewer.setContentProvider(new org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassContentProvider(
+ xViewer));
+ xViewer.setLabelProvider(new org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassLabelProvider(xViewer));
+ branchLabel.setText("Branch: " + (getBranch() == null ? "No Artifacts Returned" : getBranch().getBranchShortName()));
+ artifactsPageIndex = addPage(comp);
+ setPageText(artifactsPageIndex, "Artifacts");
+
+ Tree tree = xViewer.getTree();
+ GridData gridData = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL | GridData.GRAB_HORIZONTAL);
+ tree.setLayoutData(gridData);
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+ OseeEventManager.addListener(this);
+
+ setActivePage(artifactsPageIndex);
+ try {
+ xViewer.set(((MassArtifactEditorInput) editorInput).getArtifacts());
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ public Branch getBranch() {
+ if (((MassArtifactEditorInput) getEditorInput()).getArtifacts().size() == 0) return null;
+ return ((MassArtifactEditorInput) getEditorInput()).getArtifacts().iterator().next().getBranch();
+ }
+
+ @Override
+ public void onDirtied() {
+ Displays.ensureInDisplayThread(new Runnable() {
+
+ public void run() {
+ firePropertyChange(PROP_DIRTY);
+ }
+ });
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.ats.util.widgets.task.IXTaskViewer#getCurrentStateName()
+ */
+ public String getCurrentStateName() {
+ return "";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.ats.util.widgets.task.IXTaskViewer#getEditor()
+ */
+ public IDirtiableEditor getEditor() {
+ return this;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.ats.util.widgets.task.IXTaskViewer#isTasksEditable()
+ */
+ public boolean isArtifactsEditable() {
+ return true;
+ }
+
+ /**
+ * @return the artifacts
+ */
+ public Collection<? extends Artifact> getArtifacts() {
+ return artifacts;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.ats.IActionable#getActionDescription()
+ */
+ public String getActionDescription() {
+ return "";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, int branchId) {
+ if (branchModType == BranchEventType.DefaultBranchChanged) {
+ final MassArtifactEditor editor = this;
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ if (artifacts.size() == 0) return;
+ Artifact artifact = artifacts.iterator().next();
+ try {
+ if (artifact.getBranch() != BranchManager.getCommonBranch() && artifact.getBranch() != BranchManager.getDefaultBranch()) {
+ AWorkbench.getActivePage().closeEditor(editor, false);
+ return;
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditorInput.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditorInput.java
new file mode 100644
index 00000000000..fe7f7564949
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditorInput.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.massEditor;
+
+import java.util.Collection;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MassArtifactEditorInput implements IEditorInput {
+
+ private final Collection<? extends Artifact> artifacts;
+ private final String name;
+ private final SkynetXViewerFactory skynetXViewerFactory;
+
+ /**
+ * @return the skynetXViewerFactory
+ */
+ public SkynetXViewerFactory getXViewerFactory() {
+ return skynetXViewerFactory;
+ }
+
+ /**
+ * @param artifact
+ */
+ public MassArtifactEditorInput(String name, Collection<? extends Artifact> artifacts, SkynetXViewerFactory skynetXViewerFactory) {
+ this.name = name;
+ this.artifacts = artifacts;
+ this.skynetXViewerFactory = skynetXViewerFactory;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditorInput#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ return false;
+ }
+
+ /**
+ * @return the taskArts
+ */
+ public Collection<? extends Artifact> getArtifacts() {
+ return artifacts;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#exists()
+ */
+ public boolean exists() {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
+ */
+ public ImageDescriptor getImageDescriptor() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#getPersistable()
+ */
+ public IPersistableElement getPersistable() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#getToolTipText()
+ */
+ public String getToolTipText() {
+ return "";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+ */
+ @SuppressWarnings("unchecked")
+ public Object getAdapter(Class adapter) {
+ return null;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassContentProvider.java
new file mode 100644
index 00000000000..1b6d7064fb5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassContentProvider.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.massEditor;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.skynet.core.SkynetDebug;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+
+public class MassContentProvider implements ITreeContentProvider {
+
+ protected Collection<Artifact> rootSet = new HashSet<Artifact>();
+ private final MassXViewer xViewer;
+ private static Object[] EMPTY_ARRAY = new Object[0];
+ private SkynetDebug debug = new SkynetDebug(false, "WorldTreeContentProvider");
+
+ public MassContentProvider(MassXViewer xViewer) {
+ super();
+ this.xViewer = xViewer;
+ }
+
+ public void add(final Artifact item) {
+ add(Arrays.asList(item));
+ }
+
+ public void add(final Collection<? extends Artifact> items) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ if (xViewer.getInput() == null) xViewer.setInput(rootSet);
+ rootSet.addAll(items);
+ xViewer.refresh();
+ };
+ });
+ }
+
+ public void set(final Collection<? extends Artifact> arts) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ if (xViewer.getInput() == null) xViewer.setInput(rootSet);
+ clear();
+ add(arts);
+ };
+ });
+ }
+
+ public void remove(final Artifact art) {
+ remove(Arrays.asList(art));
+ }
+
+ public void remove(final Collection<? extends Artifact> arts) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ if (xViewer.getInput() == null) xViewer.setInput(rootSet);
+ rootSet.remove(arts);
+ xViewer.refresh();
+ };
+ });
+ }
+
+ public void clear() {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ if (xViewer.getInput() == null) xViewer.setInput(rootSet);
+ rootSet.clear();
+ xViewer.refresh();
+ };
+ });
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object[] getChildren(Object parentElement) {
+ debug.report("getChildren");
+ if (parentElement instanceof Collection) {
+ return ((Collection) parentElement).toArray();
+ }
+ return EMPTY_ARRAY;
+ }
+
+ public Object getParent(Object element) {
+ debug.report("getParent");
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ debug.report("hasChildren");
+ if (element instanceof Collection) return true;
+ return false;
+ }
+
+ public Object[] getElements(Object inputElement) {
+ debug.report("getElements");
+ if (inputElement instanceof String) return new Object[] {inputElement};
+ return getChildren(inputElement);
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassLabelProvider.java
new file mode 100644
index 00000000000..6e8b7b245a4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassLabelProvider.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.massEditor;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.skynet.core.attribute.DateAttribute;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerLabelProvider;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn;
+import org.eclipse.swt.graphics.Image;
+
+public class MassLabelProvider extends XViewerLabelProvider {
+
+ private final MassXViewer xViewer;
+
+ public MassLabelProvider(MassXViewer xViewer) {
+ super(xViewer);
+ this.xViewer = xViewer;
+ }
+
+ @Override
+ public Image getColumnImage(Object element, XViewerColumn col, int columnIndex) throws OseeCoreException {
+ if (col == null) return null;
+ if (columnIndex != 0 && col instanceof XViewerValueColumn) {
+ return ((XViewerValueColumn) col).getColumnImage(element, (XViewerValueColumn) col, columnIndex);
+ }
+ Artifact artifact = (Artifact) element;
+ if (artifact == null || artifact.isDeleted()) return null;
+ if (columnIndex == 0) return artifact.getImage();
+ return null;
+ }
+
+ @Override
+ public String getColumnText(Object element, XViewerColumn col, int columnIndex) throws OseeCoreException {
+ if (col == null) return "";
+ if (col instanceof XViewerValueColumn) {
+ return ((XViewerValueColumn) col).getColumnText(element, (XViewerValueColumn) col, columnIndex);
+ }
+ if (element instanceof String) {
+ if (columnIndex == 1)
+ return (String) element;
+ else
+ return "";
+ }
+ Artifact artifact = (Artifact) element;
+ if (artifact == null || artifact.isDeleted()) return "";
+ // Handle case where columns haven't been loaded yet
+ if (columnIndex > (getTreeViewer().getTree().getColumns().length - 1)) {
+ return "";
+ }
+
+ String colName = col.getName();
+ if (!artifact.isAttributeTypeValid(colName)) {
+ return "";
+ }
+ if (AttributeTypeManager.getType(colName).getBaseAttributeClass().equals(DateAttribute.class)) {
+ try {
+ return DateAttribute.MMDDYYHHMM.format(artifact.getSoleAttributeValue(colName));
+ } catch (OseeCoreException ex) {
+ return "";
+ }
+ }
+
+ return artifact.getAttributesToString(colName);
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public MassXViewer getTreeViewer() {
+ return xViewer;
+ }
+
+ public void dispose() {
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassXViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassXViewer.java
new file mode 100644
index 00000000000..e8fc6404fab
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassXViewer.java
@@ -0,0 +1,332 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.massEditor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactData;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTransfer;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactsChangeTypeEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.artifact.ArtifactPromptChange;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSource;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.DropTargetAdapter;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.swt.widgets.TreeItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MassXViewer extends XViewer implements IFrameworkTransactionEventListener, IArtifactsPurgedEventListener, IArtifactsChangeTypeEventListener {
+
+ private String title;
+ private final Set<Artifact> artifacts = new HashSet<Artifact>(50);
+ private final IDirtiableEditor editor;
+ private final List<String> EXTRA_COLUMNS = Arrays.asList(new String[] {"GUID", "HRID", "Artifact Type"});
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public MassXViewer(Composite parent, int style, MassArtifactEditor editor) {
+ super(parent, style, ((MassArtifactEditorInput) editor.getEditorInput()).getXViewerFactory());
+ this.editor = editor;
+ this.addDoubleClickListener(new IDoubleClickListener() {
+ public void doubleClick(org.eclipse.jface.viewers.DoubleClickEvent event) {
+ handleDoubleClick();
+ };
+ });
+ OseeEventManager.addListener(this);
+ }
+
+ @Override
+ public void handleColumnMultiEdit(TreeColumn treeColumn, Collection<TreeItem> treeItems) {
+ String colName = treeColumn.getText();
+ Set<Artifact> useArts = new HashSet<Artifact>();
+ for (TreeItem item : treeItems) {
+ useArts.add((Artifact) item.getData());
+ }
+ if (ArtifactPromptChange.promptChangeAttribute(colName, colName, useArts, false)) {
+ refresh();
+ editor.onDirtied();
+ }
+ }
+
+ @Override
+ public boolean isColumnMultiEditable(TreeColumn treeColumn, Collection<TreeItem> treeItems) {
+ if (EXTRA_COLUMNS.contains(treeColumn.getText())) return false;
+ return super.isColumnMultiEditable(treeColumn, treeItems);
+ }
+
+ @Override
+ public boolean isColumnMultiEditEnabled() {
+ return true;
+ }
+
+ @Override
+ public boolean handleAltLeftClick(TreeColumn treeColumn, TreeItem treeItem) {
+ return handleAltLeftClick(treeColumn, treeItem, false);
+ }
+
+ public boolean handleAltLeftClick(TreeColumn treeColumn, TreeItem treeItem, boolean persist) {
+ super.handleAltLeftClick(treeColumn, treeItem);
+ // System.out.println("Column " + treeColumn.getText() + " item " +
+ // treeItem);
+ String colName = treeColumn.getText();
+ if (EXTRA_COLUMNS.contains(colName)) {
+ AWorkbench.popup("ERROR", "Can't change the field " + colName);
+ }
+ Artifact useArt = ((Artifact) treeItem.getData());
+ if (ArtifactPromptChange.promptChangeAttribute(colName, colName, Arrays.asList(useArt), persist)) {
+ refresh();
+ editor.onDirtied();
+ return true;
+ }
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer#createSupportWidgets(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected void createSupportWidgets(Composite parent) {
+ super.createSupportWidgets(parent);
+ setupDragAndDropSupport();
+ }
+
+ private void setupDragAndDropSupport() {
+
+ // Do not allow drag if artifacts in this table are not on same branch as default branch
+ DragSource source = new DragSource(getTree(), DND.DROP_COPY);
+ source.setTransfer(new Transfer[] {ArtifactTransfer.getInstance()});
+ source.addDragListener(new DragSourceListener() {
+
+ public void dragFinished(DragSourceEvent event) {
+ refresh();
+ }
+
+ public void dragSetData(DragSourceEvent event) {
+ Collection<Artifact> arts = getSelectedArtifacts();
+ if (arts.size() > 0) {
+ Artifact artifact = arts.iterator().next();
+ if (artifact.getBranch() == BranchManager.getDefaultBranch()) event.data =
+ new ArtifactData(arts.toArray(new Artifact[arts.size()]), "", MassArtifactEditor.EDITOR_ID);
+ }
+ }
+
+ public void dragStart(DragSourceEvent event) {
+ event.doit = false;
+ Collection<Artifact> arts = getSelectedArtifacts();
+ if (arts.size() > 0) {
+ Artifact artifact = arts.iterator().next();
+ if (artifact.getBranch() == BranchManager.getDefaultBranch()) event.doit = true;
+ }
+ }
+ });
+
+ // Do not allow drop if default branch is not same as artifacts that reside in this table
+ DropTarget target = new DropTarget(getTree(), DND.DROP_COPY);
+ target.setTransfer(new Transfer[] {FileTransfer.getInstance(), TextTransfer.getInstance(),
+ ArtifactTransfer.getInstance()});
+ target.addDropListener(new DropTargetAdapter() {
+
+ @Override
+ public void drop(DropTargetEvent event) {
+ performDrop(event);
+ }
+
+ @Override
+ public void dragOver(DropTargetEvent event) {
+ // if ((event.data instanceof ArtifactData) && ((ArtifactData)
+ // event.data).getArtifacts().length > 0)
+ event.detail = DND.DROP_COPY;
+ }
+
+ @Override
+ public void dropAccept(DropTargetEvent event) {
+ }
+ });
+ }
+
+ private void performDrop(DropTargetEvent e) {
+ try {
+ if (e.data instanceof ArtifactData) {
+ Artifact[] artsToAdd = ((ArtifactData) e.data).getArtifacts();
+ Set<Artifact> arts = new HashSet<Artifact>();
+ arts.addAll(artifacts);
+ for (Artifact art : artsToAdd)
+ arts.add(art);
+ set(arts);
+ }
+ refresh();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ public void handleDoubleClick() {
+ if (getSelectedArtifacts().size() == 0) return;
+ Artifact art = getSelectedArtifacts().iterator().next();
+ ArtifactEditor.editArtifact(art);
+ }
+
+ public ArrayList<Artifact> getLoadedArtifacts() {
+ ArrayList<Artifact> arts = new ArrayList<Artifact>();
+ TreeItem items[] = getTree().getItems();
+ if (items.length > 0) for (TreeItem item : items)
+ arts.add((Artifact) item.getData());
+ return arts;
+ }
+
+ /**
+ * Release resources
+ */
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ // Tell the label provider to release its resources
+ getLabelProvider().dispose();
+ }
+
+ public ArrayList<Artifact> getSelectedArtifacts() {
+ ArrayList<Artifact> arts = new ArrayList<Artifact>();
+ TreeItem items[] = getTree().getSelection();
+ if (items.length > 0) for (TreeItem item : items)
+ arts.add((Artifact) item.getData());
+ return arts;
+ }
+
+ /**
+ * @return Returns the title.
+ */
+ public String getTitle() {
+ return title;
+ }
+
+ public void add(Collection<? extends Artifact> artifacts) {
+ if (xViewerFactory instanceof MassXViewerFactory) {
+ ((MassXViewerFactory) xViewerFactory).registerAllAttributeColumnsForArtifacts(artifacts, true);
+ }
+ for (Artifact art : artifacts) {
+ this.artifacts.add(art);
+ }
+ ((MassContentProvider) getContentProvider()).add(artifacts);
+ }
+
+ public void set(Collection<? extends Artifact> artifacts) {
+ if (xViewerFactory instanceof MassXViewerFactory) {
+ ((MassXViewerFactory) xViewerFactory).registerAllAttributeColumnsForArtifacts(artifacts, true);
+ }
+ this.artifacts.clear();
+ for (Artifact art : artifacts) {
+ this.artifacts.add(art);
+ }
+ ((MassContentProvider) getContentProvider()).set(artifacts);
+ }
+
+ /**
+ * @return the artifacts
+ */
+ public Collection<? extends Artifact> getArtifacts() {
+ return artifacts;
+ }
+
+ @Override
+ public void handleFrameworkTransactionEvent(Sender sender, final FrameworkTransactionData transData) throws OseeCoreException {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ if (getTree() == null || getTree().isDisposed()) {
+ dispose();
+ return;
+ }
+ ((MassContentProvider) getContentProvider()).remove(transData.cacheDeletedArtifacts);
+ update(transData.cacheChangedArtifacts, null);
+ refresh(transData.cacheRelationAddedArtifacts);
+ refresh(transData.cacheRelationChangedArtifacts);
+ refresh(transData.cacheRelationDeletedArtifacts);
+ }
+ });
+ }
+
+ @Override
+ public void handleArtifactsPurgedEvent(Sender sender, final LoadedArtifacts loadedArtifacts) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ try {
+ if (getTree() != null && !getTree().isDisposed()) {
+ remove(loadedArtifacts.getLoadedArtifacts().toArray());
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+
+ @Override
+ public void handleArtifactsChangeTypeEvent(Sender sender, int toArtifactTypeId, final LoadedArtifacts loadedArtifacts) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ try {
+ remove(loadedArtifacts.getLoadedArtifacts().toArray());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassXViewerFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassXViewerFactory.java
new file mode 100644
index 00000000000..e253260872f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassXViewerFactory.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.massEditor;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerArtifactNameColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerArtifactTypeColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerGuidColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerHridColumn;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MassXViewerFactory extends SkynetXViewerFactory {
+
+ private static String NAMESPACE = "org.eclipse.osee.framework.ui.skynet.massEditor.ArtifactXViewer";
+ private static XViewerArtifactNameColumn nameCol = new XViewerArtifactNameColumn("Name");
+
+ public MassXViewerFactory(Collection<? extends Artifact> artifacts) {
+ super(NAMESPACE);
+ registerColumn(nameCol);
+ registerAllAttributeColumnsForArtifacts(artifacts, true);
+ registerColumn(new XViewerHridColumn("ID"));
+ registerColumn(new XViewerGuidColumn("GUID"));
+ registerColumn(new XViewerArtifactTypeColumn("Artifact Type"));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerFactory#getDefaultTableCustomizeData()
+ */
+ @Override
+ public CustomizeData getDefaultTableCustomizeData() {
+ CustomizeData custData = new CustomizeData();
+ custData.getSortingData().setSortingNames(nameCol.getId());
+ custData.getColumnData().setColumns(getColumns());
+ custData.setNameSpace(getNamespace());
+ custData.setName("Artifacts");
+ return custData;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshot.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshot.java
new file mode 100644
index 00000000000..94d38d06fe3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshot.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.snapshot;
+
+import java.sql.Timestamp;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+
+/**
+ * @author Roberto E. Escobar
+ */
+final class ArtifactSnapshot {
+
+ private final String guid;
+ private final long gammaId;
+ private final Timestamp createdOn;
+
+ private String renderedData;
+ private Map<String, byte[]> binaryData;
+
+ ArtifactSnapshot(String guid, long gammaId, Timestamp creationDate) throws OseeCoreException {
+ this.guid = guid;
+ this.gammaId = gammaId;
+ this.createdOn = creationDate;
+ this.renderedData = null;
+ this.binaryData = new HashMap<String, byte[]>();
+ }
+
+ protected void setRenderedData(String data) {
+ this.renderedData = data;
+ }
+
+ public Timestamp getCreatedOn() {
+ return createdOn;
+ }
+
+ public boolean isDataValid() {
+ return Strings.isValid(renderedData);
+ }
+
+ protected void addBinaryData(String key, byte[] data) {
+ this.binaryData.put(key, data);
+ }
+
+ public String getGuid() {
+ return guid;
+ }
+
+ public String getRenderedData() {
+ return renderedData;
+ }
+
+ public long getGamma() {
+ return gammaId;
+ }
+
+ public Set<String> getBinaryDataKeys() {
+ return this.binaryData.keySet();
+ }
+
+ public byte[] getBinaryData(String key) {
+ byte[] toReturn = binaryData.get(key);
+ return toReturn != null ? toReturn : new byte[0];
+ }
+
+ public String toString() {
+ return String.format("Snapshot: %s - %s \nCreated On: %s\t Binary Objects: %s", getGuid(), getGamma(),
+ getCreatedOn(), binaryData.size());
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotFactory.java
new file mode 100644
index 00000000000..26a86567e0f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotFactory.java
@@ -0,0 +1,209 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.snapshot;
+
+import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.core.client.server.HttpUrlBuilder;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.text.change.ChangeSet;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.httpRequests.HttpImageProcessor;
+import org.eclipse.osee.framework.skynet.core.revision.RevisionManager;
+import org.eclipse.osee.framework.skynet.core.revision.TransactionData;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.httpRequests.HttpImageRequest;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+
+/**
+ * Factory class used to create artifact snapshots
+ *
+ * @author Roberto E. Escobar
+ */
+class ArtifactSnapshotFactory {
+
+ private final Matcher IMAGE_SRC_MATCHER;
+ private final String HTTP_IMAGE_REQUEST_TAG;
+
+ private HttpImageRequest httpImageRequest;
+ private HttpImageProcessor httpImageProcessor;
+
+ protected ArtifactSnapshotFactory() {
+ this.httpImageRequest = HttpImageRequest.getInstance();
+ this.httpImageProcessor = HttpImageProcessor.getInstance();
+
+ HTTP_IMAGE_REQUEST_TAG = httpImageRequest.getRequestType();
+ IMAGE_SRC_MATCHER = Pattern.compile("src=\"(" + HTTP_IMAGE_REQUEST_TAG.replace(".", "\\.") + ")").matcher("");
+ }
+
+ /**
+ * Takes a snapshot of the Artifact
+ *
+ * @param artifact source
+ * @return snapshot of the artifact
+ * @throws UnsupportedEncodingException
+ */
+ public ArtifactSnapshot createSnapshot(Artifact artifact) throws OseeCoreException, UnsupportedEncodingException {
+ long start = System.currentTimeMillis();
+ ArtifactSnapshot snapshotData =
+ new ArtifactSnapshot(artifact.getGuid(), artifact.getGammaId(), getCreationDate(artifact));
+ snapshotData.setRenderedData(RendererManager.renderToHtml(artifact));
+ processImageLinks(snapshotData);
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, String.format(
+ "Artifact Snapshot Render Time: [%s] - for artifact: [%s, %s]", System.currentTimeMillis() - start,
+ artifact.getGuid(), artifact.getGammaId()));
+ return snapshotData;
+ }
+
+ private Timestamp getCreationDate(Artifact artifact) throws OseeCoreException {
+ List<TransactionData> txData =
+ new ArrayList<TransactionData>(RevisionManager.getInstance().getTransactionsPerArtifact(artifact));
+ for (TransactionData data : txData) {
+ if (artifact.getArtId() == data.getAssociatedArtId()) {
+ return data.getTimeStamp();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Appends HTTP server address and port information to links.
+ *
+ * @param original pre-rendered Artifact data containing images
+ * @return modified pre-rendered artifact data
+ */
+ protected String toAbsoluteUrls(String original) {
+ String toReturn = "";
+ if (Strings.isValid(original) != true) {
+ toReturn = "<HTML><BODY><H3>Empty Contents</H3></BODY></HTML>";
+ } else {
+ String serverPrefix = HttpUrlBuilder.getInstance().getSkynetHttpLocalServerPrefix();
+ ChangeSet changeSet = new ChangeSet(original);
+ convertImageLinks(serverPrefix, original, changeSet);
+ convertArtsLinks(serverPrefix, original, changeSet);
+ toReturn = changeSet.toString();
+ }
+ return toReturn;
+ }
+
+ private void convertArtsLinks(String serverPrefix, String original, ChangeSet changeSet) {
+ Pattern pattern = Pattern.compile("href=\"(.+?)Define\\?guid=(.*?)\"");
+ Matcher matcher = pattern.matcher(original);
+ while (matcher.find()) {
+ try {
+ changeSet.replace(matcher.start(1), matcher.end(1), serverPrefix);
+ String encodedGuid = matcher.group(2);
+ if (Strings.isValid(encodedGuid)) {
+ try {
+ if (isEncodingRequired(encodedGuid)) {
+ encodedGuid = URLEncoder.encode(encodedGuid, "UTF-8");
+ changeSet.replace(matcher.start(2), matcher.end(2), encodedGuid);
+ }
+
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, String.format("Error encoding url link guid."), ex);
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, String.format("Error adding http server address."), ex);
+ }
+ }
+ }
+
+ private void convertImageLinks(String serverPrefix, String original, ChangeSet changeSet) {
+ IMAGE_SRC_MATCHER.reset(original);
+ while (IMAGE_SRC_MATCHER.find()) {
+ if (IMAGE_SRC_MATCHER.groupCount() > 0) {
+ String entry = IMAGE_SRC_MATCHER.group(1);
+ if (Strings.isValid(entry)) {
+ try {
+ String result = String.format("src=\"%s%s", serverPrefix, HTTP_IMAGE_REQUEST_TAG);
+ changeSet.replace(IMAGE_SRC_MATCHER.start(), IMAGE_SRC_MATCHER.end(), result);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, String.format("Error adding http server address."),
+ ex);
+ }
+ }
+ }
+ }
+ }
+
+ private static boolean isEncodingRequired(String parameter) {
+ boolean result = false;
+ if (parameter.contains("+") || parameter.contains(" ")) {
+ result = true;
+ } else {
+ for (int index = 0; index < parameter.length(); index++) {
+ char c = parameter.charAt(index);
+ if (c == '%') {
+ if (index + 2 < parameter.length()) {
+ char ch1 = parameter.charAt(index + 1);
+ char ch2 = parameter.charAt(index + 2);
+ if (!Character.isLetterOrDigit(ch1) || !Character.isLetterOrDigit(ch2)) {
+ result = true;
+ break;
+ }
+ } else {
+ result = true;
+ break;
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Stores image data into snapshot and updates links with namespace/key and image key information. Also adds the HTTP
+ * image request to the image url.
+ *
+ * @param snapshotData snapshot containing image links
+ */
+ private void processImageLinks(ArtifactSnapshot snapshotData) {
+ if (snapshotData.isDataValid() != false) {
+ String original = snapshotData.getRenderedData();
+ String tag = httpImageProcessor.getImageProcessingMarker();
+ Pattern pattern = Pattern.compile("(" + tag + ".*?)\"");
+ Matcher matcher = pattern.matcher(original);
+ ChangeSet changeSet = new ChangeSet(original);
+ while (matcher.find()) {
+ if (matcher.groupCount() > 0) {
+ String url = matcher.group(1);
+ String imageKey = url.replace(tag, "");
+ if (Strings.isValid(imageKey)) {
+ try {
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ httpImageProcessor.processRequest(imageKey, outputStream);
+ snapshotData.addBinaryData(imageKey, outputStream.toByteArray());
+ String result =
+ httpImageRequest.getRequestUrl(snapshotData.getGuid(),
+ Long.toString(snapshotData.getGamma()), imageKey);
+ changeSet.replace(matcher.start(), matcher.end(), result + "\"");
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, String.format(
+ "Image processing error. Unable to take a snapshot of: [%s]", imageKey), ex);
+ }
+ }
+ }
+ }
+ snapshotData.setRenderedData(changeSet.applyChangesToSelf().toString());
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotManager.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotManager.java
new file mode 100644
index 00000000000..f91e20b4059
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotManager.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.snapshot;
+
+import java.io.BufferedOutputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.word.WordConverter;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.osgi.framework.Bundle;
+
+/**
+ * This manager is used to store and retrieve artifact pre-rendered data to be used during previews. The manager stores
+ * and maintains head revision snapshots in a database and revisions other than head revisions in a local cache.
+ *
+ * @author Roberto E. Escobar
+ */
+public class ArtifactSnapshotManager {
+ private static ArtifactSnapshotManager instance = null;
+
+ private ArtifactSnapshotFactory snapshotFactory;
+ private RemoteSnapshotManager remoteSnapshotManager;
+
+ private ArtifactSnapshotManager() {
+ this.snapshotFactory = new ArtifactSnapshotFactory();
+ this.remoteSnapshotManager = new RemoteSnapshotManager();
+ }
+
+ public static ArtifactSnapshotManager getInstance() {
+ if (instance == null) {
+ instance = new ArtifactSnapshotManager();
+ }
+ return instance;
+ }
+
+ /**
+ * Retrieves rendered artifact data.
+ *
+ * @param artifact get rendered data for this artifact
+ * @param forceUpdate artifact data into snapshot repository
+ * @return rendered data
+ * @throws Exception
+ */
+ public String getDataSnapshot(Artifact artifact, boolean forceUpdate) throws Exception {
+ checkArtifact(artifact);
+ ArtifactSnapshot snapshot = null;
+ if (forceUpdate == true) {
+ try {
+ snapshot = doSave(artifact);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ } else {
+ snapshot = getSnapshotForRenderRetrieval(artifact);
+ }
+ return snapshotFactory.toAbsoluteUrls(snapshot.getRenderedData());
+ }
+
+ /**
+ * Retrieves image data from the snapshot repository
+ *
+ * @param namespace artifact snapshot namespace
+ * @param key artifact snapshot key
+ * @param imageKey image to get
+ * @param outputStream where image should be sent to
+ * @throws Exception
+ */
+ public void getImageSnapshot(String namespace, String key, String imageKey, OutputStream outputStream) throws Exception {
+ ArtifactSnapshot snapshot = getSnapshotFromRemoteStorage(namespace, key);
+ try {
+ byte[] imageData = snapshot.getBinaryData(imageKey);
+ BufferedOutputStream bos = new BufferedOutputStream(outputStream);
+ bos.write(imageData, 0, imageData.length);
+ bos.flush();
+ } catch (Exception ex) {
+ if (snapshot == null) {
+ throw new Exception("Image snapshot unavailable.");
+ } else {
+ throw new Exception("Error transmitting Image.", ex);
+ }
+ }
+ }
+
+ /**
+ * Check that the requested artifact is valid
+ *
+ * @param artifact in question
+ * @throws IllegalArgumentException if invalid
+ */
+ private void checkArtifact(Artifact artifact) {
+ if (artifact == null) {
+ throw new IllegalArgumentException("Error artifact was null");
+ }
+ }
+
+ /**
+ * Create artifact snapshot and stores data into the snapshot remote repository
+ *
+ * @param artifact to store into snapshot repository
+ */
+ private ArtifactSnapshot doSave(Artifact artifact) throws OseeCoreException, UnsupportedEncodingException {
+ checkArtifact(artifact);
+ ArtifactSnapshot snapshot = null;
+ if (isSavingAllowed()) {
+ snapshot = snapshotFactory.createSnapshot(artifact);
+ if (snapshot.isDataValid()) {
+ new ArtifactSnapshotPersistOperation(remoteSnapshotManager, snapshot).run();
+ }
+ }
+ return snapshot;
+ }
+
+ /**
+ * Determines whether saving to remote repository is allowed
+ *
+ * @return <b>true</b> if saving to remote repository is allowed
+ */
+ private boolean isSavingAllowed() {
+ // TODO Windows dependency needs to be removed once wordML transforms are independent of
+ // windows and native transform.
+ Bundle bundle = Platform.getBundle("external.osee.xslt.transform.engine");
+ return Lib.isWindows() != false && bundle != null && WordConverter.getInstance().isDefaultConverter() == false;
+ }
+
+ /**
+ * Retrieve snapshot from remote storage. This method returns null if no snapshot is found in remote storage.
+ *
+ * @param keyPair
+ * @return snapshot instance from remote storage
+ * @throws UnsupportedEncodingException
+ */
+ private ArtifactSnapshot getSnapshotFromRemoteStorage(String guid, String gammaId) throws UnsupportedEncodingException {
+ return remoteSnapshotManager.getSnapshot(guid, gammaId);
+ }
+
+ /**
+ * Retrieves snapshot for this artifact checking remote storage and local cache.
+ *
+ * @param artifact to search snapshot for
+ * @return snapshot
+ * @throws UnsupportedEncodingException
+ */
+ private ArtifactSnapshot getSnapshotForRenderRetrieval(Artifact artifact) throws OseeCoreException, UnsupportedEncodingException {
+ ArtifactSnapshot currentSnapshot = null;
+ try {
+ currentSnapshot = getSnapshotFromRemoteStorage(artifact.getGuid(), Long.toString(artifact.getGammaId()));
+ if (currentSnapshot == null) {
+ try {
+ currentSnapshot = doSave(artifact);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ } catch (UnsupportedEncodingException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return currentSnapshot;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotPersistOperation.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotPersistOperation.java
new file mode 100644
index 00000000000..edb7561f52e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/ArtifactSnapshotPersistOperation.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.snapshot;
+
+import java.util.logging.Level;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Roberto E. Escobar
+ */
+class ArtifactSnapshotPersistOperation implements Runnable {
+
+ private final ArtifactSnapshot snapshot;
+ private final RemoteSnapshotManager manager;
+
+ protected ArtifactSnapshotPersistOperation(final RemoteSnapshotManager manager, final ArtifactSnapshot snapshot) {
+ this.snapshot = snapshot;
+ this.manager = manager;
+ }
+
+ public void run() {
+ long start = System.currentTimeMillis();
+ try {
+ manager.save(snapshot);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, String.format("Artifact Snapshot Commit to DB Time: [%s] ms.",
+ System.currentTimeMillis() - start));
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/RemoteSnapshotManager.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/RemoteSnapshotManager.java
new file mode 100644
index 00000000000..a90ce10879c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/snapshot/RemoteSnapshotManager.java
@@ -0,0 +1,256 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.artifact.snapshot;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.Reader;
+import java.io.StringReader;
+import java.net.URL;
+import java.sql.Timestamp;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+import org.eclipse.osee.framework.core.client.ClientSessionManager;
+import org.eclipse.osee.framework.core.client.server.HttpUrlBuilder;
+import org.eclipse.osee.framework.core.data.OseeServerContext;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeWrappedException;
+import org.eclipse.osee.framework.jdk.core.util.HttpProcessor;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.jdk.core.util.HttpProcessor.AcquireResult;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Roberto E. Escobar
+ */
+class RemoteSnapshotManager {
+ private static final String GAMMA = "gamma";
+ private static final String GUID = "guid";
+ private static final String CREATED_ON = "createdOn";
+ private static final String METADATA = "metadata.xml";
+ private static final String SNAPSHOT_BODY = "snapshot.html";
+ private static final String BINARY_DATA_PREFIX = "bin.data.";
+
+ RemoteSnapshotManager() {
+ }
+
+ public ArtifactSnapshot getSnapshot(String guid, String gammaId) {
+ ArtifactSnapshot toReturn = null;
+ ObjectInputStream objectInputStream = null;
+ try {
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ AcquireResult result = HttpProcessor.acquire(getAcquireURL(guid, gammaId), outputStream);
+ if (result.wasSuccessful()) {
+ toReturn = loadFromStream(new ByteArrayInputStream(outputStream.toByteArray()));
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ } finally {
+ if (objectInputStream != null) {
+ try {
+ objectInputStream.close();
+ } catch (IOException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ return toReturn;
+ }
+
+ public void delete(String guid, String gammaId) {
+ try {
+ URL url = getDeleteURL(guid, gammaId);
+ String response = HttpProcessor.delete(url);
+ if (response != null) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, String.format("[%s]", response));
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ public void save(ArtifactSnapshot snapshot) throws Exception {
+ InputStream inputStream = null;
+ try {
+ inputStream = new ByteArrayInputStream(compressSnapshot(snapshot));
+ URL url = getStorageURL(snapshot);
+ HttpProcessor.save(url, inputStream, "application/zip", "ISO-8859-1");
+ } finally {
+ if (inputStream != null) {
+ inputStream.close();
+ }
+ }
+ }
+
+ private byte[] compressSnapshot(ArtifactSnapshot snapshot) throws IOException {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ZipOutputStream out = null;
+ try {
+ out = new ZipOutputStream(bos);
+
+ ByteArrayOutputStream metaOut = new ByteArrayOutputStream();
+ Properties properties = new Properties();
+ properties.put(GAMMA, Long.toString(snapshot.getGamma()));
+ properties.put(GUID, snapshot.getGuid());
+ Timestamp creationDate = snapshot.getCreatedOn();
+ if (creationDate != null) {
+ try {
+ properties.put(CREATED_ON, Long.toString(creationDate.getTime()));
+ } catch (Exception ex) {
+ OseeLog.log(SkynetActivator.class, Level.WARNING, "Error storing artifact creation date for snapshot.",
+ ex);
+ }
+ }
+ properties.storeToXML(metaOut, "UTF-8");
+
+ addZipEntry(out, METADATA, new ByteArrayInputStream(metaOut.toByteArray()));
+ addZipEntry(out, SNAPSHOT_BODY, new ByteArrayInputStream(snapshot.getRenderedData().getBytes("UTF-8")));
+
+ for (String key : snapshot.getBinaryDataKeys()) {
+ addZipEntry(out, BINARY_DATA_PREFIX + key, new ByteArrayInputStream(snapshot.getBinaryData(key)));
+ }
+ } finally {
+ if (out != null) {
+ out.close();
+ }
+ }
+ return bos.toByteArray();
+ }
+
+ private void addZipEntry(ZipOutputStream out, String entryName, InputStream inputStream) throws IOException {
+ out.putNextEntry(new ZipEntry(entryName));
+ try {
+ byte[] buf = new byte[1024];
+ int count = -1;
+ while ((count = inputStream.read(buf)) > 0) {
+ out.write(buf, 0, count);
+ }
+ } finally {
+ out.closeEntry();
+ }
+ }
+
+ private ArtifactSnapshot loadFromStream(InputStream inputStream) throws OseeCoreException {
+ ArtifactSnapshot toReturn = null;
+ ZipInputStream zipInputStream = null;
+ try {
+ zipInputStream = new ZipInputStream(inputStream);
+
+ Properties properties = new Properties();
+ String renderedData = null;
+ Map<String, byte[]> binData = new HashMap<String, byte[]>();
+
+ ZipEntry entry = null;
+ while ((entry = zipInputStream.getNextEntry()) != null) {
+ String zipEntryName = entry.getName();
+ if (zipEntryName.equals(METADATA)) {
+ properties.loadFromXML(new ByteArrayInputStream(Lib.inputStreamToString(zipInputStream).getBytes()));
+ } else if (zipEntryName.equals(SNAPSHOT_BODY)) {
+ renderedData = Lib.inputStreamToString(zipInputStream);
+ } else {
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ Lib.inputStreamToOutputStream(zipInputStream, outputStream);
+ binData.put(zipEntryName.replace(BINARY_DATA_PREFIX, ""), outputStream.toByteArray());
+ }
+ }
+
+ if (!properties.isEmpty() && renderedData != null) {
+ String gamma = properties.getProperty(GAMMA);
+ String guid = properties.getProperty(GUID);
+ String createdOn = properties.getProperty(CREATED_ON);
+ Timestamp creationDate = null;
+ if (Strings.isValid(createdOn)) {
+ try {
+ creationDate = new Timestamp(Long.parseLong(createdOn));
+ } catch (Exception ex) {
+ OseeLog.log(SkynetActivator.class, Level.WARNING,
+ "Error obtaining artifact creation date from snapshot.", ex);
+ }
+ }
+ toReturn = new ArtifactSnapshot(guid, Long.parseLong(gamma), creationDate);
+ toReturn.setRenderedData(renderedData);
+ for (String key : binData.keySet()) {
+ toReturn.addBinaryData(key, binData.get(key));
+ }
+ }
+ } catch (Exception ex) {
+ throw new OseeWrappedException(ex);
+ } finally {
+ if (zipInputStream != null) {
+ try {
+ zipInputStream.close();
+ } catch (IOException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ }
+ }
+ return toReturn;
+ }
+
+ private URL getAcquireURL(String guid, String gammaId) throws Exception {
+ return generatePathURL(guid, gammaId);
+ }
+
+ private URL getDeleteURL(String guid, String gammaId) throws Exception {
+ return generatePathURL(guid, gammaId);
+ }
+
+ private URL getStorageURL(ArtifactSnapshot snapshot) throws Exception {
+ Map<String, String> parameterMap = new HashMap<String, String>();
+ parameterMap.put("sessionId", ClientSessionManager.getSessionId());
+ parameterMap.put("protocol", "snapshot");
+ parameterMap.put("seed", snapshot.getGuid());
+ parameterMap.put("name", Long.toString(snapshot.getGamma()));
+ parameterMap.put("extension", "zip");
+ parameterMap.put("is.overwrite.allowed", Boolean.toString(true));
+ String urlString =
+ HttpUrlBuilder.getInstance().getOsgiServletServiceUrl(OseeServerContext.RESOURCE_CONTEXT, parameterMap);
+ return new URL(urlString);
+ }
+
+ private URL generatePathURL(String guid, String gammaId) throws Exception {
+ Map<String, String> parameterMap = new HashMap<String, String>();
+ parameterMap.put("sessionId", ClientSessionManager.getSessionId());
+ parameterMap.put("uri", generateUri(guid, gammaId));
+ String urlString =
+ HttpUrlBuilder.getInstance().getOsgiServletServiceUrl(OseeServerContext.RESOURCE_CONTEXT, parameterMap);
+ return new URL(urlString);
+ }
+
+ private String generateUri(String guid, String gammaId) throws OseeWrappedException {
+ StringBuilder builder = new StringBuilder("snapshot://");
+ char[] buffer = new char[3];
+ int cnt = -1;
+ Reader in = new StringReader(guid);
+ try {
+ while ((cnt = in.read(buffer)) != -1) {
+ builder.append(buffer, 0, cnt);
+ builder.append("/");
+ }
+ } catch (IOException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ builder.append(gammaId);
+ builder.append(".zip");
+ return builder.toString();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/AtsOpenOption.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/AtsOpenOption.java
new file mode 100644
index 00000000000..57d34647dc2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/AtsOpenOption.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.ats;
+
+/**
+ * @author Donald G. Dunne
+ */
+public enum AtsOpenOption {
+ OpenAll, // Open all teams
+ OpenOneOrPopupSelect, // Popup selection dialog if more than one team
+ AtsWorld
+ // populate
+
+};
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/IActionable.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/IActionable.java
new file mode 100644
index 00000000000..4f47a366844
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/IActionable.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.ats;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IActionable {
+
+ /**
+ * Provide description over and above the viewpart name and version to be used by ATS
+ *
+ * @return description
+ */
+ public String getActionDescription();
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/IAtsLib.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/IAtsLib.java
new file mode 100644
index 00000000000..7a7cf36c72d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/IAtsLib.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.ats;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IAtsLib {
+
+ public void openATSAction(final Artifact art, final AtsOpenOption option);
+
+ public void createATSAction(String initialDescription, String actionableItem);
+
+ public void openArtifact(String guid, OseeAts.OpenView view);
+
+ public void openArtifact(String guidOrHrid, Integer branchId, OseeAts.OpenView view);
+
+ public void openInAtsWorldEditor(String name, Collection<Artifact> artifacts) throws OseeCoreException;
+
+ public void openInAtsTaskEditor(String name, Collection<Artifact> artifacts) throws OseeCoreException;
+
+ public boolean isAtsAdmin();
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/NoteType.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/NoteType.java
new file mode 100644
index 00000000000..9066cc428de
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/NoteType.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.ats;
+
+import java.util.ArrayList;
+
+/**
+ * @author Donald G. Dunne
+ */
+public enum NoteType {
+ Comment, Question, Error, Other;
+
+ public static NoteType getType(String type) {
+ for (NoteType e : NoteType.values()) {
+ if (e.name().equals(type)) {
+ return e;
+ }
+ }
+ throw new IllegalArgumentException("Unhandled NoteType");
+ }
+
+ public static ArrayList<String> getNames() {
+ ArrayList<String> names = new ArrayList<String>();
+ for (NoteType e : NoteType.values()) {
+ names.add(e.name());
+ }
+ return names;
+ }
+
+};
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/OseeAts.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/OseeAts.java
new file mode 100644
index 00000000000..ae35a95d086
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ats/OseeAts.java
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.ats;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.IATSArtifact;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.ui.part.MultiPageEditorPart;
+import org.eclipse.ui.part.ViewPart;
+import org.osgi.framework.Bundle;
+
+public class OseeAts {
+ public static enum OpenView {
+ ActionEditor, ArtifactEditor, ArtifactHyperViewer
+ };
+ private static IAtsLib atsLib;
+ private static String BUG_TITLE = "Generate Action Against This Tool";
+
+ public OseeAts() {
+ super();
+ }
+
+ public static boolean isAtsAdmin() {
+ try {
+ if (getAtsLib() != null) {
+ return getAtsLib().isAtsAdmin();
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return false;
+ }
+
+ public static void addButtonToEditorToolBar(final MultiPageEditorPart editorPart, IActionable actionableObject, final OseeUiActivator oseePlugin, IToolBarManager toolBar, final String editorId, final String actionableItem) {
+
+ Action bugAction = new Action(BUG_TITLE, Action.AS_PUSH_BUTTON) {
+ @Override
+ public void run() {
+ String version = (String) oseePlugin.getBundle().getHeaders().get("Bundle-Version");
+ String desc = String.format("Found in \"%s\" version %s.", editorId, version);
+ if (editorPart instanceof IActionable) {
+ String moreDesc = ((IActionable) editorPart).getActionDescription();
+ if (moreDesc != null && !moreDesc.equals("")) {
+ desc += "\n" + moreDesc;
+ }
+ }
+ createActionViaBug(desc, actionableItem);
+ }
+ };
+ bugAction.setToolTipText(BUG_TITLE);
+ bugAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("bug.gif"));
+ toolBar.add(bugAction);
+ }
+
+ public static void addButtonToEditorToolBar(IActionable actionableObject, final OseeUiActivator oseePlugin, ToolBar toolBar, final String editorId, String actionableItem) {
+ addButtonToEditorToolBar(actionableObject, oseePlugin, toolBar, null, editorId, actionableItem);
+ }
+
+ public static void addButtonToEditorToolBar(IActionable actionableObject, final OseeUiActivator oseePlugin, Composite comp, final String editorId, String actionableItem) {
+ addButtonToEditorToolBar(actionableObject, oseePlugin, null, comp, editorId, actionableItem);
+ }
+
+ private static void addButtonToEditorToolBar(final IActionable actionableObject, final OseeUiActivator oseePlugin, ToolBar toolBar, Composite comp, final String editorId, final String aspect) {
+ if (actionableObject == null) throw new IllegalArgumentException(
+ String.format("actionableObject can not be null"));
+ if (editorId == null || editorId.equals("")) throw new IllegalArgumentException(
+ String.format("editorId can not be null or empty"));
+ if (aspect == null) throw new IllegalArgumentException(String.format("aspect can not be null"));
+
+ if (toolBar != null) {
+ ToolItem item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("bug.gif"));
+ item.setToolTipText(BUG_TITLE);
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ String version = (String) oseePlugin.getBundle().getHeaders().get("Bundle-Version");
+ String desc = String.format("\n\nItem: %s\nVersion: %s", editorId, version);
+ if (actionableObject != null) {
+ String moreDesc = actionableObject.getActionDescription();
+ if (moreDesc != null && !moreDesc.equals("")) desc += "\n" + moreDesc;
+ }
+ createActionViaBug(desc, aspect);
+ }
+ });
+ } else if (comp != null) {
+ Button bugButton = new Button(comp, SWT.PUSH);
+ bugButton.setToolTipText(BUG_TITLE);
+ bugButton.setImage(SkynetGuiPlugin.getInstance().getImage("bug.gif"));
+ bugButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ String version = (String) oseePlugin.getBundle().getHeaders().get("Bundle-Version");
+ String desc = String.format("\n\nItem: %s\nVersion: %s", editorId, version);
+ if (actionableObject != null) {
+ String moreDesc = actionableObject.getActionDescription();
+ if (moreDesc != null && !moreDesc.equals("")) desc += "\n" + moreDesc;
+ }
+ createActionViaBug(desc, aspect);
+ }
+
+ });
+ } else
+ throw new IllegalArgumentException("Can't determine bug target.");
+ }
+
+ /**
+ * Uses the ActionJob extension point to kickoff ATS code to create and open the action
+ *
+ * @param version
+ * @param desc
+ */
+ private static void createActionViaBug(String desc, String actionableItem) {
+ try {
+ getAtsLib().createATSAction(desc, actionableItem);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ /**
+ * @param viewPart
+ * @param actionableObject
+ * @param oseePlugin
+ * @param viewId
+ * @param actionableItem match the name of one of the configured Actionable Items in ATS
+ */
+ public static void addBugToViewToolbar(final ViewPart viewPart, final IActionable actionableObject, final OseeUiActivator oseePlugin, final String viewId, final String actionableItem) {
+ if (viewId == null || viewId.equals("")) throw new IllegalArgumentException(
+ String.format("viewId can not be null or empty"));
+ if (actionableItem == null) throw new IllegalArgumentException("Aspect can not be null.");
+ Action bugAction = new Action("Generate Action Against This View") {
+ @Override
+ public void run() {
+ String version = (String) oseePlugin.getBundle().getHeaders().get("Bundle-Version");
+ String desc = String.format("\n\nItem: %s\nVersion: %s", viewId, version);
+ String moreDesc = actionableObject.getActionDescription();
+ if (!moreDesc.equals("")) desc += "\n" + moreDesc;
+ createActionViaBug(desc, actionableItem);
+ }
+ };
+ bugAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("bug.gif"));
+ bugAction.setToolTipText("Generate Action Against This View");
+
+ IToolBarManager toolbarManager = viewPart.getViewSite().getActionBars().getToolBarManager();
+ toolbarManager.add(bugAction);
+ }
+
+ public static void openATSArtifact(String guid) {
+ try {
+ Artifact art = ArtifactQuery.getArtifactFromId(guid, BranchManager.getCommonBranch());
+ if (art.getArtifactTypeName().equals("Action"))
+ atsLib.openATSAction(art, AtsOpenOption.OpenOneOrPopupSelect);
+ else
+ AWorkbench.popup("ERROR", "Trying to open " + art.getArtifactTypeName() + " with SMAEditor");
+ } catch (Exception ex) {
+ AWorkbench.popup("ERROR", ex.getLocalizedMessage());
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ public static void openATSArtifact(Artifact art) {
+ if (art instanceof IATSArtifact) {
+ try {
+ getAtsLib().openATSAction(art, AtsOpenOption.OpenOneOrPopupSelect);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ AWorkbench.popup("ERROR", ex.getLocalizedMessage());
+ }
+ } else {
+ AWorkbench.popup("ERROR", "Trying to open " + art.getArtifactTypeName() + " with SMAEditor");
+ }
+ }
+
+ public static IAtsLib getAtsLib() throws ClassNotFoundException, IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+ if (Platform.getExtensionRegistry() == null) return null;
+ if (atsLib == null) {
+ IExtensionPoint point =
+ Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.framework.skynet.core.AtsLib");
+ IExtension[] extensions = point.getExtensions();
+ for (IExtension extension : extensions) {
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+ for (IConfigurationElement el : elements) {
+ if (el.getName().equals("AtsLib")) {
+ String className = el.getAttribute("classname");
+ String bundleName = el.getContributor().getName();
+ if (className != null && bundleName != null) {
+ Bundle bundle = Platform.getBundle(bundleName);
+ Class<?> interfaceClass = bundle.loadClass(className);
+ atsLib = (IAtsLib) interfaceClass.getConstructor().newInstance();
+ }
+ }
+ }
+ }
+ }
+ return atsLib;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamEditor.java
new file mode 100644
index 00000000000..c89ddc30398
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamEditor.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.AbstractArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class BlamEditor extends AbstractArtifactEditor implements IBlamEventListener {
+ public static final String EDITOR_ID = "org.eclipse.osee.framework.ui.skynet.blam.BlamEditor";
+ private OverviewPage overviewPage;
+ private List<XWidget> widgets;
+ private VariableMap blamVariableMap;
+
+ @Override
+ protected void addPages() {
+ try {
+ overviewPage = new OverviewPage(this);
+ addPage(overviewPage);
+ addPage(new WorkflowDataPage(this, overviewPage));
+ setPartName("BLAM: " + getWorkflow().getDescriptiveName());
+ setTitleImage(SkynetGuiPlugin.getInstance().getImage("blam.gif"));
+ } catch (PartInitException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ public void appendOuputLine(final String additionalOutput) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ overviewPage.appendOuputLine(additionalOutput);
+ }
+ });
+ }
+
+ public void setOuputText(final String text) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ overviewPage.setOuputText(text);
+ }
+ });
+ }
+
+ public BlamWorkflow getWorkflow() {
+ return (BlamWorkflow) ((BlamEditorInput) getEditorInput()).getArtifact();
+ }
+
+ public static void edit(BlamWorkflow blamWorkflow) {
+ BlamEditor.edit(new BlamEditorInput(blamWorkflow));
+ }
+
+ public static void edit(final BlamEditorInput blamEditorInput) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ try {
+ AWorkbench.getActivePage().openEditor(blamEditorInput, EDITOR_ID);
+ } catch (PartInitException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ });
+ }
+
+ public static void edit(String workflowId) throws OseeCoreException {
+ BlamEditor.edit(new BlamEditorInput(workflowId));
+ }
+
+ public static void edit(BlamOperation blamOperation) throws OseeCoreException {
+ BlamEditor.edit(new BlamEditorInput(blamOperation));
+ }
+
+ /**
+ * @return the widgets
+ */
+ public List<XWidget> getWidgets() {
+ return widgets;
+ }
+
+ public void onEvent(IBlamEvent blamEvent) {
+
+ if (blamEvent instanceof BlamStartedEvent) {
+ BlamStartedEvent blamStartEvent = (BlamStartedEvent) blamEvent;
+ setOuputText("Starting BLAM at " + blamStartEvent.getDate() + "\n");
+
+ } else if (blamEvent instanceof BlamFinishedEvent) {
+ BlamFinishedEvent blamFinishedEvent = (BlamFinishedEvent) blamEvent;
+ appendOuputLine("BLAM completed in " + (blamFinishedEvent.getDurationMillis() / 1000) + " secs");
+ }
+ }
+
+ @Override
+ protected void setInput(IEditorInput input) {
+ super.setInput(input);
+
+ blamVariableMap = new VariableMap();
+ }
+
+ /**
+ * @return the blamVariableMap
+ */
+ protected VariableMap getBlamVariableMap() {
+ return blamVariableMap;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamEditorInput.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamEditorInput.java
new file mode 100644
index 00000000000..10a7c7b947b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamEditorInput.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class BlamEditorInput implements IEditorInput {
+
+ private Artifact artifact;
+
+ public BlamEditorInput(Artifact artifact) {
+ this.artifact = artifact;
+ }
+
+ public BlamEditorInput(String workflowId) throws OseeCoreException {
+ this.artifact = BlamWorkflow.getOrCreateBlamWorkflow(BlamOperations.getBlamOperation(workflowId));
+ }
+
+ public BlamEditorInput(BlamOperation blamOperation) throws OseeCoreException {
+ this.artifact = BlamWorkflow.getOrCreateBlamWorkflow(blamOperation);
+ }
+
+ public boolean equals(Object obj) {
+ boolean equals = false;
+ if (obj instanceof BlamEditorInput) {
+ BlamEditorInput otherEdInput = (BlamEditorInput) obj;
+
+ equals = (artifact == otherEdInput.artifact);
+ }
+ return equals;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#exists()
+ */
+ public boolean exists() {
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
+ */
+ public ImageDescriptor getImageDescriptor() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getName()
+ */
+ public String getName() {
+ if (artifact == null) {
+ return "No Artifact Input Provided";
+ }
+ return artifact.getVersionedName();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getPersistable()
+ */
+ public IPersistableElement getPersistable() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getToolTipText()
+ */
+ public String getToolTipText() {
+ return getName();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+ */
+ @SuppressWarnings("unchecked")
+ public Object getAdapter(Class adapter) {
+ return null;
+ }
+
+ public Artifact getArtifact() {
+ return artifact;
+ }
+
+ /**
+ * @param artifact the artifact to set
+ */
+ public void setArtifact(Artifact artifact) {
+ this.artifact = artifact;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamFactory.java
new file mode 100644
index 00000000000..0e25d42dee5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamFactory.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class BlamFactory extends ArtifactFactory {
+ private static BlamFactory factory = null;
+
+ private BlamFactory(int factoryId) {
+ super(factoryId);
+ }
+
+ public static BlamFactory getInstance(int factoryId) {
+ if (factory == null) {
+ factory = new BlamFactory(factoryId);
+ }
+ return factory;
+ }
+
+ public static BlamFactory getInstance() {
+ return factory;
+ }
+
+ public @Override
+ Artifact getArtifactInstance(String guid, String humandReadableId, String factoryKey, Branch branch, ArtifactType artifactType) {
+ if (factoryKey.equals(BlamWorkflow.ARTIFACT_NAME)) {
+ return new BlamWorkflow(this, guid, humandReadableId, branch, artifactType);
+ }
+ throw new IllegalArgumentException("did not recognize the factory key: " + factoryKey);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamFinishedEvent.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamFinishedEvent.java
new file mode 100644
index 00000000000..39de99e1804
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamFinishedEvent.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+/**
+ * @author Jeff C. Phillips
+ * @author Robert A. Fisher
+ */
+public class BlamFinishedEvent implements IBlamEvent {
+
+ private final long duration;
+
+ /**
+ * @param duration
+ */
+ public BlamFinishedEvent(long duration) {
+ super();
+
+ this.duration = duration;
+ }
+
+ /**
+ * @return the duration
+ */
+ public long getDurationMillis() {
+ return duration;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamJob.java
new file mode 100644
index 00000000000..c603fc5edd8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamJob.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class BlamJob extends Job {
+ private final BlamWorkflow workflow;
+ private final VariableMap variableMap;
+ private final BlamEditor editor;
+ private final Collection<IBlamEventListener> listeners;
+
+ public BlamJob(BlamEditor editor) {
+ super(editor.getWorkflow().getDescriptiveName());
+ this.editor = editor;
+ this.variableMap = editor.getBlamVariableMap();
+ this.workflow = editor.getWorkflow();
+ this.listeners = new LinkedList<IBlamEventListener>();
+ }
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ IStatus toReturn = Status.CANCEL_STATUS;
+ long startTime = System.currentTimeMillis();
+ notifyListeners(new BlamStartedEvent());
+ try {
+ List<BlamOperation> operations = workflow.getOperations();
+ if (operations.size() == 0) {
+ throw new IllegalStateException("No operations were found for this workflow");
+ }
+ monitor.beginTask(workflow.getDescriptiveName(), operations.size());
+
+ for (BlamOperation operation : operations) {
+ IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1);
+
+ operation.setBlamEditor(editor);
+ operation.runOperation(variableMap, subMonitor);
+ monitor.worked(1);
+ }
+
+ toReturn = Status.OK_STATUS;
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ toReturn = new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, -1, ex.getLocalizedMessage(), ex);
+ } finally {
+ monitor.done();
+ notifyListeners(new BlamFinishedEvent(System.currentTimeMillis() - startTime));
+ }
+ return toReturn;
+ }
+
+ public void addListener(IBlamEventListener listener) {
+ if (listener == null) {
+ throw new IllegalArgumentException("listener can not be null");
+ }
+
+ listeners.add(listener);
+ }
+
+ public boolean removeListener(IBlamEventListener listener) {
+ return listeners.remove(listener);
+ }
+
+ private void notifyListeners(IBlamEvent event) {
+ for (IBlamEventListener listener : listeners) {
+ listener.onEvent(event);
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamOperations.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamOperations.java
new file mode 100644
index 00000000000..6e674a44664
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamOperations.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.ExtensionPoints;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation;
+import org.osgi.framework.Bundle;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class BlamOperations {
+
+ public static BlamOperation getBlamOperation(String operationId) {
+ for (BlamOperation blam : getBlamOperations()) {
+ if (blam.getClass().getSimpleName().equals(operationId)) {
+ return blam;
+ }
+ }
+ return null;
+ }
+
+ public static Collection<BlamOperation> getBlamOperationsNameSort() {
+ ArrayList<BlamOperation> blamsSortedByName = new ArrayList<BlamOperation>();
+ Map<String, BlamOperation> blamMap = new HashMap<String, BlamOperation>();
+ for (BlamOperation blam : getBlamOperations()) {
+ blamMap.put(blam.getClass().getSimpleName(), blam);
+ }
+ String names[] = blamMap.keySet().toArray(new String[blamMap.keySet().size()]);
+ Arrays.sort(names);
+ for (String name : names)
+ blamsSortedByName.add(blamMap.get(name));
+ return blamsSortedByName;
+ }
+
+ public static Collection<BlamOperation> getBlamOperations() {
+ List<BlamOperation> blamOperations = new ArrayList<BlamOperation>();
+ for (IConfigurationElement iConfigurationElement : ExtensionPoints.getExtensionElements(
+ "org.eclipse.osee.framework.ui.skynet.BlamOperation", "Operation")) {
+
+ String classname = iConfigurationElement.getAttribute("className");
+ String bundleName = iConfigurationElement.getContributor().getName();
+ if (classname != null && bundleName != null) {
+ Bundle bundle = Platform.getBundle(bundleName);
+ try {
+ Class<?> taskClass = bundle.loadClass(classname);
+ Object obj = taskClass.newInstance();
+ BlamOperation task = (BlamOperation) obj;
+ blamOperations.add(task);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, "Error loading BlamOperation extension", ex);
+ }
+ }
+ }
+ return blamOperations;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamParameter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamParameter.java
new file mode 100644
index 00000000000..d0ae9e8849f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamParameter.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class BlamParameter {
+ @SuppressWarnings("unused")
+ private final String name;
+ @SuppressWarnings("unused")
+ private final Class<?> clazz;
+ @SuppressWarnings("unused")
+ private String binding;
+
+ /**
+ * @param name
+ * @param clazz
+ * @param binding
+ */
+ public BlamParameter(String name, Class<?> clazz, String binding) {
+ super();
+ this.name = name;
+ this.clazz = clazz;
+ this.binding = binding;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamStartedEvent.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamStartedEvent.java
new file mode 100644
index 00000000000..7b05de4f6a1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamStartedEvent.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import java.util.Date;
+
+/**
+ * @author Jeff C. Phillips
+ * @author Robert A. Fisher
+ */
+public class BlamStartedEvent implements IBlamEvent {
+
+ private final Date date;
+
+ /**
+ * @param date
+ */
+ public BlamStartedEvent() {
+ super();
+ this.date = new Date();
+ }
+
+ /**
+ * @return the date
+ */
+ public Date getDate() {
+ return date;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamWorkflow.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamWorkflow.java
new file mode 100644
index 00000000000..eeebfa31633
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/BlamWorkflow.java
@@ -0,0 +1,198 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.XWidgetParser;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class BlamWorkflow extends Artifact {
+ public static final String ARTIFACT_NAME = "Blam Workflow";
+ private final List<BlamOperation> operations;
+ private List<DynamicXWidgetLayoutData> layoutDatas;
+ private final DynamicXWidgetLayout dynamicXWidgetLayout;
+ private BlamOperation soleOperation;
+
+ /**
+ * @param parentFactory
+ * @param guid
+ * @param humanReadableId
+ * @param branch
+ */
+ public BlamWorkflow(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) {
+ super(parentFactory, guid, humanReadableId, branch, artifactType);
+
+ this.operations = new ArrayList<BlamOperation>();
+ this.dynamicXWidgetLayout = new DynamicXWidgetLayout();
+ this.layoutDatas = new LinkedList<DynamicXWidgetLayoutData>();
+ }
+
+ public static BlamWorkflow getOrCreateBlamWorkflow(BlamOperation soleOperation) throws OseeCoreException {
+ BlamWorkflow blamWorkflow =
+ (BlamWorkflow) ArtifactTypeManager.addArtifact(ARTIFACT_NAME, BranchManager.getCommonBranch());
+ blamWorkflow.setDescriptiveName(soleOperation.getName());
+ blamWorkflow.setSoleOperation(soleOperation);
+ return blamWorkflow;
+ }
+
+ public List<DynamicXWidgetLayoutData> getLayoutDatas() throws IllegalArgumentException, OseeCoreException, ParserConfigurationException, SAXException, IOException, CoreException {
+ if (layoutDatas.isEmpty()) {
+ getOperations();
+ }
+ return layoutDatas;
+ }
+
+ public List<BlamOperation> getOperations() throws IllegalArgumentException, OseeCoreException, ParserConfigurationException, SAXException, IOException, CoreException {
+ operations.clear();
+
+ if (soleOperation == null) {
+ loadFromXml();
+ } else {
+ operations.add(soleOperation);
+ layoutDatas = XWidgetParser.extractWorkAttributes(dynamicXWidgetLayout, soleOperation.getXWidgetsXml());
+ }
+
+ return operations;
+ }
+
+ private void loadFromXml() throws ParserConfigurationException, OseeCoreException, CoreException, SAXException, IOException {
+ String blamXml = getSoleAttributeValue("Workflow Definition", "");
+ Document document = Jaxp.readXmlDocument(blamXml);
+ Element rootElement = document.getDocumentElement();
+
+ NodeList operations = rootElement.getElementsByTagName("Operation");
+ for (int i = 0; i < operations.getLength(); i++) {
+ loadBlamOperationFromXml((Element) operations.item(i));
+ }
+
+ NodeList xwidgets = rootElement.getElementsByTagName("Widgets");
+ for (int i = 0; i < xwidgets.getLength(); i++) {
+ setLayoutData((Element) xwidgets.item(i));
+ }
+ }
+
+ private void setLayoutData(Element element) throws ParserConfigurationException, SAXException, IOException {
+ layoutDatas = XWidgetParser.extractlayoutDatas(dynamicXWidgetLayout, element);
+ }
+
+ private void loadBlamOperationFromXml(Element operation) throws CoreException, IllegalArgumentException {
+ String operationName = operation.getAttribute("name");
+ if (operationName.equals("")) {
+ throw new IllegalArgumentException("The operation name must be specified");
+ }
+
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IExtension extension = registry.getExtension("org.eclipse.osee.framework.ui.skynet.BlamOperation", operationName);
+
+ if (extension == null) {
+ throw new IllegalArgumentException(
+ "No extension for org.eclipse.osee.framework.ui.skynet.BlamOperation with the name " + operationName + " was found.\n\n" + getOperationsListing(registry));
+ }
+
+ IConfigurationElement[] configElements = null;
+ configElements = extension.getConfigurationElements();
+ for (int j = 0; j < configElements.length; j++) {
+ BlamOperation blamOperation = (BlamOperation) configElements[j].createExecutableExtension("className");
+ operations.add(blamOperation);
+ }
+ }
+
+ private String getOperationsListing(IExtensionRegistry registry) {
+ StringBuilder strB = new StringBuilder(1000);
+ IExtensionPoint point =
+ Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.framework.ui.skynet.BlamOperation");
+ IExtension[] extensions = point.getExtensions();
+
+ for (IExtension extension : extensions) {
+ strB.append("Ext Point Id: ");
+ strB.append(extension.getUniqueIdentifier());
+ strB.append('\n');
+ }
+ return strB.toString();
+ }
+
+ public String getDescriptionUsage() {
+ try {
+ if (getOperations().size() == 1) {
+ return operations.get(0).getDescriptionUsage();
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return "Select parameters below and click the play button at the top right.";
+ }
+
+ public void saveLayoutData(String xml) throws OseeCoreException {
+ try {
+ String blamXml = getSoleAttributeValue("Workflow Definition", "");
+ Document document = Jaxp.readXmlDocument(blamXml);
+ Element rootElement = document.getDocumentElement();
+
+ NodeList oldXwidgets = rootElement.getElementsByTagName("Widgets");
+
+ // delete all old Xwidgets
+ for (int i = 0; i < oldXwidgets.getLength(); i++) {
+ rootElement.removeChild(oldXwidgets.item(i));
+ }
+
+ String doc = Jaxp.getDocumentXml(document);
+ doc = doc.replace("<Workflow>", "<Workflow>" + xml);
+
+ setSoleAttributeValue("Workflow Definition", doc);
+ persistAttributes();
+ } catch (IOException ex) {
+ throw new OseeCoreException(ex);
+ } catch (TransformerException ex) {
+ throw new OseeCoreException(ex);
+ } catch (ParserConfigurationException ex) {
+ throw new OseeCoreException(ex);
+ } catch (SAXException ex) {
+ throw new OseeCoreException(ex);
+ }
+ }
+
+ /**
+ * @param soleOperation the soleOperation to set
+ */
+ public void setSoleOperation(BlamOperation soleOperation) {
+ this.soleOperation = soleOperation;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/DynamicBlamOperation.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/DynamicBlamOperation.java
new file mode 100644
index 00000000000..f3228f30f05
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/DynamicBlamOperation.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.rmi.activation.ActivationException;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.update.core.IFeature;
+import org.eclipse.update.core.ISite;
+import org.eclipse.update.core.ISiteFeatureReference;
+import org.eclipse.update.core.SiteManager;
+import org.eclipse.update.operations.IOperationFactory;
+import org.eclipse.update.operations.OperationsManager;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public abstract class DynamicBlamOperation {
+ private Method mainMethod;
+ private BlamParameter[] parameters;
+
+ public void installAssociatedPlugin() throws MalformedURLException, CoreException {
+ IOperationFactory operationFactory = OperationsManager.getOperationFactory();
+ ISite site = SiteManager.getSite(new URL("http://www.eclipse.org/osee/"), null);
+ ISiteFeatureReference[] refs = site.getFeatureReferences();
+ IFeature feature = refs[0].getFeature(null);
+ operationFactory.createInstallOperation(site.getCurrentConfiguredSite(), feature, null, null, null);
+ }
+
+ public void init() throws ActivationException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+ mainMethod = findMainMethod(getMainMethodName());
+
+ String[] parameterNames = getParameterNames();
+ Class<?>[] parameterTypes = mainMethod.getParameterTypes();
+ if (parameterNames.length != parameterTypes.length) {
+ throw new ActivationException(
+ "The method " + getMainMethodName() + " has " + parameterTypes.length + " parameters, but " + parameterNames.length + " parameter names.");
+ }
+
+ parameters = new BlamParameter[parameterTypes.length];
+ for (int i = 0; i < parameterTypes.length; i++) {
+ parameters[i] = new BlamParameter(parameterNames[i], parameterTypes[i], null);
+ }
+
+ }
+
+ public void executeOperation(Object[] actualParameters) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
+ mainMethod.invoke(this, actualParameters);
+ }
+
+ private Method findMainMethod(String mainMethodName) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+ Class<? extends DynamicBlamOperation> classRep = getClass();
+ Method[] methods = classRep.getDeclaredMethods(); // get only the methods declared directly in the given class
+
+ for (Method method : methods) {
+ if (method.getName().equals(mainMethodName)) {
+ return method;
+ }
+ }
+ throw new NoSuchMethodException(mainMethodName);
+ }
+
+ /**
+ * should return user oriented names for input values in the same order that they should be passed to the operation's
+ * configured execution method
+ *
+ * @return array of parameter names
+ */
+ public abstract String[] getParameterNames();
+
+ public abstract String getMainMethodName();
+
+ public BlamParameter[] getParameters() {
+ return parameters;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/IBlamEvent.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/IBlamEvent.java
new file mode 100644
index 00000000000..ef112384127
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/IBlamEvent.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public interface IBlamEvent {
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/IBlamEventListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/IBlamEventListener.java
new file mode 100644
index 00000000000..275f571f733
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/IBlamEventListener.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public interface IBlamEventListener {
+
+ public void onEvent(IBlamEvent blamEvent);
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/OperationsPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/OperationsPage.java
new file mode 100644
index 00000000000..96968e59388
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/OperationsPage.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.osgi.framework.Bundle;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class OperationsPage {
+ public void findAllOperations() {
+ IExtensionPoint point =
+ Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.framework.ui.skynet.BlamOperation");
+ IExtension[] extensions = point.getExtensions();
+ for (IExtension extension : extensions) {
+ extension.getUniqueIdentifier();
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+ String classname = null;
+ String bundleName = null;
+ for (IConfigurationElement el : elements) {
+ if (el.getName().equals("Renderer")) {
+ classname = el.getAttribute("classname");
+ bundleName = el.getContributor().getName();
+ }
+ }
+ if (classname != null && bundleName != null) {
+ Bundle bundle = Platform.getBundle(bundleName);
+ try {
+ Class<?> renderClass = bundle.loadClass(classname);
+ renderClass.newInstance();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ } catch (NoClassDefFoundError er) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING,
+ "Failed to find a class definition for " + classname + ", registered from bundle " + bundleName,
+ er);
+ }
+ }
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/OverviewPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/OverviewPage.java
new file mode 100644
index 00000000000..6d8f4fbef89
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/OverviewPage.java
@@ -0,0 +1,240 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import java.util.List;
+import org.eclipse.jface.action.Action;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.IHelpContextIds;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.XFormToolkit;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.SectionPart;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class OverviewPage extends FormPage implements IActionable {
+ private final BlamWorkflow workflow;
+ private DynamicXWidgetLayout dynamicXWidgetLayout;
+ private final XFormToolkit toolkit;
+ private Composite parametersContainer;
+ private final BlamEditor editor;
+ private Text outputText;
+ private Section parameterSection;
+ private Section outputSection;
+ private IManagedForm managedForm;
+ private Composite outputComp;
+
+ public OverviewPage(BlamEditor editor) {
+ super(editor, "overview", "BLAM Workflow");
+
+ this.editor = editor;
+ this.toolkit = editor.getToolkit();
+ this.workflow = editor.getWorkflow();
+ try {
+ BlamOperation blamOperation = workflow.getOperations().iterator().next();
+ this.dynamicXWidgetLayout = null;
+ if (blamOperation instanceof IDynamicWidgetLayoutListener) {
+ this.dynamicXWidgetLayout = new DynamicXWidgetLayout((IDynamicWidgetLayoutListener) blamOperation, null);
+ } else {
+ this.dynamicXWidgetLayout = new DynamicXWidgetLayout();
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ public void update(DynamicXWidgetLayout dynamicXWidgetLayout) throws Exception {
+ //dispose old widgets before adding the new ones.
+ for (Control control : parametersContainer.getChildren()) {
+ control.dispose();
+ }
+
+ dynamicXWidgetLayout.createBody(toolkit, parametersContainer, null, null, true);
+ parametersContainer.layout();
+ parametersContainer.getParent().layout();
+ }
+
+ /**
+ * Loads stored DynamicXWidgetLayoutData and updates the overview page
+ *
+ * @param workflow
+ */
+ private void loadStoredLayoutData(BlamWorkflow workflow) {
+ List<DynamicXWidgetLayoutData> layoutDatas = null;
+ try {
+ layoutDatas = workflow.getLayoutDatas();
+
+ if (layoutDatas != null && !layoutDatas.isEmpty()) {
+ dynamicXWidgetLayout.addWorkLayoutDatas(layoutDatas);
+ update(dynamicXWidgetLayout);
+ }
+ parameterSection.setExpanded(true);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ @Override
+ protected void createFormContent(IManagedForm managedForm) {
+ ScrolledForm form = managedForm.getForm();
+ form.setText(getEditorInput().getName());
+ createToolBarActions(form);
+ form.updateToolBar();
+ fillBody(managedForm);
+
+ loadStoredLayoutData(workflow);
+
+ managedForm.refresh();
+ }
+
+ private void createToolBarActions(ScrolledForm form) {
+ Action runAction = new Action("Run BLAM in Job", Action.AS_PUSH_BUTTON) {
+ @Override
+ public void run() {
+ runWorkflow();
+ }
+ };
+ runAction.setToolTipText("Starts the BLAM");
+ runAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("run_exc.gif"));
+ form.getToolBarManager().add(runAction);
+
+ OseeAts.addButtonToEditorToolBar(editor, this, SkynetGuiPlugin.getInstance(), form.getToolBarManager(),
+ BlamEditor.EDITOR_ID, "BLAM Editor");
+
+ }
+
+ private void runWorkflow() {
+ VariableMap blamVariableMap = editor.getBlamVariableMap();
+ for (DynamicXWidgetLayoutData xWidgetData : dynamicXWidgetLayout.getLayoutDatas()) {
+ XWidget widget = xWidgetData.getXWidget();
+ blamVariableMap.setValue(widget.getLabel(), widget.getData());
+ }
+
+ BlamJob blamJob = new BlamJob(editor);
+ blamJob.addListener(editor);
+ Jobs.startJob(blamJob);
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ private void fillBody(IManagedForm managedForm) {
+ this.managedForm = managedForm;
+ ScrolledForm scrolledForm = managedForm.getForm();
+ GridLayout gridLayout = new GridLayout(1, false);
+ Composite body = scrolledForm.getBody();
+ body.setLayout(gridLayout);
+ body.setLayoutData(new GridData(SWT.LEFT, SWT.LEFT, true, false));
+
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(body, IHelpContextIds.MAIN_WORKFLOW_PAGE);
+
+ managedForm.addPart(new SectionPart(createUsageSection(body)));
+ managedForm.addPart(new SectionPart(createParametersSection(body)));
+ managedForm.addPart(new SectionPart(createOutputSection(body)));
+ managedForm.refresh();
+ }
+
+ private Section createUsageSection(Composite body) {
+ Section section = toolkit.createSection(body, Section.TITLE_BAR);
+ section.setText("Description and Usage");
+ section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ toolkit.addHelpLinkToSection(section, "/org.eclipse.pde.doc.user/guide/pde_running.htm");
+
+ Composite mainComp = toolkit.createClientContainer(section, 1);
+ // mainComp.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW));
+ mainComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+ mainComp.layout();
+
+ Text formText = toolkit.createText(mainComp, workflow.getDescriptionUsage(), SWT.NONE);
+ formText.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+
+ section.layout();
+ return section;
+ }
+
+ private Section createOutputSection(Composite body) {
+ outputSection = toolkit.createSection(body, Section.TITLE_BAR);
+ outputSection.setText("Execute");
+ outputSection.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ outputComp = toolkit.createClientContainer(outputSection, 1);
+ // mainComp.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW));
+ outputComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+ outputComp.setLayout(new GridLayout(1, false));
+
+ Button button = toolkit.createButton(outputComp, "Run this BLAM", SWT.PUSH);
+ button.setImage(SkynetGuiPlugin.getInstance().getImage("run_exc.gif"));
+ button.addListener(SWT.MouseUp, new Listener() {
+ @Override
+ public void handleEvent(Event event) {
+ runWorkflow();
+ }
+ });
+
+ outputText = toolkit.createText(outputComp, "BLAM has not yet run\n", SWT.WRAP);
+ GridData gridData = new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING);
+ gridData.heightHint = 500;
+ outputText.setLayoutData(gridData);
+
+ outputSection.layout();
+
+ return outputSection;
+ }
+
+ /**
+ * @param line
+ */
+ public void appendOuputLine(String additionalOutput) {
+ outputText.append(additionalOutput);
+ managedForm.reflow(true);
+ }
+
+ private Section createParametersSection(Composite body) {
+ parameterSection = toolkit.createSection(body, Section.TITLE_BAR);
+ parameterSection.setText("Parameters");
+ parameterSection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ parametersContainer = toolkit.createClientContainer(parameterSection, 1);
+
+ return parameterSection;
+ }
+
+ /**
+ * @param line
+ */
+ public void setOuputText(String text) {
+ outputText.setText(text);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/VariableMap.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/VariableMap.java
new file mode 100644
index 00000000000..b83c60dcc2a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/VariableMap.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class VariableMap {
+ private final HashMap<String, Object> variableMap = new HashMap<String, Object>();
+
+ public VariableMap() {
+ }
+
+ /**
+ * @throws OseeArgumentException
+ */
+ public VariableMap(Object... optionArgs) throws OseeArgumentException {
+ for (int i = 0; i < optionArgs.length; i += 2) {
+ if (optionArgs[i] instanceof String) {
+ variableMap.put((String) optionArgs[i], optionArgs[i + 1]);
+ } else if (optionArgs[i] == null) {
+ throw new OseeArgumentException(String.format("The %dth option must not be null", i));
+ } else {
+ throw new OseeArgumentException(String.format("The %dth option must be of type string but is of type %s",
+ i, optionArgs[i].getClass().getName()));
+ }
+ }
+ }
+
+ public void setValue(String variableName, Object value) {
+ variableMap.put(variableName, value);
+ }
+
+ public ArtifactType getArtifactType(String parameterName) throws OseeArgumentException {
+ return getSingleCollectionValue(ArtifactType.class, parameterName);
+ }
+
+ public AttributeType getAttributeType(String parameterName) throws OseeArgumentException {
+ return getSingleCollectionValue(AttributeType.class, parameterName);
+ }
+
+ public String getString(String parameterName) throws OseeArgumentException {
+ return getValue(String.class, parameterName);
+ }
+
+ public Branch getBranch(String parameterName) throws OseeArgumentException {
+ return getValue(Branch.class, parameterName);
+ }
+
+ public Boolean getBoolean(String parameterName) throws OseeArgumentException {
+ return getValue(Boolean.class, parameterName);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> Collection<T> getCollection(Class<T> clazz, String parameterName) throws OseeArgumentException {
+ return getValue(Collection.class, parameterName);
+ }
+
+ public User getUser(String parameterName) throws OseeArgumentException {
+ return getValue(User.class, parameterName);
+ }
+
+ public List<Artifact> getArtifacts(String parameterName) throws OseeArgumentException {
+ Collection<Artifact> artiafcts = getCollection(Artifact.class, parameterName);
+ if (artiafcts == null) {
+ return new ArrayList<Artifact>();
+ }
+ return new ArrayList<Artifact>(artiafcts);
+ }
+
+ private <T> T getSingleCollectionValue(Class<T> clazz, String parameterName) throws OseeArgumentException {
+ Collection<T> objects = getCollection(clazz, parameterName);
+ if (objects.size() != 1) {
+ throw new OseeArgumentException("Require a collection of size 1 not " + objects.size());
+ }
+ return objects.iterator().next();
+ }
+
+ private <T> T getValue(Class<T> clazz, String variableName) throws OseeArgumentException {
+ Object value = variableMap.get(variableName);
+
+ if (value != null && !clazz.isInstance(value)) {
+ throw new OseeArgumentException(
+ "Expecting object of type " + clazz.getName() + " not " + value.getClass().getName());
+ }
+ return clazz.cast(value);
+ }
+
+ public Object getValue(String variableName) throws OseeArgumentException {
+ return variableMap.get(variableName);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/WorkflowDataPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/WorkflowDataPage.java
new file mode 100644
index 00000000000..91f7bf68483
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/WorkflowDataPage.java
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.IHelpContextIds;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.XFormToolkit;
+import org.eclipse.osee.framework.ui.skynet.XWidgetParser;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.ImageHyperlink;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class WorkflowDataPage extends FormPage {
+ private BlamWorkflow workflow;
+ private static final SkynetGuiPlugin plugin = SkynetGuiPlugin.getInstance();
+ private final XFormToolkit toolkit;
+ private List<Text> parameters;
+ private List<Text> localVariables;
+ private final OverviewPage overviewPage;
+ private final DynamicXWidgetLayout dynamicXWidgetLayout;
+
+ public WorkflowDataPage(BlamEditor editor, OverviewPage overviewPage) {
+ super(editor, "overview", "Workflow Data");
+
+ this.workflow = (BlamWorkflow) ((BlamEditorInput) editor.getEditorInput()).getArtifact();
+ this.toolkit = editor.getToolkit();
+ this.parameters = new LinkedList<Text>();
+ this.localVariables = new LinkedList<Text>();
+ this.overviewPage = overviewPage;
+ this.dynamicXWidgetLayout = new DynamicXWidgetLayout();
+ }
+
+ protected void createFormContent(IManagedForm managedForm) {
+ ScrolledForm form = managedForm.getForm();
+ form.setText("Workflow Data");
+ createToolBarActions(form);
+ form.updateToolBar();
+ fillBody(managedForm);
+ managedForm.refresh();
+ }
+
+ private void createToolBarActions(final ScrolledForm form) {
+ Action runAction = new Action("Generate Workflow Overview Page", Action.AS_PUSH_BUTTON) {
+ public void run() {
+ StringBuilder strB = new StringBuilder(parameters.size() * 140);
+ strB.append("<Widgets>");
+ for (Text variableText : parameters) {
+ strB.append(variableText.getText());
+ }
+ strB.append("</Widgets>");
+ XWidgetParser widgetParser = new XWidgetParser();
+
+ String widgetXml = strB.toString();
+
+ try {
+ dynamicXWidgetLayout.addWorkLayoutDatas(XWidgetParser.extractWorkAttributes(dynamicXWidgetLayout,
+ widgetXml));
+ overviewPage.update(dynamicXWidgetLayout);
+
+ workflow.saveLayoutData(widgetXml);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ MessageDialog.openError(form.getShell(), "Error", ex.getLocalizedMessage());
+ }
+ }
+ };
+ runAction.setToolTipText("Generates or regenerates the workflow overview page based on the widgets defined here");
+ runAction.setImageDescriptor(plugin.getImageDescriptor("gear.gif"));
+ form.getToolBarManager().add(runAction);
+ }
+
+ private void fillBody(IManagedForm managedForm) {
+ Composite body = managedForm.getForm().getBody();
+ GridLayout gridLayout = new GridLayout(1, true);
+ body.setLayout(gridLayout);
+
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(body, IHelpContextIds.MAIN_WORKFLOW_PAGE);
+
+ createParametersSection(body);
+ createLocalVariablesSection(body);
+ }
+
+ private void createLocalVariablesSection(Composite body) {
+ Section section = toolkit.createSection(body, Section.TWISTIE | Section.TITLE_BAR);
+ section.setText("Local Variables");
+ section.setExpanded(true);
+ section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ toolkit.addHelpLinkToSection(section, "/org.eclipse.pde.doc.user/guide/pde_running.htm");
+
+ Composite variablesComposite = toolkit.createClientContainer(section, 2);
+ addNewVariableLinkToSection(section, variablesComposite, localVariables);
+ }
+
+ private void createParametersSection(Composite body) {
+ Section section = toolkit.createSection(body, Section.TWISTIE | Section.TITLE_BAR);
+ section.setText("Workflow Parameters");
+ section.setExpanded(true);
+ section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ Composite variablesComposite = toolkit.createClientContainer(section, 2);
+ addNewVariableLinkToSection(section, variablesComposite, parameters);
+ }
+
+ private void addNewVariableLinkToSection(final Section section, Composite variablesComposite, List<Text> variableTexts) {
+ ImageHyperlink addLink = new ImageHyperlink(section, SWT.NULL);
+ toolkit.adapt(addLink, true, true);
+ addLink.setImage(plugin.getImage("add.gif"));
+ addLink.setBackground(section.getTitleBarGradientBackground());
+ addLink.addHyperlinkListener(new AddListener(variablesComposite, variableTexts));
+ section.setTextClient(addLink);
+ }
+
+ private class AddListener extends HyperlinkAdapter {
+ private Composite variablesComposite;
+ private List<Text> variableTexts;
+ private RemoveListener removeListener;
+
+ public AddListener(Composite variablesComposite, List<Text> variableTexts) {
+ this.variablesComposite = variablesComposite;
+ this.variableTexts = variableTexts;
+ removeListener = new RemoveListener(variableTexts);
+ }
+
+ public void linkActivated(HyperlinkEvent ev) {
+ ImageHyperlink removeLink = new ImageHyperlink(variablesComposite, SWT.NULL);
+ toolkit.adapt(removeLink, true, true);
+ removeLink.setImage(plugin.getImage("remove.gif"));
+ removeLink.addHyperlinkListener(removeListener);
+
+ Text variableWidget =
+ toolkit.createText(variablesComposite,
+ "<XWidget xwidgetType=\"XListDropViewer\" displayName=\"Get This\" />");
+ removeLink.setData(variableWidget);
+ variableTexts.add(variableWidget);
+ variableWidget.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ variablesComposite.getParent().getParent().layout();
+ }
+ }
+
+ private class RemoveListener extends HyperlinkAdapter {
+ private List<Text> variableTexts;
+
+ public RemoveListener(List<Text> variableTexts) {
+ this.variableTexts = variableTexts;
+ }
+
+ public void linkActivated(HyperlinkEvent ev) {
+ ImageHyperlink removeLink = (ImageHyperlink) ev.widget;
+ Text variableWidget = (Text) removeLink.getData();
+
+ GridData gridData = ((GridData) variableWidget.getLayoutData());
+ gridData.exclude = true;
+ variableWidget.setVisible(false);
+ variableTexts.remove(variableWidget);
+
+ gridData = ((GridData) removeLink.getLayoutData());
+ gridData.exclude = true;
+ removeLink.setVisible(false);
+ removeLink.getParent().getParent().getParent().layout();
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/WorkflowJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/WorkflowJob.java
new file mode 100644
index 00000000000..2f2844e3b03
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/WorkflowJob.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class WorkflowJob extends Job {
+
+ /**
+ * @param name
+ */
+ public WorkflowJob(String name) {
+ super(name);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+
+ } catch (Exception ex) {
+ return new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, Status.OK, ex.getMessage(), ex);
+ }
+ return Status.OK_STATUS;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/AbstractBlam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/AbstractBlam.java
new file mode 100644
index 00000000000..edad17b3980
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/AbstractBlam.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.blam.BlamEditor;
+import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public abstract class AbstractBlam implements BlamOperation, IDynamicWidgetLayoutListener {
+ private BlamEditor blamEditor;
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return branchXWidgetXml;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getDescriptionUsage()
+ */
+ public String getDescriptionUsage() {
+ return "Select parameters below and click the play button at the top right.";
+ }
+
+ public String getName() {
+ return getClassSimpleName();
+ }
+
+ public String getClassSimpleName() {
+ return getClass().getSimpleName();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#setOverpages(org.eclipse.osee.framework.ui.skynet.blam.OverviewPage)
+ */
+ @Override
+ public void setBlamEditor(BlamEditor blamEditor) {
+ this.blamEditor = blamEditor;
+ }
+
+ public void appendResultLine(String output) {
+ blamEditor.appendOuputLine(output);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener#createXWidgetLayoutData(org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData, org.eclipse.osee.framework.ui.skynet.widgets.XWidget, org.eclipse.ui.forms.widgets.FormToolkit, org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener, boolean)
+ */
+ @Override
+ public void createXWidgetLayoutData(DynamicXWidgetLayoutData layoutData, XWidget xWidget, FormToolkit toolkit, Artifact art, XModifiedListener modListener, boolean isEditable) throws OseeCoreException {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener#widgetCreated(org.eclipse.osee.framework.ui.skynet.widgets.XWidget, org.eclipse.ui.forms.widgets.FormToolkit, org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout, org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener, boolean)
+ */
+ @Override
+ public void widgetCreated(XWidget xWidget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) throws OseeCoreException {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener#widgetCreating(org.eclipse.osee.framework.ui.skynet.widgets.XWidget, org.eclipse.ui.forms.widgets.FormToolkit, org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout, org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener, boolean)
+ */
+ @Override
+ public void widgetCreating(XWidget xWidget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) throws OseeCoreException {
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ArtifactSnapshotAllItems.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ArtifactSnapshotAllItems.java
new file mode 100644
index 00000000000..10d64cde261
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ArtifactSnapshotAllItems.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.util.Collection;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.ui.skynet.artifact.snapshot.ArtifactSnapshotManager;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class ArtifactSnapshotAllItems extends AbstractBlam {
+
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ try {
+ Branch branch = variableMap.getBranch("Branch");
+
+ monitor.setTaskName("Loading Artifact Type Descriptors");
+ Collection<ArtifactType> descriptors = TypeValidityManager.getValidArtifactTypes(branch);
+
+ monitor.beginTask("Regenerating Artifact Preview Snapshots", descriptors.size());
+
+ ArtifactSnapshotManager artifactSnapshotManager = ArtifactSnapshotManager.getInstance();
+ for (ArtifactType artifactType : descriptors) {
+ monitor.subTask(String.format("Loading artifacts of type [%s]", artifactType.getName()));
+ Collection<Artifact> artifacts = ArtifactQuery.getArtifactsFromType(artifactType, branch);
+ int count = 0;
+ int total = artifacts.size();
+ for (Artifact artifact : artifacts) {
+ monitor.subTask(String.format("Generating Snapshot for: [%s] [%s of %s]", artifact.getDescriptiveName(),
+ ++count, total));
+ artifactSnapshotManager.getDataSnapshot(artifact, true);
+
+ if (monitor.isCanceled()) {
+ return;
+ }
+ }
+ monitor.worked(1);
+ }
+ } finally {
+ monitor.done();
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/BlamOperation.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/BlamOperation.java
new file mode 100644
index 00000000000..17b24191681
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/BlamOperation.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.ui.skynet.blam.BlamEditor;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public interface BlamOperation {
+ public static final String emptyXWidgetsXml = "<xWidgets/>";
+ public static final String branchXWidgetXml =
+ "<xWidgets><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Branch\" /></xWidgets>";
+
+ public abstract void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception;
+
+ public abstract String getXWidgetsXml();
+
+ public abstract String getDescriptionUsage();
+
+ public abstract String getName();
+
+ public abstract void setBlamEditor(BlamEditor workflow);
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/CopyTransactionDataToBaseline.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/CopyTransactionDataToBaseline.java
new file mode 100644
index 00000000000..0b566df016d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/CopyTransactionDataToBaseline.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionId;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionIdManager;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class CopyTransactionDataToBaseline extends AbstractBlam {
+ private static final String COPY_TX_DATA =
+ "INSERT INTO osee_txs (transaction_id, gamma_id, mod_type, tx_current) SELECT ?, gamma_id, mod_type, tx_current FROM osee_txs WHERE transaction_id = ?";
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ Branch branch = variableMap.getBranch("Branch");
+ int txNumber = Integer.parseInt(variableMap.getString("From Transaction Number"));
+ TransactionId fromTransactionId = TransactionIdManager.getTransactionId(txNumber);
+ TransactionId baseLineTransaction = TransactionIdManager.getStartEndPoint(branch).getValue();
+
+ ConnectionHandler.runPreparedUpdate(COPY_TX_DATA, baseLineTransaction, fromTransactionId);
+
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XText\" displayName=\"From Transaction Number\" /><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Branch\" /></xWidgets>";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getDescriptionUsage()
+ */
+ public String getDescriptionUsage() {
+ return "Copy tx data from the From Transaction to the baseline transaction of the branch";
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/CreateNewUser.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/CreateNewUser.java
new file mode 100644
index 00000000000..b84c54cce25
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/CreateNewUser.java
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.UserNotInDatabase;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.util.EmailGroupsAndUserGroups;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.EmailGroupsAndUserGroups.GroupType;
+import org.eclipse.osee.framework.ui.skynet.widgets.XList.XListItem;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class CreateNewUser extends AbstractBlam {
+
+ private final static List<String> attrNames =
+ Arrays.asList("Company", "Company Title", "Street", "City", "State", "Zip", "Phone", "Mobile Phone",
+ "Fax Phone", "Website", "Notes");
+ private Set<Artifact> groupArts;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ monitor.beginTask("Create New User", IProgressMonitor.UNKNOWN);
+
+ User user = (User) ArtifactTypeManager.addArtifact(User.ARTIFACT_NAME, BranchManager.getCommonBranch());
+
+ String name = variableMap.getString("Name (Last, First)");
+ if (name.equals("")) {
+ AWorkbench.popup("ERROR", "Must Enter Name");
+ monitor.done();
+ return;
+ }
+ user.setDescriptiveName(name);
+
+ String userId = variableMap.getString("UserId (unique)");
+ if (userId.equals("")) {
+ AWorkbench.popup("ERROR", "Must Enter UserId");
+ monitor.done();
+ return;
+ }
+ try {
+ User existingUser = UserManager.getUserByUserId(userId);
+ if (existingUser != null) {
+ AWorkbench.popup("ERROR", "User with userId \"" + userId + "\" already exists.");
+ monitor.done();
+ return;
+ }
+ } catch (UserNotInDatabase ex) {
+ // good that is why we are creating it
+ }
+ user.setSoleAttributeValue("User Id", userId);
+
+ boolean active = variableMap.getBoolean("Active");
+ user.setSoleAttributeValue("Active", active);
+
+ String email = variableMap.getString("Email");
+ if (email.equals("")) {
+ AWorkbench.popup("ERROR", "Must Enter Email");
+ monitor.done();
+ return;
+ }
+ user.setSoleAttributeValue("Email", email);
+
+ // Process string attribute names
+ for (String attrName : attrNames) {
+ String value = variableMap.getString(attrName);
+ if (!value.equals("")) {
+ user.setSoleAttributeValue(attrName, value);
+ }
+ }
+ // Add user to selected User Group and Universal Group
+ for (XListItem groupNameListItem : variableMap.getCollection(XListItem.class, "Groups")) {
+ for (Artifact groupArt : groupArts) {
+ if (groupNameListItem.getName().equals(groupArt.getDescriptiveName())) {
+ if (groupArt.getArtifactTypeName().equals("Universal Group")) {
+ groupArt.addRelation(CoreRelationEnumeration.UNIVERSAL_GROUPING__MEMBERS, user);
+ } else if (groupArt.getArtifactTypeName().equals("User Group")) {
+ groupArt.addRelation(CoreRelationEnumeration.Users_User, user);
+ }
+ }
+ }
+ }
+
+ user.persistAttributesAndRelations();
+ ArtifactEditor.editArtifact(user);
+ monitor.done();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ String widgetXml = "<xWidgets>" +
+ //
+ "<XWidget xwidgetType=\"XText\" displayName=\"Name (Last, First)\" required=\"true\"/>" +
+ //
+ "<XWidget xwidgetType=\"XText\" displayName=\"UserId (unique)\" required=\"true\"/>" +
+ //
+ "<XWidget xwidgetType=\"XText\" displayName=\"Email\" required=\"true\"/>" +
+ //
+ "<XWidget xwidgetType=\"XCheckBox\" displayName=\"Active\" required=\"true\" defaultValue=\"true\"/>";
+
+ // Add all rest of attributes to fill
+ for (String attrName : attrNames) {
+ widgetXml += "<XWidget xwidgetType=\"XText\" displayName=\"" + attrName + "\"/>";
+ }
+ // Add groups to belong to
+ try {
+ groupArts = EmailGroupsAndUserGroups.getEmailGroupsAndUserGroups(UserManager.getUser(), GroupType.Both);
+ String groupStr = "";
+ for (Artifact art : groupArts) {
+ groupStr += art.getDescriptiveName() + ",";
+ }
+ groupStr = groupStr.replaceFirst(",$", "");
+ widgetXml +=
+ "<XWidget xwidgetType=\"XList(" + groupStr + ")\" displayName=\"Groups\" defaultValue=\"Everyone\"/>";
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ //
+ widgetXml += "</xWidgets>";
+ return widgetXml;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DatabaseHealth.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DatabaseHealth.java
new file mode 100644
index 00000000000..1d1da4ccc5f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DatabaseHealth.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.util.Map;
+import java.util.TreeMap;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask;
+import org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask.Operation;
+import org.osgi.framework.Bundle;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class DatabaseHealth extends AbstractBlam {
+ private Map<String, DatabaseHealthTask> dbFix = new TreeMap<String, DatabaseHealthTask>();
+ private Map<String, DatabaseHealthTask> dbVerify = new TreeMap<String, DatabaseHealthTask>();
+ private static final String SHOW_DETAILS_PROMPT = "Show Details of Operations";
+ private static final String CLEAN_ALL_PROMPT = "Run all the Cleanup Operations";
+ private static final String SHOW_ALL_PROMPT = "Run all the Verification Operations";;
+
+ public DatabaseHealth() {
+ loadExtensions();
+ }
+
+ @Override
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ runTasks(variableMap, monitor);
+ }
+
+ private void loadExtensions() {
+ IExtensionPoint point =
+ Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.framework.ui.skynet.DBHealthTask");
+ IExtension[] extensions = point.getExtensions();
+ for (IExtension extension : extensions) {
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+ String classname = null;
+ String bundleName = null;
+ for (IConfigurationElement element : elements) {
+ classname = element.getAttribute("class");
+ bundleName = element.getContributor().getName();
+
+ if (classname != null && bundleName != null) {
+ Bundle bundle = Platform.getBundle(bundleName);
+ try {
+ Class<?> taskClass = bundle.loadClass(classname);
+ Object obj = taskClass.newInstance();
+ DatabaseHealthTask task = (DatabaseHealthTask) obj;
+
+ if (task.getVerifyTaskName() != null) {
+ dbVerify.put(task.getVerifyTaskName(), task);
+ }
+ if (task.getFixTaskName() != null) {
+ dbFix.put(task.getFixTaskName(), task);
+ }
+ } catch (Exception ex) {
+ }
+ }
+ }
+ }
+ }
+
+ private void runTasks(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ int count = 0;
+ for (String taskName : dbFix.keySet()) {
+ if (variableMap.getBoolean(taskName)) {
+ count++;
+ }
+ }
+ for (String taskName : dbVerify.keySet()) {
+ if (variableMap.getBoolean(taskName)) {
+ count++;
+ }
+ }
+ monitor.beginTask("Database Health", count);
+ if (true){//AccessControlManager.isOseeAdmin()) {
+ StringBuilder builder = new StringBuilder();
+ boolean showDetails = variableMap.getBoolean(SHOW_DETAILS_PROMPT);
+ boolean fixAll = variableMap.getBoolean(CLEAN_ALL_PROMPT);
+ boolean verifyAll = variableMap.getBoolean(SHOW_ALL_PROMPT);
+ for (String taskName : dbFix.keySet()) {
+ if (fixAll || variableMap.getBoolean(taskName)) {
+ monitor.setTaskName(taskName);
+ DatabaseHealthTask task = dbFix.get(taskName);
+ task.run(variableMap, new SubProgressMonitor(monitor, 1), Operation.Fix, builder, showDetails);
+ monitor.worked(1);
+ }
+ }
+ for (String taskName : dbVerify.keySet()) {
+ if (verifyAll || variableMap.getBoolean(taskName)) {
+ monitor.setTaskName(taskName);
+ DatabaseHealthTask task = dbVerify.get(taskName);
+ task.run(variableMap, new SubProgressMonitor(monitor, 1), Operation.Verify, builder, showDetails);
+ monitor.worked(1);
+ }
+ }
+ appendResultLine(builder.toString());
+ } else {
+ appendResultLine("Must be a Developer to run this BLAM\n");
+ }
+
+ }
+
+ public String getXWidgetsXml() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("<xWidgets>");
+ builder.append("<XWidget xwidgetType=\"XCheckBox\" displayName=\"" + SHOW_DETAILS_PROMPT + "\" labelAfter=\"true\" horizontalLabel=\"true\"/>");
+ builder.append("<XWidget xwidgetType=\"XCheckBox\" displayName=\"" + CLEAN_ALL_PROMPT + "\" labelAfter=\"true\" horizontalLabel=\"true\"/>");
+ builder.append("<XWidget xwidgetType=\"XCheckBox\" displayName=\"" + SHOW_ALL_PROMPT + "\" labelAfter=\"true\" horizontalLabel=\"true\"/>");
+
+ builder.append("<XWidget xwidgetType=\"XLabel\" displayName=\" \"/>");
+ builder.append("<XWidget xwidgetType=\"XLabel\" displayName=\"Select Clean Up Operations to Run:\"/>");
+ for (String taskName : dbFix.keySet()) {
+ builder.append(getOperationsCheckBoxes(taskName));
+ }
+ builder.append("<XWidget xwidgetType=\"XLabel\" displayName=\" \"/>");
+ builder.append("<XWidget xwidgetType=\"XLabel\" displayName=\"Select Verification Operations to Run:\"/>");
+ for (String taskName : dbVerify.keySet()) {
+ builder.append(getOperationsCheckBoxes(taskName));
+ }
+ builder.append("</xWidgets>");
+ return builder.toString();
+ }
+
+ private String getOperationsCheckBoxes(String checkboxName) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("<XWidget xwidgetType=\"XCheckBox\" displayName=\"");
+ builder.append(checkboxName);
+ builder.append("\" labelAfter=\"true\" horizontalLabel=\"true\"/>");
+ return builder.toString();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteArchivedBranches.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteArchivedBranches.java
new file mode 100644
index 00000000000..00e07530081
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteArchivedBranches.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class DeleteArchivedBranches extends AbstractBlam {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ BranchManager.deleteArchivedBranches();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return emptyXWidgetsXml;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getDescriptionUsage()
+ */
+ public String getDescriptionUsage() {
+ return "Permantly purges all branches that are archived";
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteTransaction.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteTransaction.java
new file mode 100644
index 00000000000..e79332361a5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteTransaction.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.skynet.core.artifact.DeleteTransactionJob;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class DeleteTransaction extends AbstractBlam {
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ List<Integer> txs = Lib.stringToIntegerList(variableMap.getString("Transaction List"));
+ boolean force = variableMap.getBoolean("Force Delete");
+ int[] txIds = new int[txs.size()];
+ for (int index = 0; index < txs.size(); index++) {
+ txIds[index] = txs.get(index);
+ }
+ Job job = new DeleteTransactionJob(force, txIds);
+ Jobs.startJob(job);
+ job.join();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("<xWidgets>");
+ builder.append("<XWidget xwidgetType=\"XText\" displayName=\"Transaction List\" />");
+ builder.append("<XWidget xwidgetType=\"XCheckBox\" displayName=\"Force Delete\" />");
+ builder.append("</xWidgets>");
+ return builder.toString();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteUnusedFactories.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteUnusedFactories.java
new file mode 100644
index 00000000000..db6f177db98
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DeleteUnusedFactories.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class DeleteUnusedFactories extends AbstractBlam {
+ private static final String DELETE_UNUSED_FACTORIES =
+ "delete from osee_artifact_factory f1 where not exists (select '1' from osee_artifact_type f2 where f1.factory_id = f2.factory_id)";
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ ConnectionHandler.runPreparedUpdate(DELETE_UNUSED_FACTORIES);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return emptyXWidgetsXml;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DuplicateRelationOpertions.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DuplicateRelationOpertions.java
new file mode 100644
index 00000000000..13affb8352a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/DuplicateRelationOpertions.java
@@ -0,0 +1,235 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.CompositeKeyQuadHashMap;
+import org.eclipse.osee.framework.jdk.core.type.CompositeKeyTripleHashMap;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Andrew M. Finkbeiner
+ * @author Roberto E. Escobar
+ */
+public class DuplicateRelationOpertions extends AbstractBlam {
+
+ private static final String checkGammaCase =
+ "select rel1.rel_link_type_id, rel1.b_art_id, txd1.branch_id, rel1.a_order, txs1.gamma_id, rel1.a_art_id, rel1.b_order_value, rel1.REL_LINK_ID, txd1.tx_type as real_tx_type, txs1.* from osee_tx_details txd1, osee_relation_link rel1, osee_txs txs1 where txd1.transaction_id = txs1.transaction_id and txs1.gamma_id = rel1.gamma_id and txs1.tx_current = 1 and rel1.b_art_id = ? and rel1.a_art_id = ? and rel1.rel_link_type_id = ? and txd1.TX_TYPE = 0 order by txd1.branch_id, rel1.rel_link_type_id, rel1.b_art_id, rel1.b_order_value";
+
+ private static final String update_txs =
+ "update osee_txs set tx_current = ?, mod_type = ? where gamma_id = ? and transaction_id = ?";
+ private static final String update_version = "update osee_relation_link set modification_id = ? where gamma_id = ?";
+ private static final String SELECT_DUPLICATE_RELATIONS =
+ "select rel1.a_art_id, rel1.b_art_id, rel1.rel_link_type_id, txd1.branch_id, rel1.REL_LINK_ID, rel1.gamma_id, txd1.transaction_id from osee_relation_link rel1, osee_txs txs1, osee_tx_details txd1 , (select rel2.*, txd2.branch_id, txd2.transaction_id from osee_relation_link rel2, osee_txs txs2, osee_tx_details txd2 where txs2.transaction_id = txd2.transaction_id and txs2.tx_current = 1 and txs2.gamma_id = rel2.gamma_id) other_rel_link where txs1.transaction_id = txd1.transaction_id and txs1.tx_current = 1 and txs1.gamma_id = rel1.gamma_id and txd1.branch_id = other_rel_link.branch_id and rel1.a_art_id = other_rel_link.a_art_id and rel1.b_art_id = other_rel_link.b_art_id and rel1.REL_LINK_TYPE_ID = other_rel_link.rel_link_type_id and rel1.REL_LINK_ID <> other_rel_link.rel_link_id order by txd1.branch_id, rel1.rel_link_type_id, rel1.a_art_id, rel1.b_art_id, rel1.rel_link_id";
+ private CompositeKeyQuadHashMap<Integer, Integer, Integer, Integer, RelationInfo> relationInfo =
+ new CompositeKeyQuadHashMap<Integer, Integer, Integer, Integer, RelationInfo>(1000);
+
+ int[] gammaIds =
+ new int[] {852176, 1806465, 1806464, 1806466, 1806468, 852190, 852191, 1543816, 1807037, 1806492, 1806481,
+ 1806485, 1713318, 177456, 1806507, 177457, 177458, 177459, 177460, 177461, 177462, 177463, 1806499,
+ 1806498, 1806497, 1806502, 1806501, 1806500, 1806522, 173862, 852192, 852199, 1611799, 1498880, 177449,
+ 1495752, 177451, 1611800, 1806513, 177453, 177455, 1806516, 177454, 1575261, 223175, 1807087, 1807086,
+ 1807085, 1807084, 1800592, 1164028, 1807088, 1807089, 3249936, 1575289, 1575288, 1575284, 1575281,
+ 1575276, 1508988, 2848359, 1575272, 2848358, 2848361, 1508983, 2848360, 2848363, 1575268, 2848362,
+ 1508979, 1575265, 1137539, 898640, 173020, 1806903, 174666, 1806908, 1806364, 1806904, 1806863, 1806650,
+ 839426, 1812929, 1806391, 1806389, 1589156, 1806393, 264571, 1806392, 1589154, 1589155, 1806400, 264757,
+ 1806412, 1806413, 1806414, 3198866, 1806411, 1812923, 1812922, 467177, 1806422, 1806417, 1812925,
+ 1812924, 1806418, 1311395, 1482583, 1311387, 1806438, 1806244, 1806439, 1806245, 1806914, 1806246,
+ 1806436, 1806247, 1806437, 2078493, 2078494, 1806243, 1806446, 1806252, 1806447, 1806444, 2092598,
+ 1806445, 1806442, 1806443, 1806249, 1806440, 1806441, 1806251, 1806454, 1806453, 1806452, 1806451,
+ 1953629, 1806450, 2080927, 1806449, 1806448, 1806463, 1806462, 1806461, 1806460, 1806459, 261366,
+ 1806458, 1806457, 1806456, 261365};
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(SELECT_DUPLICATE_RELATIONS);
+ while (chStmt.next()) {
+ addRelationEntry(chStmt.getInt("a_art_id"), chStmt.getInt("b_art_id"), chStmt.getInt("rel_link_type_id"),
+ chStmt.getInt("branch_id"), chStmt.getInt("rel_link_id"), chStmt.getLong("gamma_id"),
+ chStmt.getInt("transaction_id"));
+ }
+ } finally {
+ chStmt.close();
+ }
+ Collection<RelationInfo> values = relationInfo.values();
+ this.appendResultLine(String.format("Found [%d] potential conflicts.", values.size()));
+
+ int oddCases = 0;
+ int goodCases = 0;
+ int interestingCases = 0;
+ int casesWithDuplicateItemsInSameTransaction = 0;
+ for (RelationInfo info : values) {
+
+ for (int i = 0; i < info.relLinksToGammas.size(); i++) {
+ for (int j = i + 1; j < info.relLinksToGammas.size(); j++) {
+ if (info.relLinksToGammas.get(i).getValue().intValue() == info.relLinksToGammas.get(j).getValue().intValue()) {
+ casesWithDuplicateItemsInSameTransaction++;
+ }
+ }
+ }
+ if (info.art_a == 81891 && info.art_b == 107083) {
+ System.out.println("look at me");
+
+ }
+ if (info.relLinksToGammas.size() < 2) {
+ oddCases++;
+ } else if (info.relLinksToGammas.size() > 2) {
+ OseeLog.log(DuplicateRelationOpertions.class, Level.INFO, String.format("aArt[%d], bArt[%d]", info.art_a,
+ info.art_b));
+ interestingCases++;
+ } else {
+ goodCases++;
+ }
+ }
+
+ // List<Object[]> batchedTxsUpdates = new ArrayList<Object[]>();
+ // List<Object[]> batchedVersionUpdates = new ArrayList<Object[]>();
+ HashSet<Long> gammas = new HashSet<Long>();
+ CompositeKeyTripleHashMap<Integer, Integer, Integer, String> messages =
+ new CompositeKeyTripleHashMap<Integer, Integer, Integer, String>();
+ //ModificationType.DELETED;/
+ // TxChange.DELETED;
+ // FileOutputStream fos = new FileOutputStream(new File("DuplicateRelationRecovery.txt"));
+ for (RelationInfo info : values) {
+ int count = 0;
+ int modCount = 0;
+ long gammaId = 0;
+ try {
+ chStmt.runPreparedQuery(checkGammaCase, info.art_b, info.art_a, info.rel_link_type);
+ while (chStmt.next()) {
+ if (chStmt.getInt("mod_type") == 2) {
+ modCount++;
+ gammaId = chStmt.getLong("gamma_id");
+ }
+ count++;
+ }
+ } catch (OseeCoreException ex) {
+ ex.printStackTrace();
+ } finally {
+ chStmt.close();
+ }
+ boolean added = false;
+ if (modCount == 1 && count == 2) {
+ for (int id : gammaIds) {
+ if (gammaId == id) {
+ gammas.add(gammaId);
+ added = true;
+ break;
+ }
+ }
+ if (!added) {
+ System.out.println("Other Odd Case");
+ }
+ } else {
+ if (!messages.containsKey(info.art_a, info.art_b, info.rel_link_type)) {
+ messages.put(info.art_a, info.art_b, info.rel_link_type, String.format(
+ "modCount[%d] count[%d] aArt[%d] bArt[%d] linkType[%d]", modCount, count, info.art_a, info.art_b,
+ info.rel_link_type));
+ }
+ }
+
+ // for (int i = 0; i < info.relLinksToGammas.size(); i++) {
+ // if (info.art_a == 81891 && info.art_b == 107083) {
+ // System.out.println("look at me");
+ // }
+ // gammas.add(info.relLinksToGammas.get(i).getKey());
+ // fos.write(String.format("%d, %d\n", info.relLinksToGammas.get(i).getKey(),
+ // info.relLinksToGammas.get(i).getValue()).getBytes());
+ // batchedTxsUpdates.add(new Object[] { TxChange.DELETED.getValue(),
+ // ModificationType.DELETED.getValue(),
+ // info.relLinksToGammas.get(i).getKey(), info.relLinksToGammas.get(i).getValue()});
+ // batchedVersionUpdates.add(new Object[] { ModificationType.DELETED.getValue(),
+ // info.relLinksToGammas.get(i).getKey()});
+ // }
+ }
+ // fos.close();
+ // System.out.println("here we go.");
+ // System.out.println("wait here");
+
+ System.out.println(String.format("%d gamma id's that should be modified.", gammas.size()));
+ System.out.println(Arrays.deepToString(gammas.toArray()));
+ for (String str : messages.values()) {
+ System.out.println(str);
+ }
+
+ // ConnectionHandler.runPreparedUpdateBatch(this.update_txs, batchedTxsUpdates);
+ // ConnectionHandler.runPreparedUpdateBatch(this.update_version, batchedVersionUpdates);
+
+ // System.out.println(values.size());
+ //*/
+ }
+
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XText\" displayName=\"Branch List\" /><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Parent Branch\" /></xWidgets>";
+ }
+
+ /**
+ * @param int1
+ * @param long1
+ * @param int2
+ * @param long2
+ * @param int3
+ * @param int4
+ * @param int5
+ * @param int6
+ */
+ private void addRelationEntry(int a_art_id, int b_art_id, int relLinkTypeId, int branchId, int relLinkId, long gammaId, int transactionId) {
+ RelationInfo info = relationInfo.get(a_art_id, b_art_id, relLinkTypeId, branchId);
+ if (info == null) {
+ info = new RelationInfo(a_art_id, b_art_id, relLinkTypeId, branchId);
+ relationInfo.put(a_art_id, b_art_id, relLinkTypeId, branchId, info);
+ }
+ info.add(gammaId, transactionId);
+ }
+
+ private class RelationInfo {
+ private int rel_link_type;
+ private int art_a;
+ private int art_b;
+ private List<Pair<Long, Integer>> relLinksToGammas;
+
+ RelationInfo(int a_art_id, int b_art_id, int relLinkTypeId, int branchId) {
+ this.rel_link_type = relLinkTypeId;
+ this.art_a = a_art_id;
+ this.art_b = b_art_id;
+ relLinksToGammas = new ArrayList<Pair<Long, Integer>>();
+ }
+
+ public void add(long gammaId, int transactionId) {
+ for (int i = 0; i < relLinksToGammas.size(); i++) {
+ if (relLinksToGammas.get(i).getKey().longValue() == gammaId && relLinksToGammas.get(i).getValue().intValue() == transactionId) {
+ return;
+ }
+ }
+ for (int i = 0; i < relLinksToGammas.size(); i++) {
+ if (transactionId > relLinksToGammas.get(i).getValue().intValue()) {
+ relLinksToGammas.add(i, new Pair<Long, Integer>(gammaId, transactionId));
+ return;
+ }
+ }
+ relLinksToGammas.add(new Pair<Long, Integer>(gammaId, transactionId));
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ExportArtifacts.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ExportArtifacts.java
new file mode 100644
index 00000000000..4c32f7df857
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ExportArtifacts.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeTypeDoesNotExist;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.io.CharBackedInputStream;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelXmlWriter;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ISheetWriter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.ui.plugin.util.AIFile;
+import org.eclipse.osee.framework.ui.plugin.util.OseeData;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.swt.program.Program;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ExportArtifacts extends AbstractBlam {
+ private CharBackedInputStream charBak;
+ private ISheetWriter excelWriter; //attributeType, columnIndex
+ private AttributeType[] attributeColumns;
+ private AttributeType nameAttributeType;
+ private static final int NUM_FIXED_COLUMNS = 4;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ init();
+
+ List<Artifact> parentArtifacts = variableMap.getArtifacts("artifacts");
+ List<Artifact> artifacts;
+
+ if (variableMap.getBoolean("Include Children")) {
+ artifacts = new ArrayList<Artifact>(400);
+ for (Artifact artifact : parentArtifacts) {
+ artifacts.add(artifact);
+ artifacts.addAll(artifact.getDescendants());
+ }
+ } else {
+ artifacts = parentArtifacts;
+ }
+
+ mapAttributeTypeToColumn(artifacts);
+
+ String[] row = new String[attributeColumns.length + NUM_FIXED_COLUMNS];
+ excelWriter.startSheet("Artifacts", row.length);
+ excelWriter.writeCell("GUID");
+ excelWriter.writeCell("HRID");
+ excelWriter.writeCell("Artifact Type");
+ excelWriter.writeCell("Name");
+ for (AttributeType attributeType : attributeColumns) {
+ excelWriter.writeCell(attributeType.getName());
+ }
+ excelWriter.endRow();
+
+ for (Artifact artifact : artifacts) {
+ Arrays.fill(row, null);
+ row[0] = artifact.getGuid();
+ row[1] = artifact.getHumanReadableId();
+ row[2] = artifact.getArtifactTypeName();
+ row[3] = artifact.getDescriptiveName();
+ for (AttributeType attributeType : artifact.getAttributeTypes()) {
+ if (!attributeType.equals(nameAttributeType)) {
+ String value = artifact.getAttributesToString(attributeType.getName());
+ if (!value.equals("")) {
+ row[NUM_FIXED_COLUMNS + Arrays.binarySearch(attributeColumns, attributeType)] = value;
+ }
+ }
+ }
+ excelWriter.writeRow(row);
+ }
+
+ excelWriter.endSheet();
+ excelWriter.endWorkbook();
+ IFile iFile = OseeData.getIFile("artifacts" + Lib.getDateTimeString() + ".xml");
+ AIFile.writeToFile(iFile, charBak);
+ Program.launch(iFile.getLocation().toOSString());
+ }
+
+ private void mapAttributeTypeToColumn(List<Artifact> artifacts) throws OseeCoreException {
+ HashSet<AttributeType> attributeTypes = new HashSet<AttributeType>();
+
+ for (Artifact artifact : artifacts) {
+ for (AttributeType attributeType : artifact.getAttributeTypes()) {
+ attributeTypes.add(attributeType);
+ }
+ }
+
+ attributeTypes.remove(nameAttributeType);
+ attributeColumns = attributeTypes.toArray(new AttributeType[attributeTypes.size()]);
+ Arrays.sort(attributeColumns);
+ }
+
+ private void init() throws IOException, OseeDataStoreException, OseeTypeDoesNotExist {
+ nameAttributeType = AttributeTypeManager.getType("Name");
+ charBak = new CharBackedInputStream();
+ excelWriter = new ExcelXmlWriter(charBak.getWriter());
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Include Children\" /><XWidget xwidgetType=\"XListDropViewer\" displayName=\"artifacts\" /></xWidgets>";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getDescriptionUsage()
+ */
+ public String getDescriptionUsage() {
+ return "Select parameters below and click the play button at the top right.";
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ExtractReqPriority.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ExtractReqPriority.java
new file mode 100644
index 00000000000..8451c854dcb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ExtractReqPriority.java
@@ -0,0 +1,93 @@
+/*
+ * Created on Dec 8, 2007
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelSaxHandler;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ExtractReqPriority implements RowProcessor {
+ private HashMap<String, String> reqPriorities;
+
+ public ExtractReqPriority(String excelMlPath) throws UnsupportedEncodingException, FileNotFoundException, IOException, SAXException {
+ this.reqPriorities = new HashMap<String, String>();
+
+ File file = new File(excelMlPath);
+
+ XMLReader xmlReader = XMLReaderFactory.createXMLReader();
+ xmlReader.setContentHandler(new ExcelSaxHandler(this, true));
+ xmlReader.parse(new InputSource(new InputStreamReader(new FileInputStream(file), "UTF-8")));
+ }
+
+ public HashMap<String, String> getReqPriorities() {
+ return reqPriorities;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor#detectedRowAndColumnCounts(int, int)
+ */
+ public void detectedRowAndColumnCounts(int rowCount, int columnCount) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor#foundStartOfWorksheet(java.lang.String)
+ */
+ public void foundStartOfWorksheet(String sheetName) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor#processCommentRow(java.lang.String[])
+ */
+ public void processCommentRow(String[] row) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor#processEmptyRow()
+ */
+ public void processEmptyRow() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor#processHeaderRow(java.lang.String[])
+ */
+ public void processHeaderRow(String[] row) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor#processRow(java.lang.String[])
+ */
+ public void processRow(String[] row) {
+ // pick the highest priority specified in the workbook (in case there are multiple priorities for the same item)
+ if (row[1] != null) {
+ String priority = reqPriorities.get(row[1]);
+ if (priority != null) {
+ if (priority.compareTo(row[0]) > 0) {
+ return;
+ }
+ }
+ reqPriorities.put(row[1], row[0]);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor#reachedEndOfWorksheet()
+ */
+ public void reachedEndOfWorksheet() {
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FindArtifactsWithMinAttributeContraintProblems.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FindArtifactsWithMinAttributeContraintProblems.java
new file mode 100644
index 00000000000..735446764e6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FindArtifactsWithMinAttributeContraintProblems.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class FindArtifactsWithMinAttributeContraintProblems extends AbstractBlam {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ Branch branch = variableMap.getBranch("Parent Branch");
+ ArtifactQuery.getArtifactsFromBranch(branch, false);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XText\" displayName=\"Branch List\" /><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Parent Branch\" /></xWidgets>";
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FindInvalidUTF8Chars.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FindInvalidUTF8Chars.java
new file mode 100644
index 00000000000..478bebc69b5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FindInvalidUTF8Chars.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import static org.eclipse.osee.framework.db.connection.core.schema.SkynetDatabase.ATTRIBUTE_VERSION_TABLE;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class FindInvalidUTF8Chars extends AbstractBlam {
+ private static final String READ_ATTRIBUTE_VALUES = "SELECT art_id, value FROM " + ATTRIBUTE_VERSION_TABLE;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+
+ int count = 0;
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(1000, READ_ATTRIBUTE_VALUES);
+ while (chStmt.next()) {
+ String value = chStmt.getString("value");
+ if (value != null) {
+ count++;
+ int length = value.length();
+ for (int i = 0; i < length; i++) {
+ char c = value.charAt(i);
+ // based on http://www.w3.org/TR/2006/REC-xml-20060816/#charsets
+ if ((c < 0x20 && c != 0x9 && c != 0xA && c != 0xD) || (c > 0xD7FF && c < 0xE000) || (c > 0xFFFD && c < 0x10000) || c > 0x10FFFF) {
+ System.out.println("artifact id: " + chStmt.getInt("art_id") + " char: " + (int) c);
+ }
+ }
+ }
+ }
+ } finally {
+ chStmt.close();
+ System.out.println("count: " + count);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return emptyXWidgetsXml;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FixTemplateContentArtifacts.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FixTemplateContentArtifacts.java
new file mode 100644
index 00000000000..514ea09e006
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/FixTemplateContentArtifacts.java
@@ -0,0 +1,263 @@
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.core.client.ClientSessionManager;
+import org.eclipse.osee.framework.core.client.server.HttpUrlBuilder;
+import org.eclipse.osee.framework.core.data.OseeInfo;
+import org.eclipse.osee.framework.core.data.OseeServerContext;
+import org.eclipse.osee.framework.core.exception.OseeAuthenticationRequiredException;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeTypeDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeWrappedException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.HttpProcessor;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.jdk.core.util.HttpProcessor.AcquireResult;
+import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.render.WordTemplateRenderer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+/**
+ * @author Jeff C. Phillips
+ * @author Theron Virgin
+ */
+public class FixTemplateContentArtifacts extends AbstractBlam {
+ private static final boolean DEBUG =
+ Boolean.parseBoolean(Platform.getDebugOption("org.eclipse.osee.framework.ui.skynet/debug/Blam"));
+
+ private static final String GET_ATTRS =
+ "SELECT * FROM osee_attribute t1, osee_artifact t3 WHERE t1.attr_type_id = ? AND t1.art_id = t3.art_id AND t1.uri is not null";
+ private static final String GET_ATTRS_TEST = GET_ATTRS + " AND t1.art_id = 3894";
+ private String applicationServerAddress;
+ private Collection<String> badData = new LinkedList<String>();
+ private static final String[] columnHeaders = new String[] {"Corrupted Data"};
+
+ @Override
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ applicationServerAddress = OseeInfo.getValue("osee.resource.server");
+
+ ArrayList<AttrData> attrDatas = loadAttrData();
+ monitor.beginTask("Fix word template content", attrDatas.size());
+ for (AttrData attrData : attrDatas) {
+ monitor.subTask(attrData.getHrid());
+ String content = new String(getResource(attrData.getUri()));
+ Element rootElement = null;
+ if (DEBUG) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, String.format("Before Fix: %s", content));
+ }
+
+ final Collection<Element> elements = new LinkedList<Element>();
+ final Collection<Element> sectPr = new LinkedList<Element>();
+ boolean fixedAttribute = false;
+ try {
+
+ Document doc = Jaxp.readXmlDocument("<ForFix>" + content + "</ForFix>");
+ rootElement = doc.getDocumentElement();
+
+ NodeList nodeList = rootElement.getElementsByTagName("*");
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Element element = (Element) nodeList.item(i);
+ if (element.getNodeName().endsWith("w:p")) {
+ elements.add(element);
+ }
+ if (element.getNodeName().endsWith("w:sectPr")) {
+ sectPr.add(element);
+ }
+ }
+ for (Element paragraph : elements) {
+ boolean badParagraph = isBadParagraph(paragraph);
+ if (badParagraph) {
+ paragraph.getParentNode().removeChild(paragraph);
+ }
+ fixedAttribute = fixedAttribute || badParagraph;
+ }
+ for (Element sect : sectPr) {
+ sect.getParentNode().removeChild(sect);
+ fixedAttribute = true;
+ }
+ } catch (Exception ex) {
+ badData.add(attrData.gammaId);
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, String.format("Skiping File %s because of exception %s",
+ attrData.getHrid(), ex));
+ }
+
+ if (fixedAttribute) {
+ //backup old files before changing them
+ try {
+ HttpProcessor.put(getStorageURL(attrData.getGammaId(), attrData.getHrid(), "bck", false),
+ Lib.stringToInputStream(content), "txt/xml", "UTF-8");
+ String fixedContent =
+ Lib.inputStreamToString(new ByteArrayInputStream(
+ WordTemplateRenderer.getFormattedContent(rootElement)));
+
+ HttpProcessor.put(getStorageURL(attrData.getGammaId(), attrData.getHrid(), attrData.getUri().contains(
+ ".xml") ? "xml" : null, true), new ByteArrayInputStream(
+ WordTemplateRenderer.getFormattedContent(rootElement)), "txt/xml", "UTF-8");
+
+ if (DEBUG) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, String.format(" After Fix : %s", fixedContent));
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, String.format(
+ "Skiping File %s because of exception %s", attrData.getHrid(), ex));
+ }
+ }
+ monitor.worked(1);
+ }
+
+ StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ sbFull.append(AHTML.beginMultiColumnTable(100, 1));
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ for (String string : badData) {
+ sbFull.append(AHTML.addRowMultiColumnTable(new String[] {string}));
+ }
+ sbFull.append(AHTML.endMultiColumnTable());
+ XResultData rd = new XResultData();
+ rd.addRaw(sbFull.toString());
+ rd.report("Fix bad data", Manipulations.RAW_HTML);
+ }
+
+ private ArrayList<AttrData> loadAttrData() throws OseeDataStoreException, OseeTypeDoesNotExist {
+ ArrayList<AttrData> attrData = new ArrayList<AttrData>();
+
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(GET_ATTRS,
+ AttributeTypeManager.getType(WordAttribute.WORD_TEMPLATE_CONTENT).getAttrTypeId());
+ while (chStmt.next()) {
+ attrData.add(new AttrData(chStmt.getString("gamma_Id"), chStmt.getString("human_readable_id"),
+ chStmt.getString("uri")));
+ }
+ } finally {
+ chStmt.close();
+ }
+ return attrData;
+ }
+
+ public static URL getStorageURL(String gammaId, String artifactHrid, String extension, boolean allowOverwrite) throws OseeDataStoreException, MalformedURLException, OseeAuthenticationRequiredException {
+ Map<String, String> parameterMap = new HashMap<String, String>();
+ parameterMap.put("protocol", "attr");
+ parameterMap.put("seed", gammaId);
+ parameterMap.put("name", artifactHrid);
+ parameterMap.put("is.overwrite.allowed", String.valueOf(allowOverwrite));
+ parameterMap.put("compress.before.saving", "true");
+ parameterMap.put("sessionId", ClientSessionManager.getSessionId());
+
+ if (Strings.isValid(extension) != false) {
+ parameterMap.put("extension", extension);
+ }
+ String urlString =
+ HttpUrlBuilder.getInstance().getOsgiServletServiceUrl(OseeServerContext.RESOURCE_CONTEXT, parameterMap);
+ return new URL(urlString);
+ }
+
+ public byte[] getResource(String resourcePath) throws OseeCoreException {
+ byte[] toReturn = null;
+ ByteArrayOutputStream sourceOutputStream = new ByteArrayOutputStream();
+ try {
+ AcquireResult result = HttpProcessor.acquire(getAcquireUrl(resourcePath), sourceOutputStream);
+ if (result.getCode() == HttpURLConnection.HTTP_OK) {
+ toReturn = sourceOutputStream.toByteArray();
+ }
+ } catch (Exception ex) {
+ throw new OseeWrappedException(ex);
+ } finally {
+ try {
+ sourceOutputStream.close();
+ } catch (IOException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ }
+ return toReturn;
+ }
+
+ private URL getAcquireUrl(String uri) throws OseeCoreException, MalformedURLException {
+ Map<String, String> parameterMap = new HashMap<String, String>();
+ parameterMap.put("uri", uri);
+ parameterMap.put("decompress.before.sending", "true");
+ parameterMap.put("sessionId", ClientSessionManager.getSessionId());
+
+ String urlString =
+ HttpUrlBuilder.getInstance().getOsgiServletServiceUrl(OseeServerContext.RESOURCE_CONTEXT, parameterMap);
+ return new URL(urlString);
+ }
+
+ // private URL getAcquireUrl(String address, String uriPath) throws MalformedURLException, UnsupportedEncodingException {
+ // if (address.endsWith("/")) {
+ // address = address.substring(0, address.length() - 1);
+ // }
+ // return new URL(String.format("%s/%s?uri=%s&decompress.before.sending=true", address,
+ // OseeServerContext.RESOURCE_CONTEXT, URLEncoder.encode(uriPath, "UTF-8")));
+ // }
+
+ //To handle the case of sub-sections
+ private boolean isBadParagraph(Element paragraph) throws OseeCoreException {
+ boolean badParagraph = false;
+ String content = paragraph.getTextContent();
+ if (content != null && content.contains("LISTNUM \"listreset\"")) {
+ badParagraph = true;
+ }
+
+ return badParagraph;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ @Override
+ public String getXWidgetsXml() {
+ return emptyXWidgetsXml;
+ }
+
+ class AttrData {
+ private String gammaId;
+ private String hrid;
+ private String uri;
+
+ public AttrData(String gammaId, String hrid, String uri) {
+ super();
+ this.gammaId = gammaId;
+ this.hrid = hrid;
+ this.uri = uri;
+ }
+
+ public String getGammaId() {
+ return gammaId;
+ }
+
+ public String getHrid() {
+ return hrid;
+ }
+
+ public String getUri() {
+ return uri;
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/LoadAllArtifactsOnBranch.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/LoadAllArtifactsOnBranch.java
new file mode 100644
index 00000000000..a568d675320
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/LoadAllArtifactsOnBranch.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class LoadAllArtifactsOnBranch extends AbstractBlam {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ Branch branch = variableMap.getBranch("Parent Branch");
+ ArtifactQuery.getArtifactsFromBranch(branch, false);
+ }
+
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XText\" displayName=\"Branch List\" /><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Parent Branch\" /></xWidgets>";
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ParseWindowsDirectoryListing.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ParseWindowsDirectoryListing.java
new file mode 100644
index 00000000000..07d005d26cc
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ParseWindowsDirectoryListing.java
@@ -0,0 +1,55 @@
+/**
+ *
+ */
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ParseWindowsDirectoryListing extends AbstractBlam {
+ private static final String DIRECTORY_PREFIX = " Directory of Y:\\";
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ String listingFile = variableMap.getString("Directory Listing File");
+ Matcher matcher = Pattern.compile("(\\d+/\\d+/\\d+).*<DIR>.*?SW\\\\(\\S+)\\s+(.*)").matcher("");
+ BufferedWriter writer = new BufferedWriter(new FileWriter(Lib.removeExtension(listingFile) + ".csv"));
+
+ String path = null;
+ for (String line : Lib.readListFromFile(listingFile)) {
+ if (line.startsWith(DIRECTORY_PREFIX)) {
+ path = line.substring(DIRECTORY_PREFIX.length());
+ } else {
+ matcher.reset(line);
+ if (matcher.find()) {
+ String summary = matcher.group(1) + "|" + matcher.group(2) + "|" + path + "\\" + matcher.group(3);
+ if (!summary.endsWith(".")) {
+ writer.write(summary);
+ writer.write(Lib.lineSeparator);
+ }
+ }
+ }
+ }
+ writer.close();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XText\" displayName=\"Directory Listing File\" defaultValue=\"c:\\UserData\\cte.txt\" /></xWidgets>";
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/PruneWorkspace.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/PruneWorkspace.java
new file mode 100644
index 00000000000..88b7b8ef819
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/PruneWorkspace.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.regex.Pattern;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class PruneWorkspace extends AbstractBlam {
+ /**
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap,
+ * org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ File keeperFile = new File(variableMap.getString("Preserve List File"));
+ File workspacePath = new File(variableMap.getString("Workspace Path"));
+ String filePathPattern = variableMap.getString("File Path Pattern");
+
+ ArrayList<String> preserveList = Lib.readListFromFile(keeperFile, true);
+ HashSet<String> preserveSet = new HashSet<String>(preserveList);
+
+ List<File> files = Lib.recursivelyListFiles(workspacePath, Pattern.compile(filePathPattern));
+ for (File file : files) {
+ if (monitor.isCanceled()) {
+ return;
+ }
+ if (!preserveSet.contains(file.getName())) {
+ file.delete();
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XText\" displayName=\"Preserve List File\" /><XWidget xwidgetType=\"XText\" displayName=\"Workspace Path\" /><XWidget xwidgetType=\"XText\" displayName=\"File Path Pattern\" /></xWidgets>";
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/PurgeArtifactType.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/PurgeArtifactType.java
new file mode 100644
index 00000000000..f08d2792349
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/PurgeArtifactType.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class PurgeArtifactType extends AbstractBlam {
+ public static final String DELETE_VALID_REL = "delete from osee_valid_relations where art_type_id = ?";
+ public static final String DELETE_VALID_ATTRIBUTE = "delete from osee_valid_attributes where art_type_id = ?";
+ public static final String COUNT_ARTIFACT_OCCURRENCE =
+ "select count(1) AS artCount FROM osee_artifact where art_type_id = ?";
+ public static final String DELETE_ARIFACT_TYPE = "delete from osee_artifact_type where art_type_id = ?";
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ ArtifactType artType = variableMap.getArtifactType("Artifact Type");
+ int artTypeId = artType.getArtTypeId();
+
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+
+ try {
+ chStmt.runPreparedQuery(COUNT_ARTIFACT_OCCURRENCE, artTypeId);
+ if (chStmt.next() && chStmt.getInt("artCount") != 0) {
+ throw new IllegalArgumentException(
+ "Can not delete artifact type " + artType.getName() + " because there are " + chStmt.getInt("artCount") + " existing artifacts of this type.");
+ }
+ } finally {
+ chStmt.close();
+ }
+
+ ConnectionHandler.runPreparedUpdate(DELETE_VALID_REL, artTypeId);
+ ConnectionHandler.runPreparedUpdate(DELETE_VALID_ATTRIBUTE, artTypeId);
+ ConnectionHandler.runPreparedUpdate(DELETE_ARIFACT_TYPE, artTypeId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<XWidget xwidgetType=\"XArtifactTypeListViewer\" displayName=\"Artifact Type\" />";
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/RelationOrderAnalysisOnBranch.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/RelationOrderAnalysisOnBranch.java
new file mode 100644
index 00000000000..8d0b98e581d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/RelationOrderAnalysisOnBranch.java
@@ -0,0 +1,205 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.ILoggerListener;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactCache;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.osee.framework.skynet.core.relation.RelationManager;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.plugin.util.OseeData;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.widgets.XBranchSelectWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class RelationOrderAnalysisOnBranch extends AbstractBlam {
+ private static Matcher getIds = Pattern.compile(".*?artId\\[(\\d+?)\\].*?relTypeId\\[(\\d+?)\\].*").matcher("");
+ final List<String> messages = new ArrayList<String>();
+ private Map<Branch, Map<Integer, ArtifactOrder>> branchToArtifactsToSort =
+ new HashMap<Branch, Map<Integer, ArtifactOrder>>();
+ private Branch currentBranch;
+
+ private class ArtifactOrder {
+ Set<Integer> unsortedRelTypeIds = new HashSet<Integer>();
+ }
+
+ private ILoggerListener listener = new ILoggerListener() {
+
+ @Override
+ public void log(String loggerName, Level level, String message, Throwable th) {
+ if (loggerName.equals(RelationManager.class.getName())) {
+ messages.add(message);
+ getIds.reset(message);
+ if (getIds.matches()) {
+ int artId = Integer.parseInt(getIds.group(1));
+ int relTypeId = Integer.parseInt(getIds.group(2));
+ ArtifactOrder artOrder = branchToArtifactsToSort.get(currentBranch).get(artId);
+ if (artOrder == null) {
+ artOrder = new ArtifactOrder();
+ branchToArtifactsToSort.get(currentBranch).put(artId, artOrder);
+ }
+ artOrder.unsortedRelTypeIds.add(relTypeId);
+ }
+ }
+ }
+
+ };
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeorg.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#
+ * runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap,
+ * org.eclipse.osee.framework.skynet.core.artifact.Branch,
+ * org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ appendResultLine("\nCurrent Status:\n\n");
+ for (Branch branch : branchToArtifactsToSort.keySet()) {
+ SkynetTransaction transaction = new SkynetTransaction(branch);
+ appendResultLine(String.format("We have %d artifacts that have unsorted relations on branch %s.",
+ branchToArtifactsToSort.get(branch).size(), branch.getBranchName()));
+
+ Map<Integer, ArtifactOrder> artifactOrder = branchToArtifactsToSort.get(branch);
+ for (Integer artId : artifactOrder.keySet()) {
+ ArtifactOrder relTypes = artifactOrder.get(artId);
+ Artifact art = ArtifactCache.getActive(artId, branch);
+ if (art != null) {
+ for (Integer relTypeId : relTypes.unsortedRelTypeIds) {
+ List<RelationLink> relations = art.getRelations(RelationTypeManager.getType(relTypeId));
+ int lastArtId = -1;
+ for (RelationLink link : relations) {
+ if (!link.isDeleted()) {
+ System.out.println(link.getOrder(link.getSide(art).oppositeSide()));
+ if (link.getOrder(link.getSide(art).oppositeSide()) != lastArtId) {
+ link.setOrder(link.getSide(art).oppositeSide(), lastArtId);
+ }
+ lastArtId = link.getArtifactId(link.getSide(art).oppositeSide());
+ }
+ }
+ }
+ art.persistRelations(transaction);
+ }
+ }
+ System.out.println("stop");
+ transaction.execute();
+ }
+ }
+
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XText\" displayName=\"Branch List\" /><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Branch\" /></xWidgets>";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeorg.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam#
+ * getDescriptionUsage()
+ */
+ @Override
+ public String getDescriptionUsage() {
+ return "This will analyze the selected branch for unsorted artifacts and save that report to .osee.data/relationOrder_<branch_name>.txt. It also allows you to save all of the relations that are unsorted based on their current order in memory.";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeorg.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam#
+ * widgetCreated(org.eclipse.osee.framework.ui.skynet.widgets.XWidget,
+ * org.eclipse.ui.forms.widgets.FormToolkit,
+ * org.eclipse.osee.framework.skynet.core.artifact.Artifact,
+ * org.eclipse.osee
+ * .framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout,
+ * org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener, boolean)
+ */
+ @Override
+ public void widgetCreated(XWidget widget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) throws OseeCoreException {
+ super.widgetCreated(widget, toolkit, art, dynamicXWidgetLayout, modListener, isEditable);
+ if (widget.getLabel().equals("Branch")) {
+ final XBranchSelectWidget branchSelection = (XBranchSelectWidget) widget;
+
+ branchSelection.addListener(new Listener() {
+
+ @Override
+ public void handleEvent(Event event) {
+ final Branch branch = branchSelection.getData();
+ currentBranch = branch;
+ branchToArtifactsToSort.clear();//do this so we can only do one branch - it makes the txs easier
+ Map<Integer, ArtifactOrder> artifactsToSort = branchToArtifactsToSort.get(currentBranch);
+ if (artifactsToSort == null) {
+ artifactsToSort = new HashMap<Integer, ArtifactOrder>();
+ branchToArtifactsToSort.put(currentBranch, artifactsToSort);
+ } else {
+ artifactsToSort.clear();
+ }
+
+ Jobs.startJob(new Job(String.format("Analyizing %s for unsorted relations.", branch.getBranchName())) {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+
+ OseeLog.registerLoggerListener(listener);
+ ArtifactQuery.reloadArtifactsFromBranch(branch, false);
+ OseeLog.unregisterLoggerListener(listener);
+
+ File branchReport =
+ OseeData.getFile(String.format("relationOrder_%s.txt", branch.getBranchShortName()));
+ FileOutputStream fos = new FileOutputStream(branchReport);
+ for (String msg : messages) {
+ fos.write(msg.getBytes());
+ fos.write("\n".getBytes());
+ }
+ fos.close();
+ messages.clear();
+ } catch (Throwable th) {
+ OseeLog.log(RelationOrderAnalysisOnBranch.class, Level.SEVERE, th);
+ return Status.CANCEL_STATUS;
+ }
+ return Status.OK_STATUS;
+ }
+ });
+ }
+ });
+ }
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ReportAttributeTypesUsageBlam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ReportAttributeTypesUsageBlam.java
new file mode 100644
index 00000000000..de1eced94e2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ReportAttributeTypesUsageBlam.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.util.Collection;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ReportAttributeTypesUsageBlam extends AbstractBlam {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ monitor.beginTask("Report Usage of AttributeTypes on Branch", IProgressMonitor.UNKNOWN);
+
+ XResultData xResultData = new XResultData();
+ Branch branch = variableMap.getBranch("Branch");
+ xResultData.log(getName() + " " + branch.getBranchName());
+ xResultData.addRaw(AHTML.beginMultiColumnTable(100, 1));
+ xResultData.addRaw(AHTML.addHeaderRowMultiColumnTable(new String[] {"AttributeType", "Occurances"}));
+ for (AttributeType attributeType : AttributeTypeManager.getAllTypes()) {
+ Collection<Artifact> arts = ArtifactQuery.getArtifactsFromAttributeType(attributeType.getName(), branch);
+ xResultData.addRaw(AHTML.addRowMultiColumnTable(attributeType.getName(), String.valueOf(arts.size())));
+ }
+ xResultData.addRaw(AHTML.endMultiColumnTable());
+ xResultData.report(getName() + " " + branch.getBranchName());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ @Override
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Branch\" /></xWidgets>";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam#getDescriptionUsage()
+ */
+ @Override
+ public String getDescriptionUsage() {
+ return "Performs ArtifactQuery search on all attribyte types for a selected branch and reports usage by \"current\" artifacts.";
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SetRequirementCategory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SetRequirementCategory.java
new file mode 100644
index 00000000000..d76326762bc
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SetRequirementCategory.java
@@ -0,0 +1,107 @@
+/*
+ * Created on Sep 23, 2006
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.ArtifactDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.MultipleArtifactsExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.skynet.core.utility.Requirements;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class SetRequirementCategory extends AbstractBlam {
+ private HashMap<String, String> reqPriorities;
+ private final HashMap<String, Artifact> reqs = new HashMap<String, Artifact>();
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ monitor.beginTask("Generating Reports", 100);
+
+ Branch branch = variableMap.getBranch("Branch");
+ String excelMlPath = variableMap.getString("ExcelML Priority File");
+ boolean bulkLoad = variableMap.getBoolean("Bulk Load");
+
+ ExtractReqPriority extractor = new ExtractReqPriority(excelMlPath);
+ reqPriorities = extractor.getReqPriorities();
+
+ if (bulkLoad) {
+ for (Artifact req : ArtifactQuery.getArtifactsFromType(Requirements.SOFTWARE_REQUIREMENT, branch)) {
+ reqs.put(req.getDescriptiveName().trim(), req);
+ }
+ }
+
+ SkynetTransaction transaction = new SkynetTransaction(branch);
+ for (String requirementName : reqPriorities.keySet()) {
+ updateCategory(transaction, bulkLoad, branch, requirementName.trim());
+ }
+ transaction.execute();
+ }
+
+ private void updateCategory(SkynetTransaction transaction, boolean bulkLoad, Branch branch, String requirementName) throws OseeCoreException {
+ try {
+ Artifact requirement;
+ if (bulkLoad) {
+ requirement = reqs.get(requirementName);
+ if (requirement == null) {
+ throw new ArtifactDoesNotExist("cant' find " + requirementName);
+ }
+ } else {
+ requirement =
+ ArtifactQuery.getArtifactFromTypeAndName(Requirements.SOFTWARE_REQUIREMENT, requirementName, branch);
+ }
+
+ if (requirement.isOrphan()) {
+ throw new MultipleArtifactsExist(requirement.getDescriptiveName());
+ } else {
+ requirement.setSoleAttributeValue("Category", reqPriorities.get(requirementName));
+ requirement.persistAttributes(transaction);
+ }
+ } catch (MultipleArtifactsExist ex) {
+ List<Artifact> artiafcts =
+ ArtifactQuery.getArtifactsFromTypeAndName(Requirements.SOFTWARE_REQUIREMENT, requirementName, branch);
+ for (Artifact requirement : artiafcts) {
+ if (requirement.isOrphan()) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, requirement + " is an orphan");
+ } else {
+ requirement.setSoleAttributeValue("Category", reqPriorities.get(requirementName));
+ requirement.persistAttributes(transaction);
+ }
+ }
+ } catch (ArtifactDoesNotExist ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, ex);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Bulk Load\" /><XWidget xwidgetType=\"XText\" displayName=\"ExcelML Priority File\" /><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Branch\" /></xWidgets>";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getDescriptionUsage()
+ */
+ public String getDescriptionUsage() {
+ return "Sets the Category attribute on software requirements.";
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SortRelationsByBranch.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SortRelationsByBranch.java
new file mode 100644
index 00000000000..9f52b460214
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SortRelationsByBranch.java
@@ -0,0 +1,162 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Andrew M. Finkbeiner
+ * @author Roberto E. Escobar
+ */
+public class SortRelationsByBranch extends AbstractBlam {
+ private static final String UPDATE_B_ORDER = "update osee_relation_link set b_order = ? where gamma_id = ?";
+ private static final String SELECT_B_RELATION_ORDER =
+ "select rel1.rel_link_type_id, rel1.a_art_id as art_id1, txd1.branch_id, rel1.b_order as order1, txs1.gamma_id, rel1.b_art_id as art_id2, rel1.a_order_value as order2 from osee_tx_details txd1, osee_relation_link rel1, osee_txs txs1 where txd1.branch_id = ? and txd1.transaction_id = txs1.transaction_id and txs1.gamma_id = rel1.gamma_id and txs1.tx_current = 1 order by txd1.branch_id, rel1.rel_link_type_id, rel1.a_art_id, rel1.a_order_value";
+ private static final String SELECT_A_RELATION_ORDER =
+ "select rel1.rel_link_type_id, rel1.b_art_id as art_id1, txd1.branch_id, rel1.a_order as order1, txs1.gamma_id, rel1.a_art_id as art_id2, rel1.b_order_value as order2 from osee_tx_details txd1, osee_relation_link rel1, osee_txs txs1 where txd1.branch_id = ? and txd1.transaction_id = txs1.transaction_id and txs1.gamma_id = rel1.gamma_id and txs1.tx_current = 1 order by txd1.branch_id, rel1.rel_link_type_id, rel1.b_art_id, rel1.b_order_value";
+ private static final String UPDATE_A_ORDER = "update osee_relation_link set a_order = ? where gamma_id = ?";
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ int totalWork = 0;
+ monitor.beginTask(getName(), totalWork);
+
+ List<Branch> branchesToSort = BranchManager.getTopLevelBranches();
+
+ for (Branch branch : branchesToSort) {
+ IOperation op = new UpdateRelationsSortOrder(branch);
+ monitor.setTaskName("Executing: [UpdateRelationsSortOrder] " + branch.getBranchName());
+ op.execute(monitor, 0);
+ monitor.setTaskName("");
+ }
+ }
+ private interface IOperation {
+ int getTotalWork();
+
+ void execute(IProgressMonitor monitor, int startAtTxNumber) throws Exception;
+ }
+
+ private final class UpdateRelationsSortOrder implements IOperation {
+ int totalModCount = 0;
+
+ Branch branchToSort;
+
+ /**
+ * @param branch
+ */
+ public UpdateRelationsSortOrder(Branch branch) {
+ branchToSort = branch;
+ }
+
+ @Override
+ public void execute(IProgressMonitor monitor, int startAtTxNumber) throws Exception {
+ IProgressMonitor subMonitor = new SubProgressMonitor(monitor, getTotalWork());
+ totalModCount = 0;
+ subMonitor.beginTask("Update Relation Sort Order", getTotalWork());
+ updateRelationsSortOrder(subMonitor, "B side", SELECT_B_RELATION_ORDER, UPDATE_B_ORDER);
+ updateRelationsSortOrder(subMonitor, "A side", SELECT_A_RELATION_ORDER, UPDATE_A_ORDER);
+ subMonitor.done();
+ }
+
+ private void updateRelationsSortOrder(final IProgressMonitor monitor, String name, String query, final String update) throws OseeDataStoreException {
+ final List<Object[]> batchArgs = new ArrayList<Object[]>();
+ final RelationOrderTracker relationOrderTracker = new RelationOrderTracker();
+ monitor.subTask(String.format("Updating [%s] sort order", name));
+
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(5000, query, branchToSort.getBranchId());
+ while (chStmt.next()) {
+ relationOrderTracker.processRow(chStmt);
+ if (relationOrderTracker.isUpdateRequired()) {
+ if (monitor.isCanceled() != true && batchArgs.size() >= 100000) {
+ writeToDb(monitor, update, batchArgs);
+ batchArgs.clear();
+ }
+ batchArgs.add(relationOrderTracker.getUpdateData());
+ }
+
+ if (monitor.isCanceled()) {
+ break;
+ }
+ }
+ } finally {
+ chStmt.close();
+ }
+
+ if (monitor.isCanceled() != true) {
+ writeToDb(monitor, update, batchArgs);
+ }
+ appendResultLine(String.format("Updated [%d] relation [%s] orders.\n", totalModCount, name));
+ monitor.worked(1);
+ }
+
+ private void writeToDb(IProgressMonitor monitor, String update, List<Object[]> data) throws OseeDataStoreException {
+ int count = ConnectionHandler.runBatchUpdate(update, data);
+ totalModCount += count;
+ monitor.subTask(String.format("Updated [%d of %d] relation orders - overall [%d]", count, data.size(),
+ totalModCount));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.UpdateCurrentColumn.IOperation#getTotalWork()
+ */
+ @Override
+ public int getTotalWork() {
+ return 2;
+ }
+ }
+
+ private final class RelationOrderTracker {
+ int rel_link_type, art_id, branch_id, order;
+ int rel_link_type_old = -1, art_id_old = -1, branch_id_old = -1;
+ int new_order;
+ int other_side_art_id = -1;
+ long gammaId = -1;
+
+ void processRow(ConnectionHandlerStatement chStmt) throws OseeDataStoreException {
+ rel_link_type = chStmt.getInt("rel_link_type_id");
+ art_id = chStmt.getInt("art_id1");
+ branch_id = chStmt.getInt("branch_id");
+ order = chStmt.getInt("order1");
+ gammaId = chStmt.getLong("gamma_id");
+ if ((rel_link_type != rel_link_type_old || art_id != art_id_old || branch_id != branch_id_old)) {//then it's a new start of ordering
+ new_order = -1;
+ } else {
+ new_order = other_side_art_id;
+ }
+
+ rel_link_type_old = rel_link_type;
+ art_id_old = art_id;
+ branch_id_old = branch_id;
+ other_side_art_id = chStmt.getInt("art_id2");
+ }
+
+ boolean isUpdateRequired() {
+ return order == 0;
+ }
+
+ Object[] getUpdateData() {
+ return new Object[] {new_order, gammaId};
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SwitchParentBranch.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SwitchParentBranch.java
new file mode 100644
index 00000000000..b11696701df
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/SwitchParentBranch.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class SwitchParentBranch extends AbstractBlam {
+ private static final String UPDATE_PARENT_BRANCHES =
+ "UPDATE osee_branch SET parent_branch_id = ? where branch_id in (";
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ Branch branch = variableMap.getBranch("New Parent Branch");
+ ConnectionHandler.runPreparedUpdate(UPDATE_PARENT_BRANCHES + variableMap.getString("Branch List") + ")",
+ branch.getBranchId());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XText\" displayName=\"Branch List\" /><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"New Parent Branch\" /></xWidgets>";
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UniqueNumberOfCurrentOseeUsers.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UniqueNumberOfCurrentOseeUsers.java
new file mode 100644
index 00000000000..8849d94779d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UniqueNumberOfCurrentOseeUsers.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class UniqueNumberOfCurrentOseeUsers extends AbstractBlam {
+ private static final String SELECT_USER_COUNT =
+ "select count(*) from v$session t1 where t1.username='OSEE_CLIENT' and not exists (select null from v$session t2 where t1.machine=t2.machine and t2.sid < t1.sid)";
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+
+ /**
+ * must be connected using a admin schema
+ */
+ // removeColonFromActionNames
+ monitor.beginTask("Counting Users", IProgressMonitor.UNKNOWN);
+
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(SELECT_USER_COUNT);
+ if (chStmt.next()) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, "active user count: " + chStmt.getInt("user_count"));
+ }
+ } finally {
+ chStmt.close();
+ }
+ monitor.done();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return emptyXWidgetsXml;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateArtifactTypeImage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateArtifactTypeImage.java
new file mode 100644
index 00000000000..464eaaf3718
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateArtifactTypeImage.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.io.File;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.InputStreamImageDescriptor;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class UpdateArtifactTypeImage extends AbstractBlam {
+
+ public static String ARTIFACT_TYPE_NAME = "Select Artifact Type";
+ public static String SELECT_IMAGE = "Select Image GIF";
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(final VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ try {
+ String filename = variableMap.getString(SELECT_IMAGE);
+ if (filename == null) {
+ AWorkbench.popup("ERROR", "Must enter full path to image.");
+ return;
+ }
+ File imageFile = new File(filename);
+ if (!imageFile.exists()) {
+ AWorkbench.popup("ERROR", "Invalid image filename.");
+ return;
+ }
+ ArtifactType artifactSubtypeDescriptor =
+ variableMap.getArtifactType("Select Artifact Type");
+ if (!MessageDialog.openConfirm(
+ Display.getCurrent().getActiveShell(),
+ "Update Artifact Type Image",
+ "Set Image for Artifact Type \"" + artifactSubtypeDescriptor.getName() + "\" to \"" + filename + "?")) {
+ return;
+ }
+
+ InputStreamImageDescriptor imageDescriptor =
+ new InputStreamImageDescriptor(imageFile.toURL().openStream());
+ ArtifactTypeManager.updateArtifactTypeImage(artifactSubtypeDescriptor, imageDescriptor);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ };
+ });
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getDescriptionUsage()
+ */
+ public String getDescriptionUsage() {
+ return "This BLAM will import the selected 16x16 pixel gif image as the image for the selected artifact type. Existing image will be overwritten.\n\nNOTE: Change default branch for other Artifact Types.";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ StringBuffer buffer = new StringBuffer("<xWidgets>");
+ buffer.append("<XWidget xwidgetType=\"XFileSelectionDialog\" displayName=\"" + SELECT_IMAGE + "\" />");
+ buffer.append("<XWidget xwidgetType=\"XArtifactTypeListViewer\" displayName=\"" + ARTIFACT_TYPE_NAME + "\" />");
+ buffer.append("</xWidgets>");
+ return buffer.toString();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateCurrentColumn.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateCurrentColumn.java
new file mode 100644
index 00000000000..713da9d62ed
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateCurrentColumn.java
@@ -0,0 +1,521 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.osee.framework.core.enums.ModificationType;
+import org.eclipse.osee.framework.core.enums.TxChange;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.jdk.core.type.MutableInteger;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Andrew M. Finkbeiner
+ * @author Roberto E. Escobar
+ */
+public class UpdateCurrentColumn extends AbstractBlam {
+
+ private enum Operations {
+ Update_Tx_Mod_Type, Update_Tx_Current, Run_Tx_Current_Verification, Run_Tx_Mod_Type_Verification;
+
+ public String asLabel() {
+ return this.name().replaceAll("_", " ");
+ }
+ }
+
+ private enum TypesEnum {
+ artifacts, attributes, relations;
+ }
+
+ private static final String SELECT_ATTRIBUTES_TO_UPDATE =
+ "SELECT branch_id, maxt, txs2.gamma_id, data_id, txs2.mod_type FROM osee_attribute att2, osee_txs txs2, (SELECT MAX(txs1.transaction_id) AS maxt, att1.attr_id AS data_id, txd1.branch_id FROM osee_attribute att1, osee_txs txs1, osee_tx_details txd1 WHERE att1.gamma_id = txs1.gamma_id and txs1.transaction_id > ? and txd1.tx_type = 0 AND txs1.transaction_id = txd1.transaction_id GROUP BY att1.attr_id, txd1.branch_id) new_stuff WHERE data_id = att2.attr_id AND att2.gamma_id = txs2.gamma_id and txs2.transaction_id > ? AND txs2.transaction_id = maxt";
+ private static final String SELECT_ARTIFACTS_TO_UPDATE =
+ "SELECT branch_id, maxt, txs1.gamma_id, art_id as data_id, txs1.mod_type FROM osee_artifact_version arv2, osee_txs txs1, (SELECT MAX(txs2.transaction_id) AS maxt, arv1.art_id AS art, txd1.branch_id FROM osee_artifact_version arv1, osee_txs txs2, osee_tx_details txd1 WHERE arv1.gamma_id = txs2.gamma_id and txs2.transaction_id > ? and txd1.tx_type = 0 AND txs2.transaction_id = txd1.transaction_id GROUP BY arv1.art_id, txd1.branch_id) new_stuff WHERE art = arv2.art_id AND arv2.gamma_id = txs1.gamma_id AND txs1.transaction_id = maxt and txs1.transaction_id > ?";
+ private static final String SELECT_RELATIONS_TO_UPDATE =
+ "SELECT branch_id, maxt, txs1.gamma_id, data_id, txs1.mod_type FROM osee_relation_link rel2, osee_txs txs1, (SELECT MAX(txs2.transaction_id) AS maxt, rel1.rel_link_id AS data_id, txd1.branch_id FROM osee_relation_link rel1, osee_txs txs2, osee_tx_details txd1 WHERE rel1.gamma_id = txs2.gamma_id and txs2.transaction_id > ? and txd1.tx_type = 0 AND txs2.transaction_id = txd1.transaction_id GROUP BY rel1.rel_link_id, txd1.branch_id) new_stuff WHERE data_id = rel2.rel_link_id AND rel2.gamma_id = txs1.gamma_id AND txs1.transaction_id = maxt and txs1.transaction_id > ?";
+
+ private static final String SELECT_STALE_ATTRIBUTES =
+ "SELECT txsouter.gamma_id, txsouter.transaction_id FROM osee_txs txsouter, (SELECT txs1.gamma_id, txs1.transaction_id FROM osee_txs txs1, osee_tx_details txd1, osee_attribute attr1 where txd1.branch_id = ? and attr1.attr_id = ? AND txd1.transaction_id = txs1.transaction_id AND txs1.gamma_id = attr1.gamma_id) resulttable WHERE txsouter.transaction_id = resulttable.transaction_id AND resulttable.gamma_id = txsouter.gamma_id";
+ private static final String SELECT_STALE_ARTIFACTS =
+ "SELECT txsouter.gamma_id, txsouter.transaction_id FROM osee_txs txsouter, (SELECT txs1.gamma_id, txs1.transaction_id FROM osee_txs txs1, osee_tx_details txd1, osee_artifact_version art1 WHERE txd1.branch_id = ? AND art1.art_id = ? AND txd1.transaction_id = txs1.transaction_id AND txs1.gamma_id = art1.gamma_id) resulttable WHERE txsouter.transaction_id = resulttable.transaction_id AND resulttable.gamma_id = txsouter.gamma_id";
+ private static final String SELECT_STALE_RELATIONS =
+ "SELECT txsouter.gamma_id, txsouter.transaction_id FROM osee_txs txsouter, (SELECT txs1.gamma_id, txs1.transaction_id FROM osee_txs txs1, osee_tx_details txd1, osee_relation_link link1 where txd1.branch_id = ? and link1.rel_link_id = ? AND txd1.transaction_id = txs1.transaction_id AND txs1.gamma_id = link1.gamma_id) resulttable WHERE txsouter.transaction_id = resulttable.transaction_id AND resulttable.gamma_id = txsouter.gamma_id";
+
+ private static final String UPDATE_TXS_CURRENT_TO_0 =
+ "update osee_txs set tx_current = 0 where gamma_id = ? and transaction_id = ?";
+ private static final String UPDATE_TXS_CURRENT =
+ "update osee_txs set tx_current = ? where gamma_id = ? and transaction_id = ?";
+ private static final String UPDATE_TXS_CURRENT_FROM_NULL =
+ "UPDATE osee_txs txs1 SET tx_current = 0 WHERE tx_current IS null";
+
+ private static final String SELECT_BASELINED_TRANSACTIONS =
+ "SELECT txs1.gamma_id, txs1.transaction_id, txs1.mod_type from osee_txs txs1, osee_tx_details txd1 where txd1.tx_type = 1 and txd1.transaction_id > ? and txd1.transaction_id = txs1.transaction_id";
+
+ private static final String UPDATE_TX_DETAILS_NON_BASELINE_TRANSACTIONS_TO_0 =
+ "UPDATE osee_tx_details SET tx_type = 0 WHERE tx_type IS NULL"; // Changed tx_type <> 1 to account for null case
+ private static final String UPDATE_TX_DETAILS_BASELINE_TRANSACTIONS_TO_1 =
+ "UPDATE osee_tx_details SET tx_type = 1 WHERE osee_comment LIKE '%New Branch%'";
+
+ private static final String VERIFY_ARTIFACT_MOD_TYPE =
+ "select count(1) as total from osee_txs txs1, osee_artifact_version artv1 WHERE txs1.gamma_id = artv1.gamma_id AND txs1.mod_type IS NULL";
+ private static final String VERIFY_ATTRIBUTE_MOD_TYPE =
+ "select count(1) as total from osee_txs txs1, osee_attribute attr1 WHERE txs1.gamma_id = attr1.gamma_id AND txs1.mod_type IS NULL";
+ private static final String VERIFY_RELATION_MOD_TYPE =
+ "select count(1) as total from osee_txs txs1, osee_relation_link rel1 WHERE txs1.gamma_id = rel1.gamma_id AND txs1.mod_type IS NULL";
+
+ private static final String INNER_SELECT_ARTIFACT_MOD_TYPE =
+ "select artv1.modification_id from osee_txs txs1, osee_artifact_version artv1 where txs1.gamma_id = artv1.gamma_id";
+ private static final String INNER_SELECT_ATTRIBUTE_MOD_TYPE =
+ "select attr1.modification_id from osee_txs txs1, osee_attribute attr1 where txs1.gamma_id = attr1.gamma_id";
+ private static final String INNER_SELECT_RELATION_MOD_TYPE =
+ "select rel1.modification_id from osee_txs txs1, osee_relation_link rel1 where txs1.gamma_id = rel1.gamma_id";
+
+ private static final String UPDATE_TXS_MOD_TYPE_SINGLE_CALL =
+ "update osee_txs txsOuter set mod_type = (%s and txsOuter.transaction_id = txs1.transaction_id and txsOuter.gamma_id = txs1.gamma_id) WHERE txsouter.transaction_id > ? AND txsouter.mod_type IS NULL";
+
+ private static final String VERIFY_TX_CURRENT =
+ "SELECT COUNT(resulttable.branch_id) AS numoccurrences FROM (SELECT txd1.branch_id, txd1.TIME, txd1.tx_type, txs1.*, artv1.art_id, txs1.mod_type, art1.art_type_id FROM osee_tx_details txd1, osee_txs txs1, osee_artifact art1, osee_artifact_version artv1 WHERE txd1.transaction_id = txs1.transaction_id AND txs1.gamma_id = artv1.gamma_id AND artv1.art_id = art1.art_id AND txs1.tx_current = 1) resulttable GROUP BY resulttable.branch_id, resulttable.art_id HAVING(COUNT(resulttable.branch_id) > 1)";
+
+ private final class UpdateHelper {
+ TypesEnum type;
+ int id;
+ int branch_id;
+ int transaction_id;
+ long gamma_id;
+ int modification_id;
+
+ UpdateHelper(TypesEnum type, ConnectionHandlerStatement chStmt) throws OseeDataStoreException {
+ this.type = type;
+ this.branch_id = chStmt.getInt("branch_id");
+ this.transaction_id = chStmt.getInt("maxt");
+ this.gamma_id = chStmt.getLong("gamma_id");
+ this.id = chStmt.getInt("data_id");
+ this.modification_id = chStmt.getInt("mod_type");
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("<xWidgets>");
+ builder.append("<XWidget xwidgetType=\"XText\" displayName=\"From Transaction Number\" />");
+ builder.append("<XWidget xwidgetType=\"XLabel\" displayName=\"Select Operations to Run:\"/>");
+ for (Operations operationType : Operations.values()) {
+ builder.append(getOperationsCheckBoxes(operationType));
+ }
+ builder.append("</xWidgets>");
+ return builder.toString();
+ }
+
+ private String getOperationsCheckBoxes(Operations ops) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("<XWidget xwidgetType=\"XCheckBox\" displayName=\"");
+ builder.append(ops.asLabel());
+ builder.append("\" labelAfter=\"true\" horizontalLabel=\"true\"/>");
+ return builder.toString();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ int startAtTxNumber = 0;
+ try {
+ startAtTxNumber = Integer.parseInt(variableMap.getString("From Transaction Number"));
+ } catch (NumberFormatException ex) {
+ appendResultLine(String.format("Failed to parse string [%s], specify an integer",
+ variableMap.getString("From Transaction Number")));
+ return;
+ }
+ appendResultLine(String.format("Processing from transaction id [%d].\n", startAtTxNumber));
+ int totalWork = 0;
+ for (Operations operationType : Operations.values()) {
+ if (variableMap.getBoolean(operationType.asLabel())) {
+ IOperation op = getOperation(operationType);
+ totalWork += op.getTotalWork();
+ }
+ }
+
+ monitor.beginTask(getName(), totalWork);
+ for (Operations operationType : Operations.values()) {
+ if (variableMap.getBoolean(operationType.asLabel())) {
+ IOperation op = getOperation(operationType);
+ monitor.setTaskName(String.format("Executing: [%s]", operationType.asLabel()));
+ op.execute(monitor, startAtTxNumber);
+ monitor.setTaskName("");
+ if (monitor.isCanceled()) {
+ break;
+ }
+ }
+ }
+ }
+
+ private IOperation getOperation(Operations type) {
+ IOperation toReturn = null;
+ switch (type) {
+ case Update_Tx_Current:
+ toReturn = new UpdateTxCurrentOperation();
+ break;
+ case Update_Tx_Mod_Type:
+ toReturn = new UpdateTxModTypeSingleCallOperation();
+ break;
+ case Run_Tx_Current_Verification:
+ toReturn = new VerifyTxCurrentOperation();
+ break;
+ case Run_Tx_Mod_Type_Verification:
+ toReturn = new VerifyTxModTypeOperation();
+ break;
+ default:
+ break;
+ }
+ return toReturn;
+ }
+ private interface IOperation {
+ int getTotalWork();
+
+ void execute(IProgressMonitor monitor, int startAtTxNumber) throws Exception;
+ }
+
+ private final class UpdateTxCurrentOperation implements IOperation {
+
+ private final Map<TypesEnum, Pair<String, String>> typesQueryMap;
+ private int totalCount;
+
+ public UpdateTxCurrentOperation() {
+ totalCount = 0;
+ typesQueryMap = new HashMap<TypesEnum, Pair<String, String>>();
+ typesQueryMap.put(TypesEnum.artifacts, new Pair<String, String>(SELECT_ARTIFACTS_TO_UPDATE,
+ SELECT_STALE_ARTIFACTS));
+ typesQueryMap.put(TypesEnum.attributes, new Pair<String, String>(SELECT_ATTRIBUTES_TO_UPDATE,
+ SELECT_STALE_ATTRIBUTES));
+ typesQueryMap.put(TypesEnum.relations, new Pair<String, String>(SELECT_RELATIONS_TO_UPDATE,
+ SELECT_STALE_RELATIONS));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.UpdateCurrentColumn.IOperation#execute()
+ */
+ @Override
+ public void execute(IProgressMonitor monitor, int startAtTxNumber) throws Exception {
+ totalCount = 0;
+ final IProgressMonitor subMonitor = new SubProgressMonitor(monitor, getTotalWork());
+ subMonitor.beginTask("Update Tx Current", getTotalWork());
+
+ List<UpdateHelper> updates = new ArrayList<UpdateHelper>();
+
+ int txTypeNumber = updateBaselineTransactions(subMonitor);
+ appendResultLine(String.format("Updated [%d] transactions to baseline transactions.\n", txTypeNumber));
+
+ updateBaselinedTransactionsToCurrent(subMonitor, startAtTxNumber);
+ getUpdates(subMonitor, updates, startAtTxNumber);
+ appendResultLine(String.format("Total items identified as latest: [%d] \n", updates.size()));
+
+ long time = System.currentTimeMillis();
+ int rowsUpdated = updateTxCurrentToZeroForStaleItems(subMonitor, updates);
+ appendResultLine(String.format("Took [%d]ms to update [%d] rows.\n", (System.currentTimeMillis() - time),
+ rowsUpdated));
+
+ time = System.currentTimeMillis();
+ appendResultLine(String.format("Going to update [%d] items to tx_current value of 1 or 2.\n", updates.size()));
+ rowsUpdated = updateTxCurrentForLatestItems(subMonitor, updates);
+ appendResultLine(String.format("Took [%d]ms to update [%d] rows.\n", (System.currentTimeMillis() - time),
+ rowsUpdated));
+
+ subMonitor.done();
+ }
+
+ private int updateBaselineTransactions(IProgressMonitor monitor) throws OseeDataStoreException {
+ int txTypeNumber = 0;
+ monitor.subTask("Update Baseline Txs - Tx Details Table");
+ if (monitor.isCanceled() != true) {
+ txTypeNumber += ConnectionHandler.runPreparedUpdate(UPDATE_TX_DETAILS_NON_BASELINE_TRANSACTIONS_TO_0);
+ txTypeNumber += ConnectionHandler.runPreparedUpdate(UPDATE_TX_DETAILS_BASELINE_TRANSACTIONS_TO_1);
+ }
+ monitor.worked(1);
+ return txTypeNumber;
+ }
+
+ private void updateBaselinedTransactionsToCurrent(final IProgressMonitor monitor, final int txNumber) throws Exception {
+ totalCount = 0;
+ monitor.subTask("Mark tx current in txs table from data in txd table");
+ final int batchSize = 100000;
+ final List<Object[]> batchArgs = new ArrayList<Object[]>(batchSize);
+ executeQuery(monitor, new IRowProcessor() {
+ public void processRow(ConnectionHandlerStatement chStmt) throws OseeDataStoreException {
+ int modType = chStmt.getInt("mod_type");
+ int tx_current_value = TxChange.CURRENT.getValue();
+ if (modType == ModificationType.DELETED.getValue()) {
+ tx_current_value = TxChange.DELETED.getValue();
+ }
+ batchArgs.add(new Object[] {tx_current_value, chStmt.getLong("gamma_id"),
+ chStmt.getInt("transaction_id")});
+
+ if (monitor.isCanceled() != true && batchArgs.size() >= batchSize) {
+ writeToDb(monitor, UPDATE_TXS_CURRENT, "baselined txs", batchArgs);
+ batchArgs.clear();
+ }
+ }
+ }, 0, SELECT_BASELINED_TRANSACTIONS, txNumber);
+
+ if (monitor.isCanceled() != true && batchArgs.size() > 0) {
+ writeToDb(monitor, UPDATE_TXS_CURRENT, "baselined txs", batchArgs);
+ }
+ monitor.worked(1);
+ }
+
+ private void writeToDb(IProgressMonitor monitor, String sql, String name, List<Object[]> data) throws OseeDataStoreException {
+ int count = ConnectionHandler.runBatchUpdate(sql, data);
+ totalCount += count;
+ monitor.subTask(String.format("Updated [%d of %d] %s - overall [%d]\n", count, data.size(), name, totalCount));
+ }
+
+ private void getUpdates(IProgressMonitor monitor, final List<UpdateHelper> updates, int txNumber) throws Exception {
+ for (final TypesEnum type : typesQueryMap.keySet()) {
+ monitor.subTask(String.format("Select Latest For [%s]", type.name()));
+
+ String query = typesQueryMap.get(type).getKey();
+ int totalRows = executeQuery(monitor, new IRowProcessor() {
+ public void processRow(ConnectionHandlerStatement chStmt) throws OseeDataStoreException {
+ updates.add(new UpdateHelper(type, chStmt));
+ }
+ }, 0, query, txNumber, txNumber);
+ appendResultLine(String.format("%d updates for [%s]\n", totalRows, type));
+
+ if (monitor.isCanceled()) {
+ break;
+ }
+ monitor.worked(1);
+ }
+ }
+
+ private int updateTxCurrentToZeroForStaleItems(IProgressMonitor monitor, List<UpdateHelper> updates) throws Exception {
+ monitor.subTask("Setting Stale Items to 0");
+ final List<Object[]> setToUpdate = new ArrayList<Object[]>();
+ IRowProcessor processor = new IRowProcessor() {
+ public void processRow(ConnectionHandlerStatement chStmt) throws OseeDataStoreException {
+ setToUpdate.add(new Object[] {chStmt.getLong("gamma_id"), chStmt.getInt("transaction_id")});
+ }
+ };
+ // Set Stale Items to 0
+ for (UpdateHelper data : updates) {
+ String query = typesQueryMap.get(data.type).getValue();
+ if (query != null && monitor.isCanceled() != true) {
+ executeQuery(monitor, processor, 0, query, data.branch_id, data.id);
+ }
+ }
+
+ int updated = 0;
+ if (monitor.isCanceled() != true) {
+ appendResultLine(String.format("%d updates for [updateTxCurrentToZero]\n", setToUpdate.size()));
+ updated = ConnectionHandler.runBatchUpdate(UPDATE_TXS_CURRENT_TO_0, setToUpdate);
+ }
+ monitor.worked(1);
+ return updated;
+ }
+
+ private int updateTxCurrentForLatestItems(IProgressMonitor monitor, List<UpdateHelper> updates) throws OseeDataStoreException {
+ monitor.subTask("Setting Tx Current for current items");
+ List<Object[]> batchArgs = new ArrayList<Object[]>();
+ for (UpdateHelper data : updates) {
+ TxChange txCurrentValue =
+ data.modification_id == ModificationType.DELETED.getValue() ? TxChange.DELETED : TxChange.CURRENT; // Set to Current or Current was Deleted
+ batchArgs.add(new Object[] {txCurrentValue.getValue(), data.gamma_id, data.transaction_id});
+ if (monitor.isCanceled()) {
+ break;
+ }
+ }
+
+ int update = 0;
+ if (monitor.isCanceled() != true) {
+ update = ConnectionHandler.runBatchUpdate(UPDATE_TXS_CURRENT, batchArgs);
+ }
+ ConnectionHandler.runPreparedUpdate(UPDATE_TXS_CURRENT_FROM_NULL);
+
+ monitor.worked(1);
+ return update;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.UpdateCurrentColumn.IOperation#getTotalWork()
+ */
+ @Override
+ public int getTotalWork() {
+ return 4 + typesQueryMap.size();
+ }
+ }
+
+ private final class UpdateTxModTypeSingleCallOperation implements IOperation {
+
+ private Map<TypesEnum, String> modTypeInnerSelectMap;
+
+ public UpdateTxModTypeSingleCallOperation() {
+ modTypeInnerSelectMap = new HashMap<TypesEnum, String>();
+ modTypeInnerSelectMap.put(TypesEnum.artifacts, INNER_SELECT_ARTIFACT_MOD_TYPE);
+ modTypeInnerSelectMap.put(TypesEnum.attributes, INNER_SELECT_ATTRIBUTE_MOD_TYPE);
+ modTypeInnerSelectMap.put(TypesEnum.relations, INNER_SELECT_RELATION_MOD_TYPE);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.UpdateCurrentColumn.IOperation#getTotalWork()
+ */
+ @Override
+ public int getTotalWork() {
+ return modTypeInnerSelectMap.size();
+ }
+
+ @Override
+ public void execute(IProgressMonitor monitor, int startAtTxNumber) throws Exception {
+ final IProgressMonitor subMonitor = new SubProgressMonitor(monitor, getTotalWork());
+ subMonitor.beginTask("Update Mod Type", getTotalWork());
+
+ int totalModified = 0;
+ for (TypesEnum type : modTypeInnerSelectMap.keySet()) {
+ subMonitor.subTask(String.format("Processing [%s] Mod Types", type.name()));
+ String innerSelect = modTypeInnerSelectMap.get(type);
+ if (Strings.isValid(innerSelect)) {
+ String updateSql = String.format(UPDATE_TXS_MOD_TYPE_SINGLE_CALL, innerSelect);
+
+ long time = System.currentTimeMillis();
+ int count = ConnectionHandler.runPreparedUpdate(updateSql, startAtTxNumber);
+ appendResultLine(String.format("Updated [%s] rows for [%s] in [%d]ms\n", count, type.name(),
+ (System.currentTimeMillis() - time)));
+ totalModified += count;
+ }
+ subMonitor.worked(1);
+ if (subMonitor.isCanceled()) {
+ break;
+ }
+ }
+ appendResultLine(String.format("Updated [%d]txs mod types\n", totalModified));
+ subMonitor.done();
+ }
+ }
+
+ private final class VerifyTxCurrentOperation implements IOperation {
+
+ @Override
+ public void execute(IProgressMonitor monitor, int startAtTxNumber) throws Exception {
+ final IProgressMonitor subMonitor = new SubProgressMonitor(monitor, getTotalWork());
+ subMonitor.beginTask("Verifying Tx Current", getTotalWork());
+
+ int totalRowCount = ConnectionHandler.runPreparedQueryFetchInt(-1, VERIFY_TX_CURRENT);
+
+ String msg = null;
+ boolean result = totalRowCount == 0;
+ if (monitor.isCanceled()) {
+ msg = "Cancelled";
+ } else if (result) {
+ msg = "Passed";
+ } else {
+ msg = "Failed";
+ }
+ appendResultLine(String.format("Tx Current Verification [ %s ]\n", msg));
+ subMonitor.worked(1);
+ subMonitor.done();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.UpdateCurrentColumn.IOperation#getTotalWork()
+ */
+ @Override
+ public int getTotalWork() {
+ return 1;
+ }
+ }
+
+ private final class VerifyTxModTypeOperation implements IOperation {
+
+ private Map<TypesEnum, String> modTypeVerificationMap;
+
+ public VerifyTxModTypeOperation() {
+ modTypeVerificationMap = new HashMap<TypesEnum, String>();
+ modTypeVerificationMap.put(TypesEnum.artifacts, VERIFY_ARTIFACT_MOD_TYPE);
+ modTypeVerificationMap.put(TypesEnum.attributes, VERIFY_ATTRIBUTE_MOD_TYPE);
+ modTypeVerificationMap.put(TypesEnum.relations, VERIFY_RELATION_MOD_TYPE);
+ }
+
+ @Override
+ public void execute(IProgressMonitor monitor, int startAtTxNumber) throws Exception {
+ final IProgressMonitor subMonitor = new SubProgressMonitor(monitor, getTotalWork());
+ subMonitor.beginTask("Verifying Tx Mod Types", getTotalWork());
+ final Map<TypesEnum, Integer> results = new HashMap<TypesEnum, Integer>();
+ final MutableInteger totalRowCount = new MutableInteger(0);
+ for (final TypesEnum type : modTypeVerificationMap.keySet()) {
+ monitor.subTask(String.format("Verifying: [%s]", type.name()));
+ String sql = modTypeVerificationMap.get(type);
+ if (Strings.isValid(sql)) {
+ executeQuery(monitor, new IRowProcessor() {
+ @Override
+ public void processRow(ConnectionHandlerStatement chStmt) throws OseeDataStoreException {
+ int total = chStmt.getInt("total");
+ totalRowCount.getValueAndInc(total);
+ results.put(type, total);
+ }
+ }, 0, sql);
+ }
+ monitor.worked(1);
+ }
+ String msg = null;
+ boolean result = totalRowCount.getValue() == 0;
+ if (monitor.isCanceled()) {
+ msg = "Cancelled";
+ } else if (result) {
+ msg = "Passed";
+ } else {
+ msg = "Failed";
+ appendResultLine(String.format("Tx Mod Type Verification Results [ %s ]\n", results));
+ }
+ appendResultLine(String.format("Tx Mod Type Verification [ %s ]\n", msg));
+ subMonitor.done();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.UpdateCurrentColumn.IOperation#getTotalWork()
+ */
+ @Override
+ public int getTotalWork() {
+ return modTypeVerificationMap.size();
+ }
+ }
+
+ private interface IRowProcessor {
+ void processRow(ConnectionHandlerStatement chStmt) throws OseeDataStoreException;
+ }
+
+ private int executeQuery(IProgressMonitor monitor, IRowProcessor processor, int fetchSize, String sql, Object... data) throws Exception {
+ int totalRowCount = 0;
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(fetchSize, sql, data);
+ while (chStmt.next()) {
+ totalRowCount++;
+ processor.processRow(chStmt);
+ if (monitor.isCanceled()) {
+ break;
+ }
+ }
+ } finally {
+ chStmt.close();
+ }
+ return totalRowCount;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateFromParentBranch.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateFromParentBranch.java
new file mode 100644
index 00000000000..b99bd05cd33
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateFromParentBranch.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.sql.Timestamp;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.core.enums.TxChange;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.info.SQL3DataType;
+import org.eclipse.osee.framework.jdk.core.util.time.GlobalTime;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactLoader;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionIdManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class UpdateFromParentBranch extends AbstractBlam {
+ private static final String DELETE_GAMMAS_FOR_UPDATES =
+ "DELETE FROM osee_txs WHERE (transaction_id, gamma_id) IN (Select tx1.transaction_id, tx1.gamma_id FROM osee_txs tx1, osee_tx_details td1, osee_artifact_version av1, osee_join_artifact ja1 WHERE td1.branch_id = ? AND td1.transaction_id = tx1.transaction_id AND tx1.gamma_id = av1.gamma_id AND av1.art_id = ja1.art_id AND ja1.branch_id = ? AND ja1.query_id = ? UNION Select tx2.transaction_id, tx2.gamma_id FROM osee_txs tx2, osee_tx_details td2, osee_attribute at2, osee_join_artifact ja2 WHERE td2.branch_id = ? AND td2.transaction_id = tx2.transaction_id AND tx2.gamma_id = at2.gamma_id AND at2.art_id = ja2.art_id AND ja2.branch_id = ? AND ja2.query_id = ? UNION Select tx3.transaction_id, tx3.gamma_id FROM osee_txs tx3, osee_tx_details td3, osee_relation_link rl3, osee_join_artifact ja3 WHERE td3.branch_id = ? AND td3.transaction_id = tx3.transaction_id AND tx3.gamma_id = rl3.gamma_id AND (rl3.a_art_id = ja3.art_id OR rl3.b_art_id = ja3.art_id) AND ja3.branch_id = ? AND ja3.query_id = ?)";
+ private static final String INSERT_UPDATED_ARTIFACTS =
+ "INSERT INTO osee_txs (transaction_id, gamma_id, mod_type, tx_current) SELECT ?, tx1.gamma_id, tx1.mod_type, tx1.tx_current FROM osee_txs tx1, osee_tx_details td1, osee_artifact_version av1, osee_join_artifact ja1 WHERE td1.branch_id = ? AND td1.transaction_id = tx1.transaction_id AND tx1.tx_current = " + TxChange.CURRENT.getValue() + " AND tx1.gamma_id = av1.gamma_id AND td1.branch_id = ja1.branch_id AND av1.art_id = ja1.art_id AND ja1.query_id = ?";
+ private static final String INSERT_UPDATED_ATTRIBUTES_GAMMAS =
+ "INSERT INTO osee_txs (transaction_id, gamma_id, mod_type, tx_current) SELECT ?, tx1.gamma_id, tx1.mod_type, tx1.tx_current FROM osee_txs tx1, osee_tx_details td1, osee_attribute at1, osee_join_artifact ja1 WHERE td1.branch_id = ? AND td1.transaction_id = tx1.transaction_id AND tx1.tx_current = " + TxChange.CURRENT.getValue() + " AND tx1.gamma_id = at1.gamma_id AND td1.branch_id = ja1.branch_id AND at1.art_id = ja1.art_id AND ja1.query_id = ?";
+ private static final String INSERT_UPDATED_LINKS_GAMMAS =
+ "INSERT INTO osee_txs (transaction_id, gamma_id, mod_type, tx_current) SELECT DISTINCT ?, tx1.gamma_id, tx1.mod_type, tx1.tx_current FROM osee_txs tx1, osee_tx_details td1, osee_relation_link rl1, osee_join_artifact ja1 WHERE td1.branch_id = ? AND td1.transaction_id = tx1.transaction_id AND tx1.tx_current = " + TxChange.CURRENT.getValue() + " AND tx1.gamma_id = rl1.gamma_id AND td1.branch_id = ja1.branch_id AND (rl1.a_art_id = ja1.art_id OR rl1.b_art_id = ja1.art_id) AND ja1.query_id = ?";
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ monitor.beginTask("Update From Parent Branch", IProgressMonitor.UNKNOWN);
+
+ List<Artifact> artifacts = variableMap.getArtifacts("Parent Branch Artifacts to update to Child Branch");
+ Branch childBranch = variableMap.getBranch("Child Branch Name");
+
+ Branch parentBranch = childBranch.getParentBranch();
+ int baselineTransactionNumber =
+ TransactionIdManager.getStartEndPoint(childBranch).getKey().getTransactionNumber();
+ int queryId = ArtifactLoader.getNewQueryId();
+ Timestamp insertTime = GlobalTime.GreenwichMeanTimestamp();
+ List<Object[]> insertParameters = new LinkedList<Object[]>();
+
+ try {
+ // insert into the artifact_join_table
+ for (Artifact artifact : artifacts) {
+ insertParameters.add(new Object[] {queryId, insertTime, artifact.getArtId(), parentBranch.getBranchId(),
+ SQL3DataType.INTEGER});
+ }
+ ArtifactLoader.selectArtifacts(insertParameters);
+
+ int count =
+ ConnectionHandler.runPreparedUpdate(DELETE_GAMMAS_FOR_UPDATES, childBranch.getBranchId(),
+ parentBranch.getBranchId(), queryId, childBranch.getBranchId(), parentBranch.getBranchId(),
+ queryId, childBranch.getBranchId(), parentBranch.getBranchId(), queryId);
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, "deleted " + count + " gammas");
+
+ count =
+ ConnectionHandler.runPreparedUpdate(INSERT_UPDATED_ARTIFACTS, baselineTransactionNumber,
+ parentBranch.getBranchId(), queryId);
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, "inserted " + count + " artifacts");
+
+ count =
+ ConnectionHandler.runPreparedUpdate(INSERT_UPDATED_ATTRIBUTES_GAMMAS, baselineTransactionNumber,
+ parentBranch.getBranchId(), queryId);
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, "inserted " + count + " attributes");
+
+ count =
+ ConnectionHandler.runPreparedUpdate(INSERT_UPDATED_LINKS_GAMMAS, baselineTransactionNumber,
+ parentBranch.getBranchId(), queryId);
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, "inserted " + count + " relations");
+
+ monitor.done();
+ } finally {
+ ArtifactLoader.clearQuery(queryId);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Child Branch Name\" /><XWidget xwidgetType=\"XListDropViewer\" displayName=\"Parent Branch Artifacts to update to Child Branch\" /></xWidgets>";
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateWordFormattedContentAttributes.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateWordFormattedContentAttributes.java
new file mode 100644
index 00000000000..f9ba97fbb74
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/UpdateWordFormattedContentAttributes.java
@@ -0,0 +1,34 @@
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ *
+ * @author Jeff C. Phillips
+ *
+ */
+public class UpdateWordFormattedContentAttributes extends AbstractBlam {
+ private static final String UPDATE_ATTRIBUTE_TYPE_WHOLE_WORD = "update osee_attribute set attr_type_id = 963 where gamma_id in (select t2.gamma_id from osee_artifact t1, osee_attribute t2 where t1.art_id = t2.art_id and t2.attr_type_id = 19 and t1.art_type_id in (select art_type_id from osee_artifact_type where name in ('Checklist (WordML)', 'Guideline', 'How To', 'Renderer Template', 'Roadmap','Template (WordML)', 'Test Procedure WML', 'Work Instruction', 'Work Sheet (WordML)')))";
+ private static final String UPDATE_ATTRIBUTE_TYPE_WORD_TEMPLATE = "update osee_attribute set attr_type_id = 962 where attr_type_id = 19";
+ private static final String UPDATE_ATTR_VAL_WHOLE_WORD = "update osee_valid_attributes set attr_type_id = 963 where attr_type_id = 19 and art_type_id in (select art_type_id from osee_artifact_type where name in ('Checklist (WordML)', 'Guideline', 'How To', 'Renderer Template', 'Roadmap','Template (WordML)', 'Test Procedure WML', 'Work Instruction', 'Work Sheet (WordML)'))";
+ private static final String UPDATE_ATTR_VAL_WORD_TEMP = "update osee_valid_attributes set attr_type_id = 962 where attr_type_id = 19";
+
+ @Override
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ monitor.beginTask("Update Word Fromatted Content attributes", 4);
+ monitor.setTaskName("UPDATE_ATTRIBUTE_TYPE_WHOLE_WORD");
+ ConnectionHandler.runPreparedUpdate(UPDATE_ATTRIBUTE_TYPE_WHOLE_WORD);
+ monitor.worked(1);
+ monitor.setTaskName("UPDATE_ATTRIBUTE_TYPE_WORD_TEMPLATE");
+ ConnectionHandler.runPreparedUpdate(UPDATE_ATTRIBUTE_TYPE_WORD_TEMPLATE);
+ monitor.worked(1);
+ monitor.setTaskName("UPDATE_ATTR_VAL_WHOLE_WORD");
+ ConnectionHandler.runPreparedUpdate(UPDATE_ATTR_VAL_WHOLE_WORD);
+ monitor.worked(1);
+ monitor.setTaskName("UPDATE_ATTR_VAL_WORD_TEMP");
+ ConnectionHandler.runPreparedUpdate(UPDATE_ATTR_VAL_WORD_TEMP);
+ monitor.done();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ValidateArtifactsToDelete.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ValidateArtifactsToDelete.java
new file mode 100644
index 00000000000..6f3247d502b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/ValidateArtifactsToDelete.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactChecks;
+import org.eclipse.osee.framework.skynet.core.artifact.IArtifactCheck;
+import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+
+/**
+ * Calls extensions to determine if artifacts are valid to delete.
+ *
+ * @author Don G. Dunne
+ */
+public class ValidateArtifactsToDelete extends AbstractBlam {
+
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ processChange(variableMap.getArtifacts("artifact"));
+ }
+
+ /**
+ * Changes the descriptor of the artifacts to the provided artifact descriptor
+ *
+ * @param artifacts
+ * @param descriptor
+ */
+ private void processChange(List<Artifact> artifacts) {
+ if (artifacts.isEmpty()) {
+ throw new IllegalArgumentException("The artifact list can not be empty");
+ }
+
+ XResultData rd = new XResultData();
+ rd.log("Validation Artifacts: " + Artifacts.toString("; ", artifacts));
+ // Confirm artifacts are fit to delete
+ try {
+ for (IArtifactCheck check : ArtifactChecks.getArtifactChecks()) {
+ try {
+ Result result = check.isDeleteable(artifacts);
+ if (result.isFalse()) rd.logError(result.getText());
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ rd.log("Exception occurred...see error log" + ex.getLocalizedMessage());
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ rd.log("\n");
+ rd.log("Validation Complete - Any errors will be displayed.");
+ rd.report("Validate Artifacts to Delete");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam#getDescriptionUsage()
+ */
+ @Override
+ public String getDescriptionUsage() {
+ return "Drag in Artifacts and press Play button on top right. Artifacts will be validated for deletion by framework. NOTE: Artifacts will NOT be deleted, only validated for deletion.";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ @Override
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XListDropViewer\" displayName=\"artifact\" /></xWidgets>";
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/XWidgetPopulateExample.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/XWidgetPopulateExample.java
new file mode 100644
index 00000000000..1cd7a97e836
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/blam/operation/XWidgetPopulateExample.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.widgets.XCombo;
+import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class XWidgetPopulateExample extends AbstractBlam {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ // AWorkbench.popup("Execute", "Blam is an example only. Nothing done.");
+ appendResultLine("Test Output Line\n");
+ appendResultLine("Test Output Line\n");
+ appendResultLine("Test Output Line\n");
+ appendResultLine("Test Output Line\n");
+ appendResultLine("Test Output Line\n");
+ appendResultLine("Test Output Line\n");
+ monitor.done();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XCombo(1,2,3)\" displayName=\"Select an Option\" /></xWidgets>";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam#widgetCreating(org.eclipse.osee.framework.ui.skynet.widgets.XWidget, org.eclipse.ui.forms.widgets.FormToolkit, org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout, org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener, boolean)
+ */
+ @Override
+ public void widgetCreating(XWidget xWidget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) throws OseeCoreException {
+ super.widgetCreating(xWidget, toolkit, art, dynamicXWidgetLayout, modListener, isEditable);
+ if (xWidget.getLabel().equals("Select an Option")) {
+ XCombo combo = (XCombo) xWidget;
+ combo.setDataStrings(new String[] {"A", "B", "C"});
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam#getDescriptionUsage()
+ */
+ @Override
+ public String getDescriptionUsage() {
+ return "This blam is an example to show how an XWidget can populate it's values ( or perform other"
+ //
+ + " operations on the XWidget ) during it's creation. This is used when the options or default" +
+ //
+ " selected value may come from another dynamic source such as a database query.";
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchContentProvider.java
new file mode 100644
index 00000000000..0c74e68c082
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchContentProvider.java
@@ -0,0 +1,371 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import static org.eclipse.osee.framework.core.enums.ModificationType.DELETED;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.core.enums.BranchType;
+import org.eclipse.osee.framework.core.enums.ModificationType;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.TransactionDoesNotExist;
+import org.eclipse.osee.framework.jdk.core.type.HashCollection;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactChangeListener;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchControlled;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchState;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ConflictingArtifactSearch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ISearchPrimitive;
+import org.eclipse.osee.framework.skynet.core.change.ChangeType;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactChange;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactNameDescriptorCache;
+import org.eclipse.osee.framework.skynet.core.revision.AttributeChange;
+import org.eclipse.osee.framework.skynet.core.revision.AttributeSummary;
+import org.eclipse.osee.framework.skynet.core.revision.ChangeSummary;
+import org.eclipse.osee.framework.skynet.core.revision.RelationLinkChange;
+import org.eclipse.osee.framework.skynet.core.revision.RelationLinkSummary;
+import org.eclipse.osee.framework.skynet.core.revision.RevisionChange;
+import org.eclipse.osee.framework.skynet.core.revision.RevisionManager;
+import org.eclipse.osee.framework.skynet.core.revision.TransactionData;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionId;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionIdManager;
+import org.eclipse.osee.framework.ui.plugin.util.JobbedNode;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.swt.IContentProviderRunnable;
+import org.eclipse.osee.framework.ui.swt.ITreeNode;
+
+/**
+ * @author Jeff C. Phillips
+ * @author Robert A. Fisher
+ */
+public class BranchContentProvider implements ITreeContentProvider, ArtifactChangeListener {
+ private static final Object[] EMPTY_ARRAY = new Object[0];
+ private static final String EMPTY_REPORT = "No changes";
+ private static ArtifactNameDescriptorCache artifactNameDescriptorCache = new ArtifactNameDescriptorCache();
+ private JobbedNode root;
+ private IContentProviderRunnable providerRunnable;
+ private boolean showChildBranchesAtMainLevel;
+ private boolean showChildBranchesUnderParents;
+ private boolean showTransactions;
+ private boolean showMergeBranches;
+
+ public BranchContentProvider() {
+ this.providerRunnable = new ChildrenRunnable();
+ this.root = null;
+ this.showChildBranchesAtMainLevel = false;
+ this.showChildBranchesUnderParents = true;
+ }
+
+ /**
+ * @return Returns the children of the parent element or null if there are none.
+ */
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof ITreeNode)
+ return ((ITreeNode) parentElement).getChildren();
+ else
+ return EMPTY_ARRAY;
+ }
+
+ /**
+ * @return Returns the elements.
+ */
+ public Object[] getElements(Object inputElement) {
+ return root.getChildren();
+ }
+
+ public void setShowTransactions(boolean showTransactions) {
+ this.showTransactions = showTransactions;
+ }
+
+ public void setShowMergeBranches(boolean showMergeBranches) {
+ this.showMergeBranches = showMergeBranches;
+ }
+
+ private final class ChildrenRunnable implements IContentProviderRunnable {
+
+ @SuppressWarnings("unchecked")
+ public Object[] run(Object parentElement) throws Exception {
+ if (parentElement instanceof BranchManager) {
+ List<BranchType> branchTypes = new ArrayList<BranchType>(4);
+ branchTypes.add(BranchType.TOP_LEVEL);
+ if (AccessControlManager.isOseeAdmin() && showMergeBranches) {
+ branchTypes.add(BranchType.MERGE);
+ }
+
+ if (showChildBranchesAtMainLevel) {
+ branchTypes.add(BranchType.BASELINE);
+ branchTypes.add(BranchType.WORKING);
+ }
+
+ List<Branch> branches =
+ BranchManager.getBranches(BranchState.ACTIVE, BranchControlled.ALL,
+ branchTypes.toArray(new BranchType[branchTypes.size()]));
+ return branches.toArray();
+ } else if (parentElement instanceof Branch) {
+ Branch branch = (Branch) parentElement;
+ if (showChildBranchesUnderParents) {
+ List<Object> items = new LinkedList<Object>();
+ items.addAll(branch.getChildBranches());
+ items.addAll(getTransactions(branch));
+ return items.toArray();
+ } else {
+ return getTransactions(branch).toArray();
+ }
+ } else if (parentElement instanceof TransactionData) {
+ TransactionId tranId = ((TransactionData) parentElement).getTransactionId();
+ return getArtifactChanges(tranId);
+ } else if (parentElement instanceof Pair) {
+ Pair pair = (Pair) parentElement;
+ if (pair.getKey() instanceof TransactionId && pair.getValue() instanceof TransactionId) {
+ return getArtifactChanges(null, (TransactionId) pair.getKey(), (TransactionId) pair.getValue());
+ }
+ } else if (parentElement instanceof ArtifactChange) {
+ ArtifactChange change = (ArtifactChange) parentElement;
+ if (change.getModType() != DELETED) {
+ return summarize(
+ RevisionManager.getInstance().getTransactionChanges(change, artifactNameDescriptorCache)).toArray();
+ }
+ } else if (parentElement instanceof ChangeSummary) {
+ ChangeSummary change = (ChangeSummary) parentElement;
+ return change.getChanges().toArray();
+ } else if (parentElement instanceof Collection) {
+ Collection collection = (Collection) parentElement;
+ return collection.toArray();
+ }
+ return EMPTY_ARRAY;
+ }
+
+ private Collection<Object> getTransactions(Branch branch) throws OseeCoreException {
+ if (!showTransactions) return Collections.emptyList();
+ List<TransactionData> transactions = RevisionManager.getInstance().getTransactionsPerBranch(branch);
+ Collections.sort(transactions, new Comparator<TransactionData>() {
+ public int compare(TransactionData o1, TransactionData o2) {
+ return o1.getTransactionNumber() - o2.getTransactionNumber();
+ }
+ });
+ if (transactions != null) {
+ return org.eclipse.osee.framework.jdk.core.util.Collections.getAggregateTree(new ArrayList<Object>(
+ transactions), 100);
+ } else {
+ return Collections.emptyList();
+ }
+ }
+ }
+
+ private static Object[] getArtifactChanges(TransactionId toTransaction) throws OseeCoreException {
+ TransactionId priorTransaction;
+ try {
+ priorTransaction = TransactionIdManager.getPriorTransaction(toTransaction);
+ } catch (TransactionDoesNotExist ex) {
+ priorTransaction = null;
+ }
+ return getArtifactChanges(null, priorTransaction, toTransaction);
+ }
+
+ private static Object[] getArtifactChanges(TransactionId baseParentTransaction, TransactionId baseTransaction, TransactionId toTransaction) throws OseeCoreException {
+ TransactionId headParentTransaction =
+ baseParentTransaction == null ? null : TransactionIdManager.getStartEndPoint(
+ baseParentTransaction.getBranch()).getValue();
+
+ Collection<ArtifactChange> deletedArtChanges =
+ RevisionManager.getInstance().getDeletedArtifactChanges(baseParentTransaction, headParentTransaction,
+ baseTransaction, toTransaction, artifactNameDescriptorCache);
+ Collection<ArtifactChange> newAndModArtChanges =
+ RevisionManager.getInstance().getNewAndModArtifactChanges(baseParentTransaction, headParentTransaction,
+ baseTransaction, toTransaction, artifactNameDescriptorCache);
+
+ // Combine both the collections into one of them to return one continuous data set
+ newAndModArtChanges.addAll(deletedArtChanges);
+
+ // Perform conflict detection if a baseParentTransaction is available.
+ if (baseParentTransaction != null) {
+
+ // If the baseline hasn't moved, then we don't care to check for conflicts.
+ // Note that attempting to do conflict detection will be inaccurate as the search
+ // API will include the lower bound when the lower and upper bound match, which
+ // is not what we want.
+ if (baseParentTransaction != headParentTransaction) {
+ Map<Integer, Artifact> parentBranchModConflicts = new HashMap<Integer, Artifact>();
+ Collection<Integer> parentBranchDelConflicts = new HashSet<Integer>();
+
+ ISearchPrimitive conflictCriteria =
+ new ConflictingArtifactSearch(baseParentTransaction.getBranchId(),
+ baseParentTransaction.getTransactionNumber(), headParentTransaction.getTransactionNumber(),
+ baseTransaction.getBranchId(), baseTransaction.getTransactionNumber(),
+ toTransaction.getTransactionNumber());
+
+ Collection<Artifact> artModConflicts =
+ ArtifactPersistenceManager.getInstance().getArtifacts(conflictCriteria,
+ headParentTransaction.getBranch());
+ for (Artifact artifact : artModConflicts)
+ parentBranchModConflicts.put(artifact.getArtId(), artifact);
+
+ Collection<ArtifactChange> artDelConflicts =
+ RevisionManager.getInstance().getDeletedArtifactChanges(null, null, baseParentTransaction,
+ headParentTransaction, null);
+ for (ArtifactChange change : artDelConflicts) {
+ parentBranchDelConflicts.add(change.getArtifact().getArtId());
+ }
+
+ for (ArtifactChange change : newAndModArtChanges) {
+ if (parentBranchDelConflicts.contains(change.getArtifact().getArtId())) {
+ change.setChangeType(ChangeType.CONFLICTING);
+ change.setConflictingModArtifact(change.getArtifact());
+ } else if (parentBranchModConflicts.containsKey(change.getArtifact().getArtId())) {
+ change.setConflictingModArtifact(parentBranchModConflicts.get(change.getArtifact().getArtId()));
+ }
+ }
+ }
+ }
+
+ return newAndModArtChanges.toArray();
+ }
+
+ /**
+ * @return Returns the parent element.
+ */
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ if (element instanceof ITreeNode) element = ((ITreeNode) element).getBackingData();
+ if (element == EMPTY_REPORT) return false;
+
+ if (element instanceof TransactionData) {
+ TransactionData data = (TransactionData) element;
+
+ if (data.getComment() != null && data.getComment().contains(BranchManager.NEW_BRANCH_COMMENT)) return false;
+ }
+ if (element instanceof Branch) {
+ Branch branch = (Branch) element;
+
+ try {
+ boolean readable = AccessControlManager.checkObjectPermission(branch, PermissionEnum.READ);
+ return readable && (showTransactions || (!branch.getChildBranches().isEmpty() && showChildBranchesUnderParents));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return false;
+ }
+ }
+
+ return (element instanceof TransactionData || element instanceof Pair || element instanceof ChangeSummary || element instanceof Collection || (element instanceof ArtifactChange && ((ArtifactChange) element).getModType() != DELETED));
+ }
+
+ public void dispose() {
+
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ root = new JobbedNode(newInput, viewer, providerRunnable);
+ }
+
+ public void refresh() {
+ if (root != null) {
+ root.refresh(false);
+ }
+ }
+
+ public void refresh(boolean expand) {
+ if (root != null) {
+ root.refresh(expand);
+ }
+ }
+
+ public static Collection<Object> summarize(Collection<RevisionChange> changes) throws IllegalArgumentException {
+ Collection<Object> summary = new LinkedList<Object>();
+ HashCollection<Integer, AttributeChange> attrChanges = new HashCollection<Integer, AttributeChange>();
+ HashCollection<Integer, RelationLinkChange> linkChanges = new HashCollection<Integer, RelationLinkChange>();
+
+ // Aggregate all of the data
+ for (RevisionChange change : changes) {
+ if (change instanceof AttributeChange) {
+ attrChanges.put(((AttributeChange) change).getAttrId(), (AttributeChange) change);
+ } else if (change instanceof RelationLinkChange) {
+ linkChanges.put(((RelationLinkChange) change).getRelLinkId(), (RelationLinkChange) change);
+ } else if (change instanceof ArtifactChange) {
+ ArtifactChange artifactChange = (ArtifactChange) change;
+
+ if (artifactChange.getModType() == ModificationType.DELETED) {
+ summary.add(artifactChange);
+ }
+ } else {
+ throw new IllegalArgumentException(
+ "changes must be of type AttributeChange or RelationLinkChange, not " + change.getClass().getSimpleName());
+ }
+ }
+
+ for (Integer attrId : attrChanges.keySet()) {
+ Collection<AttributeChange> attrChangeSet = attrChanges.getValues(attrId);
+ if (attrChangeSet.size() == 1)
+ summary.add(attrChangeSet.iterator().next());
+ else
+ summary.add(new AttributeSummary(attrChangeSet));
+ }
+
+ for (Integer linkId : linkChanges.keySet()) {
+ Collection<RelationLinkChange> linkChangeSet = linkChanges.getValues(linkId);
+ if (linkChangeSet.size() == 1)
+ summary.add(linkChangeSet.iterator().next());
+ else
+ summary.add(new RelationLinkSummary(linkChangeSet));
+ }
+
+ return summary;
+ }
+
+ /**
+ * @return the showChildBranchesAtMainLevel
+ */
+ public boolean isShowChildBranchesAtMainLevel() {
+ return showChildBranchesAtMainLevel;
+ }
+
+ /**
+ * @param showChildBranchesAtMainLevel the showChildBranchesAtMainLevel to set
+ */
+ public void setShowChildBranchesAtMainLevel(boolean showChildBranchesAtMainLevel) {
+ this.showChildBranchesAtMainLevel = showChildBranchesAtMainLevel;
+ }
+
+ /**
+ * @return the showChildBranchesUnderParents
+ */
+ public boolean isShowChildBranchesUnderParents() {
+ return showChildBranchesUnderParents;
+ }
+
+ /**
+ * @param showChildBranchesUnderParents the showChildBranchesUnderParents to set
+ */
+ public void setShowChildBranchesUnderParents(boolean showChildBranchesUnderParents) {
+ this.showChildBranchesUnderParents = showChildBranchesUnderParents;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchCreationHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchCreationHandler.java
new file mode 100644
index 00000000000..a618dfa6eda
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchCreationHandler.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeStateException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.revision.TransactionData;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionId;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionIdManager;
+import org.eclipse.osee.framework.ui.plugin.util.AbstractSelectionEnabledHandler;
+import org.eclipse.osee.framework.ui.plugin.util.IExceptionableRunnable;
+import org.eclipse.osee.framework.ui.plugin.util.JobbedNode;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetSelections;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Ryan D. Brooks
+ * @author Robert A. Fisher
+ */
+public class BranchCreationHandler extends AbstractSelectionEnabledHandler {
+ private TreeViewer branchTable;
+
+ /**
+ * @param branchTable
+ */
+ public BranchCreationHandler(MenuManager menuManager, TreeViewer branchTable) {
+ super(menuManager);
+ this.branchTable = branchTable;
+ }
+
+ @Override
+ public Object execute(ExecutionEvent arg0) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ Object backingData = ((JobbedNode) selection.getFirstElement()).getBackingData();
+
+ final TransactionId parentTransactionId;
+ try {
+ if (backingData instanceof Branch) {
+ Branch branch = (Branch) backingData;
+ parentTransactionId = TransactionIdManager.getlatestTransactionForBranch(branch);
+ } else if (backingData instanceof TransactionData) {
+
+ parentTransactionId = ((TransactionData) backingData).getTransactionId();
+
+ } else {
+ throw new OseeStateException(
+ "Backing data for the jobbed node in the branchview was not of the expected type");
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ return null;
+ }
+ final EntryDialog dialog =
+ new EntryDialog(Display.getCurrent().getActiveShell(), "Branch", null, "Enter the name of the new Branch",
+ MessageDialog.INFORMATION, new String[] {"OK", "Cancel"}, 0);
+ int result = dialog.open();
+
+ if (result == 0 && dialog.getEntry() != null) {
+
+ IExceptionableRunnable runnable = new IExceptionableRunnable() {
+ public void run(IProgressMonitor monitor) throws Exception {
+ BranchManager.createWorkingBranch(parentTransactionId, null, dialog.getEntry(), null);
+ }
+ };
+
+ Jobs.run("Create Branch", runnable, SkynetGuiPlugin.class, SkynetGuiPlugin.PLUGIN_ID);
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+
+ return (SkynetSelections.oneBranchSelected(selection) && AccessControlManager.checkObjectPermission(
+ SkynetSelections.boilDownObject(selection.getFirstElement()), PermissionEnum.READ)) || (SkynetSelections.oneTransactionSelected(selection) && AccessControlManager.checkObjectPermission(
+ ((TransactionData) SkynetSelections.boilDownObject(selection.getFirstElement())).getTransactionId().getBranch(),
+ PermissionEnum.READ));
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchLabelProvider.java
new file mode 100644
index 00000000000..0c52cdb3e91
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchLabelProvider.java
@@ -0,0 +1,336 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableColorProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.osee.framework.core.enums.ModificationType;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.change.ChangeType;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactChange;
+import org.eclipse.osee.framework.skynet.core.revision.IAttributeChange;
+import org.eclipse.osee.framework.skynet.core.revision.IRevisionChange;
+import org.eclipse.osee.framework.skynet.core.revision.RelationLinkChange;
+import org.eclipse.osee.framework.skynet.core.revision.TransactionData;
+import org.eclipse.osee.framework.ui.plugin.util.OverlayImage;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.ShowAttributeAction;
+import org.eclipse.osee.framework.ui.swt.ITreeNode;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class BranchLabelProvider implements ITableLabelProvider, ITableColorProvider, ILabelProvider {
+ private static Image branchImage = SkynetGuiPlugin.getInstance().getImage("branch.gif");
+ private static Image changeManagedBranchImage = SkynetGuiPlugin.getInstance().getImage("change_managed_branch.gif");
+
+ private static Image favoriteBranchImage = null;
+ private static Image defaultBranchImage = null;
+ private static Image favoriteDefaultBranchImage = null;
+
+ private static Image favoriteDefaultChangedManagedBranchImage = null;
+ private static Image defaultChangeManagedBranchImage = null;
+ private static Image favoriteChangeManagedBranchImage = null;
+ private boolean showChangeType = false;
+
+ private final ShowAttributeAction attributeAction;
+ private Collection<Integer> attributeModifiedArtifactIds;
+
+ public BranchLabelProvider() {
+ this(null);
+ }
+
+ public BranchLabelProvider(ShowAttributeAction attributeAction) {
+ this.attributeAction = attributeAction;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Image getColumnImage(Object element, int columnIndex) {
+ if (element instanceof ITreeNode) {
+ element = ((ITreeNode) element).getBackingData();
+ }
+
+ // Seek down through aggregation lists to the lowest level to get an actual element
+ while (element instanceof List && !((List) element).isEmpty()) {
+ element = ((List) element).get(0);
+ }
+
+ if (element instanceof Branch && columnIndex == 0) {
+ try {
+ checkImages();
+ Branch branch = (Branch) element;
+ boolean favorite = UserManager.getUser().isFavoriteBranch(branch);
+ boolean action = branch.isChangeManaged();
+ boolean isDefault = element.equals(BranchManager.getDefaultBranch());
+
+ if (favorite && action) {
+ return isDefault ? favoriteDefaultChangedManagedBranchImage : favoriteChangeManagedBranchImage;
+ } else if (favorite) {
+ return isDefault ? favoriteDefaultBranchImage : favoriteBranchImage;
+ } else if (action) {
+ return isDefault ? defaultChangeManagedBranchImage : changeManagedBranchImage;
+ } else {
+ return isDefault ? defaultBranchImage : branchImage;
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ } else if (element instanceof TransactionData && columnIndex == 0) {
+ return SkynetGuiPlugin.getInstance().getImage("transaction.gif");
+
+ } else if (element instanceof RelationLinkChange && columnIndex == 2) {
+ ArtifactType descriptor = ((RelationLinkChange) element).getOtherArtifactDescriptor();
+ if (descriptor == null)
+ return null;
+ else
+ return descriptor.getImage();
+
+ } else if (element instanceof IRevisionChange && columnIndex == 0) {
+ return ((IRevisionChange) element).getImage();
+ }
+
+ return null;
+ }
+
+ private static synchronized void checkImages() {
+ if (defaultBranchImage == null) {
+ favoriteBranchImage =
+ new OverlayImage(branchImage, SkynetGuiPlugin.getInstance().getImageDescriptor("star_9_9.gif"), 0, 7).createImage();
+ defaultBranchImage =
+ new OverlayImage(branchImage, SkynetGuiPlugin.getInstance().getImageDescriptor("black_check.gif"), 8, 0).createImage();
+ favoriteDefaultBranchImage =
+ new OverlayImage(defaultBranchImage, SkynetGuiPlugin.getInstance().getImageDescriptor("star_9_9.gif"),
+ 0, 7).createImage();
+
+ defaultChangeManagedBranchImage =
+ new OverlayImage(changeManagedBranchImage, SkynetGuiPlugin.getInstance().getImageDescriptor(
+ "black_check.gif"), 8, 0).createImage();
+ favoriteChangeManagedBranchImage =
+ new OverlayImage(changeManagedBranchImage, SkynetGuiPlugin.getInstance().getImageDescriptor(
+ "star_9_9.gif"), 0, 7).createImage();
+ favoriteDefaultChangedManagedBranchImage =
+ new OverlayImage(defaultChangeManagedBranchImage, SkynetGuiPlugin.getInstance().getImageDescriptor(
+ "star_9_9.gif"), 0, 7).createImage();
+
+ }
+ }
+
+ /**
+ * @return Returns the text for a specific column
+ */
+ public String getColumnText(Object element, int columnIndex) {
+ return getColumnTextLabel(element, columnIndex);
+ }
+
+ @SuppressWarnings("unchecked")
+ public String getColumnTextLabel(Object element, int columnIndex) {
+ if (element instanceof ITreeNode) element = ((ITreeNode) element).getBackingData();
+
+ if (element instanceof Branch) {
+ Branch branch = (Branch) element;
+
+ if (columnIndex == 0) {
+ try {
+ if (AccessControlManager.isOseeAdmin()) {
+ return "(" + branch.getBranchId() + ") " + branch.getBranchName();
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return branch.getBranchName();
+ } else if (columnIndex == 1) {
+ return branch.getDisplayName();
+ } else if (columnIndex == 2) {
+ return String.valueOf(branch.getCreationDate());
+ } else if (columnIndex == 3) {
+ try {
+ return UserManager.getUserByArtId(branch.getAuthorId()).getDescriptiveName();
+ } catch (Exception ex) {
+ return "";
+ }
+ } else if (columnIndex == 4) {
+ return branch.getCreationComment();
+ }
+ } else if (element instanceof TransactionData) {
+ TransactionData transactionData = (TransactionData) element;
+
+ if (columnIndex == 0) {
+ return String.valueOf(transactionData.getTransactionNumber());
+ } else if (columnIndex == 2) {
+ return String.valueOf(transactionData.getTimeStamp());
+ } else if (columnIndex == 3) {
+ return transactionData.getName();
+ } else if (columnIndex == 4) {
+ return transactionData.getComment();
+ }
+ } else if (element instanceof Collection) {
+ Object headCursor = element;
+ Object tailCursor = element;
+
+ while (headCursor instanceof List && !((List) headCursor).isEmpty()) {
+ headCursor = ((List) headCursor).get(0);
+ }
+ while (tailCursor instanceof List && !((List) tailCursor).isEmpty()) {
+ List list = (List) tailCursor;
+ tailCursor = list.get(list.size() - 1);
+ }
+
+ if (headCursor instanceof TransactionData && tailCursor instanceof TransactionData) {
+ TransactionData headTransactionData = (TransactionData) headCursor;
+ TransactionData tailTransactionData = (TransactionData) tailCursor;
+
+ if (columnIndex == 0) {
+ return String.valueOf(headTransactionData.getTransactionNumber() + "..." + tailTransactionData.getTransactionNumber());
+ } else if (columnIndex == 2) {
+ return String.valueOf(headTransactionData.getTimeStamp());
+ }
+ } else {
+ return "Unexpected aggregation of " + headCursor.getClass().getSimpleName() + " and " + tailCursor.getClass().getSimpleName();
+ }
+
+ } else if (element instanceof ArtifactChange) {
+ if (columnIndex == 0) {
+ ArtifactChange artifactChange = (ArtifactChange) element;
+ try {
+ String txt =
+ artifactChange.getName() + (showChangeType ? " (" + getChangeType(artifactChange) + ")" : "");
+ if (artifactChange.getModType() == ModificationType.DELETED && artifactChange.getChangeType() == ChangeType.INCOMING) {
+ txt = "Artifact Deleted";
+ } else {
+ if (attributeAction != null && !attributeAction.noneSelected()) {
+ String attributeText = "";
+ try {
+ attributeText = attributeAction.getSelectedAttributeData(artifactChange.getArtifact());
+ if (attributeText != null) {
+ return txt + attributeText;
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return txt + ex.getLocalizedMessage();
+ }
+ }
+ }
+ return txt;
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return ex.getLocalizedMessage();
+ }
+ }
+ } else if (element instanceof IAttributeChange) {
+ IAttributeChange change = (IAttributeChange) element;
+
+ if (columnIndex == 0) {
+ return String.valueOf(change.getGammaId());
+ } else if (columnIndex == 1) {
+ return change.getName();
+ } else if (columnIndex == 2) {
+ return "was:" + change.getWasValue();
+ } else if (columnIndex == 3) {
+ return "is:" + change.getChange();
+ }
+ } else if (element instanceof RelationLinkChange) {
+ RelationLinkChange change = (RelationLinkChange) element;
+
+ if (columnIndex == 0) {
+ return String.valueOf(change.getGammaId());
+ } else if (columnIndex == 1) {
+ return change.getRelTypeName();
+ } else if (columnIndex == 2) {
+ return change.getOtherArtifactName();
+ } else if (columnIndex == 3) {
+ return change.getRationale();
+ }
+ } else if (columnIndex == 0) {
+ return element.toString();
+ }
+ return "";
+ }
+
+ private String getChangeType(ArtifactChange artifactChange) throws OseeCoreException {
+ // Compare using artids cause a historical artifact is NOT equal to a current artifact
+ if ((artifactChange.getModType() == ModificationType.CHANGE) && attributeModifiedArtifactIds != null && !attributeModifiedArtifactIds.contains(artifactChange.getArtifact().getArtId())) return artifactChange.getModType().getDisplayName() + " Relation Only";
+ return artifactChange.getModType().getDisplayName();
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public Image getImage(Object element) {
+ return getColumnImage(element, 0);
+ }
+
+ /**
+ * @return returns the text for the first column as default
+ */
+ public String getText(Object element) {
+ return getColumnText(element, 0);
+ }
+
+ public Color getForeground(Object element, int columnIndex) {
+ return null;
+ }
+
+ public Color getBackground(Object element, int columnIndex) {
+ return null;
+ }
+
+ /**
+ * @param branch
+ * @return Returns the image for a branch.
+ */
+ public static Image getBranchImage(Branch branch) {
+ if (branch == null) {
+ throw new IllegalArgumentException("The branch can not be null.");
+ }
+
+ return branch.isChangeManaged() ? changeManagedBranchImage : branchImage;
+ }
+
+ /**
+ * @return the showChangeType
+ */
+ public boolean isShowChangeType() {
+ return showChangeType;
+ }
+
+ /**
+ * @param showChangeType the showChangeType to set
+ */
+ public void setShowChangeType(boolean showChangeType, Collection<Integer> attributeModifiedArtifactIds) {
+ this.showChangeType = showChangeType;
+ this.attributeModifiedArtifactIds = attributeModifiedArtifactIds;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchListComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchListComposite.java
new file mode 100644
index 00000000000..30454b0c38c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchListComposite.java
@@ -0,0 +1,462 @@
+/*
+ * Created on Oct 29, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.JobbedNode;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.IBranchArtifact;
+import org.eclipse.osee.framework.ui.swt.ColumnSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TreeEditor;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class BranchListComposite implements IBranchEventListener {
+
+ private static final String[] columnNames = {"", "Short Name", "Time Stamp", "Author", "Comment"};
+ private TreeViewer branchTable;
+ private TreeEditor myTreeEditor;
+ private Text filterText;
+ private BranchNameFilter nameFilter;
+ private FavoritesSorter sorter;
+ private final Collection<Branch> branches;
+
+ public BranchListComposite(Composite parent) {
+ this(null, parent);
+ }
+
+ public BranchListComposite(Collection<Branch> branches, Composite parent) {
+ this.branches = branches;
+ try {
+
+ if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) return;
+
+ parent.setLayout(new GridLayout());
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ createTableViewer(parent);
+ createColumns();
+ createFilter(parent);
+
+ myTreeEditor = new TreeEditor(branchTable.getTree());
+ myTreeEditor.horizontalAlignment = SWT.LEFT;
+ myTreeEditor.grabHorizontal = true;
+ myTreeEditor.minimumWidth = 50;
+
+ forcePopulateView();
+ OseeEventManager.addListener(this);
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ /**
+ * @return the myTreeEditor
+ */
+ public TreeEditor getMyTreeEditor() {
+ return myTreeEditor;
+ }
+
+ private void createColumns() {
+ Tree tree = branchTable.getTree();
+
+ tree.setHeaderVisible(true);
+ TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
+ column1.setWidth(400);
+ column1.setText(columnNames[0]);
+ column1.addSelectionListener(new ColumnSelectionListener(0));
+
+ TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
+ column2.setWidth(100);
+ column2.setText(columnNames[1]);
+ column2.addSelectionListener(new ColumnSelectionListener(1));
+
+ TreeColumn column3 = new TreeColumn(tree, SWT.LEFT);
+ column3.setWidth(150);
+ column3.setText(columnNames[2]);
+ column3.addSelectionListener(new ColumnSelectionListener(2));
+
+ TreeColumn column4 = new TreeColumn(tree, SWT.LEFT);
+ column4.setWidth(150);
+ column4.setText(columnNames[3]);
+ column4.addSelectionListener(new ColumnSelectionListener(3));
+
+ TreeColumn column5 = new TreeColumn(tree, SWT.LEFT);
+ column5.setWidth(300);
+ column5.setText(columnNames[4]);
+ column5.addSelectionListener(new ColumnSelectionListener(4));
+ }
+
+ private void createFilter(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(new GridLayout(2, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+
+ Label label = new Label(composite, SWT.NONE);
+ label.setText("Filter:");
+
+ filterText = new Text(composite, SWT.BORDER);
+ filterText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ nameFilter.setContains(((Text) e.getSource()).getText());
+ branchTable.refresh();
+ }
+ });
+ filterText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+ }
+
+ public boolean isFiltering() {
+ return nameFilter.isFiltering();
+ }
+ private class ColumnSelectionListener extends SelectionAdapter {
+ private final int index;
+
+ /**
+ * @param index
+ */
+ public ColumnSelectionListener(int index) {
+ super();
+ this.index = index;
+ }
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ sorter.setColumnToSort(index);
+ branchTable.refresh();
+ }
+ }
+
+ /**
+ * @return the branchTable
+ */
+ public TreeViewer getBranchTable() {
+ return branchTable;
+ }
+
+ /**
+ * @return the filterText
+ */
+ public Text getFilterText() {
+ return filterText;
+ }
+
+ private void createTableViewer(Composite parent) {
+ ITableLabelProvider labelProvider = new BranchLabelProvider(null);
+
+ branchTable = new TreeViewer(parent, SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER);
+ branchTable.setContentProvider(new BranchContentProvider());
+ branchTable.setLabelProvider(labelProvider);
+ branchTable.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ sorter = new FavoritesSorter(labelProvider);
+ branchTable.setSorter(sorter);
+
+ nameFilter = new BranchNameFilter();
+ branchTable.addFilter(nameFilter);
+ setFavoritesFirst(true);
+ }
+
+ class BranchArtifact implements IBranchArtifact {
+
+ private final Branch branch;
+
+ public BranchArtifact(Branch branch) {
+ this.branch = branch;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IBranchArtifact#getArtifact()
+ */
+ public Artifact getArtifact() {
+ try {
+ return branch.getAssociatedArtifact();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IBranchArtifact#getWorkingBranch()
+ */
+ public Branch getWorkingBranch() throws OseeCoreException {
+ return branch;
+ }
+ }
+
+ public void refresh() {
+ if (branchTable != null && !branchTable.getTree().isDisposed()) {
+ branchTable.refresh();
+ }
+ }
+
+ public void forcePopulateView() throws OseeCoreException {
+ if (branchTable != null && !branchTable.getTree().isDisposed()) {
+ BranchManager.refreshBranches();
+ if (branches == null) {
+ branchTable.setInput(BranchManager.getInstance());
+ } else {
+ branchTable.setInput(branches);
+ }
+ }
+ }
+
+ public void setFocus() {
+ if (branchTable != null) branchTable.getControl().setFocus();
+ }
+
+ private class BranchNameFilter extends ViewerFilter {
+ private String contains = null;
+ private boolean flat = false;
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (!isFiltering()) return true;
+
+ Object backingData = ((JobbedNode) element).getBackingData();
+ if (backingData instanceof Branch) {
+ return descendantBranchContains((Branch) backingData);
+ }
+ return true;
+ }
+
+ private boolean descendantBranchContains(Branch branch) {
+ if (branch.getBranchName().toLowerCase().contains(contains.toLowerCase())) {
+ return true;
+ }
+ if (!flat) {
+ // Recurse for hierarchical display
+ try {
+ for (Branch childBranch : branch.getChildBranches()) {
+ if (descendantBranchContains(childBranch)) {
+ return true;
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @param contains The contains to set.
+ */
+ public void setContains(String contains) {
+ this.contains = contains;
+ }
+
+ /**
+ * @return Returns the contains.
+ */
+ public String getContains() {
+ return contains;
+ }
+
+ public boolean isFiltering() {
+ return contains != null && contains.length() > 0;
+ }
+
+ /**
+ * @param flat the flat to set
+ */
+ public void setFlat(boolean flat) {
+ this.flat = flat;
+ }
+ }
+
+ private class FavoritesSorter extends ColumnSorter {
+ private boolean favoritesFirst;
+
+ /**
+ * @param labelProvider
+ */
+ public FavoritesSorter(ITableLabelProvider labelProvider) {
+ super(labelProvider);
+
+ this.favoritesFirst = false;
+ }
+
+ @Override
+ public int compare(Viewer viewer, Object o1, Object o2) {
+ Object backing1 = ((JobbedNode) o1).getBackingData();
+ Object backing2 = ((JobbedNode) o2).getBackingData();
+
+ if (favoritesFirst && backing1 instanceof Branch && backing2 instanceof Branch) {
+ try {
+ User user = UserManager.getUser();
+ boolean fav1 = user.isFavoriteBranch((Branch) backing1);
+ boolean fav2 = user.isFavoriteBranch((Branch) backing2);
+
+ if (fav1 ^ fav2) {
+ return fav1 ? -1 : 1;
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ } else if (backing1 instanceof Branch && !(backing2 instanceof Branch)) {
+ return -1;
+ } else if (!(backing1 instanceof Branch) && backing2 instanceof Branch) {
+ return 1;
+ }
+ return super.compare(viewer, o1, o2);
+ }
+
+ /**
+ * @return Returns the favoritesFirst.
+ */
+ public boolean isFavoritesFirst() {
+ return favoritesFirst;
+ }
+
+ /**
+ * @param favoritesFirst The favoritesFirst to set.
+ */
+ public void setFavoritesFirst(boolean favoritesFirst) {
+ this.favoritesFirst = favoritesFirst;
+ }
+ }
+
+ public void reveal(Branch branch) {
+ for (Object obj : ((BranchContentProvider) branchTable.getContentProvider()).getElements(null)) {
+ if (((JobbedNode) obj).getBackingData() == branch) {
+ branchTable.reveal(obj);
+ branchTable.setSelection(new StructuredSelection(obj), true);
+ return;
+ }
+ }
+ }
+
+ public void disposeComposite() {
+ OseeEventManager.removeListener(this);
+ }
+
+ public void setShowTransactions(boolean showTransactions) {
+ if (branchTable != null && branchTable.getContentProvider() != null) {
+
+ BranchContentProvider myBranchContentProvider = (BranchContentProvider) branchTable.getContentProvider();
+ myBranchContentProvider.setShowTransactions(showTransactions);
+ myBranchContentProvider.refresh();
+ refresh();
+ }
+ }
+
+ public void setShowMergeBranches(boolean showMergeBranches) {
+ if (branchTable != null && branchTable.getContentProvider() != null) {
+
+ BranchContentProvider myBranchContentProvider = (BranchContentProvider) branchTable.getContentProvider();
+ myBranchContentProvider.setShowMergeBranches(showMergeBranches);
+ myBranchContentProvider.refresh();
+ refresh();
+ }
+ }
+
+ public void setFavoritesFirst(boolean set) {
+ if (sorter != null) {
+ sorter.setFavoritesFirst(set);
+ branchTable.refresh();
+ }
+ }
+
+ public void setPresentation(boolean flat) {
+ if (branchTable != null && branchTable.getContentProvider() != null) {
+ BranchContentProvider provider = (BranchContentProvider) branchTable.getContentProvider();
+
+ // No effect if going to the same state
+ if (provider.isShowChildBranchesAtMainLevel() != flat || provider.isShowChildBranchesUnderParents() != !flat) {
+ nameFilter.setFlat(flat);
+ provider.setShowChildBranchesAtMainLevel(flat);
+ provider.setShowChildBranchesUnderParents(!flat);
+
+ provider.refresh();
+ }
+ refresh();
+ }
+ }
+
+ public boolean isFavoritesFirst() {
+ return sorter.isFavoritesFirst();
+ }
+
+ public void setDefaultBranch(Branch newDefaultBranch) throws OseeCoreException {
+ Branch oldDefaultBranch = BranchManager.getDefaultBranch();
+ BranchManager.setDefaultBranch(newDefaultBranch);
+ branchTable.update(new Object[] {oldDefaultBranch, newDefaultBranch}, null);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, org.eclipse.osee.framework.skynet.core.artifact.Branch, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, int branchId) {
+ if (branchModType == BranchEventType.DefaultBranchChanged || branchModType == BranchEventType.Renamed) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ refresh();
+ }
+ });
+ } else if (branchModType == BranchEventType.Added || branchModType == BranchEventType.Deleted || branchModType == BranchEventType.Committed) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ try {
+ forcePopulateView();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchSelectComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchSelectComposite.java
new file mode 100644
index 00000000000..b32e70a98af
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchSelectComposite.java
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class BranchSelectComposite extends Composite implements Listener {
+ protected static final int SIZING_TEXT_FIELD_WIDTH = 250;
+
+ private Button branchSelectButton;
+ private Text branchSelectTextWidget;
+ private Branch selectedBranch;
+ private final Set<Listener> listeners;
+ private final boolean allowOnlyWorkingBranches;
+
+ public BranchSelectComposite(Composite parent, int style, boolean allowOnlyWorkingBranches) {
+ super(parent, style);
+ this.allowOnlyWorkingBranches = allowOnlyWorkingBranches;
+ this.listeners = Collections.synchronizedSet(new HashSet<Listener>());
+ createControl(this);
+ }
+
+ public static BranchSelectComposite createWorkingBranchSelectComposite(Composite parent, int style) {
+ return new BranchSelectComposite(parent, style, true);
+ }
+
+ public static BranchSelectComposite createBranchSelectComposite(Composite parent, int style) {
+ return new BranchSelectComposite(parent, style, false);
+ }
+
+ private void createControl(Composite parent) {
+ parent.setLayout(new GridLayout(2, false));
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ branchSelectTextWidget = new Text(parent, SWT.BORDER | SWT.READ_ONLY);
+ GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
+ data.widthHint = SIZING_TEXT_FIELD_WIDTH;
+ branchSelectTextWidget.setLayoutData(data);
+
+ branchSelectButton = new Button(parent, SWT.PUSH);
+ branchSelectButton.setText("Select Branch...");
+ branchSelectButton.addListener(SWT.Selection, this);
+ branchSelectButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+ }
+
+ public Branch getSelectedBranch() {
+ return selectedBranch;
+ }
+
+ private boolean areOnlyWorkingBranchesAllowed() {
+ return allowOnlyWorkingBranches;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ public void handleEvent(Event event) {
+ if (event.widget == branchSelectButton) {
+ if (areOnlyWorkingBranchesAllowed() != false) {
+ setSelected(BranchSelectionDialog.getWorkingBranchFromUser());
+ } else {
+ setSelected(BranchSelectionDialog.getBranchFromUser());
+ }
+ }
+ notifyListener(event);
+ }
+
+ public void setSelected(Branch branch) {
+ if (branch != null) {
+ selectedBranch = branch;
+ branchSelectTextWidget.setText(selectedBranch.getBranchName());
+ }
+ }
+
+ private void notifyListener(Event event) {
+ synchronized (listeners) {
+ for (Listener listener : listeners) {
+ listener.handleEvent(event);
+ }
+ }
+ }
+
+ public void addListener(Listener listener) {
+ synchronized (listeners) {
+ listeners.add(listener);
+ }
+ }
+
+ public void removeListener(Listener listener) {
+ synchronized (listeners) {
+ listeners.remove(listener);
+ }
+ }
+
+ /**
+ * @param defaultSelectedBranch the defaultSelectedBranch to set
+ */
+ public void setDefaultSelectedBranch(Branch defaultSelectedBranch) {
+ setSelected(defaultSelectedBranch);
+ }
+
+ /**
+ * @return the branchSelectLabel
+ */
+ public Text getBranchSelectText() {
+ return branchSelectTextWidget;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchSelectionDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchSelectionDialog.java
new file mode 100644
index 00000000000..1fa17e84342
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchSelectionDialog.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.core.enums.BranchType;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchControlled;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchState;
+import org.eclipse.osee.framework.ui.plugin.util.JobbedNode;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class BranchSelectionDialog extends MessageDialog {
+
+ Branch selected = null;
+ BranchListComposite branchListComposite;
+ private final boolean allowOnlyWorkingBranches;
+
+ public BranchSelectionDialog(String title, boolean allowOnlyWorkingBranches) {
+ super(Display.getCurrent().getActiveShell(), title, null, null, MessageDialog.NONE,
+ new String[] {"Ok", "Cancel"}, 0);
+ this.allowOnlyWorkingBranches = allowOnlyWorkingBranches;
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ }
+
+ public Branch getSelection() {
+ return selected;
+ }
+
+ @Override
+ protected Control createDialogArea(Composite container) {
+ List<Branch> branches = null;
+ try {
+ if (allowOnlyWorkingBranches) {
+ branches =
+ BranchManager.getBranches(BranchState.ACTIVE, BranchControlled.CHANGE_MANAGED, BranchType.WORKING);
+ } else {
+ branches = BranchManager.getNormalBranches();
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ branchListComposite = new BranchListComposite(branches, container);
+ branchListComposite.setPresentation(true);
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = 500;
+ gd.widthHint = 400;
+ branchListComposite.getBranchTable().getTree().setLayoutData(gd);
+ branchListComposite.getFilterText().setFocus();
+ branchListComposite.getBranchTable().getTree().addListener(SWT.MouseDoubleClick, new Listener() {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ @Override
+ public void handleEvent(Event event) {
+ handleDoubleClick();
+ }
+ });
+ branchListComposite.getBranchTable().getTree().addSelectionListener(new SelectionListener() {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ storeSelectedBranch();
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+ return branchListComposite.getBranchTable().getControl();
+ }
+
+ public Branch getSelected() {
+ return selected;
+ }
+
+ private void storeSelectedBranch() {
+ IStructuredSelection sel = (IStructuredSelection) branchListComposite.getBranchTable().getSelection();
+ if (!sel.isEmpty() && (sel.getFirstElement() instanceof JobbedNode)) {
+ selected = (Branch) ((JobbedNode) sel.getFirstElement()).getBackingData();
+ }
+ }
+
+ private void handleDoubleClick() {
+ storeSelectedBranch();
+ okPressed();
+ }
+
+ private static Branch createDialog(boolean allowOnlyWorkingBranches) {
+ Branch toReturn = null;
+ BranchSelectionDialog branchSelection = new BranchSelectionDialog("Select Branch", allowOnlyWorkingBranches);
+ int result = branchSelection.open();
+ if (result == Window.OK) {
+ toReturn = branchSelection.getSelection();
+ }
+ return toReturn;
+ }
+
+ public static Branch getBranchFromUser() {
+ return createDialog(false);
+ }
+
+ public static Branch getWorkingBranchFromUser() {
+ return createDialog(true);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchView.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchView.java
new file mode 100644
index 00000000000..b0a5ca8e594
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/BranchView.java
@@ -0,0 +1,1329 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.commands.IParameter;
+import org.eclipse.core.commands.IParameterValues;
+import org.eclipse.core.commands.ParameterValuesException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.NodeChangeEvent;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.db.connection.core.schema.SkynetDatabase;
+import org.eclipse.osee.framework.db.connection.exception.BranchDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.IATSArtifact;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactChange;
+import org.eclipse.osee.framework.skynet.core.revision.ConflictManagerInternal;
+import org.eclipse.osee.framework.skynet.core.revision.TransactionData;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionIdManager;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.AbstractSelectionEnabledHandler;
+import org.eclipse.osee.framework.ui.plugin.util.Commands;
+import org.eclipse.osee.framework.ui.plugin.util.JobbedNode;
+import org.eclipse.osee.framework.ui.plugin.util.SelectionCountChangeListener;
+import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.TreeViewerReport;
+import org.eclipse.osee.framework.ui.skynet.access.PolicyDialog;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetSelections;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.CheckBoxDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeView;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeView;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.CompoundContributionItem;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.eclipse.ui.part.ViewPart;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * @author Jeff C. Phillips
+ * @author Robert A. Fisher
+ */
+public class BranchView extends ViewPart implements IActionable {
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.branch.BranchView";
+ BranchListComposite branchListComposite;
+ private static final IParameter[] BRANCH_PARAMETER_DEF = new IParameter[] {new BranchIdParameter()};
+ private static final String FAVORITE_KEY = "favorites_first";
+ private static final String SHOW_TRANSACTIONS = "show_transactions";
+ private static final String SHOW_MERGE_BRANCHES = "show_merge_branches";
+ private static final String FLAT_KEY = "flat";
+ static final String BRANCH_ID = "branchId";
+ private final IPreferencesService preferencesService;
+ private IPreferenceChangeListener preferenceChangeListener = null;
+ private boolean disposed;
+ private Action hideTransactions;
+ private Action hideMergeBranches;
+ private IHandlerService handlerService;
+ private TreeViewer branchTable;
+ private Text myTextBeingRenamed;
+
+ public BranchView() {
+ super();
+
+ this.preferencesService = Platform.getPreferencesService();
+
+ IEclipsePreferences instanceNode =
+ (IEclipsePreferences) preferencesService.getRootNode().node(InstanceScope.SCOPE);
+
+ try {
+ if (instanceNode.nodeExists(VIEW_ID)) {
+ ((IEclipsePreferences) instanceNode.node(VIEW_ID)).addPreferenceChangeListener(getSingleton());
+ }
+ } catch (BackingStoreException ex) {
+ OSEELog.logException(BranchView.class, ex, true);
+ }
+
+ instanceNode.addNodeChangeListener(new IEclipsePreferences.INodeChangeListener() {
+
+ public void added(NodeChangeEvent event) {
+ if (event.getChild().name().equals(VIEW_ID)) {
+ ((IEclipsePreferences) event.getChild()).addPreferenceChangeListener(getSingleton());
+ }
+ }
+
+ public void removed(NodeChangeEvent event) {
+ if (event.getChild().name().equals(VIEW_ID)) {
+ ((IEclipsePreferences) event.getChild()).removePreferenceChangeListener(getSingleton());
+ }
+ }
+ });
+ }
+
+ public void forcePopulateView() throws OseeCoreException {
+ branchListComposite.forcePopulateView();
+ }
+
+ public void presentAsHierarchy() {
+ getViewPreference().putBoolean(FLAT_KEY, false);
+ }
+
+ public void presentAsFlat() {
+ getViewPreference().putBoolean(FLAT_KEY, true);
+ }
+
+ private static class BranchIdParameter implements IParameter {
+ public String getId() {
+ return BRANCH_ID;
+ }
+
+ public String getName() {
+ return "Branch Id";
+ }
+
+ public IParameterValues getValues() throws ParameterValuesException {
+ throw new ParameterValuesException("Branch View has no parameters", null);
+ }
+
+ public boolean isOptional() {
+ return false;
+ }
+ }
+
+ private void setHelpContexts() {
+ SkynetGuiPlugin.getInstance().setHelp(branchListComposite.getBranchTable().getControl(), "branch_manager_table");
+ SkynetGuiPlugin.getInstance().setHelp(branchListComposite.getFilterText(), "branch_manager_filtering");
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ protected void createActions() {
+
+ Action refreshAction = new Action("Refresh") {
+
+ @Override
+ public void run() {
+ try {
+ branchListComposite.forcePopulateView();
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ };
+ refreshAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("refresh.gif"));
+ refreshAction.setToolTipText("Refresh");
+
+ OseeAts.addBugToViewToolbar(this, this, SkynetGuiPlugin.getInstance(), VIEW_ID, "Branch Manager");
+
+ IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
+ toolbarManager.add(refreshAction);
+ }
+
+ private synchronized IPreferenceChangeListener getSingleton() {
+ if (preferenceChangeListener == null) {
+ preferenceChangeListener = new IPreferenceChangeListener() {
+
+ public void preferenceChange(PreferenceChangeEvent event) {
+ if (disposed) {
+ ((IEclipsePreferences) event.getNode()).removePreferenceChangeListener(this);
+ } else {
+ String propertyName = event.getKey();
+
+ if (propertyName.equals(FLAT_KEY)) {
+ setPresentation(getViewPreference().getBoolean(FLAT_KEY, true));
+ }
+ if (propertyName.equals(SHOW_TRANSACTIONS)) {
+ setShowTransactions(getViewPreference().getBoolean(SHOW_TRANSACTIONS, true));
+ }
+ if (propertyName.equals(SHOW_MERGE_BRANCHES)) {
+ setShowMergeBranches(getViewPreference().getBoolean(SHOW_MERGE_BRANCHES, true));
+ }
+ if (propertyName.equals(FAVORITE_KEY)) {
+ branchListComposite.setFavoritesFirst(getViewPreference().getBoolean(FAVORITE_KEY, false));
+ }
+ }
+ }
+ };
+ }
+
+ return preferenceChangeListener;
+ }
+
+ private void setPresentation(boolean flat) {
+ branchListComposite.setPresentation(flat);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ if (branchListComposite != null) branchListComposite.setFocus();
+ }
+
+ private void setShowMergeBranches(boolean showMergeBranches) {
+ branchListComposite.setShowMergeBranches(showMergeBranches);
+ if (branchTable != null && branchTable.getContentProvider() != null) {
+ hideMergeBranches.setChecked(showMergeBranches);
+ }
+ }
+
+ private void setShowTransactions(boolean showTransactions) {
+ branchListComposite.setShowTransactions(showTransactions);
+ if (branchTable != null && branchTable.getContentProvider() != null) {
+ hideTransactions.setChecked(showTransactions);
+ }
+ }
+
+ public static BranchView getBranchView() {
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ try {
+ return (BranchView) page.showView(VIEW_ID);
+ } catch (PartInitException e1) {
+ MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Launch Error",
+ "Couldn't Launch Branch View " + e1.getMessage());
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+ */
+ @Override
+ public void dispose() {
+ disposed = true;
+ if (branchListComposite != null) {
+ branchListComposite.disposeComposite();
+ }
+
+ try {
+ getViewPreference().flush();
+ } catch (BackingStoreException ex) {
+ OSEELog.logException(BranchView.class, ex, true);
+ }
+
+ super.dispose();
+ }
+
+ /**
+ * Reveal a branch in the viewer and select it.
+ */
+ public static void revealBranch(Branch branch) {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ BranchView branchView;
+ try {
+ branchView = (BranchView) page.showView(VIEW_ID);
+ branchView.reveal(branch);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ public void reveal(Branch branch) {
+ branchListComposite.reveal(branch);
+ }
+
+ @Override
+ public void createPartControl(Composite parent) {
+ try {
+ if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) return;
+
+ PlatformUI.getWorkbench().getService(IHandlerService.class);
+ handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
+
+ parent.setLayout(new GridLayout());
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ branchListComposite = new BranchListComposite(parent);
+ branchTable = branchListComposite.getBranchTable();
+
+ MenuManager menuManager = new MenuManager("#PopupMenu");
+ menuManager.setRemoveAllWhenShown(true);
+ menuManager.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ fillPopupMenu(manager);
+ }
+ });
+
+ branchTable.getTree().setMenu(menuManager.createContextMenu(branchTable.getTree()));
+
+ menuManager.add(new Separator());
+ createOpenArtifactsMenuItem(menuManager);
+ menuManager.add(new Separator());
+ createSetDefaultCommand(menuManager);
+ createBranchCommand(menuManager);
+ createCommitCommand(menuManager);
+ createCommitIntoCommand(menuManager);
+ menuManager.add(new Separator());
+ createMarkAsFavoriteCommand(menuManager);
+ menuManager.add(new Separator());
+ createDeleteBranchCommand(menuManager);
+ createDeleteTransactionCommand(menuManager);
+ createMoveTransactionCommand(menuManager);
+ createRenameBranchCommand(menuManager);
+ createSetBranchShortNameCommand(menuManager);
+ createSetAssociatedArtifactCommand(menuManager);
+ createOpenAssociatedArtifactCommand(menuManager);
+ menuManager.add(new Separator());
+ createViewTableMenuItem(menuManager);
+ menuManager.add(new Separator());
+ createAccessControlCommand(menuManager);
+ createMergeViewCommand(menuManager);
+ createChangeViewCommand(menuManager);
+ // The additions group is a standard group
+ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+
+ getSite().registerContextMenu("org.eclipse.osee.framework.ui.skynet.branch.BranchView", menuManager,
+ branchTable);
+
+ branchTable.addSelectionChangedListener(new SelectionCountChangeListener(getViewSite()));
+
+ getSite().setSelectionProvider(branchTable);
+
+ IMenuManager toolbarManager = getViewSite().getActionBars().getMenuManager();
+ toolbarManager.add(createFavoritesFirstAction());
+ toolbarManager.add(createShowTransactionsAction());
+ if (AccessControlManager.isOseeAdmin()) {
+ toolbarManager.add(createShowMergeBranchesAction());
+ }
+ toolbarManager.add(new ParentBranchAction(this));
+ loadPreferences();
+
+ createActions();
+
+ setHelpContexts();
+
+ OseeContributionItem.addTo(this, true);
+
+ branchListComposite.getFilterText().addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ if (branchListComposite.isFiltering())
+ setContentDescription("Filtered for :\"" + branchListComposite.getFilterText().getText() + "\"");
+ else
+ setContentDescription("");
+ }
+ });
+ branchListComposite.setFavoritesFirst(getViewPreference().getBoolean(FAVORITE_KEY, false));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ private void fillPopupMenu(IMenuManager Manager) {
+ MenuManager menuManager = (MenuManager) Manager;
+ menuManager.add(new Separator());
+ addOpenArtifactsMenuItem(menuManager);
+ menuManager.add(new Separator());
+ addSetDefaultCommand(menuManager);
+ addChangeViewCommand(menuManager);
+ addMergeViewCommand(menuManager);
+ addBranchCommand(menuManager);
+ addSelectivelyBranchCommand(menuManager);
+ addCommitCommand(menuManager);
+ addCommitIntoCommand(menuManager);
+ menuManager.add(new Separator());
+ addMarkAsFavoriteCommand(menuManager);
+ menuManager.add(new Separator());
+ addDeleteBranchCommand(menuManager);
+ addDeleteTransactionCommand(menuManager);
+ addMoveTransactionCommand(menuManager);
+ addRenameBranchCommand(menuManager);
+ addSetBranchShortNameCommand(menuManager);
+ addSetAssociatedArtifactCommand(menuManager);
+ addOpenAssociatedArtifactCommand(menuManager);
+ menuManager.add(new Separator());
+ addViewTableMenuItem(menuManager);
+ menuManager.add(new Separator());
+ addAccessControlCommand(menuManager);
+ // The additions group is a standard group
+ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+
+ private void addBranchSelectionMenu(MenuManager menuManager) {
+ try {
+ for (Branch branch : BranchManager.getNormalBranches()) {
+
+ Map<String, String> parameters = new HashMap<String, String>();
+ parameters.put(BRANCH_ID, Integer.toString(branch.getBranchId()));
+
+ CommandContributionItem branchCommand =
+ Commands.getLocalCommandContribution(getSite(), menuManager.getId(), branch.getBranchName(),
+ BRANCH_PARAMETER_DEF, parameters, null, null, null, null);
+ menuManager.add(branchCommand);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ private void addMergeViewCommand(MenuManager menuManager) {
+ MenuManager subMenuManager = new MenuManager("Merge Manager", "mergeViewCommand");
+ menuManager.add(subMenuManager);
+ addMergeSelectionMenu(subMenuManager);
+ }
+
+ private void createMergeViewCommand(MenuManager menuManager) {
+ MenuManager subMenuManager = new MenuManager("Merge Manager", "mergeViewCommand");
+ menuManager.add(subMenuManager);
+ createMergeSelectionMenu(subMenuManager, new MergeSelectionHandler(menuManager));
+ }
+
+ private void addMergeSelectionMenu(MenuManager menuManager) {
+ if (branchTable != null) {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ if (selection != null && selection.getFirstElement() != null) {
+ Branch selectedBranch = (Branch) ((JobbedNode) selection.getFirstElement()).getBackingData();
+ if (selectedBranch != null) {
+ try {
+ Collection<Integer> destBranches =
+ ConflictManagerInternal.getDestinationBranchesMerged(selectedBranch.getBranchId());
+ try {
+ if (selectedBranch.getParentBranch() != null && !destBranches.contains(selectedBranch.getParentBranch().getBranchId())) {
+ destBranches.add(selectedBranch.getParentBranch().getBranchId());
+ }
+ } catch (BranchDoesNotExist ex) {
+ destBranches.add(0);
+ }
+ for (Integer branch : destBranches) {
+
+ Map<String, String> parameters = new HashMap<String, String>();
+ parameters.put(BRANCH_ID, Integer.toString(branch));
+
+ CommandContributionItem mergeCommand =
+ Commands.getLocalCommandContribution(
+ getSite(),
+ menuManager.getId(),
+ branch == 0 ? "Can't Merge a Root Branch" : BranchManager.getBranch(branch).getBranchName(),
+ BRANCH_PARAMETER_DEF, parameters, null, null, null, null);
+ menuManager.add(mergeCommand);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ }
+ }
+
+ private void createMergeSelectionMenu(MenuManager menuManager, IHandler selectionHandler) {
+ addMergeSelectionMenu(menuManager);
+ handlerService.activateHandler(getSite().getId() + "." + menuManager.getId(), selectionHandler);
+ }
+
+ private class MergeSelectionHandler extends AbstractSelectionEnabledHandler {
+
+ public MergeSelectionHandler(MenuManager menuManager) {
+ super(menuManager);
+ }
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ Branch selectedBranch = (Branch) ((JobbedNode) selection.getFirstElement()).getBackingData();
+ try {
+ Branch toBranch = BranchManager.getBranch(Integer.parseInt(event.getParameter(BRANCH_ID)));
+ if (selectedBranch != null && toBranch != null) {
+ MergeView.openView(selectedBranch, toBranch,
+ TransactionIdManager.getStartEndPoint(selectedBranch).getKey());
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ if (!selection.isEmpty()) {
+ Object obj = ((JobbedNode) selection.getFirstElement()).getBackingData();
+ if (obj instanceof Branch) {
+ Branch selectedBranch = (Branch) obj;
+ if (selectedBranch != null && !ConflictManagerInternal.getDestinationBranchesMerged(
+ selectedBranch.getBranchId()).isEmpty()) {
+ return true;
+ }
+ return (selectedBranch != null && (!(selectedBranch.getAssociatedArtifact() instanceof IATSArtifact)) && selectedBranch.hasParentBranch());
+ }
+ return false;
+ }
+ return false;
+ }
+
+ };
+
+ private String addChangeViewCommand(MenuManager menuManager) {
+ CommandContributionItem changeViewCommand =
+ Commands.getLocalCommandContribution(getSite(), "change2ViewCommand", "Change Report", null, null, null,
+ "M", null, null);
+ menuManager.add(changeViewCommand);
+ return changeViewCommand.getId();
+ }
+
+ private void createChangeViewCommand(MenuManager menuManager) {
+
+ handlerService.activateHandler(addChangeViewCommand(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ Branch selectedBranch = (Branch) ((JobbedNode) selection.getFirstElement()).getBackingData();
+ try {
+ ChangeView.open(selectedBranch);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ return true;
+ }
+ });
+ }
+
+ private Preferences getViewPreference() {
+ return preferencesService.getRootNode().node(InstanceScope.SCOPE).node(VIEW_ID);
+ }
+
+ private void loadPreferences() {
+ setPresentation(getViewPreference().getBoolean(FLAT_KEY, true));
+ setShowTransactions(getViewPreference().getBoolean(SHOW_TRANSACTIONS, true));
+ }
+
+ private String addOpenArtifactsMenuItem(MenuManager menuManager) {
+ CommandContributionItem openArtifactsCommand =
+ Commands.getLocalCommandContribution(getSite(), "openArtifactsCommand", "Open Artifact(s)...", null, null,
+ null, "O", null, null);
+ menuManager.add(openArtifactsCommand);
+ return openArtifactsCommand.getId();
+ }
+
+ private void createOpenArtifactsMenuItem(MenuManager menuManager) {
+
+ branchTable.addDoubleClickListener(new IDoubleClickListener() {
+
+ public void doubleClick(DoubleClickEvent event) {
+ openArtifactHelper();
+ }
+ });
+
+ handlerService.activateHandler(addOpenArtifactsMenuItem(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ openArtifactHelper();
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ boolean toReturn = false;
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ if (!selection.isEmpty()) {
+ Iterator<?> iterator = selection.iterator();
+ while (iterator.hasNext()) {
+ Object backingData = ((JobbedNode) iterator.next()).getBackingData();
+ if (backingData instanceof ArtifactChange) {
+ toReturn = true;
+ break;
+ }
+ }
+ }
+ return toReturn;
+ }
+ });
+ }
+
+ private void openArtifactHelper() {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ Iterator<?> iterator = selection.iterator();
+ while (iterator.hasNext()) {
+ Object backingData = ((JobbedNode) iterator.next()).getBackingData();
+ if (backingData instanceof ArtifactChange) {
+ try {
+ ArtifactEditor.editArtifact(((ArtifactChange) backingData).getArtifact());
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+ }
+
+ private String addAccessControlCommand(MenuManager menuManager) {
+ CommandContributionItem accessControlCommand =
+ Commands.getLocalCommandContribution(getSite(), "accessControlCommand", "Access Control...", null, null,
+ null, "A", null, null);
+ menuManager.add(accessControlCommand);
+ return accessControlCommand.getId();
+ }
+
+ private void createAccessControlCommand(MenuManager menuManager) {
+
+ handlerService.activateHandler(addAccessControlCommand(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ Branch selectedBranch = (Branch) ((JobbedNode) selection.getFirstElement()).getBackingData();
+ try {
+ if (selectedBranch != null) {
+ PolicyDialog pd = new PolicyDialog(Display.getCurrent().getActiveShell(), selectedBranch);
+ pd.open();
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ if (!selection.isEmpty()) {
+ return SkynetSelections.oneBranchSelected(selection) && (AccessControlManager.checkObjectPermission(
+ SkynetSelections.boilDownObject(selection.getFirstElement()), PermissionEnum.FULLACCESS) || AccessControlManager.isOseeAdmin());
+ }
+ return false;
+ }
+ });
+ }
+
+ private String addDeleteTransactionCommand(MenuManager menuManager) {
+ CommandContributionItem deleteTransactionCommand =
+ Commands.getLocalCommandContribution(getSite(), "deleteTransactionCommand", "Delete Transaction", null,
+ null, null, "D", null, null);
+ menuManager.add(deleteTransactionCommand);
+ return deleteTransactionCommand.getId();
+ }
+
+ private void createDeleteTransactionCommand(MenuManager menuManager) {
+
+ handlerService.activateHandler(addDeleteTransactionCommand(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ TransactionData selectedTransaction =
+ (TransactionData) ((JobbedNode) selection.getFirstElement()).getBackingData();
+
+ if (MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), "Delete Transaction",
+ "Are you sure you want to delete the transaction: " + selectedTransaction.getTransactionNumber())) {
+ BranchManager.deleteTransactions(new JobChangeAdapter() {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.jobs.JobChangeAdapter#done(org.eclipse.core.runtime.jobs.IJobChangeEvent)
+ */
+ @Override
+ public void done(IJobChangeEvent event) {
+ if (event.getResult().getSeverity() == IStatus.OK) {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ try {
+ branchListComposite.forcePopulateView();
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ });
+ }
+ }
+
+ }, selectedTransaction.getTransactionNumber());
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ return SkynetSelections.oneTransactionSelected(selection) && AccessControlManager.isOseeAdmin();
+ }
+ });
+ }
+
+ @Override
+ public void saveState(IMemento memento) {
+ // Ask to save the user in case any changes to favorite branches have been made
+ if (SkynetGuiPlugin.areOSEEServicesAvailable().isTrue()) {
+ try {
+ UserManager.getUser().persistAttributes();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ private String addSetDefaultCommand(MenuManager menuManager) {
+ CommandContributionItem setBranchDefaultCommand =
+ Commands.getLocalCommandContribution(getSite(), "setBranchDefaultCommand", "Set Default Branch", null,
+ null, null, "S", null, "branch_manager_default_branch_menu");
+ menuManager.add(setBranchDefaultCommand);
+ return setBranchDefaultCommand.getId();
+ }
+
+ private void createSetDefaultCommand(MenuManager menuManager) {
+
+ handlerService.activateHandler(addSetDefaultCommand(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ setDefaultBranch((Branch) ((JobbedNode) selection.getFirstElement()).getBackingData());
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ return SkynetSelections.oneBranchSelected(selection) && SkynetSelections.boilDownObject(selection.getFirstElement()) != BranchManager.getDefaultBranch();
+ }
+ });
+
+ }
+
+ public void setDefaultBranch(Branch newDefaultBranch) {
+ try {
+ branchListComposite.setDefaultBranch(newDefaultBranch);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ private void addMarkAsFavoriteCommand(MenuManager menuManager) {
+ menuManager.add(new CompoundContributionItem() {
+ @Override
+ protected IContributionItem[] getContributionItems() {
+ String markState = "Mark";
+
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ if (SkynetSelections.oneBranchSelected(selection)) {
+ try {
+ if ((UserManager.getUser().isFavoriteBranch((Branch) SkynetSelections.boilDownObject(selection.getFirstElement())))) {
+ markState = "Unmark";
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ return new IContributionItem[] {Commands.getLocalCommandContribution(getSite(), "markAsFavoriteCommand",
+ markState + " as Favorite", null, null, null, "T", null, "branch_manager_favorite_branch_menu")};
+ }
+ });
+ }
+
+ private void createMarkAsFavoriteCommand(MenuManager menuManager) {
+ addMarkAsFavoriteCommand(menuManager);
+ handlerService.activateHandler(getSite().getId() + ".markAsFavoriteCommand",
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ Branch branch = (Branch) ((JobbedNode) selection.getFirstElement()).getBackingData();
+ try {
+ UserManager.getUser().toggleFavoriteBranch(branch);
+
+ if (branchListComposite.isFavoritesFirst()) {
+ branchTable.refresh();
+ } else {
+ branchTable.update(selection.getFirstElement(), null);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ // Saving of this change is done in saveState()
+
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+
+ boolean oneBranchSelected = SkynetSelections.oneBranchSelected(selection);
+
+ if (oneBranchSelected && UserManager.getUser().isFavoriteBranch(
+ (Branch) SkynetSelections.boilDownObject(selection.getFirstElement()))) {
+ // make the text correct somehow somewhere so it says Mark/Unmark in context
+ }
+
+ return oneBranchSelected;
+ }
+ });
+ }
+
+ public static CheckBoxDialog createCommitDialog() {
+ return new CheckBoxDialog(
+ Display.getCurrent().getActiveShell(),
+ "Confirm Commit",
+ null,
+ "Committing a branch that has conflicts reported in the Change Report can result in the overwriting of data" + " on the branch being committed to. All conflicts should be addressed accordingly to prevent data loss.",
+ "I accept responsibility for the results of this action", MessageDialog.QUESTION, 0);
+ }
+
+ private void addCommitCommand(MenuManager menuManager) {
+ menuManager.add(new CompoundContributionItem() {
+ @Override
+ protected IContributionItem[] getContributionItems() {
+ String parentBranchName = "";
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+
+ try {
+ if (SkynetSelections.oneDescendantBranchSelected(selection)) {
+ parentBranchName =
+ ((Branch) SkynetSelections.boilDownObject(selection.getFirstElement())).getParentBranch().getBranchName();
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ IContributionItem[] myIContributionItems =
+ new IContributionItem[] {Commands.getLocalCommandContribution(getSite(), "commitIntoParentCommand",
+ "Commit Into Parent Branch: " + parentBranchName, null, null, null, null, null, null)};
+
+ return myIContributionItems;
+ }
+ });
+ }
+
+ private void createCommitCommand(MenuManager menuManager) {
+ addCommitCommand(menuManager);
+ handlerService.activateHandler(getSite().getId() + ".commitIntoParentCommand", new CommitHandler(menuManager,
+ true, true, branchTable));
+ }
+
+ private String addBranchCommand(MenuManager menuManager) {
+ CommandContributionItem createBranchCommand =
+ Commands.getLocalCommandContribution(getSite(), "createBranchCommand", "Branch", null, null, null, "B",
+ null, null);
+ menuManager.add(createBranchCommand);
+ return createBranchCommand.getId();
+ }
+
+ private void createBranchCommand(MenuManager menuManager) {
+ handlerService.activateHandler(addBranchCommand(menuManager), new BranchCreationHandler(menuManager, branchTable));
+ }
+
+ private String addSelectivelyBranchCommand(MenuManager menuManager) {
+ CommandContributionItem createSelectiveBranchCommand =
+ Commands.getLocalCommandContribution(getSite(), "createSelectiveBranchCommand", "Selectively Branch", null,
+ null, null, "S", null, null);
+ menuManager.add(createSelectiveBranchCommand);
+ return createSelectiveBranchCommand.getId();
+ }
+
+ private String addViewTableMenuItem(MenuManager menuManager) {
+ CommandContributionItem viewTableReportCommand =
+ Commands.getLocalCommandContribution(getSite(), "viewTableReportCommand", "View Branch Table Report", null,
+ null, null, "V", null, null);
+ menuManager.add(viewTableReportCommand);
+ return viewTableReportCommand.getId();
+ }
+
+ private void createViewTableMenuItem(MenuManager menuManager) {
+
+ handlerService.activateHandler(addViewTableMenuItem(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ (new TreeViewerReport(branchTable)).open();
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+
+ return !selection.isEmpty();
+ }
+ });
+ }
+
+ private Action createFavoritesFirstAction() {
+ Action favoritesFirst = new Action("Show Favorites First", Action.AS_CHECK_BOX) {
+ @Override
+ public void run() {
+ getViewPreference().putBoolean(FAVORITE_KEY, isChecked());
+ }
+ };
+ favoritesFirst.setChecked(branchListComposite.isFavoritesFirst());
+ favoritesFirst.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("filter.gif"));
+
+ return favoritesFirst;
+ }
+
+ private Action createShowTransactionsAction() {
+ hideTransactions = new Action("Show Transactions", Action.AS_CHECK_BOX) {
+ @Override
+ public void run() {
+ getViewPreference().putBoolean(SHOW_TRANSACTIONS, isChecked());
+ }
+ };
+ return hideTransactions;
+ }
+
+ private Action createShowMergeBranchesAction() {
+ hideMergeBranches = new Action("Show Merge Branches", Action.AS_CHECK_BOX) {
+ @Override
+ public void run() {
+ getViewPreference().putBoolean(SHOW_MERGE_BRANCHES, isChecked());
+ }
+ };
+ return hideMergeBranches;
+ }
+
+ private void createBranchSelectionMenu(MenuManager menuManager, IHandler selectionHandler) {
+ addBranchSelectionMenu(menuManager);
+ handlerService.activateHandler(getSite().getId() + "." + menuManager.getId(), selectionHandler);
+ }
+
+ private class BranchSelectionHandler extends AbstractSelectionEnabledHandler {
+
+ public BranchSelectionHandler(MenuManager menuManager) {
+ super(menuManager);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ try {
+ Branch toBranch = BranchManager.getBranch(Integer.parseInt(event.getParameter(BRANCH_ID)));
+
+ if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Move Transactions",
+ "All selected transactions will be moved to branch " + toBranch.getBranchName())) {
+ Iterator<JobbedNode> iter = selection.iterator();
+ while (iter.hasNext()) {
+ TransactionData transactionData = (TransactionData) iter.next().getBackingData();
+ BranchManager.moveTransaction(transactionData.getTransactionId(), toBranch);
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ return AccessControlManager.isOseeAdmin() && SkynetSelections.transactionsSelected(selection);
+ }
+ };
+
+ private void addMoveTransactionCommand(MenuManager menuManager) {
+ MenuManager subMenuManager = new MenuManager("Move Transaction To", "moveTransaction");
+ menuManager.add(subMenuManager);
+ addBranchSelectionMenu(subMenuManager);
+ }
+
+ private void createMoveTransactionCommand(MenuManager menuManager) {
+ MenuManager subMenuManager = new MenuManager("Move Transaction To", "moveTransaction");
+ menuManager.add(subMenuManager);
+ BranchSelectionHandler mySelectionHandler = new BranchSelectionHandler(menuManager);
+ createBranchSelectionMenu(subMenuManager, mySelectionHandler);
+ }
+
+ private void addCommitIntoCommand(MenuManager menuManager) {
+ MenuManager subMenuManager = new MenuManager("Commit Into", "commitTransaction");
+ menuManager.add(subMenuManager);
+ addBranchSelectionMenu(subMenuManager);
+ }
+
+ private void createCommitIntoCommand(MenuManager menuManager) {
+ MenuManager subMenuManager = new MenuManager("Commit Into", "commitTransaction");
+ menuManager.add(subMenuManager);
+ createBranchSelectionMenu(subMenuManager, new CommitHandler(menuManager, false, false, branchTable));
+ }
+
+ private String addDeleteBranchCommand(MenuManager menuManager) {
+ CommandContributionItem deleteBranchCommand =
+ Commands.getLocalCommandContribution(getSite(), "deleteBranchCommand", "Delete Branch", null, null, null,
+ null, null, null);
+ menuManager.add(deleteBranchCommand);
+ return deleteBranchCommand.getId();
+ }
+
+ private void createDeleteBranchCommand(MenuManager menuManager) {
+ handlerService.activateHandler(addDeleteBranchCommand(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ Branch selectedBranch = (Branch) ((JobbedNode) selection.getFirstElement()).getBackingData();
+
+ MessageDialog dialog =
+ new MessageDialog(Display.getCurrent().getActiveShell(), "Delete Branch", null,
+ "Are you sure you want to delete the branch: " + selectedBranch.getBranchName(),
+ MessageDialog.QUESTION, new String[] {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL}, 1);
+
+ if (dialog.open() == 0) {
+ BranchManager.deleteBranch(selectedBranch);
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ return AccessControlManager.isOseeAdmin() && SkynetSelections.oneBranchSelected(selection) && SkynetSelections.boilDownObject(selection.getFirstElement()) != BranchManager.getDefaultBranch();
+ }
+ });
+ }
+
+ private String addRenameBranchCommand(MenuManager menuManager) {
+ CommandContributionItem renameBranchCommand =
+ Commands.getLocalCommandContribution(getSite(), "renameBranchCommand", "Rename Branch", null, null, null,
+ null, null, null);
+ menuManager.add(renameBranchCommand);
+ return renameBranchCommand.getId();
+ }
+
+ private void createRenameBranchCommand(MenuManager menuManager) {
+
+ handlerService.activateHandler(addRenameBranchCommand(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ final Branch selectedBranch = (Branch) ((JobbedNode) selection.getFirstElement()).getBackingData();
+ TreeItem[] myTreeItemsSelected = branchTable.getTree().getSelection();
+ if (myTreeItemsSelected.length != 1) {
+ return null;
+ }
+ final TreeItem myTreeItem = myTreeItemsSelected[0];
+ Control oldEditor = branchListComposite.getMyTreeEditor().getEditor();
+ if (oldEditor != null) {
+ oldEditor.dispose();
+ }
+ myTextBeingRenamed = new Text(branchTable.getTree(), SWT.BORDER);
+ myTextBeingRenamed.setText(selectedBranch.getBranchName());
+ myTextBeingRenamed.addFocusListener(new FocusAdapter() {
+ @Override
+ public void focusLost(FocusEvent e) {
+ updateText(myTextBeingRenamed.getText(), selectedBranch);
+ myTextBeingRenamed.dispose();
+ }
+
+ @Override
+ public void focusGained(FocusEvent e) {
+ }
+ });
+ myTextBeingRenamed.addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyReleased(KeyEvent e) {
+ if ((e.character == SWT.CR)) {
+ updateText(myTextBeingRenamed.getText(), selectedBranch);
+ myTextBeingRenamed.dispose();
+ } else if (e.keyCode == SWT.ESC) {
+ myTextBeingRenamed.dispose();
+ }
+ }
+ });
+ myTextBeingRenamed.selectAll();
+ myTextBeingRenamed.setFocus();
+ branchListComposite.getMyTreeEditor().setEditor(myTextBeingRenamed, myTreeItem);
+ return null;
+ }
+
+ private void updateText(String newLabel, Branch selectedBranch) {
+ selectedBranch.setBranchName(newLabel);
+ try {
+ selectedBranch.rename(newLabel);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ branchTable.refresh();
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ return AccessControlManager.isOseeAdmin() && SkynetSelections.oneBranchSelected(selection) && SkynetSelections.boilDownObject(selection.getFirstElement()) != BranchManager.getDefaultBranch();
+ }
+ });
+ }
+
+ private String addSetBranchShortNameCommand(MenuManager menuManager) {
+ CommandContributionItem setBranchShortNameCommand =
+ Commands.getLocalCommandContribution(getSite(), "setBranchShortNameCommand", "Set Branch Short Name", null,
+ null, null, null, null, null);
+ menuManager.add(setBranchShortNameCommand);
+ return setBranchShortNameCommand.getId();
+ }
+
+ private void createSetBranchShortNameCommand(MenuManager menuManager) {
+
+ handlerService.activateHandler(addSetBranchShortNameCommand(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ Branch selectedBranch = (Branch) ((JobbedNode) selection.getFirstElement()).getBackingData();
+
+ IInputValidator inputValidator = new IInputValidator() {
+ public String isValid(String newText) {
+ if (newText == null || newText.length() == 0) {
+ return "The new branch name must not be blank"; // return error message
+ }
+ if (newText.length() > SkynetDatabase.BRANCH_SHORT_NAME_SIZE) {
+ return "The new branch name must not be longer than " + SkynetDatabase.BRANCH_SHORT_NAME_SIZE + " characters"; // return
+ // error
+ // message
+ }
+ return null; // to indicate the input is valid
+ }
+ };
+ InputDialog dialog =
+ new InputDialog(Display.getCurrent().getActiveShell(), "Rename Branch Short Name",
+ "Enter new branch short name",
+ selectedBranch.getBranchShortName() != null ? selectedBranch.getBranchShortName() : "",
+ inputValidator);
+
+ if (dialog.open() != Window.CANCEL) {
+ try {
+ selectedBranch.setBranchShortName(dialog.getValue(), true);
+ } catch (Exception ex) {
+ MessageDialog.openError(Display.getCurrent().getActiveShell(), "Error Renaming Branch short name",
+ ex.getMessage());
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ branchListComposite.refresh();
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ return SkynetSelections.oneBranchSelected(selection);
+ }
+ });
+ }
+
+ private String addSetAssociatedArtifactCommand(MenuManager menuManager) {
+ CommandContributionItem setBranchShortNameCommand =
+ Commands.getLocalCommandContribution(getSite(), "setAssociatedArtifactCommand",
+ "Set Branch Associated Artifact", null, null, null, null, null, null);
+ menuManager.add(setBranchShortNameCommand);
+ return setBranchShortNameCommand.getId();
+ }
+
+ private void createSetAssociatedArtifactCommand(MenuManager menuManager) {
+
+ handlerService.activateHandler(addSetAssociatedArtifactCommand(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ Branch selectedBranch = (Branch) ((JobbedNode) selection.getFirstElement()).getBackingData();
+
+ try {
+ EntryDialog ed =
+ new EntryDialog(
+ "Set Associated Artifact",
+ "Set Associated Artifact for Branch\n\n\"" + selectedBranch.getBranchName() + "\"" + (selectedBranch.getAssociatedArtifact() != null ? "\n\nCurrently: " + selectedBranch.getAssociatedArtifact() : ""));
+ if (selectedBranch.getAssociatedArtifact() != null) ed.setEntry(String.valueOf(selectedBranch.getAssociatedArtifactId()));
+ if (ed.open() == 0) {
+ String artId = ed.getEntry();
+ Artifact associatedArtifact =
+ ArtifactQuery.getArtifactFromId(Integer.parseInt(artId), BranchManager.getCommonBranch());
+ if (MessageDialog.openConfirm(
+ Display.getCurrent().getActiveShell(),
+ "Set Associated Artifact",
+ "Set Associated Artifact for Branch\n\n\"" + selectedBranch.getBranchName() + "\"\nto\nArtifact: " + associatedArtifact)) {
+ selectedBranch.setAssociatedArtifact(associatedArtifact);
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ if (!AccessControlManager.isOseeAdmin()) return false;
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ return SkynetSelections.oneBranchSelected(selection);
+ }
+ });
+ }
+
+ private String addOpenAssociatedArtifactCommand(MenuManager menuManager) {
+ CommandContributionItem setBranchShortNameCommand =
+ Commands.getLocalCommandContribution(getSite(), "openAssociatedArtifactCommand",
+ "Open Associated ATS Action", null, null, null, null, null, null);
+ menuManager.add(setBranchShortNameCommand);
+ return setBranchShortNameCommand.getId();
+ }
+
+ private void createOpenAssociatedArtifactCommand(MenuManager menuManager) {
+
+ handlerService.activateHandler(addOpenAssociatedArtifactCommand(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ Branch selectedBranch = (Branch) ((JobbedNode) selection.getFirstElement()).getBackingData();
+ try {
+ if (selectedBranch.getAssociatedArtifact() == null) {
+ AWorkbench.popup("Open Associated Artifact", "No artifact associated with branch " + selectedBranch);
+ return null;
+ }
+ if (AccessControlManager.checkObjectPermission(selectedBranch.getAssociatedArtifact(),
+ PermissionEnum.READ)) {
+ if (selectedBranch.getAssociatedArtifact() instanceof IATSArtifact)
+ OseeAts.openATSArtifact(selectedBranch.getAssociatedArtifact());
+ else
+ ArtifactEditor.editArtifact(selectedBranch.getAssociatedArtifact());
+ } else {
+ OSEELog.logSevere(
+ SkynetGuiPlugin.class,
+ "The user " + UserManager.getUser() + " does not have read access to " + selectedBranch.getAssociatedArtifact(),
+ true);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ return SkynetSelections.oneBranchSelected(selection);
+ }
+ });
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/CommitHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/CommitHandler.java
new file mode 100644
index 00000000000..865d34423ee
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/CommitHandler.java
@@ -0,0 +1,178 @@
+/**
+ *
+ */
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.MutableInteger;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.conflict.ConflictManagerExternal;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionId;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionIdManager;
+import org.eclipse.osee.framework.ui.plugin.util.AbstractSelectionEnabledHandler;
+import org.eclipse.osee.framework.ui.plugin.util.JobbedNode;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetSelections;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeView;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class CommitHandler extends AbstractSelectionEnabledHandler {
+ private final boolean useParentBranch;
+ private final boolean archiveSourceBranch;
+ private TreeViewer branchTable;
+
+ public CommitHandler(MenuManager menuManager, boolean useParentBranch, boolean archiveSourceBranch, TreeViewer branchTable) {
+ super(menuManager);
+ this.useParentBranch = useParentBranch;
+ this.archiveSourceBranch = archiveSourceBranch;
+ this.branchTable = branchTable;
+ }
+
+ public static boolean commitBranch(ConflictManagerExternal conflictManager, boolean archiveSourceBranch) throws OseeCoreException {
+ final Branch sourceBranch = conflictManager.getFromBranch();
+ final Branch destinationBranch = conflictManager.getToBranch();
+ final TransactionId transactionId = TransactionIdManager.getStartEndPoint(sourceBranch).getKey();
+ boolean branchCommitted = false;
+
+ int numRemainingConflicts = conflictManager.getRemainingConflicts().size();
+ if (numRemainingConflicts > 0) {
+ String message =
+ "Commit stopped due to unresolved conflicts\n\nPossible Resolutions:\n Cancel commit and resolve at a later time\n Launch the Merge Manager to resolve conflicts";
+ final String fMessage;
+ final String[] choices;
+ if (AccessControlManager.isOseeAdmin()) {
+ fMessage = message + "\n Force the commit";
+ choices = new String[] {"Cancel", "Launch Merge Manager", "Force Commit"};
+ } else {
+ fMessage = message;
+ choices = new String[] {"Cancel", "Launch Merge Manager"};
+ }
+
+ final MutableInteger dialogResult = new MutableInteger(0);
+ Display.getDefault().syncExec(new Runnable() {
+ public void run() {
+ MessageDialog dialog =
+ new MessageDialog(Display.getCurrent().getActiveShell(), "Unresolved Conflicts", null, fMessage,
+ MessageDialog.QUESTION, choices, 0);
+ dialogResult.setValue(dialog.open());
+ if (dialogResult.getValue() == 1) {
+ MergeView.openView(sourceBranch, destinationBranch, transactionId);
+ }
+ }
+ });
+
+ if (dialogResult.getValue() == 2) {
+ BranchManager.commitBranch(conflictManager, archiveSourceBranch, true);
+ branchCommitted = true;
+ }
+ } else {
+ final StringBuilder message =
+ new StringBuilder(
+ "Commit branch\n\n\"" + sourceBranch + "\"\n\n onto destination branch\n\n\"" + destinationBranch + "\"\n");
+ int numOriginalConfilcts = conflictManager.getOriginalConflicts().size();
+ if (numOriginalConfilcts > 0) {
+ message.append("\nwith " + numOriginalConfilcts + " conflicts resolved.\n");
+ } else {
+ message.append("\n(no conflicts found)\n");
+ }
+ message.append("\nCommit?");
+
+ final MutableInteger dialogResult = new MutableInteger(0);
+ Display.getDefault().syncExec(new Runnable() {
+ public void run() {
+ MessageDialog dialog =
+ new MessageDialog(Display.getCurrent().getActiveShell(), "Commit Branch", null,
+ message.toString(), MessageDialog.QUESTION, new String[] {"Ok", "Launch Merge Manager",
+ "Cancel"}, 0);
+ dialogResult.setValue(dialog.open());
+ if (dialogResult.getValue() == 1) {
+ MergeView.openView(sourceBranch, destinationBranch, transactionId);
+ }
+ }
+ });
+
+ if (dialogResult.getValue() == 0) {
+ BranchManager.commitBranch(conflictManager, archiveSourceBranch, false);
+ branchCommitted = true;
+ }
+ }
+ return branchCommitted;
+ }
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+
+ Branch sourceBranch = (Branch) ((JobbedNode) selection.getFirstElement()).getBackingData();
+ try {
+ Branch destinationBranch = null;
+ if (useParentBranch) {
+ destinationBranch = sourceBranch.getParentBranch();
+ } else {
+ destinationBranch = BranchManager.getBranch(Integer.parseInt(event.getParameter(BranchView.BRANCH_ID)));
+ }
+ Jobs.startJob(new CommitJob(sourceBranch, destinationBranch));
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) branchTable.getSelection();
+ boolean validBranchSelected = SkynetSelections.oneDescendantBranchSelected(selection) && useParentBranch;
+
+ if (validBranchSelected) {
+ validBranchSelected &=
+ !((Branch) SkynetSelections.boilDownObject(selection.getFirstElement())).isChangeManaged();
+ }
+ return (validBranchSelected) || (!useParentBranch && AccessControlManager.isOseeAdmin() && SkynetSelections.oneBranchSelected(selection));
+ }
+
+ private class CommitJob extends Job {
+ private Branch sourceBranch;
+ private Branch destinationBranch;
+
+ /**
+ * @param name
+ * @param destinationBranch
+ * @param sourceBranch
+ */
+ public CommitJob(Branch sourceBranch, Branch destinationBranch) {
+ super("Commit Branch");
+ this.destinationBranch = destinationBranch;
+ this.sourceBranch = sourceBranch;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ commitBranch(new ConflictManagerExternal(destinationBranch, sourceBranch), archiveSourceBranch);
+ } catch (OseeCoreException ex) {
+ return new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, ex.getLocalizedMessage(), ex);
+ }
+ return Status.OK_STATUS;
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/FlatPresentationHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/FlatPresentationHandler.java
new file mode 100644
index 00000000000..53bce7301df
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/FlatPresentationHandler.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class FlatPresentationHandler extends AbstractHandler {
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ((BranchView) HandlerUtil.getActivePartChecked(event)).presentAsFlat();
+ return null;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/HierarchicalPresentationHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/HierarchicalPresentationHandler.java
new file mode 100644
index 00000000000..0d805bd8871
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/HierarchicalPresentationHandler.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class HierarchicalPresentationHandler extends AbstractHandler {
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ((BranchView) HandlerUtil.getActivePartChecked(event)).presentAsHierarchy();
+ return null;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/ParentBranchAction.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/ParentBranchAction.java
new file mode 100644
index 00000000000..ac9c29a7d72
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/ParentBranchAction.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.swt.NonBlankValidator;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ParentBranchAction extends Action {
+ private static IInputValidator inputValidator = new NonBlankValidator("The Branch name can not be blank.");
+
+ /**
+ * @param text
+ * @param style
+ */
+ public ParentBranchAction(BranchView branchView) {
+ super("Create New &Parent Branch", AS_PUSH_BUTTON);
+ setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("branch.gif"));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ InputDialog dialog =
+ new InputDialog(Display.getCurrent().getActiveShell(), "Name Branch", "Enter branch name", "parent branch",
+ inputValidator);
+
+ if (dialog.open() == Window.CANCEL) {
+ return;
+ } else {
+ try {
+ createNewParentBranch(dialog.getValue(), dialog.getValue());
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+ }
+ }
+
+ public static Branch createNewParentBranch(String branchShortName, String branchName) throws OseeCoreException {
+
+ List<String> skynetTypeImport = new ArrayList<String>();
+ skynetTypeImport.add("org.eclipse.osee.framework.skynet.core.ProgramAndCommon");
+
+ // Create branch, import skynet types and initialize
+ Branch branch =
+ BranchManager.createRootBranch(branchShortName, branchName, null, skynetTypeImport, true);
+
+ if (PlatformUI.isWorkbenchRunning() && BranchView.getBranchView() != null) {
+ BranchView.getBranchView().forcePopulateView();
+ }
+ return branch;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/RootBranchWizard.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/RootBranchWizard.java
new file mode 100644
index 00000000000..3791ca5334e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/branch/RootBranchWizard.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.branch;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class RootBranchWizard extends Wizard implements INewWizard {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ @Override
+ public boolean performFinish() {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/AbstractSelectionChangedHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/AbstractSelectionChangedHandler.java
new file mode 100644
index 00000000000..f2b0f35c8ce
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/AbstractSelectionChangedHandler.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.HandlerEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.swt.events.MenuDetectEvent;
+import org.eclipse.swt.events.MenuDetectListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Paul K. Waldfogel
+ * @author Jeff C. Phillips
+ */
+public abstract class AbstractSelectionChangedHandler extends AbstractHandler {
+ private final HandlerEvent enabledChangedEvent = new HandlerEvent(this, true, false);
+ private ViewerMenuDetectListener viewerMenuDetectListener;
+
+ public AbstractSelectionChangedHandler() {
+ addlistener();
+ }
+ private class ViewerMenuDetectListener implements MenuDetectListener {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.MenuDetectListener#menuDetected(org.eclipse.swt.events.MenuDetectEvent)
+ */
+ public void menuDetected(MenuDetectEvent e) {
+ fireHandlerChanged(enabledChangedEvent);
+ }
+ }
+
+ private void addlistener() {
+ if (!PlatformUI.getWorkbench().isClosing()) {
+ viewerMenuDetectListener = new ViewerMenuDetectListener();
+ IWorkbenchPart workbenchPart = AWorkbench.getActivePage()
+ .getActivePart();
+ Object object = workbenchPart.getSite().getSelectionProvider();
+
+ if (object instanceof Viewer) {
+ ((Viewer) object).getControl().addMenuDetectListener(
+ viewerMenuDetectListener);
+ }
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CollapseTreeHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CollapseTreeHandler.java
new file mode 100644
index 00000000000..5102c8db777
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CollapseTreeHandler.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Theron Virgin
+ */
+public class CollapseTreeHandler extends AbstractHandler {
+ private TreeViewer treeViewer;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent arg0) throws ExecutionException {
+ treeViewer.collapseAll();
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#isEnabled()
+ */
+ @Override
+ public boolean isEnabled() {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+ treeViewer = selectionProvider instanceof TreeViewer ? (TreeViewer) selectionProvider : null;
+
+ return treeViewer != null;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CompressWordAttributesHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CompressWordAttributesHandler.java
new file mode 100644
index 00000000000..8a087445198
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CompressWordAttributesHandler.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.word.WordUtil;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Paul K. Waldfogel
+ */
+public class CompressWordAttributesHandler extends AbstractHandler {
+ private List<Artifact> artifacts;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ Jobs.startJob(new Job("Compress Word Attributes") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ int count = 0;
+ final int total = artifacts.size();
+
+ monitor.beginTask("Analyzing attributes", total);
+
+ for (Artifact artifact : artifacts) {
+ if (WordUtil.revertNonusefulWordChanges(artifact.getArtId(), artifact.getBranch(),
+ "osee_compression_gammas")) count++;
+ monitor.worked(1);
+ if (monitor.isCanceled()) {
+ monitor.done();
+ return Status.CANCEL_STATUS;
+ }
+ }
+
+ final int finalCount = count;
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+ "Compression Data", finalCount + " of the " + total + " artifacts need compression");
+ }
+ });
+
+ monitor.done();
+ return Status.OK_STATUS;
+ } catch (Exception ex) {
+ return new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, Status.OK, ex.getLocalizedMessage(), ex);
+ }
+ }
+
+ });
+ return null;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ boolean enabled = false;
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+ try {
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ artifacts = Handlers.getArtifactsFromStructuredSelection(structuredSelection);
+
+ if (!artifacts.isEmpty()) {
+ boolean writePermission =
+ AccessControlManager.checkObjectPermission(artifacts.get(0), PermissionEnum.WRITE);
+ enabled = writePermission && AccessControlManager.isOseeAdmin();
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ enabled = false;
+ }
+ return enabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CopyHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CopyHandler.java
new file mode 100644
index 00000000000..9c0ba62df13
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/CopyHandler.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.skynet.util.ArtifactClipboard;
+import org.eclipse.search.ui.text.Match;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class CopyHandler extends AbstractHandler {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (HandlerUtil.getActivePartChecked(event) instanceof ViewPart) {
+ ViewPart view = (ViewPart) HandlerUtil.getActivePartChecked(event);
+ IWorkbenchPartSite myIWorkbenchPartSite = view.getSite();
+ ISelectionProvider selectionProvider = myIWorkbenchPartSite.getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection selection = (IStructuredSelection) selectionProvider.getSelection();
+
+ List<String> names = new LinkedList<String>();
+ List<Artifact> artifacts = new LinkedList<Artifact>();
+ ArtifactClipboard clipboard = new ArtifactClipboard(view.getSite().getId());
+ Iterator<?> iterator = selection.iterator();
+ Object selectionObject = null;
+
+ while (iterator.hasNext()) {
+ Object object = iterator.next();
+
+ if (object instanceof IAdaptable) {
+ selectionObject = ((IAdaptable) object).getAdapter(Branch.class);
+
+ if (selectionObject == null) {
+ selectionObject = ((IAdaptable) object).getAdapter(Artifact.class);
+ }
+ } else if (object instanceof Match) {
+ selectionObject = ((Match) object).getElement();
+ }
+
+ if (selectionObject instanceof Branch) {
+ names.add(((Branch) selectionObject).getBranchName());
+ } else if (selectionObject instanceof Artifact) {
+ Artifact artifact = (Artifact) selectionObject;
+ names.add(artifact.getDescriptiveName());
+ artifacts.add(artifact);
+ }
+ }
+
+ if (!names.isEmpty() && artifacts.isEmpty()) {
+ clipboard.setTextToClipboard(names);
+ } else if (!names.isEmpty() && !artifacts.isEmpty()) {
+ clipboard.setArtifactsToClipboard(artifacts, names);
+ }
+ }
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#isHandled()
+ */
+ @Override
+ public boolean isHandled() {
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#isEnabled()
+ */
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/DeleteArtifactHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/DeleteArtifactHandler.java
new file mode 100644
index 00000000000..b48ecfe8497
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/DeleteArtifactHandler.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.CommandHandler;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class DeleteArtifactHandler extends CommandHandler {
+ private List<Artifact> artifacts;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (!artifacts.isEmpty()) {
+ try {
+ MessageDialog dialog =
+ new MessageDialog(Display.getCurrent().getActiveShell(), "Confirm Artifact Deletion", null,
+ " Are you sure you want to delete this artifact and all of the default hierarchy children?",
+ MessageDialog.QUESTION, new String[] {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL}, 1);
+ if (dialog.open() == 0) {
+ Artifact[] artifactsArray = artifacts.toArray(new Artifact[artifacts.size()]);
+ SkynetTransaction transaction = new SkynetTransaction(artifactsArray[0].getBranch());
+ ArtifactPersistenceManager.deleteArtifact(transaction, false, artifactsArray);
+ transaction.execute();
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+ boolean isEnabled = false;
+
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ artifacts = Handlers.getArtifactsFromStructuredSelection(structuredSelection);
+ isEnabled = AccessControlManager.getInstance().checkObjectListPermission(artifacts, PermissionEnum.WRITE);
+ }
+ return isEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/EditArtifactHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/EditArtifactHandler.java
new file mode 100644
index 00000000000..51cf2d21b8b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/EditArtifactHandler.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.CommandHandler;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class EditArtifactHandler extends CommandHandler {
+ private List<Artifact> artifacts;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (!artifacts.isEmpty()) {
+ try {
+ RendererManager.editInJob(artifacts);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ dispose();
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+ boolean isEnabled = false;
+
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ artifacts = Handlers.getArtifactsFromStructuredSelection(structuredSelection);
+ isEnabled = AccessControlManager.getInstance().checkObjectListPermission(artifacts, PermissionEnum.WRITE);
+ }
+ return isEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ExpandTreeHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ExpandTreeHandler.java
new file mode 100644
index 00000000000..6907950c1b1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ExpandTreeHandler.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.Iterator;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Theron Virgin
+ */
+public class ExpandTreeHandler extends AbstractHandler {
+ private TreeViewer treeViewer;
+ private IStructuredSelection structuredSelection;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent arg0) throws ExecutionException {
+ Iterator<?> iter = structuredSelection.iterator();
+ while (iter.hasNext()) {
+ treeViewer.expandToLevel(iter.next(), TreeViewer.ALL_LEVELS);
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#isEnabled()
+ */
+ @Override
+ public boolean isEnabled() {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+ structuredSelection = null;
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+ treeViewer = selectionProvider instanceof TreeViewer ? (TreeViewer) selectionProvider : null;
+
+ if (treeViewer != null && treeViewer.getSelection() instanceof IStructuredSelection) {
+ structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ }
+ return treeViewer != null && structuredSelection != null;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/Handlers.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/Handlers.java
new file mode 100644
index 00000000000..0457e16360a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/Handlers.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactChange;
+import org.eclipse.search.ui.text.Match;
+
+/**
+ * This is a utility class for OSEE handlers
+ *
+ * @author Jeff C. Phillips
+ */
+public class Handlers {
+
+ /**
+ * Populates a list of ArtifactChange from a IStructuredSelection. Returns an empty list if no ArtifactChange were
+ * found.
+ *
+ * @param selection
+ * @return
+ */
+ public static List<ArtifactChange> getArtifactChangesFromStructuredSelection(IStructuredSelection structuredSelection) {
+ return processSelectionObjects(ArtifactChange.class, structuredSelection);
+ }
+
+ /**
+ * Populates a list of branches from a IStructuredSelection. Returns an empty list if no branches were found.
+ *
+ * @param selection
+ * @return
+ */
+ public static List<Branch> getBranchesFromStructuredSelection(IStructuredSelection structuredSelection) {
+ return processSelectionObjects(Branch.class, structuredSelection);
+ }
+
+ /**
+ * Populates a list of artifacts from a IStructuredSelection. Returns an empty list if no artifacts were found.
+ *
+ * @param selection
+ * @return
+ */
+ public static List<Artifact> getArtifactsFromStructuredSelection(IStructuredSelection structuredSelection) {
+ return processSelectionObjects(Artifact.class, structuredSelection);
+ }
+
+ /**
+ * @param clazz
+ * @param structuredSelection
+ * @return Returns a list of objects from the sturctruedSelection that are an instance of the Class
+ */
+ public static <E> List<E> processSelectionObjects(Class<E> clazz, IStructuredSelection structuredSelection) {
+ List<E> objects = new LinkedList<E>();
+ Iterator<?> iterator = structuredSelection.iterator();
+
+ while (iterator.hasNext()) {
+ Object object = iterator.next();
+ Object targetObject = null;
+
+ if (object instanceof IAdaptable) {
+ targetObject = ((IAdaptable) object).getAdapter(clazz);
+ } else if (object instanceof Match) {
+ targetObject = ((Match) object).getElement();
+ }
+
+ if (clazz.isInstance(targetObject)) {
+ objects.add(clazz.cast(targetObject));
+ }
+ }
+ return objects;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenArtifactsInAtsWorldHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenArtifactsInAtsWorldHandler.java
new file mode 100644
index 00000000000..602c77e61f5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenArtifactsInAtsWorldHandler.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class OpenArtifactsInAtsWorldHandler extends AbstractHandler {
+ private List<Artifact> artifacts;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent arg0) throws ExecutionException {
+ try {
+ if (OseeAts.getAtsLib() != null) OseeAts.getAtsLib().openInAtsWorldEditor("", artifacts);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+
+ boolean isEnabled = false;
+ try {
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ artifacts = Handlers.getArtifactsFromStructuredSelection(structuredSelection);
+
+ isEnabled = artifacts.size() > 0;
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ return isEnabled;
+ }
+ return isEnabled;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenInEditorHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenInEditorHandler.java
new file mode 100644
index 00000000000..39d85384b95
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenInEditorHandler.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.CommandHandler;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class OpenInEditorHandler extends CommandHandler {
+ private static final AccessControlManager accessControlManager = AccessControlManager.getInstance();
+ private List<Artifact> artifacts;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent myExecutionEvent) throws ExecutionException {
+ ArtifactEditor.editArtifacts(artifacts);
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+ boolean isEnabled = false;
+
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ artifacts = Handlers.getArtifactsFromStructuredSelection(structuredSelection);
+
+ isEnabled = accessControlManager.checkObjectListPermission(artifacts, PermissionEnum.READ);
+ }
+ return isEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenMassArtifactEditorHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenMassArtifactEditorHandler.java
new file mode 100644
index 00000000000..5dd99e68fe0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenMassArtifactEditorHandler.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.CommandHandler;
+import org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassArtifactEditor;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class OpenMassArtifactEditorHandler extends CommandHandler {
+ private static final AccessControlManager accessControlManager = AccessControlManager.getInstance();
+ private List<Artifact> artifacts;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent arg0) throws ExecutionException {
+ MassArtifactEditor.editArtifacts("", artifacts);
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+ boolean isEnabled = false;
+
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ artifacts = Handlers.getArtifactsFromStructuredSelection(structuredSelection);
+
+ isEnabled = accessControlManager.checkObjectListPermission(artifacts, PermissionEnum.WRITE);
+ }
+ return isEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenSkywalkerEditorHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenSkywalkerEditorHandler.java
new file mode 100644
index 00000000000..5c7c7a1596b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/OpenSkywalkerEditorHandler.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerView;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class OpenSkywalkerEditorHandler extends AbstractHandler {
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent arg0) throws ExecutionException {
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ List<Artifact> artifacts = Handlers.getArtifactsFromStructuredSelection(structuredSelection);
+
+ if (!artifacts.isEmpty()) {
+ SkyWalkerView.exploreArtifact(artifacts.iterator().next());
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PasteHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PasteHandler.java
new file mode 100644
index 00000000000..b2ed0deb8f0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PasteHandler.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.Iterator;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.skynet.util.ArtifactClipboard;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.search.ui.text.Match;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Theron Virgin
+ */
+public class PasteHandler extends AbstractHandler {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (HandlerUtil.getActivePartChecked(event) instanceof ViewPart) {
+ ViewPart view = (ViewPart) HandlerUtil.getActivePartChecked(event);
+ IWorkbenchPartSite myIWorkbenchPartSite = view.getSite();
+ ISelectionProvider selectionProvider = myIWorkbenchPartSite.getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection selection = (IStructuredSelection) selectionProvider.getSelection();
+
+ ArtifactClipboard clipboard = new ArtifactClipboard(view.getSite().getId());
+ Iterator<?> iterator = selection.iterator();
+ Object selectionObject = null;
+
+ while (iterator.hasNext()) {
+ Object object = iterator.next();
+
+ if (object instanceof IAdaptable) {
+ selectionObject = ((IAdaptable) object).getAdapter(Branch.class);
+
+ if (selectionObject == null) {
+ selectionObject = ((IAdaptable) object).getAdapter(Artifact.class);
+ }
+ } else if (object instanceof Match) {
+ selectionObject = ((Match) object).getElement();
+ }
+
+ if (selectionObject instanceof Artifact) {
+ try {
+ clipboard.pasteArtifactsFromClipboard((Artifact) selectionObject);
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+ }
+ }
+
+ }
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#isHandled()
+ */
+ @Override
+ public boolean isHandled() {
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#isEnabled()
+ */
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactHandler.java
new file mode 100644
index 00000000000..44892475497
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactHandler.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.CommandHandler;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public abstract class PreviewArtifactHandler extends CommandHandler {
+ private List<Artifact> artifacts;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (artifacts != null && !artifacts.isEmpty()) {
+ try {
+ RendererManager.previewInJob(artifacts, getPreviewOptions());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ return null;
+ }
+
+ protected abstract VariableMap getPreviewOptions() throws OseeArgumentException;
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+
+ boolean isEnabled = false;
+ IWorkbenchPartSite partSite = AWorkbench.getActivePage().getActivePart().getSite();
+ ISelectionProvider selectionProvider = partSite.getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ artifacts = Handlers.getArtifactsFromStructuredSelection(structuredSelection);
+ isEnabled = AccessControlManager.getInstance().checkObjectListPermission(artifacts, PermissionEnum.READ);
+
+ //whole word artifacts can only be viewed as a single document
+ for (Artifact artifact : artifacts) {
+ if (artifact instanceof WordArtifact && ((WordArtifact) artifact).isWholeWordArtifact()) {
+ isEnabled &= artifacts.size() == 1;
+ break;
+ }
+ }
+ }
+
+ return isEnabled;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactNoRecurseHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactNoRecurseHandler.java
new file mode 100644
index 00000000000..acbf5211710
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactNoRecurseHandler.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class PreviewArtifactNoRecurseHandler extends PreviewArtifactHandler {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.commandHandlers.PreviewArtifactHandler#getPreviewType()
+ */
+ @Override
+ protected VariableMap getPreviewOptions() throws OseeArgumentException {
+ return null;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactWithRecurseHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactWithRecurseHandler.java
new file mode 100644
index 00000000000..87b7431ace8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PreviewArtifactWithRecurseHandler.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.render.ITemplateRenderer;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class PreviewArtifactWithRecurseHandler extends PreviewArtifactHandler {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.commandHandlers.PreviewArtifactHandler#getPreviewType()
+ */
+
+ @Override
+ protected VariableMap getPreviewOptions() throws OseeArgumentException {
+ return new VariableMap(ITemplateRenderer.PREVIEW_WITH_RECURSE_OPTION_PAIR);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PurgeArtifactHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PurgeArtifactHandler.java
new file mode 100644
index 00000000000..1290e0d348c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/PurgeArtifactHandler.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.sql.Connection;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.DbTransaction;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.CommandHandler;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class PurgeArtifactHandler extends CommandHandler {
+ private List<Artifact> artifacts;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (MessageDialog.openConfirm(
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+ "Confirm Artifact Purge ",
+ " Are you sure you want to purge this artifact, all of " + "its children and all history associated with these artifacts from the database ?")) {
+ Job job = new Job("Purge artifact") {
+
+ @Override
+ protected IStatus run(final IProgressMonitor monitor) {
+ IStatus toReturn = Status.CANCEL_STATUS;
+ monitor.beginTask("Purge artifact", artifacts.size());
+ try {
+ new DbTransaction() {
+ @Override
+ protected void handleTxWork(Connection connection) throws OseeCoreException {
+ for (Artifact artifactToPurge : artifacts) {
+ monitor.setTaskName("Purge: " + artifactToPurge.getDescriptiveName());
+ artifactToPurge.purgeFromBranch(connection);
+ monitor.worked(1);
+ }
+ }
+ }.execute();
+ toReturn = Status.OK_STATUS;
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ toReturn = new Status(Status.ERROR, SkynetActivator.PLUGIN_ID, -1, ex.getMessage(), ex);
+ } finally {
+ monitor.done();
+ }
+ return toReturn;
+ }
+ };
+ Jobs.startJob(job);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+ boolean isEnabled = false;
+
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ artifacts = Handlers.getArtifactsFromStructuredSelection(structuredSelection);
+ isEnabled =
+ AccessControlManager.isOseeAdmin() && AccessControlManager.getInstance().checkObjectListPermission(artifacts,
+ PermissionEnum.WRITE);
+ }
+ return isEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevealInArtifactExplorer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevealInArtifactExplorer.java
new file mode 100644
index 00000000000..cf77a602172
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevealInArtifactExplorer.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.ArtifactExplorer;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class RevealInArtifactExplorer extends AbstractHandler {
+ private Artifact artifact;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent arg0) throws ExecutionException {
+ ArtifactExplorer.revealArtifact(artifact);
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#isEnabled()
+ */
+ @Override
+ public boolean isEnabled() {
+ boolean isEnabled = false;
+
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ List<Artifact> artifacts = Handlers.getArtifactsFromStructuredSelection(structuredSelection);
+
+ if (artifacts.isEmpty()) {
+ return false;
+ }
+
+ artifact = artifacts.iterator().next();
+ isEnabled = artifact.getBranch() == BranchManager.getDefaultBranch();
+ }
+ return isEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevertArtifactHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevertArtifactHandler.java
new file mode 100644
index 00000000000..1b29e49490a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevertArtifactHandler.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.sql.Connection;
+import java.util.List;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.DbTransaction;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactChange;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Paul K. Waldfogel
+ * @author Jeff C. Phillips
+ */
+public class RevertArtifactHandler extends AbstractHandler {
+ private List<ArtifactChange> artifactChanges;
+
+ public RevertArtifactHandler() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ // This is serious stuff, make sure the user understands the impact.
+ if (MessageDialog.openConfirm(
+ Display.getCurrent().getActiveShell(),
+ "Confirm Revert of " + artifactChanges.size() + " artifacts.",
+ "All attribute changes for the artifact and all link changes that involve the artifact on this branch will be reverted." + "\n\nTHIS IS IRREVERSIBLE" + "\n\nOSEE must be restarted after all reverting is finished to see the results")) {
+
+ Jobs.startJob(new RevertJob());
+ }
+ return null;
+ }
+ private class RevertJob extends Job {
+
+ public RevertJob() {
+ super("Reverting " + artifactChanges.size() + " artifacts.");
+ }
+
+ @Override
+ protected IStatus run(final IProgressMonitor monitor) {
+ IStatus toReturn;
+ try {
+ monitor.beginTask("Reverting ...", artifactChanges.size());
+
+ DbTransaction dbTransaction = new DbTransaction() {
+ @Override
+ protected void handleTxWork(Connection connection) throws OseeCoreException {
+ for (ArtifactChange artifactChange : artifactChanges) {
+ monitor.setTaskName(artifactChange.getArtifact().getInternalDescriptiveName());
+ ArtifactPersistenceManager.revertArtifact(connection, artifactChange.getArtifact());
+ monitor.worked(1);
+ }
+ }
+ };
+ dbTransaction.execute();
+
+ toReturn = Status.OK_STATUS;
+ } catch (Exception ex) {
+ toReturn = new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, -1, ex.getMessage(), ex);
+ } finally {
+ monitor.done();
+ }
+ return toReturn;
+ }
+ }
+
+ @Override
+ public boolean isEnabled() {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+
+ boolean isEnabled = false;
+ try {
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ List<ArtifactChange> artifactChanges =
+ Handlers.getArtifactChangesFromStructuredSelection(structuredSelection);
+
+ if (artifactChanges.isEmpty()) {
+ return false;
+ }
+
+ this.artifactChanges = artifactChanges;
+
+ for (ArtifactChange artifactChange : artifactChanges) {
+ isEnabled =
+ AccessControlManager.checkObjectPermission(artifactChange.getArtifact(), PermissionEnum.WRITE);
+ if (!isEnabled) {
+ break;
+ }
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ return false;
+ }
+ return isEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevertAttributeHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevertAttributeHandler.java
new file mode 100644
index 00000000000..aac7d5973ee
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/RevertAttributeHandler.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.sql.Connection;
+import java.util.List;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.DbTransaction;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Jeff C. Phillips
+ * @author Theron Virgin
+ */
+public class RevertAttributeHandler extends AbstractHandler {
+ private List<Attribute> attributes;
+
+ public RevertAttributeHandler() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ // This is serious stuff, make sure the user understands the impact.
+ if (MessageDialog.openConfirm(
+ Display.getCurrent().getActiveShell(),
+ "Confirm Revert of " + attributes.size() + " attributes.",
+ "All attribute changes selected will be reverted." + "\n\nTHIS IS IRREVERSIBLE" + "\n\nOSEE must be restarted after all reverting is finished to see the results")) {
+
+ Jobs.startJob(new RevertJob());
+ }
+ return null;
+ }
+ private class RevertJob extends Job {
+
+ public RevertJob() {
+ super("Reverting " + attributes.size() + " attributes.");
+ }
+
+ @Override
+ protected IStatus run(final IProgressMonitor monitor) {
+ IStatus toReturn;
+ try {
+ monitor.beginTask("Reverting ...", attributes.size());
+
+ DbTransaction dbTransaction = new DbTransaction() {
+ @Override
+ protected void handleTxWork(Connection connection) throws OseeCoreException {
+ for (Attribute<?> attribute : attributes) {
+ monitor.setTaskName(attribute.getArtifact().getInternalDescriptiveName() + " : " + attribute.getDisplayableString());
+ ArtifactPersistenceManager.revertAttribute(connection, attribute);
+ monitor.worked(1);
+ }
+ }
+ };
+ dbTransaction.execute();
+
+ toReturn = Status.OK_STATUS;
+ } catch (Exception ex) {
+ toReturn = new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, -1, ex.getMessage(), ex);
+ } finally {
+ monitor.done();
+ }
+ return toReturn;
+ }
+ }
+
+ @Override
+ public boolean isEnabled() {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+
+ boolean isEnabled = false;
+ try {
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ List<Attribute> changes = Handlers.processSelectionObjects(Attribute.class, structuredSelection);
+
+ if (changes.isEmpty()) {
+ return false;
+ }
+
+ this.attributes = changes;
+
+ for (Attribute<?> attribute : attributes) {
+ if (attributes == null) {
+
+ }
+ isEnabled = AccessControlManager.checkObjectPermission(attribute.getArtifact(), PermissionEnum.WRITE);
+ if (!isEnabled) {
+ break;
+ }
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ return false;
+ }
+ return isEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ShowArtifactInResourceHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ShowArtifactInResourceHandler.java
new file mode 100644
index 00000000000..8f3b77df555
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ShowArtifactInResourceHandler.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.CommandHandler;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.history.RevisionHistoryView;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class ShowArtifactInResourceHandler extends CommandHandler {
+ private List<Artifact> artifacts;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ for (Artifact artifact : artifacts) {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ try {
+ RevisionHistoryView revisionHistoryView =
+ (RevisionHistoryView) page.showView(RevisionHistoryView.VIEW_ID, artifact.getGuid(),
+ IWorkbenchPage.VIEW_ACTIVATE);
+ revisionHistoryView.explore(ArtifactQuery.getArtifactFromId(artifact.getGuid(), artifact.getBranch(), true));
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+ boolean isEnabled = false;
+
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ artifacts = Handlers.getArtifactsFromStructuredSelection(structuredSelection);
+
+ if (artifacts.isEmpty()) {
+ return false;
+ }
+
+ boolean readPermission = true;
+ for (Artifact artifact : artifacts) {
+ readPermission &= AccessControlManager.checkObjectPermission(artifact, PermissionEnum.READ);
+ }
+ isEnabled = readPermission;
+ }
+ return isEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ShowPreviewHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ShowPreviewHandler.java
new file mode 100644
index 00000000000..0f415ea143b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ShowPreviewHandler.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactChange;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Paul K. Waldfogel
+ */
+public class ShowPreviewHandler extends AbstractHandler {
+ public ShowPreviewHandler() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+
+ List<ArtifactChange> mySelectedArtifactChangeList =
+ Handlers.getArtifactChangesFromStructuredSelection(structuredSelection);
+ for (ArtifactChange mySelectedArtifactChange : mySelectedArtifactChangeList) {
+ Artifact selectedArtifact;
+ try {
+ selectedArtifact = mySelectedArtifactChange.getArtifact();
+ ArtifactEditor.editArtifact(selectedArtifact);
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ViewWordChangeReportHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ViewWordChangeReportHandler.java
new file mode 100644
index 00000000000..74cf642d010
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ViewWordChangeReportHandler.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import static org.eclipse.osee.framework.core.enums.ModificationType.DELETED;
+import static org.eclipse.osee.framework.core.enums.ModificationType.NEW;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactChange;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Paul K. Waldfogel
+ * @author Jeff C. Phillips
+ */
+public class ViewWordChangeReportHandler extends AbstractHandler {
+ private Map<Integer, ArtifactChange> artifactChangeMap = new HashMap<Integer, ArtifactChange>();
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) {
+ ArrayList<Artifact> baseArtifacts = new ArrayList<Artifact>(artifactChangeMap.size());
+ ArrayList<Artifact> newerArtifacts = new ArrayList<Artifact>(artifactChangeMap.size());
+ VariableMap variableMap = new VariableMap();
+ String fileName = null;
+
+ for (ArtifactChange artifactChange : artifactChangeMap.values()) {
+ try {
+ Artifact baseArtifact =
+ artifactChange.getModType() == NEW ? null : ArtifactPersistenceManager.getInstance().getArtifactFromId(
+ artifactChange.getArtifact().getArtId(), artifactChange.getBaselineTransactionId());
+ Artifact newerArtifact =
+ artifactChange.getModType() == DELETED ? null : ArtifactPersistenceManager.getInstance().getArtifactFromId(
+ artifactChange.getArtifact().getArtId(), artifactChange.getToTransactionId());
+
+ baseArtifacts.add(baseArtifact);
+ newerArtifacts.add(newerArtifact);
+
+ if (fileName == null) {
+ if (artifactChangeMap.values().size() == 1) {
+ fileName = baseArtifact != null ? baseArtifact.getSafeName() : newerArtifact.getSafeName();
+ } else {
+ fileName =
+ baseArtifact != null ? baseArtifact.getBranch().getBranchShortName() : newerArtifact.getBranch().getBranchShortName();
+ }
+ variableMap.setValue("fileName", fileName + "_" + (new Date()).toString().replaceAll(":", ";") + ".xml");
+ }
+
+ } catch (OseeCoreException ex1) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex1);
+ }
+ }
+
+ if (newerArtifacts.size() == 0 || (baseArtifacts.size() != newerArtifacts.size())) {
+ throw new IllegalArgumentException(
+ "base artifacts size: " + baseArtifacts.size() + " must match newer artifacts size: " + newerArtifacts.size() + ".");
+ }
+
+ RendererManager.diffInJob(baseArtifacts, newerArtifacts, variableMap);
+ return null;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+
+ artifactChangeMap.clear();
+ List<Artifact> artifacts = new LinkedList<Artifact>();
+ boolean isEnabled = false;
+
+ try {
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ List<ArtifactChange> artifactChanges =
+ Handlers.getArtifactChangesFromStructuredSelection(structuredSelection);
+
+ for (ArtifactChange artifactChange : artifactChanges) {
+ artifacts.add(artifactChange.getArtifact());
+ artifactChangeMap.put(artifactChange.getArtifact().getArtId(), artifactChange);
+ }
+ isEnabled = AccessControlManager.getInstance().checkObjectListPermission(artifacts, PermissionEnum.READ);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+
+ return isEnabled;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ViewerReportHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ViewerReportHandler.java
new file mode 100644
index 00000000000..ec5c897ea73
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/ViewerReportHandler.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.ui.skynet.TableViewerReport;
+import org.eclipse.osee.framework.ui.skynet.TreeViewerReport;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerTreeReport;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class ViewerReportHandler extends AbstractHandler {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (HandlerUtil.getActivePartChecked(event) instanceof ViewPart) {
+ ViewPart view = (ViewPart) HandlerUtil.getActivePartChecked(event);
+ IWorkbenchPartSite myIWorkbenchPartSite = view.getSite();
+ Object selectionProvider = myIWorkbenchPartSite.getSelectionProvider();
+
+ if (selectionProvider instanceof XViewer) {
+ (new XViewerTreeReport((XViewer) selectionProvider)).open();
+ } else if (selectionProvider instanceof TableViewer) {
+ (new TableViewerReport((TableViewer) selectionProvider)).open();
+ } else if (selectionProvider instanceof TreeViewer) {
+ (new TreeViewerReport((TreeViewer) selectionProvider)).open();
+ }
+ }
+ return null;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesBetweenCurrentAndParentHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesBetweenCurrentAndParentHandler.java
new file mode 100644
index 00000000000..de0e9dfb1fb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesBetweenCurrentAndParentHandler.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.core.enums.ModificationType;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.change.ChangeType;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactChange;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Paul K. Waldfogel
+ * @author Jeff C. Phillips
+ */
+public class WordChangesBetweenCurrentAndParentHandler extends AbstractHandler {
+ private ArtifactChange artifactChange;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ try {
+ Artifact secondArtifact =
+ ArtifactPersistenceManager.getInstance().getArtifactFromId(artifactChange.getArtifact().getArtId(),
+ artifactChange.getToTransactionId());
+ RendererManager.diffInJob(artifactChange.getConflictingModArtifact(), secondArtifact);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+
+ boolean isEnabled = false;
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ List<ArtifactChange> artifactChanges = Handlers.getArtifactChangesFromStructuredSelection(structuredSelection);
+
+ if (artifactChanges.size() == 0) {
+ return false;
+ }
+
+ artifactChange = artifactChanges.get(0);
+ try {
+ Artifact artifact = artifactChange.getArtifact();
+
+ boolean readPermission = AccessControlManager.checkObjectPermission(artifact, PermissionEnum.READ);
+ boolean wordArtifactSelected = artifact instanceof WordArtifact;
+ boolean modifiedWordArtifactSelected =
+ wordArtifactSelected && artifactChange.getModType() == ModificationType.CHANGE;
+ boolean conflictedWordArtifactSelected =
+ modifiedWordArtifactSelected && artifactChange.getChangeType() == ChangeType.CONFLICTING;
+ isEnabled = readPermission && conflictedWordArtifactSelected;
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+ }
+ return isEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesMadeToHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesMadeToHandler.java
new file mode 100644
index 00000000000..e8675621b0e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesMadeToHandler.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import static org.eclipse.osee.framework.core.enums.ModificationType.DELETED;
+import static org.eclipse.osee.framework.core.enums.ModificationType.NEW;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactChange;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Paul K. Waldfogel
+ */
+public class WordChangesMadeToHandler extends AbstractHandler {
+ private List<ArtifactChange> mySelectedArtifactChangeList;
+
+ public WordChangesMadeToHandler() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ArtifactChange selectedArtifactChange = mySelectedArtifactChangeList.get(0);
+ try {
+ execute(selectedArtifactChange);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ return null;
+ }
+
+ public void execute(ArtifactChange artifactChange) throws Exception {
+ Artifact firstArtifact =
+ artifactChange.getModType() == NEW ? null : ArtifactPersistenceManager.getInstance().getArtifactFromId(
+ artifactChange.getArtifact().getArtId(), artifactChange.getBaselineTransactionId());
+ Artifact secondArtifact =
+ artifactChange.getModType() == DELETED ? null : ArtifactPersistenceManager.getInstance().getArtifactFromId(
+ artifactChange.getArtifact().getArtId(), artifactChange.getToTransactionId());
+
+ RendererManager.diffInJob(firstArtifact, secondArtifact);
+ }
+
+ @Override
+ public boolean isEnabled() {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+
+ boolean isEnabled = false;
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ mySelectedArtifactChangeList = Handlers.getArtifactChangesFromStructuredSelection(structuredSelection);
+
+ if (mySelectedArtifactChangeList.size() == 0) {
+ return false;
+ }
+ ArtifactChange mySelectedArtifactChange = mySelectedArtifactChangeList.get(0);
+
+ try {
+ Artifact changedArtifact = mySelectedArtifactChange.getArtifact();
+ boolean readPermission = AccessControlManager.checkObjectPermission(changedArtifact, PermissionEnum.READ);
+ boolean wordArtifactSelected = changedArtifact instanceof WordArtifact;
+ isEnabled = readPermission && wordArtifactSelected;
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+ }
+ return isEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesToParentHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesToParentHandler.java
new file mode 100644
index 00000000000..e84943a36df
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/commandHandlers/WordChangesToParentHandler.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.commandHandlers;
+
+import static org.eclipse.osee.framework.core.enums.ModificationType.CHANGE;
+import static org.eclipse.osee.framework.core.enums.ModificationType.DELETED;
+import static org.eclipse.osee.framework.core.enums.ModificationType.NEW;
+import java.util.List;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactChange;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Paul K. Waldfogel
+ */
+public class WordChangesToParentHandler extends AbstractHandler {
+ private List<ArtifactChange> mySelectedArtifactChangeList;
+
+ public WordChangesToParentHandler() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (mySelectedArtifactChangeList.size() > 0) {
+ ArtifactChange selectedArtifactChange = mySelectedArtifactChangeList.get(0);
+ try {
+ Artifact firstArtifact =
+ selectedArtifactChange.getModType() == NEW ? null : ArtifactPersistenceManager.getInstance().getArtifactFromId(
+ selectedArtifactChange.getArtifact().getArtId(),
+ selectedArtifactChange.getBaselineTransactionId());
+
+ Artifact secondArtifact = null;
+ Branch parentBranch = firstArtifact.getBranch().getParentBranch();
+
+ secondArtifact =
+ selectedArtifactChange.getModType() == DELETED ? null : ArtifactQuery.getArtifactFromId(
+ selectedArtifactChange.getArtifact().getArtId(), parentBranch);
+
+ RendererManager.diffInJob(firstArtifact, secondArtifact);
+
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ if (PlatformUI.getWorkbench().isClosing()) {
+ return false;
+ }
+
+ boolean isEnabled = false;
+
+ try {
+ ISelectionProvider selectionProvider =
+ AWorkbench.getActivePage().getActivePart().getSite().getSelectionProvider();
+
+ if (selectionProvider != null && selectionProvider.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selectionProvider.getSelection();
+ mySelectedArtifactChangeList = Handlers.getArtifactChangesFromStructuredSelection(structuredSelection);
+
+ if (mySelectedArtifactChangeList.size() == 0) {
+ return (false);
+ }
+ ArtifactChange mySelectedArtifactChange = mySelectedArtifactChangeList.get(0);
+
+ if (mySelectedArtifactChange.getModType() == NEW || mySelectedArtifactChange.getModType() == DELETED) {
+ return (false);
+ }
+
+ Artifact changedArtifact = mySelectedArtifactChange.getArtifact();
+ Branch reportBranch = changedArtifact.getBranch();
+ boolean wordArtifactSelected = changedArtifact instanceof WordArtifact;
+ boolean validDiffParent = wordArtifactSelected && reportBranch.hasParentBranch();
+
+ boolean readPermission = AccessControlManager.checkObjectPermission(changedArtifact, PermissionEnum.READ);
+ boolean modifiedWordArtifactSelected =
+ wordArtifactSelected && mySelectedArtifactChange.getModType() == CHANGE;
+ isEnabled = validDiffParent && modifiedWordArtifactSelected && readPermission;
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+ return isEnabled;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/ArtifactTxCurrent.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/ArtifactTxCurrent.java
new file mode 100644
index 00000000000..bd255416be8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/ArtifactTxCurrent.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import java.util.HashSet;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Theron Virgin
+ */
+public class ArtifactTxCurrent extends DatabaseHealthTask {
+ private HashSet<LocalTxData> multipleSet = null;
+ private HashSet<Pair<Integer, Integer>> noneSet = null;
+
+ public String getFixTaskName() {
+ return "Fix TX_Current Artifact Errors";
+ }
+
+ public String getVerifyTaskName() {
+ return "Check for TX_Current Artifact Errors";
+ }
+
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+ monitor.beginTask("Verify TX_Current Artifact Errors", 100);
+ String[] columnHeaders = new String[] {"Count", "Art id", "Branch id"};
+ StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ if (showDetails) {
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ sbFull.append(AHTML.addRowSpanMultiColumnTable("Artifacts with no tx_current set", columnHeaders.length));
+ }
+
+ if (operation.equals(Operation.Verify) || noneSet == null) {
+ noneSet = HealthHelper.getNoTxCurrentSet("art_id", "osee_artifact_version", builder, " Artifacts");
+ monitor.worked(15);
+ if (monitor.isCanceled()) return;
+ }
+ if (showDetails) {
+ HealthHelper.dumpDataNone(sbFull, noneSet);
+ columnHeaders = new String[] {"Count", "Art id", "Branch id", "Num TX_Currents"};
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ sbFull.append(AHTML.addRowSpanMultiColumnTable("Artifacts with multiple tx_currents set", columnHeaders.length));
+ }
+
+ if (operation.equals(Operation.Verify) || multipleSet == null) {
+ //Multiple TX Currents Set
+ multipleSet = HealthHelper.getMultipleTxCurrentSet("art_id", "osee_artifact_version", builder, " Artifacts");
+ }
+ if (showDetails) {
+ HealthHelper.dumpDataMultiple(sbFull, multipleSet);
+ }
+
+ if (operation.equals(Operation.Fix)) {
+ /** Duplicate TX_current Cleanup **/
+ monitor.worked(10);
+ monitor.subTask("Cleaning up multiple Tx_currents");
+ HealthHelper.cleanMultipleTxCurrent("art_id", "osee_artifact_version", builder, multipleSet);
+ monitor.worked(20);
+ monitor.subTask("Cleaning up no Tx_currents");
+ HealthHelper.cleanNoTxCurrent("art_id", "osee_artifact_version", builder, noneSet);
+ multipleSet = null;
+ noneSet = null;
+ }
+
+ if (showDetails) {
+ HealthHelper.endTable(sbFull, getVerifyTaskName());
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/AttributeTxCurrent.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/AttributeTxCurrent.java
new file mode 100644
index 00000000000..c6f798dd947
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/AttributeTxCurrent.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import java.util.HashSet;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Theron Virgin
+ */
+public class AttributeTxCurrent extends DatabaseHealthTask {
+ private HashSet<LocalTxData> multipleSet = null;
+ private HashSet<Pair<Integer, Integer>> noneSet = null;
+
+ public String getFixTaskName() {
+ return "Fix TX_Current Attribute Errors";
+ }
+
+ public String getVerifyTaskName() {
+ return "Check for TX_Current Attribute Errors";
+ }
+
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+ monitor.beginTask("Verify TX_Current Attribute Errors", 100);
+ String[] columnHeaders = new String[] {"Count", "Attr id", "Branch id"};
+ StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ if (showDetails) {
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ sbFull.append(AHTML.addRowSpanMultiColumnTable("Attributes with no tx_current set", columnHeaders.length));
+ }
+ if (operation.equals(Operation.Verify) || noneSet == null) {
+ noneSet = HealthHelper.getNoTxCurrentSet("attr_id", "osee_attribute", builder, " Attributes");
+ monitor.worked(15);
+ if (monitor.isCanceled()) return;
+ }
+ if (showDetails) {
+ HealthHelper.dumpDataNone(sbFull, noneSet);
+ columnHeaders = new String[] {"Count", "Attr id", "Branch id", "Num TX_Currents"};
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ sbFull.append(AHTML.addRowSpanMultiColumnTable("Attributes with multiple tx_currents set",
+ columnHeaders.length));
+ }
+ if (operation.equals(Operation.Verify) || multipleSet == null) {
+ //Multiple TX Currents Set
+ multipleSet = HealthHelper.getMultipleTxCurrentSet("attr_id", "osee_attribute", builder, " Attributes");
+ }
+ if (showDetails) {
+ HealthHelper.dumpDataMultiple(sbFull, multipleSet);
+ }
+
+ if (operation.equals(Operation.Fix)) {
+ /** Duplicate TX_current Cleanup **/
+ monitor.worked(10);
+ monitor.subTask("Cleaning up multiple Tx_currents");
+ HealthHelper.cleanMultipleTxCurrent("attr_id", "osee_attribute", builder, multipleSet);
+ monitor.worked(20);
+ monitor.subTask("Cleaning up multiple Tx_currents");
+ HealthHelper.cleanNoTxCurrent("attr_id", "osee_attribute", builder, noneSet);
+ multipleSet = null;
+ noneSet = null;
+ }
+
+ if (showDetails) {
+ HealthHelper.endTable(sbFull, getVerifyTaskName());
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpAddressingData.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpAddressingData.java
new file mode 100644
index 00000000000..c786cbec866
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpAddressingData.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.info.SupportedDatabase;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * Identifies and removes addressing from the transaction table that no longer addresses other tables.
+ *
+ * @author Theron Virgin
+ */
+public class CleanUpAddressingData extends DatabaseHealthTask {
+
+ private static final String NOT_BACKED_GAMMAS =
+ "SELECT gamma_id from osee_txs %s " + HealthHelper.ALL_BACKING_GAMMAS;
+ private static final String NOT_BACKED_TRANSACTIONS =
+ "SELECT transaction_id from osee_txs %s SELECT transaction_id from osee_tx_details";
+ private static final String REMOVE_NOT_ADDRESSED_GAMMAS = "DELETE FROM osee_txs WHERE gamma_id = ?";
+ private static final String REMOVE_NOT_ADDRESSED_TRANSACTIONS = "DELETE FROM osee_txs WHERE transaction_id = ?";
+
+ private List<Object[]> gammas = null;
+ private List<Object[]> transactions = null;
+
+ @Override
+ public String getFixTaskName() {
+ return "Fix TXS Entries with no Backing Data";
+ }
+
+ @Override
+ public String getVerifyTaskName() {
+ return "Check for TXS Entries with no Backing Data";
+ }
+
+ @Override
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+ boolean fix = operation == Operation.Fix;
+ boolean verify = !fix;
+ monitor.beginTask(
+ fix ? "Deleting TXS Entries with No Backing Data" : "Checking For TXS Entries with No Backing Data", 100);
+
+ if (verify || gammas == null) {
+ gammas =
+ HealthHelper.runSingleResultQuery(
+ String.format(NOT_BACKED_GAMMAS, SupportedDatabase.getComplementSql()), "gamma_id");
+ monitor.worked(25);
+ if (monitor.isCanceled()) return;
+ }
+ if (verify || transactions == null) {
+ transactions =
+ HealthHelper.runSingleResultQuery(String.format(NOT_BACKED_TRANSACTIONS,
+ SupportedDatabase.getComplementSql()), "transaction_id");
+ monitor.worked(25);
+ if (monitor.isCanceled()) return;
+ }
+
+ StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ HealthHelper.displayForCleanUp("Gamma Id", sbFull, builder, verify, gammas, "'s with no backing data\n");
+ monitor.worked(20);
+ HealthHelper.displayForCleanUp("Transaction Id", sbFull, builder, verify, transactions,
+ "'s with no backing data\n");
+ monitor.worked(20);
+
+ if (monitor.isCanceled()) return;
+
+ if (fix) {
+ if (gammas.size() > 0) {
+ ConnectionHandler.runBatchUpdate(REMOVE_NOT_ADDRESSED_GAMMAS, gammas);
+ }
+ monitor.worked(5);
+ if (transactions.size() > 0) {
+ ConnectionHandler.runBatchUpdate(REMOVE_NOT_ADDRESSED_TRANSACTIONS, transactions);
+ }
+ monitor.worked(5);
+ gammas = null;
+ transactions = null;
+ }
+
+ if (showDetails) {
+ HealthHelper.endTable(sbFull, getVerifyTaskName());
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpAttrFromDeletedArt.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpAttrFromDeletedArt.java
new file mode 100644
index 00000000000..af74a836898
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpAttrFromDeletedArt.java
@@ -0,0 +1,44 @@
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+public class CleanUpAttrFromDeletedArt extends DatabaseHealthTask {
+ private static final String INSERT_ATTRS_TO_ART_COMMIT_TRANSACTION =
+ "insert into osee_define_txs (tx_current, mod_type, transaction_id, gamma_id) select 3, 5, tx1.transaction_id, att1.gamma_id from osee_Define_txs tx1, osee_Define_txs tx2, osee_define_tx_details td1, osee_define_tx_details td2, osee_Define_artifact_version av1, osee_Define_attribute att1 where td1.transaction_id = tx1.transaction_id AND tx1.gamma_id = av1.gamma_id and tx1.tx_current = 2 and tx1.mod_type = 3 and td1.branch_id = td2.branch_id and td2.transaction_id = tx2.transaction_id and tx2.gamma_id = att1.gamma_id and av1.art_id = att1.art_id and tx2.tx_current = 1 and td1.transaction_id <> td2.transaction_id";
+ private static final String UPDATE_OLD_ATTRS_NOT_SAME_TRANSACTION =
+ "update osee_define_txs set tx_current = 0 where (transaction_id, gamma_id) in (select tx2.transaction_id, tx2.gamma_id from osee_Define_txs tx1, osee_Define_txs tx2, osee_define_tx_details td1, osee_define_tx_details td2, osee_Define_artifact_version av1, osee_Define_attribute att1 where td1.transaction_id = tx1.transaction_id AND tx1.gamma_id = av1.gamma_id and tx1.tx_current = 2 and tx1.mod_type = 3 and td1.branch_id = td2.branch_id and td2.transaction_id = tx2.transaction_id and tx2.gamma_id = att1.gamma_id and av1.art_id = att1.art_id and tx2.tx_current = 1 and td1.transaction_id <> td2.transaction_id)";
+ private static final String UPDATE_OLD_ATTRS_SAME_TRANSACTION =
+ "update osee_define_txs set tx_current = 3, mod_type = 5 where (transaction_id, gamma_id) in (select tx2.transaction_id, tx2.gamma_id from osee_Define_txs tx1, osee_Define_txs tx2, osee_define_tx_details td1, osee_define_tx_details td2, osee_Define_artifact_version av1, osee_Define_attribute att1 where td1.transaction_id = tx1.transaction_id AND tx1.gamma_id = av1.gamma_id and tx1.tx_current = 2 and tx1.mod_type = 3 and td1.branch_id = td2.branch_id and td2.transaction_id = tx2.transaction_id and tx2.gamma_id = att1.gamma_id and av1.art_id = att1.art_id and tx2.tx_current = 1 and td1.transaction_id = td2.transaction_id)";
+
+ @Override
+ public String getFixTaskName() {
+ return "Fix attributes from deleted artifacts";
+ }
+
+ @Override
+ public String getVerifyTaskName() {
+ return null;
+ }
+
+ @Override
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+
+ boolean fix = operation == Operation.Fix;
+
+ if (fix) {
+ monitor.beginTask("Clean up attributes from deleted artifacts", 3);
+ monitor.setTaskName("INSERT_ATTRS_TO_ART_COMMIT_TRANSACTION");
+ ConnectionHandler.runPreparedUpdate(INSERT_ATTRS_TO_ART_COMMIT_TRANSACTION);
+ monitor.worked(1);
+ monitor.setTaskName("UPDATE_OLD_ATTRS_NOT_SAME_TRANSACTION");
+ ConnectionHandler.runPreparedUpdate(UPDATE_OLD_ATTRS_NOT_SAME_TRANSACTION);
+ monitor.worked(1);
+ monitor.setTaskName("UPDATE_OLD_ATTRS_SAME_TRANSACTION");
+ ConnectionHandler.runPreparedUpdate(UPDATE_OLD_ATTRS_SAME_TRANSACTION);
+ monitor.done();
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpBackingData.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpBackingData.java
new file mode 100644
index 00000000000..1805923ddab
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CleanUpBackingData.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.info.SupportedDatabase;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * Identifies and removes addressing from the transaction table that no longer addresses other tables.
+ *
+ * @author Theron Virgin
+ */
+public class CleanUpBackingData extends DatabaseHealthTask {
+
+ private static final String NOT_ADDRESSESED_GAMMAS =
+ HealthHelper.ALL_BACKING_GAMMAS + " %s SELECT gamma_id FROM osee_txs";
+ private static final String NOT_ADDRESSESED_TRANSACTIONS =
+ "SELECT transaction_id FROM osee_tx_details WHERE tx_type != 1 %s SELECT transaction_id FROM osee_txs";
+ private static final String REMOVE_GAMMAS_ARTIFACT = "DELETE FROM osee_artifact_version WHERE gamma_id = ?";
+ private static final String REMOVE_GAMMAS_ATTRIBUTE = "DELETE FROM osee_attribute WHERE gamma_id = ?";
+ private static final String REMOVE_GAMMAS_RELATIONS = "DELETE FROM osee_relation_link WHERE gamma_id = ?";
+ private static final String REMOVE_NOT_ADDRESSED_TRANSACTIONS =
+ "DELETE FROM osee_tx_details WHERE transaction_id = ?";
+
+ private List<Object[]> gammas = null;
+ private List<Object[]> transactions = null;
+
+ @Override
+ public String getFixTaskName() {
+ return "Fix Data with no TXS Addressing";
+ }
+
+ @Override
+ public String getVerifyTaskName() {
+ return "Check for Data with no TXS Addressing";
+ }
+
+ @Override
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+ boolean fix = operation == Operation.Fix;
+ boolean verify = !fix;
+ monitor.beginTask(fix ? "Deleting Data with no TXS addressing" : "Checking For Data with no TXS addressing", 100);
+ monitor.worked(5);
+
+ if (verify || gammas == null) {
+ gammas =
+ HealthHelper.runSingleResultQuery(String.format(NOT_ADDRESSESED_GAMMAS,
+ SupportedDatabase.getComplementSql()), "gamma_id");
+ monitor.worked(25);
+ if (monitor.isCanceled()) return;
+ }
+ if (verify || transactions == null) {
+ transactions =
+ HealthHelper.runSingleResultQuery(String.format(NOT_ADDRESSESED_TRANSACTIONS,
+ SupportedDatabase.getComplementSql()), "transaction_id");
+ monitor.worked(25);
+ if (monitor.isCanceled()) return;
+ }
+
+ StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ HealthHelper.displayForCleanUp("Gamma Id", sbFull, builder, verify, gammas, "'s with no TXS addressing\n");
+ monitor.worked(20);
+ HealthHelper.displayForCleanUp("Transaction Id", sbFull, builder, verify, transactions,
+ "'s with no TXS addressing\n");
+ monitor.worked(20);
+
+ if (monitor.isCanceled()) return;
+
+ if (fix) {
+ ConnectionHandler.runBatchUpdate(REMOVE_GAMMAS_ARTIFACT, gammas);
+ monitor.worked(5);
+ ConnectionHandler.runBatchUpdate(REMOVE_GAMMAS_ATTRIBUTE, gammas);
+ monitor.worked(5);
+ ConnectionHandler.runBatchUpdate(REMOVE_GAMMAS_RELATIONS, gammas);
+ monitor.worked(5);
+ ConnectionHandler.runBatchUpdate(REMOVE_NOT_ADDRESSED_TRANSACTIONS, transactions);
+ monitor.worked(5);
+ gammas = null;
+ transactions = null;
+
+ }
+
+ if (showDetails) {
+ HealthHelper.endTable(sbFull, getVerifyTaskName());
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CommitTransactions.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CommitTransactions.java
new file mode 100644
index 00000000000..46f1ee31065
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CommitTransactions.java
@@ -0,0 +1,54 @@
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * Updates commit transactions so new and then modified objects will be committed with a mod type of new. This BLAM
+ * operation also removes attribute from deleted artifacts from committed transactions.
+ *
+ * @author Jeff C. Phillips
+ */
+public class CommitTransactions extends DatabaseHealthTask {
+ private static final String GET_COMMIT_TRANSACTIONS =
+ "select transaction_id from osee_tx_details where osee_comment like '%Commit%'";
+ private static final String UPDATE_NEW_TRANSACTIONS_TO_CURRENT =
+ "update osee_txs set mod_type = 1 where transaction_id = ? AND mod_type <> 1 AND gamma_id in( select tx1.gamma_id from osee_tx_details td1, osee_txs tx1, osee_artifact_version av1 where td1.transaction_id = ? AND td1.transaction_id = tx1.transaction_id AND tx1.gamma_id = av1.gamma_id AND av1.art_id NOT IN (SELECT av2.art_id FROM osee_tx_details td2, osee_txs tx2, osee_artifact_version av2 where td2.osee_comment like '%Commit%' AND td2.transaction_id < td1.transaction_id AND td2.transaction_id = tx2.transaction_id AND tx2.gamma_id = av2.gamma_id) AND av1.art_id NOT IN (SELECT av3.art_id FROM osee_txs tx3, osee_tx_details td3, osee_artifact_version av3 WHERE td3.branch_id = td1.branch_id AND td3.transaction_id < td1.transaction_id AND td3.transaction_id = tx3.transaction_id AND tx3.mod_type = 1 AND tx3.gamma_id = av3.gamma_id))";
+ private static final String DELETE_ORPHAN_ATTRIBUTES =
+ "delete FROM osee_attribute where gamma_id in (select t3.gamma_id from osee_txs t2, osee_attribute t3 where t2.transaction_id = ? AND t2.gamma_id = t3.gamma_id AND t3.art_id NOT in(SELECT art_id from osee_txs t4, osee_artifact_version t5 WHERE t4.transaction_id = t2.transaction_id AND t4.gamma_id = t5.gamma_id))";
+
+ @Override
+ public String getFixTaskName() {
+ return "Fix commit transactionds by deleting orphan attributes and setting new artifacts that have been modified to a mod type of 1";
+ }
+
+ @Override
+ public String getVerifyTaskName() {
+ return null;
+ }
+
+ @Override
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+
+ if (operation.equals(Operation.Fix)) {
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(GET_COMMIT_TRANSACTIONS, new Object[0]);
+
+ while (chStmt.next()) {
+ int transactionNumber = chStmt.getInt("transaction_id");
+ int updateCount =
+ ConnectionHandler.runPreparedUpdate(UPDATE_NEW_TRANSACTIONS_TO_CURRENT, transactionNumber,
+ transactionNumber);
+ int deleteAttrCount = ConnectionHandler.runPreparedUpdate(DELETE_ORPHAN_ATTRIBUTES, transactionNumber);
+
+ builder.append("For transaction: " + transactionNumber + " Number of update modTypes to 1:" + updateCount + " Number of deleted attrs: " + deleteAttrCount);
+ }
+ } finally {
+ chStmt.close();
+ }
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CommitedNewAndDeleted.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CommitedNewAndDeleted.java
new file mode 100644
index 00000000000..8d15b4fef70
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/CommitedNewAndDeleted.java
@@ -0,0 +1,159 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.core.enums.ModificationType;
+import org.eclipse.osee.framework.core.enums.TxChange;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+
+/**
+ * Identifies and removes addressing from the transaction table that no longer addresses other tables.
+ *
+ * @author Theron Virgin
+ */
+public class CommitedNewAndDeleted extends DatabaseHealthTask {
+ private class LocalValues {
+ public int relLinkId;
+ public int artId;
+ public int attributeId;
+ public int gammaId;
+ public int transactionId;
+ public int branchId;
+
+ public LocalValues(int artId, int attributeId, int branchId, int gammaId, int relLinkId, int transactionId) {
+ super();
+ this.artId = artId;
+ this.attributeId = attributeId;
+ this.branchId = branchId;
+ this.gammaId = gammaId;
+ this.relLinkId = relLinkId;
+ this.transactionId = transactionId;
+ }
+ }
+ private static final String COMMITTED_NEW_AND_DELETED_ARTIFACTS =
+ "SELECT txs1.gamma_id, txs1.transaction_id, det1.branch_id, art1.art_id, 0 as attr_id, 0 as rel_link_id FROM osee_tx_details det1, osee_txs txs1, osee_artifact_version art1 WHERE txs1.tx_current = " + TxChange.DELETED.getValue() + " AND det1.transaction_id = txs1.transaction_id AND txs1.gamma_id = art1.gamma_id AND NOT EXISTS (SELECT ('x') FROM osee_tx_details det2, osee_txs txs2, osee_artifact_version art2 WHERE txs2.mod_type != " + ModificationType.DELETED.getValue() + " AND det1.branch_id = det2.branch_id AND det2.transaction_id = txs2.transaction_id AND txs2.gamma_id = art2.gamma_id AND art2.art_id = art1.art_id)";
+ private static final String COMMITTED_NEW_AND_DELETED_ATTRIBUTES =
+ "SELECT txs1.gamma_id, txs1.transaction_id, det1.branch_id, 0 as art_id, att1.attr_id, 0 as rel_link_id FROM osee_tx_details det1, osee_txs txs1, osee_attribute att1 WHERE txs1.tx_current = " + TxChange.DELETED.getValue() + " AND det1.transaction_id = txs1.transaction_id AND txs1.gamma_id = att1.gamma_id AND NOT EXISTS (SELECT ('x') FROM osee_tx_details det2, osee_txs txs2, osee_attribute att2 WHERE txs2.mod_type != " + ModificationType.DELETED.getValue() + " AND det1.branch_id = det2.branch_id AND det2.transaction_id = txs2.transaction_id AND txs2.gamma_id = att2.gamma_id AND att2.attr_id = att1.attr_id)";
+ private static final String COMMITTED_NEW_AND_DELETED_RELATIONS =
+ "SELECT txs1.gamma_id, txs1.transaction_id, det1.branch_id, 0 as art_id, 0 as attr_id, rel1.rel_link_id FROM osee_tx_details det1, osee_txs txs1, osee_relation_link rel1 WHERE txs1.tx_current = " + TxChange.DELETED.getValue() + " AND det1.transaction_id = txs1.transaction_id AND txs1.gamma_id = rel1.gamma_id AND NOT EXISTS (SELECT ('x') FROM osee_tx_details det2, osee_txs txs2, osee_relation_link rel2 WHERE txs2.mod_type != " + ModificationType.DELETED.getValue() + " AND det1.branch_id = det2.branch_id AND det2.transaction_id = txs2.transaction_id AND txs2.gamma_id = rel2.gamma_id AND rel2.rel_link_id = rel1.rel_link_id)";
+ private static final String REMOVE_NOT_ADDRESSED_GAMMAS =
+ "DELETE FROM osee_txs WHERE gamma_id = ? AND transaction_id = ?";
+
+ private static final String[] COLUMN_HEADER =
+ {"Gamma Id", "Transaction Id", "Branch Id", "Art id", "Attribute Id", "Rel Link Id"};
+
+ private Set<LocalValues> addressing = null;
+
+ @Override
+ public String getFixTaskName() {
+ return "Fix Artifacts, Relation, Attributes that were Introduced on a Branch as Deleted";
+ }
+
+ @Override
+ public String getVerifyTaskName() {
+ return "Check for Artifacts, Relation, Attributes that were Introduced on a Branch as Deleted";
+ }
+
+ @Override
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+ boolean fix = operation == Operation.Fix;
+ boolean verify = !fix;
+ monitor.beginTask(fix ? getFixTaskName() : getVerifyTaskName(), 100);
+
+ if (verify || addressing == null) {
+ addressing = new HashSet<LocalValues>();
+ monitor.subTask("Loading Artifacts that were Introduced as Deleted");
+ loadData(COMMITTED_NEW_AND_DELETED_ARTIFACTS);
+ monitor.worked(20);
+ monitor.subTask("Loading Attributes that were Introduced as Deleted");
+ loadData(COMMITTED_NEW_AND_DELETED_ATTRIBUTES);
+ monitor.worked(20);
+ monitor.subTask("Loading Relation Links that were Introduced as Deleted");
+ loadData(COMMITTED_NEW_AND_DELETED_RELATIONS);
+ monitor.worked(20);
+ }
+ if (monitor.isCanceled()) return;
+
+ StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ //monitor.subTask(name)
+ sbFull.append(AHTML.addRowMultiColumnTable(COLUMN_HEADER));
+ displayData(sbFull, builder, verify);
+ monitor.worked(20);
+
+ if (monitor.isCanceled()) return;
+
+ if (fix) {
+ List<Object[]> insertParameters = new LinkedList<Object[]>();
+ for (LocalValues value : addressing) {
+ insertParameters.add(new Object[] {value.gammaId, value.transactionId});
+ }
+ if (insertParameters.size() > 0) {
+ ConnectionHandler.runBatchUpdate(REMOVE_NOT_ADDRESSED_GAMMAS, insertParameters);
+ }
+ monitor.worked(5);
+ addressing = null;
+ }
+
+ if (showDetails) {
+ sbFull.append(AHTML.endMultiColumnTable());
+ XResultData rd = new XResultData();
+ rd.addRaw(sbFull.toString());
+ rd.report(getVerifyTaskName(), Manipulations.RAW_HTML);
+ }
+ }
+
+ private void displayData(StringBuffer sbFull, StringBuilder builder, boolean verify) {
+ int attributeCount = 0, artifactCount = 0, relLinkCount = 0;
+ for (LocalValues value : addressing) {
+ if (value.artId != 0) artifactCount++;
+ if (value.attributeId != 0) attributeCount++;
+ if (value.relLinkId != 0) relLinkCount++;
+ sbFull.append(AHTML.addRowMultiColumnTable(new String[] {String.valueOf(value.gammaId),
+ String.valueOf(value.transactionId), String.valueOf(value.branchId), String.valueOf(value.artId),
+ String.valueOf(value.attributeId), String.valueOf(value.relLinkId)}));
+ }
+ builder.append(verify ? "Found " : "Fixed ");
+ builder.append(artifactCount);
+ builder.append(" Artifacts that were Introduced as Deleted\n");
+ builder.append(verify ? "Found " : "Fixed ");
+ builder.append(attributeCount);
+ builder.append(" Attributes that were Introduced as Deleted\n");
+ builder.append(verify ? "Found " : "Fixed ");
+ builder.append(relLinkCount);
+ builder.append(" Relation Links that were Introduced as Deleted\n");
+ }
+
+ //LocalValues(int artId, int attributeId, int branchId, int gammaId, int relLinkId, int transactionId)
+ private void loadData(String sql) throws OseeCoreException {
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(sql);
+ while (chStmt.next()) {
+ addressing.add(new LocalValues(chStmt.getInt("art_id"), chStmt.getInt("attr_id"),
+ chStmt.getInt("branch_id"), chStmt.getInt("gamma_id"), chStmt.getInt("rel_link_id"),
+ chStmt.getInt("transaction_id")));
+ }
+ } finally {
+ chStmt.close();
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DatabaseHealthTask.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DatabaseHealthTask.java
new file mode 100644
index 00000000000..11d76da8b40
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DatabaseHealthTask.java
@@ -0,0 +1,20 @@
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public abstract class DatabaseHealthTask {
+
+ public enum Operation {
+ Verify, Fix;
+ }
+
+ public abstract String getVerifyTaskName();
+
+ public abstract String getFixTaskName();
+
+ public abstract void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception;
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DuplicateAttributes.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DuplicateAttributes.java
new file mode 100644
index 00000000000..41c6e3fbebe
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DuplicateAttributes.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import java.util.LinkedList;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.db.connection.info.SupportedDatabase;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+
+/**
+ * @author Theron Virgin
+ */
+public class DuplicateAttributes extends DatabaseHealthTask {
+ private class DuplicateAttribute {
+ protected int artId;
+ protected int attrId1;
+ protected int attrId2;
+ protected String name;
+ protected String value1;
+ protected String value2;
+ protected String uri1;
+ protected String uri2;
+ protected int gamma1;
+ protected int gamma2;
+ protected int attrIDToDelete = 0;
+ protected LinkedList<Integer> branches1 = new LinkedList<Integer>();
+ protected LinkedList<Integer> branches2 = new LinkedList<Integer>();
+ }
+
+ private static final String GET_DUPLICATE_ATTRIBUTES =
+ "SELECT attr1.art_id, aty1.NAME, attr1.attr_id as attr_id_1, attr2.attr_id as attr_id_2, attr1.value as value_1, attr2.value as value_2, attr1.uri as uri_1, attr2.uri as uri_2, attr1.gamma_id as gamma_id_1, attr2.gamma_id as gamma_id_2 FROM osee_attribute attr1, osee_attribute attr2, osee_attribute_type aty1 WHERE attr1.art_id = attr2.art_id AND attr1.attr_id < attr2.attr_id AND attr1.attr_type_id = attr2.attr_type_id AND attr1.attr_type_id = aty1.attr_type_id AND aty1.max_occurence = 1 AND EXISTS (SELECT 'x' FROM osee_txs txs1 WHERE txs1.gamma_id = attr1.gamma_id) AND EXISTS (SELECT 'x' FROM osee_txs txs2 WHERE txs2.gamma_id = attr2.gamma_id) order by aty1.NAME, attr1.art_id";
+
+ private static final String BRANCHES_WITH_ONLY_ATTR =
+ "SELECT DISTINCT branch_id FROM osee_tx_details det WHERE EXISTS (SELECT 'x' FROM osee_txs txs, osee_attribute att WHERE det.transaction_id = txs.transaction_id AND txs.gamma_id = att.gamma_id AND att.attr_id = ?) %s (SELECT DISTINCT branch_id FROM osee_tx_details det WHERE EXISTS (SELECT 'x' FROM osee_txs txs, osee_attribute att WHERE det.transaction_id = txs.transaction_id AND txs.gamma_id = att.gamma_id AND att.attr_id = ?))";
+
+ private static final String DELETE_ATTR = "DELETE FROM osee_attribute WHERE attr_id = ?";
+
+ private static final String FILTER_DELTED =
+ "SELECT * FROM osee_txs txs, osee_attribute atr WHERE txs.tx_current = 1 AND txs.gamma_id = atr.gamma_id AND atr.attr_id = ?";
+
+ boolean fixErrors = false;
+ boolean processTxCurrent = true;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#getFixTaskName()
+ */
+ @Override
+ public String getFixTaskName() {
+ return "Fix Duplicate Attribute Errors";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#getVerifyTaskName()
+ */
+ @Override
+ public String getVerifyTaskName() {
+ return "Check for Duplicate Attribute Errors";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#run(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.core.runtime.IProgressMonitor, org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask.Operation, java.lang.StringBuilder)
+ */
+ @Override
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+ LinkedList<DuplicateAttribute> sameValues = new LinkedList<DuplicateAttribute>();
+ LinkedList<DuplicateAttribute> diffValues = new LinkedList<DuplicateAttribute>();
+ ConnectionHandlerStatement chStmt1 = new ConnectionHandlerStatement();
+ fixErrors = operation.equals(Operation.Fix);
+ //--- Test's for two attributes that are on the same artifact but have different attr_ids, when ---//
+ //--- the attribute type has a maximum of 1 allowable attributes. ---------------------------------//
+
+ monitor.beginTask("Clean Up Duplicate Attributes", processTxCurrent ? 20 : 8);
+ monitor.subTask("Querying for Duplicate Attributes");
+ if (monitor.isCanceled()) return;
+ try {
+ chStmt1.runPreparedQuery(GET_DUPLICATE_ATTRIBUTES);
+ monitor.worked(6);
+ monitor.subTask("Processing Results");
+ if (monitor.isCanceled()) return;
+ while (chStmt1.next()) {
+ ConnectionHandlerStatement chStmt2 = new ConnectionHandlerStatement();
+ try {
+ if (ConnectionHandler.runPreparedQueryFetchInt(-1, FILTER_DELTED, chStmt1.getInt("attr_id_1")) != -1) {
+ chStmt2.runPreparedQuery(FILTER_DELTED, chStmt1.getInt("attr_id_2"));
+ if (chStmt2.next()) {
+ DuplicateAttribute duplicateAttribute;
+ duplicateAttribute = new DuplicateAttribute();
+ duplicateAttribute.artId = chStmt1.getInt("art_id");
+ duplicateAttribute.attrId1 = chStmt1.getInt("attr_id_1");
+ duplicateAttribute.attrId2 = chStmt1.getInt("attr_id_2");
+ duplicateAttribute.name = chStmt1.getString("name");
+ duplicateAttribute.value1 = chStmt1.getString("value_1");
+ duplicateAttribute.value2 = chStmt1.getString("value_2");
+ duplicateAttribute.uri1 = chStmt1.getString("uri_1");
+ duplicateAttribute.uri2 = chStmt1.getString("uri_2");
+ duplicateAttribute.gamma1 = chStmt1.getInt("gamma_id_1");
+ duplicateAttribute.gamma2 = chStmt1.getInt("gamma_id_2");
+
+ if ((duplicateAttribute.value1 != null && duplicateAttribute.value2 != null && duplicateAttribute.value1.equals(duplicateAttribute.value2)) || (duplicateAttribute.uri1 != null && duplicateAttribute.uri2 != null && duplicateAttribute.uri1.equals(duplicateAttribute.uri2)) || (duplicateAttribute.value1 == null && duplicateAttribute.value2 == null && duplicateAttribute.uri1 == null && duplicateAttribute.uri2 == null)) {
+ sameValues.add(duplicateAttribute);
+ } else {
+ diffValues.add(duplicateAttribute);
+ }
+ }
+ }
+ } finally {
+ chStmt2.close();
+ }
+ }
+ } finally {
+ chStmt1.close();
+ }
+ monitor.worked(2);
+ monitor.subTask("Cleaning Up Attrinbutes");
+ if (monitor.isCanceled()) return;
+ if (sameValues.isEmpty() && diffValues.isEmpty()) {
+ builder.append("No Duplicate Attributes Found\n");
+ } else {
+ StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ try {
+ String[] columnHeaders =
+ new String[] {"Art Id", "Attr id 1", "Attr id 2", "Name", "Value 1", "Value 2", "URI 1", "URI 2",
+ "Gamma ID 1", "Gamma Id 2", "ID to Delete"};
+ sbFull.append(AHTML.beginMultiColumnTable(100, 1));
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ sbFull.append(AHTML.addRowSpanMultiColumnTable("Attributes with the same values", columnHeaders.length));
+ int count = showAttributeCleanUpDecisions(sameValues, fixErrors, sbFull, showDetails);
+ sbFull.append(AHTML.addRowSpanMultiColumnTable("Attributes with different values", columnHeaders.length));
+ count += showAttributeCleanUpDecisions(diffValues, false, sbFull, showDetails);
+ builder.append(String.format("Found %d duplicate attributes\n", count));
+ } finally {
+ if (showDetails) {
+ sbFull.append(AHTML.endMultiColumnTable());
+ XResultData rd = new XResultData();
+ rd.addRaw(sbFull.toString());
+ rd.report(getVerifyTaskName(), Manipulations.RAW_HTML);
+ }
+
+ }
+ }
+
+ }
+
+ protected void showText(DuplicateAttribute duplicate, int x, boolean removeAttribute, StringBuffer builder) {
+ String str =
+ AHTML.addRowMultiColumnTable(new String[] {String.valueOf(duplicate.artId),
+ String.valueOf(duplicate.attrId1), String.valueOf(duplicate.attrId2), duplicate.name,
+ duplicate.value1, duplicate.value2, duplicate.uri1, duplicate.uri2, String.valueOf(duplicate.gamma1),
+ String.valueOf(duplicate.gamma2),
+ removeAttribute ? String.valueOf(duplicate.attrIDToDelete) : "Requires Hand Analysis"});
+ builder.append(str);
+ }
+
+ private int showAttributeCleanUpDecisions(LinkedList<DuplicateAttribute> values, boolean removeAttribute, StringBuffer builder, boolean showDetails) throws OseeDataStoreException {
+ int x = 0;
+ if (showDetails) {
+
+ }
+
+ for (DuplicateAttribute loopDuplicate : values) {
+ findProminentAttribute(loopDuplicate.attrId1, loopDuplicate.attrId2, loopDuplicate.branches1);
+ findProminentAttribute(loopDuplicate.attrId2, loopDuplicate.attrId1, loopDuplicate.branches2);
+
+ if (loopDuplicate.branches1.size() == 0) {
+ loopDuplicate.attrIDToDelete = loopDuplicate.attrId1;
+ } else if (loopDuplicate.branches2.size() == 0) {
+ loopDuplicate.attrIDToDelete = loopDuplicate.attrId2;
+ }
+
+ if (loopDuplicate.attrIDToDelete != 0 && removeAttribute) {
+ ConnectionHandler.runPreparedUpdate(DELETE_ATTR, loopDuplicate.attrIDToDelete);
+ }
+ if (showDetails) {
+ showText(loopDuplicate, x++, removeAttribute, builder);
+ }
+ }
+ return x;
+ }
+
+ //--- Find out if there is an attribute that is on every branch that has either one of the attributes ---//
+ private void findProminentAttribute(int attrId1, int attrId2, LinkedList<Integer> branches) throws OseeDataStoreException {
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(String.format(BRANCHES_WITH_ONLY_ATTR, SupportedDatabase.getComplementSql()), attrId1,
+ attrId2);
+ while (chStmt.next()) {
+ branches.add(new Integer(chStmt.getInt("branch_id")));
+ }
+ } finally {
+ chStmt.close();
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DuplicateRelationCheck.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DuplicateRelationCheck.java
new file mode 100644
index 00000000000..81a8e5622ef
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/DuplicateRelationCheck.java
@@ -0,0 +1,314 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import java.sql.Timestamp;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+
+/**
+ * @author Theron Virgin
+ */
+public class DuplicateRelationCheck extends DatabaseHealthTask {
+ private class LocalRelationLink {
+ public int relLinkId1;
+ public int relLinkId2;
+ public int transactionId1;
+ public int transactionId2;
+ public int gammaId1;
+ public int gammaId2;
+ public int branchId;
+ public String branch;
+ public int parentArtId1;
+ public int parentArtId2;
+ public int childArtId;
+ public String parentArt1;
+ public String parentArt2;
+ public String childArt;
+ public Timestamp time1;
+ public Timestamp time2;
+ public int archived;
+ public boolean deleteByTimeStamp;
+ public String author1;
+ public String author2;
+
+ public LocalRelationLink(int branchId, int childArtId, int gammaId1, int gammaId2, int parentArtId1, int parentArtId2, int relLinkId1, int relLinkId2, Timestamp time1, Timestamp time2, int transactionId1, int transactionId2, int archived) {
+ super();
+ this.branchId = branchId;
+ this.childArtId = childArtId;
+ this.gammaId1 = gammaId1;
+ this.gammaId2 = gammaId2;
+ this.parentArtId1 = parentArtId1;
+ this.parentArtId2 = parentArtId2;
+ this.relLinkId1 = relLinkId1;
+ this.relLinkId2 = relLinkId2;
+ this.time1 = time1;
+ this.time2 = time2;
+ this.transactionId1 = transactionId1;
+ this.transactionId2 = transactionId2;
+ this.archived = archived;
+ this.deleteByTimeStamp = true;
+ author1 = "";
+ author2 = "";
+ }
+ }
+
+ private static final String GET_DUPLICATE_DEFAULT_HIER_LINKS =
+ "SELECT rel1.rel_link_id as Link_ID_1, rel2.rel_link_id as Link_ID_2, rel1.a_art_id As Parent_Id_1, rel2.a_art_id As Parent_Id_2, rel2.b_art_id As Child_ID, det1.branch_id, det1.time as Time_1 , det2.time as Time_2, bra.archived, txs1.gamma_id as Gamma1, txs2.gamma_id as Gamma2, txs1.transaction_id as transaction_1, txs2.transaction_id as transaction_2 FROM osee_branch bra, osee_relation_link rel1, osee_relation_link rel2, osee_txs txs1, osee_txs txs2, osee_tx_details det1, osee_tx_details det2, osee_relation_link_type typ where typ.type_name = 'Default Hierarchical' AND rel1.rel_link_type_id = typ.rel_link_type_id AND rel2.rel_link_type_id = typ.rel_link_type_id AND rel1.a_art_id < rel2.a_art_id AND rel1.b_art_id = rel2.b_art_id AND rel1.gamma_id = txs1.gamma_id AND txs1.tx_current = 1 AND txs2.tx_current = 1 AND txs1.transaction_id = det1.transaction_id AND det1.branch_id = det2.branch_id AND det2.transaction_id = txs2.transaction_id AND txs2.gamma_id = rel2.gamma_id AND bra.branch_id = det1.branch_id order by rel1.b_art_id, txs1.transaction_id";
+
+ // private static final String DELETE_LINKS =
+ // "UPDATE osee_txs set tx_current = 2, mod_type = 3 WHERE transaction_id = ? AND gamma_id = ?";
+
+ private static final String GET_AUTHOR =
+ "Select attr.Value FROM osee_attribute attr, osee_tx_details det, osee_attribute_type typ, osee_txs txs WHERE det.transaction_id = ? AND det.author = attr.art_id AND attr.attr_type_id = typ.attr_type_id AND typ.name = 'Name' AND attr.gamma_id = txs.gamma_id and txs.tx_current = 1";
+
+ private static final String GET_ARTIFACT_NAME =
+ "Select attr.Value FROM osee_attribute attr, osee_attribute_type typ, osee_txs txs WHERE attr.art_id = ? AND attr.attr_type_id = typ.attr_type_id AND typ.name = 'Name' AND attr.gamma_id = txs.gamma_id and txs.tx_current = 1";
+
+ private static final String GET_BRANCH_NAME = "Select branch_name from osee_branch where branch_id = ?";
+
+ private static final String[] columnHeaders =
+ new String[] {"Rel Link ID 1", "Rel Link ID 2", "Parent Art ID 1", "P1 Art Name", "Parent Art ID 2",
+ "P2 Art Name", "Child Art ID", "Child Art Name", "Branch Ids", "Branch Name", "Archived", "Author 1",
+ "Author 2"};
+
+ private static final String HEADER = "Artifacts that have multiple Parents";
+
+ private List<LocalRelationLink> relations = null;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#getFixTaskName()
+ */
+ @Override
+ public String getFixTaskName() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#getVerifyTaskName()
+ */
+ @Override
+ public String getVerifyTaskName() {
+ return "Check for Multiple Parent Errors";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#run(org.eclipse.osee.framework.ui.skynet.blam.BlamVariableMap, org.eclipse.core.runtime.IProgressMonitor, org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask.Operation, java.lang.StringBuilder, boolean)
+ */
+ @Override
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+
+ boolean fix = false;
+ boolean verify = true;
+ monitor.beginTask(fix ? getFixTaskName() : getVerifyTaskName(), 100);
+
+ if (verify || relations == null) {
+ relations = new LinkedList<LocalRelationLink>();
+ monitor.subTask("Finding Artifacts with Multiple Parents");
+ loadData();
+ monitor.worked(50);
+ }
+
+ Map<Integer, List<Integer>> branches = new HashMap<Integer, List<Integer>>();
+ if (showDetails) {
+ List<Integer> linksfound = new LinkedList<Integer>();
+ monitor.subTask("Finding Authors");
+ for (LocalRelationLink link : relations) {
+ List<Integer> branchs = branches.get(link.relLinkId1);
+ if (branchs == null) {
+ branchs = new LinkedList<Integer>();
+ branches.put(link.relLinkId1, branchs);
+ }
+ branchs.add(link.branchId);
+ if (!link.time1.equals(link.time2)) {
+ linksfound.add(link.relLinkId1);
+ linksfound.add(link.relLinkId2);
+ setAuthors(link);
+ setData(link);
+ }
+ }
+ for (LocalRelationLink link : relations) {
+ if (link.time1.equals(link.time2)) {
+ if (!(linksfound.contains(link.relLinkId1) && linksfound.contains(link.relLinkId2))) {
+ link.author1 = "baseline not found";
+ link.author2 = "baseline not found";
+ setData(link);
+ linksfound.add(link.relLinkId1);
+ linksfound.add(link.relLinkId2);
+ }
+
+ }
+ }
+ StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ sbFull.append(AHTML.beginMultiColumnTable(100, 1));
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ displayData(sbFull, builder, verify, false, branches);
+ sbFull.append(AHTML.endMultiColumnTable());
+ XResultData rd = new XResultData();
+ rd.addRaw(sbFull.toString());
+ rd.report(getVerifyTaskName(), Manipulations.RAW_HTML);
+
+ sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ sbFull.append(AHTML.beginMultiColumnTable(100, 1));
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ displayData(sbFull, builder, verify, true, branches);
+ sbFull.append(AHTML.endMultiColumnTable());
+ rd = new XResultData();
+ rd.addRaw(sbFull.toString());
+ rd.report(getVerifyTaskName() + " Verbose", Manipulations.RAW_HTML);
+ }
+ int numberDeleted = 0;
+ if (fix) {
+ // List<Integer> linksToDelete = new LinkedList<Integer>();
+ // for (LocalRelationLink link : relations) {
+ // if (!link.time1.equals(link.time2)) {
+ // boolean deleteFirst = link.time1.before(link.time2);
+ // numberDeleted +=
+ // ConnectionHandler.runPreparedUpdate(DELETE_LINKS,
+ // deleteFirst ? link.transactionId1 : link.transactionId2,
+ // deleteFirst ? link.gammaId1 : link.gammaId2);
+ // linksToDelete.add(deleteFirst ? link.relLinkId1 : link.relLinkId2);
+ // }
+ // }
+ // monitor.worked(25);
+ // for (LocalRelationLink link : relations) {
+ // if (link.time1.equals(link.time2)) {
+ // int toDelete = 0;
+ // for (Integer integer : linksToDelete) {
+ // if (integer.intValue() == link.relLinkId1) {
+ // toDelete = 1;
+ // } else if (integer.intValue() == link.relLinkId2) {
+ // toDelete = 2;
+ // }
+ // }
+ // if (toDelete == 0) {
+ // link.deleteByTimeStamp = false;
+ // toDelete = link.gammaId1 < link.gammaId2 ? 1 : 2;
+ // }
+ // boolean deleteFirst = toDelete == 1;
+ // numberDeleted +=
+ // ConnectionHandler.runPreparedUpdate(DELETE_LINKS,
+ // deleteFirst ? link.transactionId1 : link.transactionId2,
+ // deleteFirst ? link.gammaId1 : link.gammaId2);
+ // }
+ // }
+ // relations = null;
+ // monitor.worked(25);
+ }
+
+ builder.append(String.format(
+ "%s %d Artifacts with multiple Parents on %d total branches : Updated %d txs Entries\n",
+ verify ? "Found" : "Fixed", branches.size(), relations.size(), numberDeleted));
+ }
+
+ //{"Rel Link ID 1", "Rel Link ID 2", "Parent Art ID 1", "Parent Art ID 2", "Child Art ID",
+ // "Branch_id", "Archived"};
+ private void displayData(StringBuffer sbFull, StringBuilder builder, boolean verify, boolean displayAll, Map<Integer, List<Integer>> branches) {
+ int count = 0;
+ sbFull.append(AHTML.addRowSpanMultiColumnTable(HEADER, columnHeaders.length));
+ for (LocalRelationLink relLink : relations) {
+ if (!relLink.author1.equals("")) {
+ count++;
+ sbFull.append(AHTML.addRowMultiColumnTable(new String[] {Integer.toString(relLink.relLinkId1),
+ Integer.toString(relLink.relLinkId2), Integer.toString(relLink.parentArtId1), relLink.parentArt1,
+ Integer.toString(relLink.parentArtId2), relLink.parentArt2, Integer.toString(relLink.childArtId),
+ relLink.childArt,
+ displayAll ? branches.get(relLink.relLinkId1).toString() : Integer.toString(relLink.branchId),
+ relLink.branch, Integer.toString(relLink.archived), relLink.author1, relLink.author2}));
+ }
+ }
+ }
+
+ //public LocalRelationLink(int branchId, int childArtId, int gammaId1, int gammaId2, int parentArtId1, int parentArtId2,
+ //int relLinkId1, int relLinkId2, Timestamp time1, Timestamp time2, int transactionId1, int transactionId2) {
+
+ private void loadData() throws OseeDataStoreException {
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(GET_DUPLICATE_DEFAULT_HIER_LINKS);
+ while (chStmt.next()) {
+ relations.add(new LocalRelationLink(chStmt.getInt("branch_id"), chStmt.getInt("child_id"),
+ chStmt.getInt("gamma1"), chStmt.getInt("gamma2"), chStmt.getInt("parent_id_1"),
+ chStmt.getInt("parent_id_2"), chStmt.getInt("link_id_1"), chStmt.getInt("link_id_2"),
+ chStmt.getTimestamp("time_1"), chStmt.getTimestamp("time_2"), chStmt.getInt("transaction_1"),
+ chStmt.getInt("transaction_2"), chStmt.getInt("archived")));
+ }
+ } finally {
+ chStmt.close();
+ }
+ }
+
+ private void setAuthors(LocalRelationLink link) throws OseeDataStoreException {
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(GET_AUTHOR, link.transactionId1);
+ if (chStmt.next()) {
+ link.author1 = chStmt.getString("value");
+ }
+ } finally {
+ chStmt.close();
+ }
+ try {
+ chStmt.runPreparedQuery(GET_AUTHOR, link.transactionId2);
+ if (chStmt.next()) {
+ link.author2 = chStmt.getString("value");
+ }
+ } finally {
+ chStmt.close();
+ }
+ }
+
+ private void setData(LocalRelationLink link) throws OseeDataStoreException {
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(GET_ARTIFACT_NAME, link.parentArtId1);
+ if (chStmt.next()) {
+ link.parentArt1 = chStmt.getString("value");
+ }
+ } finally {
+ chStmt.close();
+ }
+ try {
+ chStmt.runPreparedQuery(GET_ARTIFACT_NAME, link.parentArtId2);
+ if (chStmt.next()) {
+ link.parentArt2 = chStmt.getString("value");
+ }
+ } finally {
+ chStmt.close();
+ }
+ try {
+ chStmt.runPreparedQuery(GET_ARTIFACT_NAME, link.childArtId);
+ if (chStmt.next()) {
+ link.childArt = chStmt.getString("value");
+ }
+ } finally {
+ chStmt.close();
+ }
+ try {
+ chStmt.runPreparedQuery(GET_BRANCH_NAME, link.branchId);
+ if (chStmt.next()) {
+ link.branch = chStmt.getString("branch_name");
+ }
+
+ } finally {
+ chStmt.close();
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/HealthHelper.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/HealthHelper.java
new file mode 100644
index 00000000000..96e91418348
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/HealthHelper.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.info.SupportedDatabase;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+
+/**
+ * @author Theron Virgin
+ */
+public class HealthHelper {
+ public static final String ALL_BACKING_GAMMAS =
+ "(SELECT gamma_id FROM osee_artifact_version UNION SELECT gamma_id FROM osee_attribute UNION SELECT gamma_id FROM osee_relation_link)";
+
+ private static final String[] NO_TX_CURRENT_SET =
+ {
+ "SELECT distinct t1.",
+ ", det.branch_id FROM osee_tx_details det, osee_txs txs, ",
+ " t1 WHERE det.transaction_id = txs.transaction_id AND txs.gamma_id = t1.gamma_id AND txs.tx_current = 0 %s SELECT distinct t2.",
+ ", det.branch_id FROM osee_tx_details det, osee_txs txs, ",
+ " t2 WHERE det.transaction_id = txs.transaction_id AND txs.gamma_id = t2.gamma_id AND txs.tx_current != 0"};
+
+ private static final String[] MULTIPLE_TX_CURRENT_SET =
+ {
+ "SELECT resulttable.branch_id, resulttable.",
+ ", COUNT(resulttable.branch_id) AS numoccurrences FROM (SELECT txd1.branch_id, t1.",
+ " FROM osee_tx_details txd1, osee_txs txs1, ",
+ " t1 WHERE txd1.transaction_id = txs1.transaction_id AND txs1.gamma_id = t1.gamma_id AND txs1.tx_current != 0) resulttable GROUP BY resulttable.branch_id, resulttable.",
+ " HAVING(COUNT(resulttable.branch_id) > 1) order by branch_id"};
+
+ private static final String[] NO_TX_CURRENT_CLEANUP =
+ {
+ "UPDATE osee_txs set tx_current = CASE WHEN mod_type = 3 THEN 2 WHEN mod_type = 5 THEN 3 ELSE 1 END WHERE (gamma_id, transaction_id) = (SELECT txs1.gamma_id, txs1.transaction_id FROM osee_txs txs1, ",
+ " t1 WHERE t1.",
+ " = ? AND t1.gamma_id = txs1.gamma_id AND txs1.transaction_id = (SELECT max(txs.transaction_id) FROM osee_tx_details det, osee_txs txs, ",
+ " t2 WHERE det.branch_id = ? AND det.transaction_id = txs.transaction_id AND txs.gamma_id = t2.gamma_id AND t2.",
+ " = ?))"};
+
+ private static final String[] DUPLICATE_TX_CURRENT_CLEANUP =
+ {
+ "UPDATE osee_txs set tx_current = 0 WHERE (gamma_id, transaction_id) in (SELECT txs1.gamma_id, txs1.transaction_id FROM osee_txs txs1, ",
+ " t1 WHERE t1.",
+ " = ? AND t1.gamma_id = txs1.gamma_id AND txs1.transaction_id != (SELECT max(txs.transaction_id) FROM osee_tx_details det, osee_txs txs, ",
+ " t2 WHERE det.branch_id = ? AND txs.tx_current != 0 AND det.transaction_id = txs.transaction_id AND txs.gamma_id = t2.gamma_id AND t2.",
+ " = ?))"};
+
+ private static final boolean DEBUG =
+ "TRUE".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.osee.framework.ui.skynet/debug/Blam"));
+
+ public static void displayForCleanUp(String header, StringBuffer sbFull, StringBuilder builder, boolean verify, List<Object[]> set, String toPrint) {
+ int count = 0;
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(new String[] {header}));
+ sbFull.append(AHTML.addRowSpanMultiColumnTable(header + toPrint, 1));
+ for (Object[] value : set) {
+ count++;
+ sbFull.append(AHTML.addRowMultiColumnTable(new String[] {value[0].toString()}));
+ }
+ builder.append(verify ? "Found " : "Fixed ");
+ builder.append(count);
+ builder.append(" ");
+ builder.append(header);
+ builder.append(toPrint);
+ }
+
+ public static List<Object[]> runSingleResultQuery(String sql, String dbColumn) throws OseeCoreException {
+ List<Object[]> foundItems = new LinkedList<Object[]>();
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(sql);
+ while (chStmt.next()) {
+ foundItems.add(new Object[] {chStmt.getInt(dbColumn)});
+ }
+ } finally {
+ chStmt.close();
+ }
+ return foundItems;
+ }
+
+ public static void endTable(StringBuffer sbFull, String taskName) {
+ sbFull.append(AHTML.endMultiColumnTable());
+ XResultData rd = new XResultData();
+ rd.addRaw(sbFull.toString());
+ rd.report(taskName, Manipulations.RAW_HTML);
+
+ }
+
+ public static HashSet<Pair<Integer, Integer>> getNoTxCurrentSet(String dataId, String dataTable, StringBuilder builder, String data) throws OseeCoreException {
+ String sql =
+ NO_TX_CURRENT_SET[0] + dataId + NO_TX_CURRENT_SET[1] + dataTable + String.format(NO_TX_CURRENT_SET[2],
+ SupportedDatabase.getComplementSql()) + dataId + NO_TX_CURRENT_SET[3] + dataTable + NO_TX_CURRENT_SET[4];
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ HashSet<Pair<Integer, Integer>> noneSet = new HashSet<Pair<Integer, Integer>>();
+
+ long time = System.currentTimeMillis();
+ try {
+ chStmt.runPreparedQuery(sql);
+ while (chStmt.next()) {
+ noneSet.add(new Pair<Integer, Integer>(chStmt.getInt(dataId), chStmt.getInt("branch_id")));
+ }
+ } finally {
+ chStmt.close();
+ }
+ builder.append("Found ");
+ builder.append(noneSet.size());
+ builder.append(data);
+ builder.append(" that have no tx_current value set\n");
+ if (DEBUG) {
+ System.out.println(String.format("%sTxCurrent: The get No TX Set Query took %s", data,
+ Lib.getElapseString(time)));
+ }
+ return noneSet;
+ }
+
+ public static HashSet<LocalTxData> getMultipleTxCurrentSet(String dataId, String dataTable, StringBuilder builder, String data) throws OseeCoreException {
+ String sql =
+ MULTIPLE_TX_CURRENT_SET[0] + dataId + MULTIPLE_TX_CURRENT_SET[1] + dataId + MULTIPLE_TX_CURRENT_SET[2] + dataTable + MULTIPLE_TX_CURRENT_SET[3] + dataId + MULTIPLE_TX_CURRENT_SET[4];
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ HashSet<LocalTxData> multipleSet = new HashSet<LocalTxData>();
+
+ long time = System.currentTimeMillis();
+ try {
+ chStmt.runPreparedQuery(sql);
+ while (chStmt.next()) {
+ multipleSet.add(new LocalTxData(chStmt.getInt(dataId), chStmt.getInt("branch_id"),
+ chStmt.getInt("numoccurrences")));
+ }
+ builder.append("Found ");
+ builder.append(multipleSet.size());
+ builder.append(data);
+ builder.append(" that have multiple tx_current values set\n");
+
+ } finally {
+ chStmt.close();
+ }
+ if (DEBUG) {
+ System.out.println(String.format("%sTxCurrent: The get%s Query took %s", data, data, Lib.getElapseString(time)));
+ }
+ return multipleSet;
+ }
+
+ public static void cleanMultipleTxCurrent(String dataId, String dataTable, StringBuilder builder, HashSet<LocalTxData> multipleSet) throws OseeCoreException {
+ String sql =
+ DUPLICATE_TX_CURRENT_CLEANUP[0] + dataTable + DUPLICATE_TX_CURRENT_CLEANUP[1] + dataId + DUPLICATE_TX_CURRENT_CLEANUP[2] + dataTable + DUPLICATE_TX_CURRENT_CLEANUP[3] + dataId + DUPLICATE_TX_CURRENT_CLEANUP[4];
+
+ List<Object[]> insertParameters = new LinkedList<Object[]>();
+
+ for (LocalTxData link : multipleSet) {
+ insertParameters.add(new Object[] {link.dataId, link.branchId, link.dataId});
+ }
+ int total = 0;
+ if (insertParameters.size() > 0) {
+ total = ConnectionHandler.runBatchUpdate(sql, insertParameters);
+ }
+ builder.append("Fixed " + total + " Tx_Current duplication errors\n");
+ }
+
+ public static void cleanNoTxCurrent(String dataId, String dataTable, StringBuilder builder, HashSet<Pair<Integer, Integer>> noneSet) throws OseeCoreException {
+ String sql =
+ NO_TX_CURRENT_CLEANUP[0] + dataTable + NO_TX_CURRENT_CLEANUP[1] + dataId + NO_TX_CURRENT_CLEANUP[2] + dataTable + NO_TX_CURRENT_CLEANUP[3] + dataId + NO_TX_CURRENT_CLEANUP[4];
+
+ List<Object[]> insertParameters = new LinkedList<Object[]>();
+
+ for (Pair<Integer, Integer> pair : noneSet) {
+ insertParameters.add(new Object[] {pair.getKey(), pair.getValue(), pair.getKey()});
+ }
+ int total = 0;
+ if (insertParameters.size() > 0) {
+ total = ConnectionHandler.runBatchUpdate(sql, insertParameters);
+ }
+ builder.append("Fixed " + total + " Tx_Current not set errors\n");
+ }
+
+ public static void dumpDataNone(StringBuffer sbFull, HashSet<Pair<Integer, Integer>> noneSet) {
+ int counter = 0;
+ for (Pair<Integer, Integer> pairs : noneSet) {
+ sbFull.append(AHTML.addRowMultiColumnTable(new String[] {String.valueOf(counter++),
+ String.valueOf(pairs.getKey()), String.valueOf(pairs.getValue())}));
+ }
+ }
+
+ public static void dumpDataMultiple(StringBuffer sbFull, HashSet<LocalTxData> multipleSet) {
+ int counter = 0;
+ for (LocalTxData link : multipleSet) {
+ sbFull.append(AHTML.addRowMultiColumnTable(new String[] {String.valueOf(counter++),
+ String.valueOf(link.dataId), String.valueOf(link.branchId), String.valueOf(link.number)}));
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/LocalTxData.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/LocalTxData.java
new file mode 100644
index 00000000000..6cf9e89a177
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/LocalTxData.java
@@ -0,0 +1,22 @@
+/*
+ * Created on Oct 3, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+/**
+ * @author Theron Virgin
+ */
+public class LocalTxData {
+ public int dataId;
+ public int branchId;
+ public int number;
+
+ public LocalTxData(int dataId, int branchId, int number) {
+ super();
+ this.branchId = branchId;
+ this.dataId = dataId;
+ this.number = number;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RelLinkTxCurrent.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RelLinkTxCurrent.java
new file mode 100644
index 00000000000..96d6b45a5f5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RelLinkTxCurrent.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import java.util.HashSet;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Theron Virgin
+ */
+public class RelLinkTxCurrent extends DatabaseHealthTask {
+ private HashSet<LocalTxData> multipleSet = null;
+ private HashSet<Pair<Integer, Integer>> noneSet = null;
+
+ public String getFixTaskName() {
+ return "Fix TX_Current Relation Link Errors";
+ }
+
+ public String getVerifyTaskName() {
+ return "Check for TX_Current Relation Link Errors";
+ }
+
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+ monitor.beginTask("Verify TX_Current Relation Link Errors", 100);
+ String[] columnHeaders = new String[] {"Count", "Rel Link Id", "Branch id"};
+ StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ if (showDetails) {
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ sbFull.append(AHTML.addRowSpanMultiColumnTable("Relation Links with no tx_current set", columnHeaders.length));
+ }
+ if (operation.equals(Operation.Verify) || noneSet == null) {
+ noneSet = HealthHelper.getNoTxCurrentSet("rel_link_id", "osee_relation_link", builder, " Relation Links");
+ monitor.worked(15);
+ if (monitor.isCanceled()) return;
+ }
+ if (showDetails) {
+ HealthHelper.dumpDataNone(sbFull, noneSet);
+ columnHeaders = new String[] {"Count", "Relation Link id", "Branch id", "Num TX_Currents"};
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ sbFull.append(AHTML.addRowSpanMultiColumnTable("Relation Links with multiple tx_currents set",
+ columnHeaders.length));
+ }
+ if (operation.equals(Operation.Verify) || multipleSet == null) {
+ //Multiple TX Currents Set
+ multipleSet =
+ HealthHelper.getMultipleTxCurrentSet("rel_link_id", "osee_relation_link", builder, " Relation Links");
+ }
+ if (showDetails) {
+ HealthHelper.dumpDataMultiple(sbFull, multipleSet);
+ }
+
+ if (operation.equals(Operation.Fix)) {
+ /** Duplicate TX_current Cleanup **/
+ monitor.worked(10);
+ monitor.subTask("Cleaning up multiple Tx_currents");
+ HealthHelper.cleanMultipleTxCurrent("rel_link_id", "osee_relation_link", builder, multipleSet);
+ monitor.worked(20);
+ monitor.subTask("Cleaning up multiple Tx_currents");
+ HealthHelper.cleanNoTxCurrent("rel_link_id", "osee_relation_link", builder, noneSet);
+ multipleSet = null;
+ noneSet = null;
+ }
+
+ if (showDetails) {
+ HealthHelper.endTable(sbFull, getVerifyTaskName());
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RelationDatabaseIntegrityCheck.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RelationDatabaseIntegrityCheck.java
new file mode 100644
index 00000000000..bc7222a9446
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RelationDatabaseIntegrityCheck.java
@@ -0,0 +1,228 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import java.util.LinkedList;
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.core.enums.ModificationType;
+import org.eclipse.osee.framework.core.enums.TxChange;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.jdk.core.type.DoubleKeyHashMap;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+
+/**
+ * @author Theron Virgin
+ */
+public class RelationDatabaseIntegrityCheck extends DatabaseHealthTask {
+ private class LocalRelationLink {
+ public int relLinkId;
+ public int gammaId;
+ public int transactionId;
+ public int branchId;
+ public int aArtId;
+ public int bArtId;
+ public int transIdForArtifactDeletion;
+
+ public LocalRelationLink(int relLinkId, int gammaId, int transactionId, int branchId, int aArtId, int bArtId, int transIdForArtifactDeletion) {
+ super();
+ this.aArtId = aArtId;
+ this.bArtId = bArtId;
+ this.branchId = branchId;
+ this.gammaId = gammaId;
+ this.relLinkId = relLinkId;
+ this.transactionId = transactionId;
+ this.transIdForArtifactDeletion = transIdForArtifactDeletion;
+ }
+ }
+
+ private static final String NO_ADDRESSING_ARTIFACTS_A =
+ "SELECT tx1.gamma_id, tx1.transaction_id, rel1.rel_link_id, td1.branch_id, rel1.a_art_id, rel1.b_art_id, 0 as deleted_tran FROM osee_txs tx1, osee_tx_details td1, osee_relation_link rel1 WHERE td1.transaction_id = tx1.transaction_id AND tx1.gamma_id = rel1.gamma_id AND not exists (select 'x' from osee_txs tx2, osee_tx_details td2, osee_artifact_version av1 where td1.branch_id = td2.branch_id and td2.transaction_id = tx2.transaction_id and tx2.gamma_id = av1.gamma_id and av1.art_id = rel1.a_art_id)";
+
+ private static final String NO_ADDRESSING_ARTIFACTS_B =
+ "SELECT tx1.gamma_id, tx1.transaction_id, rel1.rel_link_id, td1.branch_id, rel1.a_art_id, rel1.b_art_id, 0 as deleted_tran from osee_txs tx1, osee_tx_details td1, osee_relation_link rel1 where td1.transaction_id = tx1.transaction_id AND tx1.gamma_id = rel1.gamma_id AND not exists (select 'x' from osee_txs tx2, osee_tx_details td2, osee_artifact_version av1 where td1.branch_id = td2.branch_id and td2.transaction_id = tx2.transaction_id and tx2.gamma_id = av1.gamma_id and av1.art_id = rel1.b_art_id)";
+
+ private static final String DELETED_A_ARTIFACTS =
+ "SELECT tx1.gamma_id, tx1.transaction_id, rel1.rel_link_id, td1.branch_id, rel1.a_art_id, rel1.b_art_id, tx2.transaction_id as deleted_tran from osee_txs tx1, osee_txs tx2, osee_tx_details td1, osee_tx_details td2, osee_relation_link rel1, osee_artifact_version av1 WHERE tx1.transaction_id = td1.transaction_id and tx1.gamma_id = rel1.gamma_id and tx1.tx_current = 1 and td1.branch_id = td2.branch_id and td2.transaction_id = tx2.transaction_id and tx2.gamma_id = av1.gamma_id and tx2.tx_current = 2 and av1.art_id = rel1.a_art_id";
+
+ private static final String DELETED_B_ARTIFACTS =
+ "SELECT tx1.gamma_id, tx1.transaction_id, rel1.rel_link_id, td1.branch_id, rel1.a_art_id, rel1.b_art_id, tx2.transaction_id as deleted_tran from osee_txs tx1, osee_txs tx2, osee_tx_details td1, osee_tx_details td2, osee_relation_link rel1, osee_artifact_version av1 WHERE tx1.transaction_id = td1.transaction_id and tx1.gamma_id = rel1.gamma_id and tx1.tx_current = 1 and td1.branch_id = td2.branch_id and td2.transaction_id = tx2.transaction_id and tx2.gamma_id = av1.gamma_id and tx2.tx_current = 2 and av1.art_id = rel1.b_art_id";
+
+ private static final String DELETE_FROM_TXS = "DELETE FROM osee_txs where gamma_id = ? AND transaction_id = ?";
+
+ private static final String UPDATE_TXS =
+ "UPDATE osee_txs SET tx_current = 0 WHERE gamma_id = ? AND transaction_id = ?";
+
+ private static final String UPDATE_TXS_SAME =
+ "UPDATE osee_txs SET tx_current = " + TxChange.ARTIFACT_DELETED.getValue() + ", mod_type = " + ModificationType.ARTIFACT_DELETED.getValue() + " WHERE gamma_id = ? AND transaction_id = ?";
+
+ private static final String INSERT_TXS =
+ "INSERT INTO osee_txs (gamma_id, transaction_id, tx_current, mod_type) VALUES (?, ?, " + TxChange.ARTIFACT_DELETED.getValue() + ", " + ModificationType.ARTIFACT_DELETED.getValue() + ")";
+
+ private static final String[] columnHeaders =
+ new String[] {"Rel Link ID", "Gamma Id", "Transaction Id", "Branch_id", "A Art Id", "B Art Id",
+ "Transaction ID of Deleted Artifact"};
+
+ private static final String[] DESCRIPTION =
+ {" Relation Links with non existant Artifacts on the Branch\n",
+ " Relation Links with deleted Artifacts on the Branch\n"};
+
+ private static final String[] HEADER =
+ {"Relation Links that have artifacts that don't exist on the branch",
+ "Relation Links that have artifacts that are deleted on the branch"};
+
+ private DoubleKeyHashMap<Integer, Integer, LocalRelationLink> deleteMap = null;
+ private DoubleKeyHashMap<Integer, Integer, LocalRelationLink> updateMap = null;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#getFixTaskName()
+ */
+ @Override
+ public String getFixTaskName() {
+ return "Fix Relation Integrity Errors";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#getVerifyTaskName()
+ */
+ @Override
+ public String getVerifyTaskName() {
+ return "Check for Relation Integrity Errors";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#run(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.core.runtime.IProgressMonitor, org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask.Operation, java.lang.StringBuilder, boolean)
+ */
+ @Override
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+ StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ boolean fix = operation == Operation.Fix;
+ boolean verify = !fix;
+ monitor.beginTask(fix ? getFixTaskName() : getVerifyTaskName(), 100);
+
+ if (verify || deleteMap == null) {
+ deleteMap = new DoubleKeyHashMap<Integer, Integer, LocalRelationLink>();
+ monitor.subTask("Loading Relations with non existant artifacts on the A side");
+ loadData(NO_ADDRESSING_ARTIFACTS_A, true);
+ monitor.worked(15);
+ monitor.subTask("Loading Relations with non existant artifacts on the B side");
+ loadData(NO_ADDRESSING_ARTIFACTS_B, true);
+ monitor.worked(15);
+ }
+ if (verify || updateMap == null) {
+ updateMap = new DoubleKeyHashMap<Integer, Integer, LocalRelationLink>();
+ monitor.subTask("Loading Relations with Deleted artifacts on the A side");
+ loadData(DELETED_A_ARTIFACTS, false);
+ monitor.worked(15);
+ monitor.subTask("Loading Relations with Deleted artifacts on the B side");
+ loadData(DELETED_B_ARTIFACTS, false);
+ monitor.worked(15);
+ }
+
+ sbFull.append(AHTML.beginMultiColumnTable(100, 1));
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ displayData(0, sbFull, builder, verify, deleteMap);
+ monitor.worked(10);
+ displayData(1, sbFull, builder, verify, updateMap);
+ monitor.worked(10);
+
+ if (fix) {
+ List<Object[]> insertParameters = new LinkedList<Object[]>();
+ for (LocalRelationLink relLink : deleteMap.allValues()) {
+ insertParameters.add(new Object[] {relLink.gammaId, relLink.transactionId});
+ }
+ monitor.subTask("Deleting Relation Addressing with non existant Artifacts");
+ if (insertParameters.size() != 0) {
+ ConnectionHandler.runBatchUpdate(DELETE_FROM_TXS, insertParameters);
+ }
+ deleteMap = null;
+ monitor.worked(10);
+
+ insertParameters.clear();
+ List<Object[]> insertParametersInsert = new LinkedList<Object[]>();
+ List<Object[]> insertParametersTransaction = new LinkedList<Object[]>();
+ for (LocalRelationLink relLink : updateMap.allValues()) {
+ insertParameters.add(new Object[] {relLink.gammaId, relLink.transactionId});
+ if (relLink.transactionId == relLink.transIdForArtifactDeletion) {
+ insertParametersTransaction.add(new Object[] {relLink.gammaId, relLink.transIdForArtifactDeletion});
+ } else if (relLink.transactionId > relLink.transIdForArtifactDeletion) {
+ insertParametersTransaction.add(new Object[] {relLink.gammaId, relLink.transactionId});
+ } else {
+ insertParametersInsert.add(new Object[] {relLink.gammaId, relLink.transIdForArtifactDeletion});
+ }
+ }
+
+ monitor.subTask("Inserting Addressing for Deleted Artifacts");
+ if (insertParametersInsert.size() != 0) {
+ ConnectionHandler.runBatchUpdate(INSERT_TXS, insertParametersInsert);
+ }
+ monitor.worked(5);
+ monitor.subTask("Updating Addressing for Deleted Artifacts");
+ if (insertParameters.size() != 0) {
+ ConnectionHandler.runBatchUpdate(UPDATE_TXS, insertParameters);
+ }
+ if (insertParametersTransaction.size() != 0) {
+ ConnectionHandler.runBatchUpdate(UPDATE_TXS_SAME, insertParametersTransaction);
+ }
+ monitor.worked(5);
+ updateMap = null;
+ }
+
+ if (showDetails) {
+ sbFull.append(AHTML.endMultiColumnTable());
+ XResultData rd = new XResultData();
+ rd.addRaw(sbFull.toString());
+ rd.report(getVerifyTaskName(), Manipulations.RAW_HTML);
+ }
+ }
+
+ private void displayData(int x, StringBuffer sbFull, StringBuilder builder, boolean verify, DoubleKeyHashMap<Integer, Integer, LocalRelationLink> map) {
+ int count = 0;
+ sbFull.append(AHTML.addRowSpanMultiColumnTable(HEADER[x], columnHeaders.length));
+ for (LocalRelationLink relLink : map.allValues()) {
+ count++;
+ sbFull.append(AHTML.addRowMultiColumnTable(new String[] {Integer.toString(relLink.relLinkId),
+ Integer.toString(relLink.gammaId), Integer.toString(relLink.transactionId),
+ Integer.toString(relLink.branchId), Integer.toString(relLink.aArtId), Integer.toString(relLink.bArtId),
+ Integer.toString(relLink.transIdForArtifactDeletion)}));
+ }
+
+ builder.append(verify ? "Found " : "Fixed ");
+ builder.append(count);
+ builder.append(" ");
+ builder.append(DESCRIPTION[x]);
+ }
+
+ private void loadData(String sql, boolean forDelete) throws OseeDataStoreException {
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ DoubleKeyHashMap<Integer, Integer, LocalRelationLink> map = forDelete ? deleteMap : updateMap;
+ try {
+ chStmt.runPreparedQuery(sql);
+ while (chStmt.next()) {
+ if (!map.containsKey(chStmt.getInt("gamma_id"), chStmt.getInt("transaction_id")) && (forDelete || !deleteMap.containsKey(
+ chStmt.getInt("gamma_id"), chStmt.getInt("transaction_id")))) {
+ map.put(chStmt.getInt("gamma_id"), chStmt.getInt("transaction_id"), new LocalRelationLink(
+ chStmt.getInt("rel_link_id"), chStmt.getInt("gamma_id"), chStmt.getInt("transaction_id"),
+ chStmt.getInt("branch_id"), chStmt.getInt("a_art_id"), chStmt.getInt("b_art_id"),
+ chStmt.getInt("deleted_tran")));
+ }
+ }
+ } finally {
+ chStmt.close();
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RemoveAttributesWithoutArtifacts.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RemoveAttributesWithoutArtifacts.java
new file mode 100644
index 00000000000..8b79e1f46aa
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbHealth/RemoveAttributesWithoutArtifacts.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dbHealth;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class RemoveAttributesWithoutArtifacts extends DatabaseHealthTask {
+
+ private static final String SELECT_ATTRIBUTES_WITH_NO_ARTIFACTS =
+ "select tx1.transaction_id, tx1.gamma_id, td1.branch_id, att1.art_id, att1.attr_id from osee_txs tx1, osee_tx_Details td1, osee_attribute att1 where td1.transaction_id = tx1.transaction_id AND tx1.gamma_id = att1.gamma_id AND not exists (select 'x' from osee_txs tx2, osee_tx_details td2, osee_artifact_version av1 where td1.branch_id = td2.branch_id and td2.transaction_id = tx2.transaction_id and tx2.gamma_id = av1.gamma_id AND av1.art_id = att1.art_id) ";
+ private static final String DELETE_ATTRIBUTES = "delete from osee_txs where transaction_id = ? and gamma_id = ?";
+ private static final String[] columnHeaders =
+ new String[] {"Transaction id", "Gamma Id", "Branch_id", "Art Id", "Attribute Id"};
+ private static ArrayList<Integer[]> datas = new ArrayList<Integer[]>();
+ private static final String DESCRIPTION = "Attributes the do not have artifacts on the branch where they exist.";
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#getFixTaskName()
+ */
+ @Override
+ public String getFixTaskName() {
+ return "Fix Attributes with no Artifacts";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#getVerifyTaskName()
+ */
+ @Override
+ public String getVerifyTaskName() {
+ return "Check for Attributes with no Artifacts";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask#run(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.core.runtime.IProgressMonitor, org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask.Operation, java.lang.StringBuilder, boolean)
+ */
+ @Override
+ public void run(VariableMap variableMap, IProgressMonitor monitor, Operation operation, StringBuilder builder, boolean showDetails) throws Exception {
+ StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
+ sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
+ boolean fix = operation == Operation.Fix;
+ boolean verify = !fix;
+
+ try {
+ if (verify) {
+ loadData();
+ displayData(sbFull, builder, verify);
+ }
+
+ if (fix) {
+ if (datas.isEmpty()) {
+ loadData();
+ }
+ fixAttributes();
+ displayData(sbFull, builder, verify);
+ }
+ } finally {
+ if (showDetails) {
+ sbFull.append(AHTML.endMultiColumnTable());
+ XResultData rd = new XResultData();
+ rd.addRaw(sbFull.toString());
+ rd.report(getVerifyTaskName(), Manipulations.RAW_HTML);
+ }
+ }
+ }
+
+ private void loadData() throws OseeDataStoreException {
+ datas.clear();
+
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(SELECT_ATTRIBUTES_WITH_NO_ARTIFACTS);
+ int transactionNumber;
+ int gammaIdNumber;
+
+ while (chStmt.next()) {
+ transactionNumber = chStmt.getInt("transaction_id");
+ gammaIdNumber = chStmt.getInt("gamma_id");
+ datas.add(new Integer[] {transactionNumber, gammaIdNumber, chStmt.getInt("branch_id"),
+ chStmt.getInt("art_id"), chStmt.getInt("attr_id")});
+ }
+ } finally {
+ chStmt.close();
+ }
+
+ }
+
+ private void displayData(StringBuffer sbFull, StringBuilder builder, boolean verify) {
+ sbFull.append(AHTML.addRowSpanMultiColumnTable(DESCRIPTION, columnHeaders.length));
+ for (Integer[] data : datas) {
+ sbFull.append(AHTML.addRowMultiColumnTable(new String[] {String.valueOf(data[0]), String.valueOf(data[1]),
+ String.valueOf(data[2]), String.valueOf(data[3]), String.valueOf(data[4])}));
+ }
+ builder.append(verify ? "Found " : "Fixed ");
+ builder.append(datas.size());
+ builder.append(" Attributes that have no Artifacts\n");
+ }
+
+ private void fixAttributes() throws OseeDataStoreException {
+ List<Object[]> insertParameters = new LinkedList<Object[]>();
+ for (Integer[] data : datas) {
+ insertParameters.add(new Object[] {data[0], data[1]});
+ }
+ ConnectionHandler.runBatchUpdate(DELETE_ATTRIBUTES, insertParameters);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbinit/AddCommonBranch.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbinit/AddCommonBranch.java
new file mode 100644
index 00000000000..0a4bd4af53f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dbinit/AddCommonBranch.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.dbinit;
+
+import java.util.Arrays;
+import java.util.List;
+import org.eclipse.osee.framework.database.IDbInitializationTask;
+import org.eclipse.osee.framework.db.connection.OseeConnection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+
+/**
+ * This class creates the common branch and imports the appropriate skynet types. Class should be extended for plugins
+ * that require extra skynet types to be added to common.
+ *
+ * @author Donald G. Dunne
+ */
+public class AddCommonBranch implements IDbInitializationTask {
+ private final boolean initializeArtifacts;
+
+ public AddCommonBranch() {
+ this(true);
+ }
+
+ public AddCommonBranch(boolean initializeArtifacts) {
+ this.initializeArtifacts = initializeArtifacts;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.database.initialize.tasks.IDbInitializationTask#run(java.sql.Connection)
+ */
+ public void run(OseeConnection connection) throws OseeCoreException {
+ BranchManager.createSystemRootBranch();
+
+ // Create branch, import OSEE types and initialize
+ BranchManager.createRootBranch(null, Branch.COMMON_BRANCH_CONFIG_ID, Branch.COMMON_BRANCH_CONFIG_ID,
+ getSkynetDbTypeExtensionIds(), initializeArtifacts);
+ }
+
+ public List<String> getSkynetDbTypeExtensionIds() {
+ return Arrays.asList("org.eclipse.osee.framework.skynet.core.CommonBranch",
+ "org.eclipse.osee.framework.skynet.core.ProgramAndCommon", "org.eclipse.osee.ats.ATS_Skynet_Types");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.database.initialize.tasks.IDbInitializationTask#canRun()
+ */
+ public boolean canRun() {
+ return true;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dialogs/AuthenticationDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dialogs/AuthenticationDialog.java
new file mode 100644
index 00000000000..0c0035d09e3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dialogs/AuthenticationDialog.java
@@ -0,0 +1,246 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.dialogs;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.core.client.ClientSessionManager;
+import org.eclipse.osee.framework.core.exception.OseeAuthenticationException;
+import org.eclipse.osee.framework.core.exception.OseeAuthenticationException.AuthenticationErrorCode;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.IHealthStatus;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.ui.plugin.OseePluginUiActivator;
+import org.eclipse.osee.framework.ui.skynet.panels.AuthenticationComposite;
+import org.eclipse.osee.framework.ui.swt.OseeMessageDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class AuthenticationDialog extends OseeMessageDialog {
+
+ private Button okButton;
+ private Button cancelButton;
+ protected AuthenticationComposite authenticationComposite;
+ private boolean selectionOk;
+ private static final Image LOCK_AND_KEY = OseePluginUiActivator.getInstance().getImage("lockkey.gif");
+ private static final int MAX_RETRIES = 3;
+
+ public AuthenticationDialog(Shell parentShell) {
+ super(parentShell, "OSEE Authenticate", null, "Enter your user id (email address), password, and domain.",
+ LOCK_AND_KEY, new String[] {"Enter", "Cancel"}, 0);
+
+ selectionOk = false;
+ authenticationComposite = new AuthenticationComposite(parentShell, SWT.NONE, false);
+ }
+
+ @Override
+ protected Control createCustomArea(Composite parent) {
+ authenticationComposite.setParent(parent);
+ return authenticationComposite;
+ }
+
+ @Override
+ protected Control createButtonBar(Composite parent) {
+ Control c = super.createButtonBar(parent);
+ okButton = getButton(0);
+ cancelButton = getButton(1);
+
+ okButton.setEnabled(false);
+ okButton.addSelectionListener(authenticationComposite.getAuthenticateListener());
+ okButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ selectionOk = true;
+ }
+ });
+ authenticationComposite.getShell().setDefaultButton(okButton);
+
+ cancelButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ selectionOk = false;
+ }
+ });
+ return c;
+ }
+
+ public boolean isValid() {
+ return selectionOk;
+ }
+
+ private void setUserName(String user) {
+ authenticationComposite.setUserName(user);
+ }
+
+ private void setPassword(String password) {
+ authenticationComposite.setPassword(password);
+ }
+
+ private void setDomain(String domain) {
+ authenticationComposite.setDomain(domain);
+ }
+
+ private void setStorageAllowed(boolean isStorageAllowed) {
+ authenticationComposite.setStorageAllowed(isStorageAllowed);
+ }
+
+ private void setGuestLogin(boolean isGuestLogin) {
+ authenticationComposite.setGuestLogin(isGuestLogin);
+ }
+
+ private void setProtocol(String protocol) {
+ authenticationComposite.setProtocol(protocol);
+ }
+
+ private String getUserName() {
+ return authenticationComposite.getUserName();
+ }
+
+ private String getDomain() {
+ return authenticationComposite.getDomain();
+ }
+
+ private String getProtocol() {
+ return authenticationComposite.getProtocol();
+ }
+
+ private boolean isStorageAllowed() {
+ return authenticationComposite.isStorageAllowed();
+ }
+
+ private boolean isGuestLogin() {
+ return authenticationComposite.isGuestLogin();
+ }
+
+ public static void openDialog() {
+ Display.getDefault().syncExec(new Runnable() {
+
+ private String getErrorMessage(AuthenticationErrorCode status) {
+ String toReturn = "";
+ if (status == null) {
+ status = AuthenticationErrorCode.Unknown;
+ }
+ switch (status) {
+ case UserNotFound:
+ toReturn = "User Id not found.\n" + "Enter your user id.";
+ break;
+ case InvalidPassword:
+ toReturn =
+ "Invalid Password.\n" + "Make sure <CAPS LOCK> is not enabled.\n" + "Enter a valid password.";
+ break;
+ case NoResponse:
+ toReturn = "Please enter a valid user id and password.";
+ break;
+ default:
+ toReturn = "Unknown authentication error";
+ break;
+ }
+ return toReturn;
+ }
+
+ public void run() {
+ String dialogTitle = "Authentication Failed";
+ String endMsg = "Shutting down the workbench.";
+ String user = "";
+ String domain = "";
+ String message = "";
+ String protocol = "";
+ boolean isStorageAllowed = false;
+ boolean isGuestLogin = false;
+ boolean shutdown = false;
+ Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+
+ for (int numberOfTries = 0; numberOfTries < MAX_RETRIES; numberOfTries++) {
+ AuthenticationDialog dialog = new AuthenticationDialog(shell);
+ if (numberOfTries != 0) {
+ dialog.setUserName(user);
+ dialog.setPassword("");
+ dialog.setDomain(domain);
+ dialog.setProtocol(protocol);
+ dialog.setStorageAllowed(isStorageAllowed);
+ dialog.setGuestLogin(isGuestLogin);
+ }
+ int result = dialog.open();
+
+ user = dialog.getUserName();
+ protocol = dialog.getProtocol();
+ domain = dialog.getDomain();
+ isStorageAllowed = dialog.isStorageAllowed();
+ isGuestLogin = dialog.isGuestLogin();
+
+ if (result == Window.CANCEL) {
+ // TODO This was added because ATS requires a user to be logged in
+ // Non-Authentication is not an option --
+ if (numberOfTries > MAX_RETRIES) {
+ message = "Maximum number of Retries reached.\n" + endMsg;
+ shutdown = true;
+ } else {
+ message =
+ "Please log in as Guest or with your credentials.\n" + "A Log-in account is required to continue.";
+ }
+
+ MessageDialog.openError(shell, "Authentication Cancelled", message);
+ }
+ // else if (result != Window.OK ) {
+ // numberOfTries = MAX_RETRIES;
+ // }
+ else {
+ if (dialog.isValid()) {
+ if (ClientSessionManager.isSessionValid()) {
+ numberOfTries = MAX_RETRIES;
+ String userText;
+ try {
+ userText = UserManager.getUser().toString();
+ } catch (OseeCoreException ex) {
+ userText = ex.getLocalizedMessage();
+ }
+ MessageDialog.openInformation(shell, "Authenticated", "Logged in as: " + userText);
+ } else {
+ if (numberOfTries >= MAX_RETRIES - 1) {
+ message = "Maximum number of Retries reached.\n" + endMsg;
+ shutdown = true;
+ } else {
+ IHealthStatus status = OseeLog.getStatusByName(ClientSessionManager.getStatusId());
+ if (status != null && status.getException() != null) {
+ Throwable ex = status.getException();
+ if (ex instanceof OseeAuthenticationException) {
+ message = getErrorMessage(((OseeAuthenticationException) ex).getCode());
+ }
+ message = ex.getLocalizedMessage();
+ } else {
+ message = "Authentication error";
+ }
+ }
+ MessageDialog.openError(shell, dialogTitle, message);
+ }
+ }
+ }
+ }
+
+ if (shutdown) {
+ PlatformUI.getWorkbench().close();
+ }
+ }
+ });
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dialogs/ListDialogSortable.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dialogs/ListDialogSortable.java
new file mode 100644
index 00000000000..ce96c28c3b3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/dialogs/ListDialogSortable.java
@@ -0,0 +1,53 @@
+/*
+ * Created on Oct 30, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.dialogs;
+
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumnSorter;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.ListDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ListDialogSortable extends ListDialog {
+
+ private ViewerSorter viewerSorter;
+
+ /**
+ * @param parent
+ */
+ public ListDialogSortable(Shell parent) {
+ super(parent);
+ }
+
+ /**
+ * @param parent
+ */
+ public ListDialogSortable(ViewerSorter viewerSorter, Shell parent) {
+ super(parent);
+ this.viewerSorter = viewerSorter;
+ }
+
+ public void setSorter(ViewerSorter viewerSorter) {
+ this.viewerSorter = viewerSorter;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.dialogs.ListDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createDialogArea(Composite container) {
+ Control control = super.createDialogArea(container);
+ if (viewerSorter != null) {
+ getTableViewer().setSorter(new XViewerColumnSorter());
+ }
+ return control;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportJob.java
new file mode 100644
index 00000000000..e1974d1d5cb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportJob.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.export;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.render.FileRenderer;
+import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ArtifactExportJob extends Job {
+ private final File rootExportPath;
+ private final Collection<Artifact> exportArtifacts;
+
+ /**
+ * @param name
+ */
+ public ArtifactExportJob(File exportPath, Collection<Artifact> exportArtifacts) {
+ super("Artifact Export");
+ this.rootExportPath = exportPath;
+ this.exportArtifacts = exportArtifacts;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ IStatus toReturn;
+ try {
+ monitor.beginTask("Exporting Artifacts", countDescendents());
+
+ for (Artifact artifact : exportArtifacts) {
+ if (monitor.isCanceled()) {
+ return new Status(Status.CANCEL, SkynetGuiPlugin.PLUGIN_ID, "User Cancled the operation.");
+ }
+ writeArtifactPreview(rootExportPath, monitor, artifact, PresentationType.PREVIEW);
+ }
+
+ toReturn = Status.OK_STATUS;
+ } catch (Exception ex) {
+ toReturn = new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, -1, ex.getLocalizedMessage(), ex);
+ } finally {
+ monitor.done();
+ }
+ return toReturn;
+ }
+
+ private int countDescendents() throws OseeCoreException {
+ int total = 0;
+ for (Artifact artifact : exportArtifacts) {
+ total += artifact.getDescendants().size() + 1;
+ }
+ return total;
+ }
+
+ private void writeArtifactPreview(File exportPath, IProgressMonitor monitor, Artifact artifact, PresentationType presentationType) throws Exception {
+ if (artifact.getArtifactTypeName().equals("Folder")) {
+ File folder = new File(exportPath, artifact.getDescriptiveName());
+ folder.mkdir();
+ for (Artifact child : artifact.getChildren()) {
+ writeArtifactPreview(folder, monitor, child, presentationType);
+ }
+ } else {
+ try {
+ FileRenderer fileRenderer = RendererManager.getBestFileRenderer(presentationType, artifact, null);
+ String fileName = artifact.getSafeName() + "." + fileRenderer.getAssociatedExtension(artifact);
+ InputStream inputStream = fileRenderer.getRenderInputStream(artifact, presentationType);
+ Lib.inputStreamToFile(inputStream, new File(exportPath, fileName));
+ } catch (OseeArgumentException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, "Artifact requires a FileRenderer");
+ }
+ }
+ monitor.worked(1);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportPage.java
new file mode 100644
index 00000000000..8ff21918e56
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportPage.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.export;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.OseeData;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ArtifactExportPage extends WizardDataTransferPage {
+ private final File exportPath;
+ private final Collection<Artifact> selectedArtifacts;
+
+ /**
+ * @param pageName
+ */
+ public ArtifactExportPage(IStructuredSelection selection) {
+ super("Main");
+
+ this.exportPath = OseeData.getPath().toFile();
+ selectedArtifacts = new ArrayList<Artifact>();
+ if (selection != null) {
+ Iterator<?> selectionIterator = selection.iterator();
+ while (selectionIterator.hasNext()) {
+ Object selectedObject = selectionIterator.next();
+ if (selectedObject instanceof IAdaptable) {
+ selectedObject = ((IAdaptable) selectedObject).getAdapter(Artifact.class);
+ if (selectedObject instanceof Artifact) {
+ selectedArtifacts.add((Artifact) selectedObject);
+ } else {
+ OSEELog.logSevere(SkynetGuiPlugin.class, "Expected selection to be of type Artifact", true);
+ }
+ } else {
+ OSEELog.logSevere(SkynetGuiPlugin.class, "Expected selection to be of type IAdaptable", true);
+ }
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.dialogs.WizardDataTransferPage#allowNewContainerName()
+ */
+ @Override
+ protected boolean allowNewContainerName() {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ @Override
+ public void handleEvent(Event event) {
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(Composite parent) {
+ initializeDialogUnits(parent);
+
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout(1, false));
+ composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
+ composite.setFont(parent.getFont());
+
+ //createSourceGroup(composite);
+
+ createOptionsGroup(composite);
+
+ setPageComplete(determinePageCompletion());
+ setControl(composite);
+ }
+
+ /**
+ * @return
+ */
+ public Collection<Artifact> getExportArtifacts() {
+ return selectedArtifacts;
+ }
+
+ /**
+ * @return
+ */
+ public File getExportPath() {
+ return exportPath;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportWizard.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportWizard.java
new file mode 100644
index 00000000000..f9a7dfa46d4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ArtifactExportWizard.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.export;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.ui.IExportWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ArtifactExportWizard extends Wizard implements IExportWizard {
+ private ArtifactExportPage mainPage;
+
+ public ArtifactExportWizard() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ @Override
+ public boolean performFinish() {
+ try {
+ Jobs.startJob(new ArtifactExportJob(mainPage.getExportPath(), mainPage.getExportArtifacts()));
+ } catch (Exception ex) {
+ ErrorDialog.openError(getShell(), "Define Export Error", ex.getLocalizedMessage(), new Status(IStatus.ERROR,
+ "org.eclipse.osee.framework.jdk.core", IStatus.ERROR, ex.getLocalizedMessage(), ex));
+ }
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ @Override
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ mainPage = new ArtifactExportPage(selection);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.Wizard#addPages()
+ */
+ @Override
+ public void addPages() {
+ addPage(mainPage);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ExportBranchPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ExportBranchPage.java
new file mode 100644
index 00000000000..920e12f4b8f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ExportBranchPage.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.export;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.plugin.util.DirectoryOrFileSelector;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class ExportBranchPage extends WizardDataTransferPage {
+ private DirectoryOrFileSelector directoryFileSelector;
+
+ @SuppressWarnings("unused")
+ private Branch branch;
+
+ /**
+ * @param name
+ * @param selection
+ */
+ public ExportBranchPage(String name, Branch branch) {
+ super(name);
+ this.branch = branch;
+
+ setTitle("Import Skynet types into Define");
+ setDescription("Import Skynet types into Define");
+ }
+
+ /**
+ * (non-Javadoc) Method declared on IDialogPage.
+ */
+ public void createControl(Composite parent) {
+
+ initializeDialogUnits(parent);
+
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout());
+ composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
+ composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ composite.setFont(parent.getFont());
+
+ createSourceGroup(composite);
+
+ restoreWidgetValues();
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+
+ setControl(composite);
+ }
+
+ /**
+ * The <code>WizardResourceImportPage</code> implementation of this <code>Listener</code> method handles all
+ * events and enablements for controls on this page. Subclasses may extend.
+ *
+ * @param event Event
+ */
+ public void handleEvent(Event event) {
+ setPageComplete(determinePageCompletion());
+ }
+
+ protected void createSourceGroup(Composite parent) {
+ directoryFileSelector = new DirectoryOrFileSelector(parent, SWT.NONE, "Export Destination", this);
+
+ // if (currentResourceSelection == null) {
+ // Select directory as the default
+ directoryFileSelector.setDirectorySelected(true);
+ // }
+ // else {
+ // directoryFileSelector.setDirectorySelected(currentResourceSelection.getType() != IResource.FILE);
+ // directoryFileSelector.setText(currentResourceSelection.getLocation().toString());
+ // }
+
+ setPageComplete(determinePageCompletion());
+ }
+
+ /*
+ * @see WizardPage#becomesVisible
+ */
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ // policy: wizards are not allowed to come up with an error message
+ if (visible) {
+ setErrorMessage(null);
+ }
+ }
+
+ @Override
+ protected boolean validateSourceGroup() {
+ return directoryFileSelector.validate(this);
+ }
+
+ public boolean finish() {
+ try {
+ // getSpecifiedContainer().getProject();
+
+ // File file = directoryFileSelector.getFile();
+ // Job job = new ImportMetaJob(file);
+ // job.setUser(true);
+ // job.setPriority(Job.LONG);
+ // job.schedule();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ ErrorDialog.openError(getShell(), "Define Import Error", "An error has occured while importing a document.",
+ new Status(IStatus.ERROR, "org.eclipse.osee.framework.jdk.core", IStatus.ERROR,
+ "Unknown exception occurred in the import", ex));
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.WizardResourceImportPage#allowNewContainerName()
+ */
+ @Override
+ protected boolean allowNewContainerName() {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ExportBranchWizard.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ExportBranchWizard.java
new file mode 100644
index 00000000000..1bb04ab8181
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/export/ExportBranchWizard.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.export;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.ui.IExportWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class ExportBranchWizard extends Wizard implements IExportWizard {
+ private ExportBranchPage mainPage;
+ private Branch defaultBranch;
+
+ public ExportBranchWizard() {
+ this(null);
+ }
+
+ public ExportBranchWizard(Branch defaultBranch) {
+ super();
+ this.defaultBranch = defaultBranch;
+
+ setWindowTitle("Skynet Branch Export Wizard");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ @Override
+ public boolean performFinish() {
+ return mainPage.finish();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench,
+ * org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ }
+
+ /**
+ * (non-Javadoc) Method declared on Wizard.
+ */
+ public void addPages() {
+ mainPage = new ExportBranchPage("Export Branch", defaultBranch);
+ addPage(mainPage);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupContentProvider.java
new file mode 100644
index 00000000000..a514b4882c5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupContentProvider.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.group;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactChangeListener;
+
+/**
+ * The basis for the comments in this class can be found at
+ * http://www.eclipse.org/articles/treeviewer-cg/TreeViewerArticle.htm
+ *
+ * @author Donald G. Dunne
+ */
+public class GroupContentProvider implements ITreeContentProvider, ArtifactChangeListener {
+ protected TreeViewer viewer;
+
+ public GroupContentProvider(GroupExplorer groupExplorer) {
+ }
+
+ public void dispose() {
+ }
+
+ /**
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ this.viewer = (TreeViewer) viewer;
+ }
+
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof GroupExplorerItem) return ((GroupExplorerItem) parentElement).getGroupItems().toArray();
+ return new Object[] {};
+ }
+
+ /*
+ * @see ITreeContentProvider#getParent(Object)
+ */
+ public Object getParent(Object element) {
+ if (element instanceof GroupExplorerItem) return ((GroupExplorerItem) element).getParentItem();
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ return getChildren(element).length > 0;
+ }
+
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorer.java
new file mode 100644
index 00000000000..8ee6e320fea
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorer.java
@@ -0,0 +1,439 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.group;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.UniversalGroup;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class GroupExplorer extends ViewPart implements IBranchEventListener, IFrameworkTransactionEventListener, IActionable {
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.group.GroupExplorer";
+ private GroupTreeViewer treeViewer;
+ private Artifact rootArt;
+ private GroupExplorerItem rootItem;
+ private Collection<GroupExplorerItem> selected;
+ private Object[] expanded = new Object[] {};
+
+ public GroupExplorer() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createPartControl(Composite parent) {
+
+ if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) return;
+
+ GridData gridData = new GridData();
+ gridData.verticalAlignment = GridData.FILL;
+ gridData.horizontalAlignment = GridData.FILL;
+ gridData.grabExcessVerticalSpace = true;
+ gridData.grabExcessHorizontalSpace = true;
+
+ GridLayout gridLayout = new GridLayout(1, false);
+ gridData.heightHint = 1000;
+ gridData.widthHint = 1000;
+
+ parent.setLayout(gridLayout);
+ parent.setLayoutData(gridData);
+
+ treeViewer = new GroupTreeViewer(this, parent);
+ treeViewer.setContentProvider(new GroupContentProvider(this));
+ treeViewer.setLabelProvider(new GroupLabelProvider());
+ treeViewer.setUseHashlookup(true);
+ treeViewer.getTree().addListener(SWT.MouseDoubleClick, new Listener() {
+ public void handleEvent(org.eclipse.swt.widgets.Event event) {
+ handleDoubleClick();
+ }
+ });
+ treeViewer.getControl().setLayoutData(gridData);
+ treeViewer.getTree().addListener(SWT.MouseUp, new Listener() {
+ public void handleEvent(org.eclipse.swt.widgets.Event event) {
+ if (event.button == 3) getPopupMenu().setVisible(true);
+ }
+ });
+
+ OseeContributionItem.addTo(this, true);
+
+ OseeEventManager.addListener(this);
+
+ new GroupExplorerDragAndDrop(treeViewer, VIEW_ID);
+
+ getSite().setSelectionProvider(treeViewer);
+ parent.layout();
+ createActions();
+ refresh();
+ }
+
+ private void handleDoubleClick() {
+ GroupExplorerItem item = getSelectedItem();
+ if (item != null) {
+ try {
+ RendererManager.editInJob(item.getArtifact());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ protected void createActions() {
+ Action refreshAction = new Action("Refresh", Action.AS_PUSH_BUTTON) {
+
+ @Override
+ public void run() {
+ refresh();
+ }
+ };
+ refreshAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("refresh.gif"));
+ refreshAction.setToolTipText("Refresh");
+
+ IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
+ toolbarManager.add(refreshAction);
+
+ // IMenuManager manager = getViewSite().getActionBars().getMenuManager();
+
+ OseeAts.addBugToViewToolbar(this, this, SkynetGuiPlugin.getInstance(), VIEW_ID, "Group Explorer");
+ }
+
+ private Menu getPopupMenu() {
+
+ Menu previewMenu = new Menu(treeViewer.getTree().getParent());
+
+ MenuItem item = new MenuItem(previewMenu, SWT.PUSH);
+ item.setText("&Remove from Group");
+ item.setEnabled(isOnlyGroupItemsSelected());
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ handleRemoveFromGroup();
+ }
+ });
+
+ item = new MenuItem(previewMenu, SWT.PUSH);
+ item.setText("&Delete Group");
+ item.setEnabled(isOnlyGroupsSelected());
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ handleDeleteGroup();
+ }
+ });
+
+ item = new MenuItem(previewMenu, SWT.PUSH);
+ item.setText("&New Group");
+ item.setEnabled(true);
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ handleNewGroup();
+ }
+ });
+
+ new MenuItem(previewMenu, SWT.SEPARATOR);
+
+ item = new MenuItem(previewMenu, SWT.PUSH);
+ item.setText("&Select All\tCtrl+A");
+ item.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(org.eclipse.swt.widgets.Event event) {
+ treeViewer.getTree().selectAll();
+ }
+ });
+
+ item = new MenuItem(previewMenu, SWT.PUSH);
+ item.setText("Expand All\tCtrl+X");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ expandAll((IStructuredSelection) treeViewer.getSelection());
+ }
+ });
+ return previewMenu;
+ }
+
+ private void handleNewGroup() {
+ EntryDialog ed =
+ new EntryDialog(Display.getCurrent().getActiveShell(), "Create New Group", null, "Enter Group Name",
+ MessageDialog.QUESTION, new String[] {"OK", "Cancel"}, 0);
+ if (ed.open() == 0) {
+ try {
+ UniversalGroup.addGroup(ed.getEntry(), BranchManager.getDefaultBranch());
+ treeViewer.refresh();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+
+ private void handleRemoveFromGroup() {
+ final List<GroupExplorerItem> items = getSelectedItems();
+ if (items.size() == 0) {
+ AWorkbench.popup("ERROR", "No Items Selected");
+ return;
+ }
+ if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Remove From Group",
+ "Remove From Group - (Artifacts will not be deleted)\n\nAre you sure?")) {
+ try {
+ SkynetTransaction transaction = new SkynetTransaction(BranchManager.getDefaultBranch());
+ for (GroupExplorerItem item : items) {
+ item.getArtifact().deleteRelation(CoreRelationEnumeration.UNIVERSAL_GROUPING__GROUP,
+ item.getParentItem().getArtifact());
+ item.getArtifact().persistRelations(transaction);
+ }
+ transaction.execute();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+
+ private void handleDeleteGroup() {
+ final ArrayList<GroupExplorerItem> items = getSelectedUniversalGroupItems();
+ if (items.size() == 0) {
+ AWorkbench.popup("ERROR", "No Groups Selected");
+ return;
+ }
+ String names = "";
+ for (GroupExplorerItem item : items)
+ if (item.isUniversalGroup()) names += String.format("%s\n", item.getArtifact().getDescriptiveName());
+ if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Delete Groups",
+ "Delete Groups - (Contained Artifacts will not be deleted)\n\n" + names + "\nAre you sure?")) {
+ try {
+ SkynetTransaction transaction = new SkynetTransaction(BranchManager.getDefaultBranch());
+ for (GroupExplorerItem item : items) {
+ item.getArtifact().delete(transaction);
+ }
+ transaction.execute();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+
+ public void storeExpandedAndSelection() {
+ // System.out.println("GE: storeExpandedAndSelection");
+ // Store selected so can re-select after event re-draw
+ selected = getSelectedItems();
+ if (treeViewer != null && !treeViewer.getTree().isDisposed()) {
+ expanded = treeViewer.getExpandedElements();
+ }
+ }
+
+ public void restoreExpandedAndSelection() {
+ // System.out.println("GE: restoreExpandedAndSelection");
+ if (expanded != null && expanded.length > 0 && rootArt != null) {
+ treeViewer.setExpandedElements(expanded);
+ }
+ if (selected != null && selected.size() > 0 && rootArt != null) {
+ treeViewer.setSelection(new StructuredSelection(selected.toArray(new Object[selected.size()])));
+ }
+ }
+
+ public GroupExplorerItem getSelectedItem() {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> itemsIter = selection.iterator();
+ if (itemsIter.hasNext()) return (GroupExplorerItem) itemsIter.next();
+ return null;
+ }
+
+ private ArrayList<GroupExplorerItem> getSelectedItems() {
+ ArrayList<GroupExplorerItem> arts = new ArrayList<GroupExplorerItem>();
+ Iterator<?> i = ((IStructuredSelection) treeViewer.getSelection()).iterator();
+ while (i.hasNext()) {
+ Object obj = i.next();
+ if (obj instanceof GroupExplorerItem) {
+ arts.add((GroupExplorerItem) obj);
+ }
+ }
+ return arts;
+ }
+
+ private ArrayList<GroupExplorerItem> getSelectedUniversalGroupItems() {
+ ArrayList<GroupExplorerItem> arts = new ArrayList<GroupExplorerItem>();
+ Iterator<?> i = ((IStructuredSelection) treeViewer.getSelection()).iterator();
+ while (i.hasNext()) {
+ Object obj = i.next();
+ if (obj instanceof GroupExplorerItem && ((GroupExplorerItem) obj).isUniversalGroup()) {
+ arts.add((GroupExplorerItem) obj);
+ }
+ }
+ return arts;
+ }
+
+ private boolean isOnlyGroupsSelected() {
+ if (getSelectedItems().size() == 0) return false;
+ for (GroupExplorerItem item : getSelectedItems()) {
+ if (!item.isUniversalGroup()) return false;
+ }
+ return true;
+ }
+
+ private boolean isOnlyGroupItemsSelected() {
+ if (getSelectedItems().size() == 0) return false;
+ for (GroupExplorerItem item : getSelectedItems()) {
+ if (item.isUniversalGroup()) return false;
+ }
+ return true;
+ }
+
+ private void expandAll(IStructuredSelection selection) {
+ Iterator<?> iter = selection.iterator();
+ while (iter.hasNext()) {
+ treeViewer.expandToLevel(iter.next(), TreeViewer.ALL_LEVELS);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWorkbenchPart#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ }
+
+ public void refresh() {
+ // System.out.println("GE: refresh");
+ if (rootItem != null) {
+ rootItem.dispose();
+ }
+
+ Artifact topArt = null;
+ try {
+ topArt = UniversalGroup.getTopUniversalGroupArtifact(BranchManager.getDefaultBranch());
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ if (topArt == null) {
+ rootArt = null;
+ rootItem = null;
+ } else {
+ rootArt = topArt;
+ rootItem = new GroupExplorerItem(treeViewer, rootArt, null, this);
+ rootItem.getGroupItems();
+ }
+
+ if (treeViewer != null) treeViewer.setInput(rootItem);
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+ */
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ super.dispose();
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, int branchId) {
+ if (branchModType == BranchEventType.DefaultBranchChanged) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ refresh();
+ restoreExpandedAndSelection();
+ }
+ });
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IFrameworkTransactionEventListener#handleFrameworkTransactionEvent(org.eclipse.osee.framework.ui.plugin.event.Sender.Source, org.eclipse.osee.framework.skynet.core.eventx.FrameworkTransactionData)
+ */
+ @Override
+ public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException {
+ if (rootArt != null && transData.branchId != rootArt.getBranch().getBranchId()) return;
+ try {
+ Artifact topArt = UniversalGroup.getTopUniversalGroupArtifact(BranchManager.getDefaultBranch());
+ if (topArt != null) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ storeExpandedAndSelection();
+ refresh();
+ restoreExpandedAndSelection();
+ }
+ });
+ return;
+ }
+ } catch (Exception ex) {
+ // do nothing
+ }
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorerDragAndDrop.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorerDragAndDrop.java
new file mode 100644
index 00000000000..a656cfc9a10
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorerDragAndDrop.java
@@ -0,0 +1,296 @@
+/*
+ * Created on Oct 7, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.group;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactData;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTransfer;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.UniversalGroup;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class GroupExplorerDragAndDrop extends SkynetDragAndDrop {
+
+ boolean isFeedbackAfter = false;
+ private final TreeViewer treeViewer;
+ private final String viewId;
+ private boolean isCtrlPressed = false;
+
+ public GroupExplorerDragAndDrop(TreeViewer treeViewer, String viewId) {
+ super(treeViewer.getTree(), viewId);
+ this.treeViewer = treeViewer;
+ this.viewId = viewId;
+ treeViewer.getTree().addKeyListener(new keySelectedListener());
+ }
+ private class keySelectedListener implements KeyListener {
+ public void keyPressed(KeyEvent e) {
+ isCtrlPressed = (e.keyCode == SWT.CONTROL);
+ }
+
+ public void keyReleased(KeyEvent e) {
+ if (e.keyCode == 'a' && e.stateMask == SWT.CONTROL) {
+ treeViewer.getTree().selectAll();
+ }
+ if (e.keyCode == 'x' && e.stateMask == SWT.CONTROL) {
+ expandAll((IStructuredSelection) treeViewer.getSelection());
+ }
+ isCtrlPressed = !(e.keyCode == SWT.CONTROL);
+ }
+ }
+
+ private void expandAll(IStructuredSelection selection) {
+ Iterator<?> iter = selection.iterator();
+ while (iter.hasNext()) {
+ treeViewer.expandToLevel(iter.next(), TreeViewer.ALL_LEVELS);
+ }
+ }
+
+ @Override
+ public Artifact[] getArtifacts() {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> i = selection.iterator();
+ List<Artifact> artifacts = new ArrayList<Artifact>();
+ while (i.hasNext()) {
+ Object object = i.next();
+ if (object instanceof GroupExplorerItem) {
+ artifacts.add(((GroupExplorerItem) object).getArtifact());
+ }
+ }
+ return artifacts.toArray(new Artifact[artifacts.size()]);
+ }
+
+ @Override
+ public void performDragOver(DropTargetEvent event) {
+ if (!ArtifactTransfer.getInstance().isSupportedType(event.currentDataType)) {
+ event.detail = DND.DROP_NONE;
+ return;
+ }
+ final ArtifactData artData = ArtifactTransfer.getInstance().nativeToJava(event.currentDataType);
+ if (artData == null) {
+ event.detail = DND.DROP_NONE;
+ return;
+ }
+ for (Artifact art : artData.getArtifacts()) {
+ if (art.getArtifactTypeName().equals(UniversalGroup.ARTIFACT_TYPE_NAME)) {
+ event.detail = DND.DROP_NONE;
+ return;
+ }
+ }
+
+ Tree tree = treeViewer.getTree();
+ TreeItem dragOverTreeItem = tree.getItem(treeViewer.getTree().toControl(event.x, event.y));
+
+ event.feedback = DND.FEEDBACK_EXPAND;
+ event.detail = DND.DROP_NONE;
+
+ // Set as COPY if drag item over group (copy versus move will be determined on drop
+ if (dragOverTreeItem != null && ((GroupExplorerItem) dragOverTreeItem.getData()).isUniversalGroup()) {
+ event.detail = DND.DROP_COPY;
+ tree.setInsertMark(null, false);
+ }
+ // Handle re-ordering within same group
+ else if (dragOverTreeItem != null && !((GroupExplorerItem) dragOverTreeItem.getData()).isUniversalGroup()) {
+ GroupExplorerItem dragOverGroupItem = (GroupExplorerItem) dragOverTreeItem.getData();
+ IStructuredSelection selectedItem = (IStructuredSelection) treeViewer.getSelection();
+ Object obj = selectedItem.getFirstElement();
+ if (obj instanceof GroupExplorerItem) {
+ GroupExplorerItem droppingGroupItem = (GroupExplorerItem) obj;
+
+ // the group to move must belong to the same group as the member to insert before/after
+ if ((dragOverGroupItem.getParentItem()).equals(droppingGroupItem.getParentItem())) {
+ if (isFeedbackAfter) {
+ event.feedback = DND.FEEDBACK_INSERT_AFTER;
+ } else {
+ event.feedback = DND.FEEDBACK_INSERT_BEFORE;
+ }
+ event.detail = DND.DROP_MOVE;
+ }
+ } else {
+ if (isFeedbackAfter) {
+ event.feedback = DND.FEEDBACK_INSERT_AFTER;
+ } else {
+ event.feedback = DND.FEEDBACK_INSERT_BEFORE;
+ }
+ event.detail = DND.DROP_COPY;
+ }
+ } else {
+ tree.setInsertMark(null, false);
+ }
+ }
+
+ @Override
+ public void operationChanged(DropTargetEvent event) {
+ if (!isCtrlPressed(event)) {
+ isFeedbackAfter = false;
+ }
+ }
+
+ private boolean isCtrlPressed(DropTargetEvent event) {
+ boolean ctrPressed = (event.detail == 1);
+
+ if (ctrPressed) {
+ isFeedbackAfter = true;
+ }
+ return ctrPressed;
+ }
+
+ @Override
+ public void performDrop(DropTargetEvent event) {
+ try {
+ TreeItem dragOverTreeITem = treeViewer.getTree().getItem(treeViewer.getTree().toControl(event.x, event.y));
+
+ // This should always be true as all items are Group Explorer Items
+ if (dragOverTreeITem.getData() instanceof GroupExplorerItem) {
+ final GroupExplorerItem dragOverExplorerItem = (GroupExplorerItem) dragOverTreeITem.getData();
+
+ // Drag item dropped ON universal group item
+ if (dragOverExplorerItem.isUniversalGroup()) {
+
+ // Drag item came from inside Group Explorer
+ if (event.data instanceof ArtifactData) {
+ // If event originated outside, it's a copy event;
+ // OR if event is inside and ctrl is down, this is a copy; add items to group
+ if (!((ArtifactData) event.data).getSource().equals(viewId) || (((ArtifactData) event.data).getSource().equals(
+ viewId) && isCtrlPressed)) {
+ copyArtifactsToGroup(event, dragOverExplorerItem);
+ }
+ // Else this is a move
+ else {
+ IStructuredSelection selectedItem = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> iterator = selectedItem.iterator();
+ final Set<Artifact> insertArts = new HashSet<Artifact>();
+ while (iterator.hasNext()) {
+ Object obj = iterator.next();
+ if (obj instanceof GroupExplorerItem) {
+ insertArts.add(((GroupExplorerItem) obj).getArtifact());
+ }
+ }
+ GroupExplorerItem parentUnivGroupItem =
+ ((GroupExplorerItem) selectedItem.getFirstElement()).getParentItem();
+ final Artifact parentArtifact = parentUnivGroupItem.getArtifact();
+ final Artifact targetArtifact = dragOverExplorerItem.getArtifact();
+
+ for (Artifact artifact : insertArts) {
+ // Remove item from old group
+ parentArtifact.deleteRelation(CoreRelationEnumeration.UNIVERSAL_GROUPING__MEMBERS, artifact);
+ // Add items to new group
+ targetArtifact.addRelation(CoreRelationEnumeration.UNIVERSAL_GROUPING__MEMBERS, artifact);
+ }
+ Artifacts.persistInTransaction(parentArtifact, targetArtifact);
+ }
+ }
+ }
+ // Drag item dropped before or after group member
+ else if (!dragOverExplorerItem.isUniversalGroup()) {
+
+ if (event.data instanceof ArtifactData) {
+
+ GroupExplorerItem parentUnivGroupItem = null;
+ // Drag item came from inside Group Explorer
+ if (((ArtifactData) event.data).getSource().equals(viewId)) {
+ IStructuredSelection selectedItem = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> iterator = selectedItem.iterator();
+ Set<Artifact> insertArts = new HashSet<Artifact>();
+ while (iterator.hasNext()) {
+ Object obj = iterator.next();
+ if (obj instanceof GroupExplorerItem) {
+ insertArts.add(((GroupExplorerItem) obj).getArtifact());
+ }
+ }
+ parentUnivGroupItem = ((GroupExplorerItem) selectedItem.getFirstElement()).getParentItem();
+ insertArts.toArray(new Artifact[insertArts.size()]);
+
+ Artifact parentArtifact = parentUnivGroupItem.getArtifact();
+ Artifact targetArtifact = dragOverExplorerItem.getArtifact();
+
+ for (Artifact art : insertArts) {
+ parentArtifact.setRelationOrder(targetArtifact, isFeedbackAfter,
+ CoreRelationEnumeration.UNIVERSAL_GROUPING__MEMBERS, art);
+ targetArtifact = art;
+ }
+ parentArtifact.persistRelations();
+ }
+ // Drag item came from outside Group Explorer
+ else {
+ List<Artifact> insertArts = Arrays.asList(((ArtifactData) event.data).getArtifacts());
+ parentUnivGroupItem = dragOverExplorerItem.getParentItem();
+ insertArts.toArray(new Artifact[insertArts.size()]);
+
+ Artifact parentArtifact = parentUnivGroupItem.getArtifact();
+ Artifact targetArtifact = dragOverExplorerItem.getArtifact();
+
+ for (Artifact art : insertArts) {
+ parentArtifact.addRelation(targetArtifact, isFeedbackAfter,
+ CoreRelationEnumeration.UNIVERSAL_GROUPING__MEMBERS, art, "");
+ targetArtifact = art;
+ }
+ parentArtifact.persistRelations();
+ }
+ }
+ }
+ treeViewer.refresh(dragOverExplorerItem);
+ }
+
+ isFeedbackAfter = false;
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ public void copyArtifactsToGroup(DropTargetEvent event, final GroupExplorerItem dragOverExplorerItem) {
+ // Items dropped on Group; simply add items to group
+ final Artifact[] artsToRelate = ((ArtifactData) event.data).getArtifacts();
+ boolean alreadyRelated = true;
+ for (Artifact artifact : artsToRelate) {
+ if (!dragOverExplorerItem.contains(artifact)) {
+ alreadyRelated = false;
+ break;
+ }
+ }
+ if (alreadyRelated) {
+ AWorkbench.popup("ERROR", "Artifact(s) already related.");
+ return;
+ }
+ try {
+ SkynetTransaction transaction = new SkynetTransaction(BranchManager.getDefaultBranch());
+
+ for (Artifact art : artsToRelate) {
+ if (!dragOverExplorerItem.contains(art)) {
+ dragOverExplorerItem.getArtifact().addRelation(CoreRelationEnumeration.UNIVERSAL_GROUPING__MEMBERS, art);
+ }
+ }
+ dragOverExplorerItem.getArtifact().persistRelations(transaction);
+
+ transaction.execute();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorerItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorerItem.java
new file mode 100644
index 00000000000..a6631602edd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupExplorerItem.java
@@ -0,0 +1,160 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.group;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class GroupExplorerItem {
+
+ private final Artifact artifact;
+ private final TreeViewer treeViewer;
+ private final GroupExplorerItem parentItem;
+ private List<GroupExplorerItem> groupItems;
+ private final GroupExplorer groupExplorer;
+
+ public GroupExplorerItem(TreeViewer treeViewer, Artifact artifact, GroupExplorerItem parentItem, GroupExplorer groupExplorer) {
+ this.treeViewer = treeViewer;
+ this.artifact = artifact;
+ this.parentItem = parentItem;
+ this.groupExplorer = groupExplorer;
+ }
+
+ @Override
+ public String toString() {
+ return "\"" + artifact.getDescriptiveName() + "\" - " + groupItems.size();
+ }
+
+ public boolean contains(Artifact artifact) {
+ for (GroupExplorerItem item : getGroupItems()) {
+ if (item.getArtifact() != null && item.getArtifact().equals(artifact)) return true;
+ }
+ return false;
+ }
+
+ /**
+ * @param artifact to match with
+ * @return UGI that contains artifact
+ */
+ public GroupExplorerItem getItem(Artifact artifact) {
+ if (this.artifact != null && this.artifact.equals(artifact)) return this;
+ for (GroupExplorerItem item : getGroupItems()) {
+ GroupExplorerItem ugi = item.getItem(artifact);
+ if (ugi != null) return ugi;
+ }
+ return null;
+ }
+
+ public void dispose() {
+ if (groupItems != null) for (GroupExplorerItem item : groupItems)
+ item.dispose();
+ }
+
+ public boolean isUniversalGroup() {
+ if (artifact == null || artifact.isDeleted()) return false;
+ return artifact.getArtifactTypeName().equals("Universal Group");
+ }
+
+ public String getTableArtifactType() {
+ return artifact.getArtifactTypeName();
+ }
+
+ public String getTableArtifactName() {
+ return artifact.getDescriptiveName();
+ }
+
+ public String getTableArtifactDescription() {
+ return null;
+ }
+
+ public Artifact getArtifact() {
+ return artifact;
+ }
+
+ public List<GroupExplorerItem> getGroupItems() {
+ // Light loading; load the first time getChildren is called
+ if (groupItems == null) {
+ groupItems = new ArrayList<GroupExplorerItem>();
+ populateUpdateCategory();
+ }
+ List<GroupExplorerItem> items = new ArrayList<GroupExplorerItem>();
+ if (groupItems != null) items.addAll(groupItems);
+ return items;
+ }
+
+ /**
+ * Populate/Update this category with it's necessary children items
+ */
+ public void populateUpdateCategory() {
+ try {
+ for (GroupExplorerItem item : getGroupItems()) {
+ removeGroupItem(item);
+ }
+ for (Artifact art : artifact.getRelatedArtifacts(CoreRelationEnumeration.UNIVERSAL_GROUPING__MEMBERS)) {
+ addGroupItem(new GroupExplorerItem(treeViewer, art, this, groupExplorer));
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetActivator.class, Level.SEVERE, ex);
+ }
+ }
+
+ public void addGroupItem(GroupExplorerItem item) {
+ if (!groupItems.contains(item)) {
+ groupItems.add(item);
+ }
+ }
+
+ public void removeGroupItem(GroupExplorerItem item) {
+ item.dispose();
+ groupItems.remove(item);
+ }
+
+ public GroupExplorerItem getParentItem() {
+ return parentItem;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof GroupExplorerItem) {
+ if (!artifact.getGuid().equals(((GroupExplorerItem) obj).getArtifact().getGuid())) {
+ return false;
+ }
+ if (((GroupExplorerItem) obj).getParentItem() == null && getParentItem() == null) {
+ return true;
+ }
+ if (((GroupExplorerItem) obj).getParentItem() != null && getParentItem() != null) {
+ return ((GroupExplorerItem) obj).getParentItem().equals(getParentItem());
+ }
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ return artifact.getGuid().hashCode() + (getParentItem() != null ? getParentItem().getArtifact().getGuid().hashCode() : 0);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupLabelProvider.java
new file mode 100644
index 00000000000..43680df667b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupLabelProvider.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.group;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.graphics.Image;
+
+public class GroupLabelProvider extends LabelProvider {
+ private static final OseeUiActivator plugin = SkynetGuiPlugin.getInstance();
+
+ public GroupLabelProvider() {
+ super();
+ }
+
+ /*
+ * @see ILabelProvider#getImage(Object)
+ */
+ @Override
+ public Image getImage(Object element) {
+ if (element instanceof GroupExplorerItem) {
+ GroupExplorerItem item = (GroupExplorerItem) element;
+ return item.getArtifact().getImage();
+ }
+ return plugin.getImage("laser_16_16.gif");
+
+ }
+
+ /*
+ * @see ILabelProvider#getText(Object)
+ */
+ @Override
+ public String getText(Object element) {
+ if (element instanceof GroupExplorerItem) {
+ GroupExplorerItem item = (GroupExplorerItem) element;
+ Artifact artifact = item.getArtifact();
+ if (artifact.isDeleted()) throw new IllegalArgumentException("Can not display a deleted artifact");
+
+ String name = artifact.getDescriptiveName();
+ if (name == null) {
+ return "";
+ }
+ return name;
+ }
+ throw new IllegalArgumentException("wrong type: " + element.getClass().getName());
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupTreeViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupTreeViewer.java
new file mode 100644
index 00000000000..d4816bcb395
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/group/GroupTreeViewer.java
@@ -0,0 +1,46 @@
+/*
+ * Created on Oct 24, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.group;
+
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class GroupTreeViewer extends TreeViewer {
+
+ private final GroupExplorer groupExplorer;
+
+ /**
+ * @param parent
+ */
+ public GroupTreeViewer(GroupExplorer groupExplorer, Composite parent) {
+ super(parent);
+ this.groupExplorer = groupExplorer;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.StructuredViewer#refresh()
+ */
+ @Override
+ public void refresh() {
+ super.refresh();
+ // System.out.println("TreeViewer: refresh");
+ groupExplorer.restoreExpandedAndSelection();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.StructuredViewer#refresh(boolean)
+ */
+ @Override
+ public void refresh(boolean updateLabels) {
+ super.refresh(updateLabels);
+ // System.out.println("TreeViewer: refresh(updateLabels)");
+ groupExplorer.restoreExpandedAndSelection();
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/handler/GeneralWordOutlineHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/handler/GeneralWordOutlineHandler.java
new file mode 100644
index 00000000000..ee83bc5a182
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/handler/GeneralWordOutlineHandler.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.handler;
+
+import java.util.HashMap;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.skynet.core.word.WordUtil;
+import org.eclipse.osee.framework.ui.skynet.Import.RoughArtifact;
+import org.eclipse.osee.framework.ui.skynet.Import.WordOutlineContentHandler;
+import org.eclipse.osee.framework.ui.skynet.Import.WordOutlineExtractor;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class GeneralWordOutlineHandler extends WordOutlineContentHandler {
+ private static final Pattern listPrKiller =
+ Pattern.compile("<((\\w+:)?listPr)(\\s+.*?)((/>)|(>(.*?)</\\1>))",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private HashMap<String, RoughArtifact> duplicateCatcher;
+
+ private RoughArtifact previousNamedArtifact;
+ private RoughArtifact roughArtifact;
+ private StringBuilder wordFormattedContent;
+ private String lastHeaderNumber;
+
+ /**
+ * Subclasses may extend this method to allocate resources
+ */
+ @Override
+ public void init(WordOutlineExtractor extractor, ArtifactType headingDescriptor, ArtifactType mainDescriptor) {
+ super.init(extractor, headingDescriptor, mainDescriptor);
+
+ duplicateCatcher = new HashMap<String, RoughArtifact>();
+ lastHeaderNumber = null;
+ previousNamedArtifact = null;
+ roughArtifact = null;
+ wordFormattedContent = new StringBuilder();
+ }
+
+ /**
+ * Sublcasses may extend this method to dispose resources.
+ */
+ @Override
+ public void dispose() {
+ super.dispose();
+
+ duplicateCatcher = null;
+ lastHeaderNumber = null;
+ previousNamedArtifact = null;
+ roughArtifact = null;
+ }
+
+ public final void processContent(boolean forceBody, boolean forcePrimaryType, String headerNumber, String listIdentifier, String paragraphStyle, String content, boolean isParagraph) {
+ if (!headerNumber.equals("")) {
+ lastHeaderNumber = headerNumber;
+ }
+
+ if (!headerNumber.equals("") && WordUtil.isHeadingStyle(paragraphStyle) && !WordUtil.textOnly(content).equals("")) {
+ setContent();
+ roughArtifact = setUpNewArtifact(headerNumber);
+ previousNamedArtifact = roughArtifact;
+
+ processHeadingText(roughArtifact, WordUtil.textOnly(content));
+ } else if (!listIdentifier.equals("") && !forceBody) {
+ String proNumber = lastHeaderNumber + "." + listIdentifier;
+
+ content = listPrKiller.matcher(content).replaceAll("");
+ roughArtifact.addAttribute("Name", proNumber);
+ } else if (roughArtifact != null) {
+ wordFormattedContent.append(content);
+ }
+ }
+
+ public void setContent() {
+ if (roughArtifact != null) {
+ roughArtifact.addAttribute(WordAttribute.WORD_TEMPLATE_CONTENT, wordFormattedContent.toString());
+ wordFormattedContent.setLength(0);
+ }
+ }
+
+ /**
+ * Subclasses can override this method to handle how heading text is applied to the roughArtifact
+ *
+ * @param artifact
+ * @param headingText
+ */
+ public void processHeadingText(RoughArtifact roughArtifact, String headingText) {
+ roughArtifact.addAttribute("Name", headingText.trim());
+ }
+
+ private RoughArtifact setUpNewArtifact(String parNumber) {
+ RoughArtifact roughArtifact;
+ RoughArtifact duplicateArtifact = duplicateCatcher.get(parNumber);
+ if (duplicateArtifact == null) {
+ roughArtifact = new RoughArtifact(extractor.getBranch());
+ duplicateCatcher.put(parNumber, roughArtifact);
+ } else {
+ throw new IllegalStateException(String.format(
+ "Paragraph %s found more than once following \"%s\" which is a duplicate of %s", parNumber,
+ previousNamedArtifact.getName(), duplicateArtifact.getName()));
+ }
+
+ roughArtifact.setHeadingDescriptor(headingDescriptor);
+ roughArtifact.setPrimaryDescriptor(mainDescriptor);
+ extractor.addRoughArtifact(roughArtifact);
+ roughArtifact.setSectionNumber(parNumber);
+ roughArtifact.setForcePrimaryType(true);
+
+ roughArtifact.addAttribute("Imported Paragraph Number", parNumber);
+
+ return roughArtifact;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/handler/SoftwareRequirementHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/handler/SoftwareRequirementHandler.java
new file mode 100644
index 00000000000..34d7c7193f6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/handler/SoftwareRequirementHandler.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.handler;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.ui.skynet.Import.RoughArtifact;
+
+/**
+ * @author Robert A. Fisher
+ */
+public abstract class SoftwareRequirementHandler extends GeneralWordOutlineHandler {
+ private static final Pattern partitionPattern = Pattern.compile("\\[([\\w\\(|\\)]+)\\]");
+
+ private final String attributeName;
+
+ public SoftwareRequirementHandler(String attributeName) {
+ this.attributeName = attributeName;
+ }
+
+ @Override
+ public void processHeadingText(RoughArtifact roughArtifact, String headingText) {
+ StringBuilder text = new StringBuilder(headingText);
+ Matcher matcher = partitionPattern.matcher(text);
+ boolean isRequirement = false;
+
+ while (matcher.find()) {
+ isRequirement = true;
+
+ roughArtifact.addAttribute(attributeName, matcher.group(1).trim());
+ text.delete(matcher.start(), matcher.end());
+ matcher.reset(text);
+ }
+
+ if (!isRequirement) {
+ roughArtifact.setPrimaryDescriptor(headingDescriptor);
+ }
+
+ roughArtifact.addAttribute("Name", text.toString().trim());
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryContentProvider.java
new file mode 100644
index 00000000000..bdf532a4c23
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryContentProvider.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.history;
+
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactChangeListener;
+import org.eclipse.osee.framework.skynet.core.revision.RevisionChange;
+import org.eclipse.osee.framework.skynet.core.revision.RevisionManager;
+import org.eclipse.osee.framework.skynet.core.revision.TransactionData;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class RevisionHistoryContentProvider implements ITreeContentProvider, ArtifactChangeListener {
+ private static Object[] EMPTY_ARRAY = new Object[0];
+
+ public RevisionHistoryContentProvider() {
+ super();
+ }
+
+ /**
+ * returns the children of the parent element or null if there are none.
+ */
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Artifact) {
+ Artifact parentItem = (Artifact) parentElement;
+
+ try {
+ Collection<TransactionData> transactions =
+ RevisionManager.getInstance().getTransactionsPerArtifact(parentItem, true);
+ if (transactions != null) {
+ return transactions.toArray();
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ } else if (parentElement instanceof TransactionData) {
+ TransactionData parentItem = (TransactionData) parentElement;
+
+ Collection<RevisionChange> changes = null;
+ try {
+ changes = RevisionManager.getInstance().getTransactionChanges(parentItem);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ if (changes != null) {
+ return changes.toArray();
+ }
+ }
+ return EMPTY_ARRAY;
+ }
+
+ /**
+ * get the parent element
+ */
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+
+ if (element instanceof TransactionData)
+ return true;
+ else
+ return false;
+ }
+
+ /**
+ * returns the elements
+ */
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ public void dispose() {
+
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryLabelProvider.java
new file mode 100644
index 00000000000..afde42cdad9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryLabelProvider.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.history;
+
+import java.sql.Timestamp;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.revision.IAttributeChange;
+import org.eclipse.osee.framework.skynet.core.revision.RelationLinkChange;
+import org.eclipse.osee.framework.skynet.core.revision.RevisionChange;
+import org.eclipse.osee.framework.skynet.core.revision.TransactionData;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class RevisionHistoryLabelProvider implements ITableLabelProvider, ILabelProvider {
+
+ public RevisionHistoryLabelProvider() {
+ super();
+ }
+
+ public Image getColumnImage(Object element, int columnIndex) {
+
+ if (element instanceof TransactionData && columnIndex == 0) {
+ return SkynetGuiPlugin.getInstance().getImage("transaction.gif");
+
+ } else if (element instanceof RevisionChange && columnIndex == 0) {
+ return SkynetGuiPlugin.getInstance().getImage("transaction_detail.gif");
+ } else if (element instanceof RelationLinkChange && columnIndex == 2) {
+ ArtifactType descriptor = ((RelationLinkChange) element).getOtherArtifactDescriptor();
+ if (descriptor == null)
+ return null;
+ else
+ return descriptor.getImage();
+
+ }
+ return null;
+ }
+
+ /**
+ * returns the text for a specific column
+ */
+ public String getColumnText(Object element, int columnIndex) {
+
+ if (element instanceof TransactionData) {
+ TransactionData data = (TransactionData) element;
+
+ if (columnIndex == 0)
+ return String.valueOf(data.getTransactionNumber());
+
+ else if (columnIndex == 1)
+ return String.valueOf((Timestamp) data.getTimeStamp());
+
+ else if (columnIndex == 2)
+ return String.valueOf(data.getName());
+
+ else if (columnIndex == 3) return data.getComment();
+ } else if (element instanceof IAttributeChange) {
+ IAttributeChange change = (IAttributeChange) element;
+
+ if (columnIndex == 0) {
+ return String.valueOf(change.getGammaId());
+ } else if (columnIndex == 1) {
+ return change.getName();
+ } else if (columnIndex == 2) {
+ return "was:" + change.getWasValue();
+ } else if (columnIndex == 3) {
+ return "is:" + change.getChange();
+ }
+ } else if (element instanceof RelationLinkChange) {
+ RelationLinkChange change = (RelationLinkChange) element;
+
+ if (columnIndex == 0) {
+ return String.valueOf(change.getGammaId());
+ } else if (columnIndex == 1) {
+ return change.getRelTypeName();
+ } else if (columnIndex == 2) {
+ return change.getOtherArtifactName();
+ } else if (columnIndex == 3) {
+ return change.getRationale();
+ }
+ }
+
+ return "";
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public Image getImage(Object element) {
+ return getColumnImage(element, 0);
+ }
+
+ /**
+ * return the text for the first column as default
+ */
+ public String getText(Object element) {
+ return getColumnText(element, 0);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryView.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryView.java
new file mode 100644
index 00000000000..565654e71bf
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/RevisionHistoryView.java
@@ -0,0 +1,274 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.history;
+
+import java.util.logging.Level;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.db.connection.exception.ArtifactDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.menu.ArtifactDiffMenu;
+import org.eclipse.osee.framework.ui.skynet.menu.ArtifactPreviewMenu;
+import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * Displays an artifacts revision history specific to a branch.
+ *
+ * @author Jeff C. Phillips
+ */
+public class RevisionHistoryView extends ViewPart implements IActionable, IFrameworkTransactionEventListener, IBranchEventListener {
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.history.RevisionHistoryView";
+ private static final String[] columnNames = {"Revision", "Time Stamp", "Author", "Comment"};
+ private static final String ARTIFACT_GUID = "GUID";
+ private TreeViewer treeViewer;
+ private Artifact artifact;
+
+ /**
+ *
+ */
+ public RevisionHistoryView() {
+ super();
+
+ OseeEventManager.addListener(this);
+ }
+
+ public static void open(Artifact artifact) {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ try {
+ RevisionHistoryView revisionHistoryView =
+ (RevisionHistoryView) page.showView(RevisionHistoryView.VIEW_ID, artifact.getGuid(),
+ IWorkbenchPage.VIEW_ACTIVATE);
+ revisionHistoryView.explore(artifact);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ @Override
+ public void createPartControl(Composite parent) {
+ if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) return;
+
+ GridData gridData = new GridData();
+ gridData.verticalAlignment = GridData.FILL;
+ gridData.horizontalAlignment = GridData.FILL;
+ gridData.grabExcessVerticalSpace = true;
+ gridData.grabExcessHorizontalSpace = true;
+
+ parent.setLayoutData(gridData);
+
+ treeViewer = new TreeViewer(parent, SWT.FULL_SELECTION | SWT.MULTI);
+ treeViewer.setContentProvider(new RevisionHistoryContentProvider());
+ treeViewer.setLabelProvider(new RevisionHistoryLabelProvider());
+
+ createColumns();
+ treeViewer.addDoubleClickListener(new Transaction2ClickListener());
+
+ Menu popupMenu = new Menu(parent);
+ ArtifactPreviewMenu.createPreviewMenuItem(popupMenu, treeViewer);
+ ArtifactDiffMenu.createDiffMenuItem(popupMenu, treeViewer, "Compare two Artifacts", null);
+ treeViewer.getTree().setMenu(popupMenu);
+ createActions();
+
+ OseeContributionItem.addTo(this, true);
+
+ explore(artifact);
+ }
+
+ protected void createActions() {
+ Action expandAll = new Action("Expand All") {
+
+ @Override
+ public void run() {
+ treeViewer.expandAll();
+ }
+ };
+ expandAll.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("expandAll.gif"));
+ expandAll.setToolTipText("Expand All");
+
+ Action refreshAction = new Action("Refresh") {
+
+ @Override
+ public void run() {
+ explore(artifact);
+ }
+ };
+ refreshAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("refresh.gif"));
+ refreshAction.setToolTipText("Refresh");
+
+ IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
+ toolbarManager.add(expandAll);
+ toolbarManager.add(refreshAction);
+
+ OseeAts.addBugToViewToolbar(this, this, SkynetGuiPlugin.getInstance(), VIEW_ID, "Revision History");
+
+ }
+
+ private void createColumns() {
+ Tree tree = treeViewer.getTree();
+
+ tree.setHeaderVisible(true);
+ TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
+ column1.setWidth(100);
+ column1.setText(columnNames[0]);
+
+ TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
+ column2.setWidth(200);
+ column2.setText(columnNames[1]);
+
+ TreeColumn column3 = new TreeColumn(tree, SWT.LEFT);
+ column3.setWidth(150);
+ column3.setText(columnNames[2]);
+
+ TreeColumn column4 = new TreeColumn(tree, SWT.LEFT);
+ column4.setWidth(250);
+ column4.setText(columnNames[3]);
+
+ setHelpContexts();
+ }
+
+ @Override
+ public void setFocus() {
+ treeViewer.getControl().setFocus();
+ }
+
+ /**
+ * Explores an artifacts history.
+ *
+ * @param artifact
+ */
+ public void explore(Artifact artifact) {
+ if (treeViewer != null && artifact != null) {
+ this.artifact = artifact;
+ // Pair<TransactionId, TransactionId> points = transactionIdManager.getStartEndPoint(artifact.getBranch());
+ // historyTable.setInput(new ArtifactChange(ChangeType.OUTGOING, ModificationType.CHANGE, artifact, null, null, points.getKey(), points.getValue(),0));
+ treeViewer.setInput(artifact);
+ setContentDescription("Artifact: " + artifact.getDescriptiveName());
+ }
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ private void setHelpContexts() {
+ SkynetGuiPlugin.getInstance().setHelp(treeViewer.getControl(), "revision_history_tree_viewer");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite, org.eclipse.ui.IMemento)
+ */
+ @Override
+ public void init(IViewSite site, IMemento memento) throws PartInitException {
+ super.init(site, memento);
+
+ try {
+ if (memento != null) {
+ String guid = memento.getString(ARTIFACT_GUID);
+ if (guid != null) {
+ artifact = ArtifactQuery.getArtifactFromId(guid, BranchManager.getDefaultBranch());
+ }
+ }
+ } catch (ArtifactDoesNotExist ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, ex);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
+ */
+ @Override
+ public void saveState(IMemento memento) {
+ if (artifact != null) {
+ memento.putString(ARTIFACT_GUID, artifact.getGuid());
+ }
+ super.saveState(memento);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+ */
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ super.dispose();
+ }
+
+ private void closeView() {
+ if (artifact == null) return;
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ getViewSite().getPage().hideView(getViewSite().getPage().findViewReference(VIEW_ID, artifact.getGuid()));
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IFrameworkTransactionEventListener#handleFrameworkTransactionEvent(org.eclipse.osee.framework.ui.plugin.event.Sender.Source, org.eclipse.osee.framework.skynet.core.eventx.FrameworkTransactionData)
+ */
+ @Override
+ public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException {
+ if (artifact != null && transData.isDeleted(artifact)) {
+ closeView();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, org.eclipse.osee.framework.skynet.core.artifact.Branch, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, int branchId) {
+ if (artifact != null && (artifact.getBranch().isArchived() || artifact.getBranch().getBranchId() != branchId)) {
+ closeView();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/Transaction2ClickListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/Transaction2ClickListener.java
new file mode 100644
index 00000000000..74cdb5bb2bf
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/history/Transaction2ClickListener.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.history;
+
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.revision.TransactionData;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class Transaction2ClickListener implements IDoubleClickListener {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
+ */
+ public void doubleClick(DoubleClickEvent event) {
+ Object selectedItem = ((IStructuredSelection) event.getSelection()).getFirstElement();
+ if (selectedItem instanceof TransactionData) {
+ openArtifact((TransactionData) selectedItem);
+ } else {
+ OSEELog.logSevere(SkynetGuiPlugin.class, "Selected item not of expected type", true);
+ }
+ }
+
+ private void openArtifact(TransactionData transactionData) {
+ try {
+ Artifact artifact =
+ ArtifactPersistenceManager.getInstance().getArtifactFromId(transactionData.getAssociatedArtId(),
+ transactionData.getTransactionId());
+ ArtifactEditor.editArtifact(artifact);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/ArtifactRequest.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/ArtifactRequest.java
new file mode 100644
index 00000000000..05611168282
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/ArtifactRequest.java
@@ -0,0 +1,203 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.httpRequests;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.net.URLEncoder;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.osee.framework.core.client.server.HttpRequest;
+import org.eclipse.osee.framework.core.client.server.HttpResponse;
+import org.eclipse.osee.framework.core.client.server.HttpUrlBuilder;
+import org.eclipse.osee.framework.core.client.server.IHttpServerRequest;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionId;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionIdManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.artifact.snapshot.ArtifactSnapshotManager;
+import org.eclipse.osee.framework.ui.skynet.render.FileRenderer;
+import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class ArtifactRequest implements IHttpServerRequest {
+ private static final String GUID_KEY = "guid";
+ private static final String BRANCH_NAME_KEY = "branch";
+ private static final String BRANCH_ID_KEY = "branchId";
+ private static final String TRANSACTION_NUMBER_KEY = "transaction";
+ private static final String FORCE_KEY = "force";
+ private static final String FORMAT_KEY = "format";
+ private static final HttpUrlBuilder urlBuilder = HttpUrlBuilder.getInstance();
+ private static final ArtifactRequest instance = new ArtifactRequest();
+
+ public enum FormatEnums {
+ HTML, NATIVE
+ }
+
+ private ArtifactRequest() {
+ }
+
+ public static ArtifactRequest getInstance() {
+ return instance;
+ }
+
+ private Map<String, String> getParameters(Artifact artifact) {
+ Map<String, String> keyValues = new HashMap<String, String>();
+ String guid = artifact.getGuid();
+ int branch = artifact.getBranch().getBranchId();
+ if (Strings.isValid(guid)) {
+ keyValues.put(GUID_KEY, guid);
+ }
+ keyValues.put(BRANCH_ID_KEY, Integer.toString(branch));
+ if (artifact.isHistorical()) {
+ int txNumber = artifact.getTransactionNumber();
+ keyValues.put(TRANSACTION_NUMBER_KEY, Integer.toString(txNumber));
+ }
+ // This was added to fix browser refresh problem
+ // parameter is guaranteed to be different every time ensuring browser will request the page.
+ keyValues.put("date", Long.toString(new Date().getTime()));
+ return keyValues;
+ }
+
+ public String getUrl(Artifact artifact) {
+ return urlBuilder.getUrlForLocalSkynetHttpServer(getRequestType(), getParameters(artifact));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.skynet.core.linking.IHttpServerRequest#getRequestType()
+ */
+ public String getRequestType() {
+ return "GET.ARTIFACT";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.skynet.core.linking.IHttpServerRequest#processRequest(org.eclipse.osee.framework.skynet.core.linking.HttpRequest,
+ * org.eclipse.osee.framework.skynet.core.linking.HttpResponse)
+ */
+ public void processRequest(HttpRequest httpRequest, HttpResponse httpResponse) {
+ boolean updateCache = Boolean.parseBoolean(httpRequest.getParameter(FORCE_KEY));
+ long start = System.currentTimeMillis();
+ try {
+ final Artifact artifact = getRequestedArtifact(httpRequest);
+ final FormatEnums requesttedFormat = getFormatType(httpRequest);
+ switch (requesttedFormat) {
+ case NATIVE:
+ sendAsNative(artifact, httpResponse);
+ break;
+ case HTML:
+ default:
+ sendAsHTML(artifact, updateCache, httpResponse);
+ break;
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, String.format("Get Artifact Error: [%s]",
+ httpRequest.getParametersAsString()), ex);
+ httpResponse.outputStandardError(400, "Exception handling request", ex);
+ }
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, String.format("Time to serve Artifact Request: [%s] ms.",
+ System.currentTimeMillis() - start));
+ }
+
+ private Artifact getRequestedArtifact(HttpRequest httpRequest) throws Exception {
+ String guidKey = httpRequest.getParameter(GUID_KEY);
+ String branchIdKey = httpRequest.getParameter(BRANCH_ID_KEY);
+ String branchNameKey = httpRequest.getParameter(BRANCH_NAME_KEY);
+ String transactionKey = httpRequest.getParameter(TRANSACTION_NUMBER_KEY);
+ Artifact toReturn;
+
+ if (Strings.isValid(transactionKey)) {
+ toReturn = getArtifactBasedOnTransactionNumber(guidKey, Integer.parseInt(transactionKey));
+ } else {
+ toReturn = getLatestArtifactForBranch(guidKey, branchIdKey, branchNameKey);
+ }
+ return toReturn;
+ }
+
+ private FormatEnums getFormatType(HttpRequest httpRequest) {
+ String format = httpRequest.getParameter(FORMAT_KEY);
+ FormatEnums toReturn = FormatEnums.HTML;
+ try {
+ toReturn = FormatEnums.valueOf(format.toUpperCase());
+ } catch (Exception ex) {
+ toReturn = FormatEnums.HTML;
+ }
+ return toReturn;
+ }
+
+ private void sendAsHTML(Artifact artifact, boolean updateCache, HttpResponse httpResponse) throws Exception {
+ String html = ArtifactSnapshotManager.getInstance().getDataSnapshot(artifact, updateCache);
+ httpResponse.getPrintStream().println(AHTML.pageEncoding(html));
+ }
+
+ private void sendAsNative(Artifact artifact, HttpResponse httpResponse) throws Exception {
+ try {
+ FileRenderer fileRenderer = RendererManager.getBestFileRenderer(PresentationType.EDIT, artifact);
+
+ Branch branch = artifact.getBranch();
+ IFolder baseFolder = fileRenderer.getRenderFolder(branch, PresentationType.EDIT);
+ IFile iFile =
+ fileRenderer.renderToFileSystem(new NullProgressMonitor(), baseFolder, artifact, branch,
+ PresentationType.EDIT);
+
+ File file = iFile.getLocation().toFile();
+ String fileName = artifact.getDescriptiveName() + "." + iFile.getFileExtension();
+ String encodedFileName = URLEncoder.encode(fileName, "UTF-8");
+
+ httpResponse.setReponseHeader("Accept-Ranges", "bytes");
+ httpResponse.setContentType("application");
+ httpResponse.setContentEncoding(iFile.getCharset());
+ httpResponse.setContentDisposition("attachment; filename=" + encodedFileName);
+ httpResponse.sendResponseHeaders(200, file.length());
+
+ httpResponse.sendBody(new FileInputStream(file));
+
+ iFile.delete(true, new NullProgressMonitor());
+ } catch (OseeArgumentException ex) {
+ sendAsHTML(artifact, false, httpResponse);
+ }
+ }
+
+ private Artifact getLatestArtifactForBranch(String guid, String branchId, String branchName) throws OseeCoreException {
+ final Branch branch;
+ if (Strings.isValid(branchId)) {
+ branch = BranchManager.getBranch(Integer.parseInt(branchId));
+ } else {
+ branch = BranchManager.getBranch(branchName);
+ }
+ return ArtifactQuery.getArtifactFromId(guid, branch, true);
+ }
+
+ private Artifact getArtifactBasedOnTransactionNumber(String guid, int transactioNumber) throws Exception {
+ TransactionId transactionId = TransactionIdManager.getTransactionId(transactioNumber);
+ return ArtifactPersistenceManager.getInstance().getArtifact(guid, transactionId);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/ArtifactTreeRequest.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/ArtifactTreeRequest.java
new file mode 100644
index 00000000000..3515e7a884b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/ArtifactTreeRequest.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.httpRequests;
+
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.core.client.server.HttpRequest;
+import org.eclipse.osee.framework.core.client.server.HttpResponse;
+import org.eclipse.osee.framework.core.client.server.IHttpServerRequest;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import com.sun.org.apache.xml.internal.serialize.OutputFormat;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class ArtifactTreeRequest implements IHttpServerRequest {
+
+ private static final String BRANCH_KEY = "branchId";
+ private static final String FROM_KEY = "guid";
+ private static final String LEVELS_KEY = "levels";
+ private static final ArtifactTreeRequest instance = new ArtifactTreeRequest();
+
+ private ArtifactTreeRequest() {
+ }
+
+ public static ArtifactTreeRequest getInstance() {
+ return instance;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.skynet.core.linking.IHttpServerRequest#getRequestType()
+ */
+ public String getRequestType() {
+ return "GET.ARTIFACT.TREE";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.linking.IHttpServerRequest#processRequest(org.eclipse.osee.framework.skynet.core.linking.HttpRequest, org.eclipse.osee.framework.skynet.core.linking.HttpResponse)
+ */
+ public void processRequest(HttpRequest httpRequest, HttpResponse httpResponse) {
+ String branchKey = httpRequest.getParameter(BRANCH_KEY);
+ String guidLevel = httpRequest.getParameter(FROM_KEY);
+ String levelKey = httpRequest.getParameter(LEVELS_KEY);
+
+ try {
+ Branch branch = BranchManager.getBranch(Integer.parseInt(branchKey));
+
+ Artifact artifact = null;
+ if (Strings.isValid(guidLevel)) {
+ artifact = ArtifactQuery.getArtifactFromId(guidLevel, branch);
+ } else {
+ artifact = ArtifactPersistenceManager.getDefaultHierarchyRootArtifact(branch);
+ }
+
+ Document doc = Jaxp.newDocument();
+ Element root = Jaxp.createElement(doc, "artifact.tree", "");
+ doc.appendChild(root);
+
+ if (Strings.isValid(guidLevel)) {
+ root.setAttribute("guid", guidLevel);
+ }
+
+ if (artifact != null) {
+ int level = 0;
+ try {
+ level = Integer.parseInt(levelKey);
+ } catch (NumberFormatException ex) {
+ level = 1;
+ }
+ buildArtifactTree(doc, root, artifact, level);
+ }
+ doc.setXmlStandalone(true);
+ httpResponse.getPrintStream().println(Jaxp.xmlToString(doc, new OutputFormat(doc, "UTF-8", true)));
+ } catch (Exception ex) {
+ httpResponse.outputStandardError(400, "Exception handling request", ex);
+ }
+ }
+
+ private void buildArtifactTree(Document doc, Element element, Artifact artifact, final int level) {
+ if (level > 0) {
+ List<Artifact> children;
+ try {
+ children = artifact.getChildren();
+
+ for (Artifact child : children) {
+ Element childElement = createArtifactElement(doc, child, level);
+ element.appendChild(childElement);
+ buildArtifactTree(doc, childElement, child, level - 1);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ private Element createArtifactElement(Document doc, Artifact artifact, int level) {
+ Element newElement = Jaxp.createElement(doc, "artifact", "");
+ newElement.setAttribute("name", artifact.getDescriptiveName());
+ newElement.setAttribute("guid", artifact.getGuid());
+ if (level <= 1) {
+ try {
+ newElement.setAttribute("hasChildren", Boolean.toString(artifact.getChildren().size() > 0));
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, "Error sending error string", ex);
+ }
+ }
+ return newElement;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/BranchRequest.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/BranchRequest.java
new file mode 100644
index 00000000000..eddbc75e620
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/BranchRequest.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.httpRequests;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.core.client.server.HttpRequest;
+import org.eclipse.osee.framework.core.client.server.HttpResponse;
+import org.eclipse.osee.framework.core.client.server.HttpUrlBuilder;
+import org.eclipse.osee.framework.core.client.server.IHttpServerRequest;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import com.sun.org.apache.xml.internal.serialize.OutputFormat;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class BranchRequest implements IHttpServerRequest {
+
+ private static final BranchRequest instance = new BranchRequest();
+
+ private BranchRequest() {
+ }
+
+ public static BranchRequest getInstance() {
+ return instance;
+ }
+
+ public String getUrl(Artifact artifact) {
+ Map<String, String> keyValues = new HashMap<String, String>();
+ return HttpUrlBuilder.getInstance().getUrlForLocalSkynetHttpServer(getRequestType(), keyValues);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.skynet.core.linking.IHttpServerRequest#getRequestType()
+ */
+ public String getRequestType() {
+ return "GET.BRANCHES";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.skynet.core.linking.IHttpServerRequest#processRequest(org.eclipse.osee.framework.skynet.core.linking.HttpRequest,
+ * org.eclipse.osee.framework.skynet.core.linking.HttpResponse)
+ */
+ public void processRequest(HttpRequest httpRequest, HttpResponse httpResponse) {
+ try {
+ List<Branch> branches = BranchManager.getNormalBranches();
+
+ Document doc = Jaxp.newDocument();
+ Element root = Jaxp.createElement(doc, "skynet.branches", "");
+ doc.appendChild(root);
+ for (Branch branch : branches) {
+ root.appendChild(createBranchElement(doc, branch));
+ }
+ doc.setXmlStandalone(true);
+ httpResponse.getPrintStream().println(Jaxp.xmlToString(doc, new OutputFormat(doc, "UTF-8", true)));
+ } catch (Exception ex) {
+ httpResponse.outputStandardError(400, "Exception handling request", ex);
+ }
+ }
+
+ private Element createBranchElement(Document doc, Branch branch) {
+ Element branchEl = Jaxp.createElement(doc, "branch", "");
+ try {
+ branchEl.setAttribute("name", branch.getBranchName());
+ branchEl.setAttribute("id", Integer.toString(branch.getBranchId()));
+ // branchEl.setAttribute("comment", "");
+ // branchEl.setAttribute("author",
+ // SkynetAuthentication.getInstance().getUserByArtId(branch.getAuthorId()).getName());
+ // branchEl.setAttribute("creationDate", "");
+
+ //TODO need to find out if this should be calling getChildBranches recursively
+ //That is how it was running before so I will continue to run it that way.
+ Collection<Branch> branches = branch.getChildBranches(true);
+ if (branches.size() != 0) {
+ for (Branch childBranch : branches) {
+ branchEl.appendChild(createBranchElement(doc, childBranch));
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return branchEl;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/HttpImageRequest.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/HttpImageRequest.java
new file mode 100644
index 00000000000..787a5bab60f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/httpRequests/HttpImageRequest.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.httpRequests;
+
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.osee.framework.core.client.server.HttpRequest;
+import org.eclipse.osee.framework.core.client.server.HttpResponse;
+import org.eclipse.osee.framework.core.client.server.HttpUrlBuilder;
+import org.eclipse.osee.framework.core.client.server.IHttpServerRequest;
+import org.eclipse.osee.framework.ui.skynet.artifact.snapshot.ArtifactSnapshotManager;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class HttpImageRequest implements IHttpServerRequest {
+ private static HttpImageRequest instance = null;
+
+ private static final String IMAGE_KEY = "image";
+ private static final String NAMESPACE_KEY = "namespace";
+ private static final String KEY_KEY = "key";
+ private static final String REQUEST_TYPE = "HTTP.IMAGE";
+
+ private HttpImageRequest() {
+ }
+
+ public static HttpImageRequest getInstance() {
+ if (instance == null) {
+ instance = new HttpImageRequest();
+ }
+ return instance;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.skynet.core.linking.IHttpServerRequest#getRequestType()
+ */
+ public String getRequestType() {
+ return REQUEST_TYPE;
+ }
+
+ public String getRequestUrl(String namespace, String key, String imageKey) throws UnsupportedEncodingException {
+ HttpUrlBuilder builder = HttpUrlBuilder.getInstance();
+ Map<String, String> parameters = new HashMap<String, String>();
+ parameters.put(NAMESPACE_KEY, namespace);
+ parameters.put(KEY_KEY, key);
+ parameters.put(IMAGE_KEY, imageKey);
+ return String.format("%s?%s", getRequestType(), builder.getParametersAsEncodedUrl(parameters));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.skynet.core.linking.IHttpServerRequest#processRequest(java.io.DataOutputStream,
+ * java.util.Map, java.lang.String)
+ */
+ public void processRequest(HttpRequest httpRequest, HttpResponse httpResponse) {
+ String imageKey = httpRequest.getParameter(IMAGE_KEY);
+ String namespace = httpRequest.getParameter(NAMESPACE_KEY);
+ String key = httpRequest.getParameter(KEY_KEY);
+ try {
+ ArtifactSnapshotManager.getInstance().getImageSnapshot(namespace, key, imageKey,
+ httpResponse.getOutputStream());
+ } catch (Exception ex) {
+ httpResponse.outputStandardError(404, String.format("Error with image [%s::%s - %s].", namespace, key,
+ imageKey), ex);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactDiffMenu.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactDiffMenu.java
new file mode 100644
index 00000000000..7060933d7a4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactDiffMenu.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.menu;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.revision.TransactionData;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class ArtifactDiffMenu {
+
+ public enum DiffTypes {
+ CONFLICT, PARENT
+ }
+
+ private static final String DIFF_ARTIFACT = "DIFF_ARTIFACT";
+ private static boolean validSelection;
+ private static Object firstSelection;
+ private static Object secondSelection;
+
+ public static void createDiffMenuItem(Menu parentMenu, final Viewer viewer, String subMenuText, final DiffTypes diffType) {
+ final MenuItem diffMenuItem = new MenuItem(parentMenu, SWT.CASCADE);
+ diffMenuItem.setText(subMenuText);
+
+ final Menu submenu = new Menu(diffMenuItem);
+ diffMenuItem.setMenu(submenu);
+
+ final MenuItem stdDiffMenuItem = new MenuItem(submenu, SWT.PUSH);
+ stdDiffMenuItem.setText("Standard Diff");
+
+ stdDiffMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+ try {
+ processSelectedArtifacts(null, viewer, diffType);
+ } catch (Exception ex) {
+ }
+ }
+ });
+
+ final MenuItem diffArtifactMenuItem = new MenuItem(submenu, SWT.PUSH);
+ diffArtifactMenuItem.setText("Diff Artifact");
+
+ diffArtifactMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+ try {
+ processSelectedArtifacts(DIFF_ARTIFACT, viewer, diffType);
+ } catch (Exception ex) {
+ }
+ }
+ });
+
+ parentMenu.addMenuListener(new MenuListener() {
+
+ public void menuHidden(MenuEvent e) {
+ }
+
+ public void menuShown(MenuEvent e) {
+ validSelection = false;
+
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+
+ if (!selection.isEmpty()) {
+ if (selection.size() == 2) {
+ validSelection = validateTransactionData(viewer, selection);
+ }
+ }
+ diffMenuItem.setEnabled(validSelection);
+ }
+ });
+ }
+
+ private static boolean validateTransactionData(Viewer viewer, IStructuredSelection selection) {
+ boolean valid = false;
+ Object[] selections = selection.toArray();
+
+ if (selections[1] instanceof TransactionData && selections[0] instanceof TransactionData) {
+ Artifact selectedArtifact = (Artifact) viewer.getInput();
+ valid = (selectedArtifact instanceof WordArtifact);
+ }
+ return valid;
+ }
+
+ private static void processSelectedArtifacts(String option, Viewer viewer, DiffTypes type) throws Exception {
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+ WordArtifact newerArtifact = null;
+ WordArtifact baselineArtifact = null;
+
+ if (selection.size() == 2) {
+ Object[] selections = selection.toArray();
+ firstSelection = selections[0];
+ secondSelection = selections[1];
+
+ if (firstSelection instanceof TransactionData && secondSelection instanceof TransactionData) {
+
+ TransactionData firstTransactionData = (TransactionData) firstSelection;
+ TransactionData secondTransactionData = (TransactionData) secondSelection;
+ if (firstTransactionData.getTransactionId().getTransactionNumber() < secondTransactionData.getTransactionId().getTransactionNumber()) {
+ firstTransactionData = (TransactionData) secondSelection;
+ secondTransactionData = (TransactionData) firstSelection;
+ }
+ newerArtifact =
+ (WordArtifact) ArtifactPersistenceManager.getInstance().getArtifactFromId(
+ firstTransactionData.getAssociatedArtId(), firstTransactionData.getTransactionId());
+ baselineArtifact =
+ (WordArtifact) ArtifactPersistenceManager.getInstance().getArtifactFromId(
+ secondTransactionData.getAssociatedArtId(), secondTransactionData.getTransactionId());
+ }
+ }
+ RendererManager.diffInJob(baselineArtifact, newerArtifact);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactPreviewMenu.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactPreviewMenu.java
new file mode 100644
index 00000000000..c6ff6663e10
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactPreviewMenu.java
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.menu;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.revision.ArtifactChange;
+import org.eclipse.osee.framework.skynet.core.revision.TransactionData;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.render.ITemplateRenderer;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.swt.ITreeNode;
+import org.eclipse.osee.framework.ui.swt.TreeViewerUtility;
+import org.eclipse.search.ui.text.Match;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class ArtifactPreviewMenu {
+
+ public static void createPreviewMenuItem(Menu parentMenu, final Viewer viewer) {
+ final MenuItem previewMenuItem = new MenuItem(parentMenu, SWT.CASCADE);
+ previewMenuItem.setText("&Preview");
+
+ final Menu submenu = new Menu(previewMenuItem);
+ previewMenuItem.setMenu(submenu);
+
+ final MenuItem previewArtifact = new MenuItem(submenu, SWT.PUSH);
+ previewArtifact.setText("Preview Artifact");
+
+ previewArtifact.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent ev) {
+ preview(viewer);
+ }
+ });
+
+ final MenuItem previewWithChildRecursionItem = new MenuItem(submenu, SWT.PUSH);
+ previewWithChildRecursionItem.setText("Preview with child recursion");
+
+ previewWithChildRecursionItem.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent ev) {
+ preview(viewer, ITemplateRenderer.PREVIEW_WITH_RECURSE_OPTION_PAIR);
+ }
+ });
+
+ parentMenu.addMenuListener(new MenuListener() {
+
+ public void menuHidden(MenuEvent e) {
+ }
+
+ public void menuShown(MenuEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+ Iterator<?> iterator = selection.iterator();
+ boolean permitted = true;
+ Artifact artifact = null;
+
+ try {
+ while (iterator.hasNext()) {
+ Object object = iterator.next();
+
+ if (object instanceof Artifact) {
+ artifact = (Artifact) object;
+ } else if (object instanceof Match) {
+ artifact = (Artifact) ((Match) object).getElement();
+ } else if (object instanceof ITreeNode && ((ITreeNode) object).getBackingData() instanceof ArtifactChange) {
+ artifact = ((ArtifactChange) ((ITreeNode) object).getBackingData()).getArtifact();
+ } else if (object instanceof TransactionData) {
+ TransactionData firstTransactionData = (TransactionData) object;
+
+ artifact =
+ ArtifactPersistenceManager.getInstance().getArtifactFromId(
+ firstTransactionData.getAssociatedArtId(), firstTransactionData.getTransactionId());
+ }
+
+ if (artifact != null) {
+ permitted &= AccessControlManager.checkObjectPermission(artifact, PermissionEnum.READ);
+
+ //whole word artifacts can only be viewed as a single document
+ if (artifact instanceof WordArtifact && ((WordArtifact) artifact).isWholeWordArtifact()) {
+ permitted &= selection.size() == 1;
+ break;
+ }
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(ArtifactPreviewMenu.class, ex, true);
+ previewMenuItem.setEnabled(false);
+ }
+ previewMenuItem.setEnabled(permitted);
+ }
+ });
+ }
+
+ private static void preview(Viewer viewer, Object... options) {
+ try {
+ RendererManager.previewInJob(getSelectedArtifacts(viewer), new VariableMap(options));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ private static List<Artifact> getSelectedArtifacts(Viewer viewer) {
+ LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+
+ if (!selection.isEmpty()) {
+ // preOrder can only done for TreeViewers
+ if (viewer instanceof TreeViewer) {
+ Object firstElement = selection.getFirstElement();
+
+ try {
+ // This to support the changeReportView
+ if (firstElement instanceof ITreeNode && ((ITreeNode) firstElement).getBackingData() instanceof ArtifactChange) {
+ ArtifactChange artifactChange = (ArtifactChange) ((ITreeNode) firstElement).getBackingData();
+ selectedItems.add(artifactChange.getArtifact());
+ }
+ // Resource History
+ else if (firstElement instanceof TransactionData) {
+ TransactionData firstTransactionData = (TransactionData) firstElement;
+
+ selectedItems.add(ArtifactPersistenceManager.getInstance().getArtifactFromId(
+ firstTransactionData.getAssociatedArtId(), firstTransactionData.getTransactionId()));
+ } else {
+ TreeViewerUtility.getPreorderSelection((TreeViewer) viewer, selectedItems);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(ArtifactPreviewMenu.class, ex, true);
+ }
+ } else {
+ for (Object object : selection.toArray()) {
+ if (object instanceof Artifact) {
+ selectedItems.add((Artifact) object);
+ } else if (object instanceof Match) {
+ selectedItems.add((Artifact) ((Match) object).getElement());
+ }
+ }
+ }
+ }
+ return selectedItems;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactTableViewerGlobalMenuHelper.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactTableViewerGlobalMenuHelper.java
new file mode 100644
index 00000000000..730c7df9d09
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactTableViewerGlobalMenuHelper.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.menu;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.menu.GlobalMenu.GlobalMenuItem;
+import org.eclipse.search.ui.text.Match;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ArtifactTableViewerGlobalMenuHelper implements IGlobalMenuHelper {
+
+ private final org.eclipse.jface.viewers.TableViewer tableViewer;
+
+ public ArtifactTableViewerGlobalMenuHelper(TableViewer tableViewer) {
+ this.tableViewer = tableViewer;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.menu.IGlobalMenuHelper#getSelectedArtifacts()
+ */
+ public Collection<Artifact> getArtifacts() {
+ Set<Artifact> artifacts = new HashSet<Artifact>();
+ if (tableViewer == null || tableViewer.getTable().isDisposed()) return artifacts;
+ IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection();
+ Iterator<?> iterator = selection.iterator();
+ while (iterator.hasNext()) {
+ Object obj = iterator.next();
+ if (obj instanceof Artifact)
+ artifacts.add((Artifact) obj);
+ else if ((obj instanceof Match) && (((Match) obj).getElement() instanceof Artifact)) artifacts.add((Artifact) ((Match) obj).getElement());
+ }
+ return artifacts;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.menu.IGlobalMenuHelper#getValidMenuItems()
+ */
+ public Collection<GlobalMenuItem> getValidMenuItems() {
+ return GlobalMenuItem.ALL;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactTreeViewerGlobalMenuHelper.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactTreeViewerGlobalMenuHelper.java
new file mode 100644
index 00000000000..6dc4a18789f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/ArtifactTreeViewerGlobalMenuHelper.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.menu;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.menu.GlobalMenu.GlobalMenuItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ArtifactTreeViewerGlobalMenuHelper implements IGlobalMenuHelper {
+
+ private final TreeViewer treeViewer;
+
+ public ArtifactTreeViewerGlobalMenuHelper(TreeViewer treeViewer) {
+ this.treeViewer = treeViewer;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.menu.IGlobalMenuHelper#getSelectedArtifacts()
+ */
+ public Collection<Artifact> getArtifacts() {
+ Set<Artifact> artifacts = new HashSet<Artifact>();
+ if (treeViewer == null || treeViewer.getTree().isDisposed()) return artifacts;
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> iterator = selection.iterator();
+ while (iterator.hasNext()) {
+ Object obj = iterator.next();
+ if (obj instanceof Artifact) artifacts.add((Artifact) obj);
+ }
+ return artifacts;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.menu.IGlobalMenuHelper#getValidMenuItems()
+ */
+ public Collection<GlobalMenuItem> getValidMenuItems() {
+ return GlobalMenuItem.ALL;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenu.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenu.java
new file mode 100644
index 00000000000..7fc8496603d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenu.java
@@ -0,0 +1,254 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.menu;
+
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.db.connection.DbTransaction;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Provided so all OSEE context menus (and programatic manipulations) can share the same menu items, dialogs,
+ * permissions checks and code.
+ *
+ * @author Donald G. Dunne
+ */
+public class GlobalMenu {
+
+ private final IGlobalMenuHelper globalMenuHelper;
+
+ private MenuItem deleteMenuItem;
+ private MenuItem purgeMenuItem;
+ private MenuItem tagMenuItem;
+ public static enum GlobalMenuItem {
+ DeleteArtifacts, PurgeArtifacts;
+
+ public static List<GlobalMenuItem> ALL = Arrays.asList(GlobalMenuItem.values());
+ };
+ private ArrayList<GlobalMenuListener> listeners = new ArrayList<GlobalMenuListener>();
+
+ public GlobalMenu(Menu parentMenu, IGlobalMenuHelper globalMenuHelper) {
+ this.globalMenuHelper = globalMenuHelper;
+ if (parentMenu != null) {
+ parentMenu.addMenuListener(new EnablementMenuListener());
+ if (globalMenuHelper.getValidMenuItems().contains(GlobalMenuItem.DeleteArtifacts)) createDeleteMenuItem(parentMenu);
+ if (globalMenuHelper.getValidMenuItems().contains(GlobalMenuItem.PurgeArtifacts)) createPurgeMenuItem(parentMenu);
+ }
+ }
+
+ public GlobalMenu(IGlobalMenuHelper globalMenuHelper) {
+ this(null, globalMenuHelper);
+ }
+
+ public void addGlobalMenuListener(GlobalMenuListener listener) {
+ listeners.add(listener);
+ }
+
+ public void removeGlobalMenuListener(GlobalMenuListener listener) {
+ listeners.remove(listener);
+ }
+
+ /**
+ * @author Donald G. Dunne
+ */
+ public class EnablementMenuListener implements MenuListener {
+
+ public void menuHidden(MenuEvent e) {
+ }
+
+ public void menuShown(MenuEvent e) {
+ try {
+ GlobalMenuPermissions permiss = new GlobalMenuPermissions(globalMenuHelper);
+ if (deleteMenuItem != null) deleteMenuItem.setEnabled(permiss.isFullAccess());
+ if (purgeMenuItem != null) purgeMenuItem.setEnabled(permiss.isHasArtifacts() && AccessControlManager.isOseeAdmin());
+ if (tagMenuItem != null) tagMenuItem.setEnabled(permiss.isHasArtifacts() && permiss.isFullAccess());
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+
+ // Provided for addition to Menus
+ private void createDeleteMenuItem(Menu parentMenu) {
+ deleteMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ deleteMenuItem.setText(deleteArtifactAction.getText());
+ deleteMenuItem.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ deleteArtifactAction.run();
+ };
+ });
+ }
+
+ private Action deleteArtifactAction = new Action("&Delete Artifact\tDelete", Action.AS_PUSH_BUTTON) {
+ @Override
+ public void run() {
+ try {
+ final Collection<Artifact> artifactsToBeDeleted = globalMenuHelper.getArtifacts();
+ MessageDialog dialog =
+ new MessageDialog(Display.getCurrent().getActiveShell(), "Confirm Artifact Deletion", null,
+ " Are you sure you want to delete this artifact and all of the default hierarchy children?",
+ MessageDialog.QUESTION, new String[] {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL}, 1);
+ if (dialog.open() == 0) {
+ try {
+ for (GlobalMenuListener listener : listeners) {
+ Result result = listener.actioning(GlobalMenuItem.DeleteArtifacts, artifactsToBeDeleted);
+ if (result.isFalse()) {
+ result.popup();
+ return;
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ Artifact[] artifactsArray = artifactsToBeDeleted.toArray(new Artifact[artifactsToBeDeleted.size()]);
+ SkynetTransaction transaction = new SkynetTransaction(artifactsArray[0].getBranch());
+ ArtifactPersistenceManager.deleteArtifact(transaction, false, artifactsArray);
+ transaction.execute();
+
+ try {
+ for (GlobalMenuListener listener : listeners) {
+ listener.actioned(GlobalMenuItem.DeleteArtifacts, artifactsToBeDeleted);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ };
+
+ private Action purgeArtifactAction = new Action("&Purge Artifact(s)", Action.AS_PUSH_BUTTON) {
+ @Override
+ public void run() {
+ final Collection<Artifact> artifactsToBePurged = globalMenuHelper.getArtifacts();
+
+ if (MessageDialog.openConfirm(
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+ "Confirm Artifact Purge ",
+ " Are you sure you want to purge this artifact, all of " + "its children and all history associated with these artifacts from the database ?")) {
+ Job job = new Job("Purge artifact") {
+
+ @Override
+ protected IStatus run(final IProgressMonitor monitor) {
+ IStatus toReturn = Status.CANCEL_STATUS;
+
+ // Notify and confirm that menus should be actioned
+ try {
+ for (GlobalMenuListener listener : listeners) {
+ Result result = listener.actioning(GlobalMenuItem.PurgeArtifacts, artifactsToBePurged);
+ if (result.isFalse()) {
+ return new Status(Status.ERROR, SkynetActivator.PLUGIN_ID, Status.OK, result.getText(), null);
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ monitor.beginTask("Purge artifact", artifactsToBePurged.size());
+
+ try {
+ new DbTransaction() {
+ @Override
+ protected void handleTxWork(Connection connection) throws OseeCoreException {
+ for (Artifact artifactToPurge : artifactsToBePurged) {
+ if (!artifactToPurge.isDeleted()) {
+ monitor.setTaskName("Purge: " + artifactToPurge.getDescriptiveName());
+ artifactToPurge.purgeFromBranch(connection);
+ }
+ monitor.worked(1);
+ }
+ }
+ }.execute();
+ toReturn = Status.OK_STATUS;
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ toReturn = new Status(Status.ERROR, SkynetActivator.PLUGIN_ID, -1, ex.getMessage(), ex);
+ } finally {
+ monitor.done();
+ }
+
+ // Notify Listeners that menu was actioned
+ try {
+ for (GlobalMenuListener listener : listeners) {
+ listener.actioned(GlobalMenuItem.PurgeArtifacts, artifactsToBePurged);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ return toReturn;
+ }
+ };
+
+ Jobs.startJob(job);
+ }
+ }
+ };
+
+ private void createPurgeMenuItem(Menu parentMenu) {
+ purgeMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ purgeMenuItem.setText(purgeArtifactAction.getText());
+ purgeMenuItem.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ purgeArtifactAction.run();
+ };
+ });
+ }
+
+ /**
+ * This method is provided for programatic access to delete artifact. No permissions are checked. Preferred use is by
+ * adding item as menu item.
+ *
+ * @return the deleteArtifactAction
+ */
+ public Action getDeleteArtifactAction() {
+ return deleteArtifactAction;
+ }
+
+ /**
+ * @return the listeners
+ */
+ public ArrayList<GlobalMenuListener> getGlobalMenuListeners() {
+ return listeners;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenuListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenuListener.java
new file mode 100644
index 00000000000..ac6c437d838
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenuListener.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.menu;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.menu.GlobalMenu.GlobalMenuItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface GlobalMenuListener {
+
+ /**
+ * Called prior to performing the menu event. May or may not be called in display thread.
+ *
+ * @param item
+ * @param artifacts
+ * @return Result.False if action should NOT be performed Result.getText will be displayed as a popup to the user
+ */
+ public Result actioning(GlobalMenuItem item, Collection<Artifact> artifacts);
+
+ /**
+ * Called after performing the menu event.
+ *
+ * @param item
+ * @param artifacts
+ */
+ public void actioned(GlobalMenuItem item, Collection<Artifact> artifacts);
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenuPermissions.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenuPermissions.java
new file mode 100644
index 00000000000..5c6d3c9d895
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/GlobalMenuPermissions.java
@@ -0,0 +1,149 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.menu;
+
+import java.util.Arrays;
+import java.util.Collection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class GlobalMenuPermissions {
+ private boolean isLocked;
+ private boolean accessToRemoveLock;
+ private boolean writePermission;
+ private boolean readPermission;
+ private boolean fullAccess;
+ private boolean defaultBranchReadable;
+ private String subjectFromLockedObjectName;
+ private boolean hasArtifacts;
+
+ /**
+ * Return permission set. This is a one-shot deal at the time of instantiation. Permissions are not kept up to date
+ * with changes to getSelectedArtifacts in given globalMenuHelper. Must be called again to get refreshed permissions.
+ *
+ * @param globalMenuHelper
+ */
+ public GlobalMenuPermissions(IGlobalMenuHelper globalMenuHelper) throws OseeCoreException {
+ this(globalMenuHelper.getArtifacts());
+ }
+
+ /**
+ * Return permission set for given artifact.
+ *
+ * @param artifact
+ */
+ public GlobalMenuPermissions(Artifact artifact) throws OseeCoreException {
+ this(Arrays.asList(artifact));
+ }
+
+ /**
+ * Return permission set for given artifacts.
+ *
+ * @param artifacts
+ */
+ public GlobalMenuPermissions(Collection<Artifact> artifacts) throws OseeCoreException {
+ hasArtifacts = artifacts.size() > 0;
+ writePermission = true;
+ readPermission = true;
+ fullAccess = true;
+ isLocked = false;
+ defaultBranchReadable = true;
+ accessToRemoveLock = true;
+ Artifact combinationSubject = null;
+
+ for (Artifact objectArtifact : artifacts) {
+
+ writePermission &= AccessControlManager.checkObjectPermission(objectArtifact, PermissionEnum.WRITE);
+ readPermission &= AccessControlManager.checkObjectPermission(objectArtifact, PermissionEnum.READ);
+ fullAccess &= AccessControlManager.checkObjectPermission(objectArtifact, PermissionEnum.FULLACCESS);
+ isLocked |= AccessControlManager.hasLock(objectArtifact);
+ defaultBranchReadable =
+ AccessControlManager.checkObjectPermission(BranchManager.getDefaultBranch(), PermissionEnum.READ);
+ accessToRemoveLock &= AccessControlManager.canUnlockObject(objectArtifact, UserManager.getUser());
+
+ // acquire the name of the subject that has the lock
+ Artifact subject = AccessControlManager.getSubjectFromLockedObject(objectArtifact);
+
+ if (isLocked && subject != null) {
+ if (combinationSubject == null) {
+ combinationSubject = subject;
+ subjectFromLockedObjectName = combinationSubject.getDescriptiveName();
+ } else if (!combinationSubject.equals(subject)) {
+ subjectFromLockedObjectName = "Mixed names";
+ }
+ }
+ }
+ }
+
+ /**
+ * @return the isLocked
+ */
+ public boolean isLocked() {
+ return isLocked;
+ }
+
+ /**
+ * @return the accessToRemoveLock
+ */
+ public boolean isAccessToRemoveLock() {
+ return accessToRemoveLock;
+ }
+
+ /**
+ * @return the writePermission
+ */
+ public boolean isWritePermission() {
+ return writePermission;
+ }
+
+ /**
+ * @return the readPermission
+ */
+ public boolean isReadPermission() {
+ return readPermission;
+ }
+
+ /**
+ * @return the fullAccess
+ */
+ public boolean isFullAccess() {
+ return fullAccess;
+ }
+
+ /**
+ * @return the subjectFromLockedObjectName
+ */
+ public String getSubjectFromLockedObjectName() {
+ return subjectFromLockedObjectName;
+ }
+
+ /**
+ * @return the branchReadable
+ */
+ public boolean isDefaultBranchReadable() {
+ return defaultBranchReadable;
+ }
+
+ /**
+ * @return the hasArtifacts
+ */
+ public boolean isHasArtifacts() {
+ return hasArtifacts;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/IGlobalMenuHelper.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/IGlobalMenuHelper.java
new file mode 100644
index 00000000000..aa6481f28e6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/menu/IGlobalMenuHelper.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.menu;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.menu.GlobalMenu.GlobalMenuItem;
+
+/**
+ * Method is provided so different widget types can provide the artifacts for the GobalMenu to operate on.
+ *
+ * @author Donald G. Dunne
+ */
+public interface IGlobalMenuHelper {
+
+ public Collection<Artifact> getArtifacts();
+
+ public Collection<GlobalMenuItem> getValidMenuItems();
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/ConflictResolutionWizard.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/ConflictResolutionWizard.java
new file mode 100644
index 00000000000..d2c7c975001
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/ConflictResolutionWizard.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.conflict.AttributeConflict;
+import org.eclipse.osee.framework.skynet.core.conflict.Conflict;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.XMergeLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Theron Virgin
+ */
+public class ConflictResolutionWizard extends Wizard {
+ public static final String TITLE = "How would you like to resolve this conflict?";
+ public static final String INDENT = " ";
+ public static final String SOURCE_TITLE = "Source Value:";
+ public static final String DEST_TITLE = "Destination value:";
+ public static final String ART_TEXT = "Artifact: ";
+ public static final String TYPE_TEXT = "Attribute type: ";
+
+ private WizardPage editWizardPage;
+ private final AttributeConflict conflict;
+
+ public ConflictResolutionWizard(Conflict conflict) {
+ if (conflict instanceof AttributeConflict)
+ this.conflict = (AttributeConflict) conflict;
+ else
+ this.conflict = null;
+
+ }
+
+ @Override
+ public void addPages() {
+ if (conflict.isWordAttribute()) {
+ editWizardPage = new EditWFCAttributeWizardPage(conflict);
+ } else {
+ editWizardPage = new EditAttributeWizardPage(conflict);
+ }
+ addPage(editWizardPage);
+ }
+
+ @Override
+ public boolean performFinish() {
+ IWizardPage page = getContainer().getCurrentPage();
+ if (page instanceof EditAttributeWizardPage) {
+ return ((EditAttributeWizardPage) page).closingPage();
+ } else if (page instanceof EditWFCAttributeWizardPage) {
+ return ((EditWFCAttributeWizardPage) page).closingPage();
+ }
+ return true;
+ }
+
+ @Override
+ public boolean canFinish() {
+ return true;
+ }
+
+ public boolean getResolved() {
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.Wizard#getStartingPage()
+ */
+ @Override
+ public IWizardPage getStartingPage() {
+ if (conflict.isWordAttribute())
+ return getPage(EditWFCAttributeWizardPage.TITLE);
+ else
+ return getPage(EditAttributeWizardPage.TITLE);
+
+ }
+
+ @Override
+ public IWizardPage getPreviousPage(IWizardPage page) {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.Wizard#performCancel()
+ */
+ @Override
+ public boolean performCancel() {
+ return super.performCancel();
+ }
+
+ public void setResolution() throws OseeCoreException {
+ if (getContainer() != null) {
+ IWizardPage page = getContainer().getCurrentPage();
+ Image image = XMergeLabelProvider.getMergeImage(conflict);
+ if (page instanceof EditAttributeWizardPage) {
+ ((EditAttributeWizardPage) page).setResolution(image);
+ } else if (page instanceof EditWFCAttributeWizardPage) {
+ ((EditWFCAttributeWizardPage) page).setResolution(image);
+ }
+ }
+
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EditAttributeWizardPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EditAttributeWizardPage.java
new file mode 100644
index 00000000000..b51c9d781b2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EditAttributeWizardPage.java
@@ -0,0 +1,185 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import java.util.Arrays;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osee.framework.skynet.core.conflict.AttributeConflict;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeUtility;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+
+/**
+ * @author Theron Virgin
+ */
+public class EditAttributeWizardPage extends WizardPage {
+
+ public static final String TITLE = "Editor Page";
+ private AttributeConflict conflict;
+ private String changeType = "";
+ private Button sourceButton;
+ private Button destButton;
+ private Button clearButton;
+ private Label imageLabel;
+ private static final String SOURCE_BUTTON_TEXT = "Load Source Data";
+ private static final String SOURCE_TEXT = ConflictResolutionWizard.SOURCE_TITLE;
+ private static final String SOURCE_TOOLTIP = "Load the Editor with the Source Branch Attribute Value";
+ private static final String DEST_BUTTON_TEXT = "Load Destination Data";
+ private static final String DEST_TEXT = ConflictResolutionWizard.DEST_TITLE;
+ private static final String DEST_TOOLTIP = "Load the Editor with the Destination Branch Attribute Value";
+ private static final String CLEAR_BUTTON_TEXT = "Clear the Editor Value";
+ private static final String CLEAR_TOOLTIP = "Clear the Editor Value";
+ private static final int NUM_COLUMNS = 1;
+ private IEmbeddedAttributeEditor editor;
+
+ private final Listener listener = new Listener() {
+ public void handleEvent(Event event) {
+ // ...
+ try {
+ if (conflict.okToOverwriteMerge()) {
+ if (event.widget == sourceButton) {
+ if (conflict.getSourceObject() != null) {
+ editor.update(conflict.getSourceObject());
+ }
+ }
+ if (event.widget == destButton) {
+ if (conflict.getDestObject() != null) {
+ editor.update(conflict.getDestObject());
+ }
+ }
+ if (event.widget == clearButton) {
+ editor.update("");
+ }
+ } else {
+ MessageDialog.openInformation(getShell(), "Attention", MergeUtility.COMMITED_PROMPT);
+ }
+
+ } catch (Exception ex) {
+ OSEELog.logException(EditAttributeWizardPage.class, ex, true);
+ }
+ getWizard().getContainer().updateButtons();
+ }
+ };
+
+ /**
+ * @param pageName
+ */
+
+ public EditAttributeWizardPage(AttributeConflict conflict) {
+ super(TITLE);
+ try {
+ if (conflict != null) {
+ this.conflict = conflict;
+ changeType = conflict.getDynamicAttributeDescriptor().getName();
+ }
+ if (!conflict.isWordAttribute()) {
+ editor =
+ EmbededAttributeEditorFactory.getEmbeddedEditor(changeType, conflict.getSourceDisplayData(),
+ Arrays.asList(conflict), true);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(Composite parent) {
+ setTitle("Edit the attribute ");
+ Composite composite = new Composite(parent, SWT.NONE);
+
+ if (editor == null) {
+ setControl(composite);
+ return;
+ }
+
+ GridLayout gl = new GridLayout();
+ gl.numColumns = NUM_COLUMNS;
+ composite.setLayout(gl);
+ GridData gd = new GridData(SWT.BEGINNING);
+ composite.setLayoutData(gd);
+ gd.horizontalSpan = NUM_COLUMNS;
+
+ imageLabel = new Label(composite, SWT.NONE);
+ imageLabel.setText("hello there");
+ imageLabel.setImage(null);
+
+ try {
+ new Label(composite, SWT.NONE).setText(ConflictResolutionWizard.ART_TEXT);
+ new Label(composite, SWT.NONE).setText(ConflictResolutionWizard.INDENT + conflict.getArtifactName());
+ new Label(composite, SWT.NONE).setText(ConflictResolutionWizard.TYPE_TEXT);
+ new Label(composite, SWT.NONE).setText(ConflictResolutionWizard.INDENT + changeType);
+
+ new Label(composite, SWT.NONE).setText("");
+
+ new Label(composite, SWT.NONE).setText(SOURCE_TEXT);
+ new Label(composite, SWT.NONE).setText(ConflictResolutionWizard.INDENT + conflict.getSourceDisplayData());
+ // sourceButton =
+ // createButton(conflict.getSourceDisplayData(),SOURCE_TOOLTIP,composite,gd);
+ new Label(composite, SWT.NONE).setText(DEST_TEXT);
+ new Label(composite, SWT.NONE).setText(ConflictResolutionWizard.INDENT + conflict.getDestDisplayData());
+ } catch (Exception ex) {
+ OSEELog.logException(EditAttributeWizardPage.class, ex, true);
+ }
+
+ Composite buttonComp = new Composite(composite, SWT.NONE);
+ GridLayout glay = new GridLayout();
+ glay.numColumns = 3;
+ buttonComp.setLayout(glay);
+ GridData gdata = new GridData(SWT.FILL);
+ buttonComp.setLayoutData(gdata);
+ gdata.horizontalSpan = 1;
+
+ sourceButton = createButton(SOURCE_BUTTON_TEXT, SOURCE_TOOLTIP, buttonComp);
+ destButton = createButton(DEST_BUTTON_TEXT, DEST_TOOLTIP, buttonComp);
+ // clearButton = createButton(CLEAR_BUTTON_TEXT, CLEAR_TOOLTIP,
+ // buttonComp, gdata);
+
+ editor.create(composite, gd);
+
+ setControl(composite);
+ }
+
+ private Button createButton(String text, String tooltip, Composite composite) {
+ Button button = new Button(composite, SWT.PUSH);
+ button.addListener(SWT.Selection, listener);
+ button.setText(text);
+ button.setToolTipText(tooltip);
+ return button;
+ }
+
+ public boolean canFinish() {
+ return editor.canFinish();
+ }
+
+ public boolean closingPage() {
+ return editor.commit();
+ }
+
+ public void setResolution(Image image) {
+ imageLabel.setImage(image);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EditWFCAttributeWizardPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EditWFCAttributeWizardPage.java
new file mode 100644
index 00000000000..742aa39b102
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EditWFCAttributeWizardPage.java
@@ -0,0 +1,238 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import java.util.Date;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.conflict.AttributeConflict;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeUtility;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.XMergeLabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+
+/**
+ * @author Theron Virgin
+ */
+public class EditWFCAttributeWizardPage extends WizardPage {
+
+ public static final String TITLE = "WFC Editor Page";
+ private AttributeConflict conflict;
+ private String changeType = "";
+ private Button editButton;
+ private Button mergeButton;
+ private Button clearButton;
+ private Button sourceButton;
+ private Button destButton;
+ private Button sourceDiffButton;
+ private Button destDiffButton;
+ private Button sourceDestDiffButton;
+ private Button sourceMergeDiffButton;
+ private Button destMergeDiffButton;
+ private Label imageLabel;
+ private static final String EDIT_TEXT = "Edit Merge Artifact";
+ private static final String EDIT_TOOLTIP = "Make additional changes using the Document/Merge Editor";
+ private static final String MERGE_TEXT = "Generate Three Way Merge (Developmental)";
+ private static final String MERGE_TOOLTIP = "Use the new inline merging";
+ private static final String CLEAR_TEXT = "Clear the Merge Artifact";
+ private static final String CLEAR_TOOLTIP = "Reinitializes the merge for this Document";
+ private static final String SOURCE_TEXT = "Populate with Source Data";
+ private static final String SOURCE_TOOLTIP = "Initialize the Document with Source Values";
+ private static final String DEST_TEXT = "Populate with Destination Data";
+ private static final String DEST_TOOLTIP = "Initialize the Document with Destination Values";
+ private static final String SDIFF_TEXT = "Show Source Diff";
+ private static final String SDIFF_TOOLTIP =
+ "Show the differences between the current Source" + " artifact and the artifact at the time the Source Branch was created";
+ private static final String DDIFF_TEXT = "Show Destination Diff";
+ private static final String DDIFF_TOOLTIP =
+ "Show the differences between the current Destination" + " artifact and the artifact at the time the Source Branch was created";
+ private static final String SDDIFF_TEXT = "Show Source/Destination Diff";
+ private static final String SDDIFF_TOOLTIP =
+ "Show the differences between the current Source" + " artifact and the current Merge artifact";
+ private static final String SMDIFF_TEXT = "Show Source/Merge Diff";
+ private static final String SMDIFF_TOOLTIP =
+ "Show the differences between the current Destination" + " artifact and the current Merge artifact";
+ private static final String DMDIFF_TEXT = "Show Destination/Merge Diff";
+ private static final String DMDIFF_TOOLTIP =
+ "Show the differences between the current Destination" + " artifact and the current Source artifact";
+ private static final int NUM_COLUMNS = 1;
+
+ private final Listener listener = new Listener() {
+ public void handleEvent(Event event) {
+ // ...
+
+ try {
+ if (event.widget == editButton) {
+ RendererManager.editInJob(conflict.getArtifact());
+ conflict.markStatusToReflectEdit();
+ } else if (event.widget == clearButton) {
+ MergeUtility.clearValue(conflict, getShell(), true);
+ } else if (event.widget == sourceButton) {
+ MergeUtility.setToSource(conflict, getShell(), true);
+ } else if (event.widget == destButton) {
+ MergeUtility.setToDest(conflict, getShell(), true);
+ } else if (event.widget == sourceDiffButton) {
+ MergeUtility.showCompareFile(MergeUtility.getStartArtifact(conflict), conflict.getSourceArtifact(),
+ "Source_Diff_For_" + conflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ } else if (event.widget == destDiffButton) {
+ MergeUtility.showCompareFile(
+ MergeUtility.getStartArtifact(conflict),
+ conflict.getDestArtifact(),
+ "Destination_Diff_For_" + conflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ } else if (event.widget == sourceDestDiffButton) {
+ MergeUtility.showCompareFile(
+ conflict.getSourceArtifact(),
+ conflict.getDestArtifact(),
+ "Source_Destination_Diff_For_" + conflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ } else if (event.widget == sourceMergeDiffButton) {
+ if (conflict.wordMarkupPresent()) {
+ throw new OseeCoreException(AttributeConflict.DIFF_MERGE_MARKUP);
+ }
+ MergeUtility.showCompareFile(
+ conflict.getSourceArtifact(),
+ conflict.getArtifact(),
+ "Source_Merge_Diff_For_" + conflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ } else if (event.widget == destMergeDiffButton) {
+ if (conflict.wordMarkupPresent()) {
+ throw new OseeCoreException(AttributeConflict.DIFF_MERGE_MARKUP);
+ }
+ MergeUtility.showCompareFile(
+ conflict.getDestArtifact(),
+ conflict.getArtifact(),
+ "Destination_Merge_Diff_For_" + conflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ } else if (event.widget == mergeButton) {
+ MergeUtility.launchMerge(conflict, getShell());
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(EditWFCAttributeWizardPage.class, ex, true);
+ }
+ getWizard().getContainer().updateButtons();
+ }
+ };
+
+ /**
+ * @param pageName
+ */
+
+ public EditWFCAttributeWizardPage(AttributeConflict conflict) {
+ super(TITLE);
+ try {
+ if (conflict != null) {
+ this.conflict = conflict;
+ changeType = conflict.getDynamicAttributeDescriptor().getName();
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(Composite parent) {
+ setTitle("Edit the attribute ");
+
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout gl = new GridLayout();
+ gl.numColumns = NUM_COLUMNS;
+ composite.setLayout(gl);
+ GridData gd = new GridData(SWT.BEGINNING);
+ composite.setLayoutData(gd);
+ gd.horizontalSpan = NUM_COLUMNS;
+
+ imageLabel = new Label(composite, SWT.NONE);
+ imageLabel.setImage(null);
+
+ try {
+ new Label(composite, SWT.NONE).setText(ConflictResolutionWizard.ART_TEXT);
+ new Label(composite, SWT.NONE).setText(ConflictResolutionWizard.INDENT + conflict.getArtifactName());
+ new Label(composite, SWT.NONE).setText(ConflictResolutionWizard.TYPE_TEXT);
+ new Label(composite, SWT.NONE).setText(ConflictResolutionWizard.INDENT + changeType);
+ } catch (Exception ex) {
+ OSEELog.logException(EditWFCAttributeWizardPage.class, ex, true);
+ }
+
+ new Label(composite, SWT.NONE);
+
+ editButton = createButton(EDIT_TEXT, EDIT_TOOLTIP, composite);
+ mergeButton = createButton(MERGE_TEXT, MERGE_TOOLTIP, composite);
+ new Label(composite, SWT.NONE);
+ sourceButton = createButton(SOURCE_TEXT, SOURCE_TOOLTIP, composite);
+ destButton = createButton(DEST_TEXT, DEST_TOOLTIP, composite);
+ clearButton = createButton(CLEAR_TEXT, CLEAR_TOOLTIP, composite);
+ new Label(composite, SWT.NONE);
+
+ Composite buttonComp = new Composite(composite, SWT.NONE);
+ GridLayout glay = new GridLayout();
+ glay.numColumns = 3;
+ buttonComp.setLayout(glay);
+ GridData gdata = new GridData(SWT.FILL);
+ buttonComp.setLayoutData(gdata);
+ gdata.horizontalSpan = 1;
+
+ sourceDiffButton = createButton(SDIFF_TEXT, SDIFF_TOOLTIP, buttonComp);
+ destDiffButton = createButton(DDIFF_TEXT, DDIFF_TOOLTIP, buttonComp);
+ sourceDestDiffButton = createButton(SDDIFF_TEXT, SDDIFF_TOOLTIP, buttonComp);
+ sourceMergeDiffButton = createButton(SMDIFF_TEXT, SMDIFF_TOOLTIP, buttonComp);
+ destMergeDiffButton = createButton(DMDIFF_TEXT, DMDIFF_TOOLTIP, buttonComp);
+ if (MergeUtility.getStartArtifact(conflict) == null) {
+ sourceDiffButton.setEnabled(false);
+ destDiffButton.setEnabled(false);
+ }
+
+ try {
+ setResolution(XMergeLabelProvider.getMergeImage(conflict));
+ } catch (Exception ex) {
+ OSEELog.logException(EditWFCAttributeWizardPage.class, ex, true);
+ }
+
+ setControl(composite);
+ }
+
+ private Button createButton(String text, String tooltip, Composite composite) {
+ Button button = new Button(composite, SWT.PUSH);
+ button.addListener(SWT.Selection, listener);
+ button.setText(text);
+ button.setToolTipText(tooltip);
+ return button;
+ }
+
+ public boolean canFinish() {
+ return true;
+ }
+
+ public boolean closingPage() {
+ return true;
+ }
+
+ public void setResolution(Image image) {
+ imageLabel.setImage(image);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedBooleanAttributeEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedBooleanAttributeEditor.java
new file mode 100644
index 00000000000..b79ff464fff
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedBooleanAttributeEditor.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.conflict.AttributeConflict;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeUtility;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author Theron Virgin
+ */
+/*
+ * All of the instance of checks are needed to support both artifacts and
+ * conflicts. The reason to support both is I created the classes for
+ * artifacts so all of the work was already done for them. I then realized
+ * that I needed to control the setting of values for conflicts and thus had to call
+ * the conflict specific methods instead of simply setting the values.
+ */
+public class EmbeddedBooleanAttributeEditor implements IEmbeddedAttributeEditor {
+
+ protected String attributeName;
+ protected String displayName;
+ protected Collection<?> attributeHolder;
+ protected boolean persist;
+ protected EmbeddedBooleanEditor editor;
+
+ public EmbeddedBooleanAttributeEditor(String prompt, Collection<?> attributeHolder, String displayName, String attributeName, boolean persist) {
+ this.attributeName = attributeName;
+ this.displayName = displayName;
+ this.attributeHolder = attributeHolder;
+ this.persist = persist;
+ }
+
+ public boolean create(Composite composite, GridData gd) {
+ if (attributeHolder == null) return false;
+ if (attributeHolder.size() < 1) return false;
+ Object obj = attributeHolder.iterator().next();
+ if (obj instanceof Artifact) {
+ String type = ((Artifact) obj).getArtifactTypeName();
+ for (Object object : attributeHolder) {
+ if (object instanceof Artifact) {
+ if (!type.equals(((Artifact) object).getArtifactTypeName())) {
+ AWorkbench.popup("ERROR",
+ "All artifacts must be of the same type when " + "edited in a boolean editor.");
+ return false;
+ }
+ } else
+ return false;
+ }
+ }
+ editor = new EmbeddedBooleanEditor("Select a value for the " + attributeName);
+ editor.createEditor(composite, gd);
+
+ try {
+ if (obj instanceof Artifact) {
+ try {
+ Object object = ((Artifact) obj).getSoleAttributeValue(attributeName);
+ if (object instanceof Boolean)
+ editor.setEntry(((Boolean) object).booleanValue());
+ else
+ OSEELog.logException(EmbeddedBooleanAttributeEditor.class, new Exception(
+ "Boolean editor did not receive a boolean value"), true);
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedBooleanAttributeEditor.class, ex, true);
+ }
+ }
+ if (obj instanceof AttributeConflict) {
+ Object object = ((AttributeConflict) obj).getMergeObject();
+ if (object instanceof Boolean) {
+ editor.setEntry(((Boolean) object).booleanValue());
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedBooleanAttributeEditor.class, ex, true);
+ }
+ return true;
+ }
+
+ public void update(Object value) {
+ if (editor != null) editor.setEntry(((Boolean) value).booleanValue());
+ }
+
+ public boolean commit() {
+ if (editor != null) {
+ boolean value = editor.getEntry();
+ try {
+ for (Object obj : attributeHolder) {
+ if (obj instanceof Artifact) {
+ ((Artifact) obj).setSoleAttributeValue(attributeName, new Boolean(value));
+ if (persist) ((Artifact) obj).persistAttributes();
+ }
+ if (obj instanceof AttributeConflict) {
+ if (!((AttributeConflict) obj).setAttributeValue(new Boolean(value))) {
+ AWorkbench.popup("Attention", MergeUtility.COMMITED_PROMPT);
+ }
+ }
+ }
+ return true;
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedBooleanAttributeEditor.class, ex, true);
+ }
+ }
+ AWorkbench.popup("ERROR", "Could not store the attribute");
+ return false;
+ }
+
+ public boolean canClear() {
+ return false;
+ }
+
+ public boolean canFinish() {
+ return true;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedBooleanEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedBooleanEditor.java
new file mode 100644
index 00000000000..b4073808d86
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedBooleanEditor.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * @author Theron Virgin
+ */
+
+public class EmbeddedBooleanEditor {
+ Button booleanValue;
+ String dialogMessage;
+
+ public EmbeddedBooleanEditor(String dialogMessage) {
+ this.dialogMessage = dialogMessage;
+ }
+
+ public void createEditor(Composite composite, GridData gd) {
+
+ new Label(composite, SWT.NONE).setText(dialogMessage);
+ booleanValue = new Button(composite, SWT.CHECK);
+ booleanValue.setText("");
+ composite.layout();
+ }
+
+ public boolean getEntry() {
+ return booleanValue.getSelection();
+ }
+
+ public void setEntry(boolean entry) {
+ booleanValue.setSelection(entry);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedDateAttributeEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedDateAttributeEditor.java
new file mode 100644
index 00000000000..05d3b478cd1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedDateAttributeEditor.java
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import java.util.Collection;
+import java.util.Date;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.conflict.AttributeConflict;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeUtility;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author Theron Virgin
+ */
+
+/*
+ * All of the instance of checks are needed to support both artifacts and
+ * conflicts. The reason to support both is I created the classes for
+ * artifacts so all of the work was already done for them. I then realized
+ * that I needed to control the setting of values for conflicts and thus had to call
+ * the conflict specific methods instead of simply setting the values.
+ */
+public class EmbeddedDateAttributeEditor implements IEmbeddedAttributeEditor {
+
+ protected String attributeName;
+ protected String displayName;
+ protected Collection<?> attributeHolder;
+ protected boolean persist;
+ protected EmbeddedDateEditor editor;
+
+ public EmbeddedDateAttributeEditor(String notUsed, Collection<?> attributeHolder, String displayName, String attributeName, boolean persist) {
+ this.attributeName = attributeName;
+ this.displayName = displayName;
+ this.attributeHolder = attributeHolder;
+ this.persist = persist;
+ }
+
+ public boolean create(Composite composite, GridData gd) {
+ if (attributeHolder == null) return false;
+ if (attributeHolder.size() < 1) return false;
+ Object obj = attributeHolder.iterator().next();
+ if (obj instanceof Artifact) {
+ String type = ((Artifact) obj).getArtifactTypeName();
+ for (Object object : attributeHolder) {
+ if (object instanceof Artifact) {
+ if (!type.equals(((Artifact) object).getArtifactTypeName())) {
+ AWorkbench.popup("ERROR",
+ "All artifacts must be of the same " + "type when edited in an date editor.");
+ return false;
+ }
+ } else
+ return false;
+ }
+ }
+ Date date = new Date();
+ if (obj instanceof Artifact) {
+ try {
+ Object object = ((Artifact) obj).getSoleAttributeValue(attributeName);
+ if (object instanceof Date) date = (Date) object;
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedDateAttributeEditor.class, ex, true);
+ }
+ }
+ if (obj instanceof AttributeConflict) try {
+ Object object = ((AttributeConflict) obj).getMergeObject();
+ if (object instanceof Date) {
+ date = (Date) object;
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedDateAttributeEditor.class, ex, true);
+ }
+
+ editor = new EmbeddedDateEditor("Edit " + displayName, date);
+ editor.createEditor(composite);
+ return true;
+ }
+
+ public void update(Object value) {
+ editor.setSelectedDate((Date) value);
+ }
+
+ public boolean commit() {
+ Date selected = editor.getSelectedDate();
+ try {
+ for (Object object : attributeHolder) {
+ if (object instanceof Artifact) {
+ if (selected == null)
+ ((Artifact) object).setSoleAttributeValue(attributeName, "");
+ else
+ ((Artifact) object).setSoleAttributeValue(attributeName, selected.getTime() + "");
+ if (persist) ((Artifact) object).persistAttributes();
+ }
+ if (object instanceof AttributeConflict) {
+ if (selected == null) {
+ if (!((AttributeConflict) object).clearValue()) {
+ AWorkbench.popup("Attention", MergeUtility.COMMITED_PROMPT);
+ }
+ } else {
+ if (!((AttributeConflict) object).setAttributeValue(selected)) {
+ AWorkbench.popup("Attention", MergeUtility.COMMITED_PROMPT);
+ }
+ }
+ }
+ }
+ return true;
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedDateAttributeEditor.class, ex, true);
+ }
+ AWorkbench.popup("ERROR", "Could not store the attribute");
+ return false;
+ }
+
+ public boolean canClear() {
+ return false;
+ }
+
+ public boolean canFinish() {
+ return true;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedDateEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedDateEditor.java
new file mode 100644
index 00000000000..d3788526e2f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedDateEditor.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import java.util.Calendar;
+import java.util.Date;
+import org.eclipse.nebula.widgets.calendarcombo.CalendarCombo;
+import org.eclipse.nebula.widgets.calendarcombo.CalendarListenerAdapter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+public class EmbeddedDateEditor {
+
+ private Date selectedDate;
+
+ private final String dialogMessage;
+ private CalendarCombo dp;
+ private boolean noneSelected = false;
+
+ public EmbeddedDateEditor(String dialogMessage, Date selectedDate) {
+ this.selectedDate = selectedDate;
+ this.dialogMessage = dialogMessage;
+ }
+
+ public void createEditor(Composite container) {
+ (new Label(container, SWT.None)).setText(dialogMessage);
+
+ dp = new CalendarCombo(container, SWT.SINGLE | SWT.FLAT);
+ if (selectedDate != null) dp.setDate(selectedDate);
+ dp.addCalendarListener(new CalendarListenerAdapter() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.nebula.widgets.datechooser.DateChooser.ClearListener#handleClearEvent()
+ */
+ public void dateChanged(Calendar date) {
+ if (date == null) {
+ noneSelected = true;
+ } else {
+ noneSelected = false;
+ selectedDate = dp.getDate().getTime();
+ }
+ }
+ });
+ }
+
+ public void setSelectedDate(Date selectedDate) {
+ this.selectedDate = selectedDate;
+ if (selectedDate != null){
+ dp.setDate(this.selectedDate);
+ }
+ }
+
+ public Date getSelectedDate() {
+ if (noneSelected) return null;
+ return selectedDate == null ? null : (Date)selectedDate.clone();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedEnumAttributeEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedEnumAttributeEditor.java
new file mode 100644
index 00000000000..023862e6b82
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedEnumAttributeEditor.java
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import java.util.Collection;
+import java.util.TreeSet;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.skynet.core.conflict.AttributeConflict;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeUtility;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author Theron Virgin
+ */
+
+/*
+ * All of the instance of checks are needed to support both artifacts and
+ * conflicts. The reason to support both is I created the classes for
+ * artifacts so all of the work was already done for them. I then realized
+ * that I needed to control the setting of values for conflicts and thus had to call
+ * the conflict specific methods instead of simply setting the values.
+ */
+
+public class EmbeddedEnumAttributeEditor implements IEmbeddedAttributeEditor {
+ private static final String PROMPT = "Please select a value from the combo box";
+ private static final String ERROR_PROMPT =
+ "All artifacts must be of the same type when edited in an enumeration editor.";
+ protected String attributeName;
+ protected String displayName;
+ protected Collection<?> attributeHolder;
+ protected boolean persist;
+ protected EmbeddedEnumEditor editor;
+
+ public EmbeddedEnumAttributeEditor(String arg, Collection<?> attributeHolder, String displayName, String attributeName, boolean persist) {
+ this.attributeName = attributeName;
+ this.displayName = displayName;
+ this.attributeHolder = attributeHolder;
+ this.persist = persist;
+ }
+
+ public boolean create(Composite composite, GridData gd) {
+ if (attributeHolder == null) return false;
+ if (attributeHolder.size() < 1) return false;
+ Object obj = attributeHolder.iterator().next();
+ if (obj instanceof Artifact) {
+ String type = ((Artifact) obj).getArtifactTypeName();
+ for (Object object : attributeHolder) {
+ if (object instanceof Artifact) {
+ if (!type.equals(((Artifact) object).getArtifactTypeName())) {
+ AWorkbench.popup("ERROR", ERROR_PROMPT);
+ return false;
+ }
+ } else
+ return false;
+ }
+ }
+ editor = new EmbeddedEnumEditor(PROMPT);
+ editor.createEditor(composite);
+ TreeSet<String> options = new TreeSet<String>();
+ try {
+ if (obj instanceof Artifact) {
+ options =
+ new TreeSet<String>(AttributeTypeManager.getValidEnumerationAttributeValues(attributeName,
+ ((Artifact) obj).getBranch()));
+ }
+ if (obj instanceof AttributeConflict) {
+ options = ((AttributeConflict) obj).getEnumerationAttributeValues();
+ }
+ for (String string : options) {
+ editor.addSelectionChoice(string);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedEnumAttributeEditor.class, ex, true);
+ }
+ if (obj instanceof Artifact) {
+ try {
+ editor.setSelected(((Artifact) obj).getSoleAttributeValue(attributeName).toString());
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedEnumAttributeEditor.class, ex, true);
+ }
+ } else if (obj instanceof AttributeConflict) {
+ try {
+ if (((AttributeConflict) obj).getMergeObject() != null) {
+ editor.setSelected(((AttributeConflict) obj).getMergeObject().toString());
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedEnumAttributeEditor.class, ex, true);
+ }
+ }
+ return true;
+ }
+
+ public void update(Object value) {
+ editor.setSelected(value.toString());
+ }
+
+ public boolean commit() {
+ String selection = editor.getSelected();
+ try {
+ for (Object object : attributeHolder) {
+ if (object instanceof Artifact) {
+ ((Artifact) object).setSoleAttributeFromString(attributeName, selection);
+ if (persist) ((Artifact) object).persistAttributes();
+ }
+ if (object instanceof AttributeConflict) {
+ if (selection.equals("")) {
+ if (!((AttributeConflict) object).clearValue()) {
+ AWorkbench.popup("Attention", MergeUtility.COMMITED_PROMPT);
+ }
+ } else {
+ if (!((AttributeConflict) object).setStringAttributeValue(selection)) {
+ AWorkbench.popup("Attention", MergeUtility.COMMITED_PROMPT);
+ }
+ }
+ }
+ }
+ return true;
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedEnumAttributeEditor.class, ex, true);
+ }
+ return true;
+ }
+
+ public boolean canClear() {
+ return false;
+ }
+
+ public boolean canFinish() {
+ return true;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedEnumEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedEnumEditor.java
new file mode 100644
index 00000000000..0e797b2da9c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedEnumEditor.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * @author Theron Virgin
+ */
+public class EmbeddedEnumEditor {
+
+ private String dialogMessage;
+ private Combo comboBox;
+ public final static String NO_SELECTION = "";
+
+ public EmbeddedEnumEditor(String dialogMessage) {
+ this.dialogMessage = dialogMessage;
+ }
+
+ public boolean createEditor(Composite composite) {
+ new Label(composite, SWT.NONE).setText(dialogMessage);
+
+ comboBox = new Combo(composite, SWT.READ_ONLY);
+ comboBox.setBounds(50, 50, 650, 65);
+
+ comboBox.add(NO_SELECTION);
+
+ return true;
+ }
+
+ public void addSelectionChoice(String choice){
+ if (choice != null)
+ comboBox.add(choice);
+ }
+
+ public String getSelected() {
+ int index = comboBox.getSelectionIndex();
+ if (index == -1)
+ return NO_SELECTION;
+ else
+ return comboBox.getItem(index);
+ }
+
+ public void setSelected(String selection){
+ int index = comboBox.indexOf(selection);
+ if (index == -1)
+ AWorkbench.popup("ERROR","Attempting to set Enumeration to invalid value " + selection);
+ comboBox.select(index);
+ }
+
+
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedStringAttributeEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedStringAttributeEditor.java
new file mode 100644
index 00000000000..4f50ca85432
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedStringAttributeEditor.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.conflict.AttributeConflict;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeUtility;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author Theron Virgin
+ */
+
+/*
+ * All of the instance of checks are needed to support both artifacts and
+ * conflicts. The reason to support both is I created the classes for
+ * artifacts so all of the work was already done for them. I then realized
+ * that I needed to control the setting of values for conflicts and thus had to call
+ * the conflict specific methods instead of simply setting the values.
+ */
+
+public class EmbeddedStringAttributeEditor implements IEmbeddedAttributeEditor {
+ private static final String PROMPT = "Set the Attribute Value";
+ private static final String VALIDATION_ERROR =
+ "ERROR: You have entered an invalid value." + " This value can not be saved.";
+ private static final String TYPE_ERROR = "All the artifacts being edited are not of the same type.";
+ private static final String SAVE_ERROR = "Could not store the string attribute";
+
+ protected String attributeName;
+ protected String displayName;
+ protected Collection<?> attributeHolders;
+ protected boolean persist;
+ protected EmbeddedStringEditor editor;
+ protected String regExp;
+
+ public EmbeddedStringAttributeEditor(String regExp, Collection<?> attributeHolders, String displayName, String attributeName, boolean persist) {
+ this.regExp = regExp;
+ this.attributeName = attributeName;
+ this.displayName = displayName;
+ this.attributeHolders = attributeHolders;
+ this.persist = persist;
+ }
+
+ public boolean create(Composite composite, GridData gd) {
+ if (attributeHolders == null) return false;
+ if (attributeHolders.size() < 1) return false;
+ Object obj = attributeHolders.iterator().next();
+ if (obj instanceof Artifact) {
+ String type = ((Artifact) obj).getArtifactTypeName();
+ for (Object object : attributeHolders) {
+ if (object instanceof Artifact) {
+ if (!type.equals(((Artifact) object).getArtifactTypeName())) {
+ AWorkbench.popup("ERROR", TYPE_ERROR);
+ return false;
+ }
+ } else
+ return false;
+ }
+ }
+ editor = new EmbeddedStringEditor(PROMPT);
+ editor.setValidationErrorString(VALIDATION_ERROR);
+ editor.createEditor(composite);
+ if (obj instanceof Artifact) {
+ try {
+ editor.setEntry(((Artifact) obj).getSoleAttributeValue(attributeName).toString());
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedStringAttributeEditor.class, ex, true);
+ }
+ } else if (obj instanceof AttributeConflict) {
+ try {
+ if (((AttributeConflict) obj).getMergeObject() != null) {
+ editor.setEntry(((AttributeConflict) obj).getMergeObject().toString());
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedStringAttributeEditor.class, ex, true);
+ }
+ }
+ if (regExp != null) editor.setValidationRegularExpression(regExp);
+ return true;
+ }
+
+ public void update(Object value) {
+ if (value != null) {
+ editor.setEntry(value.toString());
+ }
+ }
+
+ public boolean commit() {
+ if (editor != null) {
+ try {
+ for (Object object : attributeHolders) {
+ if (object instanceof Artifact) {
+ ((Artifact) object).setSoleAttributeFromString(attributeName, editor.getEntry());
+ if (persist) ((Artifact) object).persistAttributes();
+ }
+ if (object instanceof AttributeConflict) {
+ if (!editor.getEntry().equals("")) {
+ try {
+ if (!((AttributeConflict) object).setStringAttributeValue(editor.getEntry())) {
+ AWorkbench.popup("Attention", MergeUtility.COMMITED_PROMPT);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedStringAttributeEditor.class, ex, true);
+ }
+ } else {
+ if (!((AttributeConflict) object).clearValue()) {
+ AWorkbench.popup("Attention", MergeUtility.COMMITED_PROMPT);
+ }
+ }
+ }
+ }
+ return true;
+ } catch (Exception ex) {
+ OSEELog.logException(EmbeddedStringAttributeEditor.class, ex, true);
+ }
+ }
+ return false;
+
+ }
+
+ public boolean canClear() {
+ return true;
+ }
+
+ public boolean canFinish() {
+ if (editor == null) return false;
+ return (editor.handleModified() || editor.getEntry().equals(""));
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedStringEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedStringEditor.java
new file mode 100644
index 00000000000..3164c560834
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbeddedStringEditor.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.ui.skynet.widgets.XText;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+public class EmbeddedStringEditor{
+
+ XText text;
+ String entryText = "";
+ String validationRegularExpression = null;
+ String validationErrorString = "";
+ Button ok;
+ Label errorLabel;
+ String dialogMessage;
+ private Composite composite;
+ boolean fillVertically = false;
+
+
+ public EmbeddedStringEditor(String dialogMessage) {
+ this.dialogMessage = dialogMessage;
+ }
+
+
+ public void createEditor(Composite composite) {
+ this.composite = composite;
+
+ // Create error label
+ errorLabel = new Label(composite, SWT.NONE);
+ errorLabel.setSize(errorLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ errorLabel.setForeground(new Color(null,255,0,0));
+ errorLabel.setText("");
+
+ new Label(composite, SWT.NONE).setText(dialogMessage);
+ text = new XText();
+ text.setFillHorizontally(true);
+ text.setFocus();
+ text.setDisplayLabel(false);
+ if (!entryText.equals("")) text.set(entryText);
+ if (fillVertically) {
+ text.setFillVertically(true);
+ text.setHeight(200);
+ }
+ text.createWidgets(composite, 2);
+
+ text.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ handleModified();
+ }
+ });
+
+ composite.layout();
+ }
+
+ public boolean handleModified() {
+ if (text != null) {
+ if (!isEntryValid()) {
+ errorLabel.setText(validationErrorString);
+ errorLabel.update();
+ composite.layout();
+ return false;
+ } else {
+ errorLabel.setText("");
+ errorLabel.update();
+ composite.layout();
+ return true;
+ }
+ }
+ return true;
+ }
+
+ public String getEntry() {
+ return text.get();
+ }
+
+ public void setEntry(String entry) {
+ if (text != null) text.set(entry);
+ this.entryText = entry;
+ }
+
+ /**
+ * override this method to make own checks on entry this will be called with every keystroke
+ *
+ * @return true if entry is valid
+ */
+ public boolean isEntryValid() {
+ if (validationRegularExpression == null) {
+ return true;
+ }
+ // verify title is alpha-numeric with spaces and dashes
+ Matcher m = Pattern.compile(validationRegularExpression).matcher(text.get());
+ return m.find();
+ }
+
+ public void setValidationRegularExpression(String regExp) {
+ validationRegularExpression = regExp;
+ }
+
+ public void setValidationErrorString(String errorText) {
+ validationErrorString = errorText;
+ }
+
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbededAttributeEditorFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbededAttributeEditorFactory.java
new file mode 100644
index 00000000000..8e9e71fa109
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/EmbededAttributeEditorFactory.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.skynet.core.attribute.BooleanAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.DateAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.EnumeratedAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.FloatingPointAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.IntegerAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.StringAttribute;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Theron Virgin
+ */
+public class EmbededAttributeEditorFactory {
+
+ private final static String VALID_FLOAT_REG_EX = "^[0-9\\.]+$";
+ private final static String VALID_INTEGER_REG_EX = "^[0-9]+$";
+ private final static String VALID_PERCENT_REG_EX =
+ "^(0*100{1,1}\\.?((?<=\\.)0*)?%?$)|(^0*\\d{0,2}\\.?((?<=\\.)\\d*)?%?)$";
+
+ public static IEmbeddedAttributeEditor getEmbeddedEditor(String attributeName, String displayName, final Collection<?> attributeHolder, boolean persist) {
+ try {
+ Class<? extends Attribute> attClass;
+ attClass = AttributeTypeManager.getType(attributeName).getBaseAttributeClass();
+
+ if (attClass.equals(DateAttribute.class)) {
+ return new EmbeddedDateAttributeEditor(null, attributeHolder, displayName, attributeName, persist);
+ } else if (attClass.equals(FloatingPointAttribute.class)) {
+ return new EmbeddedStringAttributeEditor(VALID_FLOAT_REG_EX, attributeHolder, displayName, attributeName,
+ persist);
+ } else if (attClass.equals(IntegerAttribute.class)) {
+ return new EmbeddedStringAttributeEditor(VALID_INTEGER_REG_EX, attributeHolder, displayName, attributeName,
+ persist);
+ } else if (attClass.equals(BooleanAttribute.class)) {
+ return new EmbeddedBooleanAttributeEditor(null, attributeHolder, displayName, attributeName, persist);
+ } else if (attClass.equals(EnumeratedAttribute.class)) {
+ return new EmbeddedEnumAttributeEditor(null, attributeHolder, displayName, attributeName, persist);
+ } else if (attClass.equals(StringAttribute.class)) {
+ return new EmbeddedStringAttributeEditor(null, attributeHolder, displayName, attributeName, persist);
+ } else
+ AWorkbench.popup("ERROR", "Unhandled attribute type. No editor defined for this type");
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return null;
+
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/IEmbeddedAttributeEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/IEmbeddedAttributeEditor.java
new file mode 100644
index 00000000000..7c896d52ee5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/mergeWizard/IEmbeddedAttributeEditor.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.mergeWizard;
+
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author Theron Virgin
+ */
+public interface IEmbeddedAttributeEditor {
+
+ public void update(Object value);
+
+ public boolean create(Composite composite, GridData gd);
+
+ public boolean commit();
+
+ public boolean canClear();
+
+ public boolean canFinish();
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotificationEvent.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotificationEvent.java
new file mode 100644
index 00000000000..d1be42e0694
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotificationEvent.java
@@ -0,0 +1,47 @@
+/*
+ * Created on Jun 15, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.notify;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.skynet.core.User;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class OseeNotificationEvent {
+
+ private final Collection<User> users;
+ private final String id;
+ private final String type;
+ private final String description;
+
+ public OseeNotificationEvent(Collection<User> users, String id, String type, String description) {
+ this.users = users;
+ this.id = id;
+ this.type = type;
+ this.description = description;
+ }
+
+ public String toString() {
+ return type + " - " + id + " - " + users + " - " + description;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public Collection<User> getUsers() {
+ return users;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotificationManager.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotificationManager.java
new file mode 100644
index 00000000000..158167a63e2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotificationManager.java
@@ -0,0 +1,59 @@
+/*
+ * Created on Jun 15, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.notify;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * Stores notification events generated by the framework or applications. Currently, send happens upon call to
+ * sendNotifications(). Eventually, a timer will kick the send event at certain intervals. This mechanism allows for
+ * notifications to be collected for a certain period of time and rolled into a single notification. This will
+ * eventually also support other types of notifications such as popups and allow the user to configure which events are
+ * sent and how.
+ *
+ * @author Donald G. Dunne
+ */
+public class OseeNotificationManager {
+
+ private static boolean emailEnabled = true;
+
+ private static List<OseeNotificationEvent> notificationEvents = new ArrayList<OseeNotificationEvent>();
+
+ public static void addNotificationEvent(OseeNotificationEvent notificationEvent) {
+ notificationEvents.add(notificationEvent);
+ }
+
+ public static void clear() {
+ notificationEvents.clear();
+ }
+
+ public static void sendNotifications() throws OseeCoreException {
+ if (!emailEnabled) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, "Osee Notification Disabled");
+ return;
+ }
+ List<OseeNotificationEvent> sendEvents = new ArrayList<OseeNotificationEvent>();
+ sendEvents.addAll(notificationEvents);
+ notificationEvents.clear();
+ OseeNotifyUsersJob job = new OseeNotifyUsersJob(sendEvents);
+ job.setPriority(Job.SHORT);
+ job.schedule();
+ }
+
+ public static boolean isEmailEnabled() {
+ return emailEnabled;
+ }
+
+ public static void setEmailEnabled(boolean emailEnabled) {
+ OseeNotificationManager.emailEnabled = emailEnabled;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotifyUsersJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotifyUsersJob.java
new file mode 100644
index 00000000000..3b9b003c98b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/notify/OseeNotifyUsersJob.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.notify;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import javax.mail.MessagingException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.core.data.SystemUser;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.OseeEmail;
+import org.eclipse.osee.framework.ui.skynet.util.OseeEmail.BodyType;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class OseeNotifyUsersJob extends Job {
+ private final boolean testing = false; // Email goes to current user
+ private final Collection<? extends OseeNotificationEvent> notificationEvents;
+
+ public OseeNotifyUsersJob(Collection<? extends OseeNotificationEvent> notificationEvents) throws OseeCoreException {
+ super("Notifying Users");
+ this.notificationEvents = notificationEvents;
+ if (testing) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE,
+ "OseeNotifyUsersJob: testing is enabled....turn off for production.");
+ }
+ }
+
+ @Override
+ public IStatus run(IProgressMonitor monitor) {
+ try {
+ Set<User> users = new HashSet<User>();
+ for (OseeNotificationEvent notificationEvent : notificationEvents) {
+ users.addAll(notificationEvent.getUsers());
+ }
+ XResultData resultData = new XResultData();
+ if (testing) {
+ resultData.log("Testing Results Report for Osee Notification; Email to current user.<br>");
+ users.clear();
+ users.addAll(Arrays.asList(UserManager.getUser()));
+ }
+ for (User user : users) {
+ List<OseeNotificationEvent> notifyEvents = new ArrayList<OseeNotificationEvent>();
+ for (OseeNotificationEvent notificationEvent : notificationEvents) {
+ if (testing || notificationEvent.getUsers().contains(user)) {
+ notifyEvents.add(notificationEvent);
+ }
+ }
+ notifyUser(user, notifyEvents, resultData);
+ }
+ monitor.done();
+ return Status.OK_STATUS;
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ return new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, -1, ex.getMessage(), ex);
+ }
+ }
+
+ private String notificationEventsToHtml(List<OseeNotificationEvent> notificationEvents) {
+ StringBuffer sb = new StringBuffer();
+ sb.append(AHTML.beginMultiColumnTable(100, 1));
+ sb.append(AHTML.addHeaderRowMultiColumnTable(new String[] {"Reason", "Description", "Id"}));
+ for (OseeNotificationEvent notificationEvent : notificationEvents) {
+ sb.append(AHTML.addRowMultiColumnTable(new String[] {notificationEvent.getType(),
+ notificationEvent.getDescription(), notificationEvent.getId()}));
+ }
+ sb.append(AHTML.endMultiColumnTable());
+ return sb.toString().replaceAll("\n", "");
+ }
+
+ private void notifyUser(User user, List<OseeNotificationEvent> notificationEvents, XResultData resultData) throws MessagingException, OseeCoreException {
+ if (user == UserManager.getUser(SystemUser.NoOne) || user == UserManager.getUser(SystemUser.UnAssigned) || user == UserManager.getUser(SystemUser.Guest)) {
+ // do nothing
+ return;
+ }
+ String html = notificationEventsToHtml(notificationEvents);
+ if (user.getEmail() == null || user.getEmail().equals("")) {
+ // do nothing
+ return;
+ } else {
+ OseeEmail emailMessage =
+ new OseeEmail(Arrays.asList(user.getEmail()), UserManager.getUser().getEmail(),
+ UserManager.getUser().getEmail(), getNotificationEmailSubject(notificationEvents), html,
+ BodyType.Html);
+ emailMessage.send();
+ }
+ }
+
+ private String getNotificationEmailSubject(List<OseeNotificationEvent> notificationEvents) {
+ if (notificationEvents.size() == 1) {
+ OseeNotificationEvent event = notificationEvents.iterator().next();
+ return Strings.truncate("OSEE Notification" + " - " + event.getType() + " - " + event.getDescription(), 128);
+ }
+ return "OSEE Notification";
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/AuthenticationComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/AuthenticationComposite.java
new file mode 100644
index 00000000000..1b5b40da64c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/AuthenticationComposite.java
@@ -0,0 +1,430 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.panels;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.core.client.BaseCredentialProvider;
+import org.eclipse.osee.framework.core.client.ClientSessionManager;
+import org.eclipse.osee.framework.core.data.OseeCredential;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class AuthenticationComposite extends Composite {
+
+ private static final String LABEL_KEY = "label";
+ private static final String WARNING_MESSAGE =
+ "Saved passwords are stored in your computer in a file that is difficult, but not impossible, for an intruder to read.";
+ private static final Image errorImage =
+ PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK);
+
+ private enum LabelEnum {
+ UserId("Enter user name"),
+ Password(true, "Enter a valid password"),
+ Domain("Enter a valid domain [sw, nw, etc...]"),
+ Protocol("Select authentication protocol"),
+ Remember_My_Password(WARNING_MESSAGE);
+
+ boolean isHidden;
+ String toolTipText;
+
+ LabelEnum(boolean isHidden, String toolTipText) {
+ this.isHidden = isHidden;
+ this.toolTipText = toolTipText;
+ }
+
+ LabelEnum(String toolTipText) {
+ this(false, toolTipText);
+ }
+
+ public String getToolTipText() {
+ return toolTipText;
+ }
+
+ public boolean isHidden() {
+ return isHidden;
+ }
+ }
+
+ private Map<LabelEnum, Control> fieldMap;
+ private Map<LabelEnum, String> dataMap;
+ private Map<LabelEnum, Label> statusMap;
+ private boolean buildSubmitButton;
+ private SelectionListener listener;
+ private boolean allValid;
+ private Button memoButton;
+ private Button guestButton;
+ private Button userButton;
+ private Composite mainComposite;
+ private boolean isGuestLogin;
+
+ public AuthenticationComposite(Composite parent, int style, boolean buildSubmitButton) {
+ super(parent, style);
+ this.buildSubmitButton = buildSubmitButton;
+ fieldMap = new HashMap<LabelEnum, Control>();
+ dataMap = new HashMap<LabelEnum, String>();
+ statusMap = new HashMap<LabelEnum, Label>();
+ createControl();
+ }
+
+ public AuthenticationComposite(Composite parent, int style) {
+ this(parent, style, true);
+ }
+
+ private void createControl() {
+ GridLayout layout = new GridLayout();
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ this.setLayout(layout);
+ this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ createLoginSelection(this);
+
+ mainComposite = new Group(this, SWT.NONE);
+ GridLayout layout1 = new GridLayout();
+ layout1.marginWidth = 0;
+ layout1.marginHeight = 0;
+ mainComposite.setLayout(layout1);
+ mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ createFieldArea(mainComposite);
+ handleLoginTypeSelection();
+ }
+
+ private void createLoginSelection(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(new GridLayout());
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ guestButton = new Button(composite, SWT.RADIO);
+ guestButton.setText("Guest");
+ guestButton.setSelection(isGuestLogin);
+ guestButton.setToolTipText("Allows users to log into the system with guest priviledges.\n");
+ guestButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ handleLoginTypeSelection();
+ updateDefaultButtonStatus();
+ }
+
+ });
+
+ userButton = new Button(composite, SWT.RADIO);
+ userButton.setSelection(!isGuestLogin);
+ userButton.setText("User Login");
+ userButton.setToolTipText("Enables User to login");
+ userButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ handleLoginTypeSelection();
+ updateDefaultButtonStatus();
+ }
+ });
+
+ }
+
+ private void handleLoginTypeSelection() {
+ boolean allowUserLogin = false;
+ if (isWidgetAccessible(guestButton)) {
+ if (guestButton.getSelection()) {
+ allowUserLogin = false;
+ }
+ }
+
+ if (isWidgetAccessible(userButton)) {
+ if (userButton.getSelection()) {
+ allowUserLogin = true;
+ }
+ }
+
+ isGuestLogin = !allowUserLogin;
+ if (isWidgetAccessible(mainComposite)) {
+ setEnabledHelper(mainComposite, allowUserLogin);
+ }
+ }
+
+ private void setEnabledHelper(Composite tempComposite, boolean setEnabled) {
+ for (Control control : tempComposite.getChildren()) {
+ if (control instanceof Composite) {
+ setEnabledHelper((Composite) control, setEnabled);
+ } else {
+ control.setEnabled(setEnabled);
+ }
+ }
+ tempComposite.setEnabled(setEnabled);
+ }
+
+ private void createFieldArea(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(new GridLayout(3, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ for (LabelEnum labelEnum : LabelEnum.values()) {
+ if (labelEnum.equals(LabelEnum.Remember_My_Password)) {
+ createMementoButton(parent);
+ if (isWidgetAccessible(memoButton)) {
+ dataMap.put(labelEnum, Boolean.toString(memoButton.getSelection()));
+ }
+ } else {
+ Label label = new Label(composite, SWT.NONE);
+ label.setText(labelEnum.name() + ": ");
+
+ int style = SWT.BORDER | SWT.SINGLE;
+ Control control = null;
+ if (labelEnum.equals(LabelEnum.Protocol)) {
+ Combo combo = new Combo(composite, style);
+ control = combo;
+ combo.setItems(ClientSessionManager.getAuthenticationProtocols());
+ dataMap.put(labelEnum, combo.getText());
+ } else {
+ Text field = new Text(composite, (labelEnum.isHidden() ? style |= SWT.PASSWORD : style));
+ field.setData(LABEL_KEY, labelEnum);
+ control = field;
+ dataMap.put(labelEnum, field.getText());
+ field.addModifyListener(new ModifyListener() {
+
+ public void modifyText(ModifyEvent e) {
+ Object object = e.getSource();
+ if (object instanceof Text) {
+ Text field = (Text) object;
+ LabelEnum labelKey = (LabelEnum) field.getData(LABEL_KEY);
+
+ dataMap.put(labelKey, field.getText());
+ updateFieldStatus(labelKey, field);
+ updateDefaultButtonStatus();
+ }
+ }
+ });
+ }
+ control.setToolTipText(labelEnum.getToolTipText());
+ control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ Label statusLabel = new Label(composite, SWT.NONE);
+ statusLabel.setImage(errorImage);
+ statusLabel.setVisible(true);
+
+ fieldMap.put(labelEnum, control);
+ statusMap.put(labelEnum, statusLabel);
+
+ }
+ }
+
+ if (buildSubmitButton) {
+ Composite buttonComposite = new Composite(parent, SWT.NONE);
+ buttonComposite.setLayout(new GridLayout());
+ buttonComposite.setLayoutData(new GridData(SWT.END, SWT.END, true, false));
+
+ Button authenticate = new Button(buttonComposite, SWT.PUSH);
+ authenticate.setText("Submit");
+ authenticate.setLayoutData(new GridData(SWT.END, SWT.END, false, false));
+ authenticate.addSelectionListener(listener);
+ authenticate.setEnabled(allValid);
+ getShell().setDefaultButton(authenticate);
+ }
+
+ listener = new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ try {
+ if (isGuestLogin()) {
+ ClientSessionManager.authenticateAsGuest();
+ } else {
+ ClientSessionManager.authenticate(new BaseCredentialProvider() {
+ @Override
+ public OseeCredential getCredential() throws OseeCoreException {
+ OseeCredential credential = super.getCredential();
+ credential.setUserName(dataMap.get(LabelEnum.UserId));
+ credential.setPassword(dataMap.get(LabelEnum.Password));
+ credential.setDomain(dataMap.get(LabelEnum.Domain));
+ credential.setAuthenticationProtocol(dataMap.get(LabelEnum.Protocol));
+ return credential;
+ }
+ });
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ if (ClientSessionManager.isSessionValid()) {
+ boolean isSaveAllowed = Boolean.valueOf(dataMap.get(LabelEnum.Remember_My_Password));
+ if (isSaveAllowed) {
+ //TODO: Store Password into KeyRing dataMap.get(LabelEnum.Password)
+ }
+ }
+ }
+ };
+
+ }
+
+ private void createMementoButton(Composite parent) {
+ Composite tempComposite = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginHeight = 0;
+ tempComposite.setLayout(layout);
+ tempComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ memoButton = new Button(tempComposite, SWT.CHECK);
+ memoButton.setText("Remember my password");
+ memoButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ memoButton.setToolTipText(WARNING_MESSAGE);
+ memoButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ dataMap.put(LabelEnum.Remember_My_Password, Boolean.toString(memoButton.getSelection()));
+ }
+ });
+ }
+
+ public SelectionListener getAuthenticateListener() {
+ return listener;
+ }
+
+ public void setUserName(String user) {
+ setAndStoreField(LabelEnum.UserId, user);
+ }
+
+ public void setPassword(String password) {
+ setAndStoreField(LabelEnum.Password, password);
+ }
+
+ public void setDomain(String domain) {
+ setAndStoreField(LabelEnum.Domain, domain);
+ }
+
+ public void setStorageAllowed(boolean isStorageAllowed) {
+ setAndStoreField(LabelEnum.Remember_My_Password, Boolean.toString(isStorageAllowed));
+ }
+
+ public void setProtocol(String protocol) {
+ setAndStoreField(LabelEnum.Protocol, protocol);
+ }
+
+ private void setAndStoreField(LabelEnum fieldKey, String value) {
+ if (fieldKey.equals(LabelEnum.Remember_My_Password)) {
+ if (isWidgetAccessible(memoButton)) {
+ memoButton.setSelection(Boolean.valueOf(value));
+ }
+ } else {
+ Widget object = fieldMap.get(fieldKey);
+ if (isWidgetAccessible(object)) {
+ if (object instanceof Text) {
+ Text textField = (Text) object;
+ textField.setText(value);
+ }
+ if (object instanceof Combo) {
+ Combo combo = (Combo) object;
+ combo.setText(value);
+ }
+ updateFieldStatus(fieldKey, object);
+ updateDefaultButtonStatus();
+ }
+ }
+ dataMap.put(fieldKey, value);
+ }
+
+ private boolean isWidgetAccessible(Widget widget) {
+ return widget != null && !widget.isDisposed();
+ }
+
+ public String getUserName() {
+ return dataMap.get(LabelEnum.UserId);
+ }
+
+ public String getPassword() {
+ return dataMap.get(LabelEnum.Password);
+ }
+
+ public String getDomain() {
+ return dataMap.get(LabelEnum.Domain);
+ }
+
+ public boolean isGuestLogin() {
+ return isGuestLogin;
+ }
+
+ public void setGuestLogin(boolean isGuestLogin) {
+ this.isGuestLogin = isGuestLogin;
+ }
+
+ public boolean isStorageAllowed() {
+ String value = dataMap.get(LabelEnum.Remember_My_Password);
+ return (value != null ? Boolean.parseBoolean(value) : false);
+ }
+
+ public String getProtocol() {
+ return dataMap.get(LabelEnum.Protocol);
+ }
+
+ public boolean isValid() {
+ return allValid;
+ }
+
+ private void updateFieldStatus(LabelEnum labelKey, Widget field) {
+ switch (labelKey) {
+ case Protocol:
+ String temp = ((Combo) field).getText();
+ statusMap.get(labelKey).setVisible(!Strings.isValid(temp));
+ break;
+ case Remember_My_Password:
+ break;
+ default:
+ temp = ((Text) field).getText();
+ statusMap.get(labelKey).setVisible(!Strings.isValid(temp));
+ break;
+ }
+ }
+
+ private void updateDefaultButtonStatus() {
+ allValid = true;
+
+ if (!isGuestLogin) {
+ for (LabelEnum key : LabelEnum.values()) {
+ Label label = statusMap.get(key);
+ if (isWidgetAccessible(label)) {
+ allValid &= !label.isVisible();
+ }
+ }
+ }
+ Button defaultButton = AuthenticationComposite.this.getShell().getDefaultButton();
+ if (defaultButton != null) {
+ defaultButton.setEnabled(allValid);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/BranchSelectSimpleComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/BranchSelectSimpleComposite.java
new file mode 100644
index 00000000000..209028d1654
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/BranchSelectSimpleComposite.java
@@ -0,0 +1,263 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.panels;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectionDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class BranchSelectSimpleComposite extends Composite implements Listener {
+ protected static final int SIZING_TEXT_FIELD_WIDTH = 250;
+
+ private Button branchSelectButton;
+ private Combo branchSelectCombo;
+ private boolean entryChanged;
+ private Branch currentBranch;
+ private final Set<Listener> listeners;
+ private final boolean allowOnlyWorkingBranches;
+
+ private BranchSelectSimpleComposite(Composite parent, int style, boolean allowOnlyWorkingBranches) {
+ super(parent, style);
+ this.allowOnlyWorkingBranches = allowOnlyWorkingBranches;
+ this.entryChanged = false;
+ this.listeners = Collections.synchronizedSet(new HashSet<Listener>());
+ this.currentBranch = BranchManager.getDefaultBranch();
+ createControl(this);
+ }
+
+ public static BranchSelectSimpleComposite createWorkingBranchSelectComposite(Composite parent, int style) {
+ return new BranchSelectSimpleComposite(parent, style, true);
+ }
+
+ public static BranchSelectSimpleComposite createBranchSelectComposite(Composite parent, int style) {
+ return new BranchSelectSimpleComposite(parent, style, false);
+ }
+
+ private void createControl(Composite parent) {
+ parent.setLayout(new GridLayout(2, false));
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ branchSelectCombo = new Combo(parent, SWT.BORDER | SWT.READ_ONLY);
+ GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
+ data.widthHint = SIZING_TEXT_FIELD_WIDTH;
+ branchSelectCombo.setLayoutData(data);
+ branchSelectCombo.setFont(parent.getFont());
+ branchSelectCombo.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ updateFromSourceField();
+ }
+ });
+
+ branchSelectCombo.addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyPressed(KeyEvent e) {
+ // If there has been a key pressed then mark as dirty
+ entryChanged = true;
+ }
+ });
+
+ branchSelectCombo.addFocusListener(new FocusAdapter() {
+ @Override
+ public void focusLost(FocusEvent e) {
+ // Clear the flag to prevent constant update
+ if (entryChanged) {
+ entryChanged = false;
+ updateFromSourceField();
+ }
+ }
+ });
+
+ branchSelectButton = new Button(parent, SWT.PUSH);
+ branchSelectButton.setText("Select Branch...");
+ branchSelectButton.addListener(SWT.Selection, this);
+ branchSelectButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+ branchSelectButton.setFont(parent.getFont());
+ }
+
+ public Branch getSelectedBranch() {
+ Branch toReturn = null;
+ if (branchSelectCombo != null && branchSelectCombo.isDisposed() != true) {
+ String branchName = branchSelectCombo.getText();
+ if (Strings.isValid(branchName)) {
+ toReturn = (Branch) branchSelectCombo.getData(branchName);
+ if (toReturn == null) {
+ try {
+ toReturn = BranchManager.getKeyedBranch(branchName);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ currentBranch = toReturn;
+ }
+ return currentBranch;
+ }
+
+ private boolean areOnlyWorkingBranchesAllowed() {
+ return allowOnlyWorkingBranches;
+ }
+
+ private void updateFromSourceField() {
+ setBranchName(getSelectedBranch());
+ notifyListener(new Event());
+ }
+
+ private Branch getCurrentBranch() {
+ return currentBranch;
+ }
+
+ private void setBranchName(Branch branch) {
+ if (branch != null) {
+ String branchName = branch.getBranchName();
+ String[] currentItems = this.branchSelectCombo.getItems();
+ int selectionIndex = -1;
+ for (int i = 0; i < currentItems.length; i++) {
+ if (currentItems[i].equals(branchName)) {
+ selectionIndex = i;
+ }
+ }
+ if (selectionIndex < 0) {
+ int oldLength = currentItems.length;
+ String[] newItems = new String[oldLength + 1];
+ System.arraycopy(currentItems, 0, newItems, 0, oldLength);
+ newItems[oldLength] = branchName;
+ this.branchSelectCombo.setItems(newItems);
+ selectionIndex = oldLength;
+ branchSelectCombo.setData(Integer.toString(branch.getBranchId()), branch);
+ }
+ this.branchSelectCombo.select(selectionIndex);
+ }
+ }
+
+ public void restoreWidgetValues(String[] branchIds, String lastSelected) {
+ Branch currentBranch = getCurrentBranch();
+
+ // Add stored directories into selector
+ if (Strings.isValid(lastSelected) == false && currentBranch != null) {
+ lastSelected = Integer.toString(currentBranch.getBranchId());
+ }
+
+ if (branchIds == null) {
+ if (Strings.isValid(lastSelected)) {
+ branchIds = new String[] {lastSelected};
+ } else {
+ branchIds = new String[0];
+ }
+ }
+ setCombo(branchIds, lastSelected);
+ }
+
+ private void setCombo(String[] values, String lastSelected) {
+ int toSelect = 0;
+ for (int i = 0; i < values.length; i++) {
+ String toStore = values[i];
+ if (Strings.isValid(toStore)) {
+ try {
+ Branch branch = BranchManager.getBranch(Integer.parseInt(toStore));
+
+ if (isBranchAllowed(branch) != false) {
+ String branchName = branch.getBranchName();
+ branchSelectCombo.add(branchName);
+ branchSelectCombo.setData(branchName, branch);
+ if (toStore.equals(lastSelected)) {
+ toSelect = i;
+ branchSelectCombo.select(toSelect);
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, String.format(
+ "Unable to add invalid branch id [%s] to selection list.", toStore));
+ }
+ }
+ }
+ }
+
+ private boolean isBranchAllowed(Branch branch) throws Exception {
+ if (areOnlyWorkingBranchesAllowed() && !branch.hasParentBranch()) {
+ return false;
+ }
+ return true;
+ }
+
+ public String[] getBranchIds() {
+ String[] items = branchSelectCombo.getItems();
+ List<String> toReturn = new ArrayList<String>();
+ for (String item : items) {
+ Branch branch = (Branch) branchSelectCombo.getData(item);
+ if (branch != null) {
+ toReturn.add(Integer.toString(branch.getBranchId()));
+ }
+ }
+ return toReturn.toArray(new String[toReturn.size()]);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ public void handleEvent(Event event) {
+ if (event.widget == branchSelectButton) {
+ if (areOnlyWorkingBranchesAllowed() != false) {
+ setBranchName(BranchSelectionDialog.getWorkingBranchFromUser());
+ } else {
+ setBranchName(BranchSelectionDialog.getBranchFromUser());
+ }
+ }
+ notifyListener(event);
+ }
+
+ private void notifyListener(Event event) {
+ synchronized (listeners) {
+ for (Listener listener : listeners) {
+ listener.handleEvent(event);
+ }
+ }
+ }
+
+ public void addListener(Listener listener) {
+ synchronized (listeners) {
+ listeners.add(listener);
+ }
+ }
+
+ public void removeListener(Listener listener) {
+ synchronized (listeners) {
+ listeners.remove(listener);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/SearchComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/SearchComposite.java
new file mode 100644
index 00000000000..ef9c09b243b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/panels/SearchComposite.java
@@ -0,0 +1,402 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.panels;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class SearchComposite extends Composite implements Listener {
+
+ private static final String CLEAR_HISTORY_TOOLTIP = "Clears search history";
+ private static final String SEARCH_BUTTON_TOOLTIP = "Executes search";
+ private static final String SEARCH_COMBO_TOOLTIP =
+ "Enter word(s) to search for or select historical value from pull-down on the right.";
+
+ private Set<Listener> listeners;
+ private Combo searchArea;
+ private Button executeSearch;
+ private Button clear;
+ private Map<String, Boolean> optionsMap;
+ private Map<String, Button> optionsButtons;
+ private Set<String> mutuallyExclusiveOptionSet;
+ private boolean entryChanged;
+ private Group optionGroup;
+
+ public SearchComposite(Composite parent, int style, String[] options, String[] mutuallyExclusiveOptions) {
+ super(parent, style);
+ this.listeners = new HashSet<Listener>();
+ this.optionsMap = new LinkedHashMap<String, Boolean>();
+ this.optionsButtons = new LinkedHashMap<String, Button>();
+ this.mutuallyExclusiveOptionSet = new HashSet<String>();
+ if (options != null) {
+ for (String option : options) {
+ this.optionsMap.put(option, false);
+ }
+ }
+ if (mutuallyExclusiveOptions != null) {
+ for (String option : mutuallyExclusiveOptions) {
+ this.optionsMap.put(option, false);
+ this.mutuallyExclusiveOptionSet.add(option);
+ }
+ }
+ this.entryChanged = false;
+ createControl(this);
+ }
+
+ private void createControl(Composite parent) {
+ GridLayout gL = new GridLayout();
+ gL.marginHeight = 0;
+ gL.marginWidth = 0;
+ parent.setLayout(gL);
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ createSearchInputArea(parent);
+ createOptionsArea(parent);
+ }
+
+ private void createSearchInputArea(Composite parent) {
+ Group group = new Group(parent, SWT.NONE);
+ group.setLayout(new GridLayout(2, false));
+ group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ group.setText("Enter Search String");
+
+ this.searchArea = new Combo(group, SWT.BORDER);
+ this.searchArea.setFont(getFont());
+ this.searchArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ this.searchArea.addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent event) {
+ // If there has been a key pressed then mark as dirty
+ entryChanged = true;
+
+ if (event.character == '\r') {
+ if (executeSearch.getEnabled()) {
+ if (entryChanged) {
+ entryChanged = false;
+ updateFromSourceField();
+ }
+
+ Event sendEvent = new Event();
+ sendEvent.widget = event.widget;
+ sendEvent.character = event.character;
+ sendEvent.type = SWT.KeyUp;
+ notifyListener(sendEvent);
+ }
+ }
+ }
+ });
+
+ this.searchArea.addModifyListener(new ModifyListener() {
+ @Override
+ public void modifyText(ModifyEvent e) {
+ updateWidgetEnablements();
+ }
+ });
+
+ this.searchArea.setToolTipText(SEARCH_COMBO_TOOLTIP);
+ createButtonBar(group);
+ }
+
+ private void createButtonBar(Composite parent) {
+ this.clear = new Button(parent, SWT.NONE);
+ this.clear.setText("Clear History");
+ this.clear.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ if (searchArea.getItemCount() > 0) {
+ searchArea.removeAll();
+ for (String option : optionsMap.keySet()) {
+ Button button = getOrCreateOptionsButton(option);
+ button.setSelection(false);
+ optionsMap.put(option, false);
+ }
+ }
+ }
+ });
+ this.clear.addListener(SWT.Selection, this);
+ this.clear.setEnabled(false);
+ this.clear.setFont(getFont());
+ this.clear.setToolTipText(CLEAR_HISTORY_TOOLTIP);
+
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout gL = new GridLayout();
+ gL.marginWidth = 0;
+ gL.marginHeight = 0;
+ composite.setLayout(gL);
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ this.executeSearch = new Button(composite, SWT.NONE);
+ this.executeSearch.setText("Search");
+ this.executeSearch.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (entryChanged) {
+ entryChanged = false;
+ updateFromSourceField();
+ }
+ }
+ });
+ this.executeSearch.addListener(SWT.Selection, this);
+ this.executeSearch.setEnabled(false);
+ this.executeSearch.setFont(getFont());
+ this.executeSearch.setToolTipText(SEARCH_BUTTON_TOOLTIP);
+ }
+
+ private void createOptionsArea(Composite parent) {
+ this.optionGroup = new Group(parent, SWT.NONE);
+ this.optionGroup.setLayout(new GridLayout());
+ this.optionGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ this.optionGroup.setText("Options");
+
+ initializeOptions(optionsMap);
+ }
+
+ private Button getOrCreateOptionsButton(String option) {
+ Button toReturn = this.optionsButtons.get(option);
+ if (toReturn == null) {
+ toReturn = new Button(this.optionGroup, SWT.CHECK);
+ toReturn.setText(option);
+ toReturn.setData(option);
+ toReturn.setFont(getFont());
+ toReturn.addListener(SWT.Selection, this);
+ toReturn.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ Object object = e.getSource();
+ if (object instanceof Button) {
+ Button button = (Button) object;
+ if (mutuallyExclusiveOptionSet.contains((String) button.getData())) {
+ if (button.getSelection()) {
+ for (String entry : mutuallyExclusiveOptionSet) {
+ Button other = optionsButtons.get(entry);
+ if (!other.equals(button)) {
+ other.setSelection(false);
+ }
+ optionsMap.put((String) other.getData(), other.getSelection());
+ }
+ }
+ }
+ optionsMap.put((String) button.getData(), button.getSelection());
+ }
+ }
+ });
+ this.optionsButtons.put(option, toReturn);
+ }
+ return toReturn;
+ }
+
+ private void updateFromSourceField() {
+ setSearchQuery(getQuery());
+ updateWidgetEnablements();
+ }
+
+ private void setSearchQuery(String query) {
+ if (Strings.isValid(query)) {
+ String[] currentItems = this.searchArea.getItems();
+ int selectionIndex = -1;
+ for (int i = 0; i < currentItems.length; i++) {
+ if (currentItems[i].equals(query)) {
+ selectionIndex = i;
+ }
+ }
+ if (selectionIndex < 0) {
+ int oldLength = currentItems.length;
+ String[] newItems = new String[oldLength + 1];
+ System.arraycopy(currentItems, 0, newItems, 0, oldLength);
+ newItems[oldLength] = query;
+ this.searchArea.setItems(newItems);
+ selectionIndex = oldLength;
+ }
+ this.searchArea.select(selectionIndex);
+ }
+ }
+
+ public String getQuery() {
+ String toReturn = "";
+ if (isWidgetAccessible(this.searchArea)) {
+ String query = this.searchArea.getText();
+ if (Strings.isValid(query)) {
+ toReturn = query;
+ }
+ }
+ return toReturn;
+ }
+
+ private boolean isWidgetAccessible(Widget widget) {
+ return widget != null && widget.isDisposed() != true;
+ }
+
+ private void updateWidgetEnablements() {
+ if (isWidgetAccessible(this.searchArea)) {
+ String value = this.searchArea.getText();
+ if (value != null) {
+ value = value.trim();
+ }
+ if (isWidgetAccessible(this.executeSearch)) {
+ this.executeSearch.setEnabled(Strings.isValid(value));
+ }
+ if (isWidgetAccessible(this.clear)) {
+ this.clear.setEnabled(this.searchArea.getItemCount() > 0);
+ }
+ }
+ }
+
+ private void initializeOptions(Map<String, Boolean> options) {
+ for (String option : options.keySet()) {
+ Button button = getOrCreateOptionsButton(option);
+ Boolean isSelected = options.get(option);
+ button.setSelection(isSelected);
+ this.optionsMap.put(option, isSelected);
+ }
+ }
+
+ public Map<String, Boolean> getOptions() {
+ return optionsMap;
+ }
+
+ public boolean isOptionSelected(String key) {
+ Boolean value = optionsMap.get(key);
+ return value != null ? value.booleanValue() : false;
+ }
+
+ public void handleEvent(Event event) {
+ updateWidgetEnablements();
+ notifyListener(event);
+ }
+
+ public void addListener(Listener listener) {
+ synchronized (listeners) {
+ this.listeners.add(listener);
+ }
+ }
+
+ public void removeListener(Listener listener) {
+ synchronized (listeners) {
+ this.listeners.remove(listener);
+ }
+ }
+
+ private void notifyListener(Event event) {
+ synchronized (listeners) {
+ for (Listener listener : listeners) {
+ listener.handleEvent(event);
+ }
+ }
+ }
+
+ public String[] getQueryHistory() {
+ return isWidgetAccessible(this.searchArea) ? this.searchArea.getItems() : new String[0];
+ }
+
+ private void setCombo(List<String> values, String lastSelected) {
+ int toSelect = 0;
+ for (int i = 0; i < values.size(); i++) {
+ String toStore = values.get(i);
+ if (Strings.isValid(toStore)) {
+ this.searchArea.add(toStore);
+ if (toStore.equals(lastSelected)) {
+ toSelect = i;
+ this.searchArea.select(toSelect);
+ }
+ }
+ }
+ }
+
+ public void restoreWidgetValues(List<String> querySearches, String lastSelected, Map<String, Boolean> options) {
+ String currentSearch = getQuery();
+
+ // Add stored directories into selector
+ if (Strings.isValid(lastSelected) == false && currentSearch != null) {
+ lastSelected = currentSearch;
+ }
+
+ if (querySearches == null || querySearches.isEmpty()) {
+ if (Strings.isValid(lastSelected)) {
+ querySearches = new ArrayList<String>();
+ querySearches.add(lastSelected);
+ } else {
+ querySearches = Collections.emptyList();
+ }
+ }
+ setCombo(querySearches, lastSelected);
+
+ initializeOptions(options);
+ }
+
+ public boolean isExecuteSearchEvent(Event event) {
+ boolean toReturn = false;
+ Widget widget = event.widget;
+ if (widget != null) {
+ if (widget.equals(this.executeSearch)) {
+ toReturn = true;
+ } else if (widget.equals(this.searchArea) && event.type == SWT.KeyUp && event.character == '\r') {
+ toReturn = true;
+ }
+ }
+ return toReturn;
+ }
+
+ public void setToolTipForSearchCombo(String toolTip) {
+ if (isWidgetAccessible(this.searchArea)) {
+ this.searchArea.setToolTipText(toolTip);
+ }
+ }
+
+ public void setHelpContext(String helpContext) {
+ if (isWidgetAccessible(this.searchArea) && isWidgetAccessible(this.executeSearch) && isWidgetAccessible(this.clear)) {
+ SkynetGuiPlugin.getInstance().setHelp(searchArea, helpContext);
+ SkynetGuiPlugin.getInstance().setHelp(executeSearch, helpContext);
+ SkynetGuiPlugin.getInstance().setHelp(clear, helpContext);
+ }
+ }
+
+ public void setHelpContextForOption(String optionId, String helpContext) {
+ Control control = getOrCreateOptionsButton(optionId);
+ if (isWidgetAccessible(control)) {
+ SkynetGuiPlugin.getInstance().setHelp(control, helpContext);
+ }
+ }
+
+ public void setToolTipForOption(String optionId, String toolTip) {
+ Control control = getOrCreateOptionsButton(optionId);
+ if (isWidgetAccessible(control)) {
+ control.setToolTipText(toolTip);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ArbitrationServerPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ArbitrationServerPage.java
new file mode 100644
index 00000000000..ebbaa259fbc
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ArbitrationServerPage.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.preferences;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.osee.framework.core.client.OseeClientProperties;
+import org.eclipse.osee.framework.core.client.server.HttpUrlBuilder;
+import org.eclipse.osee.framework.core.data.OseeCodeVersion;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class ArbitrationServerPage extends PreferencePage implements IWorkbenchPreferencePage {
+
+ public ArbitrationServerPage() {
+ super();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createContents(Composite parent) {
+ Composite content = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ content.setLayout(layout);
+ content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ Group resourceGroup = new Group(content, SWT.NONE);
+ resourceGroup.setLayout(new GridLayout());
+ resourceGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ resourceGroup.setText("OSEE Arbitration");
+
+ Composite resourceComposite = new Composite(resourceGroup, SWT.NONE);
+ resourceComposite.setLayout(new GridLayout(2, false));
+ resourceComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ boolean wasArbitrationOverriden = Strings.isValid(OseeClientProperties.getOseeApplicationServer());
+ String defaultArbitrationServer = null;
+ if (!wasArbitrationOverriden) {
+ try {
+ defaultArbitrationServer = HttpUrlBuilder.getInstance().getArbitrationServerPrefix();
+ } catch (OseeDataStoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex.toString(), ex);
+ }
+ }
+
+ String defaultApplicationServer = null;
+ try {
+ defaultApplicationServer = HttpUrlBuilder.getInstance().getApplicationServerPrefix();
+ } catch (OseeDataStoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex.toString(), ex);
+ }
+
+ List<Data> entries = new ArrayList<Data>();
+
+ if (wasArbitrationOverriden) {
+ entries.add(new Data("Arbitration", "Disabled", Display.getDefault().getSystemColor(SWT.COLOR_RED)));
+ entries.add(new Data("Application Server: ", defaultApplicationServer != null ? defaultApplicationServer : ""));
+ } else {
+ entries.add(new Data("Arbitration Server: ", defaultArbitrationServer != null ? defaultArbitrationServer : ""));
+ entries.add(new Data("Version To Match: ", OseeCodeVersion.getVersion()));
+ entries.add(new Data("Resolved To Server: ", defaultApplicationServer != null ? defaultApplicationServer : ""));
+ }
+ for (Data entry : entries) {
+ Label label1 = new Label(resourceComposite, SWT.NONE);
+ label1.setForeground(entry.getLabelColor());
+ label1.setText(entry.getLabelText());
+
+ Label label2 = new Label(resourceComposite, SWT.NONE);
+ label2.setForeground(entry.getDataColor());
+ label2.setText(entry.getDataText());
+ }
+ return content;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+ */
+ public void init(IWorkbench workbench) {
+ setPreferenceStore(SkynetActivator.getInstance().getPreferenceStore());
+ setDescription("See default Arbitration Server below.");
+ }
+
+ private final class Data {
+ private String label;
+ private Color labelColor;
+ private String value;
+ private Color valueColor;
+
+ public Data(String label, Color labelColor, String value, Color valueColor) {
+ super();
+ this.label = label;
+ this.labelColor = labelColor;
+ this.value = value;
+ this.valueColor = valueColor;
+ }
+
+ public Data(String label, Color labelColor, String value) {
+ this(label, labelColor, value, Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
+ }
+
+ public Data(String label, String value, Color valueColor) {
+ this(label, Display.getDefault().getSystemColor(SWT.COLOR_BLUE), value, valueColor);
+ }
+
+ public Data(String label, String value) {
+ this(label, Display.getDefault().getSystemColor(SWT.COLOR_BLUE), value, Display.getDefault().getSystemColor(
+ SWT.COLOR_BLACK));
+ }
+
+ public String getLabelText() {
+ return label;
+ }
+
+ public Color getLabelColor() {
+ return labelColor;
+ }
+
+ public String getDataText() {
+ return value;
+ }
+
+ public Color getDataColor() {
+ return valueColor;
+ }
+
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ConfigurationDetails.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ConfigurationDetails.java
new file mode 100644
index 00000000000..2a47f6a7a4d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ConfigurationDetails.java
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.preferences;
+
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.logging.IHealthStatus;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class ConfigurationDetails extends PreferencePage implements IWorkbenchPreferencePage {
+ private static final String HTML_HEADER =
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html14/loose.dtd\">\n";
+
+ private static final String CSS_SHEET =
+ "<style type=\"text/css\"> table.oseeTable { font: 0.7em \"arial\", serif; border-width: 1px 1px 1px 1px; border-spacing: 2px; border-style: solid solid solid solid; border-color: blue blue blue blue; border-collapse: separate; background-color: rgb(255, 250, 250); } " + " table.oseeTable th { border-width: 1px 1px 1px 1px; padding: 4px 4px 4px 4px; border-style: solid solid solid solid; border-color: black black black black; background-color: white; -moz-border-radius: 0px 0px 0px 0px; } " + " table.oseeTable td { border-width: 1px 1px 1px 1px; padding: 4px 4px 4px 4px; border-style: solid solid solid solid; border-color: black black black black; background-color: white; -moz-border-radius: 0px 0px 0px 0px; } </style>\n";
+
+ private static final String PAGE_TEMPLATE =
+ HTML_HEADER + "<html>\n<head>\n" + CSS_SHEET + "</head>\n<body>\n%s</body>\n</html>";
+
+ private Browser browser;
+
+ public ConfigurationDetails() {
+ super();
+ this.browser = null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+ */
+ public void init(IWorkbench workbench) {
+ setPreferenceStore(SkynetActivator.getInstance().getPreferenceStore());
+ setDescription("See below for OSEE configuration details.");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createContents(Composite parent) {
+ Composite content = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ content.setLayout(layout);
+ content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ Group composite = new Group(content, SWT.NONE);
+ composite.setLayout(new GridLayout());
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setText("Connections");
+
+ browser = new Browser(composite, SWT.READ_ONLY | SWT.BORDER);
+ browser.setLayout(new FillLayout());
+ browser.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
+
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ generatePage();
+ }
+ });
+ return content;
+ }
+
+ private void generatePage() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("<table class=\"oseeTable\" width=\"100%\">");
+ builder.append(AHTML.addHeaderRowMultiColumnTable(new String[] {"Type", "Info", "Status"}));
+
+ for (IHealthStatus status : OseeLog.getStatus()) {
+ builder.append(AHTML.addRowMultiColumnTable(new String[] {
+ "<b>" + status.getSourceName() + "</b>",
+ status.getMessage().replaceAll("]", "]<br/>"),
+ status.isOk() ? "<font color=\"green\"><b>Ok</b></font>" : "<font color=\"red\"><b>Unavailable</b></font>"}));
+ }
+ builder.append(AHTML.endMultiColumnTable());
+ browser.setText(String.format(PAGE_TEMPLATE, builder.toString()));
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/DefaultWithStringAndIntegerFields.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/DefaultWithStringAndIntegerFields.java
new file mode 100644
index 00000000000..0efe6c58bdf
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/DefaultWithStringAndIntegerFields.java
@@ -0,0 +1,200 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.preferences;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.preference.FieldEditor;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class DefaultWithStringAndIntegerFields extends FieldEditor {
+ private static final String CUSTOM_BUTTON_KEY = ".custom";
+ private static final String STRING_FIELD_KEY = ".stringField";
+ private static final String INTEGER_FIELD_KEY = ".integerField";
+
+ private Button defaultButton;
+ private Button userButton;
+ private Label defaultLabel;
+ private Text text1;
+ private Text text2;
+ private String defaultValue;
+ private String labelText1;
+ private String labelText2;
+ private Composite textComposite;
+
+ public DefaultWithStringAndIntegerFields(String name, String defaultValue, String labelText1, String labelText2, Composite parent) {
+ super();
+ Assert.isNotNull(defaultValue);
+ this.defaultValue = defaultValue;
+ this.labelText1 = labelText1;
+ this.labelText2 = labelText2;
+
+ init(name, "");
+ createControl(parent);
+ }
+
+ @Override
+ protected void adjustForNumColumns(int numColumns) {
+ }
+
+ @Override
+ protected void doFillIntoGrid(Composite parent, int numColumns) {
+ }
+
+ @Override
+ protected void createControl(Composite parent) {
+ Composite baseComposite = new Composite(parent, SWT.NONE);
+ baseComposite.setLayout(new GridLayout());
+ baseComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ Composite buttonComposite = new Composite(baseComposite, SWT.NONE);
+ buttonComposite.setLayout(new GridLayout(2, false));
+ buttonComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ defaultButton = new Button(buttonComposite, SWT.RADIO);
+ defaultButton.setText("Default: ");
+
+ defaultLabel = new Label(buttonComposite, SWT.NONE);
+ defaultLabel.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, true, false));
+ defaultLabel.setText(defaultValue);
+
+ userButton = new Button(buttonComposite, SWT.RADIO);
+ userButton.setText("User Defined: ");
+
+ createCustomArea(baseComposite);
+ attachListeners();
+ }
+
+ private void createCustomArea(Composite parent) {
+ textComposite = new Composite(parent, SWT.BORDER);
+ GridLayout gridLayout = new GridLayout(2, false);
+ textComposite.setLayout(gridLayout);
+ textComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ Label text1Label = new Label(textComposite, SWT.NONE);
+ text1Label.setText(labelText1);
+
+ text1 = new Text(textComposite, SWT.BORDER | SWT.SINGLE);
+ text1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ Label text2Label = new Label(textComposite, SWT.NONE);
+ text2Label.setText(labelText2);
+
+ text2 = new Text(textComposite, SWT.BORDER | SWT.SINGLE);
+ text2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ }
+
+ @Override
+ protected void doLoad() {
+ performLoad();
+ }
+
+ @Override
+ protected void doLoadDefault() {
+ performLoad();
+ }
+
+ @Override
+ protected void doStore() {
+ IPreferenceStore store = getPreferenceStore();
+ if (userButton.getSelection()) {
+ String textField = text1.getText();
+ String integerField = text2.getText();
+ if (areValuesValid(textField, integerField)) {
+ store.setValue(getPreferenceName() + CUSTOM_BUTTON_KEY, true);
+ store.setValue(getPreferenceName() + STRING_FIELD_KEY, textField);
+ store.setValue(getPreferenceName() + INTEGER_FIELD_KEY, integerField);
+ store.setValue(getPreferenceName(), textField + ":" + integerField);
+ }
+ } else {
+ store.setValue(getPreferenceName() + CUSTOM_BUTTON_KEY, false);
+ store.setValue(getPreferenceName(), defaultValue);
+ }
+ }
+
+ public String getSelected() {
+ String toReturn = defaultValue;
+ if (userButton.getSelection()) {
+ String textField = text1.getText();
+ String integerField = text2.getText();
+ if (areValuesValid(textField, integerField)) {
+ toReturn = String.format("http://%s:%s", textField, integerField);
+ }
+ }
+ return toReturn;
+ }
+
+ @Override
+ public int getNumberOfControls() {
+ return 2;
+ }
+
+ private boolean areValuesValid(String textField, String integerField) {
+ boolean toReturn = false;
+ if (Strings.isValid(textField)) {
+ try {
+ Integer integer = new Integer(integerField);
+ if (integer != null) {
+ toReturn = true;
+ }
+ } catch (NumberFormatException ex) {
+ }
+ }
+ return toReturn;
+ }
+
+ private void performLoad() {
+ IPreferenceStore store = getPreferenceStore();
+ boolean wasCustomSelected = store.getBoolean(getPreferenceName() + CUSTOM_BUTTON_KEY);
+ String stringField = store.getString(getPreferenceName() + STRING_FIELD_KEY);
+ String integerField = store.getString(getPreferenceName() + INTEGER_FIELD_KEY);
+ if (wasCustomSelected && areValuesValid(stringField, integerField)) {
+ selectDefaultButton(false);
+ text1.setText(stringField);
+ text2.setText(integerField);
+ } else {
+ selectDefaultButton(true);
+ }
+ }
+
+ private void attachListeners() {
+ defaultButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ selectDefaultButton(defaultButton.getSelection());
+ }
+ });
+ }
+
+ private void selectDefaultButton(boolean isSelected) {
+ defaultButton.setSelection(isSelected);
+ defaultLabel.setEnabled(isSelected);
+ userButton.setSelection(!isSelected);
+ textComposite.setEnabled(!isSelected);
+ for (Control child : textComposite.getChildren()) {
+ child.setEnabled(!isSelected);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogContentProvider.java
new file mode 100644
index 00000000000..58d54a2652e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogContentProvider.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.queryLog;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.core.query.QueryLog;
+import org.eclipse.osee.framework.db.connection.core.query.QueryRecord;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class QueryLogContentProvider implements ITreeContentProvider {
+
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof QueryLog) {
+ return ((QueryLog) parentElement).getRecords().toArray();
+ } else if (parentElement instanceof QueryRecord) {
+ QueryRecord record = (QueryRecord) parentElement;
+
+ if (record.getSqlException() != null) {
+ return new Object[] {record.getSqlException()};
+ }
+ return record.getBindVariables();
+ } else if (parentElement instanceof Exception) {
+ return ((Exception) parentElement).getStackTrace();
+ }
+ return null;
+ }
+
+ // Only needed to support the reveal() method, not implementing yet
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ if (element instanceof QueryLog) {
+ return ((QueryLog) element).getRecords().size() > 0;
+ } else if (element instanceof QueryRecord) {
+ QueryRecord record = (QueryRecord) element;
+ return record.getBindVariables().length > 0 || record.getSqlException() != null;
+ } else if (element instanceof Exception) {
+ return ((Exception) element).getStackTrace().length > 0;
+ }
+ return false;
+ }
+
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof QueryLog) {
+ return getChildren(inputElement);
+ }
+ throw new IllegalArgumentException("Expect a " + QueryLog.class.getCanonicalName() + " object");
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogLabelProvider.java
new file mode 100644
index 00000000000..02577121713
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogLabelProvider.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.queryLog;
+
+import static org.eclipse.osee.framework.ui.skynet.queryLog.QueryLogView.DURATION;
+import static org.eclipse.osee.framework.ui.skynet.queryLog.QueryLogView.ITEM;
+import static org.eclipse.osee.framework.ui.skynet.queryLog.QueryLogView.TIME;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.db.connection.core.query.QueryRecord;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerLabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class QueryLogLabelProvider extends XViewerLabelProvider {
+ private static final DateFormat TIME_FORMAT = new SimpleDateFormat("hh:mm:ss.SSS a");
+ private final ISharedImages sharedImages;
+
+ /**
+ * @param viewer
+ */
+ public QueryLogLabelProvider(XViewer viewer) {
+ super(viewer);
+ sharedImages = PlatformUI.getWorkbench().getSharedImages();
+ }
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ if (element instanceof QueryRecord) {
+ if (((QueryRecord) element).getSqlException() != null) {
+ return sharedImages.getImage(ISharedImages.IMG_OBJS_WARN_TSK);
+ }
+ } else if (element instanceof Exception) {
+ return sharedImages.getImage(ISharedImages.IMG_OBJS_ERROR_TSK);
+ } else if (element instanceof String) {
+ return sharedImages.getImage(ISharedImages.IMG_OBJ_ELEMENT);
+ }
+ return null;
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerLabelProvider#getColumnImage(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn)
+ */
+ @Override
+ public Image getColumnImage(Object element, XViewerColumn xCol, int columnIndex) {
+ // Since getColumnimage is overridden, this method will not be called
+ return null;
+ }
+
+ public String getColumnText(Object element, XViewerColumn xCol, int columnIndex) {
+ String columnName = xCol.getName();
+
+ if (element instanceof QueryRecord) {
+ QueryRecord record = (QueryRecord) element;
+
+ if (columnName.equals(ITEM)) {
+ return record.getSql();
+ } else if (columnName.equals(TIME)) {
+ return TIME_FORMAT.format(record.getDate());
+ } else if (columnName.equals(DURATION)) {
+ if (record.getRunDurationMs() != null) {
+ return record.getRunDurationMs().toString();
+ }
+ }
+ } else if (columnName.equals(ITEM)) {
+ return element.toString();
+ }
+ return null;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogView.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogView.java
new file mode 100644
index 00000000000..dc4cb379426
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogView.java
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.queryLog;
+
+import java.util.Iterator;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.db.connection.core.query.QueryLog;
+import org.eclipse.osee.framework.db.connection.core.query.QueryRecord;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.ui.plugin.util.SelectionCountChangeListener;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class QueryLogView extends ViewPart implements IActionable {
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.QueryLogView";
+ public static final String ITEM = "Item";
+ public static final String TIME = "Time";
+ public static final String DURATION = "Run ms";
+
+ private XViewer viewer;
+ private Clipboard clipboard;
+
+ @Override
+ public void createPartControl(Composite parent) {
+
+ if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) return;
+
+ clipboard = new Clipboard(null);
+
+ parent.setLayout(new GridLayout(1, false));
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ viewer = new XViewer(parent, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION, new QueryLogXViewerFactory());
+ viewer.setContentProvider(new QueryLogContentProvider());
+ viewer.setLabelProvider(new QueryLogLabelProvider(viewer));
+ viewer.setInput(QueryLog.getInstance());
+ viewer.addSelectionChangedListener(new SelectionCountChangeListener(getViewSite()));
+
+ Tree tree = viewer.getTree();
+ GridData gridData = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL | GridData.GRAB_HORIZONTAL);
+ tree.setLayoutData(gridData);
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+ tree.addKeyListener(new KeySelectedListener());
+
+ createActions();
+ setHelpContexts();
+ }
+
+ private void createActions() {
+
+ Action refreshAction = new Action("Refresh") {
+
+ @Override
+ public void run() {
+ viewer.refresh();
+ }
+ };
+ refreshAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("refresh.gif"));
+ refreshAction.setToolTipText("Refresh");
+
+ Action clearLogAction = new Action("Delete Log") {
+
+ @Override
+ public void run() {
+ ((QueryLog) viewer.getInput()).clear();
+ viewer.refresh();
+ }
+ };
+ clearLogAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("delete_edit.gif"));
+ clearLogAction.setToolTipText("Delete Log");
+
+ IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
+ toolbarManager.add(refreshAction);
+ toolbarManager.add(clearLogAction);
+ viewer.addCustomizeToViewToolbar(this);
+ OseeAts.addBugToViewToolbar(this, this, SkynetGuiPlugin.getInstance(), VIEW_ID, "Query Log");
+ }
+
+ private void setHelpContexts() {
+ SkynetGuiPlugin.getInstance().setHelp(viewer.getControl(), "query_log_table");
+ }
+
+ @Override
+ public void setFocus() {
+ if (viewer != null) viewer.getControl().setFocus();
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ private void performCopy() {
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+ if (selection.isEmpty()) {
+ return;
+ }
+ Object selected = selection.getFirstElement();
+
+ String text = null;
+
+ if (selected instanceof QueryRecord) {
+ text = ((QueryRecord) selected).getSql();
+ } else if (selected instanceof String) {
+ text = ((String) selected).replaceAll(".*:", "");
+ } else if (selected instanceof Exception) {
+ text = Lib.exceptionToString((Exception) selected);
+ } else {
+ text = selected.toString();
+ }
+ clipboard.setContents(new Object[] {text}, new Transfer[] {TextTransfer.getInstance()});
+ }
+
+ private class KeySelectedListener implements KeyListener {
+ public void keyPressed(KeyEvent e) {
+ }
+
+ public void keyReleased(KeyEvent e) {
+ if (e.keyCode == 'a' && e.stateMask == SWT.CONTROL) {
+ viewer.getTree().selectAll();
+ } else if (e.keyCode == 'x' && e.stateMask == SWT.CONTROL) {
+ expandAll((IStructuredSelection) viewer.getSelection());
+ } else if (e.keyCode == 'c' && e.stateMask == SWT.CONTROL) {
+ performCopy();
+ }
+ }
+ }
+
+ private void expandAll(IStructuredSelection selection) {
+ Iterator<?> iter = selection.iterator();
+ while (iter.hasNext()) {
+ viewer.expandToLevel(iter.next(), TreeViewer.ALL_LEVELS);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogXViewerFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogXViewerFactory.java
new file mode 100644
index 00000000000..9e2d28ad5a2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/queryLog/QueryLogXViewerFactory.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.queryLog;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerSorter;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn.SortDataType;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class QueryLogXViewerFactory extends SkynetXViewerFactory {
+
+ public QueryLogXViewerFactory() {
+ super("org.eclipse.osee.framework.ui.skynet.QueryLogView");
+ }
+
+ public XViewerSorter createNewXSorter(XViewer xViewer) {
+ return new XViewerSorter(xViewer);
+ }
+
+ public CustomizeData getDefaultTableCustomizeData() {
+ CustomizeData custData = new CustomizeData();
+ List<XViewerColumn> defaultColumns = new ArrayList<XViewerColumn>();
+ defaultColumns.add(new XViewerColumn("queryLog." + QueryLogView.ITEM, QueryLogView.ITEM, 400, SWT.LEFT, true,
+ SortDataType.String, false, null));
+ defaultColumns.add(new XViewerColumn("queryLog." + QueryLogView.TIME, QueryLogView.TIME, 100, SWT.CENTER, true,
+ SortDataType.String, false, null));
+ defaultColumns.add(new XViewerColumn("queryLog." + QueryLogView.DURATION, QueryLogView.DURATION, 100, SWT.CENTER,
+ true, SortDataType.Float, false, null));
+ custData.getColumnData().setColumns(defaultColumns);
+ return custData;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.IXViewerFactory#getDefaultXViewerColumn()
+ */
+ @Override
+ public XViewerColumn getDefaultXViewerColumn(String id) {
+ for (XViewerColumn xCol : getDefaultTableCustomizeData().getColumnData().getColumns()) {
+ if (xCol.getId().equals(id)) {
+ return xCol;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModel.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModel.java
new file mode 100644
index 00000000000..642447d3433
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModel.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.relation.explorer;
+
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+
+public class ArtifactModel {
+
+ private boolean add;
+ private boolean artifactFound;
+ private Artifact artifact;
+ private String name;
+ private ArtifactType descriptor;
+ private String rationale;
+
+ public ArtifactModel(String name, ArtifactType descriptor) {
+ this(false, null, name, descriptor, "");
+ }
+
+ public ArtifactModel(Artifact artifact) {
+ this(true, artifact, artifact.getDescriptiveName(), artifact.getArtifactType(), "");
+ }
+
+ private ArtifactModel(boolean artifactFound, Artifact artifact, String name, ArtifactType descriptor, String rationale) {
+ this.add = true;
+ this.artifactFound = artifactFound;
+ this.artifact = artifact;
+ this.name = name;
+ this.descriptor = descriptor;
+ this.rationale = rationale;
+ }
+
+ /**
+ * @return Returns the artifact.
+ */
+ public Artifact getArtifact() {
+ return artifact;
+ }
+
+ /**
+ * @return Returns the add.
+ */
+ public boolean isAdd() {
+ return add;
+ }
+
+ /**
+ * @param add The add to set.
+ */
+ public void setAdd(boolean add) {
+ this.add = add;
+ }
+
+ /**
+ * @return Returns the artifact.
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name - The name to set.
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return Returns the descriptor.
+ */
+ public ArtifactType getDescriptor() {
+ return descriptor;
+ }
+
+ /**
+ * @param descriptor The descriptor to set.
+ */
+ public void setDescriptor(ArtifactType descriptor) {
+ this.descriptor = descriptor;
+ }
+
+ /**
+ * @return Returns the rationale.
+ */
+ public String getRationale() {
+ return rationale;
+ }
+
+ /**
+ * @param rationale The rationale to set.
+ */
+ public void setRationale(String rationale) {
+ this.rationale = rationale;
+ }
+
+ /**
+ * @return Returns the artifactFound.
+ */
+ public boolean isArtifactFound() {
+ return artifactFound;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModelLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModelLabelProvider.java
new file mode 100644
index 00000000000..6200b285dda
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModelLabelProvider.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.relation.explorer;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.graphics.Image;
+
+public class ArtifactModelLabelProvider implements ITableLabelProvider {
+
+ public static final OseeUiActivator plugin = SkynetGuiPlugin.getInstance();
+ private static Image checkedImage = plugin.getImage("chkbox_enabled.gif");
+ private static Image uncheckedImage = plugin.getImage("chkbox_disabled.gif");
+
+ public ArtifactModelLabelProvider() {
+ super();
+ };
+
+ /**
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+ */
+ public String getColumnText(Object element, int columnIndex) {
+ String result = "";
+ ArtifactModel model = (ArtifactModel) element;
+
+ switch (columnIndex) {
+ case RelationTableViewer.ADD_NUM:
+ // This only has an image
+ break;
+ case RelationTableViewer.ARTIFACT_NAME_NUM:
+ result = model.getName();
+ break;
+ case RelationTableViewer.ARTIFACT_TYPE_NUM:
+ result = model.getDescriptor().getName();
+ break;
+ case RelationTableViewer.RATIONALE_NUM:
+ result = model.getRationale();
+ break;
+ default:
+ break;
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+ */
+ public Image getColumnImage(Object element, int columnIndex) {
+ Image result = null;
+ ArtifactModel model = (ArtifactModel) element;
+
+ switch (columnIndex) {
+ case RelationTableViewer.ADD_NUM:
+ if (model.isAdd())
+ result = checkedImage;
+ else
+ result = uncheckedImage;
+ }
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+ * java.lang.String)
+ */
+ public boolean isLabelProperty(Object element, String property) {
+ return true;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModelList.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModelList.java
new file mode 100644
index 00000000000..1b56e68e039
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/ArtifactModelList.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.relation.explorer;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+public class ArtifactModelList {
+
+ private ArrayList<ArtifactModel> artifacts = new ArrayList<ArtifactModel>();
+ private Set<IArtifactListViewer> changeListeners = new HashSet<IArtifactListViewer>();
+
+ /**
+ * Constructor
+ */
+ public ArtifactModelList() {
+ super();
+ artifacts = new ArrayList<ArtifactModel>();
+ changeListeners = new HashSet<IArtifactListViewer>();
+ }
+
+ /**
+ * Return the collection of ItemTask
+ */
+ public ArrayList<ArtifactModel> getArtifacts() {
+ return artifacts;
+ }
+
+ /**
+ * Add a new task to the collection of tasks
+ */
+ public void addArtifact(ArtifactModel artifact, boolean top) {
+ if (top)
+ artifacts.add(0, artifact);
+ else
+ artifacts.add(artifacts.size(), artifact);
+ Iterator<IArtifactListViewer> iterator = changeListeners.iterator();
+ while (iterator.hasNext())
+ iterator.next().addArtifact(artifact);
+ }
+
+ /**
+ * @param artifact -
+ */
+ public void removeArtifact(ArtifactModel artifact) {
+ artifacts.remove(artifact);
+ Iterator<IArtifactListViewer> iterator = changeListeners.iterator();
+ while (iterator.hasNext())
+ iterator.next().removeArtifact(artifact);
+ }
+
+ public String toString() {
+ String str = "";
+ for (int i = 0; i < artifacts.size(); i++) {
+ String name = artifacts.get(i).getName();
+ str += "\nTask " + name;
+ }
+ return str + "\n\n";
+ }
+
+ /**
+ * @param artifact -
+ */
+ public void artifactChanged(ArtifactModel artifact) {
+ Iterator<IArtifactListViewer> iterator = changeListeners.iterator();
+ while (iterator.hasNext())
+ iterator.next().updateArtifact(artifact);
+ }
+
+ /**
+ * @param viewer
+ */
+ public void removeChangeListener(IArtifactListViewer viewer) {
+ changeListeners.remove(viewer);
+ }
+
+ /**
+ * @param viewer
+ */
+ public void addChangeListener(IArtifactListViewer viewer) {
+ changeListeners.add(viewer);
+ }
+
+ public ArrayList<ArtifactModel> getArtifactModel() {
+ return artifacts;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/IArtifactListViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/IArtifactListViewer.java
new file mode 100644
index 00000000000..d4da7414be7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/IArtifactListViewer.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.relation.explorer;
+
+public interface IArtifactListViewer {
+
+ /**
+ * Update the view to reflect the fact that a ArtifactModel was added to the ArtifactModel list
+ *
+ * @param artifact -
+ */
+ public void addArtifact(ArtifactModel artifact);
+
+ /**
+ * Update the view to reflect the fact that a ArtifactModel was removed from the ArtifactModel list
+ *
+ * @param artifact -
+ */
+ public void removeArtifact(ArtifactModel artifact);
+
+ /**
+ * Update the view to reflect the fact that one of the ArtifactModels was modified
+ *
+ * @param artifact -
+ */
+ public void updateArtifact(ArtifactModel artifact);
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/OnCloseListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/OnCloseListener.java
new file mode 100644
index 00000000000..e83abb9451c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/OnCloseListener.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.relation.explorer;
+
+public interface OnCloseListener {
+
+ public void onClose(boolean cancelled);
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationExplorerWindow.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationExplorerWindow.java
new file mode 100644
index 00000000000..88cc2016760
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationExplorerWindow.java
@@ -0,0 +1,374 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.relation.explorer;
+
+import java.io.File;
+import java.util.ArrayList;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.WorkspaceURL;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeSide;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+
+/**
+ * @author Michael S. Rodgers
+ */
+public class RelationExplorerWindow {
+
+ private RelationTableViewer relationTableViewer;
+ private RelationTypeSide relationGroup;
+ private boolean persistOnOk;
+ private boolean cancelled = false;
+
+ // Private arrays for valid drops
+ private ArrayList<Artifact> validArtifacts;
+ private ArrayList<String> urls;
+ private ArrayList<String> names;
+
+ // Private arrays for invalid drops
+ private ArrayList<String> invalidName;
+ private ArrayList<String> invalidReason;
+ private ArrayList<Artifact> invalidArtifacts;
+
+ private boolean needWindow;
+
+ private Shell shell;
+
+ private ArtifactType descriptor = null;
+
+ private StructuredViewer viewer;
+ private OnCloseListener onCloseListener;
+
+ public static final int ADD_NUM = 0;
+ public static final int ARTIFACT_NAME_NUM = 1;
+ public static final int ARTIFACT_TYPE_NUM = 2;
+ public static final int RATIONALE_NUM = 3;
+
+ public static final int NAME_NUM = 0;
+ public static final int REASON_NUM = 1;
+
+ public RelationExplorerWindow(StructuredViewer viewer, RelationTypeSide group, boolean persistOnOk) {
+ this.validArtifacts = new ArrayList<Artifact>();
+ this.invalidArtifacts = new ArrayList<Artifact>();
+
+ this.urls = new ArrayList<String>();
+ this.names = new ArrayList<String>();
+
+ this.invalidName = new ArrayList<String>();
+ this.invalidReason = new ArrayList<String>();
+
+ this.viewer = viewer;
+ this.relationGroup = group;
+ this.persistOnOk = persistOnOk;
+ this.needWindow = false;
+
+ }
+
+ public RelationExplorerWindow(StructuredViewer viewer, RelationTypeSide group) {
+ this(viewer, group, false);
+ }
+
+ public void addValid(Artifact artifact, String url) {
+ this.validArtifacts.add(artifact);
+ this.urls.add(url);
+
+ if (artifact == null) needWindow = true;
+
+ IFile tempIFile = WorkspaceURL.getIFile(url);
+ if (tempIFile != null) {
+ String tempName = new String(tempIFile.getName());
+ names.add(tempName.substring(0, tempName.length() - (tempIFile.getFileExtension().length() + 1)));
+ } else {
+ File file = new File(url);
+ names.add(file.getName());
+ }
+ }
+
+ public void addValid(Artifact artifact) {
+ this.validArtifacts.add(artifact);
+ this.names.add(artifact.getDescriptiveName());
+ if (artifact == null) needWindow = true;
+ }
+
+ public void addInvalid(String name, String reason) {
+ invalidName.add(name);
+ invalidReason.add(reason);
+ needWindow = true;
+ }
+
+ public void createArtifactInformationBox(OnCloseListener onCloseListener) {
+ this.onCloseListener = onCloseListener;
+
+ drawWindow();
+ }
+
+ private void drawWindow() {
+ shell = new Shell(SWT.ON_TOP | SWT.APPLICATION_MODAL | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE);
+
+ // Setup Title
+ shell.setText("Artifact Information");
+
+ // Setup Icon
+ Image image = SkynetGuiPlugin.getInstance().getImage("laser_16_16.gif");
+ shell.setImage(image);
+
+ // Setup Form Layout
+ FormLayout layout = new FormLayout();
+ layout.marginHeight = 5;
+ layout.marginWidth = 5;
+ shell.setLayout(layout);
+
+ SashForm sashForm = new SashForm(shell, SWT.VERTICAL);
+
+ // Create valid artifact fields
+ FormLayout validLayout = new FormLayout();
+ validLayout.spacing = 5;
+
+ Composite validComposite = new Composite(sashForm, SWT.NONE);
+ validComposite.setLayout(validLayout);
+
+ Label validLabel = new Label(validComposite, SWT.LEFT);
+ validLabel.setText("Valid artifacts - will be added");
+
+ Table validTable =
+ new Table(validComposite,
+ SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION);
+ validTable.setLinesVisible(true);
+ validTable.setHeaderVisible(true);
+
+ // Create invalid artifacts fields
+ FormLayout invalidLayout = new FormLayout();
+ invalidLayout.spacing = 5;
+
+ Composite invalidComposite = new Composite(sashForm, SWT.NONE);
+ invalidComposite.setLayout(invalidLayout);
+
+ Label invalidLabel = new Label(invalidComposite, SWT.LEFT);
+ invalidLabel.setText("Invalid artifacts - will not be added");
+
+ Table invalidTable =
+ new Table(invalidComposite,
+ SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION);
+ invalidTable.setLinesVisible(true);
+ invalidTable.setHeaderVisible(true);
+
+ // Create the Buttons
+ Button okButton = new Button(invalidComposite, SWT.PUSH);
+ okButton.setText("OK");
+
+ Button cancelButton = new Button(invalidComposite, SWT.PUSH);
+ cancelButton.setText("Cancel");
+
+ // Attach validLabel to top-left corner
+ FormData data = new FormData();
+ data.top = new FormAttachment(0);
+ data.left = new FormAttachment(0);
+ validLabel.setLayoutData(data);
+
+ // Attach validTable to bottom of validLabel
+ data = new FormData();
+ data.top = new FormAttachment(validLabel);
+ data.bottom = new FormAttachment(100);
+ data.left = new FormAttachment(0);
+ data.right = new FormAttachment(100);
+ data.height = validTable.getItemHeight() * 10;
+ validTable.setLayoutData(data);
+
+ // Attach invalidLabel to top-left corner
+ data = new FormData();
+ data.top = new FormAttachment(0);
+ data.left = new FormAttachment(0);
+ invalidLabel.setLayoutData(data);
+
+ // Attach invalidTable to bottom of invalidLabel
+ data = new FormData();
+ data.top = new FormAttachment(invalidLabel);
+ data.bottom = new FormAttachment(okButton);
+ data.left = new FormAttachment(0);
+ data.right = new FormAttachment(100);
+ data.height = validTable.getItemHeight() * 10;
+ invalidTable.setLayoutData(data);
+
+ // Attach sashForm to top-left corner of shell
+ data = new FormData();
+ data.top = new FormAttachment(0);
+ data.bottom = new FormAttachment(100);
+ data.left = new FormAttachment(0);
+ data.right = new FormAttachment(100);
+ sashForm.setLayoutData(data);
+
+ // Attach buttons to bottom of sashForm
+ data = new FormData();
+ data.bottom = new FormAttachment(100);
+ data.right = new FormAttachment(100);
+ cancelButton.setLayoutData(data);
+
+ data = new FormData();
+ data.bottom = new FormAttachment(100);
+ data.right = new FormAttachment(cancelButton);
+ okButton.setLayoutData(data);
+
+ // Populate Tables
+ relationTableViewer = new RelationTableViewer(validTable, invalidTable);
+ for (int i = 0; i < validArtifacts.size(); i++)
+ relationTableViewer.addValidItem(names.get(i), validArtifacts.get(i));
+ for (int i = 0; i < invalidName.size(); i++)
+ relationTableViewer.addInvalidItem(invalidName.get(i), invalidReason.get(i));
+
+ // Add Listeners to buttons
+ okButton.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ okSelected();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+
+ cancelButton.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ cancelSelected();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+
+ // Add shell resize listener
+ shell.addControlListener(new ControlListener() {
+
+ public void controlMoved(ControlEvent e) {
+ }
+
+ public void controlResized(ControlEvent e) {
+ relationTableViewer.resizeTable(((Shell) e.widget).getClientArea().width);
+ shell.layout();
+ }
+ });
+
+ if (needWindow) {
+ shell.pack();
+ shell.open();
+ } else {
+ okSelected();
+ }
+ }
+
+ /**
+ * Create the TableViewer
+ */
+
+ private void okSelected() {
+ ArrayList<ArtifactModel> artifactList = relationTableViewer.getArtifactList().getArtifactModel();
+
+ for (int i = 0; i < artifactList.size(); i++) {
+ ArtifactModel model = artifactList.get(i);
+
+ if (model.isAdd()) {
+ Artifact artifact = model.getArtifact();
+ descriptor = model.getDescriptor();
+ if (artifact == null) {
+ if (descriptor != null) {
+ try {
+ artifact = descriptor.makeNewArtifact(BranchManager.getDefaultBranch());
+ artifact.setSoleAttributeValue("Name", model.getName());
+ artifact.setSoleAttributeValue("Content URL", urls.get(names.indexOf(model.getName())));
+ artifact.persistAttributes();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ } else
+ artifact = model.getArtifact();
+
+ if (artifact != null) {
+ try {
+ relationGroup.getArtifact().addRelation(relationGroup, artifact);
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+ }
+ if (persistOnOk) {
+ try {
+ relationGroup.getArtifact().persistRelations();
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ shell.dispose();
+ viewer.refresh();
+
+ handleListener();
+
+ }
+
+ private void cancelSelected() {
+ cancelled = true;
+ shell.dispose();
+
+ handleListener();
+ }
+
+ private void handleListener() {
+ if (onCloseListener != null) onCloseListener.onClose(cancelled);
+ }
+
+ /**
+ * @return Returns the relationGroup.
+ */
+ public RelationTypeSide getRelationGroup() {
+ return relationGroup;
+ }
+
+ /**
+ * @return Returns the cancelled.
+ */
+ public boolean isCancelled() {
+ return cancelled;
+ }
+
+ /**
+ * @return Returns the invalidArtifacts.
+ */
+ public ArrayList<Artifact> getInvalidArtifacts() {
+ return invalidArtifacts;
+ }
+
+ /**
+ * @param invalidArtifact The invalidArtifact to set.
+ */
+ public void addInvalidArtifact(Artifact invalidArtifact, String errorMessage) {
+ invalidArtifacts.add(invalidArtifact);
+ addInvalid(invalidArtifact.getDescriptiveName(), errorMessage);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableCellModifier.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableCellModifier.java
new file mode 100644
index 00000000000..741f34a54cc
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableCellModifier.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.relation.explorer;
+
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.swt.widgets.TableItem;
+
+public class RelationTableCellModifier implements ICellModifier {
+ private RelationTableViewer relationTableViewer;
+
+ public RelationTableCellModifier(RelationTableViewer relationTableViewer) {
+ super();
+ this.relationTableViewer = relationTableViewer;
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String)
+ */
+ public boolean canModify(Object element, String property) {
+ // Find the index of the column
+ int columnIndex = relationTableViewer.getColumnNames().indexOf(property);
+
+ ArtifactModel model = (ArtifactModel) element;
+ switch (columnIndex) {
+ case RelationTableViewer.ARTIFACT_NAME_NUM:
+ if (model.isArtifactFound()) return false;
+ break;
+ case RelationTableViewer.ARTIFACT_TYPE_NUM:
+ if (model.isArtifactFound()) return false;
+ break;
+ }
+ return true;
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String)
+ */
+ public Object getValue(Object element, String property) {
+
+ // Find the index of the column
+ int columnIndex = relationTableViewer.getColumnNames().indexOf(property);
+
+ Object result = null;
+ ArtifactModel model = (ArtifactModel) element;
+
+ switch (columnIndex) {
+ case RelationTableViewer.ADD_NUM:
+ result = new Boolean(model.isAdd());
+ break;
+ case RelationTableViewer.ARTIFACT_NAME_NUM:
+ result = new String(model.getName());
+ break;
+ case RelationTableViewer.ARTIFACT_TYPE_NUM:
+ result = model.getDescriptor();
+ break;
+ case RelationTableViewer.RATIONALE_NUM:
+ result = new String(model.getRationale());
+ break;
+ default:
+ result = "";
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String, java.lang.Object)
+ */
+ public void modify(Object element, String property, Object value) {
+
+ // Find the index of the column
+ int columnIndex = relationTableViewer.getColumnNames().indexOf(property);
+
+ TableItem item = (TableItem) element;
+ ArtifactModel model = (ArtifactModel) item.getData();
+
+ switch (columnIndex) {
+ case RelationTableViewer.ADD_NUM:
+ model.setAdd(((Boolean) value).booleanValue());
+ break;
+ case RelationTableViewer.ARTIFACT_NAME_NUM:
+ if (!model.isArtifactFound()) model.setName((String) value);
+ break;
+ case RelationTableViewer.ARTIFACT_TYPE_NUM:
+ if (!model.isArtifactFound()) {
+ model.setDescriptor((ArtifactType) value);
+ }
+ break;
+ case RelationTableViewer.RATIONALE_NUM:
+ model.setRationale((String) value);
+ break;
+ default:
+ }
+ relationTableViewer.getArtifactList().artifactChanged(model);
+ relationTableViewer.refresh();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableSorter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableSorter.java
new file mode 100644
index 00000000000..e9b8b776069
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableSorter.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.relation.explorer;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+
+/**
+ * @author Michael S. Rodgers
+ */
+public class RelationTableSorter extends ViewerSorter {
+
+ /**
+ * Constructor argument values that indicate to sort items by name or type.
+ */
+ public final static int ARTIFACT_NAME = 1;
+ public final static int ARTIFACT_TYPE = 2;
+
+ // Criteria that the instance uses
+ private int criteria;
+
+ /**
+ * Creates a resource sorter that will use the given sort criteria.
+ *
+ * @param criteria the sort criterion to use: one of <code>NAME</code> or <code>TYPE</code>
+ */
+ public RelationTableSorter(int criteria) {
+ super();
+ this.criteria = criteria;
+ }
+
+ /* (non-Javadoc)
+ * Method declared on ViewerSorter.
+ */
+ public int compare(Viewer viewer, Object o1, Object o2) {
+
+ ArtifactModel model1 = (ArtifactModel) o1;
+ ArtifactModel model2 = (ArtifactModel) o2;
+
+ switch (criteria) {
+ case ARTIFACT_NAME:
+ return compareNames(model1, model2);
+ case ARTIFACT_TYPE:
+ return compareTypes(model1, model2);
+ default:
+ return 0;
+ }
+ }
+
+ /**
+ * Returns a number reflecting the collation order of the given names based on the description.
+ *
+ * @param model1 the first task element to be ordered
+ * @param model2 the second task element to be ordered
+ * @return a negative number if the first element is less than the second element; the value <code>0</code> if the
+ * first element is equal to the second element; and a positive number if the first element is greater than
+ * the second element
+ */
+ @SuppressWarnings("unchecked")
+ protected int compareNames(ArtifactModel model1, ArtifactModel model2) {
+ return getComparator().compare(model1.getName(), model1.getName());
+ }
+
+ /**
+ * Returns a number reflecting the collation order of the given tasks based on their owner.
+ *
+ * @param model1 the first resource element to be ordered
+ * @param model2 the second resource element to be ordered
+ * @return a negative number if the first element is less than the second element; the value <code>0</code> if the
+ * first element is equal to the second element; and a positive number if the first element is greater than
+ * the second element
+ */
+ @SuppressWarnings("unchecked")
+ protected int compareTypes(ArtifactModel model1, ArtifactModel model2) {
+ return getComparator().compare(model1.getDescriptor().getName(), model2.getDescriptor().getName());
+ }
+
+ /**
+ * Returns the sort criteria of this this sorter.
+ *
+ * @return the sort criterion
+ */
+ public int getCriteria() {
+ return criteria;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableViewer.java
new file mode 100644
index 00000000000..f3c29cd2ee7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/relation/explorer/RelationTableViewer.java
@@ -0,0 +1,273 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.relation.explorer;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.CheckboxCellEditor;
+import org.eclipse.jface.viewers.ComboBoxCellEditor;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.skynet.core.utility.Requirements;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+
+public class RelationTableViewer {
+ private Table validTable;
+ private TableViewer tableViewer;
+
+ private Table invalidTable;
+
+ private ArtifactModelList artifactList;
+
+ private String[] validColumnNames;
+ private static int[] validColumnWidths;
+
+ private String[] invalidColumnNames;
+ private static int[] invalidColumnWidths;
+
+ public static final int ADD_NUM = 0;
+ public static final int ARTIFACT_NAME_NUM = 1;
+ public static final int ARTIFACT_TYPE_NUM = 2;
+ public static final int RATIONALE_NUM = 3;
+ public static final int INVALID_NAME_NUM = 0;
+ public static final int INVALID_REASON_NUM = 1;
+
+ public ArrayList<ArtifactType> fullDescriptorList;
+ private ArtifactType defaultArtifactType;
+
+ /**
+ * @param validTable -
+ * @param invalidTable -
+ */
+ public RelationTableViewer(Table validTable, Table invalidTable) {
+ try {
+ fullDescriptorList =
+ new ArrayList<ArtifactType>(
+ TypeValidityManager.getValidArtifactTypes(BranchManager.getDefaultBranch()));
+ defaultArtifactType = ArtifactTypeManager.getType(Requirements.TEST_SCRIPT);
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+
+ this.validTable = validTable;
+ this.invalidTable = invalidTable;
+
+ this.createControl();
+
+ tableViewer.setContentProvider(new RelationContentProvider());
+ tableViewer.setLabelProvider(new ArtifactModelLabelProvider());
+ tableViewer.setInput(artifactList);
+ }
+
+ public void addValidItem(String name, Artifact artifact) {
+ ArtifactModel model;
+
+ if (artifact == null) {
+ model = new ArtifactModel(name, defaultArtifactType);
+ } else {
+ model = new ArtifactModel(artifact);
+ }
+
+ artifactList.addArtifact(model, true);
+ }
+
+ public void addInvalidItem(String name, String reason) {
+ String[] itemText = new String[] {name, reason};
+ TableItem item = new TableItem(invalidTable, SWT.NONE);
+ item.setText(itemText);
+ }
+
+ private void createControl() {
+ artifactList = new ArtifactModelList();
+ createColumns();
+ createTableViewer();
+ }
+
+ /**
+ * Create the TableViewer
+ */
+ private void createTableViewer() {
+
+ tableViewer = new TableViewer(validTable);
+ tableViewer.setUseHashlookup(true);
+ tableViewer.setColumnProperties(validColumnNames);
+
+ CellEditor[] validEditors = new CellEditor[validColumnNames.length];
+ validEditors[ADD_NUM] = new CheckboxCellEditor(validTable, SWT.CENTER);
+ validEditors[ARTIFACT_NAME_NUM] = new TextCellEditor(validTable) {
+ };
+
+ String[] items = new String[fullDescriptorList.size()];
+ for (int i = 0; i < items.length; i++) {
+ items[i] = fullDescriptorList.get(i).getName();
+ }
+
+ validEditors[ARTIFACT_TYPE_NUM] = new ComboBoxCellEditor(validTable, items);
+ validEditors[RATIONALE_NUM] = new TextCellEditor(validTable);
+
+ // Assign the cell editors to the viewer
+ tableViewer.setCellEditors(validEditors);
+ // Assign the cell modifier to the viewer
+ tableViewer.setCellModifier(new RelationTableCellModifier(this));
+ }
+
+ /**
+ * Create the Columns
+ */
+ private void createColumns() {
+ validColumnNames = new String[] {"Add", "Artifact Name", "Artifact Type", "Rationale"};
+ validColumnWidths = new int[] {40, 200, 100, 500};
+
+ invalidColumnNames = new String[] {"Name", "Reason"};
+ invalidColumnWidths = new int[] {200, 640};
+
+ TableColumn column = new TableColumn(validTable, SWT.LEFT, ADD_NUM);
+ column.setText(validColumnNames[ADD_NUM]);
+ column.setWidth(validColumnWidths[ADD_NUM]);
+
+ column = new TableColumn(validTable, SWT.LEFT, ARTIFACT_NAME_NUM);
+ column.setText(validColumnNames[ARTIFACT_NAME_NUM]);
+ column.setWidth(validColumnWidths[ARTIFACT_NAME_NUM]);
+ column.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ tableViewer.setSorter(new RelationTableSorter(RelationTableSorter.ARTIFACT_NAME));
+ }
+ });
+
+ column = new TableColumn(validTable, SWT.LEFT, ARTIFACT_TYPE_NUM);
+ column.setText(validColumnNames[ARTIFACT_TYPE_NUM]);
+ column.setWidth(validColumnWidths[ARTIFACT_TYPE_NUM]);
+ column.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ tableViewer.setSorter(new RelationTableSorter(RelationTableSorter.ARTIFACT_TYPE));
+ }
+ });
+
+ column = new TableColumn(validTable, SWT.LEFT, RATIONALE_NUM);
+ column.setText(validColumnNames[RATIONALE_NUM]);
+ column.setWidth(validColumnWidths[RATIONALE_NUM]);
+
+ column = new TableColumn(invalidTable, SWT.LEFT, INVALID_NAME_NUM);
+ column.setText(invalidColumnNames[INVALID_NAME_NUM]);
+ column.setWidth(invalidColumnWidths[INVALID_NAME_NUM]);
+
+ column = new TableColumn(invalidTable, SWT.LEFT, INVALID_REASON_NUM);
+ column.setText(invalidColumnNames[INVALID_REASON_NUM]);
+ column.setWidth(invalidColumnWidths[INVALID_REASON_NUM]);
+ }
+
+ public List<String> getColumnNames() {
+ return Arrays.asList(validColumnNames);
+ }
+
+ public ArtifactModelList getArtifactList() {
+ return this.artifactList;
+ }
+
+ public void refresh() {
+ tableViewer.refresh();
+ }
+
+ /**
+ * @return Returns the invalidTable.
+ */
+ public Table getInvalidTable() {
+ return invalidTable;
+ }
+
+ /**
+ * @return Returns the validTable.
+ */
+ public Table getValidTable() {
+ return validTable;
+ }
+
+ public void resizeTable(int windowWidth) {
+ int otherColumns = 15;
+ for (int i = 0; i < validColumnWidths.length - 1; i++)
+ otherColumns += validColumnWidths[i];
+
+ validColumnWidths[RATIONALE_NUM] = windowWidth - otherColumns;
+ validTable.getColumns()[RATIONALE_NUM].setWidth(validColumnWidths[RATIONALE_NUM]);
+
+ otherColumns = 15;
+ for (int i = 0; i < invalidColumnWidths.length - 1; i++)
+ otherColumns += invalidColumnWidths[i];
+
+ invalidColumnWidths[INVALID_REASON_NUM] = windowWidth - otherColumns;
+ invalidTable.getColumns()[INVALID_REASON_NUM].setWidth(invalidColumnWidths[INVALID_REASON_NUM]);
+ }
+
+ /**
+ * InnerClass that acts as a proxy for the ArtifactModelList providing content for the Table. It implements the
+ * IArtifactListViewer interface since it must register changeListeners with the ArtifactModelList
+ */
+ class RelationContentProvider implements IStructuredContentProvider, IArtifactListViewer {
+
+ public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+ if (newInput != null) artifactList.addChangeListener(this);
+ if (oldInput != null) artifactList.removeChangeListener(this);
+ }
+
+ public void dispose() {
+ artifactList.removeChangeListener(this);
+ }
+
+ // Return the tasks as an array of Objects
+ public Object[] getElements(Object parent) {
+ return artifactList.getArtifactModel().toArray();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see IArtifactListViewer#addArtifact(ArtifactModel)
+ */
+ public void addArtifact(ArtifactModel artifact) {
+ tableViewer.add(artifact);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see IArtifactListViewer#removeArtifact(ArtifactModel)
+ */
+ public void removeArtifact(ArtifactModel artifact) {
+ tableViewer.remove(artifact);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see IArtifactListViewer#updateArtifact(ArtifactModel)
+ */
+ public void updateArtifact(ArtifactModel artifact) {
+ tableViewer.update(artifact, null);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ArtifactEditFileWatcher.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ArtifactEditFileWatcher.java
new file mode 100644
index 00000000000..a43d17054a5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ArtifactEditFileWatcher.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.utility.FileChangeEvent;
+import org.eclipse.osee.framework.skynet.core.utility.IFileWatcherListener;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ArtifactEditFileWatcher implements IFileWatcherListener {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.jdk.core.util.IFileWatcherListener#filesModified(java.util.Collection)
+ */
+ @Override
+ public void filesModified(Collection<FileChangeEvent> fileChangeEvents) {
+ for (FileChangeEvent event : fileChangeEvents) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO,
+ event.getChangeType().name() + ": " + event.getFile().getAbsolutePath());
+
+ File file = event.getFile();
+ if (file.exists()) {
+ UpdateArtifactJob updateJob = new UpdateArtifactJob();
+ updateJob.setWorkingFile(file);
+ Jobs.startJob(updateJob);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ArtifactGuis.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ArtifactGuis.java
new file mode 100644
index 00000000000..beccacef2ab
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ArtifactGuis.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.revision.RevisionManager;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.ui.PlatformUI;
+
+public class ArtifactGuis {
+ public ArtifactGuis() {
+ super();
+ }
+
+ public static boolean checkOtherEdit(List<Artifact> artifacts) {
+ if (artifacts.size() == 0) throw new IllegalArgumentException("you must pass at least one artifact");
+
+ boolean goAhead = true;
+
+ Set<Branch> otherBranches = new HashSet<Branch>();
+ for (Artifact artifact : artifacts) {
+ otherBranches.addAll(RevisionManager.getInstance().getOtherEdittedBranches(artifact));
+ }
+
+ if (!otherBranches.isEmpty()) {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("The artifact");
+ if (artifacts.size() > 1) sb.append('s');
+ sb.append(" about to be editted ");
+ if (artifacts.size() > 1)
+ sb.append("have");
+ else
+ sb.append("has");
+ sb.append(" already been modified on the following branches:");
+ for (Branch branch : otherBranches)
+ sb.append("\n\t" + branch.getBranchName());
+ sb.append("\n\nDo you still want to proceed?");
+
+ synchronized (sb) {
+
+ AskQuestion question = new AskQuestion(sb, "Confirm Edit", sb.toString());
+ Displays.ensureInDisplayThread(question);
+ try {
+ while (!question.done)
+ sb.wait();
+ } catch (InterruptedException e) {
+ }
+ goAhead = question.isYes();
+ }
+ }
+
+ return goAhead;
+ }
+
+ private static class AskQuestion implements Runnable {
+
+ private Object notifee;
+ private String title;
+ private String question;
+ private boolean yes;
+ private boolean done;
+
+ /**
+ * @param notifee
+ * @param question
+ */
+ public AskQuestion(Object notifee, String title, String question) {
+ super();
+ this.notifee = notifee;
+ this.title = title;
+ this.question = question;
+ this.yes = false;
+ this.done = false;
+ }
+
+ public void run() {
+ synchronized (notifee) {
+ yes =
+ MessageDialog.openQuestion(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), title,
+ question);
+ done = true;
+ notifee.notifyAll();
+ }
+ }
+
+ /**
+ * @return Returns the yes.
+ */
+ public boolean isYes() {
+ return yes;
+ }
+
+ /**
+ * @return Returns the done.
+ */
+ public boolean isDone() {
+ return done;
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/DefaultArtifactRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/DefaultArtifactRenderer.java
new file mode 100644
index 00000000000..1f783ef13f5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/DefaultArtifactRenderer.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class DefaultArtifactRenderer extends Renderer {
+
+ /**
+ * @param rendererId
+ */
+ public DefaultArtifactRenderer(String rendererId) {
+ super(rendererId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#newInstance()
+ */
+ @Override
+ public DefaultArtifactRenderer newInstance() throws OseeCoreException {
+ return new DefaultArtifactRenderer(getId());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.Renderer#edit(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void edit(Artifact artifact, IProgressMonitor monitor) throws OseeCoreException {
+ ArtifactEditor.editArtifact(artifact);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.Renderer#preview(org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void preview(Artifact artifact, IProgressMonitor monitor) throws OseeCoreException {
+ ArtifactEditor.editArtifact(artifact);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.Renderer#supportsEdit()
+ */
+ @Override
+ public boolean supportsEdit() {
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#isValidFor(org.eclipse.osee.framework.skynet.core.artifact.Artifact)
+ */
+ public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) {
+ return DEFAULT_MATCH;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/FileRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/FileRenderer.java
new file mode 100644
index 00000000000..7ca3afb9ff9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/FileRenderer.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.InputStream;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.ResourceAttributes;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.utility.FileWatcher;
+import org.eclipse.osee.framework.ui.plugin.util.AIFile;
+
+/**
+ * @author Ryan D. Brooks
+ * @author Jeff C. Phillips
+ */
+public abstract class FileRenderer extends FileSystemRenderer {
+ private static final ResourceAttributes readonlyfileAttributes = new ResourceAttributes();
+ private static Random generator = new Random();
+ private static final FileWatcher watcher = new FileWatcher(3, TimeUnit.SECONDS);
+ static {
+ readonlyfileAttributes.setReadOnly(true);
+ watcher.addListener(new ArtifactEditFileWatcher());
+ watcher.start();
+ }
+
+ /**
+ * @param rendererId
+ */
+ public FileRenderer(String rendererId) {
+ super(rendererId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer#renderToFileSystem(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.resources.IFolder, org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String, org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer.PresentationType)
+ */
+ @Override
+ public IFile renderToFileSystem(IProgressMonitor monitor, IFolder baseFolder, Artifact artifact, Branch branch, PresentationType presentationType) throws OseeCoreException {
+ return renderToFile(baseFolder, getFilenameFromArtifact(artifact, presentationType), branch,
+ getRenderInputStream(artifact, presentationType), presentationType);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer#renderToFileSystem(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.resources.IFolder, java.util.List, java.lang.String, org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer.PresentationType)
+ */
+ @Override
+ public IFile renderToFileSystem(IProgressMonitor monitor, IFolder baseFolder, List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException {
+ Branch initialBranch = null;
+ for (Artifact artifact : artifacts) {
+ if (initialBranch == null) {
+ initialBranch = artifact.getBranch();
+ } else {
+ if (artifact.getBranch() != initialBranch) {
+ throw new IllegalArgumentException("All of the artifacts must be on the same branch to be mass edited");
+ }
+ }
+ }
+
+ return renderToFile(baseFolder, getFilenameFromArtifact(null, presentationType), initialBranch,
+ getRenderInputStream(artifacts, presentationType), presentationType);
+ }
+
+ protected IFile renderToFile(IFolder baseFolder, String fileName, Branch branch, InputStream renderInputStream, PresentationType presentationType) throws OseeCoreException {
+ try {
+ IFile workingFile = baseFolder.getFile(fileName);
+ AIFile.writeToFile(workingFile, renderInputStream);
+
+ if (presentationType == PresentationType.EDIT) {
+ watcher.addFile(workingFile.getLocation().toFile());
+ } else if (presentationType == PresentationType.PREVIEW) {
+ workingFile.setResourceAttributes(readonlyfileAttributes);
+ }
+
+ return workingFile;
+ } catch (CoreException ex) {
+ throw new OseeCoreException(ex);
+ }
+ }
+
+ protected void addFileToWatcher(IFolder baseFolder, String fileName) {
+ IFile workingFile = baseFolder.getFile(fileName);
+ watcher.addFile(workingFile.getLocation().toFile());
+ }
+
+ protected String getFilenameFromArtifact(Artifact artifact, PresentationType presentationType) throws OseeCoreException {
+ StringBuilder name = new StringBuilder(100);
+
+ if (artifact != null) {
+
+ name.append(artifact.getSafeName());
+ name.append("(");
+ name.append(artifact.getGuid());
+ name.append(")");
+
+ if (artifact.isHistorical() || presentationType == PresentationType.DIFF) {
+ name.append("(");
+ name.append(artifact.getTransactionNumber());
+ name.append(")");
+ }
+
+ name.append(" ");
+ name.append((new Date()).toString().replaceAll(":", ";"));
+ name.append("-");
+ name.append(generator.nextInt(99) + 1);
+ name.append(".");
+ name.append(getAssociatedExtension(artifact));
+ } else {
+ name.append(GUID.generateGuidStr());
+ name.append(".xml");
+ }
+ return name.toString();
+ }
+
+ public abstract InputStream getRenderInputStream(List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException;
+
+ public abstract InputStream getRenderInputStream(Artifact artifact, PresentationType presentationType) throws OseeCoreException;
+
+ public abstract String getAssociatedExtension(Artifact artifact) throws OseeCoreException;
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/FileSystemRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/FileSystemRenderer.java
new file mode 100644
index 00000000000..814c83274f3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/FileSystemRenderer.java
@@ -0,0 +1,174 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.plugin.util.OseeData;
+import org.eclipse.swt.program.Program;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public abstract class FileSystemRenderer extends Renderer {
+ /**
+ * @param rendererId
+ */
+ public FileSystemRenderer(String rendererId) {
+ super(rendererId);
+ }
+
+ private static IFolder workingFolder;
+ private static IFolder diffFolder;
+ private static IFolder previewFolder;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.Renderer#preview(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void preview(Artifact artifact, IProgressMonitor monitor) throws OseeCoreException {
+ open(monitor, artifact, PresentationType.PREVIEW);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.Renderer#edit(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void edit(Artifact artifact, IProgressMonitor monitor) throws OseeCoreException {
+ open(monitor, artifact, PresentationType.EDIT);
+ }
+
+ private void open(IProgressMonitor monitor, Artifact artifact, PresentationType presentationType) throws OseeCoreException {
+ IFolder baseFolder = getRenderFolder(artifact.getBranch(), presentationType);
+ IFile file = renderToFileSystem(monitor, baseFolder, artifact, artifact.getBranch(), presentationType);
+ getAssociatedProgram(artifact).execute(file.getLocation().toFile().getAbsolutePath());
+ }
+
+ public IFolder getRenderFolder(Branch branch, PresentationType presentationType) throws OseeCoreException {
+ try {
+ IFolder baseFolder = ensureRenderFolderExists(presentationType);
+ IFolder renderFolder = baseFolder.getFolder(branch.asFolderName());
+ if (!renderFolder.exists()) {
+ renderFolder.create(true, true, null);
+ }
+ return renderFolder;
+ } catch (CoreException ex) {
+ throw new OseeCoreException(ex);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.Renderer#preview(java.util.List, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void preview(List<Artifact> artifacts, IProgressMonitor monitor) throws OseeCoreException {
+ open(monitor, artifacts, PresentationType.PREVIEW);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.Renderer#edit(java.util.List, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void edit(List<Artifact> artifacts, IProgressMonitor monitor) throws OseeCoreException {
+ open(monitor, artifacts, PresentationType.EDIT);
+ }
+
+ private void open(IProgressMonitor monitor, List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException {
+ if (!artifacts.isEmpty()) {
+ Artifact firstArtifact = artifacts.iterator().next();
+ IFolder baseFolder = getRenderFolder(firstArtifact.getBranch(), presentationType);
+ IFile file = renderToFileSystem(monitor, baseFolder, artifacts, presentationType);
+ getAssociatedProgram(firstArtifact).execute(file.getLocation().toFile().getAbsolutePath());
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.Renderer#supportsEdit()
+ */
+ @Override
+ public boolean supportsEdit() {
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.Renderer#supportsPreview()
+ */
+ @Override
+ public boolean supportsPreview() {
+ return true;
+ }
+
+ public static IFolder ensureRenderFolderExists(PresentationType presentationType) throws OseeCoreException {
+ switch (presentationType) {
+ case DIFF:
+ if (diffFolder == null || !diffFolder.exists()) {
+ diffFolder = OseeData.getFolder(".diff");
+ }
+ return diffFolder;
+
+ case EDIT:
+ if (workingFolder == null || !workingFolder.exists()) {
+ workingFolder = OseeData.getFolder(".working");
+ }
+ return workingFolder;
+
+ case PREVIEW:
+ if (previewFolder == null || !previewFolder.exists()) {
+ previewFolder = OseeData.getFolder(".preview");
+ }
+ return previewFolder;
+
+ default:
+ throw new OseeArgumentException("Unexpected presentation type");
+ }
+ }
+
+ public IFile renderForDiff(IProgressMonitor monitor, Branch branch) throws OseeCoreException {
+ IFolder baseFolder = getRenderFolder(branch, PresentationType.DIFF);
+ return renderToFileSystem(monitor, baseFolder, null, branch, PresentationType.DIFF);
+ }
+
+ public IFile renderForDiff(IProgressMonitor monitor, Artifact artifact) throws OseeCoreException {
+ if (artifact == null) {
+ throw new OseeArgumentException("Artifact can not be null.");
+ }
+
+ IFolder baseFolder = getRenderFolder(artifact.getBranch(), PresentationType.DIFF);
+ return renderToFileSystem(monitor, baseFolder, artifact, artifact.getBranch(), PresentationType.DIFF);
+ }
+
+ public IFile renderForMerge(IProgressMonitor monitor, Artifact artifact, PresentationType presentationType) throws OseeCoreException {
+ if (artifact == null) {
+ throw new IllegalArgumentException("Artifact can not be null.");
+ }
+ IFolder baseFolder;
+ if (presentationType == PresentationType.MERGE_EDIT) {
+ baseFolder = getRenderFolder(artifact.getBranch(), PresentationType.EDIT);
+ } else {
+ baseFolder = getRenderFolder(artifact.getBranch(), PresentationType.DIFF);
+ }
+ return renderToFileSystem(monitor, baseFolder, artifact, artifact.getBranch(), presentationType);
+ }
+
+ public abstract IFile renderToFileSystem(IProgressMonitor monitor, IFolder baseFolder, Artifact artifact, Branch branch, PresentationType presentationType) throws OseeCoreException;
+
+ public abstract IFile renderToFileSystem(IProgressMonitor monitor, IFolder baseFolder, List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException;
+
+ public abstract Program getAssociatedProgram(Artifact artifact) throws OseeCoreException;
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/IRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/IRenderer.java
new file mode 100644
index 00000000000..94a8c7e4660
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/IRenderer.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public interface IRenderer {
+
+ public static final int SUBTYPE_TYPE_MATCH = 30;
+ public static final int ARTIFACT_TYPE_MATCH = 20;
+ public static final int DEFAULT_MATCH = 10;
+ public static final int NO_MATCH = -1;
+
+ public abstract void edit(Artifact artifact, IProgressMonitor monitor) throws OseeCoreException;
+
+ public abstract void edit(List<Artifact> artifacts, IProgressMonitor monitor) throws OseeCoreException;
+
+ public boolean supportsEdit();
+
+ public abstract void preview(Artifact artifact, IProgressMonitor monitor) throws OseeCoreException;
+
+ public abstract void preview(List<Artifact> artifacts, IProgressMonitor monitor) throws OseeCoreException;
+
+ public abstract String generateHtml(Artifact artifact) throws OseeCoreException;
+
+ public abstract String generateHtml(List<Artifact> artifacts) throws OseeCoreException;
+
+ public boolean supportsPreview();
+
+ public abstract void print(Artifact artifact, IProgressMonitor monitor) throws OseeCoreException;
+
+ public abstract void print(List<Artifact> artifacts, IProgressMonitor monitor) throws OseeCoreException;
+
+ public boolean supportsPrint();
+
+ public String compare(Artifact baseVersion, Artifact newerVersion, IProgressMonitor monitor, PresentationType presentationType, boolean show) throws OseeCoreException;
+
+ public String compare(Artifact baseVersion, Artifact newerVersion, IFile baseFile, IFile newerFile, PresentationType presentationType, boolean show) throws OseeCoreException;
+
+ public void compareArtifacts(List<Artifact> baseArtifacts, List<Artifact> newerArtifact, IProgressMonitor monitor, Branch branch, PresentationType presentationType) throws OseeCoreException;
+
+ public boolean supportsCompare();
+
+ public abstract int getApplicabilityRating(PresentationType presentationType, Artifact artifact) throws OseeCoreException;
+
+ public abstract String getName();
+
+ public abstract String getArtifactUrl(Artifact artifact) throws OseeCoreException;
+
+ public abstract String getId();
+
+ public abstract void setOptions(VariableMap options) throws OseeArgumentException;
+
+ public abstract String getStringOption(String key) throws OseeArgumentException;
+
+ public abstract boolean getBooleanOption(String key) throws OseeArgumentException;
+
+ public abstract VariableMap getOptions();
+
+ public abstract IRenderer newInstance() throws OseeCoreException;
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ITemplateRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ITemplateRenderer.java
new file mode 100644
index 00000000000..2488720e86d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/ITemplateRenderer.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public interface ITemplateRenderer extends IRenderer {
+ public static final String TEMPLATE_OPTION = "template";
+ public static final String TRANSACTION_OPTION = "skynetTransaction";
+ public static final String PREVIEW_WITH_RECURSE_VALUE = "PREVIEW_WITH_RECURSE";
+ public static final Object[] PREVIEW_WITH_RECURSE_OPTION_PAIR =
+ new String[] {TEMPLATE_OPTION, PREVIEW_WITH_RECURSE_VALUE};
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/IVbaDiffGenerator.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/IVbaDiffGenerator.java
new file mode 100644
index 00000000000..1eaf8c7f93d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/IVbaDiffGenerator.java
@@ -0,0 +1,23 @@
+/*
+ * Created on Aug 29, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.File;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+
+/**
+ * @author Theron Virgin
+ */
+public interface IVbaDiffGenerator {
+ public boolean initialize(boolean visible, boolean detectFormatChanges);
+
+ public boolean addComparison(IFile baseFile, IFile newerFile, String diffPath, boolean merge);
+
+ public void finish(String path) throws OseeCoreException;
+
+ public File getFile(String path) throws OseeCoreException;
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/NativeRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/NativeRenderer.java
new file mode 100644
index 00000000000..bc9fe4337cd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/NativeRenderer.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.InputStream;
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.NativeArtifact;
+import org.eclipse.swt.program.Program;
+
+/**
+ * Renders native content.
+ *
+ * @author Ryan D. Brooks
+ */
+public class NativeRenderer extends FileRenderer {
+
+ /**
+ * @param rendererId
+ */
+ public NativeRenderer(String rendererId) {
+ super(rendererId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#newInstance()
+ */
+ @Override
+ public NativeRenderer newInstance() throws OseeCoreException {
+ return new NativeRenderer(getId());
+ }
+
+ public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) {
+ if (artifact.isOfType("Native")) {
+ return ARTIFACT_TYPE_MATCH;
+ }
+ return NO_MATCH;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getAssociatedExtension()
+ */
+ @Override
+ public String getAssociatedExtension(Artifact artifact) throws OseeCoreException {
+ return artifact.getSoleAttributeValue(NativeArtifact.EXTENSION, "");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getAssociatedProgram()
+ */
+ @Override
+ public Program getAssociatedProgram(Artifact artifact) throws OseeCoreException {
+ String extension = getAssociatedExtension(artifact);
+ Program program = Program.findProgram(extension);
+ if (program == null) {
+ throw new OseeArgumentException(
+ "No program associated with the extension " + extension + " found on your local machine.");
+ }
+ return program;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getRenderInputStream(org.eclipse.core.runtime.IProgressMonitor, java.util.List, java.lang.String, org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer.PresentationType)
+ */
+ @Override
+ public InputStream getRenderInputStream(List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getRenderInputStream(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String, org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer.PresentationType)
+ */
+ @Override
+ public InputStream getRenderInputStream(Artifact artifact, PresentationType presentationType) throws OseeCoreException {
+ return artifact.getSoleAttributeValue(NativeArtifact.CONTENT_NAME);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/OpenOfficeWriterRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/OpenOfficeWriterRenderer.java
new file mode 100644
index 00000000000..3592b6fdb0b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/OpenOfficeWriterRenderer.java
@@ -0,0 +1,78 @@
+/**
+ *
+ */
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.InputStream;
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.NativeArtifact;
+import org.eclipse.osee.framework.ui.skynet.templates.TemplateManager;
+import org.eclipse.swt.program.Program;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class OpenOfficeWriterRenderer extends FileRenderer implements ITemplateRenderer {
+
+ /**
+ * @param rendererId
+ */
+ public OpenOfficeWriterRenderer(String rendererId) {
+ super(rendererId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#newInstance()
+ */
+ @Override
+ public OpenOfficeWriterRenderer newInstance() throws OseeCoreException {
+ return new OpenOfficeWriterRenderer(getId());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getAssociatedExtension(org.eclipse.osee.framework.skynet.core.artifact.Artifact)
+ */
+ @Override
+ public String getAssociatedExtension(Artifact artifact) {
+ return "odt";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getRenderInputStream(org.eclipse.core.runtime.IProgressMonitor, java.util.List, java.lang.String, org.eclipse.osee.framework.ui.skynet.render.PresentationType)
+ */
+ @Override
+ public InputStream getRenderInputStream(List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getRenderInputStream(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String, org.eclipse.osee.framework.ui.skynet.render.PresentationType)
+ */
+ @Override
+ public InputStream getRenderInputStream(Artifact artifact, PresentationType presentationType) throws OseeCoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer#getAssociatedProgram(org.eclipse.osee.framework.skynet.core.artifact.Artifact)
+ */
+ @Override
+ public Program getAssociatedProgram(Artifact artifact) throws OseeCoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#getApplicabilityRating(org.eclipse.osee.framework.ui.skynet.render.PresentationType, org.eclipse.osee.framework.skynet.core.artifact.Artifact)
+ */
+ @Override
+ public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) {
+ return NO_MATCH;
+ }
+
+ private String getTemplate(Artifact artifact, PresentationType presentationType) throws OseeCoreException {
+ return TemplateManager.getTemplate(this, artifact, presentationType.name(), getStringOption(TEMPLATE_OPTION)).getSoleAttributeValue(
+ NativeArtifact.CONTENT_NAME);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/PresentationType.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/PresentationType.java
new file mode 100644
index 00000000000..8a974e7e2ca
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/PresentationType.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+public enum PresentationType {
+ EDIT, DIFF, PREVIEW, PREVIEW_IN_COMPOSITE, MERGE, MERGE_EDIT
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/Renderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/Renderer.java
new file mode 100644
index 00000000000..6430688f8a7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/Renderer.java
@@ -0,0 +1,222 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.httpRequests.ArtifactRequest;
+
+/**
+ * A Renderer is a stateless class responsible for rendering formatted content to either a file or a composite
+ *
+ * @author Ryan D. Brooks
+ */
+public abstract class Renderer implements IRenderer {
+ private String rendererId;
+ private VariableMap options;
+
+ /**
+ * @param rendererId
+ */
+ public Renderer(String rendererId) {
+ super();
+ this.rendererId = rendererId;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#edit(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void edit(Artifact artifact, IProgressMonitor monitor) throws OseeCoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#edit(java.util.List, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void edit(List<Artifact> artifacts, IProgressMonitor monitor) throws OseeCoreException {
+ for (Artifact artifact : artifacts) {
+ edit(artifact, monitor);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#getName()
+ */
+ public String getName() {
+ return getClass().getSimpleName();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#preview(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void preview(Artifact artifact, IProgressMonitor monitor) throws OseeCoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#preview(java.util.List, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void preview(List<Artifact> artifacts, IProgressMonitor monitor) throws OseeCoreException {
+ for (Artifact artifact : artifacts) {
+ preview(artifact, monitor);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#print(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void print(Artifact artifact, IProgressMonitor monitor) throws OseeCoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#print(java.util.List, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void print(List<Artifact> artifacts, IProgressMonitor monitor) throws OseeCoreException {
+ for (Artifact artifact : artifacts) {
+ print(artifact, monitor);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#supportsEdit()
+ */
+ public boolean supportsEdit() {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#supportsPreview()
+ */
+ public boolean supportsPreview() {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#supportsPrint()
+ */
+ public boolean supportsPrint() {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#generateHtml(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public String generateHtml(Artifact artifact) throws OseeCoreException {
+ return "<b>" + artifact.getDescriptiveName() + " - " + artifact.getHumanReadableId() + "</b>";
+ }
+
+ @Override
+ public String generateHtml(List<Artifact> artifacts) throws OseeCoreException {
+ StringBuilder result = new StringBuilder();
+ for (Artifact artifact : artifacts) {
+ result.append(generateHtml(artifact));
+ }
+ return result.toString();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#compare(org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public String compare(Artifact baseVersion, Artifact newerVersion, IProgressMonitor monitor, PresentationType presentationType, boolean show) throws OseeCoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String compare(Artifact baseVersion, Artifact newerVersion, IFile baseFile, IFile newerFile, PresentationType presentationType, boolean show) throws OseeCoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#compareArtifacts(java.util.List, java.util.List, org.eclipse.core.runtime.IProgressMonitor, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.osee.framework.ui.skynet.render.PresentationType)
+ */
+ @Override
+ public void compareArtifacts(List<Artifact> baseArtifacts, List<Artifact> newerArtifacts, IProgressMonitor monitor, Branch branch, PresentationType presentationType) throws OseeCoreException {
+ for (int i = 0; i < baseArtifacts.size(); i++) {
+ compare(baseArtifacts.get(i), newerArtifacts.get(i), monitor, presentationType, true);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#supportsCompare()
+ */
+ public boolean supportsCompare() {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#getId()
+ */
+ public String getId() {
+ return rendererId;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#setId(java.lang.String)
+ */
+ public void setId(String rendererId) {
+ this.rendererId = rendererId;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#getArtifactUrl(org.eclipse.osee.framework.skynet.core.artifact.Artifact, boolean)
+ */
+ public String getArtifactUrl(Artifact artifact) throws OseeCoreException {
+ return ArtifactRequest.getInstance().getUrl(artifact);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#setRendererOptions(java.lang.String[])
+ */
+ @Override
+ public void setOptions(VariableMap options) throws OseeArgumentException {
+ this.options = options;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#getOptions()
+ */
+ @Override
+ public VariableMap getOptions() {
+ return options;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#getStringOption(java.lang.String)
+ */
+ @Override
+ public String getStringOption(String key) throws OseeArgumentException {
+ return options == null ? null : options.getString(key);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#getBooleanOption(java.lang.String)
+ */
+ @Override
+ public boolean getBooleanOption(String key) throws OseeArgumentException {
+ if (options != null) {
+ Boolean option = options.getBoolean(key);
+ if (option != null) {
+ return option;
+ }
+ }
+ return false;
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/RendererManager.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/RendererManager.java
new file mode 100644
index 00000000000..a659ae7960e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/RendererManager.java
@@ -0,0 +1,329 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.lang.reflect.Constructor;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeStateException;
+import org.eclipse.osee.framework.jdk.core.type.HashCollection;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.ExtensionPoints;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.IExceptionableRunnable;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.BrowserComposite;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class RendererManager {
+ private static final RendererManager instance = new RendererManager();
+ private final HashMap<String, IRenderer> renderers = new HashMap<String, IRenderer>(40);
+
+ private RendererManager() {
+ registerRendersFromExtensionPoints();
+ }
+
+ /**
+ * Maps all renderers in the system to their applicable artifact types
+ */
+ private void registerRendersFromExtensionPoints() {
+ List<IConfigurationElement> elements =
+ ExtensionPoints.getExtensionElements(SkynetGuiPlugin.getInstance(), "ArtifactRenderer", "Renderer");
+
+ for (IConfigurationElement element : elements) {
+ String classname = element.getAttribute("classname");
+ String bundleName = element.getContributor().getName();
+ try {
+ Class<IRenderer> clazz = Platform.getBundle(bundleName).loadClass(classname);
+ Constructor<IRenderer> constructor = clazz.getConstructor(new Class[] {String.class});
+ IRenderer renderer =
+ constructor.newInstance(new Object[] {element.getDeclaringExtension().getUniqueIdentifier()});
+ renderers.put(renderer.getId(), renderer);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ } catch (NoClassDefFoundError er) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING,
+ "Failed to find a class definition for " + classname + ", registered from bundle " + bundleName, er);
+ }
+ }
+ }
+
+ public static FileRenderer getBestFileRenderer(PresentationType presentationType, Artifact artifact) throws OseeCoreException {
+ return getBestFileRenderer(presentationType, artifact, null);
+ }
+
+ public static FileRenderer getBestFileRenderer(PresentationType presentationType, Artifact artifact, VariableMap options) throws OseeCoreException {
+ IRenderer bestRenderer = getBestRenderer(presentationType, artifact, options);
+ if (bestRenderer instanceof FileRenderer) {
+ return (FileRenderer) bestRenderer;
+ }
+ throw new OseeArgumentException("No FileRenderer found for " + artifact);
+ }
+
+ private static IRenderer getBestRenderer(PresentationType presentationType, Artifact artifact, VariableMap options) throws OseeCoreException {
+ IRenderer bestRenderer = getBestRendererPrototype(presentationType, artifact).newInstance();
+ bestRenderer.setOptions(options);
+ return bestRenderer;
+ }
+
+ private static IRenderer getBestRendererPrototype(PresentationType presentationType, Artifact artifact) throws OseeCoreException {
+ IRenderer bestRendererPrototype = null;
+ int bestRating = IRenderer.NO_MATCH;
+ for (IRenderer renderer : instance.renderers.values()) {
+ int rating = renderer.getApplicabilityRating(presentationType, artifact);
+ if (rating > bestRating) {
+ bestRendererPrototype = renderer;
+ bestRating = rating;
+ }
+ }
+ if (bestRendererPrototype == null) {
+ throw new OseeStateException("At least the DefaultArtifactRenderer should have been found.");
+ }
+ return bestRendererPrototype;
+ }
+
+ private static HashCollection<IRenderer, Artifact> createRenderMap(PresentationType presentationType, List<Artifact> artifacts, VariableMap options) throws OseeCoreException {
+ HashCollection<IRenderer, Artifact> prototypeRendererArtifactMap =
+ new HashCollection<IRenderer, Artifact>(false, LinkedList.class);
+ for (Artifact artifact : artifacts) {
+ prototypeRendererArtifactMap.put(getBestRendererPrototype(presentationType, artifact), artifact);
+ }
+
+ // now that the artifacts are grouped based on best renderer type, create instances of those renderer with the supplied options
+ HashCollection<IRenderer, Artifact> rendererArtifactMap =
+ new HashCollection<IRenderer, Artifact>(false, LinkedList.class);
+ for (IRenderer prototypeRenderer : prototypeRendererArtifactMap.keySet()) {
+ IRenderer renderer = prototypeRenderer.newInstance();
+ renderer.setOptions(options);
+ rendererArtifactMap.put(renderer, prototypeRendererArtifactMap.getValues(prototypeRenderer));
+ }
+ return rendererArtifactMap;
+ }
+
+ public static void preview(Artifact artifact, IProgressMonitor monitor, VariableMap options) throws OseeCoreException {
+ getBestRenderer(PresentationType.PREVIEW, artifact, options).preview(artifact, monitor);
+ }
+
+ public static void previewInJob(final Artifact artifact) throws OseeCoreException {
+ previewInJob(artifact, null);
+ }
+
+ public static void previewInJob(final Artifact artifact, VariableMap options) throws OseeCoreException {
+ previewInJob(getBestRenderer(PresentationType.PREVIEW, artifact, options), artifact);
+ }
+
+ private static void previewInJob(final IRenderer renderer, final Artifact artifact) {
+ IExceptionableRunnable runnable = new IExceptionableRunnable() {
+ public void run(IProgressMonitor monitor) throws Exception {
+ renderer.preview(artifact, monitor);
+ }
+ };
+
+ Jobs.run("Preview " + artifact.getDescriptiveName(), runnable, SkynetGuiPlugin.class, SkynetGuiPlugin.PLUGIN_ID,
+ false);
+ }
+
+ public static void previewInJob(final List<Artifact> artifacts) throws OseeCoreException {
+ previewInJob(artifacts, null);
+ }
+
+ public static void previewInJob(final List<Artifact> artifacts, final VariableMap options) throws OseeCoreException {
+ if (artifacts.size() == 1) {
+ previewInJob(artifacts.get(0), options);
+ } else {
+ IExceptionableRunnable runnable = new IExceptionableRunnable() {
+ public void run(IProgressMonitor monitor) throws Exception {
+ HashCollection<IRenderer, Artifact> rendererArtifactMap =
+ createRenderMap(PresentationType.PREVIEW, artifacts, options);
+
+ for (IRenderer renderer : rendererArtifactMap.keySet()) {
+ renderer.preview((LinkedList<Artifact>) rendererArtifactMap.getValues(renderer), monitor);
+ }
+ }
+ };
+
+ Jobs.run("Preview " + artifacts.size() + " artifacts", runnable, SkynetGuiPlugin.class,
+ SkynetGuiPlugin.PLUGIN_ID, false);
+ }
+ }
+
+ public static void preview(final List<Artifact> artifacts, IProgressMonitor monitor, final VariableMap options) throws OseeCoreException {
+ if (artifacts.size() == 1) {
+ preview(artifacts.get(0), monitor, options);
+ } else {
+ HashCollection<IRenderer, Artifact> rendererArtifactMap =
+ createRenderMap(PresentationType.PREVIEW, artifacts, options);
+
+ for (IRenderer renderer : rendererArtifactMap.keySet()) {
+ renderer.preview((LinkedList<Artifact>) rendererArtifactMap.getValues(renderer), monitor);
+ }
+ }
+ }
+
+ public static void edit(final List<Artifact> artifacts, IProgressMonitor monitor) throws OseeCoreException {
+ edit(artifacts, monitor, null);
+ }
+
+ public static void edit(final List<Artifact> artifacts, IProgressMonitor monitor, final VariableMap options) throws OseeCoreException {
+ HashCollection<IRenderer, Artifact> rendererArtifactMap =
+ createRenderMap(PresentationType.EDIT, artifacts, options);
+
+ for (IRenderer renderer : rendererArtifactMap.keySet()) {
+ renderer.edit((LinkedList<Artifact>) rendererArtifactMap.getValues(renderer), monitor);
+ }
+ }
+
+ public static void editInJob(final List<Artifact> artifacts) throws OseeCoreException {
+ editInJob(artifacts, null);
+ }
+
+ public static void editInJob(final List<Artifact> artifacts, final VariableMap options) throws OseeCoreException {
+ if (ArtifactGuis.checkOtherEdit(artifacts)) {
+ if (artifacts.size() == 1) {
+ editInJob(artifacts.get(0), options);
+ } else {
+ IExceptionableRunnable runnable = new IExceptionableRunnable() {
+ public void run(IProgressMonitor monitor) throws OseeCoreException {
+ edit(artifacts, monitor, options);
+ }
+ };
+
+ Jobs.run("Edit " + artifacts.size() + " artifacts", runnable, SkynetGuiPlugin.class,
+ SkynetGuiPlugin.PLUGIN_ID);
+ }
+ }
+ }
+
+ public static void editInJob(final Artifact artifact) throws OseeCoreException {
+ editInJob(artifact, null);
+ }
+
+ public static void editInJob(final Artifact artifact, final VariableMap options) throws OseeCoreException {
+ IExceptionableRunnable runnable = new IExceptionableRunnable() {
+ public void run(IProgressMonitor monitor) throws Exception {
+ getBestRenderer(PresentationType.EDIT, artifact, options).edit(artifact, monitor);
+ }
+ };
+
+ Jobs.run("Edit " + artifact.getDescriptiveName(), runnable, SkynetGuiPlugin.class, SkynetGuiPlugin.PLUGIN_ID);
+ }
+
+ public static String merge(Artifact baseVersion, Artifact newerVersion, String fileName, boolean show) throws OseeStateException, OseeCoreException {
+ return merge(baseVersion, newerVersion, null, fileName, show);
+ }
+
+ public static String merge(Artifact baseVersion, Artifact newerVersion, IProgressMonitor monitor, String fileName, boolean show) throws OseeStateException, OseeCoreException {
+ return getBestRenderer(PresentationType.MERGE, baseVersion, new VariableMap("fileName", fileName)).compare(
+ baseVersion, newerVersion, monitor, PresentationType.MERGE, show);
+ }
+
+ public static String merge(Artifact baseVersion, Artifact newerVersion, IFile baseFile, IFile newerFile, String fileName, boolean show) throws OseeCoreException {
+ return getBestRenderer(PresentationType.MERGE_EDIT, baseVersion, new VariableMap("fileName", fileName)).compare(
+ baseVersion, newerVersion, baseFile, newerFile, PresentationType.MERGE_EDIT, show);
+ }
+
+ public static void diffInJob(final Artifact baseVersion, final Artifact newerVersion) {
+ diffInJob(baseVersion, newerVersion, null);
+ }
+
+ public static void diffInJob(final Artifact baseVersion, final Artifact newerVersion, final VariableMap options) {
+
+ IExceptionableRunnable runnable = new IExceptionableRunnable() {
+ public void run(IProgressMonitor monitor) throws OseeCoreException {
+ diff(baseVersion, newerVersion, true, options);
+ }
+ };
+
+ String jobName =
+ "Compare " + (baseVersion == null ? " new " : baseVersion.getDescriptiveName()) + " to " + (newerVersion == null ? " delete " : newerVersion.getDescriptiveName());
+ Jobs.run(jobName, runnable, SkynetGuiPlugin.class, SkynetGuiPlugin.PLUGIN_ID);
+
+ }
+
+ public static String diff(final Artifact baseVersion, final Artifact newerVersion, IProgressMonitor monitor, boolean show) throws OseeCoreException {
+ return diff(baseVersion, newerVersion, monitor, show, null);
+ }
+
+ public static String diff(final Artifact baseVersion, final Artifact newerVersion, IProgressMonitor monitor, boolean show, final VariableMap options) throws OseeCoreException {
+ // To handle comparisons with new or deleted artifacts
+ Artifact artifactToSelectRender = baseVersion == null ? newerVersion : baseVersion;
+ IRenderer renderer = getBestRenderer(PresentationType.DIFF, artifactToSelectRender, options);
+ return renderer.compare(baseVersion, newerVersion, new NullProgressMonitor(), PresentationType.DIFF, show);
+ }
+
+ public static String diff(final Artifact baseVersion, final Artifact newerVersion, boolean show) throws OseeCoreException {
+ return diff(baseVersion, newerVersion, show, null);
+ }
+
+ public static String diff(final Artifact baseVersion, final Artifact newerVersion, boolean show, final VariableMap options) throws OseeCoreException {
+ return diff(baseVersion, newerVersion, new NullProgressMonitor(), show, options);
+ }
+
+ public static void diffInJob(final List<Artifact> baseArtifacts, final List<Artifact> newerArtifacts) {
+ diffInJob(baseArtifacts, newerArtifacts, null);
+ }
+
+ public static void diffInJob(final List<Artifact> baseArtifacts, final List<Artifact> newerArtifacts, final VariableMap options) {
+ IExceptionableRunnable runnable = new IExceptionableRunnable() {
+ public void run(IProgressMonitor monitor) throws OseeCoreException {
+ Artifact sampleArtifact = baseArtifacts.get(0) == null ? newerArtifacts.get(0) : baseArtifacts.get(0);
+ IRenderer renderer = getBestRenderer(PresentationType.DIFF, sampleArtifact, options);
+ renderer.compareArtifacts(baseArtifacts, newerArtifacts, monitor, sampleArtifact.getBranch(),
+ PresentationType.DIFF);
+ }
+ };
+ Jobs.run("Combined Diff", runnable, SkynetGuiPlugin.class, SkynetGuiPlugin.PLUGIN_ID);
+ }
+
+ public static void previewInComposite(final BrowserComposite previewComposite, final Artifact artifact) {
+ previewInComposite(previewComposite, artifact, null);
+ }
+
+ public static void previewInComposite(final BrowserComposite previewComposite, final Artifact artifact, final VariableMap options) {
+ IExceptionableRunnable runnable = new IExceptionableRunnable() {
+ public void run(IProgressMonitor monitor) throws Exception {
+ IRenderer renderer = getBestRenderer(PresentationType.PREVIEW_IN_COMPOSITE, artifact, options);
+ final String url = renderer.getArtifactUrl(artifact);
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ previewComposite.setUrl(url);
+ }
+ });
+ }
+ };
+
+ Jobs.run("Preview " + artifact.getDescriptiveName(), runnable, SkynetGuiPlugin.class, SkynetGuiPlugin.PLUGIN_ID,
+ false);
+ }
+
+ public static String renderToHtml(Artifact artifact) throws OseeCoreException {
+ return renderToHtml(artifact, null);
+ }
+
+ public static String renderToHtml(Artifact artifact, VariableMap options) throws OseeCoreException {
+ return getBestRenderer(PresentationType.PREVIEW_IN_COMPOSITE, artifact, options).generateHtml(artifact);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/TisRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/TisRenderer.java
new file mode 100644
index 00000000000..ba823ad97cb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/TisRenderer.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.InputStream;
+import java.nio.charset.CharacterCodingException;
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeWrappedException;
+import org.eclipse.osee.framework.jdk.core.util.io.CharBackedInputStream;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+import org.eclipse.osee.framework.ui.skynet.render.word.template.BasicTemplateAttributeHandler;
+import org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateAttributeHandler;
+import org.eclipse.osee.framework.ui.skynet.render.word.template.SRSSpecialPublishingAttributeHandler;
+import org.eclipse.osee.framework.ui.skynet.render.word.template.TISAttributeHandler;
+import org.eclipse.osee.framework.ui.skynet.render.word.template.WordAttributeTypeAttributeHandler;
+import org.eclipse.osee.framework.ui.skynet.render.word.template.WordTemplateManager;
+
+/**
+ * @author b1528444
+ */
+public class TisRenderer extends WordTemplateRenderer {
+ /**
+ * @param rendererId
+ */
+ public TisRenderer(String rendererId) {
+ super(rendererId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#newInstance()
+ */
+ @Override
+ public TisRenderer newInstance() throws OseeCoreException {
+ return new TisRenderer(getId());
+ }
+
+ public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) {
+ if ("Test Information Sheet".equals(artifact.getArtifactTypeName())) {
+ return SUBTYPE_TYPE_MATCH;
+ }
+ return NO_MATCH;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getRenderInputStream(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String,
+ * org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer.PresentationType)
+ */
+ @Override
+ public InputStream getRenderInputStream(List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException {
+ if (PresentationType.EDIT == presentationType) {
+ return super.getRenderInputStream(artifacts, presentationType);
+ }
+ final VariableMap variableMap = new VariableMap();
+ String template;
+
+ if (artifacts.isEmpty()) {
+ // Still need to get a default template with a null artifact list
+ template = getTemplate(null, presentationType);
+ } else {
+ Artifact firstArtifact = artifacts.iterator().next();
+ template = getTemplate(firstArtifact, presentationType);
+ }
+
+ variableMap.setValue(DEFAULT_SET_NAME, artifacts);
+
+ List<ITemplateAttributeHandler> handlers = new ArrayList<ITemplateAttributeHandler>();
+ handlers.add(new SRSSpecialPublishingAttributeHandler());
+ handlers.add(new TISAttributeHandler());
+ handlers.add(new WordAttributeTypeAttributeHandler());
+ handlers.add(new BasicTemplateAttributeHandler());
+ WordTemplateManager wtm = new WordTemplateManager(template, handlers);
+ try {
+ CharBackedInputStream charBak = new CharBackedInputStream();
+ WordMLProducer wordMl = new WordMLProducer(charBak);
+ wtm.processArtifacts(wordMl, variableMap.getArtifacts(wtm.getArtifactSet()));
+ return charBak;
+ } catch (CharacterCodingException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UpdateArtifactJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UpdateArtifactJob.java
new file mode 100644
index 00000000000..2aef72be51a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UpdateArtifactJob.java
@@ -0,0 +1,313 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.xml.parsers.ParserConfigurationException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeStateException;
+import org.eclipse.osee.framework.db.connection.exception.OseeWrappedException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.NativeArtifact;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.skynet.core.word.WordUtil;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordTemplateProcessor;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class UpdateArtifactJob extends UpdateJob {
+ private static final Pattern guidPattern = Pattern.compile(".*\\(([^)]+)\\)[^()]*");
+ private static final Pattern multiPattern = Pattern.compile(".*[^()]*");
+ private Element oleDataElement;
+ private String singleGuid = null;
+ private static final boolean DEBUG =
+ "TRUE".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.osee.framework.ui.skynet/debug/Renderer"));
+
+ public UpdateArtifactJob() {
+ super("Update Artifact");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ processUpdate();
+ } catch (Exception ex) {
+ return new Status(Status.ERROR, SkynetActivator.PLUGIN_ID, Status.OK, ex.getLocalizedMessage(), ex);
+ }
+ return Status.OK_STATUS;
+ }
+
+ private void processUpdate() throws Exception {
+ int branchId = Branch.getBranchIdFromBranchFolderName(workingFile.getParentFile().getName());
+ Branch branch = BranchManager.getBranch(branchId);
+ FileInputStream myFileInputStream = new FileInputStream(workingFile);
+
+ String guid = WordUtil.getGUIDFromFileInputStream(myFileInputStream);
+ if (guid == null) {
+ processNonWholeDocumentUpdates(branch);
+ } else {
+ Artifact myArtifact = ArtifactQuery.getArtifactFromId(guid, branch);
+ updateWholeDocumentArtifact(myArtifact);
+ }
+ }
+
+ private void processNonWholeDocumentUpdates(Branch branch) throws OseeCoreException, ParserConfigurationException, SAXException, IOException {
+ Artifact artifact;
+
+ Matcher singleEditMatcher = guidPattern.matcher(workingFile.getName());
+ Matcher multiEditMatcher = multiPattern.matcher(workingFile.getName());
+
+ if (singleEditMatcher.matches()) {
+ singleGuid = singleEditMatcher.group(1);
+ artifact = ArtifactQuery.getArtifactFromId(singleGuid, branch);
+
+ if (artifact instanceof WordArtifact) {
+ workArtifactUpdate(getArtifacts(workingFile, true), branch);
+ } else if (artifact instanceof NativeArtifact) {
+ updateNativeArtifact((NativeArtifact) artifact);
+ } else {
+ throw new IllegalArgumentException("Artifact must be of type WordArtifact or NativeArtifact.");
+ }
+ } else if (multiEditMatcher.matches()) {
+ workArtifactUpdate(getArtifacts(workingFile, false), branch);
+ } else {
+ throw new IllegalArgumentException("File name did not contain the artifact guid");
+ }
+ }
+
+ private void updateNativeArtifact(NativeArtifact artifact) throws OseeCoreException, FileNotFoundException {
+ artifact.setNativeContent(workingFile);
+ artifact.persistAttributes();
+ }
+
+ private void workArtifactUpdate(Collection<Element> artElements, Branch branch) throws OseeCoreException {
+ List<String> deletedGuids = new LinkedList<String>();
+ try {
+ boolean singleArtifact = artElements.size() == 1;
+ boolean containsOleData = false;
+ for (Element artElement : artElements) {
+ String guid = getGuid(artElement);
+ Artifact artifact = ArtifactQuery.getArtifactFromId(guid, branch);
+
+ if (artifact == null) {
+ deletedGuids.add(guid);
+ } else {
+ containsOleData = !artifact.getSoleAttributeValue(WordAttribute.OLE_DATA_NAME, "").equals("");
+
+ if (oleDataElement == null && containsOleData) {
+ artifact.setSoleAttributeValue(WordAttribute.OLE_DATA_NAME, "");
+ } else if (oleDataElement != null && singleArtifact) {
+ artifact.setSoleAttributeFromStream(WordAttribute.OLE_DATA_NAME, new ByteArrayInputStream(
+ WordTemplateRenderer.getFormattedContent(oleDataElement)));
+ }
+
+ String content;
+ try {
+ content =
+ Lib.inputStreamToString(new ByteArrayInputStream(
+ WordTemplateRenderer.getFormattedContent(artElement)));
+ } catch (IOException ex) {
+ throw new OseeWrappedException(ex);
+ }
+
+ StringBuilder stringBuffer = new StringBuilder();
+
+ // Decided not to support multi edit of artifacts that
+ // contain equations.
+ if (false && containsOleData && !singleArtifact) {
+ int startIndex = 0, endIndex = 0, tagCursorStart = 0, tagCursorEnd = 0;
+ String equationTag;
+
+ content = content.replaceAll("MyObject", "OLEObject").replaceAll("number", "ObjectID");
+
+ while (endIndex < content.length()) {
+ tagCursorStart = content.indexOf(":OLEObject ", startIndex);
+
+ if (tagCursorStart != -1) {
+ tagCursorStart = content.lastIndexOf('<', tagCursorStart);
+
+ tagCursorEnd = content.indexOf(">", tagCursorStart) + 1;
+ equationTag = content.substring(tagCursorStart, tagCursorEnd);
+
+ tagCursorEnd = content.indexOf("OLEObject>", tagCursorStart) + "OLEObject>".length();
+ content = content.replace(content.subSequence(tagCursorStart, tagCursorEnd), "");
+
+ endIndex = content.indexOf("</w:pict>", startIndex);
+ stringBuffer.append(content.substring(startIndex, endIndex));
+
+ equationTag = equationTag.replaceFirst("ns\\d+", "o").replace(">", "/>");
+ stringBuffer.append(equationTag + "</w:pict>");
+ startIndex = endIndex + "</w:pict>".length();
+ } else {
+ endIndex = content.length();
+ stringBuffer.append(content.substring(startIndex, endIndex));
+ }
+ }
+ content = stringBuffer.toString();
+ }
+ // Only update if editing a single artifact or if in
+ // multi-edit mode only update if
+ // the artifact has at least on textual change.
+ if (singleArtifact || !WordUtil.textOnly(
+ artifact.getSoleAttributeValue(WordAttribute.WORD_TEMPLATE_CONTENT).toString()).equals(
+ WordUtil.textOnly(content))) {
+ //TODO
+ if (DEBUG) {
+ System.err.println("Initial: " + content);
+ }
+ if (artElement.getNodeName().endsWith("body")) {
+ //This code pulls out all of the stuff after the inserted listnum reordering stuff. This needs to be
+ //here so that we remove unwanted template information from single editing
+ content = content.replace(WordMLProducer.LISTNUM_FIELD_HEAD, "");
+ if (DEBUG) {
+ System.err.println("AFTER: " + content);
+ }
+ }
+ artifact.setSoleAttributeValue(WordAttribute.WORD_TEMPLATE_CONTENT, content);
+ }
+ artifact.persistAttributes();
+ }
+ }
+ } finally {
+ if (!deletedGuids.isEmpty()) {
+ throw new OseeStateException("The following deleted artifacts could not be saved: " + Collections.toString(
+ ",", deletedGuids));
+ }
+ }
+ }
+
+ private void updateWholeDocumentArtifact(Artifact artifact) throws FileNotFoundException, OseeCoreException {
+ artifact.setSoleAttributeFromStream(WordAttribute.WHOLE_WORD_CONTENT, new FileInputStream(workingFile));
+ artifact.persistAttributes();
+ }
+
+ private Collection<Element> getArtifacts(File wordFile, boolean single) throws ParserConfigurationException, SAXException, IOException, OseeCoreException {
+ final Collection<Element> artifacts = new LinkedList<Element>();
+ final String elementNameForWordAttribute =
+ WordTemplateProcessor.elementNameFor(WordAttribute.WORD_TEMPLATE_CONTENT);
+
+ Document doc = Jaxp.readXmlDocument(wordFile);
+ Element paragraphRoot = null;
+ Element rootElement = doc.getDocumentElement();
+ Element body = null;
+ boolean containsTag = false;
+ oleDataElement = null;
+
+ NodeList nodeList = rootElement.getElementsByTagName("*");
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Element element = (Element) nodeList.item(i);
+ if (element.getNodeName().endsWith(elementNameForWordAttribute)) {
+ artifacts.add(element);
+ containsTag = true;
+ }
+ if (element.getNodeName().endsWith("wx:sect")) {
+ paragraphRoot = element;
+ }
+ if (element.getNodeName().endsWith("body") && single) {
+ artifacts.add(element);
+ body = element;
+ } else if (oleDataElement == null && element.getNodeName().endsWith("docOleData")) {
+ oleDataElement = element;
+ }
+ }
+ //When creating a three way merge the tags are not added as they create conflicts. Therefore
+ //we remove template information using the listnum fldChar tag. The following code checks for the
+ //attribute tags and if they are not there removes all the paragraphs following the one that contains the
+ //fldChar
+ if (containsTag) {
+ artifacts.remove(body);
+ } else if (paragraphRoot != null) {
+ //Lets try and remove everything after the listnum tag
+ if (!cleanUpParagraph(paragraphRoot)) {
+ throw new OseeCoreException("Merge document can't be saved because fldChar tags could not be found");
+ }
+ }
+
+ return artifacts;
+ }
+
+ //To handle the case of sub-sections
+ private boolean cleanUpParagraph(Node rootNode) throws OseeCoreException {
+ boolean worked = false;
+ boolean delete = false;
+ Node node = rootNode.getFirstChild();
+ while (node != null) {
+ Node nextNode = node.getNextSibling();
+ if (node.getNodeName().endsWith("sub-section")) {
+ worked = cleanUpParagraph(node);
+ } else {
+ String content = node.getTextContent();
+ if (DEBUG) {
+ System.out.println(" " + node.getNodeName());
+ System.out.println(" " + content);
+ }
+ if (content != null && content.contains("LISTNUM \"listreset\"")) {
+ delete = true;
+ }
+ if (delete) {
+ rootNode.removeChild(node);
+ }
+ }
+ node = nextNode;
+ }
+ return worked || delete;
+ }
+
+ private String getGuid(Element artifactElement) throws OseeArgumentException {
+ if (singleGuid != null) return singleGuid;
+ NamedNodeMap attributes = artifactElement.getAttributes();
+ for (int i = 0; i < attributes.getLength(); i++) {
+ // MS Word has a nasty habit of changing the namespace say from
+ // ns0 to ns1, so we must
+ // ignore the namespace by using endsWith()
+ if (attributes.item(i).getNodeName().endsWith("guid")) {
+ return attributes.item(i).getNodeValue();
+ }
+ }
+ throw new OseeArgumentException("didn't find the guid attribure in element: " + artifactElement);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UpdateJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UpdateJob.java
new file mode 100644
index 00000000000..08c0a33abd6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UpdateJob.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.File;
+import org.eclipse.core.runtime.jobs.Job;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public abstract class UpdateJob extends Job {
+ protected File workingFile;
+
+ /**
+ * @param name
+ */
+ public UpdateJob(String name) {
+ super(name);
+ }
+
+ /**
+ * @param workingFile The workingFile to set.
+ */
+ public void setWorkingFile(File workingFile) {
+ this.workingFile = workingFile;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UrlRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UrlRenderer.java
new file mode 100644
index 00000000000..739cd1de9da
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/UrlRenderer.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeTypeDoesNotExist;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.WorkspaceURL;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class UrlRenderer extends Renderer {
+ private final AttributeType contentUrlType;
+
+ /**
+ * @param applicableArtifactTypes
+ * @throws OseeTypeDoesNotExist
+ * @throws OseeDataStoreException
+ */
+ public UrlRenderer(String rendererId) throws OseeDataStoreException, OseeTypeDoesNotExist {
+ super(rendererId);
+ contentUrlType = AttributeTypeManager.getType("Content URL");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#newInstance()
+ */
+ @Override
+ public UrlRenderer newInstance() throws OseeCoreException {
+ return new UrlRenderer(getId());
+ }
+
+ @Override
+ public String getArtifactUrl(Artifact artifact) throws OseeCoreException {
+ String url = artifact.getSoleAttributeValue("Content URL", "");
+ if (url.startsWith("ws:")) {
+ IFile iFile = WorkspaceURL.getIFile(url);
+ url = iFile.getLocation().toString();
+ }
+ return url;
+ }
+
+ public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) throws OseeCoreException {
+ for (AttributeType attributeType : artifact.getAttributeTypes()) {
+ if (attributeType.equals(contentUrlType)) {
+ return SUBTYPE_TYPE_MATCH;
+ }
+ }
+ return NO_MATCH;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/VbaWordDiffGenerator.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/VbaWordDiffGenerator.java
new file mode 100644
index 00000000000..cc2ef607dae
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/VbaWordDiffGenerator.java
@@ -0,0 +1,126 @@
+/*
+ * Created on Aug 29, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.osee.framework.db.connection.exception.OseeWrappedException;
+import org.eclipse.osee.framework.jdk.core.util.io.streams.StreamCatcher;
+
+/**
+ * @author Theron Virgin
+ */
+public class VbaWordDiffGenerator implements IVbaDiffGenerator {
+ private final static String header =
+ "Option Explicit\n\nDim oWord\nDim baseDoc\nDim authorName\nDim detectFormatChanges\nDim ver1\nDim ver2\nDim diffPath\nDim wdCompareTargetSelectedDiff\nDim wdCompareTargetSelectedMerge\nDim wdFormattingFromCurrent\nDim wdFormatXML\nDim visible\n\nPublic Sub main()\n wdCompareTargetSelectedDiff = 0\n wdCompareTargetSelectedMerge = 1\n wdFormattingFromCurrent = 3\n wdFormatXML = 11\n\n authorName = \"OSEE Doc compare\"\n\n detectFormatChanges = True\n\n set oWord = WScript.CreateObject(\"Word.Application\")\n oWord.Visible = False\n\n";
+
+ private final static String comparisonCommand =
+ " oWord.ActiveDocument.Compare ver2, authorName, wdCompareTargetSelectedDiff, detectFormatChanges, False, False\n oWord.ActiveDocument.SaveAs diffPath, wdFormatXML, , , False\n baseDoc.close()\n If visible Then\n Else\n oWord.ActiveDocument.close()\n End If\n\n";
+
+ private final static String mergeCommand =
+ " baseDoc.Merge ver2, wdCompareTargetSelectedMerge, detectFormatChanges, wdFormattingFromCurrent, False\n oWord.ActiveDocument.SaveAs diffPath, wdFormatXML, , , False\n\n";
+
+ private final static String tail =
+ " If visible Then\n oWord.Visible = True\n Else\n oWord.Quit()\n set oWord = Nothing\n End If\n\nEnd Sub\n\nmain";
+
+ private StringBuilder builder;
+ private boolean finalized;
+ private boolean initialized;
+
+ public VbaWordDiffGenerator() {
+ initialized = false;
+ finalized = false;
+ }
+
+ public boolean initialize(boolean visible, boolean detectFormatChanges) {
+ if (initialized) {
+ return false;
+ }
+ initialized = true;
+ builder = new StringBuilder();
+ builder.append(header);
+ if (visible) {
+ builder.append(" visible = True\n\n");
+ } else {
+ builder.append(" visible = False\n\n");
+ }
+ if (detectFormatChanges) {
+ builder.append(" detectFormatChanges = True\n\n");
+ } else {
+ builder.append(" detectFormatChanges = False\n\n");
+ }
+ return true;
+ }
+
+ public boolean addComparison(IFile baseFile, IFile newerFile, String diffPath, boolean merge) {
+ if (finalized) {
+ return false;
+ }
+ builder.append(" ver1 = \"");
+ builder.append(baseFile.getLocation().toOSString());
+ builder.append("\"\n");
+
+ builder.append(" ver2 = \"");
+ builder.append(newerFile.getLocation().toOSString());
+ builder.append("\"\n");
+
+ builder.append(" diffPath = \"");
+ builder.append(diffPath);
+ builder.append("\"\n\n");
+
+ builder.append(" set baseDoc = oWord.Documents.Open (ver1)\n");
+
+ if (merge) {
+ builder.append(mergeCommand);
+ } else {
+ builder.append(comparisonCommand);
+ }
+ return true;
+ }
+
+ @Override
+ public void finish(String path) throws OseeWrappedException {
+ finalized = true;
+ builder.append(tail);
+ compare(getFile(path));
+ }
+
+ @Override
+ public File getFile(String path) throws OseeWrappedException {
+ if (!finalized) {
+ return null;
+ }
+ try {
+ FileOutputStream out = new FileOutputStream(path != null ? path : "c:\\UserData\\compareDocs.vbs");
+ out.write(builder.toString().getBytes(), 0, builder.toString().getBytes().length);
+ out.close();
+ return new File(path != null ? path : "c:\\UserData\\compareDocs.vbs");
+ } catch (IOException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ }
+
+ private void compare(File vbDiffScript) throws OseeWrappedException {
+ try {
+ String cmd[] = {"cmd", "/s /c", "\"" + vbDiffScript.getPath() + "\""};
+
+ Process proc = Runtime.getRuntime().exec(cmd);
+
+ StreamCatcher errorCatcher = new StreamCatcher(proc.getErrorStream(), "ERROR");
+ StreamCatcher outputCatcher = new StreamCatcher(proc.getInputStream(), "OUTPUT");
+
+ errorCatcher.start();
+ outputCatcher.start();
+ proc.waitFor();
+ } catch (IOException ex) {
+ throw new OseeWrappedException(ex);
+ } catch (InterruptedException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WholeDocumentRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WholeDocumentRenderer.java
new file mode 100644
index 00000000000..e723afe4bfd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WholeDocumentRenderer.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeWrappedException;
+import org.eclipse.osee.framework.jdk.core.util.io.Streams;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.WordWholeDocumentAttribute;
+import org.eclipse.osee.framework.skynet.core.word.WordUtil;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class WholeDocumentRenderer extends WordRenderer {
+
+ /**
+ * @param rendererId
+ */
+ public WholeDocumentRenderer(String rendererId) {
+ super(rendererId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#newInstance()
+ */
+ @Override
+ public WholeDocumentRenderer newInstance() throws OseeCoreException {
+ return new WholeDocumentRenderer(getId());
+ }
+
+ public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) {
+ if (artifact instanceof WordArtifact && ((WordArtifact) artifact).isWholeWordArtifact()) {
+ return SUBTYPE_TYPE_MATCH;
+ }
+ return NO_MATCH;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getRenderInputStream(org.eclipse.core.runtime.IProgressMonitor, java.util.List, java.lang.String, org.eclipse.osee.framework.ui.skynet.render.PresentationType)
+ */
+ @Override
+ public InputStream getRenderInputStream(List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getRenderInputStream(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String, org.eclipse.osee.framework.ui.skynet.render.PresentationType)
+ */
+ @Override
+ public InputStream getRenderInputStream(Artifact artifact, PresentationType presentationType) throws OseeCoreException {
+ if (artifact != null) {
+ Attribute<?> attribute = artifact.getSoleAttribute(WordAttribute.WHOLE_WORD_CONTENT);
+ if (attribute == null) {
+ attribute = artifact.createAttribute(AttributeTypeManager.getType(WordAttribute.WHOLE_WORD_CONTENT), true);
+ }
+ if (presentationType == PresentationType.DIFF && attribute != null && ((WordAttribute) attribute).mergeMarkupPresent()) {
+ throw new OseeCoreException(
+ "Trying to diff the " + artifact.getDescriptiveName() + " artifact on the " + artifact.getBranch().getBranchShortName() + " branch, which has tracked changes turned on. All tracked changes must be removed before the artifacts can be compared.");
+
+ }
+ }
+
+ try {
+ InputStream stream =
+ Streams.convertStringToInputStream(WordWholeDocumentAttribute.getEmptyDocumentContent(), "UTF-8");
+
+ if (artifact != null) {
+ String content = artifact.getSoleAttributeValue(WordAttribute.WHOLE_WORD_CONTENT);
+ String myGuid = artifact.getGuid();
+ content = WordUtil.addGUIDToDocument(myGuid, content);
+ stream = Streams.convertStringToInputStream(content, "UTF-8");
+ }
+ return stream;
+ } catch (IOException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ }
+
+ @Override
+ public String compare(Artifact baseVersion, Artifact newerVersion, IProgressMonitor monitor, PresentationType presentationType, boolean show) throws OseeCoreException {
+ if (baseVersion == null && newerVersion == null) throw new IllegalArgumentException(
+ "baseVersion and newerVersion can't both be null.");
+
+ Branch branch = (baseVersion != null ? baseVersion.getBranch() : newerVersion.getBranch());
+ IFile baseFile;
+ IFile newerFile;
+
+ if (baseVersion != null) {
+ if (presentationType == PresentationType.MERGE || presentationType == PresentationType.MERGE_EDIT) {
+ baseFile = renderForMerge(monitor, baseVersion, presentationType);
+ } else {
+ baseFile = renderForDiff(monitor, baseVersion);
+ }
+ } else {
+ baseFile = renderForDiff(monitor, branch);
+ }
+
+ if (newerVersion != null) {
+ if (presentationType == PresentationType.MERGE || presentationType == PresentationType.MERGE_EDIT) {
+ newerFile = renderForMerge(monitor, newerVersion, presentationType);
+ } else {
+ newerFile = renderForDiff(monitor, newerVersion);
+ }
+ } else {
+ newerFile = renderForDiff(monitor, branch);
+ }
+
+ return compare(baseVersion, newerVersion, baseFile, newerFile, presentationType, show);
+ }
+
+ @Override
+ public String compare(Artifact baseVersion, Artifact newerVersion, IFile baseFile, IFile newerFile, PresentationType presentationType, boolean show) throws OseeCoreException {
+ String diffPath;
+ String fileName = getStringOption("filename");
+ if (fileName == null || fileName.equals("")) {
+ if (baseVersion != null) {
+ String baseFileStr = baseFile.getLocation().toOSString();
+ diffPath =
+ baseFileStr.substring(0, baseFileStr.lastIndexOf(')') + 1) + " to " + (newerVersion != null ? newerVersion.getTransactionNumber() : " deleted") + baseFileStr.substring(baseFileStr.lastIndexOf(')') + 1);
+ } else {
+ String baseFileStr = newerFile.getLocation().toOSString();
+ diffPath =
+ baseFileStr.substring(0, baseFileStr.lastIndexOf('(') + 1) + "new " + baseFileStr.substring(baseFileStr.lastIndexOf('(') + 1);
+ }
+ } else {
+ String baseFileStr = baseFile.getLocation().toOSString();
+ diffPath = baseFileStr.substring(0, baseFileStr.lastIndexOf('\\')) + '\\' + fileName;
+ }
+
+ VbaWordDiffGenerator diffGenerator = new VbaWordDiffGenerator();
+ diffGenerator.initialize(presentationType == PresentationType.DIFF,
+ presentationType == PresentationType.MERGE_EDIT);
+ if (presentationType == PresentationType.MERGE_EDIT && baseVersion != null) {
+ addFileToWatcher(getRenderFolder(baseVersion.getBranch(), PresentationType.EDIT),
+ diffPath.substring(diffPath.lastIndexOf('\\') + 1));
+ diffGenerator.addComparison(baseFile, newerFile, diffPath, true);
+ diffGenerator.finish(diffPath.substring(0, diffPath.lastIndexOf('\\')) + "mergeDocs.vbs");
+ } else {
+ diffGenerator.addComparison(baseFile, newerFile, diffPath, false);
+ diffGenerator.finish(diffPath.substring(0, diffPath.lastIndexOf('\\')) + "/compareDocs.vbs");
+ }
+
+ return diffPath;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordCompareTest.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordCompareTest.java
new file mode 100644
index 00000000000..41d84669946
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordCompareTest.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.security.CodeSource;
+import java.security.ProtectionDomain;
+import javax.swing.JFileChooser;
+import javax.swing.filechooser.FileFilter;
+import org.eclipse.osee.framework.jdk.core.util.io.streams.StreamCatcher;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WordCompareTest {
+
+ static public File getFile(String description) {
+ File toReturn = new File("");
+
+ JFileChooser chooser = new JFileChooser();
+ chooser.setSelectedFile(toReturn);
+ chooser.setFileFilter(new FileFilter() {
+
+ @Override
+ public String getDescription() {
+ return "Select an Xml File";
+ }
+
+ public boolean accept(File file) {
+ return file.isDirectory() || (file.isFile() && file.getName().endsWith(".xml"));
+ }
+ });
+
+ int returnVal = chooser.showDialog(null, description);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ toReturn = chooser.getSelectedFile();
+ }
+
+ return toReturn;
+ }
+
+ private static URL getClassLocation(final Class<?> classToFind) {
+ URL result = null;
+ if (classToFind == null) {
+ throw new IllegalArgumentException("Class is null");
+ }
+ final String classAsResource = classToFind.getName().replace('.', '/').concat(".class");
+ final ProtectionDomain pd = classToFind.getProtectionDomain();
+ if (pd != null) {
+ final CodeSource cs = pd.getCodeSource();
+ if (cs != null) {
+ result = cs.getLocation();
+ }
+ if (result != null) {
+ // Convert a code source location into a full class file location
+ if (result.getProtocol().equals("file")) {
+ try {
+ if (result.toExternalForm().endsWith(".jar") || result.toExternalForm().endsWith(".zip"))
+ result = new URL("jar:".concat(result.toExternalForm()).concat("!/").concat(classAsResource));
+ else if (new File(result.getFile()).isDirectory()) result = new URL(result, classAsResource);
+ } catch (MalformedURLException ignore) {
+ }
+ }
+ }
+ }
+ if (result == null) {
+ // Try to find class definition as a resource
+ final ClassLoader classLoader = classToFind.getClassLoader();
+ result =
+ classLoader != null ? classLoader.getResource(classAsResource) : ClassLoader.getSystemResource(classAsResource);
+ }
+ return result;
+ }
+
+ public static File getFileSystemPath(String entry) {
+ File toReturn = null;
+ URL url = getClassLocation(WordCompareTest.class);
+ if (url != null) {
+ File temp = new File(url.getFile());
+ int cnt = 12;
+ while (!temp.getName().equals("bin") && cnt >= 0) {
+ temp = temp.getParentFile();
+ cnt--;
+ }
+ temp = temp.getParentFile();
+ toReturn = new File(temp.getAbsolutePath() + File.separator + entry);
+ }
+ return toReturn;
+ }
+
+ public static void main(String[] args) {
+
+ try {
+ String diffPath = System.getProperty("user.home") + File.separator + "DiffResults";
+ File baseFile = getFile("Select Base Xml File To Compare");
+ if (!baseFile.exists()) {
+ throw new IllegalStateException("baseFile doesn't exist => " + baseFile);
+ }
+
+ File newerFile = getFile("Select Newer Xml File To Compare");
+ if (!newerFile.exists()) {
+ throw new IllegalStateException("newerFile doesn't exist => " + newerFile);
+ }
+
+ File vbDiffScript = getFileSystemPath("support" + File.separator + "compareDocs.vbs");
+ if (!vbDiffScript.exists()) {
+ throw new IllegalStateException("vbDiffScript doesn't exist => " + vbDiffScript);
+ }
+
+ // quotes are neccessary because of Runtime.exec wraps the last element in quotes...crazy
+ String cmd[] =
+ {
+ "cmd",
+ "/s /c",
+ "\"" + vbDiffScript.getPath() + "\"",
+ "/author:CoolOseeUser\" /diffPath:\"" + diffPath + "\" /detectFormatChanges:true /ver1:\"" + baseFile.getAbsolutePath() + "\" /ver2:\"" + newerFile.getAbsolutePath()};
+
+ Process proc = Runtime.getRuntime().exec(cmd);
+
+ StreamCatcher errorCatcher = new StreamCatcher(proc.getErrorStream(), "ERROR");
+ StreamCatcher outputCatcher = new StreamCatcher(proc.getInputStream(), "OUTPUT");
+
+ errorCatcher.start();
+ outputCatcher.start();
+ proc.waitFor();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordRenderer.java
new file mode 100644
index 00000000000..3523a0a8734
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordRenderer.java
@@ -0,0 +1,51 @@
+/**
+ *
+ */
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.InputStream;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeStateException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.word.WordConverter;
+import org.eclipse.swt.program.Program;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public abstract class WordRenderer extends FileRenderer {
+ // We need MS Word, so look for the program that is for .doc files
+ private static final Program wordApp = Program.findProgram("doc");
+
+ /**
+ * @param rendererId
+ */
+ public WordRenderer(String rendererId) {
+ super(rendererId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getAssociatedExtension(org.eclipse.osee.framework.skynet.core.artifact.Artifact)
+ */
+ @Override
+ public String getAssociatedExtension(Artifact artifact) throws OseeCoreException {
+ return "xml";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer#getAssociatedProgram(org.eclipse.osee.framework.skynet.core.artifact.Artifact)
+ */
+ @Override
+ public Program getAssociatedProgram(Artifact artifact) throws OseeCoreException {
+ if (wordApp == null) {
+ throw new OseeStateException("No program associated with the extension .doc");
+ }
+ return wordApp;
+ }
+
+ @Override
+ public String generateHtml(Artifact artifact) throws OseeCoreException {
+ InputStream xml = getRenderInputStream(artifact, PresentationType.PREVIEW);
+ return WordConverter.toHtml(xml);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordTemplateRenderer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordTemplateRenderer.java
new file mode 100644
index 00000000000..355be5a63b5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordTemplateRenderer.java
@@ -0,0 +1,414 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.xml.namespace.QName;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.skynet.core.word.WordUtil;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.plugin.util.OseeData;
+import org.eclipse.osee.framework.ui.skynet.ArtifactExplorer;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordTemplateProcessor;
+import org.eclipse.osee.framework.ui.skynet.templates.TemplateManager;
+import org.w3c.dom.Element;
+
+import com.sun.org.apache.xml.internal.serialize.OutputFormat;
+import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
+
+/**
+ * Renders WordML content.
+ *
+ * @author Jeff C. Phillips
+ */
+public class WordTemplateRenderer extends WordRenderer implements ITemplateRenderer {
+ private static final Pattern pattern =
+ Pattern.compile("<v:imagedata[^>]*src=\"wordml://(\\d+\\.\\w+)\"[^>]*>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ public static final String WORD_RENDERER_EXTENSION = "org.eclipse.osee.framework.ui.skynet.word";
+ public static final String DEFAULT_SET_NAME = "Default";
+ public static final String ARTIFACT_NAME = "Word Renderer";
+ public static final String TEMPLATE_ATTRIBUTE = "Word Template";
+ public static final String ARTIFACT_SCHEMA = "http://eclipse.org/artifact.xsd";
+ private static final String EMBEDDED_OBJECT_NO = "w:embeddedObjPresent=\"no\"";
+ private static final String EMBEDDED_OBJECT_YES = "w:embeddedObjPresent=\"yes\"";
+ private static final String STYLES_END = "</w:styles>";
+ private static final String OLE_START = "<w:docOleData>";
+ private static final String OLE_END = "</w:docOleData>";
+ private static final QName fo = new QName("ns0", "unused_localname", ARTIFACT_SCHEMA);
+ public static final String UPDATE_PARAGRAPH_NUMBER_OPTION = "updateParagraphNumber";
+
+ private final WordTemplateProcessor templateProcessor = new WordTemplateProcessor(this);
+
+ /**
+ * @param rendererId
+ */
+ public WordTemplateRenderer(String rendererId) {
+ super(rendererId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#newInstance()
+ */
+ @Override
+ public WordTemplateRenderer newInstance() throws OseeCoreException {
+ return new WordTemplateRenderer(getId());
+ }
+
+ public void publishSRS(VariableMap variableMap) throws OseeCoreException {
+ templateProcessor.publishSRS(variableMap);
+ }
+
+ /**
+ * Creates a difference report for each artifact between baseArtifact and newerArtifact. Then produces a single
+ * report by combining each of the difference reports together for a single report.
+ */
+ @Override
+ public void compareArtifacts(final List<Artifact> baseArtifacts, final List<Artifact> newerArtifact, IProgressMonitor monitor, final Branch branch, PresentationType presentationType) throws OseeCoreException {
+ if (branch == null) {
+ throw new OseeArgumentException("Branch can not be null");
+ }
+
+ if (baseArtifacts.size() != newerArtifact.size()) {
+ throw new OseeArgumentException(
+ "base artifacts size: " + baseArtifacts.size() + " must match newer artifacts size: " + newerArtifact.size() + ".");
+ }
+
+ Jobs.startJob(new Job("Word Change Report") {
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ String fileName = getStringOption("fileName");
+
+ //if the file name is null we will give it a GUID
+ if (fileName == null) {
+ fileName = GUID.generateGuidStr() + ".xml";
+ }
+
+ monitor.beginTask("Word Change Report ", newerArtifact.size() * 2);
+ ArrayList<String> fileNames = new ArrayList<String>(newerArtifact.size());
+ IFolder baseFolder = getRenderFolder(branch, PresentationType.DIFF);
+ IFolder changeReportFolder = OseeData.getFolder(".diff/" + GUID.generateGuidStr());
+ String baseFileStr = "c:/UserData";
+ String localFileName = null;
+
+ VbaWordDiffGenerator generator = new VbaWordDiffGenerator();
+ generator.initialize(false, false);
+ for (int i = 0; i < newerArtifact.size(); i++) {
+ IFile baseFile =
+ renderToFile(baseFolder, getFilenameFromArtifact(null, PresentationType.DIFF), branch,
+ getRenderInputStream(baseArtifacts.get(i), PresentationType.DIFF), PresentationType.DIFF);
+ IFile newerFile =
+ renderToFile(baseFolder, getFilenameFromArtifact(null, PresentationType.DIFF), branch,
+ getRenderInputStream(newerArtifact.get(i), PresentationType.DIFF), PresentationType.DIFF);
+
+ baseFileStr = changeReportFolder.getLocation().toOSString();
+ localFileName = baseFileStr + "/" + GUID.generateGuidStr() + ".xml";
+ fileNames.add(localFileName);
+
+ monitor.setTaskName("Adding to Diff Script: " + (newerArtifact.get(i) == null ? baseArtifacts.get(i).getDescriptiveName() : newerArtifact.get(
+ i).getDescriptiveName()));
+ monitor.worked(1);
+
+ // support the cancel feature
+ if (monitor.isCanceled()) {
+ monitor.done();
+ return Status.CANCEL_STATUS;
+ }
+ generator.addComparison(baseFile, newerFile, localFileName, false);
+ //compare(baseFile, newerFile, fileName, false, plugin.getPluginStoreFile("support/compareDocs3.vbs"));
+
+ }
+ monitor.setTaskName("Running Diff Script");
+ generator.finish(baseFileStr + "/compareDocs.vbs");
+ //if (fileNames.size() == 1) {
+ // getAssociatedProgram(null).execute(baseFileStr + fileName);
+ // } else {
+ createAggregateArtifactDiffReport(fileNames, baseFileStr, null, baseFileStr + "/" + fileName, monitor);
+ // }
+ } catch (OseeCoreException ex) {
+ return new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, Status.OK, ex.getLocalizedMessage(), ex);
+ }
+ return Status.OK_STATUS;
+ }
+ });
+ }
+
+ private void createAggregateArtifactDiffReport(ArrayList<String> fileNames, String baseFileStr, Artifact artifact, String fileName, IProgressMonitor monitor) throws OseeCoreException {
+ monitor.setTaskName("Writing final document");
+ ArrayList<String> datas = new ArrayList<String>(fileNames.size());
+ int startIndex;
+ int endIndex;
+
+ for (String filename : fileNames) {
+ String data = AFile.readFile(filename);
+ startIndex = data.indexOf("<w:body>") + 8;
+ endIndex = data.indexOf("</w:body>");
+
+ data = data.substring(startIndex, endIndex);
+
+ Matcher m = pattern.matcher(data);
+ while (m.find()) {
+ String name = m.group(1);
+ data = data.replace(name, GUID.generateGuidStr() + name);
+ }
+
+ datas.add(data);
+ }
+
+ String firstFileName = fileNames.get(0);
+ String file = AFile.readFile(firstFileName);
+ datas.remove(0);
+ file = file.replace("</w:body>", Collections.toString("", datas) + "</w:body>");
+
+ if (!file.contains("xmlns:ns2=\"http")) {
+ file = file.replaceAll("ns2", "ns1");
+ }
+
+ if (!file.contains("xmlns:ns1=\"http")) {
+ file = file.replaceAll("ns1", "ns0");
+ }
+ if (fileName == null) {
+ fileName = baseFileStr + "/" + GUID.generateGuidStr() + "_diff.xml";
+ }
+ AFile.writeFile(fileName, file);
+
+ monitor.done();
+ getAssociatedProgram(artifact).execute(fileName);
+ }
+
+ @Override
+ public String compare(Artifact baseVersion, Artifact newerVersion, IProgressMonitor monitor, PresentationType presentationType, boolean show) throws OseeCoreException {
+ if (baseVersion == null && newerVersion == null) throw new OseeArgumentException(
+ "baseVersion and newerVersion can't both be null.");
+
+ Branch branch = (baseVersion != null ? baseVersion.getBranch() : newerVersion.getBranch());
+ IFile baseFile;
+ IFile newerFile;
+
+ if (baseVersion != null) {
+ if (presentationType == PresentationType.MERGE || presentationType == PresentationType.MERGE_EDIT) {
+ baseFile = renderForMerge(monitor, baseVersion, presentationType);
+ } else {
+ baseFile = renderForDiff(monitor, baseVersion);
+ }
+ } else {
+ baseFile = renderForDiff(monitor, branch);
+ }
+
+ if (newerVersion != null) {
+ if (presentationType == PresentationType.MERGE || presentationType == PresentationType.MERGE_EDIT) {
+ newerFile = renderForMerge(monitor, newerVersion, presentationType);
+ } else {
+ newerFile = renderForDiff(monitor, newerVersion);
+ }
+ } else {
+ newerFile = renderForDiff(monitor, branch);
+ }
+
+ return compare(baseVersion, newerVersion, baseFile, newerFile, presentationType, show);
+ }
+
+ @Override
+ public String compare(Artifact baseVersion, Artifact newerVersion, IFile baseFile, IFile newerFile, PresentationType presentationType, boolean show) throws OseeCoreException {
+ String diffPath;
+
+ String fileName = getStringOption("fileName");
+ if (fileName == null || fileName.equals("")) {
+ if (baseVersion != null) {
+ String baseFileStr = baseFile.getLocation().toOSString();
+ diffPath =
+ baseFileStr.substring(0, baseFileStr.lastIndexOf(')') + 1) + " to " + (newerVersion != null ? newerVersion.getTransactionNumber() : " deleted") + baseFileStr.substring(baseFileStr.lastIndexOf(')') + 1);
+ } else {
+ String baseFileStr = newerFile.getLocation().toOSString();
+ diffPath =
+ baseFileStr.substring(0, baseFileStr.lastIndexOf('(') + 1) + "new " + baseFileStr.substring(baseFileStr.lastIndexOf('(') + 1);
+ }
+ } else {
+ diffPath =
+ getRenderFolder(baseVersion.getBranch(), PresentationType.EDIT).getLocation().toOSString() + '\\' + fileName;
+ }
+
+ VbaWordDiffGenerator diffGenerator = new VbaWordDiffGenerator();
+ diffGenerator.initialize(presentationType == PresentationType.DIFF,
+ presentationType == PresentationType.MERGE_EDIT);
+
+ if (presentationType == PresentationType.MERGE_EDIT && baseVersion != null) {
+ addFileToWatcher(getRenderFolder(baseVersion.getBranch(), PresentationType.EDIT),
+ diffPath.substring(diffPath.lastIndexOf('\\') + 1));
+ diffGenerator.addComparison(baseFile, newerFile, diffPath, true);
+ diffGenerator.finish(diffPath.substring(0, diffPath.lastIndexOf('\\')) + "mergeDocs.vbs");
+ } else {
+ diffGenerator.addComparison(baseFile, newerFile, diffPath, false);
+ diffGenerator.finish(diffPath.substring(0, diffPath.lastIndexOf('\\')) + "/compareDocs.vbs");
+ }
+
+ return diffPath;
+ }
+
+ /**
+ * Displays a list of artifacts in the Artifact Explorer that could not be multi edited because they contained
+ * artifacts that had an OLEData attribute.
+ *
+ * @param artifacts
+ */
+ private void displayNotMultiEditArtifacts(final Collection<Artifact> artifacts) {
+ if (!artifacts.isEmpty()) {
+ Displays.ensureInDisplayThread(new Runnable() {
+
+ public void run() {
+ ArtifactExplorer.explore(artifacts);
+ }
+ });
+ }
+ }
+
+ public static QName getFoNamespace() {
+ return fo;
+ }
+
+ public static byte[] getFormattedContent(Element formattedItemElement) {
+ ByteArrayOutputStream data = new ByteArrayOutputStream((int) Math.pow(2, 10));
+ OutputFormat format = Jaxp.getCompactFormat(formattedItemElement.getOwnerDocument());
+ format.setOmitDocumentType(true);
+ format.setOmitXMLDeclaration(true);
+ XMLSerializer serializer = new XMLSerializer(data, format);
+
+ try {
+ for (Element e : Jaxp.getChildDirects(formattedItemElement))
+ serializer.serialize(e);
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+
+ return data.toByteArray();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.render.IRenderer#isValidFor(org.eclipse.osee.framework.skynet.core.artifact.Artifact)
+ */
+ public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) {
+ if (artifact instanceof WordArtifact && !((WordArtifact) artifact).isWholeWordArtifact()) {
+ return ARTIFACT_TYPE_MATCH;
+ }
+ return NO_MATCH;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getRenderInputStream(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String,
+ * org.eclipse.osee.framework.ui.skynet.render.PresentationType)
+ */
+ @Override
+ public InputStream getRenderInputStream(Artifact artifact, PresentationType presentationType) throws OseeCoreException {
+ ArrayList<Artifact> artifacts = new ArrayList<Artifact>(1);
+ if (artifact != null) {
+ artifacts.add(artifact);
+ }
+ return getRenderInputStream(artifacts, presentationType);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.render.FileRenderer#getRenderInputStream(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String,
+ * org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer.PresentationType)
+ */
+ @Override
+ public InputStream getRenderInputStream(List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException {
+ final List<Artifact> notMultiEditableArtifacts = new LinkedList<Artifact>();
+ String template;
+
+ if (artifacts.isEmpty()) {
+ // Still need to get a default template with a null artifact list
+ template = getTemplate(null, presentationType);
+ } else {
+ Artifact firstArtifact = artifacts.iterator().next();
+ template = getTemplate(firstArtifact, presentationType);
+
+ for (Artifact artifact : artifacts) {
+ Attribute<?> attribute = artifact.getSoleAttribute(WordAttribute.WORD_TEMPLATE_CONTENT);
+ if (attribute == null) {
+ attribute =
+ artifact.createAttribute(AttributeTypeManager.getType(WordAttribute.WORD_TEMPLATE_CONTENT), true);
+ }
+ if (presentationType == PresentationType.DIFF && attribute != null && ((WordAttribute) attribute).mergeMarkupPresent()) {
+ throw new OseeCoreException(
+ "Trying to diff the " + artifact.getDescriptiveName() + " artifact on the " + artifact.getBranch().getBranchShortName() + " branch, which has tracked changes turned on. All tracked changes must be removed before the artifacts can be compared.");
+
+ }
+ }
+
+ if (presentationType == PresentationType.EDIT && artifacts.size() > 1) {
+ // currently we can't support the editing of multiple artifacts with OLE data
+ for (Artifact artifact : artifacts) {
+ if (!artifact.getSoleAttributeValue(WordAttribute.OLE_DATA_NAME, "").equals("") && presentationType == PresentationType.EDIT) {
+ notMultiEditableArtifacts.add(artifact);
+ }
+ }
+ displayNotMultiEditArtifacts(notMultiEditableArtifacts);
+ artifacts.removeAll(notMultiEditableArtifacts);
+ } else { // support OLE data when appropriate
+ if (!firstArtifact.getSoleAttributeValue(WordAttribute.OLE_DATA_NAME, "").equals("")) {
+ template = template.replaceAll(EMBEDDED_OBJECT_NO, EMBEDDED_OBJECT_YES);
+ template =
+ template.replaceAll(STYLES_END, STYLES_END + OLE_START + firstArtifact.getSoleAttributeValue(
+ WordAttribute.OLE_DATA_NAME, "") + OLE_END);
+ }
+ }
+ }
+
+ template = WordUtil.removeGUIDFromTemplate(template);
+ return templateProcessor.applyTemplate(artifacts, template, null, presentationType);
+ }
+
+ protected String getTemplate(Artifact artifact, PresentationType presentationType) throws OseeCoreException {
+ return TemplateManager.getTemplate(this, artifact, presentationType.name(), getStringOption(TEMPLATE_OPTION)).getSoleAttributeValue(
+ WordAttribute.WHOLE_WORD_CONTENT);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/IWordMlProducer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/IWordMlProducer.java
new file mode 100644
index 00000000000..adc517476fd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/IWordMlProducer.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render.word;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public interface IWordMlProducer {
+
+ public VariableMap process(VariableMap variableMap) throws OseeCoreException;
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/SrsProducer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/SrsProducer.java
new file mode 100644
index 00000000000..e9f0b59e4e8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/SrsProducer.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render.word;
+
+import java.util.ArrayList;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.utility.Requirements;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class SrsProducer implements IWordMlProducer {
+
+ public VariableMap process(VariableMap variableMap) throws OseeCoreException {
+ if (variableMap == null) throw new IllegalArgumentException("variableMap must not be null");
+
+ String name = variableMap.getString("Name");
+ Branch branch = variableMap.getBranch("Branch");
+ Artifact root = ArtifactPersistenceManager.getDefaultHierarchyRootArtifact(branch);
+ Artifact softwareRequirement = root.getChild(Requirements.SOFTWARE_REQUIREMENTS);
+ Artifact crewInterface = softwareRequirement.getChild("Crew Interface");
+ Artifact subsystemManagement = softwareRequirement.getChild("Subsystem Management");
+ Artifact appendices = softwareRequirement.getChild("SRS Appendices");
+
+ ArrayList<Artifact> artifacts = new ArrayList<Artifact>(500);
+
+ process(crewInterface, artifacts, name);
+ process(subsystemManagement, artifacts, name);
+ process(appendices, artifacts, name);
+
+ variableMap.setValue("srsProducer.objects", artifacts);
+ return variableMap;
+ }
+
+ private void process(Artifact parent, ArrayList<Artifact> artifacts, String name) throws OseeCoreException {
+ if (parent.hasChild(name)) {
+ artifacts.add(parent.getChild(name));
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/WordMLProducer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/WordMLProducer.java
new file mode 100644
index 00000000000..ee7c01e0d81
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/WordMLProducer.java
@@ -0,0 +1,282 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.render.word;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeWrappedException;
+import org.eclipse.osee.framework.jdk.core.util.xml.Xml;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class WordMLProducer {
+ public static final String RGB_RED = "FF0000";
+ public static final String RGB_GREEN = "00FF00";
+ public static final String RGB_BLUE = "0000FF";
+
+ private static final String FILE_NAME = "fileName";
+
+ public static final String LISTNUM_FIELD_HEAD = "<w:pPr><w:rPr><w:vanish/></w:rPr></w:pPr>";
+ public static final String LISTNUM_FIELD_TAIL =
+ "<w:r><w:rPr><w:vanish/></w:rPr><w:fldChar w:fldCharType=\"begin\"/></w:r><w:r><w:rPr><w:vanish/></w:rPr><w:instrText> LISTNUM \"listreset\" \\l 1 \\s 0 </w:instrText></w:r><w:r><w:rPr><w:vanish/></w:rPr><w:fldChar w:fldCharType=\"end\"/><wx:t wx:val=\" .\"/></w:r>";
+
+ //This regular expression pulls out all of the stuff after the inserted listnum reordering stuff. This needs to be
+ //here so that we remove unwanted template information from single editing
+ public static final String LISTNUM_FIELD_TAIL_REG_EXP =
+ "<w:r(>| .*?>)<w:rPr><w:vanish/></w:rPr><w:fldChar w:fldCharType=\"begin\"/></w:r><w:r(>| .*?>)<w:rPr><w:vanish/></w:rPr><w:instrText> LISTNUM \"listreset\"";
+ public static final String LISTNUM_FIELD = LISTNUM_FIELD_HEAD + LISTNUM_FIELD_TAIL;
+ private static final String SUB_DOC =
+ "<wx:sect><w:p><w:pPr><w:sectPr><w:pgSz w:w=\"12240\" w:h=\"15840\"/><w:pgMar w:top=\"1440\" w:right=\"1800\" w:bottom=\"1440\" w:left=\"1800\" w:header=\"720\" w:footer=\"720\" w:gutter=\"0\"/><w:cols w:space=\"720\"/><w:docGrid w:line-pitch=\"360\"/></w:sectPr></w:pPr></w:p><w:subDoc w:link=\"" + FILE_NAME + "\"/></wx:sect><wx:sect><wx:sub-section><w:p><w:pPr><w:pStyle w:val=\"Heading1\"/></w:pPr></w:p><w:sectPr><w:type w:val=\"continuous\"/><w:pgSz w:w=\"12240\" w:h=\"15840\"/><w:pgMar w:top=\"1440\" w:right=\"1800\" w:bottom=\"1440\" w:left=\"1800\" w:header=\"720\" w:footer=\"720\" w:gutter=\"0\"/><w:cols w:space=\"720\"/><w:docGrid w:line-pitch=\"360\"/></w:sectPr></wx:sub-section></wx:sect>";
+ private static final String HYPER_LINK_DOC =
+ "<w:p><w:hlink w:dest=\"fileName\"><w:r wsp:rsidRPr=\"00CE6681\"><w:rPr><w:rStyle w:val=\"Hyperlink\"/></w:rPr><w:t>fileName</w:t></w:r></w:hlink></w:p>";
+ private Appendable strB;
+ private final int[] outlineNumber;
+ private int outlineLevel;
+ private int flattenedLevelCount;
+ private boolean previousPageLandsacpe;
+ private Map<String, Integer> alphabetMap;
+
+ public WordMLProducer(Appendable strB) {
+ this.strB = strB;
+ this.outlineNumber = new int[10]; // word supports 9 levels of outlining; index this array from 1 to 9
+ this.outlineLevel = 0;
+ this.flattenedLevelCount = 0;
+
+ this.alphabetMap = new HashMap<String, Integer>();
+
+ alphabetMap.put("A.0", 1);
+ alphabetMap.put("B.0", 2);
+ alphabetMap.put("C.0", 3);
+ }
+
+ public CharSequence startOutlineSubSection(CharSequence font, CharSequence headingText, String outlineType) throws OseeWrappedException {
+ if (okToStartSubsection()) {
+ outlineNumber[++outlineLevel]++;
+ CharSequence paragraphNumber = getOutlineNumber();
+ startOutlineSubSection((outlineType != null ? outlineType : "Heading") + outlineLevel, paragraphNumber, font,
+ headingText);
+
+ return paragraphNumber;
+ } else {
+ flattenedLevelCount++;
+ endOutlineSubSection(true);
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, "Outline level flattened, outline can only go 9 levels deep");
+ if (false) {
+ startParagraph();
+ addTextInsideParagraph("OUTLINE LEVEL FLATTENED: " + headingText, RGB_RED);
+ endParagraph();
+ }
+ return startOutlineSubSection(font, headingText, outlineType);
+ }
+ };
+
+ private void append(CharSequence value) throws OseeWrappedException {
+ try {
+ strB.append(value);
+ } catch (IOException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ }
+
+ public void startOutlineSubSection(CharSequence style, CharSequence outlineNumber, CharSequence font, CharSequence headingText) throws OseeWrappedException {
+ append("<wx:sub-section>");
+ append("<w:p><w:pPr><w:pStyle w:val=\"");
+ append(style);
+ append("\"/><w:listPr><wx:t wx:val=\"");
+ append(outlineNumber);
+ append("\" wx:wTabBefore=\"540\" wx:wTabAfter=\"90\"/><wx:font wx:val=\"");
+ append(font);
+ append("\"/></w:listPr></w:pPr><w:r><w:t>");
+ append(Xml.escape(headingText));
+ append("</w:t></w:r></w:p>");
+ }
+
+ public String setHeadingNumbers(String outLineNumber, String template) {
+ if (outLineNumber == null) {
+ return template;
+ }
+
+ int index = 1;
+ String[] numbers = outLineNumber.split("\\.");
+
+ for (String number : numbers) {
+ Matcher matcher =
+ Pattern.compile(String.format("<w:start w:val=\"(\\d*?)\"/><w:pStyle w:val=\"Heading%d\"/>", index)).matcher(
+ "");
+ matcher.reset(template);
+ template =
+ matcher.replaceAll(String.format("<w:start w:val=\"%s\"/><w:pStyle w:val=\"Heading%d\"/>", number, index));
+ index++;
+ }
+ return template;
+ }
+
+ public String setAppendixStartLetter(char chr, String template) {
+ template =
+ template.replace(
+ "<w:start w:val=\"1\"/><w:nfc w:val=\"3\"/><w:pStyle w:val=\"APPENDIX1\"/>",
+ "<w:start w:val=\"" + (Character.toLowerCase(chr) - 'a' + 1) + "\"/><w:nfc w:val=\"3\"/><w:pStyle w:val=\"APPENDIX1\"/>");
+ return template;
+ }
+
+ public void endOutlineSubSection() throws OseeWrappedException {
+ endOutlineSubSection(false);
+ }
+
+ private void endOutlineSubSection(boolean force) throws OseeWrappedException {
+ if (!force && flattenedLevelCount > 0) {
+ flattenedLevelCount--;
+ } else {
+ append("</wx:sub-section>");
+ if (outlineLevel + 1 < outlineNumber.length) outlineNumber[outlineLevel + 1] = 0;
+ outlineLevel--;
+ }
+ }
+
+ public void addWordMl(CharSequence wordMl) throws OseeWrappedException {
+ append(wordMl);
+ }
+
+ public void startParagraph() throws OseeWrappedException {
+ append("<w:p>");
+ }
+
+ public void createSubDoc(String fileName) throws OseeWrappedException {
+ if (fileName == null || fileName.length() == 0) {
+ throw new IllegalArgumentException("The file name can not be null or empty.");
+ }
+
+ append(SUB_DOC.replace(FILE_NAME, fileName));
+ }
+
+ public void createHyperLinkDoc(String fileName) throws OseeWrappedException {
+ if (fileName == null || fileName.length() == 0) {
+ throw new IllegalArgumentException("The file name can not be null or empty.");
+ }
+
+ append(HYPER_LINK_DOC.replace(FILE_NAME, fileName));
+ }
+
+ public void resetListValue() throws OseeWrappedException {
+ startParagraph();
+ //The listnum also acts a template delimiter to know when to remove unwanted content.
+ addWordMl(LISTNUM_FIELD);
+ endParagraph();
+ }
+
+ public void endParagraph() throws OseeWrappedException {
+ append("</w:p>");
+ }
+
+ public void addParagraph(CharSequence text) throws OseeWrappedException {
+ append("<w:p><w:r><w:t>");
+ append(Xml.escape(text));
+ append("</w:t></w:r></w:p>");
+ }
+
+ public void addParagraphBold(CharSequence text) throws OseeWrappedException {
+ append("<w:p><w:r><w:rPr><w:b/></w:rPr><w:t>");
+ append(Xml.escape(text));
+ append("</w:t><w:rPr><w:b/></w:rPr></w:r></w:p>");
+ }
+
+ public void addTextInsideParagraph(CharSequence text) throws OseeWrappedException {
+ append("<w:r><w:t>");
+ append(Xml.escape(text));
+ append("</w:t></w:r>");
+ }
+
+ public void addTextInsideParagraph(CharSequence text, String rgbHexColor) throws OseeWrappedException {
+ if (rgbHexColor == null) throw new IllegalArgumentException("rgbHexColor can not be null");
+ if (rgbHexColor.length() != 6) throw new IllegalArgumentException(
+ "rgbHexColor should be a hex string 6 characters long");
+
+ append("<w:r><w:rPr><w:color w:val=\"");
+ append(rgbHexColor);
+ append("\"/></w:rPr>");
+ append("<w:t>");
+ append(Xml.escape(text));
+ append("</w:t></w:r>");
+ }
+
+ public void addOleData(CharSequence oleData) throws OseeWrappedException {
+ append("<w:docOleData>");
+ append(oleData);
+ append("</w:docOleData>");
+ }
+
+ private CharSequence getOutlineNumber() throws OseeWrappedException {
+ StringBuilder strB = new StringBuilder();
+ for (int i = 1; i < outlineLevel; i++) {
+ strB.append(String.valueOf(outlineNumber[i]));
+ strB.append(".");
+ }
+ strB.append(String.valueOf(outlineNumber[outlineLevel]));
+ return strB;
+ }
+
+ public boolean okToStartSubsection() {
+ return outlineLevel < 9;
+ }
+
+ /**
+ * @param nextOutlineNumber
+ */
+ public void setNextParagraphNumberTo(String nextOutlineNumber) {
+ String[] nextOutlineNumbers = nextOutlineNumber.split("\\.");
+ Arrays.fill(outlineNumber, 0);
+
+ for (int i = 0; i < nextOutlineNumbers.length; i++) {
+
+ outlineNumber[i + 1] = Integer.parseInt(nextOutlineNumbers[i]);
+ }
+ outlineNumber[nextOutlineNumbers.length]--;
+ outlineLevel = nextOutlineNumbers.length - 1;
+ }
+
+ /**
+ * Sets the page layout to either portrait/landscape depending on the artifacts pageType attribute value. Note: This
+ * call should be done after processing each artifact so if a previous artifact was landscaped the following artifact
+ * would be set back to portrait.
+ *
+ * @throws OseeCoreException
+ */
+ public void setPageLayout(Artifact artifact) throws OseeCoreException {
+ String pageTypeValue = null;
+ if (artifact.isAttributeTypeValid("Page Type")) {
+ pageTypeValue = artifact.getSoleAttributeValue("Page Type", "Portrait");
+ }
+
+ boolean landscape = (pageTypeValue != null && pageTypeValue.equals("Landscape"));
+
+ if (landscape || previousPageLandsacpe) {
+ append("<w:p>");
+ append("<w:pPr>");
+ append("<w:sectPr>");
+ append(landscape ? "<w:pgSz w:w=\"15840\" w:h=\"12240\" w:orient=\"landscape\" w:code=\"1\" />" : "<w:pgSz w:w=\"12240\" w:h=\"15840\" w:code=\"1\" />");
+ append("</w:sectPr>");
+ append("</w:pPr>");
+ append("</w:p>");
+
+ previousPageLandsacpe = landscape;
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/WordTemplateProcessor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/WordTemplateProcessor.java
new file mode 100644
index 00000000000..98071269552
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/WordTemplateProcessor.java
@@ -0,0 +1,699 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render.word;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.CharacterCodingException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeWrappedException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.io.CharBackedInputStream;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.skynet.core.utility.Requirements;
+import org.eclipse.osee.framework.skynet.core.word.WordUtil;
+import org.eclipse.osee.framework.ui.plugin.util.AIFile;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.ArtifactExplorer;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer;
+import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
+import org.eclipse.osee.framework.ui.skynet.render.WordTemplateRenderer;
+
+/**
+ * @author Robert A. Fisher
+ * @author Jeff C. Phillips
+ * @author Ryan D. Brooks
+ * @author Andrew M. Finkbeiner
+ */
+public class WordTemplateProcessor {
+ private static final String ARTIFACT = "Artifact";
+ private static final String EXTENSION_PROCESSOR = "Extension_Processor";
+ private static final String KEY = "Key";
+
+ private static final Pattern namePattern =
+ Pattern.compile("<((\\w+:)?(Name))>(.*?)</\\1>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern outlineTypePattern =
+ Pattern.compile("<((\\w+:)?(OutlineType))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern outlineNumberPattern =
+ Pattern.compile("<((\\w+:)?(Number))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern argumentElementsPattern =
+ Pattern.compile("<((\\w+:)?(Argument))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern keyValueElementsPattern =
+ Pattern.compile("<((\\w+:)?(Key|Value))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern subDocElementsPattern =
+ Pattern.compile("<((\\w+:)?(SubDoc))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+
+ private static final Pattern setNamePattern =
+ Pattern.compile("<(\\w+:)?Set_Name>(.*?)</(\\w+:)?Set_Name>", Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern headElementsPattern =
+ Pattern.compile("<((\\w+:)?(" + ARTIFACT + "|" + EXTENSION_PROCESSOR + "))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern attributeElementsPattern =
+ Pattern.compile("<((\\w+:)?(Attribute))>(.*?)</\\3>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern internalAttributeElementsPattern =
+ Pattern.compile("<((\\w+:)?(Label|Outline|Name|Format|Editable))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+
+ private static final Pattern outlineElementsPattern =
+ Pattern.compile("<((\\w+:)?(Outline))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern internalOutlineElementsPattern =
+ Pattern.compile("<((\\w+:)?(HeadingAttribute|RecurseChildren|Number))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+
+ private static final String[] NUMBER =
+ new String[] {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
+
+ private String slaveTemplate;
+ private boolean outlining;
+ private boolean recurseChildren;
+ private String outlineNumber;
+ private String headingAttributeName;
+ private List<AttributeElement> attributeElements = new LinkedList<AttributeElement>();
+ final List<Artifact> nonTemplateArtifacts = new LinkedList<Artifact>();
+ private Set<String> ignoreAttributeExtensions = new HashSet<String>();
+ private int previousTemplateCopyIndex;
+ private WordTemplateRenderer renderer;
+
+ public WordTemplateProcessor(WordTemplateRenderer renderer) {
+ this.renderer = renderer;
+ loadIgnoreAttributeExtensions();
+ }
+
+ /**
+ * Parse through template to find xml defining artifact sets and replace it with the result of publishing those
+ * artifacts Only used by Publish SRS
+ *
+ * @throws IOException
+ */
+ public void publishSRS(VariableMap variableMap) throws OseeCoreException {
+ Artifact srsMasterTemplate =
+ ArtifactQuery.getArtifactFromTypeAndName("Renderer Template", "srsMasterTemplate",
+ BranchManager.getCommonBranch());
+ String masterTemplate = srsMasterTemplate.getSoleAttributeValue(WordAttribute.WHOLE_WORD_CONTENT, "");
+
+ Artifact srsSlaveTemplate =
+ ArtifactQuery.getArtifactFromTypeAndName("Renderer Template", "srsSlaveTemplate",
+ BranchManager.getCommonBranch());
+ slaveTemplate = srsSlaveTemplate.getSoleAttributeValue(WordAttribute.WHOLE_WORD_CONTENT, "");
+
+ IFolder folder = FileSystemRenderer.ensureRenderFolderExists(PresentationType.PREVIEW);
+ String fileName = "SRS_" + Lib.getDateTimeString() + ".xml";
+ AIFile.writeToFile(folder.getFile(fileName), applySRSTemplate(variableMap, masterTemplate, folder, null, null));
+ }
+
+ /**
+ * Parse through template to find xml defining artifact sets and replace it with the result of publishing those
+ * artifacts. Only used by Publish SRS
+ *
+ * @throws IOException
+ */
+ private InputStream applySRSTemplate(VariableMap variableMap, String template, IFolder folder, String nextParagraphNumber, String outlineType) throws OseeCoreException {
+ WordMLProducer wordMl;
+ CharBackedInputStream charBak;
+ try {
+ charBak = new CharBackedInputStream();
+ wordMl = new WordMLProducer(charBak);
+ template = handleSettingParagraphNumbersForSRS(template, outlineType, nextParagraphNumber, wordMl);
+ } catch (CharacterCodingException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ template = WordUtil.stripSpellCheck(template);
+
+ Matcher matcher = headElementsPattern.matcher(template);
+ int lastEndIndex = 0;
+ while (matcher.find()) {
+ // Write the part of the template between the elements
+ wordMl.addWordMl(template.substring(lastEndIndex, matcher.start()));
+
+ lastEndIndex = matcher.end();
+ String elementType = matcher.group(3);
+ String elementValue = matcher.group(4);
+
+ if (elementType.equals(ARTIFACT)) {
+ extractOutliningOptions(elementValue);
+ Matcher setNameMatcher = setNamePattern.matcher(elementValue);
+ setNameMatcher.find();
+ String artifactSetName = WordUtil.textOnly(setNameMatcher.group(2));
+ processArtifactSet(elementValue, variableMap.getArtifacts(artifactSetName), wordMl, outlineType,
+ PresentationType.PREVIEW);
+ } else if (elementType.equals(EXTENSION_PROCESSOR)) {
+ try {
+ processExtensionTemplate(elementValue, variableMap, folder, wordMl);
+ } catch (CoreException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ } else {
+ throw new OseeArgumentException("Invalid input: " + elementType);
+ }
+ }
+ // Write out the last of the template
+ wordMl.addWordMl(template.substring(lastEndIndex));
+
+ displayNonTemplateArtifacts(nonTemplateArtifacts);
+ return charBak;
+ }
+
+ /**
+ * Parse through a template to find XML defining artifact sets and replace it with the result of publishing those
+ * artifacts, it will also assign the artifacts paragraph number to the starting heading numbers in publishing.
+ *
+ * @throws Exception
+ */
+ public InputStream applyTemplate(List<Artifact> artifacts, String template, String outlineType, PresentationType presentationType) throws OseeCoreException {
+ CharBackedInputStream charBak;
+ try {
+ charBak = new CharBackedInputStream();
+ } catch (CharacterCodingException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ WordMLProducer wordMl = new WordMLProducer(charBak);
+ previousTemplateCopyIndex = 0;
+
+ outlineNumber = peekAtFirstArtifactToGetParagraphNumber(template, null, artifacts);
+ //modifications to the template must be done before the matcher
+ template = wordMl.setHeadingNumbers(outlineNumber, template);
+
+ template = WordUtil.stripSpellCheck(template);
+
+ Matcher matcher = headElementsPattern.matcher(template);
+
+ while (matcher.find()) {
+ String elementType = matcher.group(3);
+ String elementValue = matcher.group(4);
+
+ if (elementType.equals(ARTIFACT)) {
+ extractOutliningOptions(elementValue);
+
+ if (presentationType == PresentationType.EDIT && artifacts.size() == 1) {
+ // for single edit override outlining options
+ outlining = false;
+ }
+
+ // write out the template up to the start of the artifact element (but don't change copyIndex because there are nested elements in the artifact element
+ wordMl.addWordMl(template.substring(previousTemplateCopyIndex, matcher.start()));
+ previousTemplateCopyIndex = matcher.end();
+ processArtifactSet(elementValue, artifacts, wordMl, outlineType, presentationType);
+
+ } else {
+ throw new IllegalArgumentException("Invalid input: " + elementType);
+ }
+ }
+ // Write out the last of the template
+ wordMl.addWordMl(template.substring(previousTemplateCopyIndex));
+ displayNonTemplateArtifacts(nonTemplateArtifacts);
+ return charBak;
+ }
+
+ private void writeTemplateBetweenElements(WordMLProducer wordMl, String template, Matcher matcher) throws OseeWrappedException {
+ wordMl.addWordMl(template.substring(previousTemplateCopyIndex, matcher.start()));
+ previousTemplateCopyIndex = matcher.end();
+ }
+
+ private String handleSettingParagraphNumbersForSRS(String template, String outlineType, String nextParagraphNumber, WordMLProducer wordMl) throws CharacterCodingException {
+ boolean appendixOutlineType = outlineType != null && outlineType.equalsIgnoreCase("APPENDIX");
+
+ if (appendixOutlineType) {
+ // Example of appendix number: A.0
+ char[] chars = nextParagraphNumber.toCharArray();
+ template = wordMl.setAppendixStartLetter(chars[0], template);
+ } else {
+ template = wordMl.setHeadingNumbers(nextParagraphNumber, template);
+ }
+
+ if (nextParagraphNumber != null && !appendixOutlineType) {
+ wordMl.setNextParagraphNumberTo(nextParagraphNumber);
+ }
+ return template;
+ }
+
+ protected String peekAtFirstArtifactToGetParagraphNumber(String template, String nextParagraphNumber, List<Artifact> artifacts) throws OseeCoreException {
+ String startParagraphNumber = "1";
+ Matcher matcher = headElementsPattern.matcher(template);
+
+ if (matcher.find()) {
+ String elementType = matcher.group(3);
+
+ if (elementType.equals(ARTIFACT)) {
+ if (!artifacts.isEmpty()) {
+ Artifact artifact = artifacts.iterator().next();
+ if (artifact.isAttributeTypeValid("Imported Paragraph Number")) {
+ String paragraphNum = artifact.getSoleAttributeValue("Imported Paragraph Number", "");
+ if (paragraphNum != null && !paragraphNum.equals("")) {
+ startParagraphNumber = paragraphNum;
+ }
+ }
+ }
+ }
+ }
+ return startParagraphNumber;
+ }
+
+ private void processArtifactSet(final String artifactElement, final List<Artifact> artifacts, final WordMLProducer wordMl, final String outlineType, PresentationType presentationType) throws OseeCoreException {
+ nonTemplateArtifacts.clear();
+ if (outlineNumber != null) {
+ wordMl.setNextParagraphNumberTo(outlineNumber);
+ }
+
+ extractSkynetAttributeReferences(getArtifactSetXml(artifactElement));
+
+ for (Artifact artifact : artifacts) {
+ processObjectArtifact(artifact, wordMl, outlineType, presentationType, artifacts.size() > 1);
+ }
+ }
+
+ /**
+ * Only used by Publish SRS
+ *
+ * @throws CoreException
+ */
+ private void processExtensionTemplate(String elementValue, VariableMap variableMap, IFolder folder, WordMLProducer wordMl) throws OseeCoreException, CoreException {
+ String extensionName;
+ String subdocumentName = null;
+ boolean doSubDocuments = false;
+ String nextParagraphNumber = null;
+ String outlineType = null;
+
+ Matcher matcher = outlineNumberPattern.matcher(elementValue);
+ if (matcher.find()) {
+ nextParagraphNumber = WordUtil.textOnly(matcher.group(4));
+ }
+
+ matcher = outlineTypePattern.matcher(elementValue);
+ if (matcher.find()) {
+ outlineType = WordUtil.textOnly(matcher.group(4));
+ }
+
+ matcher = namePattern.matcher(elementValue);
+ if (matcher.find()) {
+ extensionName = WordUtil.textOnly(matcher.group(4));
+ } else {
+ throw new IllegalArgumentException("Schema must contain an extension name.");
+ }
+
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IExtension extension =
+ registry.getExtension("org.eclipse.osee.framework.ui.skynet.WordMlProducer", extensionName);
+
+ if (extension != null) {
+ matcher = subDocElementsPattern.matcher(elementValue);
+
+ if (matcher.find()) {
+ subdocumentName = WordUtil.textOnly(matcher.group(4));
+ doSubDocuments = true;
+ }
+
+ IConfigurationElement[] configElements = null;
+ configElements = extension.getConfigurationElements();
+ for (int j = 0; j < configElements.length; j++) {
+ IWordMlProducer producer = (IWordMlProducer) configElements[j].createExecutableExtension("class");
+
+ matcher = argumentElementsPattern.matcher(elementValue);
+
+ VariableMap newVariableMap = doSubDocuments ? new VariableMap() : null;
+
+ while (matcher.find()) {
+ matcher = keyValueElementsPattern.matcher(matcher.group(4));
+
+ String key = null;
+ while (matcher.find()) {
+ String type = WordUtil.textOnly(matcher.group(3));
+
+ if (type.equalsIgnoreCase(KEY)) {
+ key = WordUtil.textOnly(matcher.group(4));
+ } else {
+ String value = WordUtil.textOnly(matcher.group(4));
+
+ if (doSubDocuments) {
+ newVariableMap.setValue(key, value);
+ } else {
+ variableMap.setValue(key, value);
+ }
+ }
+ }
+ }
+
+ if (doSubDocuments) {
+ newVariableMap.setValue("Branch", variableMap.getBranch("Branch"));
+ String subDocFileName = subdocumentName + ".xml";
+ producer.process(newVariableMap);
+ AIFile.writeToFile(folder.getFile(subDocFileName), applySRSTemplate(newVariableMap, slaveTemplate,
+ folder, nextParagraphNumber, outlineType));
+
+ wordMl.createHyperLinkDoc(subDocFileName);
+ // wordMl.createSubDoc(subDocFileName);
+ } else {
+ producer.process(variableMap);
+ }
+ }
+ }
+ }
+
+ private void extractOutliningOptions(String artifactElement) {
+ Matcher matcher = outlineElementsPattern.matcher(artifactElement);
+
+ if (matcher.find()) {
+ matcher = internalOutlineElementsPattern.matcher(matcher.group(4));
+ outlining = true;
+
+ // Default values for optional/unspecified parameters
+ recurseChildren = false;
+
+ while (matcher.find()) {
+ String elementType = matcher.group(3);
+ String value = WordUtil.textOnly(matcher.group(4));
+
+ if (elementType.equals("HeadingAttribute")) {
+ headingAttributeName = value;
+ } else if (elementType.equals("RecurseChildren")) {
+ recurseChildren = Boolean.parseBoolean(value);
+ } else if (elementType.equals("Number")) {
+ outlineNumber = value;
+ }
+ }
+ } else {
+ outlining = false;
+ recurseChildren = false;
+ headingAttributeName = null;
+ }
+ }
+
+ private void processObjectArtifact(Artifact artifact, WordMLProducer wordMl, String outlineType, PresentationType presentationType, boolean multipleArtifacts) throws OseeCoreException {
+ if (artifact instanceof WordArtifact && !((WordArtifact) artifact).isWholeWordArtifact()) {
+ if (outlining) {
+ String headingText = artifact.getSoleAttributeValue(headingAttributeName, "");
+ CharSequence paragraphNumber = wordMl.startOutlineSubSection("Times New Roman", headingText, outlineType);
+
+ VariableMap options = renderer.getOptions();
+ if (renderer.getBooleanOption(WordTemplateRenderer.UPDATE_PARAGRAPH_NUMBER_OPTION)) {
+ if (artifact.isAttributeTypeValid("Imported Paragraph Number")) {
+ artifact.setSoleAttributeValue("Imported Paragraph Number", paragraphNumber.toString());
+ artifact.persistAttributes((SkynetTransaction) options.getValue(WordTemplateRenderer.TRANSACTION_OPTION));
+ }
+ }
+ }
+ processAttributes(artifact, wordMl, presentationType, multipleArtifacts);
+ if (recurseChildren) {
+ for (Artifact childArtifact : artifact.getChildren()) {
+ processObjectArtifact(childArtifact, wordMl, outlineType, presentationType, multipleArtifacts);
+ }
+ }
+ if (outlining) {
+ wordMl.endOutlineSubSection();
+ }
+ } else {
+ nonTemplateArtifacts.add(artifact);
+ }
+ }
+
+ private void processAttributes(Artifact artifact, WordMLProducer wordMl, PresentationType presentationType, boolean multipleArtifacts) throws OseeCoreException {
+ for (AttributeElement attributeElement : attributeElements) {
+ String attributeName = attributeElement.getAttributeName();
+
+ if (attributeElement.getAttributeName().equals("*")) {
+ for (String attributeTypeName : orderAttributeNames(artifact.getAttributeTypes())) {
+ if (!outlining || !attributeTypeName.equals(headingAttributeName)) {
+ processAttribute(artifact, wordMl, attributeElement, attributeTypeName, true, presentationType,
+ multipleArtifacts);
+ }
+ }
+ } else {
+ if (artifact.isAttributeTypeValid(attributeName)) {
+ processAttribute(artifact, wordMl, attributeElement, attributeName, false, presentationType,
+ multipleArtifacts);
+ } else {
+ throw new OseeCoreException(String.format("Invalid attribute type [%s]", attributeName));
+ }
+ }
+ }
+
+ wordMl.setPageLayout(artifact);
+ }
+
+ private void processAttribute(Artifact artifact, WordMLProducer wordMl, AttributeElement attributeElement, String attributeTypeName, boolean allAttrs, PresentationType presentationType, boolean multipleArtifacts) throws OseeCoreException {
+ String format = attributeElement.getFormat();
+
+ // This is for SRS Publishing. Do not publish unspecified attributes
+ if (!allAttrs && (attributeTypeName.equals(Requirements.PARTITION) || attributeTypeName.equals("Safety Criticality"))) {
+ if (artifact.isAttributeTypeValid(Requirements.PARTITION)) {
+ for (Attribute<?> partition : artifact.getAttributes(Requirements.PARTITION)) {
+ if (partition.getValue().equals("Unspecified")) {
+ return;
+ }
+ }
+ }
+ }
+
+ if (attributeTypeName.equals("TIS Traceability")) {
+ for (Artifact requirement : artifact.getRelatedArtifacts(CoreRelationEnumeration.Verification__Requirement)) {
+ wordMl.addParagraph(requirement.getSoleAttributeValue("Imported Paragraph Number") + "\t" + requirement.getDescriptiveName());
+ }
+ return;
+ }
+
+ attributeTypeName = AttributeTypeManager.getType(attributeTypeName).getName();
+
+ Collection<Attribute<Object>> attributes = artifact.getAttributes(attributeTypeName);
+
+ if (!attributes.isEmpty()) {
+ Attribute<Object> attribute = attributes.iterator().next();
+ AttributeType attributeType = attribute.getAttributeType();
+
+ // check if the attribute descriptor name is in the ignore list.
+ if (ignoreAttributeExtensions.contains(attributeType.getName())) {
+ return;
+ }
+
+ if (attributeTypeName.equals(WordAttribute.WORD_TEMPLATE_CONTENT)) {
+ if (attributeElement.label.length() > 0) {
+ wordMl.addParagraph(attributeElement.label);
+ }
+
+ Object value = attribute.getValue();
+ if (value != null && value instanceof String) {
+ String data = (String) value;
+ String wordContent = WordUtil.stripSpellCheck(data);//TODO what is the best way to get at unknown attribute types? (because this isn't it)
+ //Change the BinData Id so images do not get overridden by the other images
+ wordContent = WordUtil.reassignBinDataID(wordContent);
+
+ if (presentationType == PresentationType.EDIT) {
+ writeXMLMetaDataWrapper(wordMl, elementNameFor(attributeType.getName()),
+ "ns0:guid=\"" + artifact.getGuid() + "\"",
+ "ns0:attrId=\"" + attributeType.getAttrTypeId() + "\"", wordContent);
+ } else {
+ wordMl.addWordMl(wordContent);
+ }
+ } else {
+ System.out.println(artifact.getArtifactType().getName() + " : " + artifact.getSoleAttributeValue("Name") + " : " + attributeType.getName() + " == null");
+ }
+
+ wordMl.resetListValue();
+ } else {
+ wordMl.startParagraph();
+ // assumption: the label is of the form <w:r><w:t> text </w:t></w:r>
+ if (allAttrs) {
+ wordMl.addWordMl("<w:r><w:t> " + attributeTypeName + ": </w:t></w:r>");
+ } else {
+ wordMl.addWordMl(attributeElement.label);
+ }
+
+ String valueList = Collections.toString(", ", artifact.getAttributes(attributeTypeName));
+ if (attributeElement.format.contains(">x<")) {
+ wordMl.addWordMl(format.replace(">x<", ">" + valueList + "<"));
+ } else {
+ wordMl.addTextInsideParagraph(valueList);
+ }
+ wordMl.endParagraph();
+ }
+ }
+ }
+
+ public static String elementNameFor(String artifactName) {
+ // Since artifact names are free text it is important to reformat the name
+ // to ensure it is suitable as an element name
+ // NOTE: The current program.launch has a tokenizing bug that causes an error if consecutive
+ // spaces are in the name
+ String elementName = artifactName.trim().replaceAll("[^A-Za-z0-9]", "_");
+
+ // Ensure the name did not end up empty
+ if (elementName.equals("")) elementName = "nameless";
+
+ // Fix the first character if it is a number by replacing it with its name
+ char firstChar = elementName.charAt(0);
+ if (firstChar >= '0' && firstChar <= '9') {
+ elementName = NUMBER[firstChar - '0'] + elementName.substring(1);
+ }
+
+ return elementName;
+ }
+
+ public static void writeXMLMetaDataWrapper(WordMLProducer wordMl, String name, String guid, String attributeId, String contentString) throws OseeWrappedException {
+ wordMl.addWordMl("<ns0:" + name + " xmlns:ns0=\"" + WordTemplateRenderer.ARTIFACT_SCHEMA + "\" " + guid + " " + attributeId + ">");
+ wordMl.addWordMl(contentString);
+ wordMl.addWordMl("</ns0:" + name + "><w:p/>");
+ }
+
+ private String getArtifactSetXml(String artifactElement) {
+ artifactElement = artifactElement.replaceAll("<(\\w+:)?Artifact/?>", "");
+ artifactElement = artifactElement.replaceAll("<(\\w+:)?Set_Name>.*?</(\\w+:)?Set_Name>", "");
+
+ return artifactElement;
+ }
+
+ private void extractSkynetAttributeReferences(String artifactElementTemplate) {
+ attributeElements.clear();
+ Matcher matcher = attributeElementsPattern.matcher(artifactElementTemplate);
+
+ while (matcher.find()) {
+ attributeElements.add(new AttributeElement(matcher.group(4)));
+ }
+ }
+
+ private static class AttributeElement {
+ private String outlineNumber;
+ private String label;
+ private String attributeName;
+ private String format;
+
+ public AttributeElement(String element) {
+ Matcher matcher = internalAttributeElementsPattern.matcher(element);
+
+ this.outlineNumber = "";
+ this.label = "";
+ this.attributeName = "";
+ this.format = "";
+
+ while (matcher.find()) {
+ String elementType = matcher.group(3);
+ String value = matcher.group(4).trim();
+ if (elementType.equals("Outline")) {
+ value = WordUtil.textOnly(value);
+ if (value.length() > 0) {
+ outlineNumber = value;
+ } else {
+ outlineNumber = "1.0";
+ }
+ } else if (elementType.equals("Label")) {
+ label = value;
+ } else if (elementType.equals("Name")) {
+ attributeName = WordUtil.textOnly(value);
+ } else if (elementType.equals("Format")) {
+ format = value;
+ } else {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, "Unexpected element read in Attribute:" + elementType);
+ }
+ }
+ }
+
+ public String getAttributeName() {
+ return attributeName;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public String getOutlineNumber() {
+ return outlineNumber;
+ }
+ }
+
+ private void loadIgnoreAttributeExtensions() {
+ IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
+ if (extensionRegistry != null) {
+ IExtensionPoint point =
+ extensionRegistry.getExtensionPoint("org.eclipse.osee.framework.ui.skynet.IgnorePublishAttribute");
+ if (point != null) {
+ IExtension[] extensions = point.getExtensions();
+ for (IExtension extension : extensions) {
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+ for (IConfigurationElement element : elements) {
+ ignoreAttributeExtensions.add(element.getAttribute("name"));
+ }
+ }
+ }
+ }
+ }
+
+ private Collection<String> orderAttributeNames(Collection<AttributeType> attributeTypes) {
+ ArrayList<String> orderedNames = new ArrayList<String>(attributeTypes.size());
+ String contentName = null;
+
+ for (AttributeType attributeType : attributeTypes) {
+ if (attributeType.getName().equals(WordAttribute.WHOLE_WORD_CONTENT) || attributeType.getName().equals(
+ WordAttribute.WORD_TEMPLATE_CONTENT)) {
+ contentName = attributeType.getName();
+ } else {
+ orderedNames.add(attributeType.getName());
+ }
+ }
+ Arrays.sort(orderedNames.toArray(new String[0]));
+ if (contentName != null) {
+ orderedNames.add(contentName);
+ }
+ return orderedNames;
+ }
+
+ private void displayNonTemplateArtifacts(final Collection<Artifact> artifacts) {
+ if (!artifacts.isEmpty()) {
+ Displays.ensureInDisplayThread(new Runnable() {
+
+ public void run() {
+ ArrayList<Artifact> nonTempArtifacts = new ArrayList<Artifact>(artifacts.size());
+ nonTempArtifacts.addAll(artifacts);
+ ArtifactExplorer.explore(nonTempArtifacts);
+ }
+ });
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/AddTemplateText.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/AddTemplateText.java
new file mode 100644
index 00000000000..348e8d431f2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/AddTemplateText.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render.word.template;
+
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeWrappedException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+
+/**
+ * @author b1528444
+ */
+public class AddTemplateText implements ITemplateTask {
+
+ private String template;
+ private int begin;
+ private int end;
+
+ /**
+ * @param last
+ * @param start
+ * @param template
+ */
+ public AddTemplateText(int begin, int end, String template) {
+ this.template = template;
+ this.end = end;
+ this.begin = begin;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateTask#process(java.lang.StringBuilder, org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.util.List)
+ */
+ @Override
+ public void process(WordMLProducer wordMl, Artifact artifact, List<ITemplateAttributeHandler> handlers) throws OseeWrappedException {
+ wordMl.addWordMl(template.subSequence(begin, end));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateTask#isTypeNameWildcard()
+ */
+ @Override
+ public boolean isTypeNameWildcard() {
+ return false;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ArtifactProcessing.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ArtifactProcessing.java
new file mode 100644
index 00000000000..2bbb10497a9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ArtifactProcessing.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render.word.template;
+
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.skynet.core.word.WordUtil;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+
+/**
+ * @author b1528444
+ */
+public class ArtifactProcessing implements ITemplateTask {
+
+ private List<ITemplateTask> innerTasks;
+ private boolean outlining;
+ private boolean recurseChildren;
+ private CoreRelationEnumeration outlineRelation;
+ private String headingAttributeName;
+ private String outlineNumber;
+ private String cleanedText;
+ private String artifactSetName;
+
+ private static final Matcher outlineElementsMatcher =
+ Pattern.compile("<((\\w+:)?(Outline))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+ private static final Matcher internalOutlineElementsMatcher =
+ Pattern.compile("<((\\w+:)?(HeadingAttribute|RecurseChildren|Number))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+
+ /**
+ * @param innerTasks
+ * @param artifactSection
+ * @param elementType
+ */
+ public ArtifactProcessing(List<ITemplateTask> innerTasks, String artifactSection, String elementType) {
+ this.innerTasks = innerTasks;
+ extractInformation(artifactSection, elementType);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateTask#isTypeNameWildcard()
+ */
+ @Override
+ public boolean isTypeNameWildcard() {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateTask#process(org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer, org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.util.List)
+ */
+ @Override
+ public void process(WordMLProducer wordMl, Artifact artifact, List<ITemplateAttributeHandler> handlers) {
+
+ }
+ private static final Matcher setNameMatcher =
+ Pattern.compile("<(\\w+:)?Set_Name>(.*?)</(\\w+:)?Set_Name>", Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+
+ public List<ITemplateTask> getTasks() {
+ return innerTasks;
+ }
+
+ private void extractInformation(String artifactElement, String type) {
+ if (type.equals("Artifact")) {
+ setNameMatcher.reset(artifactElement);
+ setNameMatcher.find();
+ artifactSetName = WordUtil.textOnly(setNameMatcher.group(2));
+ artifactElement = setNameMatcher.replaceAll("");
+ }
+ outlineElementsMatcher.reset(artifactElement);
+
+ if (outlineElementsMatcher.find()) {
+ internalOutlineElementsMatcher.reset(outlineElementsMatcher.group(4));
+ outlining = true;
+ recurseChildren = false;
+ outlineRelation = CoreRelationEnumeration.DEFAULT_HIERARCHICAL__CHILD;
+
+ while (internalOutlineElementsMatcher.find()) {
+ String elementType = internalOutlineElementsMatcher.group(3);
+ String value = WordUtil.textOnly(internalOutlineElementsMatcher.group(4));
+
+ if (elementType.equals("HeadingAttribute")) {
+ headingAttributeName = value;
+ } else if (elementType.equals("RecurseChildren")) {
+ recurseChildren = Boolean.parseBoolean(value);
+ } else if (elementType.equals("Number")) {
+ outlineNumber = value;
+ }
+ }
+ } else {
+ outlining = false;
+ recurseChildren = false;
+ outlineRelation = null;
+ headingAttributeName = null;
+ }
+ cleanedText = outlineElementsMatcher.replaceAll("");
+ }
+
+ /**
+ * @return the innerTasks
+ */
+ public List<ITemplateTask> getInnerTasks() {
+ return innerTasks;
+ }
+
+ /**
+ * @return the outlining
+ */
+ public boolean isOutlining() {
+ return outlining;
+ }
+
+ /**
+ * @return the recurseChildren
+ */
+ public boolean isRecurseChildren() {
+ return recurseChildren;
+ }
+
+ /**
+ * @return the outlineRelation
+ */
+ public CoreRelationEnumeration getOutlineRelation() {
+ return outlineRelation;
+ }
+
+ /**
+ * @return the headingAttributeName
+ */
+ public String getHeadingAttributeName() {
+ return headingAttributeName;
+ }
+
+ /**
+ * @return the outlineNumber
+ */
+ public String getOutlineNumber() {
+ return outlineNumber;
+ }
+
+ public String getText() {
+ return this.cleanedText;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/BasicTemplateAttributeHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/BasicTemplateAttributeHandler.java
new file mode 100644
index 00000000000..03093882623
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/BasicTemplateAttributeHandler.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render.word.template;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+
+/**
+ * @author b1528444
+ */
+public final class BasicTemplateAttributeHandler implements ITemplateAttributeHandler {
+
+ private final Set<String> ignoreAttributeExtensions;
+
+ public BasicTemplateAttributeHandler() {
+ this.ignoreAttributeExtensions = new HashSet<String>();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateAttributeHandler#process(org.eclipse.osee.framework.skynet.core.artifact.Artifact,
+ * org.eclipse.osee.framework.ui.skynet.render.word.template.TemplateAttribute)
+ */
+ @Override
+ public void process(WordMLProducer wordMl, Artifact artifact, TemplateAttribute templateAttribute) throws OseeCoreException {
+ AttributeType attributeType = AttributeTypeManager.getType(templateAttribute.getName());
+ Collection<Attribute<Object>> attributes = artifact.getAttributes(attributeType.getName());
+ if (!attributes.isEmpty()) {
+ Attribute<Object> attribute = attributes.iterator().next();
+ attributeType = attribute.getAttributeType();
+
+ // check if the attribute descriptor name is in the ignore list.
+ if (ignoreAttributeExtensions.contains(attributeType.getName())) {
+ return;
+ }
+
+ if (templateAttribute.isParagrapthWrap()) {
+ wordMl.startParagraph();
+ }
+ // assumption: the label is of the form <w:r><w:t> text </w:t></w:r>
+ // if (allAttrs) {
+ if (templateAttribute.hasLabel()) {
+ wordMl.addWordMl("<w:r><w:t> " + templateAttribute.getName() + ": </w:t></w:r>");
+ }
+ // } else {
+ // if (templateAttribute.hasLabel()) {
+ // wordMl.addParagraph(templateAttribute.getLabel());
+ // }
+ //
+ String valueList;
+ if (attributeType.getName().equals(WordAttribute.WORD_TEMPLATE_CONTENT)) {
+ wordMl.addWordMl((String) attribute.getValue());
+ } else {
+ valueList = Collections.toString(", ", artifact.getAttributes(templateAttribute.getName()));
+ if (templateAttribute.hasFormatting()) {
+ if (templateAttribute.getFormat().contains(">x<")) {
+ wordMl.addWordMl(templateAttribute.getFormat().replace(">x<", ">" + valueList + "<"));
+ }
+ } else {
+ wordMl.addTextInsideParagraph(valueList);
+ }
+ }
+ if (templateAttribute.isParagrapthWrap()) {
+ wordMl.endParagraph();
+ }
+
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateAttributeNameHandler#canHandle(org.eclipse.osee.framework.skynet.core.artifact.Artifact,
+ * org.eclipse.osee.framework.ui.skynet.render.word.template.TemplateAttribute)
+ */
+ @Override
+ public boolean canHandle(Artifact artifact, TemplateAttribute attribute) throws OseeCoreException {
+ return true;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ITemplateAttributeHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ITemplateAttributeHandler.java
new file mode 100644
index 00000000000..7c8b3473613
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ITemplateAttributeHandler.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render.word.template;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+
+/**
+ * @author b1528444
+ */
+public interface ITemplateAttributeHandler {
+
+ void process(WordMLProducer wordMl, Artifact artifact, TemplateAttribute attribute) throws OseeCoreException;
+
+ boolean canHandle(Artifact artifact, TemplateAttribute attribute) throws OseeCoreException;
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ITemplateTask.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ITemplateTask.java
new file mode 100644
index 00000000000..6cd70efb7eb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/ITemplateTask.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render.word.template;
+
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+
+/**
+ * @author b1528444
+ */
+public interface ITemplateTask {
+
+ void process(WordMLProducer wordMl, Artifact artifact, List<ITemplateAttributeHandler> handlers) throws OseeCoreException;
+
+ boolean isTypeNameWildcard();
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/SRSSpecialPublishingAttributeHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/SRSSpecialPublishingAttributeHandler.java
new file mode 100644
index 00000000000..bbb64056669
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/SRSSpecialPublishingAttributeHandler.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render.word.template;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.utility.Requirements;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+
+/**
+ * @author b1528444
+ */
+public class SRSSpecialPublishingAttributeHandler implements ITemplateAttributeHandler {
+
+ public SRSSpecialPublishingAttributeHandler() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateAttributeHandler#process(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.osee.framework.ui.skynet.render.word.template.TemplateAttribute)
+ */
+ @Override
+ public void process(WordMLProducer wordMl, Artifact artifact, TemplateAttribute attribute) {
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateAttributeHandler#canHandle(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.osee.framework.ui.skynet.render.word.template.TemplateAttribute)
+ */
+ @Override
+ public boolean canHandle(Artifact artifact, TemplateAttribute attribute) throws OseeCoreException {
+ // This is for SRS Publishing. Do not publish unspecified attributes
+ if ((attribute.getName().equals(Requirements.PARTITION) || attribute.getName().equals("Safety Criticality"))) {
+ for (Attribute<?> partition : artifact.getAttributes(Requirements.PARTITION)) {
+ if (partition.getValue().equals("Unspecified")) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/TISAttributeHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/TISAttributeHandler.java
new file mode 100644
index 00000000000..10c12c498d7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/TISAttributeHandler.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render.word.template;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+
+/**
+ * @author b1528444
+ */
+public class TISAttributeHandler implements ITemplateAttributeHandler {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateAttributeHandler#process(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.osee.framework.ui.skynet.render.word.template.TemplateAttribute)
+ */
+ @Override
+ public void process(WordMLProducer wordMl, Artifact artifact, TemplateAttribute attribute) throws OseeCoreException {
+ for (Artifact requirement : artifact.getRelatedArtifacts(CoreRelationEnumeration.Verification__Requirement)) {
+ wordMl.addParagraphBold(requirement.getSoleAttributeValue("Imported Paragraph Number", "") + "\t" + requirement.getDescriptiveName());
+ String str = requirement.getSoleAttributeValue(WordAttribute.WORD_TEMPLATE_CONTENT);
+ wordMl.addWordMl(str);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateAttributeHandler#canHandle(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.osee.framework.ui.skynet.render.word.template.TemplateAttribute)
+ */
+ @Override
+ public boolean canHandle(Artifact artifact, TemplateAttribute attribute) throws OseeCoreException {
+ return attribute.getName().equals("TIS Traceability");
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/TemplateAttribute.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/TemplateAttribute.java
new file mode 100644
index 00000000000..6a048d5ddda
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/TemplateAttribute.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render.word.template;
+
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+
+/**
+ * @author b1528444
+ */
+public class TemplateAttribute implements ITemplateTask {
+
+ private static Matcher trimTags = Pattern.compile("(<.*?>)").matcher("");
+
+ private String name;
+ private String label;
+ private String editable;
+ private String format;
+ private String outline;
+ private boolean paragraphWrap = true;
+
+ public TemplateAttribute() {
+
+ }
+
+ public TemplateAttribute(TemplateAttribute copyMe, String name) {
+ this.editable = copyMe.editable;
+ this.format = copyMe.format;
+ this.label = copyMe.label;
+ this.outline = copyMe.outline;
+ this.name = name;
+ this.paragraphWrap = copyMe.paragraphWrap;
+ }
+
+ /**
+ * @param group
+ */
+ public void addName(String name) {
+ trimTags.reset(name);
+ this.name = trimTags.replaceAll("");
+ }
+
+ /**
+ * @param group
+ */
+ public void addLabel(String label) {
+ this.label = label;
+ }
+
+ /**
+ * @param group
+ */
+ public void addEditable(String editable) {
+ this.editable = editable;
+ }
+
+ /**
+ * @param group
+ */
+ public void addFormat(String format) {
+ this.format = format;
+ }
+
+ /**
+ * @param group
+ */
+ public void addNOutline(String outline) {
+ this.outline = outline;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateTask#process(java.lang.StringBuilder, org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.util.List)
+ */
+ @Override
+ public void process(WordMLProducer wordMl, Artifact artifact, List<ITemplateAttributeHandler> handlers) throws OseeCoreException {
+ for (ITemplateAttributeHandler handler : handlers) {
+ if (handler.canHandle(artifact, this)) {
+ handler.process(wordMl, artifact, this);
+ return;
+ }
+ }
+ // throw new Exception(String.format("There was not a valid handler for Artifact[%s] and TemplateAttribute[%s].",
+ // artifact.toString(), this.toString()));
+ System.out.println(String.format("There was not a valid handler for Artifact[%s] and TemplateAttribute[%s].",
+ artifact.toString(), this.toString()));
+ }
+
+ public String getLabel() {
+ return this.label;
+ }
+
+ public String getFormat() {
+ return this.format;
+ }
+
+ public boolean hasFormatting() {
+ return this.format != null && this.format.length() > 0;
+ }
+
+ public boolean hasLabel() {
+ return this.label != null && this.label.length() > 0;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateTask#isTypeNameWildcard()
+ */
+ @Override
+ public boolean isTypeNameWildcard() {
+ return getName().equals("*");
+ }
+
+ /**
+ * @param group
+ */
+ public void addParagraphWrap(String group) {
+ trimTags.reset(group);
+ String value = trimTags.replaceAll("");
+ this.paragraphWrap = Boolean.parseBoolean(value);
+ }
+
+ public boolean isParagrapthWrap() {
+ return this.paragraphWrap;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/WordAttributeTypeAttributeHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/WordAttributeTypeAttributeHandler.java
new file mode 100644
index 00000000000..038e8be1ce4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/WordAttributeTypeAttributeHandler.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render.word.template;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordTemplateProcessor;
+
+/**
+ * @author Finkbeiner M. Andrew
+ */
+public final class WordAttributeTypeAttributeHandler implements ITemplateAttributeHandler {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateAttributeHandler#process(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.osee.framework.ui.skynet.render.word.template.TemplateAttribute)
+ */
+ @Override
+ public void process(WordMLProducer wordMl, Artifact artifact, TemplateAttribute templateAttribute) throws OseeCoreException {
+ Collection<Attribute<Object>> attributes = artifact.getAttributes(templateAttribute.getName());
+
+ if (!attributes.isEmpty()) {
+ Attribute<Object> attribute = attributes.iterator().next();
+ AttributeType attributeType = attribute.getAttributeType();
+
+ if (templateAttribute.hasLabel()) {
+ wordMl.addParagraph(templateAttribute.getLabel());
+ }
+
+ if (false) {
+ WordTemplateProcessor.writeXMLMetaDataWrapper(wordMl,
+ WordTemplateProcessor.elementNameFor(attributeType.getName()),
+ "ns0:guid=\"" + artifact.getGuid() + "\"", "ns0:attrId=\"" + attributeType.getAttrTypeId() + "\"",
+ attribute.toString());
+ } else {
+ wordMl.addWordMl(attribute.toString());
+ }
+ wordMl.resetListValue();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.render.word.template.ITemplateAttributeNameHandler#canHandle(org.eclipse.osee.framework.skynet.core.artifact.Artifact, org.eclipse.osee.framework.ui.skynet.render.word.template.TemplateAttribute)
+ */
+ @Override
+ public boolean canHandle(Artifact artifact, TemplateAttribute attribute) throws OseeCoreException {
+ boolean goodAttributeType = attribute.getName().equals(WordAttribute.WORD_TEMPLATE_CONTENT);
+ boolean goodArtifact = artifact.isAttributeTypeValid(WordAttribute.WORD_TEMPLATE_CONTENT);
+ return goodAttributeType && goodArtifact;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/WordTemplateManager.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/WordTemplateManager.java
new file mode 100644
index 00000000000..6c60e29f408
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/word/template/WordTemplateManager.java
@@ -0,0 +1,309 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.render.word.template;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.word.WordUtil;
+import org.eclipse.osee.framework.ui.skynet.render.word.WordMLProducer;
+
+/**
+ * @author b1528444
+ */
+public class WordTemplateManager {
+
+ // private static final Matcher setNameMatcher =
+ // Pattern.compile("<(\\w+:)?Set_Name>(.*?)</(\\w+:)?Set_Name>", Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+ // private static final Matcher headElementsMatcher =
+ // Pattern.compile("<((\\w+:)(Artifact|Extension_Processor))>(.*?)</\\1>",
+ // Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+ //
+ // private static final Matcher artifactMatcher = Pattern.compile(
+ // "<\\w+?:Artifact>(.*?)</\\w+?:Artifact>",
+ // Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE)
+ // .matcher("");
+ //
+ // private static final Matcher internalMatcher = Pattern.compile(
+ // "<\\w*?(Label|Outline|Name|Format|Editable)>(.*?)</\\1>",
+ // Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE)
+ // .matcher("");
+ // private static final Matcher attributeMatcher = Pattern.compile(
+ // "<((\\w+:)?(Attribute))>(.*?)</\\3>",
+ // Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE)
+ // .matcher("");
+
+ private static final Matcher nameMatcher =
+ Pattern.compile("<((\\w+:)?(Name))>(.*?)</\\1>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher(
+ "");
+ private static final Matcher outlineTypeMatcher =
+ Pattern.compile("<((\\w+:)?(OutlineType))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+ private static final Matcher outlineNumberMatcher =
+ Pattern.compile("<((\\w+:)?(Number))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+ private static final Matcher argumentElementsMatcher =
+ Pattern.compile("<((\\w+:)?(Argument))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+ private static final Matcher keyValueElementsMatcher =
+ Pattern.compile("<((\\w+:)?(Key|Value))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+ private static final Matcher subDocElementsMatcher =
+ Pattern.compile("<((\\w+:)?(SubDoc))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+
+ private static final Matcher setNameMatcher =
+ Pattern.compile("<(\\w+:)?Set_Name>(.*?)</(\\w+:)?Set_Name>", Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+ private static final Matcher headElementsMatcher =
+ Pattern.compile("<((\\w+:)?(Artifact|Extension_Processor))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+ private static final Matcher attributeElementsMatcher =
+ Pattern.compile("<((\\w+:)?(Attribute))>(.*?)</\\3>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+ private static final Matcher internalAttributeElementsMatcher =
+ Pattern.compile("<((\\w+:)?(Label|Outline|Name|Format|Editable|ParagraphWrap))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher("");
+
+ enum XmlAttributeType {
+ Label, Outline, Name, Format, Editable, ParagraphWrap
+ }
+
+ private String template;
+ private final String artifactSetName;
+ private List<ITemplateTask> tasks = new ArrayList<ITemplateTask>();
+ private final List<ITemplateAttributeHandler> attributeHandlers;
+
+ public WordTemplateManager(String template, List<ITemplateAttributeHandler> attributeHandlers) {
+ // this.template = sanatize(template);
+ this.template = template;
+ this.attributeHandlers = attributeHandlers;
+ this.artifactSetName = getArtifactSetName();
+ // preProcessTemplatePositions();
+
+ }
+
+ private String getArtifactSetName() {
+ String artifactSetName = "";
+ headElementsMatcher.reset(template);
+
+ if (headElementsMatcher.find()) {
+ String elementType = headElementsMatcher.group(3);
+ String elementValue = headElementsMatcher.group(4);
+
+ if (elementType.equals("Artifact")) {
+ setNameMatcher.reset(elementValue);
+ setNameMatcher.find();
+ artifactSetName = WordUtil.textOnly(setNameMatcher.group(2));
+ }
+ }
+ return artifactSetName;
+ }
+
+ private void preProcessTemplateInsideArtifactTag(String text, List<ITemplateTask> innerTasks) {
+ String newtext = text;//trimUnwantedText(text);
+ attributeElementsMatcher.reset(newtext);
+ int last = 0;
+ while (attributeElementsMatcher.find()) {
+ int start = attributeElementsMatcher.start();
+ innerTasks.add(new AddTemplateText(last, start, newtext));
+ int end = attributeElementsMatcher.end();
+ last = end;
+ TemplateAttribute processAttribute = new TemplateAttribute();
+ innerTasks.add(processAttribute);
+ String internal = attributeElementsMatcher.group(4);
+ internalAttributeElementsMatcher.reset(internal);
+ while (internalAttributeElementsMatcher.find()) {
+ String type = internalAttributeElementsMatcher.group(3);
+ switch (XmlAttributeType.valueOf(type)) {
+ case Label:
+ processAttribute.addLabel(internalAttributeElementsMatcher.group(4));
+ break;
+ case Editable:
+ processAttribute.addEditable(internalAttributeElementsMatcher.group(4));
+ break;
+ case Format:
+ processAttribute.addFormat(internalAttributeElementsMatcher.group(4));
+ break;
+ case Name:
+ processAttribute.addName(internalAttributeElementsMatcher.group(4));
+ break;
+ case Outline:
+ processAttribute.addNOutline(internalAttributeElementsMatcher.group(4));
+ break;
+ case ParagraphWrap:
+ processAttribute.addParagraphWrap(internalAttributeElementsMatcher.group(4));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ innerTasks.add(new AddTemplateText(last, newtext.length(), newtext));
+ }
+
+ private String sanatize(String template) {
+ Matcher matcher = Pattern.compile("<w:proofErr w:type=\".*?\"/>").matcher("");
+ matcher.reset(template);
+ while (matcher.find()) {
+ System.out.println("sanatize " + matcher.group(0));
+ }
+ template = matcher.replaceAll("");
+ return template;
+ }
+
+ private void preProcessTemplatePositions() {
+ headElementsMatcher.reset(template);
+ int last = 0;
+ while (headElementsMatcher.find()) {
+ int start = headElementsMatcher.start();
+ tasks.add(new AddTemplateText(last, start, template));
+ int end = headElementsMatcher.end();
+ last = end;
+ List<ITemplateTask> innerTasks = new ArrayList<ITemplateTask>();
+ String artifactSection = headElementsMatcher.group(4);
+ String elementType = headElementsMatcher.group(3);
+
+ ArtifactProcessing artifactProcessing = new ArtifactProcessing(innerTasks, artifactSection, elementType);
+ tasks.add(artifactProcessing);
+ preProcessTemplateInsideArtifactTag(artifactProcessing.getText(), innerTasks);
+
+ }
+ tasks.add(new AddTemplateText(last, template.length(), template));
+ }
+
+ public String getArtifactSet() {
+ return this.artifactSetName;
+ }
+
+ /**
+ * @param artifacts
+ * @throws Exception
+ */
+ public void processArtifacts(WordMLProducer wordMl, List<Artifact> artifacts) throws OseeCoreException {
+ String outlineNumber = peekAtFirstArtifactToGetParagraphNumber(template, artifacts);
+ template = wordMl.setHeadingNumbers(outlineNumber, template);
+ preProcessTemplatePositions();
+
+ for (ITemplateTask task : tasks) {
+ if (task instanceof ArtifactProcessing) {
+ ArtifactProcessing artifactProcessingTask = (ArtifactProcessing) task;
+
+ if (artifactProcessingTask.isRecurseChildren()) {
+ artifacts = recurseArtifactChildren(artifacts);
+ }
+ List<ITemplateTask> artifactAttributeTasks = ((ArtifactProcessing) task).getTasks();
+ for (Artifact artifact : artifacts) {
+
+ boolean performedOutLining = false;
+
+ if (artifactProcessingTask.isOutlining()) {
+ performedOutLining = true;
+
+ String headingText =
+ artifact.getSoleAttributeValue(artifactProcessingTask.getHeadingAttributeName(), "");
+ CharSequence paragraphNumber = wordMl.startOutlineSubSection("Times New Roman", headingText, null);
+ }
+
+ List<ITemplateTask> actualTasks = preProcessTemplateTasks(artifactAttributeTasks, artifact);
+ for (ITemplateTask inner : actualTasks) {
+ inner.process(wordMl, artifact, attributeHandlers);
+ }
+
+ if (performedOutLining) wordMl.endOutlineSubSection();
+
+ wordMl.setPageLayout(artifact);
+ }
+ } else {
+ task.process(wordMl, null, attributeHandlers);
+ }
+ }
+ }
+
+ /**
+ * @param artifacts
+ * @return
+ * @throws OseeCoreException
+ */
+ private List<Artifact> recurseArtifactChildren(List<Artifact> artifacts) throws OseeCoreException {
+ List<Artifact> arts = new ArrayList<Artifact>();
+ for (Artifact art : artifacts) {
+ recursiveChildResolver(art, arts);
+ }
+ return arts;
+ }
+
+ private void recursiveChildResolver(Artifact artifact, List<Artifact> arts) throws OseeCoreException {
+ arts.add(artifact);
+ for (Artifact child : artifact.getChildren()) {
+ recursiveChildResolver(child, arts);
+ }
+ }
+
+ /**
+ * This method expands wildcard(*) attribute names into all of the attribute types of a particular artifact.
+ *
+ * @param tasks2
+ * @param artifact
+ * @return
+ * @throws OseeCoreException
+ */
+ private List<ITemplateTask> preProcessTemplateTasks(List<ITemplateTask> tasks, Artifact artifact) throws OseeCoreException {
+ List<ITemplateTask> newTasks = new ArrayList<ITemplateTask>();
+ for (ITemplateTask task : tasks) {
+ if (task instanceof TemplateAttribute && ((TemplateAttribute) task).isTypeNameWildcard()) {
+ TemplateAttribute attributeTask = (TemplateAttribute) task;
+ Collection<AttributeType> attributeTypes = artifact.getAttributeTypes();
+ for (AttributeType attributeType : attributeTypes) {
+ newTasks.add(new TemplateAttribute(attributeTask, attributeType.getName()));
+ }
+ } else {
+ newTasks.add(task);
+ }
+ }
+ return newTasks;
+ }
+
+ private String peekAtFirstArtifactToGetParagraphNumber(String template, List<Artifact> artifacts) throws OseeCoreException {
+ Pattern headElementsPattern =
+ Pattern.compile("<((\\w+:)?(Artifact|Extension_Processor))>(.*?)</\\1>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ String startParagraphNumber = "1";
+ Matcher matcher = headElementsPattern.matcher(template);
+
+ if (matcher.find()) {
+ String elementType = matcher.group(3);
+ String elementValue = matcher.group(4);
+
+ if (elementType.equals("Artifact")) {
+ // Matcher setNameMatcher = setNamePattern.matcher(elementValue);
+ setNameMatcher.reset(elementValue);
+ setNameMatcher.find();
+
+ if (!artifacts.isEmpty()) {
+ Artifact artifact = artifacts.iterator().next();
+ if (artifact.isAttributeTypeValid("Imported Paragraph Number")) {
+ if (!artifact.getSoleAttributeValue("Imported Paragraph Number", "").equals("")) {
+ startParagraphNumber = artifact.getSoleAttributeValue("Imported Paragraph Number", "");
+ }
+ }
+ }
+ }
+ }
+ return startParagraphNumber;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/schema/DBHealthTask.exsd b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/schema/DBHealthTask.exsd
new file mode 100644
index 00000000000..062aa1daf1b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/schema/DBHealthTask.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.framework.ui.skynet" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.osee.framework.ui.skynet" id="DBHealthTask" name="DBHealthTask"/>
+ </appinfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="Task"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="Task">
+ <complexType>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn="org.eclipse.osee.framework.ui.skynet.dbHealth.DatabaseHealthTask:"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchQuery.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchQuery.java
new file mode 100644
index 00000000000..d75e928687f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchQuery.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.util.Collection;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.search.ui.ISearchQuery;
+import org.eclipse.search.ui.ISearchResult;
+import org.eclipse.search.ui.NewSearchUI;
+import org.eclipse.search.ui.text.Match;
+
+public abstract class AbstractArtifactSearchQuery implements ISearchQuery {
+ protected ArtifactSearchResult aResult;
+ protected int numberOfMatches;
+ private boolean doneRunning;
+
+ public boolean canRunInBackground() {
+ return true;
+ }
+
+ public IStatus run(final IProgressMonitor pm) {
+ doneRunning = false;
+ aResult.removeAll();
+ numberOfMatches = 0;
+
+ try {
+ for (Artifact artifact : getArtifacts()) {
+ Match match = new Match(artifact, 1, 2);
+ aResult.addMatch(match);
+
+ numberOfMatches++;
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), ex, true);
+ }
+
+ doneRunning = true;
+ return new MultiStatus(NewSearchUI.PLUGIN_ID, IStatus.OK, "OK", null);
+ }
+
+ public abstract Collection<Artifact> getArtifacts() throws Exception;
+
+ public String getLabel() {
+ return "Artifact Search";
+ }
+
+ public String getResultLabel() {
+ return getCriteriaLabel() + " - " + (doneRunning ? (numberOfMatches + " matches") : "busy");
+ }
+
+ public abstract String getCriteriaLabel();
+
+ public boolean canRerun() {
+ return true;
+ }
+
+ public ISearchResult getSearchResult() {
+ if (aResult == null) {
+ aResult = new ArtifactSearchResult(this);
+ }
+ return aResult;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchResult.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchResult.java
new file mode 100644
index 00000000000..71baeeff5b5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchResult.java
@@ -0,0 +1,265 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.search.ui.ISearchResult;
+import org.eclipse.search.ui.ISearchResultListener;
+import org.eclipse.search.ui.SearchResultEvent;
+import org.eclipse.search.ui.text.Match;
+import org.eclipse.search.ui.text.MatchEvent;
+import org.eclipse.search.ui.text.RemoveAllEvent;
+
+/**
+ * @author Michael S. Rodgers
+ */
+public abstract class AbstractArtifactSearchResult implements ISearchResult {
+
+ private ArrayList<Match> aMatches;
+ private Map<Artifact, Match> artifacts;
+ private ArrayList<ISearchResultListener> aListeners;
+ private MatchEvent aMatchEvent;
+
+ /**
+ * Constructs a new <code>AbstractTextSearchResult</code>
+ */
+ protected AbstractArtifactSearchResult() {
+ this.aMatches = new ArrayList<Match>();
+ this.aListeners = new ArrayList<ISearchResultListener>();
+ this.aMatchEvent = new MatchEvent(this);
+ this.artifacts = new HashMap<Artifact, Match>();
+
+ }
+
+ /**
+ * Returns an array with all matches reported against the given element.
+ *
+ * @param element the element to report matches for
+ * @return all matches reported for this element
+ * @see Match#getElement()
+ */
+ public Match getMatch(Object element) {
+ synchronized (aMatches) {
+ return aMatches.get(aMatches.indexOf(element));
+ }
+ }
+
+ /**
+ * Adds a <code>Match</code> to this search result. This method does nothing if the match is already present.
+ * <p>
+ * Subclasses may extend this method.
+ * </p>
+ *
+ * @param match the match to add
+ */
+ public void addMatch(Match match) {
+ boolean hasAdded = false;
+ synchronized (aMatches) {
+ hasAdded = doAddMatch(match);
+ }
+ if (hasAdded) fireChange(getSearchResultEvent(match, MatchEvent.ADDED));
+ }
+
+ /**
+ * Adds a number of Matches to this search result. This method does nothing for matches that are already present.
+ * <p>
+ * Subclasses may extend this method.
+ * </p>
+ *
+ * @param matches the matches to add
+ */
+ public void addMatches(Match[] matches) {
+ Collection<Match> reallyAdded = new ArrayList<Match>();
+ synchronized (aMatches) {
+ for (int i = 0; i < matches.length; i++) {
+ if (doAddMatch(matches[i])) reallyAdded.add(matches[i]);
+ }
+ }
+ if (!reallyAdded.isEmpty()) fireChange(getSearchResultEvent(reallyAdded, MatchEvent.ADDED));
+ }
+
+ private MatchEvent getSearchResultEvent(Match match, int eventKind) {
+ return aMatchEvent;
+ }
+
+ private MatchEvent getSearchResultEvent(Collection<Match> matches, int eventKind) {
+ return aMatchEvent;
+ }
+
+ private boolean doAddMatch(Match match) {
+ aMatches.add(match);
+ artifacts.put((Artifact) match.getElement(), match);
+ return true;
+
+ }
+
+ /**
+ * Removes all matches from this search result.
+ * <p>
+ * Subclasses may extend this method.
+ * </p>
+ */
+ public void removeAll() {
+ synchronized (aMatches) {
+ doRemoveAll();
+ }
+ fireChange(new RemoveAllEvent(this));
+ }
+
+ private void doRemoveAll() {
+ aMatches.clear();
+ }
+
+ /**
+ * Removes the given match from this search result. This method has no effect if the match is not found.
+ * <p>
+ * Subclasses may extend this method.
+ * </p>
+ *
+ * @param match the match to remove
+ */
+ public void removeMatch(Match match) {
+ boolean existed = false;
+ synchronized (aMatches) {
+ existed = doRemoveMatch(match);
+ }
+ if (existed) {
+ artifacts.remove(match.getElement());
+ fireChange(getSearchResultEvent(match, MatchEvent.REMOVED));
+ }
+ }
+
+ /**
+ * Removes the given matches from this search result. This method has no effect for matches that are not found
+ * <p>
+ * Subclasses may extend this method.
+ * </p>
+ *
+ * @param matches the matches to remove
+ */
+ public void removeMatches(Match[] matches) {
+ Collection<Match> existing = new ArrayList<Match>();
+ synchronized (aMatches) {
+ for (int i = 0; i < matches.length; i++) {
+ if (doRemoveMatch(matches[i])) existing.add(matches[i]); // no duplicate matches at this point
+ }
+ }
+ if (!existing.isEmpty()) fireChange(getSearchResultEvent(existing, MatchEvent.REMOVED));
+ }
+
+ private boolean doRemoveMatch(Match match) {
+ boolean existed = false;
+ int matchIndex = aMatches.indexOf(match);
+
+ if (matchIndex >= 0) {
+ Match indexMatch = aMatches.get(matchIndex);
+ if (indexMatch != null) {
+ existed = aMatches.remove(match);
+ }
+ }
+ return existed;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void addListener(ISearchResultListener l) {
+ if (l == null) throw new IllegalArgumentException("Can not have a null listener");
+ synchronized (aListeners) {
+ aListeners.add(l);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void removeListener(ISearchResultListener l) {
+ synchronized (aListeners) {
+ aListeners.remove(l);
+ }
+ }
+
+ /**
+ * Send the given <code>SearchResultEvent</code> to all registered search result listeners.
+ *
+ * @param e the event to be sent
+ * @see ISearchResultListener
+ */
+ protected void fireChange(SearchResultEvent e) {
+ ArrayList<ISearchResultListener> copiedListeners = new ArrayList<ISearchResultListener>();
+ synchronized (aListeners) {
+ copiedListeners.addAll(aListeners);
+ }
+ Iterator<?> listeners = copiedListeners.iterator();
+ while (listeners.hasNext()) {
+ ((ISearchResultListener) listeners.next()).searchResultChanged(e);
+ }
+ }
+
+ /**
+ * Returns the total number of matches contained in this search result.
+ *
+ * @return total number of matches
+ */
+ public int getMatchCount() {
+ return aMatches.size();
+ }
+
+ /**
+ * Returns an array containing the set of all elements that matches are reported against in this search result.
+ *
+ * @return the set of elements in this search result
+ */
+ public Object[] getElements() {
+ synchronized (aMatches) {
+ return aMatches.toArray();
+ }
+ }
+
+ public List<Artifact> getArtifactResults() {
+ synchronized (aMatches) {
+ ArrayList<Artifact> artifacts = new ArrayList<Artifact>(aMatches.size());
+ for (Match match : aMatches) {
+ artifacts.add((Artifact) match.getElement());
+ }
+ return artifacts;
+ }
+ }
+
+ /**
+ * Removes the children artifacts from the search
+ *
+ * @param children
+ */
+ public void removeArtifacts(Collection<Artifact> children) {
+ for (Artifact artifact : children) {
+ Match match = artifacts.get(artifact);
+ removeMatch(match);
+ artifacts.remove(artifact);
+
+ try {
+ // remove all of its children
+ removeArtifacts(artifact.getChildren());
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchViewPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchViewPage.java
new file mode 100644
index 00000000000..a6b86ca89ec
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AbstractArtifactSearchViewPage.java
@@ -0,0 +1,378 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Set;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.DecoratingLabelProvider;
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.osee.framework.ui.plugin.util.SelectionCountChangeListener;
+import org.eclipse.search.ui.IQueryListener;
+import org.eclipse.search.ui.ISearchQuery;
+import org.eclipse.search.ui.ISearchResult;
+import org.eclipse.search.ui.ISearchResultPage;
+import org.eclipse.search.ui.ISearchResultViewPart;
+import org.eclipse.search.ui.NewSearchUI;
+import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.Page;
+import org.eclipse.ui.part.PageBook;
+import org.eclipse.ui.progress.UIJob;
+
+public abstract class AbstractArtifactSearchViewPage extends Page implements ISearchResultPage {
+
+ private class UpdateUIJob extends UIJob {
+
+ public UpdateUIJob() {
+ super("Error in running search criteria");
+ setSystem(true);
+ }
+
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ Control control = getControl();
+ if (control == null || control.isDisposed()) {
+ // disposed the control while the UI was posted.
+ return Status.OK_STATUS;
+ }
+ runBatchedUpdates();
+ if (hasMoreUpdates() || isQueryRunning()) {
+ schedule(500);
+ } else {
+ aIsUIUpdateScheduled = false;
+ turnOnDecoration();
+ }
+ aViewPart.updateLabel();
+ return Status.OK_STATUS;
+ }
+
+ /*
+ * Undocumented for testing only. Used to find UpdateUIJobs.
+ */
+ public boolean belongsTo(Object family) {
+ return family == AbstractArtifactSearchViewPage.this;
+ }
+
+ }
+
+ private class SelectionProviderAdapter implements ISelectionProvider, ISelectionChangedListener {
+ private ArrayList<ISelectionChangedListener> aListeners = new ArrayList<ISelectionChangedListener>(5);
+
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ aListeners.add(listener);
+ }
+
+ public ISelection getSelection() {
+ return aViewer.getSelection();
+ }
+
+ public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+ aListeners.remove(listener);
+ }
+
+ public void setSelection(ISelection selection) {
+ aViewer.setSelection(selection);
+ }
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ // forward to my listeners
+ SelectionChangedEvent wrappedEvent = new SelectionChangedEvent(this, event.getSelection());
+ for (Iterator<?> listeners = aListeners.iterator(); listeners.hasNext();) {
+ ISelectionChangedListener listener = (ISelectionChangedListener) listeners.next();
+ listener.selectionChanged(wrappedEvent);
+ }
+ }
+ }
+
+ private transient boolean aIsUIUpdateScheduled = false;
+
+ private ISearchResult aInput;
+
+ private IQueryListener aQueryListener;
+ private PageBook aPagebook;
+
+ private Control aBusyLabel;
+ private boolean aIsBusyShown;
+
+ private Composite aViewerContainer;
+ private SelectionProviderAdapter aViewerAdapter;
+
+ private ISearchResultViewPart aViewPart;
+ private StructuredViewer aViewer;
+
+ @SuppressWarnings("unchecked")
+ private Set aBatchedUpdates;
+
+ private String aId;
+
+ @Override
+ public void createControl(Composite parent) {
+ aQueryListener = createQueryListener();
+
+ aPagebook = new PageBook(parent, SWT.NULL);
+ aPagebook.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ aBusyLabel = createBusyControl();
+
+ aViewerContainer = new Composite(aPagebook, SWT.NULL);
+ aViewerContainer.setLayoutData(new GridData(GridData.FILL_BOTH));
+ aViewerContainer.setSize(100, 100);
+ aViewerContainer.setLayout(new FillLayout());
+
+ aViewerAdapter = new SelectionProviderAdapter();
+ getSite().setSelectionProvider(aViewerAdapter);
+
+ createViewer(aViewerContainer);
+ showBusyLabel(aIsBusyShown);
+ NewSearchUI.addQueryListener(aQueryListener);
+ }
+
+ private IQueryListener createQueryListener() {
+ return new IQueryListener() {
+ public void queryAdded(ISearchQuery query) {
+ // ignore
+ }
+
+ public void queryRemoved(ISearchQuery query) {
+ // ignore
+ }
+
+ public void queryStarting(final ISearchQuery query) {
+ final Runnable runnable1 = new Runnable() {
+ public void run() {
+ updateBusyLabel();
+ AbstractArtifactSearchResult result = getInput();
+
+ if (result == null || !result.getQuery().equals(query)) {
+ return;
+ }
+ turnOffDecoration();
+ scheduleUIUpdate();
+ }
+ };
+ asyncExec(runnable1);
+ }
+
+ public void queryFinished(final ISearchQuery query) {
+ final Runnable runnable2 = new Runnable() {
+ public void run() {
+ updateBusyLabel();
+ AbstractArtifactSearchResult result = getInput();
+
+ if (result == null || !result.getQuery().equals(query)) {
+ return;
+ }
+ }
+ };
+ asyncExec(runnable2);
+ }
+ };
+ }
+
+ private Control createBusyControl() {
+ Table busyLabel = new Table(aPagebook, SWT.NONE);
+ TableItem item = new TableItem(busyLabel, SWT.NONE);
+ item.setText("Busy");
+ busyLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ return busyLabel;
+ }
+
+ private void createViewer(Composite parent) {
+ TableViewer viewer = new TableViewer(parent, SWT.MULTI);
+ aViewer = viewer;
+ configureTableViewer(viewer);
+
+ viewer.addSelectionChangedListener(new SelectionCountChangeListener(aViewPart.getViewSite()));
+ }
+
+ private void showBusyLabel(boolean shouldShowBusy) {
+ if (shouldShowBusy)
+ aPagebook.showPage(aBusyLabel);
+ else
+ aPagebook.showPage(aViewerContainer);
+ }
+
+ private void updateBusyLabel() {
+ AbstractArtifactSearchResult result = getInput();
+ boolean shouldShowBusy =
+ result != null && NewSearchUI.isQueryRunning(result.getQuery()) && result.getMatchCount() == 0;
+ if (shouldShowBusy == aIsBusyShown) return;
+ aIsBusyShown = shouldShowBusy;
+ showBusyLabel(aIsBusyShown);
+ }
+
+ /**
+ * Returns the currently shown result.
+ *
+ * @return the previously set result or <code>null</code>
+ * @see AbstractTextSearchViewPage#setInput(ISearchResult, Object)
+ */
+ public AbstractArtifactSearchResult getInput() {
+ return (AbstractArtifactSearchResult) aInput;
+ }
+
+ private void turnOffDecoration() {
+ IBaseLabelProvider lp = aViewer.getLabelProvider();
+ if (lp instanceof DecoratingLabelProvider) {
+ ((DecoratingLabelProvider) lp).setLabelDecorator(null);
+ }
+ }
+
+ private void turnOnDecoration() {
+ IBaseLabelProvider lp = aViewer.getLabelProvider();
+ if (lp instanceof DecoratingLabelProvider) {
+ ((DecoratingLabelProvider) lp).setLabelDecorator(PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator());
+
+ }
+ }
+
+ private synchronized void scheduleUIUpdate() {
+ if (!aIsUIUpdateScheduled) {
+ aIsUIUpdateScheduled = true;
+ new UpdateUIJob().schedule();
+ }
+ }
+
+ private synchronized void runBatchedUpdates() {
+ if (aBatchedUpdates != null) {
+ elementsChanged(aBatchedUpdates.toArray());
+ aBatchedUpdates.clear();
+ updateBusyLabel();
+ }
+ }
+
+ private synchronized boolean hasMoreUpdates() {
+ if (aBatchedUpdates != null) return aBatchedUpdates.size() > 0;
+ return false;
+ }
+
+ private boolean isQueryRunning() {
+ AbstractArtifactSearchResult result = getInput();
+ if (result != null) {
+ return NewSearchUI.isQueryRunning(result.getQuery());
+ }
+ return false;
+ }
+
+ private void asyncExec(final Runnable runnable) {
+ final Control control = getControl();
+ if (control != null && !control.isDisposed()) {
+ Display currentDisplay = Display.getCurrent();
+ if (currentDisplay == null || !currentDisplay.equals(control.getDisplay()))
+ // meaning we're not executing on the display thread of the
+ // control
+ control.getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ if (control != null && !control.isDisposed()) runnable.run();
+ }
+ });
+ else
+ runnable.run();
+ }
+ }
+
+ @Override
+ public Control getControl() {
+ return aPagebook;
+ }
+
+ @Override
+ public void setFocus() {
+ Control control = aViewer.getControl();
+ if (control != null && !control.isDisposed()) control.setFocus();
+ }
+
+ public Object getUIState() {
+ return aViewer.getSelection();
+ }
+
+ public void setInput(ISearchResult search, Object viewState) {
+ disconnectViewer();
+
+ aInput = search;
+ if (search != null) {
+ aViewer.setInput(search);
+ if (viewState instanceof ISelection) {
+ aViewer.setSelection((ISelection) viewState, true);
+ }
+ }
+
+ updateBusyLabel();
+ turnOffDecoration();
+ scheduleUIUpdate();
+ }
+
+ private ISearchResult disconnectViewer() {
+ ISearchResult result = (ISearchResult) aViewer.getInput();
+ aViewer.setInput(null);
+ return result;
+ }
+
+ public void setViewPart(ISearchResultViewPart part) {
+ aViewPart = part;
+ }
+
+ public void restoreState(IMemento memento) {
+ }
+
+ public void saveState(IMemento memento) {
+ }
+
+ public void setID(String id) {
+ aId = id;
+ }
+
+ public String getID() {
+ return aId;
+ }
+
+ public String getLabel() {
+ AbstractArtifactSearchResult result = getInput();
+ if (result == null) return ""; //$NON-NLS-1$
+ return result.getLabel();
+ }
+
+ public StructuredViewer getViewer() {
+ return aViewer;
+ }
+
+ /**
+ * @param viewer the viewer to be configured
+ */
+ protected abstract void configureTableViewer(TableViewer viewer);
+
+ /**
+ * This method is called whenever the set of matches for the given elements changes. This method is guaranteed to be
+ * called in the UI thread. Note that this notification is asynchronous. i.e. further changes may have occurred by
+ * the time this method is called. They will be described in a future call.
+ *
+ * @param objects array of objects that has to be refreshed
+ */
+ protected abstract void elementsChanged(Object[] objects);
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchEngine.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchEngine.java
new file mode 100644
index 00000000000..e5986a8b9e2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchEngine.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.text.MessageFormat;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterModelList;
+import org.eclipse.osee.framework.ui.skynet.search.ui.IArtifactSearchResultCollector;
+import org.eclipse.search.ui.NewSearchUI;
+
+public class ArtifactSearchEngine {
+
+ public IStatus search(IArtifactSearchResultCollector collector, FilterModelList list) {
+ Assert.isNotNull(collector);
+ Assert.isNotNull(list);
+
+ IProgressMonitor monitor = collector.getProgressMonitor();
+
+ String message = "Message 1";
+ MultiStatus status = new MultiStatus(NewSearchUI.PLUGIN_ID, IStatus.OK, message, null);
+
+ int amountOfWork = 100;
+ try {
+ monitor.beginTask("", amountOfWork); //$NON-NLS-1$
+ if (amountOfWork > 0) {
+ Integer[] args = new Integer[] {new Integer(1), new Integer(amountOfWork)};
+ monitor.setTaskName(MessageFormat.format("Scanning:", (Object[]) args));
+ }
+ collector.aboutToStart();
+ } catch (CoreException ex) {
+ status.add(ex.getStatus());
+ } finally {
+ monitor.done();
+ try {
+ collector.done();
+ } catch (CoreException ex) {
+ status.add(ex.getStatus());
+ }
+ }
+ return status;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchPage.java
new file mode 100644
index 00000000000..3148fbf8d77
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchPage.java
@@ -0,0 +1,594 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager;
+import org.eclipse.osee.framework.ui.skynet.ArtifactSearchViewPage;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterModel;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterModelList;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer;
+import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.HyperLinkLabel;
+import org.eclipse.search.ui.IReplacePage;
+import org.eclipse.search.ui.ISearchPage;
+import org.eclipse.search.ui.ISearchPageContainer;
+import org.eclipse.search.ui.ISearchResultPage;
+import org.eclipse.search.ui.ISearchResultViewPart;
+import org.eclipse.search.ui.NewSearchUI;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author Michael S. Rodgers
+ */
+public class ArtifactSearchPage extends DialogPage implements ISearchPage, IReplacePage {
+ private static final Pattern storageStringPattern = Pattern.compile("(.*?);(.*?);(.*?);(.*)");
+ private static final Pattern notSearchPrimitivePattern = Pattern.compile("Not \\[(.*)\\]");
+ private static final String FILTERS_STORAGE_KEY = ".filters";
+
+ private static ISearchPageContainer aContainer;
+
+ private Button addButton;
+ private Button allButton;
+ private Button atLeastOneButton;
+ private ComboViewer searchTypeList;
+ private Button notButton;
+
+ private StackLayout selectionLayout;
+ private static FilterTableViewer filterviewer;
+ private Composite artifactTypeControls;
+ private ListViewer artifactTypeList;
+
+ private SearchFilter HRID_VALUE_FILTER;
+ private SearchFilter ATTRIBUTE_VALUE_FILTER;
+ private static int lastSearchTypeListSelected = 2; // Attribute
+ private static int lastAttributeTypeListSelected = 0; // Name
+
+ private final Matcher storageStringMatcher = storageStringPattern.matcher("");
+ private final Matcher notSearchPrimitiveMatcher = notSearchPrimitivePattern.matcher("");
+
+ public void createControl(Composite parent) {
+ initializeDialogUnits(parent);
+ boolean isConnectionOk = DbConnectionExceptionComposite.dbConnectionIsOk(parent);
+ if (isConnectionOk != false) {
+ Composite mainComposite = new Composite(parent, SWT.NONE);
+ mainComposite.setFont(parent.getFont());
+ mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ mainComposite.setLayout(new GridLayout());
+
+ Label label = new Label(mainComposite, SWT.NONE);
+ label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ Branch branch = getSelectedBranch();
+ String defaultBranch = branch != null ? branch.toString() : "None Found";
+ label.setText(String.format("Searching on current default branch: [%s]", defaultBranch));
+
+ addFilterControls(mainComposite);
+ addTableControls(mainComposite);
+ addSearchScope(mainComposite);
+ addFilterListeners();
+
+ setControl(parent);
+ aContainer.setPerformActionEnabled(false);
+
+ SkynetGuiPlugin.getInstance().setHelp(mainComposite, "artifact_search");
+
+ updateWidgets();
+
+ loadState();
+ } else {
+ setControl(parent);
+ }
+ }
+
+ private Branch getSelectedBranch() {
+ return BranchManager.getDefaultBranch();
+ }
+
+ /**
+ * Controls to allow the user to select wether all the filters are combined using AND or OR
+ */
+ private void addSearchScope(Composite composite) {
+ Group allSelectionGroup = new Group(composite, SWT.NONE);
+ allSelectionGroup.setText("Artifacts that match");
+ allSelectionGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ allSelectionGroup.setLayout(new GridLayout(2, false));
+
+ allButton = new Button(allSelectionGroup, SWT.RADIO);
+ allButton.setText("All filters (AND)");
+ allButton.setSelection(true);
+
+ atLeastOneButton = new Button(allSelectionGroup, SWT.RADIO);
+ atLeastOneButton.setText("At least one filter (OR)");
+ }
+
+ private void createArtifactTypeSearchControls(Composite optionsComposite) {
+ artifactTypeControls = new Composite(optionsComposite, SWT.NONE);
+ artifactTypeControls.setLayout(new GridLayout(1, true));
+
+ artifactTypeList = new ListViewer(artifactTypeControls);
+ GridData gd = new GridData();
+ gd.heightHint = 100;
+ artifactTypeList.getList().setLayoutData(gd);
+ artifactTypeList.setContentProvider(new SearchContentProvider());
+ artifactTypeList.setLabelProvider(new SearchLabelProvider());
+ artifactTypeList.setSorter(new SearchSorter());
+
+ try {
+ for (ArtifactType descriptor : TypeValidityManager.getValidArtifactTypes(getSelectedBranch())) {
+ artifactTypeList.add(descriptor.getName());
+ artifactTypeList.setData(descriptor.getName(), descriptor);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, "Error encountered while getting list of artifact types", ex, true);
+ }
+ addToSearchTypeList(new ArtifactTypeFilter(artifactTypeControls, artifactTypeList));
+ }
+
+ private void createOrphanSearchControls(Composite optionsComposite) {
+ //uses the artifactTypeList from Artifact_type_filter
+ artifactTypeList.getList().select(0);
+ addToSearchTypeList(new OrphanSearchFilter("Orphan Search", artifactTypeControls, artifactTypeList));
+ }
+
+ private void addToSearchTypeList(SearchFilter filter) {
+ searchTypeList.add(filter.getFilterName());
+ searchTypeList.setData(filter.getFilterName(), filter);
+ }
+
+ private void createRelationSearchControls(Composite optionsComposite) {
+ Composite relationControls = new Composite(optionsComposite, SWT.NONE);
+ relationControls.setLayout(new GridLayout(2, true));
+
+ final ComboViewer relationTypeList = new ComboViewer(relationControls, SWT.DROP_DOWN | SWT.READ_ONLY);
+ relationTypeList.setContentProvider(new SearchContentProvider());
+ relationTypeList.setLabelProvider(new SearchLabelProvider());
+ relationTypeList.setSorter(new SearchSorter());
+ final ComboViewer relationSideList = new ComboViewer(relationControls, SWT.DROP_DOWN | SWT.READ_ONLY);
+ relationSideList.setContentProvider(new SearchContentProvider());
+ relationSideList.setLabelProvider(new SearchLabelProvider());
+ relationSideList.setSorter(new SearchSorter());
+
+ try {
+ for (RelationType linkDescriptor : RelationTypeManager.getValidTypes(getSelectedBranch())) {
+ relationTypeList.add(linkDescriptor.getTypeName());
+ relationTypeList.setData(linkDescriptor.getTypeName(), linkDescriptor);
+ }
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+
+ relationTypeList.getCombo().addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ relationSideList.getCombo().removeAll();
+ RelationType linkDescriptor =
+ (RelationType) relationTypeList.getData(relationTypeList.getCombo().getText());
+ relationSideList.add(linkDescriptor.getSideAName());
+ relationSideList.add(linkDescriptor.getSideBName());
+ relationSideList.getCombo().select(0);
+ }
+ });
+ relationTypeList.getCombo().setVisibleItemCount(Math.min(relationTypeList.getCombo().getItemCount(), 15));
+
+ if (relationTypeList.getCombo().getItemCount() > 0) { // ensure we don't get a null pointer
+ // exception when there are no relation types in the db
+ relationTypeList.getCombo().select(0);
+ RelationType linkDescriptor = (RelationType) relationTypeList.getData(relationTypeList.getCombo().getText());
+ relationSideList.add(linkDescriptor.getSideAName());
+ relationSideList.add(linkDescriptor.getSideBName());
+ relationSideList.getCombo().select(0);
+ }
+
+ addToSearchTypeList(new InRelationFilter(relationControls, relationTypeList, relationSideList));
+ }
+
+ private void createHridSearchControls(Composite optionsComposite) {
+ Composite hridControls = new Composite(optionsComposite, SWT.NONE);
+ hridControls.setLayout(new GridLayout(2, false));
+
+ Label typeLabel = new Label(hridControls, SWT.HORIZONTAL);
+ typeLabel.setText("Human Readable ID:");
+ Text hridValue = new Text(hridControls, SWT.BORDER);
+ hridValue.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+ hridValue.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ addButton.setEnabled(HRID_VALUE_FILTER.isValid());
+ }
+ });
+
+ new Label(hridControls, SWT.NONE);
+
+ Label wildLabel = new Label(hridControls, SWT.NONE);
+ wildLabel.setText("(* = any string, \\* = literal *)");
+
+ HRID_VALUE_FILTER = new HridValueFilter(hridControls, hridValue);
+ addToSearchTypeList(HRID_VALUE_FILTER);
+ }
+
+ private void createAttributeSearchControls(Composite optionsComposite) {
+ Composite attributeControls = new Composite(optionsComposite, SWT.NONE);
+ attributeControls.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ attributeControls.setLayout(new GridLayout(2, false));
+
+ Label typeLabel = new Label(attributeControls, SWT.HORIZONTAL);
+ typeLabel.setText("Attribute Type:");
+
+ final ComboViewer attributeTypeList = new ComboViewer(attributeControls, SWT.DROP_DOWN | SWT.READ_ONLY);
+ attributeTypeList.setContentProvider(new SearchContentProvider());
+ attributeTypeList.setLabelProvider(new SearchLabelProvider());
+ attributeTypeList.setSorter(new SearchSorter());
+
+ Label valueLabel = new Label(attributeControls, SWT.HORIZONTAL);
+ valueLabel.setText("Attribute Value:");
+
+ Text attributeValue = new Text(attributeControls, SWT.BORDER);
+ attributeValue.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ try {
+ for (AttributeType type : TypeValidityManager.getValidAttributeTypes(getSelectedBranch())) {
+ attributeTypeList.add(type.getName());
+ attributeTypeList.setData(type.getName(), type);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, "Error encountered while getting list of attribute types", ex,
+ true);
+ }
+ attributeTypeList.getCombo().setVisibleItemCount(Math.min(attributeTypeList.getCombo().getItemCount(), 15));
+ attributeTypeList.getCombo().select(lastAttributeTypeListSelected);
+ attributeTypeList.addSelectionChangedListener(new ISelectionChangedListener() {
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ lastAttributeTypeListSelected = attributeTypeList.getCombo().getSelectionIndex();
+ }
+ });
+
+ attributeValue.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ addButton.setEnabled(ATTRIBUTE_VALUE_FILTER.isValid());
+ }
+ });
+
+ new Label(attributeControls, SWT.NONE); // spacerLabelSoTheNextOneWillBeInColumnTwo
+
+ Label wildLabel = new Label(attributeControls, SWT.NONE);
+ wildLabel.setText("(* = any string, \\* = literal *)");
+
+ ATTRIBUTE_VALUE_FILTER = new AttributeValueFilter(attributeControls, attributeTypeList, attributeValue);
+ addToSearchTypeList(ATTRIBUTE_VALUE_FILTER);
+ }
+
+ private void addFilterControls(Composite mainComposite) {
+ Group filterGroup = new Group(mainComposite, SWT.NONE);
+ filterGroup.setText("Create a Filter");
+ filterGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ filterGroup.setLayout(new GridLayout());
+
+ Composite composite = new Composite(filterGroup, SWT.BORDER);
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ composite.setLayout(new GridLayout(2, false));
+
+ searchTypeList = new ComboViewer(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
+ searchTypeList.setContentProvider(new SearchContentProvider());
+ searchTypeList.setLabelProvider(new SearchLabelProvider());
+ searchTypeList.setSorter(new SearchSorter());
+
+ notButton = new Button(composite, SWT.CHECK);
+ notButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, true, false));
+ notButton.setText("Not Equal");
+
+ selectionLayout = new StackLayout();
+
+ Composite optionsComposite = new Composite(filterGroup, SWT.BORDER);
+ optionsComposite.setLayout(new GridLayout());
+ optionsComposite.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+
+ optionsComposite.setLayout(selectionLayout);
+ createAttributeSearchControls(optionsComposite);
+ createArtifactTypeSearchControls(optionsComposite);
+ createOrphanSearchControls(optionsComposite);
+ createRelationSearchControls(optionsComposite);
+ createHridSearchControls(optionsComposite);
+
+ searchTypeList.getCombo().setVisibleItemCount(7);
+ searchTypeList.getCombo().select(lastSearchTypeListSelected);
+ searchTypeList.addSelectionChangedListener(new ISelectionChangedListener() {
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ lastSearchTypeListSelected = searchTypeList.getCombo().getSelectionIndex();
+ }
+ });
+ addButton = new Button(filterGroup, SWT.PUSH);
+ addButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));
+ addButton.setText("Add Filter");
+ }
+
+ private void addFilterListeners() {
+ addButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ SearchFilter searchFilter = (SearchFilter) searchTypeList.getData(searchTypeList.getCombo().getText());
+ searchFilter.setNot(notButton.getSelection());
+ searchFilter.addFilterTo(filterviewer);
+ updateOKStatus();
+ }
+ });
+
+ searchTypeList.getCombo().addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ updateWidgets();
+ }
+ });
+ }
+
+ private void updateWidgets() {
+ SearchFilter searchFilter = (SearchFilter) searchTypeList.getData(searchTypeList.getCombo().getText());
+ addButton.setEnabled(searchFilter.isValid());
+ selectionLayout.topControl = searchFilter.optionsControl;
+ selectionLayout.topControl.getParent().layout();
+ }
+
+ private void addTableControls(Composite composite) {
+ Composite filterComposite = new Composite(composite, SWT.NONE);
+ filterComposite.setFont(composite.getFont());
+ filterComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ filterComposite.setLayout(new GridLayout(2, false));
+
+ Label tableLabel = new Label(filterComposite, SWT.FILL);
+ tableLabel.setText("Filters ");
+
+ HyperLinkLabel clearAllLabel = new HyperLinkLabel(filterComposite, SWT.NONE);
+ clearAllLabel.setText("clear all");
+ clearAllLabel.addListener(SWT.MouseUp, new Listener() {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ @Override
+ public void handleEvent(Event event) {
+ for (FilterModel filterModel : new CopyOnWriteArrayList<FilterModel>(
+ filterviewer.getFilterList().getFilters())) {
+ filterviewer.removeFilter(filterModel);
+ }
+ filterviewer.refresh();
+ }
+ });
+
+ Table table = new Table(composite, SWT.BORDER | SWT.V_SCROLL | SWT.HIDE_SELECTION);
+ filterviewer = new FilterTableViewer(table);
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.heightHint = 100;
+ gridData.widthHint = 500;
+ table.setLayoutData(gridData);
+ }
+
+ public void setContainer(ISearchPageContainer container) {
+ ArtifactSearchPage.aContainer = container;
+ }
+
+ /**
+ * @return Returns the aContainer.
+ */
+ public static ISearchPageContainer getContainer() {
+ return aContainer;
+ }
+
+ public boolean performAction() {
+ NewSearchUI.activateSearchResultView();
+ filterviewer.getFilterList().setAllSelected(allButton.getSelection());
+ AbstractArtifactSearchQuery searchQuery =
+ new FilterArtifactSearchQuery(filterviewer.getFilterList(), getSelectedBranch());
+ NewSearchUI.runQueryInBackground(searchQuery);
+ saveState();
+ return true;
+ }
+
+ public boolean performReplace() {
+ filterviewer.getFilterList().setAllSelected(allButton.getSelection());
+ AbstractArtifactSearchQuery searchQuery =
+ new FilterArtifactSearchQuery(filterviewer.getFilterList(), getSelectedBranch());
+
+ IStatus status = NewSearchUI.runQueryInForeground(getContainer().getRunnableContext(), searchQuery);
+ if (status.matches(IStatus.CANCEL)) {
+ return false;
+ }
+
+ ISearchResultViewPart view = NewSearchUI.activateSearchResultView();
+ if (view != null) {
+ final ISearchResultPage page = view.getActivePage();
+ if (page instanceof ArtifactSearchViewPage) {
+ runAttributeFindReplaceDialog(page);
+ }
+ }
+ return true;
+ }
+
+ private void runAttributeFindReplaceDialog(final ISearchResultPage page) {
+ Display.getCurrent().asyncExec(new Runnable() {
+ public void run() {
+ if (page instanceof ArtifactSearchViewPage) {
+ ArtifactSearchViewPage artifactPage = (ArtifactSearchViewPage) page;
+ List<Artifact> artifacts = artifactPage.getInput().getArtifactResults();
+ new AttributeFindReplaceDialog(page.getSite().getShell(), artifacts).open();
+ }
+ }
+ });
+ }
+
+ /*
+ * Implements method from IDialogPage
+ */
+ @Override
+ public void setVisible(boolean visible) {
+ updateOKStatus();
+ super.setVisible(visible);
+ }
+
+ public static void updateOKStatus() {
+ if (filterviewer == null || filterviewer.getFilterList().getFilters().isEmpty()) {
+ getContainer().setPerformActionEnabled(false);
+ } else {
+ getContainer().setPerformActionEnabled(true);
+ }
+ }
+
+ private String asString(FilterModel model) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(model.getSearch());
+ builder.append(";");
+ builder.append(model.getType());
+ builder.append(";");
+ builder.append(model.getValue());
+ builder.append(";");
+ builder.append(model.getSearchPrimitive().getStorageString());
+ return builder.toString();
+ }
+
+ private void processStoredFilter(String entry) {
+ storageStringMatcher.reset(entry);
+ if (storageStringMatcher.find()) {
+ String searchPrimitive = storageStringMatcher.group(1);
+ String type = storageStringMatcher.group(2);
+ String value = storageStringMatcher.group(3);
+ String storageString = storageStringMatcher.group(4);
+ boolean isNotEnabled = false;
+ notSearchPrimitiveMatcher.reset(storageString);
+ if (notSearchPrimitiveMatcher.find()) {
+ isNotEnabled = true;
+ storageString = notSearchPrimitiveMatcher.group(1);
+ }
+ SearchFilter searchFilter = (SearchFilter) searchTypeList.getData(searchPrimitive);
+ searchFilter.loadFromStorageString(filterviewer, type, value, storageString, isNotEnabled);
+ searchFilter.getFilterName();
+ }
+ }
+
+ protected void saveState() {
+ IDialogSettings dialogSettings = SkynetGuiPlugin.getInstance().getDialogSettings();
+ if (dialogSettings != null) {
+
+ List<String> filterString = new ArrayList<String>();
+ FilterModelList filterList = filterviewer.getFilterList();
+ for (FilterModel model : filterList.getFilters()) {
+ filterString.add(asString(model));
+ }
+ dialogSettings.put(SkynetGuiPlugin.PLUGIN_ID + FILTERS_STORAGE_KEY,
+ filterString.toArray(new String[filterString.size()]));
+ }
+ }
+
+ protected void loadState() {
+ IDialogSettings dialogSettings = SkynetGuiPlugin.getInstance().getDialogSettings();
+ if (dialogSettings != null) {
+ String[] filters = dialogSettings.getArray(SkynetGuiPlugin.PLUGIN_ID + FILTERS_STORAGE_KEY);
+ if (filters != null) {
+ for (String entry : filters) {
+ processStoredFilter(entry);
+ }
+ }
+ }
+ }
+
+ public class SearchLabelProvider implements ILabelProvider {
+
+ public Image getImage(Object arg0) {
+ return null;
+ }
+
+ public String getText(Object arg0) {
+ return (String) arg0;
+ }
+
+ public void addListener(ILabelProviderListener arg0) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object arg0, String arg1) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener arg0) {
+ }
+ }
+
+ public class SearchContentProvider implements IStructuredContentProvider {
+ @SuppressWarnings("unchecked")
+ public Object[] getElements(Object arg0) {
+ return ((ArrayList) arg0).toArray();
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
+ }
+ }
+
+ public class SearchSorter extends ViewerSorter {
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ return getComparator().compare(e1, e2);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchResult.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchResult.java
new file mode 100644
index 00000000000..c0fc75b95a1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactSearchResult.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+
+public class ArtifactSearchResult extends AbstractArtifactSearchResult {
+ private AbstractArtifactSearchQuery aQuery;
+
+ public ArtifactSearchResult(AbstractArtifactSearchQuery job) {
+ aQuery = job;
+ }
+
+ public ImageDescriptor getImageDescriptor() {
+ return null;
+ }
+
+ public String getLabel() {
+ return aQuery.getResultLabel();
+ }
+
+ public String getTooltip() {
+ return getLabel();
+ }
+
+ public AbstractArtifactSearchQuery getQuery() {
+ return aQuery;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactTypeFilter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactTypeFilter.java
new file mode 100644
index 00000000000..c03c6c55086
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ArtifactTypeFilter.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import static org.eclipse.osee.framework.skynet.core.artifact.search.DepricatedOperator.EQUAL;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactTypeSearch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ISearchPrimitive;
+import org.eclipse.osee.framework.skynet.core.artifact.search.NotSearch;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ArtifactTypeFilter extends SearchFilter {
+ private ListViewer searchTypeList;
+
+ public ArtifactTypeFilter(Control optionsControl, ListViewer searchTypeList) {
+ super("Artifact Type", optionsControl);
+ this.searchTypeList = searchTypeList;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.define.artifact.search.SearchFilter#addFilterTo(osee.define.artifact.search.filter.FilterTableViewer)
+ */
+ @Override
+ public void addFilterTo(FilterTableViewer filterViewer) {
+ for (String type : searchTypeList.getList().getSelection()) {
+ ISearchPrimitive primitive = new ArtifactTypeSearch(type, EQUAL);
+ if (not) primitive = new NotSearch(primitive);
+ filterViewer.addItem(primitive, getFilterName(), type, "");
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.define.artifact.search.SearchFilter#isValid()
+ */
+ @Override
+ public boolean isValid() {
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.search.SearchFilter#loadFromStorageString(org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer, java.lang.String, java.lang.String, java.lang.String, boolean)
+ */
+ @Override
+ public void loadFromStorageString(FilterTableViewer filterViewer, String type, String value, String storageString, boolean isNotEnabled) {
+ ISearchPrimitive primitive = ArtifactTypeSearch.getPrimitive(storageString);
+ if (isNotEnabled) primitive = new NotSearch(primitive);
+ filterViewer.addItem(primitive, getFilterName(), type, value);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AttributeFindReplaceDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AttributeFindReplaceDialog.java
new file mode 100644
index 00000000000..4809f8f9734
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AttributeFindReplaceDialog.java
@@ -0,0 +1,226 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.util.List;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Dialog for performing find/replace of attribute values on a set of <code>Artifact</code>'s.
+ *
+ * @see org.eclipse.osee.framework.skynet.core.artifact.Artifact
+ * @see org.eclipse.osee.framework.skynet.core.attribute.Attribute
+ * @author Robert A. Fisher
+ */
+public class AttributeFindReplaceDialog extends Dialog {
+ private ComboViewer cmbAttributeDescriptors;
+ private Text txtFindRegEx;
+ private Text txtReplaceStr;
+
+ private List<Artifact> artifacts;
+
+ public AttributeFindReplaceDialog(Shell parentShell, List<Artifact> artifacts) {
+ super(parentShell);
+
+ this.artifacts = artifacts;
+ setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | getDefaultOrientation() | SWT.RESIZE);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ getShell().setText("Find/Replace Attribute Value");
+
+ Composite mainComposite = new Composite(parent, SWT.NONE);
+ mainComposite.setFont(parent.getFont());
+ mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ mainComposite.setLayout(new GridLayout(1, false));
+
+ addDialogControls(mainComposite);
+ addListeners();
+ setInputs();
+
+ return mainComposite;
+ }
+
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ super.createButtonsForButtonBar(parent);
+ checkEnabled();
+ }
+
+ private void setInputs() {
+ try {
+ cmbAttributeDescriptors.setInput(TypeValidityManager.getValidAttributeTypes(BranchManager.getDefaultBranch()).toArray(
+ AttributeType.EMPTY_ARRAY));
+ cmbAttributeDescriptors.getCombo().select(0);
+ } catch (OseeCoreException ex) {
+ cmbAttributeDescriptors.setInput(new Object[] {ex});
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ private void addListeners() {
+ txtFindRegEx.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ checkEnabled();
+ }
+ });
+ }
+
+ private void addDialogControls(Composite mainComposite) {
+ Label label;
+ label = new Label(mainComposite, SWT.LEFT);
+ label.setText("Attribute Type");
+ label.setToolTipText("The attribute to perform the find/replace logic against");
+
+ cmbAttributeDescriptors = new ComboViewer(mainComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+ cmbAttributeDescriptors.setContentProvider(new ArrayContentProvider());
+ cmbAttributeDescriptors.setLabelProvider(new ArtifactTypeLabelProvider());
+ cmbAttributeDescriptors.setSorter(new ViewerSorter() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ return getComparator().compare(((AttributeType) e1).getName(), ((AttributeType) e2).getName());
+ }
+ });
+
+ label = new Label(mainComposite, SWT.LEFT);
+ label.setText("Find (regex):");
+ label.setToolTipText("The regular expression to perform matching with against the attribute value");
+ txtFindRegEx = new Text(mainComposite, SWT.BORDER);
+
+ label = new Label(mainComposite, SWT.LEFT);
+ label.setText("Replace With:");
+ label.setToolTipText("The value to put in place of the value matched by the Find regular expression");
+ txtReplaceStr = new Text(mainComposite, SWT.BORDER);
+
+ }
+
+ private void checkEnabled() {
+ boolean enable =
+ (cmbAttributeDescriptors.getInput() instanceof AttributeType[]) && (txtFindRegEx.getText().length() > 0) && (!artifacts.isEmpty());
+
+ getButton(IDialogConstants.OK_ID).setEnabled(enable);
+ }
+
+ @Override
+ protected void okPressed() {
+ final Pattern pattern = Pattern.compile(txtFindRegEx.getText());
+ final String replaceText = txtReplaceStr.getText();
+ final String attributeName =
+ ((AttributeType) ((IStructuredSelection) cmbAttributeDescriptors.getSelection()).getFirstElement()).getName();
+
+ Job job = new Job("Find/Replace") {
+
+ @Override
+ protected IStatus run(final IProgressMonitor monitor) {
+ IStatus toReturn = Status.CANCEL_STATUS;
+ Branch branch = artifacts.get(0).getBranch();
+ try {
+ monitor.beginTask("Find/Replace " + attributeName + " Attribute Value", artifacts.size());
+
+ SkynetTransaction transaction = new SkynetTransaction(branch);
+ for (Artifact artifact : artifacts) {
+ monitor.subTask("Modifying " + artifact.getDescriptiveName());
+ for (Attribute<?> attribute : artifact.getAttributes(attributeName)) {
+ Matcher matcher = pattern.matcher(attribute.toString());
+ attribute.setFromString(matcher.replaceAll(replaceText));
+ }
+ artifact.persistAttributes(transaction);
+ monitor.worked(1);
+ if (monitor.isCanceled()) {
+ throw new IllegalStateException("USER CANCELLED");
+ }
+ }
+
+ transaction.execute();
+ toReturn = Status.OK_STATUS;
+ } catch (Exception ex) {
+ if (ex.getMessage().equals("USER CANCELLED")) {
+ toReturn = Status.CANCEL_STATUS;
+ } else {
+ toReturn = new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, Status.OK, ex.getMessage(), ex);
+ }
+ } finally {
+ monitor.done();
+ }
+
+ return toReturn;
+ }
+ };
+ Jobs.startJob(job);
+ super.okPressed();
+ }
+ private static class ArtifactTypeLabelProvider implements ILabelProvider {
+
+ public Image getImage(Object element) {
+ return null;
+ }
+
+ public String getText(Object element) {
+ if (element instanceof AttributeType)
+ return ((AttributeType) element).getName();
+ else
+ return element.toString();
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return true;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AttributeValueFilter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AttributeValueFilter.java
new file mode 100644
index 00000000000..15d32d1dbb8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/AttributeValueFilter.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.osee.framework.skynet.core.artifact.search.AttributeValueSearch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ISearchPrimitive;
+import org.eclipse.osee.framework.skynet.core.artifact.search.NotSearch;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class AttributeValueFilter extends SearchFilter {
+ private ComboViewer attributeTypeList;
+ private Text attributeValue;
+
+ public AttributeValueFilter(Control optionsControl, ComboViewer attributeTypeList, Text attributeValue) {
+ super("Attribute Value", optionsControl);
+ this.attributeTypeList = attributeTypeList;
+ this.attributeValue = attributeValue;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.define.artifact.search.SearchFilter#addFilterTo(osee.define.artifact.search.filter.FilterTableViewer)
+ */
+ @Override
+ public void addFilterTo(FilterTableViewer filterViewer) {
+ String type = attributeTypeList.getCombo().getText();
+ String value = attributeValue.getText();
+
+ OperatorAndValue result = handleWildCard(value);
+ ISearchPrimitive primitive = new AttributeValueSearch(type, result.value, result.operator);
+ if (not) primitive = new NotSearch(primitive);
+ filterViewer.addItem(primitive, getFilterName(), type, result.value);
+ }
+
+ /* (non-Javadoc)
+ * @see osee.define.artifact.search.SearchFilter#isValid()
+ */
+ @Override
+ public boolean isValid() {
+ return !attributeValue.getText().equals("");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.search.SearchFilter#loadFromStorageString(org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer, java.lang.String, java.lang.String, java.lang.String, boolean)
+ */
+ @Override
+ public void loadFromStorageString(FilterTableViewer filterViewer, String type, String value, String storageString, boolean isNotEnabled) {
+ ISearchPrimitive primitive = AttributeValueSearch.getPrimitive(storageString);
+ if (isNotEnabled) primitive = new NotSearch(primitive);
+ filterViewer.addItem(primitive, getFilterName(), type, value);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/FilterArtifactSearchQuery.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/FilterArtifactSearchQuery.java
new file mode 100644
index 00000000000..66bf150072e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/FilterArtifactSearchQuery.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ISearchPrimitive;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterModel;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterModelList;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class FilterArtifactSearchQuery extends AbstractArtifactSearchQuery {
+ private final FilterModelList filterList;
+ private final Branch branch;
+ private String criteriaLabel = "";
+
+ /**
+ * @param filterList
+ * @param branch
+ */
+ public FilterArtifactSearchQuery(FilterModelList filterList, Branch branch) {
+ this.filterList = filterList;
+ this.branch = branch;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.search.AbstractArtifactSearchQuery#getArtifacts()
+ */
+ @Override
+ public Collection<Artifact> getArtifacts() throws OseeCoreException {
+ boolean firstTime = true;
+ List<ISearchPrimitive> criteria = new LinkedList<ISearchPrimitive>();
+
+ for (FilterModel model : filterList.getFilters()) {
+ criteria.add(model.getSearchPrimitive());
+
+ if (!firstTime) {
+ if (filterList.isAllSelected())
+ criteriaLabel += " and ";
+ else
+ criteriaLabel += " or ";
+ }
+
+ criteriaLabel += model;
+ firstTime = false;
+ }
+
+ MaxMatchCountConfirmer confirmer = new MaxMatchCountConfirmer();
+ Collection<Artifact> artifacts =
+ ArtifactPersistenceManager.getInstance().getArtifacts(criteria, filterList.isAllSelected(), branch,
+ confirmer);
+ if (confirmer.isConfirmed()) {
+ return artifacts;
+ }
+ return Collections.emptyList();
+ }
+
+ @Override
+ public String getCriteriaLabel() {
+ return criteriaLabel;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/HistoricalArtifactSearchQuery.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/HistoricalArtifactSearchQuery.java
new file mode 100644
index 00000000000..88fe68af85a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/HistoricalArtifactSearchQuery.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class HistoricalArtifactSearchQuery extends AbstractArtifactSearchQuery {
+ private String attributePattern;
+ private final Branch branch;
+
+ public HistoricalArtifactSearchQuery(String attributePattern, Branch branch) {
+ this.attributePattern = attributePattern;
+ this.branch = branch;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.search.AbstractArtifactSearchQuery#getArtifacts()
+ */
+ @Override
+ public Collection<Artifact> getArtifacts() throws OseeCoreException {
+ return ArtifactQuery.getArtifactsFromHistoricalAttributeValue(attributePattern, branch);
+ }
+
+ public String getCriteriaLabel() {
+ return attributePattern;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/HridValueFilter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/HridValueFilter.java
new file mode 100644
index 00000000000..83a9b21f083
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/HridValueFilter.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactHridSearch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ISearchPrimitive;
+import org.eclipse.osee.framework.skynet.core.artifact.search.NotSearch;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class HridValueFilter extends SearchFilter {
+ private Text hridValue;
+
+ public HridValueFilter(Control optionsControl, Text hridValue) {
+ super("Human Readable ID", optionsControl);
+ this.hridValue = hridValue;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.define.artifact.search.SearchFilter#addFilterTo(osee.define.artifact.search.filter.FilterTableViewer)
+ */
+ @Override
+ public void addFilterTo(FilterTableViewer filterViewer) {
+ OperatorAndValue result = handleWildCard(hridValue.getText());
+ ISearchPrimitive primitive = new ArtifactHridSearch(result.value, result.operator);
+ if (not) primitive = new NotSearch(primitive);
+ filterViewer.addItem(primitive, getFilterName(), "huid", result.value);
+ }
+
+ /* (non-Javadoc)
+ * @see osee.define.artifact.search.SearchFilter#isValid()
+ */
+ @Override
+ public boolean isValid() {
+ return !hridValue.getText().equals("");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.search.SearchFilter#loadFromStorageString(org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer, java.lang.String, java.lang.String, java.lang.String, boolean)
+ */
+ @Override
+ public void loadFromStorageString(FilterTableViewer filterViewer, String type, String value, String storageString, boolean isNotEnabled) {
+ ISearchPrimitive primitive = ArtifactHridSearch.getPrimitive(storageString);
+ if (isNotEnabled) primitive = new NotSearch(primitive);
+ filterViewer.addItem(primitive, getFilterName(), type, value);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/IdArtifactSearch.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/IdArtifactSearch.java
new file mode 100644
index 00000000000..fab1b835bc4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/IdArtifactSearch.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+
+/**
+ * @author Roberto E. Escobar
+ */
+final class IdArtifactSearch extends AbstractArtifactSearchQuery {
+ private List<String> idsToSearch;
+ private Branch branchToSearch;
+ private boolean allowDeleted;
+
+ IdArtifactSearch(String searchString, Branch branchToSearch, boolean allowDeleted) {
+ super();
+ this.idsToSearch = new ArrayList<String>();
+ this.branchToSearch = branchToSearch;
+ this.allowDeleted = allowDeleted;
+
+ this.idsToSearch.addAll(Arrays.asList(searchString.split("[\\s,]+")));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.search.AbstractArtifactSearchQuery#getArtifacts()
+ */
+ @Override
+ public Collection<Artifact> getArtifacts() throws Exception {
+ return ArtifactQuery.getArtifactsFromIds(idsToSearch, branchToSearch, allowDeleted);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.search.AbstractArtifactSearchQuery#getCriteriaLabel()
+ */
+ @Override
+ public String getCriteriaLabel() {
+ return String.format("%s%s", idsToSearch.toString(), allowDeleted ? " - Options:[Include Deleted]" : "");
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/InRelationFilter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/InRelationFilter.java
new file mode 100644
index 00000000000..0642b5100a1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/InRelationFilter.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ISearchPrimitive;
+import org.eclipse.osee.framework.skynet.core.artifact.search.InRelationSearch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.NotSearch;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class InRelationFilter extends SearchFilter {
+ private ComboViewer relationTypeList;
+ private ComboViewer relationSideList;
+
+ public InRelationFilter(Control optionsControl, ComboViewer relationTypeList, ComboViewer relationSideList) {
+ super("Artifact in Relation", optionsControl);
+ this.relationTypeList = relationTypeList;
+ this.relationSideList = relationSideList;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.define.artifact.search.SearchFilter#addFilterTo(osee.define.artifact.search.filter.FilterTableViewer)
+ */
+ @Override
+ public void addFilterTo(FilterTableViewer filterViewer) {
+ String type = relationTypeList.getCombo().getText();
+ String sideName = relationSideList.getCombo().getText();
+
+ RelationType linkDescriptor = (RelationType) relationTypeList.getData(relationTypeList.getCombo().getText());
+ try {
+ ISearchPrimitive primitive = new InRelationSearch(type, linkDescriptor.isSideAName(sideName));
+ if (not) primitive = new NotSearch(primitive);
+
+ filterViewer.addItem(primitive, getFilterName(), type, sideName);
+ } catch (OseeArgumentException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.define.artifact.search.SearchFilter#isValid()
+ */
+ @Override
+ public boolean isValid() {
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.search.SearchFilter#loadFromStorageString(org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer, java.lang.String, java.lang.String, java.lang.String, boolean)
+ */
+ @Override
+ public void loadFromStorageString(FilterTableViewer filterViewer, String type, String value, String storageString, boolean isNotEnabled) {
+ ISearchPrimitive primitive = InRelationSearch.getPrimitive(storageString);
+ if (isNotEnabled) primitive = new NotSearch(primitive);
+ filterViewer.addItem(primitive, getFilterName(), type, value);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/MaxMatchCountConfirmer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/MaxMatchCountConfirmer.java
new file mode 100644
index 00000000000..648c91fe14c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/MaxMatchCountConfirmer.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.jdk.core.type.MutableBoolean;
+import org.eclipse.osee.framework.skynet.core.artifact.ISearchConfirmer;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class MaxMatchCountConfirmer implements ISearchConfirmer {
+ private static final int MAX_RESULTS = 2000;
+ final MutableBoolean result = new MutableBoolean(false);
+
+ public boolean canProceed(final int count) {
+ if (count < MAX_RESULTS) {
+ result.setValue(true);
+ } else {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ result.setValue(MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Confirm Search",
+ "The search returned " + count + " results and may take a long time to load, continue?"));
+ }
+ }, true);
+ }
+ return result.getValue();
+ }
+
+ public boolean isConfirmed() {
+ return result.getValue();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/OrphanSearchFilter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/OrphanSearchFilter.java
new file mode 100644
index 00000000000..e4c4c39b59a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/OrphanSearchFilter.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ISearchPrimitive;
+import org.eclipse.osee.framework.skynet.core.artifact.search.NotSearch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.OrphanArtifactSearch;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class OrphanSearchFilter extends SearchFilter {
+ private ListViewer searchTypeList;
+
+ public OrphanSearchFilter(String filterName, Control optionsControl, ListViewer searchTypeList) {
+ super(filterName, optionsControl);
+ this.searchTypeList = searchTypeList;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.define.artifact.search.SearchFilter#addFilterTo(osee.define.artifact.search.filter.FilterTableViewer)
+ */
+ @Override
+ public void addFilterTo(FilterTableViewer filterViewer) {
+ try {
+ for (String typeName : searchTypeList.getList().getSelection()) {
+
+ ArtifactType artifactType = ArtifactTypeManager.getType(typeName);
+
+ ISearchPrimitive primitive = new OrphanArtifactSearch(artifactType);
+ if (not) {
+ primitive = new NotSearch(primitive);
+ }
+ filterViewer.addItem(primitive, getFilterName(), typeName, "");
+ }
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.define.artifact.search.SearchFilter#isValid()
+ */
+ @Override
+ public boolean isValid() {
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.search.SearchFilter#loadFromStorageString(org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer, java.lang.String, java.lang.String, java.lang.String, boolean)
+ */
+ @Override
+ public void loadFromStorageString(FilterTableViewer filterViewer, String type, String value, String storageString, boolean isNotEnabled) {
+ ISearchPrimitive primitive = OrphanArtifactSearch.getPrimitive(storageString);
+ if (isNotEnabled) {
+ primitive = new NotSearch(primitive);
+ }
+ filterViewer.addItem(primitive, getFilterName(), type, value);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/QuickSearchView.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/QuickSearchView.java
new file mode 100644
index 00000000000..b75ede3a558
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/QuickSearchView.java
@@ -0,0 +1,281 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.panels.SearchComposite;
+import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
+import org.eclipse.search.ui.NewSearchUI;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Robert A. Fisher
+ * @author Ryan D. Brooks
+ */
+public class QuickSearchView extends ViewPart implements IActionable, Listener, IBranchEventListener {
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.QuickSearchView";
+
+ private static final String ENTRY_SEPARATOR = "##";
+ private static final String LAST_QUERY_KEY_ID = "lastQuery";
+ private static final String QUERY_HISTORY_KEY_ID = "queryHistory";
+ private static final String OPTIONS_KEY_ID = "searchOption";
+
+ private static final String MAIN_HELP_CONTEXT = "quick_search_text";
+
+ private enum SearchOption {
+ Name_Only("quick_search_name_option", "When selected, searches only through the artifact's name attribute field.", true),
+ By_Id("quick_search_by_id_option", "When selected, searches by GUID(s) or HRID(s). Accepts comma or space separated ids.", true),
+ Match_Word_Order("quick_search_word_order_option", "When selected, match search string word order.", false),
+ Include_Deleted("quick_search_deleted_option", "When selected, does not filter out deleted artifacts from search results.", false);
+
+ private static String[] labels = null;
+ private static String[] mutuallyExclusive = null;
+ private final String helpContext;
+ private final String toolTip;
+ private final boolean isRadio;
+
+ SearchOption(String helpContext, String toolTip, boolean isRadio) {
+ this.helpContext = "";
+ this.toolTip = toolTip;
+ this.isRadio = isRadio;
+ }
+
+ public String asLabel() {
+ return name().replaceAll("_", " ");
+ }
+
+ public String getHelpContext() {
+ return helpContext;
+ }
+
+ public String getToolTip() {
+ return toolTip;
+ }
+
+ public static String[] getMutuallyExclusiveOptions() {
+ if (mutuallyExclusive == null) {
+ List<String> exclusiveOptions = new ArrayList<String>();
+ for (SearchOption option : SearchOption.values()) {
+ if (option.isRadio) {
+ exclusiveOptions.add(option.asLabel());
+ }
+ }
+ mutuallyExclusive = exclusiveOptions.toArray(new String[exclusiveOptions.size()]);
+ }
+ return mutuallyExclusive;
+ }
+
+ public static String[] asLabels() {
+ if (labels == null) {
+ SearchOption[] options = SearchOption.values();
+ labels = new String[options.length];
+ for (int index = 0; index < options.length; index++) {
+ labels[index] = options[index].asLabel();
+ }
+ }
+ return labels;
+ }
+ }
+
+ private Label branchLabel;
+ private SearchComposite searchComposite;
+ private IMemento memento;
+
+ @Override
+ public void init(IViewSite site, IMemento memento) throws PartInitException {
+ super.init(site, memento);
+ if (memento != null) {
+ this.memento = memento;
+ }
+ }
+
+ @Override
+ public void saveState(IMemento memento) {
+ if (searchComposite != null && memento != null) {
+ memento.putString(LAST_QUERY_KEY_ID, searchComposite.getQuery());
+ Map<String, Boolean> options = searchComposite.getOptions();
+ for (String option : options.keySet()) {
+ memento.putString(OPTIONS_KEY_ID + option.replaceAll(" ", "_"), options.get(option).toString());
+ }
+ StringBuilder builder = new StringBuilder();
+ String[] queries = searchComposite.getQueryHistory();
+ for (int index = 0; index < queries.length; index++) {
+ try {
+ builder.append(URLEncoder.encode(queries[index], "UTF-8"));
+ if (index + 1 < queries.length) {
+ builder.append(ENTRY_SEPARATOR);
+ }
+ } catch (UnsupportedEncodingException ex) {
+ // DO NOTHING
+ }
+ }
+ memento.putString(QUERY_HISTORY_KEY_ID, builder.toString());
+ }
+ }
+
+ private void loadState() {
+ if (searchComposite != null && memento != null) {
+ String lastQuery = memento.getString(LAST_QUERY_KEY_ID);
+
+ Map<String, Boolean> options = new HashMap<String, Boolean>();
+ for (SearchOption option : SearchOption.values()) {
+ options.put(option.asLabel(), new Boolean(memento.getString(OPTIONS_KEY_ID + option.name())));
+ }
+
+ List<String> queries = new ArrayList<String>();
+ String rawHistory = memento.getString(QUERY_HISTORY_KEY_ID);
+ if (rawHistory != null) {
+ String[] values = rawHistory.split(ENTRY_SEPARATOR);
+ for (String value : values) {
+ try {
+ queries.add(URLDecoder.decode(value, "UTF-8"));
+ } catch (UnsupportedEncodingException ex) {
+ // DO NOTHING
+ }
+ }
+ }
+ searchComposite.restoreWidgetValues(queries, lastQuery, options);
+ }
+ }
+
+ @Override
+ public void createPartControl(Composite parent) {
+ if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) return;
+
+ parent.setLayout(new GridLayout());
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ branchLabel = new Label(parent, SWT.NONE);
+ branchLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ OseeContributionItem.addTo(this, true);
+
+ createActions();
+
+ OseeEventManager.addListener(this);
+ updateWidgetEnablements();
+
+ Composite panel = new Composite(parent, SWT.NONE);
+ GridLayout gL = new GridLayout();
+ gL.marginHeight = 0;
+ gL.marginWidth = 0;
+ panel.setLayout(gL);
+ panel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ searchComposite =
+ new SearchComposite(panel, SWT.NONE, SearchOption.asLabels(), SearchOption.getMutuallyExclusiveOptions());
+ searchComposite.addListener(this);
+
+ loadState();
+
+ searchComposite.setHelpContext(MAIN_HELP_CONTEXT);
+ for (SearchOption option : SearchOption.values()) {
+ searchComposite.setHelpContextForOption(option.asLabel(), option.getHelpContext());
+ searchComposite.setToolTipForOption(option.asLabel(), option.getToolTip());
+ }
+ }
+
+ private void createActions() {
+ OseeAts.addBugToViewToolbar(this, this, SkynetGuiPlugin.getInstance(), VIEW_ID, "Quick Search");
+ }
+
+ @Override
+ public void setFocus() {
+ if (searchComposite != null) searchComposite.setFocus();
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ private void updateWidgetEnablements() {
+ if (branchLabel != null && branchLabel.isDisposed() != true) {
+ branchLabel.setText("Searching on current default branch \"" + BranchManager.getDefaultBranch() + "\"");
+ }
+ }
+
+ public void handleEvent(Event event) {
+ updateWidgetEnablements();
+ if (searchComposite != null) {
+ if (searchComposite.isExecuteSearchEvent(event)) {
+ NewSearchUI.activateSearchResultView();
+ if (searchComposite.isOptionSelected(SearchOption.By_Id.asLabel())) {
+ NewSearchUI.runQueryInBackground(new IdArtifactSearch(searchComposite.getQuery(),
+ BranchManager.getDefaultBranch(),
+ searchComposite.isOptionSelected(SearchOption.Include_Deleted.asLabel())));
+ } else {
+ NewSearchUI.runQueryInBackground(new RemoteArtifactSearch(searchComposite.getQuery(),
+ BranchManager.getDefaultBranch(),
+ searchComposite.isOptionSelected(SearchOption.Name_Only.asLabel()),
+ searchComposite.isOptionSelected(SearchOption.Include_Deleted.asLabel()),
+ searchComposite.isOptionSelected(SearchOption.Match_Word_Order.asLabel())));
+ }
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+ */
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ super.dispose();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, int branchId) {
+ if (branchModType == BranchEventType.DefaultBranchChanged) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ updateWidgetEnablements();
+ }
+ });
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/RemoteArtifactSearch.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/RemoteArtifactSearch.java
new file mode 100644
index 00000000000..d047cd2ab87
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/RemoteArtifactSearch.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.eclipse.osee.framework.jdk.core.util.StringFormat;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+
+/**
+ * @author Roberto E. Escobar
+ */
+final class RemoteArtifactSearch extends AbstractArtifactSearchQuery {
+ private final String queryString;
+ private final boolean nameOnly;
+ private final boolean includeDeleted;
+ private final boolean matchWordOrder;
+ private final Branch branch;
+
+ RemoteArtifactSearch(String queryString, Branch branch, boolean nameOnly, boolean includeDeleted, boolean matchWordOrder) {
+ this.branch = branch;
+ this.includeDeleted = includeDeleted;
+ this.nameOnly = nameOnly;
+ this.queryString = queryString;
+ this.matchWordOrder = matchWordOrder;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.search.AbstractArtifactSearchQuery#getArtifacts()
+ */
+ @Override
+ public Collection<Artifact> getArtifacts() throws Exception {
+ return ArtifactQuery.getArtifactsFromAttributeWithKeywords(queryString, matchWordOrder, nameOnly, includeDeleted,
+ branch);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.search.AbstractArtifactSearchQuery#getCriteriaLabel()
+ */
+ @Override
+ public String getCriteriaLabel() {
+ List<String> optionsList = new ArrayList<String>();
+ if (nameOnly) {
+ optionsList.add("Name Only");
+ }
+
+ if (includeDeleted) {
+ optionsList.add("Include Deleted");
+ }
+
+ if (matchWordOrder) {
+ optionsList.add("Match Word Order");
+ }
+ String options = String.format(" - Options:[%s]", StringFormat.listToValueSeparatedString(optionsList, "& "));
+ return String.format("%s%s", queryString, optionsList.size() > 0 ? options : "");
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/SearchFilter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/SearchFilter.java
new file mode 100644
index 00000000000..21dd6efb75c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/SearchFilter.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search;
+
+import static org.eclipse.osee.framework.skynet.core.artifact.search.DepricatedOperator.EQUAL;
+import static org.eclipse.osee.framework.skynet.core.artifact.search.DepricatedOperator.LIKE;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.skynet.core.artifact.search.DepricatedOperator;
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterTableViewer;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public abstract class SearchFilter {
+ private static final Pattern wildCardPattern = Pattern.compile("(?<!\\\\)\\*");
+ private String filterName;
+ protected Control optionsControl;
+ protected boolean not;
+
+ public SearchFilter(String filterName, Control optionsControl) {
+ this.filterName = filterName;
+ this.optionsControl = optionsControl;
+ this.not = false;
+ }
+
+ public abstract void addFilterTo(FilterTableViewer filterViewer);
+
+ public boolean isValid() {
+ return false;
+ }
+
+ protected class OperatorAndValue {
+ DepricatedOperator operator;
+ String value;
+ }
+
+ public OperatorAndValue handleWildCard(String value) {
+ OperatorAndValue result = new OperatorAndValue();
+ Matcher wildCardMatcher = wildCardPattern.matcher(value);
+ if (wildCardMatcher.find()) {
+ wildCardMatcher.reset();
+ value = wildCardMatcher.replaceAll("%");
+ result.operator = LIKE;
+ } else {
+ result.operator = EQUAL;
+ }
+ result.value = value.replaceAll("\\\\\\*", "*");
+ return result;
+ }
+
+ /**
+ * @return Returns the not.
+ */
+ public boolean isNot() {
+ return not;
+ }
+
+ /**
+ * @param not The not to set.
+ */
+ public void setNot(boolean not) {
+ this.not = not;
+ }
+
+ protected String getFilterName() {
+ return filterName;
+ }
+
+ public abstract void loadFromStorageString(FilterTableViewer filterViewer, String type, String value, String storageString, boolean isNotEnabled);
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModel.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModel.java
new file mode 100644
index 00000000000..1ddab801b4b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModel.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.filter;
+
+import org.eclipse.osee.framework.skynet.core.artifact.search.ISearchPrimitive;
+import org.eclipse.osee.framework.skynet.core.artifact.search.InRelationSearch;
+
+public class FilterModel {
+
+ private String searchType;
+ private String type;
+ private String value;
+ private ISearchPrimitive searchPrimitive;
+
+ public FilterModel(ISearchPrimitive searchPrimitive, String search, String type, String value) {
+ this.searchPrimitive = searchPrimitive;
+ this.searchType = search;
+ this.type = type;
+ this.value = value;
+ }
+
+ /**
+ * @return Returns the name.
+ */
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * @param type - The type to set.
+ */
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ /**
+ * @return Returns the function.
+ */
+ public String getValue() {
+ return value;
+ }
+
+ /**
+ * @param function The function to set.
+ */
+ public void setvalue(String function) {
+ this.value = function;
+ }
+
+ /**
+ * @return Returns the searchType.
+ */
+ public ISearchPrimitive getSearchPrimitive() {
+ return searchPrimitive;
+ }
+
+ /**
+ * @return Returns the searchType.
+ */
+ public String getSearch() {
+ return searchType;
+ }
+
+ /**
+ * @param searchType The searchType to set.
+ */
+ public void setSearch(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public void setSearchPrimitive(ISearchPrimitive searchPrimitive) {
+ this.searchPrimitive = searchPrimitive;
+ }
+
+ @Override
+ public String toString() {
+ String toReturn = searchPrimitive.toString();
+ if (searchPrimitive instanceof InRelationSearch) {
+ toReturn += " " + value;
+ }
+ return toReturn;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModelLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModelLabelProvider.java
new file mode 100644
index 00000000000..1317c8a3a42
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModelLabelProvider.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.filter;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.osee.framework.skynet.core.artifact.search.NotSearch;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.graphics.Image;
+
+public class FilterModelLabelProvider implements ITableLabelProvider {
+
+ private static final Image deleteImage = SkynetGuiPlugin.getInstance().getImage("remove.gif");
+ private static final Image notImage = SkynetGuiPlugin.getInstance().getImage("not_equal.gif");
+
+ public FilterModelLabelProvider() {
+ super();
+ };
+
+ /**
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+ */
+ public String getColumnText(Object element, int columnIndex) {
+ String result = "";
+ FilterModel model = (FilterModel) element;
+
+ switch (columnIndex) {
+ case FilterTableViewer.DELETE_NUM:
+ // This only has an image
+ break;
+ case FilterTableViewer.SEARCH_NUM:
+ result = model.getSearch();
+ break;
+ case FilterTableViewer.TYPE_NUM:
+ result = model.getType();
+ break;
+ case FilterTableViewer.VALUE_NUM:
+ result = model.getValue();
+ break;
+ default:
+ break;
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+ */
+ public Image getColumnImage(Object element, int columnIndex) {
+ Image result = null;
+
+ switch (columnIndex) {
+ case FilterTableViewer.DELETE_NUM:
+ result = deleteImage;
+ break;
+ case FilterTableViewer.SEARCH_NUM:
+ if (((FilterModel) element).getSearchPrimitive() instanceof NotSearch) result = notImage;
+ break;
+ }
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+ * java.lang.String)
+ */
+ public boolean isLabelProperty(Object element, String property) {
+ return true;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModelList.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModelList.java
new file mode 100644
index 00000000000..fd6491b6768
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterModelList.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.filter;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.osee.framework.ui.skynet.search.ui.IFilterListViewer;
+
+public class FilterModelList {
+
+ private ArrayList<FilterModel> filters = new ArrayList<FilterModel>();
+ private Set<IFilterListViewer> changeListeners = new HashSet<IFilterListViewer>();
+ private boolean isAllSelected;
+
+ /**
+ * Constructor
+ */
+ public FilterModelList() {
+ super();
+ filters = new ArrayList<FilterModel>();
+ changeListeners = new HashSet<IFilterListViewer>();
+ }
+
+ /**
+ * Return the collection of ItemTask
+ */
+ public ArrayList<FilterModel> getFilters() {
+ return filters;
+ }
+
+ /**
+ * Add a new task to the collection of tasks
+ */
+ public void addFilter(FilterModel filter, boolean top) {
+ if (top)
+ filters.add(0, filter);
+ else
+ filters.add(filter);
+ for (IFilterListViewer flv : changeListeners)
+ flv.addFilter(filter);
+ }
+
+ /**
+ * @param filter -
+ */
+ public void removeFilter(FilterModel filter) {
+ filters.remove(filter);
+ for (IFilterListViewer flv : changeListeners)
+ flv.removeFilter(filter);
+ }
+
+ public String toString() {
+ String str = "";
+ for (int i = 0; i < filters.size(); i++) {
+ String name = filters.toString();
+ str += "\nTask " + name;
+ }
+ return str + "\n\n";
+ }
+
+ /**
+ * @param filter
+ */
+ public void filterChanged(FilterModel filter) {
+ for (IFilterListViewer flv : changeListeners)
+ flv.updateFilter(filter);
+ }
+
+ /**
+ * @param viewer
+ */
+ public void removeChangeListener(IFilterListViewer viewer) {
+ changeListeners.remove(viewer);
+ }
+
+ /**
+ * @param viewer
+ */
+ public void addChangeListener(IFilterListViewer viewer) {
+ changeListeners.add(viewer);
+ }
+
+ public boolean isAllSelected() {
+ return isAllSelected;
+ }
+
+ public void setAllSelected(boolean isAllSelected) {
+ this.isAllSelected = isAllSelected;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterTableCellModifier.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterTableCellModifier.java
new file mode 100644
index 00000000000..17dcfd24fe5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterTableCellModifier.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.filter;
+
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.swt.widgets.TableItem;
+
+public class FilterTableCellModifier implements ICellModifier {
+
+ private FilterTableViewer filterTableViewer;
+
+ public FilterTableCellModifier(FilterTableViewer filterTableViewer) {
+ super();
+ this.filterTableViewer = filterTableViewer;
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String)
+ */
+ public boolean canModify(Object element, String property) {
+ // Find the index of the column
+ int columnIndex = filterTableViewer.getColumnNames().indexOf(property);
+
+ switch (columnIndex) {
+ case FilterTableViewer.DELETE_NUM:
+ return true;
+ }
+ return true;
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String)
+ */
+ public Object getValue(Object element, String property) {
+ // Find the index of the column
+ int columnIndex = filterTableViewer.getColumnNames().indexOf(property);
+
+ switch (columnIndex) {
+ case FilterTableViewer.DELETE_NUM:
+ return new Boolean(false);
+ }
+ return "";
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String, java.lang.Object)
+ */
+ public void modify(Object element, String property, Object value) {
+
+ // Find the index of the column
+ int columnIndex = filterTableViewer.getColumnNames().indexOf(property);
+
+ TableItem item = (TableItem) element;
+ FilterModel model = (FilterModel) item.getData();
+
+ switch (columnIndex) {
+ case FilterTableViewer.DELETE_NUM:
+ filterTableViewer.removeFilter(model);
+ break;
+ default:
+ }
+ filterTableViewer.getFilterList().filterChanged(model);
+ filterTableViewer.refresh();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterTableViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterTableViewer.java
new file mode 100644
index 00000000000..89a4331576b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/filter/FilterTableViewer.java
@@ -0,0 +1,182 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.filter;
+
+import java.util.Arrays;
+import java.util.List;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.CheckboxCellEditor;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ISearchPrimitive;
+import org.eclipse.osee.framework.ui.skynet.search.ArtifactSearchPage;
+import org.eclipse.osee.framework.ui.skynet.search.ui.IFilterListViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+
+public class FilterTableViewer {
+
+ private Table table;
+ private TableViewer tableViewer;
+
+ private FilterModelList filterList;
+
+ private String[] columnNames = new String[] {"Remove", "Filter", "Type", "Value"};
+ private static int[] columnWidths = new int[] {75, 100, 100, 100, 200};
+
+ public static final int DELETE_NUM = 0;
+ public static final int SEARCH_NUM = 1;
+ public static final int TYPE_NUM = 2;
+ public static final int VALUE_NUM = 3;
+
+ /**
+ * @param table -
+ */
+ public FilterTableViewer(Table table) {
+ this.table = table;
+
+ this.createControl();
+
+ tableViewer.setContentProvider(new FilterContentProvider());
+ tableViewer.setLabelProvider(new FilterModelLabelProvider());
+ tableViewer.setInput(filterList);
+ }
+
+ public void addItem(ISearchPrimitive searchPrimitive, String search, String type, String value) {
+ FilterModel model = new FilterModel(searchPrimitive, search, type, value);
+ filterList.addFilter(model, true);
+ }
+
+ private void createControl() {
+ filterList = new FilterModelList();
+ createColumns();
+ createTableViewer();
+ }
+
+ /**
+ * Create the TableViewer
+ */
+ private void createTableViewer() {
+
+ tableViewer = new TableViewer(table);
+ tableViewer.setUseHashlookup(true);
+ tableViewer.setColumnProperties(columnNames);
+
+ CellEditor[] validEditors = new CellEditor[columnNames.length];
+ validEditors[DELETE_NUM] = new CheckboxCellEditor(table, SWT.NONE);
+
+ // Assign the cell editors to the viewer
+ tableViewer.setCellEditors(validEditors);
+ // Assign the cell modifier to the viewer
+ tableViewer.setCellModifier(new FilterTableCellModifier(this));
+ }
+
+ /**
+ * Create the Columns
+ */
+ private void createColumns() {
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
+
+ TableColumn column = new TableColumn(table, SWT.LEFT, DELETE_NUM);
+ column.setText(columnNames[DELETE_NUM]);
+ column.setWidth(columnWidths[DELETE_NUM]);
+
+ column = new TableColumn(table, SWT.LEFT, SEARCH_NUM);
+ column.setText(columnNames[SEARCH_NUM]);
+ column.setWidth(columnWidths[SEARCH_NUM]);
+
+ column = new TableColumn(table, SWT.LEFT, TYPE_NUM);
+ column.setText(columnNames[TYPE_NUM]);
+ column.setWidth(columnWidths[TYPE_NUM]);
+
+ column = new TableColumn(table, SWT.LEFT, VALUE_NUM);
+ column.setText(columnNames[VALUE_NUM]);
+ column.setWidth(columnWidths[VALUE_NUM]);
+ }
+
+ public List<String> getColumnNames() {
+ return Arrays.asList(columnNames);
+ }
+
+ public FilterModelList getFilterList() {
+ return this.filterList;
+ }
+
+ public void refresh() {
+ tableViewer.refresh();
+ ArtifactSearchPage.updateOKStatus();
+ }
+
+ /**
+ * @return Returns the table.
+ */
+ public Table getTable() {
+ return table;
+ }
+
+ public void removeFilter(FilterModel filter) {
+ filterList.removeFilter(filter);
+ }
+
+ public int getCount() {
+ return filterList.getFilters().size();
+ }
+ /**
+ * InnerClass that acts as a proxy for the FilterModelList providing content for the Table. It implements the
+ * IFilterListViewer interface since it must register changeListeners with the FilterModelList
+ */
+ class FilterContentProvider implements IStructuredContentProvider, IFilterListViewer {
+
+ public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+ if (newInput != null) filterList.addChangeListener(this);
+ if (oldInput != null) filterList.removeChangeListener(this);
+ }
+
+ public void dispose() {
+ filterList.removeChangeListener(this);
+ }
+
+ // Return the tasks as an array of Objects
+ public Object[] getElements(Object parent) {
+ return filterList.getFilters().toArray();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see IFilterListViewer#addFilter(FilterModel)
+ */
+ public void addFilter(FilterModel filter) {
+ tableViewer.add(filter);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see IFilterListViewer#removeFilter(FilterModel)
+ */
+ public void removeFilter(FilterModel filter) {
+ tableViewer.remove(filter);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see IFilterListViewer#updateFilter(FilterModel)
+ */
+ public void updateFilter(FilterModel filter) {
+ tableViewer.update(filter, null);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ModificationReportJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ModificationReportJob.java
new file mode 100644
index 00000000000..10ebcc0a1a1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ModificationReportJob.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.report;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.io.CharBackedInputStream;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelXmlWriter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.revision.RevisionManager;
+import org.eclipse.osee.framework.ui.plugin.util.AIFile;
+import org.eclipse.osee.framework.ui.plugin.util.OseeData;
+import org.eclipse.swt.program.Program;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class ModificationReportJob extends ReportJob {
+ private final HashMap<Artifact, String[]> matrix;
+ private final String[] header = new String[] {"Artifact Name", "HRID", "Modification Count"};
+
+ public ModificationReportJob() {
+ super("Modification Report");
+ matrix = new HashMap<Artifact, String[]>();
+ }
+
+ @Override
+ public void generateReport(List<Artifact> selectedArtifacts, IProgressMonitor monitor) throws OseeCoreException {
+ matrix.clear();
+
+ int columnIndex = 2;
+ for (Artifact artifact : selectedArtifacts) {
+ if (artifact != null) {
+ processArtifact(artifact, monitor);
+ }
+ columnIndex++;
+ }
+ writeMatrix();
+ }
+
+ private void processArtifact(Artifact artifact, IProgressMonitor monitor) throws OseeCoreException {
+ monitor.subTask("Processing " + artifact.getDescriptiveName());
+
+ String[] row = new String[3];
+
+ row[0] = artifact.getDescriptiveName();
+ row[1] = artifact.getHumanReadableId();
+ row[2] = Integer.toString(RevisionManager.getInstance().getTransactionsPerArtifact(artifact).size());
+
+ matrix.put(artifact, row);
+
+ // Recursively process the full DH tree
+ for (Artifact child : artifact.getChildren())
+ processArtifact(child, monitor);
+ }
+
+ private void writeMatrix() throws OseeCoreException {
+ try {
+ CharBackedInputStream charBak = new CharBackedInputStream();
+ ExcelXmlWriter excelWriter = new ExcelXmlWriter(charBak.getWriter());
+ excelWriter.startSheet("Modification Report", 3);
+
+ excelWriter.writeRow(header);
+ for (String[] row : matrix.values()) {
+ excelWriter.writeRow(row);
+ }
+ excelWriter.endWorkbook();
+
+ IFile iFile = OseeData.getIFile("Modification_Report_" + Lib.getDateTimeString() + ".xml");
+ AIFile.writeToFile(iFile, charBak);
+
+ // Ensure Excel is used since the file assocation for xml could be off
+ Program.findProgram("xls").execute(iFile.getLocation().toOSString());
+ } catch (IOException ex) {
+ throw new OseeCoreException(ex);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/RelationMatrixExportJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/RelationMatrixExportJob.java
new file mode 100644
index 00000000000..6b7fd0ecd97
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/RelationMatrixExportJob.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.report;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.io.CharBackedInputStream;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelXmlWriter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.ui.plugin.util.AIFile;
+import org.eclipse.osee.framework.ui.plugin.util.OseeData;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class RelationMatrixExportJob extends ReportJob {
+ private final HashMap<Artifact, String[]> matrix;
+ private final String relationTypeName;
+ private RelationType relationType;
+ private int columnCount;
+ private String[] header;
+
+ public RelationMatrixExportJob(RelationType relationType) {
+ super(relationType.getTypeName() + " Report");
+ this.relationTypeName = relationType.getTypeName();
+ matrix = new HashMap<Artifact, String[]>();
+ this.relationType = relationType;
+ }
+
+ @Override
+ public void generateReport(List<Artifact> selectedArtifacts, IProgressMonitor monitor) throws OseeCoreException {
+ matrix.clear();
+ columnCount = selectedArtifacts.size() + 2; // use first column is the artifact name and 2nd is its identifier
+ header = new String[columnCount];
+ header[0] = "Artifact Name";
+ header[1] = "Artifact ID";
+
+ int columnIndex = 2;
+ for (Artifact columnArtifact : selectedArtifacts) {
+ if (columnArtifact != null) {
+ saveRelationsForColumn(columnArtifact, columnIndex);
+ }
+ columnIndex++;
+ }
+ writeMatrix();
+ }
+
+ private void saveRelationsForColumn(Artifact columnArtifact, int columnIndex) throws OseeCoreException {
+ header[columnIndex] = columnArtifact.getDescriptiveName();
+
+ for (RelationLink relation : columnArtifact.getRelations(relationType)) {
+ String[] row = getAssociatedRow(relation.getArtifactOnOtherSide(columnArtifact));
+ if (relation.getRationale().equals("")) {
+ row[columnIndex] = "X";
+ } else {
+ row[columnIndex] = relation.getRationale();
+ }
+ }
+ }
+
+ private String[] getAssociatedRow(Artifact artifact) throws OseeCoreException {
+ String[] row = matrix.get(artifact);
+ if (row == null) {
+ row = new String[columnCount];
+ row[0] = artifact.getDescriptiveName();
+ row[1] = artifact.getSoleAttributeValue("Imported Paragraph Number", "");
+ matrix.put(artifact, row);
+ }
+ return row;
+ }
+
+ private void writeMatrix() throws OseeCoreException {
+ try {
+ CharBackedInputStream charBak = new CharBackedInputStream();
+ ExcelXmlWriter excelWriter = new ExcelXmlWriter(charBak.getWriter());
+ excelWriter.startSheet(relationTypeName + " Matrix", columnCount);
+
+ excelWriter.writeRow(header);
+ for (String[] row : matrix.values()) {
+ excelWriter.writeRow(row);
+ }
+ excelWriter.endWorkbook();
+
+ IFile iFile = OseeData.getIFile(relationTypeName + ".xml");
+ AIFile.writeToFile(iFile, charBak);
+ } catch (IOException ex) {
+ throw new OseeCoreException(ex);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ReportJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ReportJob.java
new file mode 100644
index 00000000000..8268f93b2fd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ReportJob.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.report;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.search.ui.text.Match;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public abstract class ReportJob extends Job {
+ private IStructuredSelection selection;
+
+ /**
+ * @param name
+ */
+ public ReportJob(String name) {
+ super(name);
+ }
+
+ @Override
+ protected final IStatus run(IProgressMonitor monitor) {
+ try {
+ List<Artifact> artifacts;
+ if (selection == null) {
+ artifacts = new ArrayList<Artifact>(0);
+ } else {
+ artifacts = new ArrayList<Artifact>(selection.size());
+ Iterator<?> iter = selection.iterator();
+ while (iter.hasNext()) {
+ Object obj = iter.next();
+ if (obj instanceof Match && ((Match) obj).getElement() instanceof Artifact) artifacts.add((Artifact) ((Match) obj).getElement());
+ }
+ }
+ generateReport(artifacts, monitor);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, -1, ex.toString(), ex);
+ }
+ return Status.OK_STATUS;
+ }
+
+ /**
+ * All exceptoins that are thrown will be gracefully handled by the GUI
+ *
+ * @param selectedArtifacts
+ * @param monitor
+ */
+ public abstract void generateReport(List<Artifact> selectedArtifacts, IProgressMonitor monitor) throws Exception;
+
+ /**
+ * @param selection
+ */
+ public final void setSelection(IStructuredSelection selection) {
+ this.selection = selection;
+ }
+
+ public final IStructuredSelection getSelection() {
+ return selection;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ReportSelectionListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ReportSelectionListener.java
new file mode 100644
index 00000000000..cfa4780419b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/report/ReportSelectionListener.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.report;
+
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.MenuItem;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ReportSelectionListener implements SelectionListener {
+ private TableViewer tableViewer;
+
+ public ReportSelectionListener(TableViewer tableViewer) {
+ super();
+ this.tableViewer = tableViewer;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetSelected(SelectionEvent ev) {
+ ReportJob job = (ReportJob) ((MenuItem) ev.getSource()).getData();
+ job.setSelection((IStructuredSelection) tableViewer.getSelection());
+ try {
+ Jobs.startJob(job);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactMatchAdapter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactMatchAdapter.java
new file mode 100644
index 00000000000..a07c082cd34
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactMatchAdapter.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.ui;
+
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.search.AbstractArtifactSearchResult;
+import org.eclipse.search.ui.text.Match;
+
+public interface IArtifactMatchAdapter {
+ /**
+ * Returns an array with all matches contained in the given artifact in the given search result. If the matches are
+ * not contained within an <code>Artifact</code>, this method must return an empty array.
+ *
+ * @param result the search result to find matches in
+ * @param artifact the artifact to find matches in
+ * @return an array of matches (possibly empty)
+ */
+ public abstract Match computeContainedMatch(AbstractArtifactSearchResult result, Artifact artifact);
+
+ /**
+ * Returns the artifact associated with the given element (usually the artifact the element is contained in). If the
+ * element is not associated with a artifact, this method should return <code>null</code>.
+ *
+ * @param element an element associated with a match
+ * @return the artifact associated with the element or <code>null</code>
+ */
+ public abstract Artifact getArtifact(Object element);
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactSearchContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactSearchContentProvider.java
new file mode 100644
index 00000000000..20aa3a0bd29
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactSearchContentProvider.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.ui;
+
+/**
+ * @author Michael S. Rodgers
+ */
+public interface IArtifactSearchContentProvider {
+ public abstract void elementsChanged(Object[] updatedElements);
+
+ public abstract void clear();
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactSearchResultCollector.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactSearchResultCollector.java
new file mode 100644
index 00000000000..41556da637e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IArtifactSearchResultCollector.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.ui;
+
+import org.eclipse.core.resources.IResourceProxy;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * @author Michael S. Rodgers
+ */
+public interface IArtifactSearchResultCollector {
+ /**
+ * Returns the progress monitor used to setup and report progress.
+ *
+ * @return The progress monitor
+ */
+ public IProgressMonitor getProgressMonitor();
+
+ /**
+ * Called before the actual search starts.
+ *
+ * @throws CoreException Throws when starting failed.
+ */
+ public void aboutToStart() throws CoreException;
+
+ /**
+ * Accepts the given search result.
+ *
+ * @param proxy proxy the resource proxy in which the match has been found.
+ * @param start position from the beginning of the file. Start position is zero based.
+ * @param length the length of the match.
+ * @throws CoreException Processing failed
+ */
+ public void accept(IResourceProxy proxy, int start, int length) throws CoreException;
+
+ /**
+ * Called when the search has ended.
+ *
+ * @throws CoreException Throws when finish failed.
+ */
+ public void done() throws CoreException;
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IFilterListViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IFilterListViewer.java
new file mode 100644
index 00000000000..d1c594ac872
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/search/ui/IFilterListViewer.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.search.ui;
+
+import org.eclipse.osee.framework.ui.skynet.search.filter.FilterModel;
+
+public interface IFilterListViewer {
+
+ /**
+ * Update the view to reflect the fact that a FilterModel was added to the FilterModel list
+ *
+ * @param filter
+ */
+ public void addFilter(FilterModel filter);
+
+ /**
+ * Update the view to reflect the fact that a FilterModel was removed from the FilterModel list
+ *
+ * @param filter
+ */
+ public void removeFilter(FilterModel filter);
+
+ /**
+ * Update the view to reflect the fact that one of the FilterModels was modified
+ *
+ * @param filter
+ */
+ public void updateFilter(FilterModel filter);
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ArtifactGraphContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ArtifactGraphContentProvider.java
new file mode 100644
index 00000000000..1b232e74ec6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ArtifactGraphContentProvider.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.skywalker;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.zest.core.viewers.IGraphEntityContentProvider;
+
+/**
+ * @author Robert A. Fisher
+ * @author Donald G. Dunne
+ */
+public class ArtifactGraphContentProvider implements IGraphEntityContentProvider {
+ // private static final Collection<Artifact>EMPTY_LIST = new ArrayList<Artifact>(0);
+ private SkyWalkerOptions options;
+
+ /**
+ * @param levels
+ */
+ public ArtifactGraphContentProvider(SkyWalkerOptions options) {
+ super();
+ this.options = options;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.mylar.zest.core.viewers.IGraphEntityContentProvider#getConnectedTo(java.lang.Object)
+ */
+ public Object[] getConnectedTo(Object entity) {
+ List<Artifact> otherItems = new LinkedList<Artifact>();
+
+ // Don't want to create any links to artifacts that are NOT in displayArtifacts
+ try {
+ Artifact artifact = (Artifact) entity;
+ List<RelationType> validTypes =
+ RelationTypeManager.getValidTypes(artifact.getArtifactType(), artifact.getBranch());
+ for (RelationType relationType : validTypes) {
+ if (options.isValidRelationType(relationType)) {
+ for (Artifact art : artifact.getRelatedArtifacts(relationType)) {
+ if (options.isValidArtifactType(art.getArtifactType()) && displayArtifacts.contains(art)) {
+ otherItems.add(art);
+ }
+ }
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return otherItems.toArray();
+ }
+ private Set<Artifact> displayArtifacts = new HashSet<Artifact>();
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.mylar.zest.core.viewers.IGraphEntityContentProvider#getElements(java.lang.Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ // Only perform this method for top level artifact
+ if (inputElement.equals(options.getArtifact())) {
+ displayArtifacts.clear();
+ displayArtifacts.add((Artifact) inputElement);
+ getDescendants(displayArtifacts, (Artifact) inputElement, options.getLevels());
+ return displayArtifacts.toArray();
+ }
+ return null;
+ }
+
+ private void getDescendants(Collection<Artifact> displayArtifacts, Artifact artifact, int level) {
+ // System.out.println("getDecendants level: " + level + " artifact => " + artifact);
+ if (level == 0) {
+ return;
+ } else {
+ try {
+ List<RelationType> validTypes =
+ RelationTypeManager.getValidTypes(artifact.getArtifactType(), artifact.getBranch());
+ for (RelationType relationType : validTypes) {
+ if (options.isValidRelationType(relationType)) {
+ for (Artifact art : artifact.getRelatedArtifacts(relationType)) {
+ if (options.isValidArtifactType(art.getArtifactType())) {
+ displayArtifacts.add(art);
+ getDescendants(displayArtifacts, art, level - 1);
+ }
+ }
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.mylar.zest.core.viewers.IGraphEntityContentProvider#getWeight(java.lang.Object,
+ * java.lang.Object)
+ */
+ public double getWeight(Object entity1, Object entity2) {
+ return 0;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+ * java.lang.Object, java.lang.Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ArtifactGraphLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ArtifactGraphLabelProvider.java
new file mode 100644
index 00000000000..819f7b3039a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ArtifactGraphLabelProvider.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.skywalker;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerOptions.LinkName;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.zest.core.viewers.EntityConnectionData;
+
+/**
+ * @author Robert A. Fisher
+ * @author Donald G. Dunne
+ */
+public class ArtifactGraphLabelProvider implements ILabelProvider {
+ private final SkyWalkerOptions options;
+
+ public ArtifactGraphLabelProvider(SkyWalkerOptions options) {
+ this.options = options;
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+ */
+ public Image getImage(Object element) {
+ if (element instanceof Artifact) {
+ return ((Artifact) element).getImage();
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+ */
+ public String getText(Object element) {
+ try {
+ if (element instanceof Artifact) {
+ return ((Artifact) element).getDescriptiveName() + options.getExtendedName((Artifact) element);
+ } else if (element instanceof EntityConnectionData) {
+ Object obj1 = ((EntityConnectionData) element).dest;
+ Object obj2 = ((EntityConnectionData) element).source;
+ if (obj1 instanceof Artifact && obj2 instanceof Artifact) {
+ Artifact dest = (Artifact) obj1;
+ Artifact source = (Artifact) obj2;
+
+ Collection<RelationLink> links = dest.getRelations(source);
+
+ Collection<String> linkNames = new ArrayList<String>(links.size());
+ for (RelationLink link : links) {
+ if (options.getLinkName() == LinkName.Phrasing_A_to_B) {
+ if (link.getArtifactA().equals(source)) {
+ linkNames.add(source + " (" + link.getSidePhrasingFor(source) + ") " + dest);
+ } else {
+ linkNames.add(dest + " (" + link.getSidePhrasingFor(dest) + ") " + source);
+ }
+ } else if (options.getLinkName() == LinkName.Phrasing_B_to_A) {
+ if (link.getArtifactA().equals(source)) {
+ linkNames.add(dest + " (" + link.getSidePhrasingFor(dest) + ") " + source);
+ } else {
+ linkNames.add(source + " (" + link.getSidePhrasingFor(source) + ") " + dest);
+ }
+ } else if (options.getLinkName() == LinkName.Link_Name)
+ linkNames.add(link.getRelationType().getTypeName());
+ else if (options.getLinkName() == LinkName.Full_Link_Name)
+ linkNames.add(link.getRelationType().toString());
+ else if (options.getLinkName() == LinkName.Other_Side_Name) {
+ if (link.getArtifactA().equals(source)) {
+
+ linkNames.add(source + " (" + link.getSideNameFor(source) + ")" + " <--> " + dest + " (" + link.getSideNameFor(dest) + ")");
+ } else {
+ linkNames.add(dest + " (" + link.getSideNameFor(dest) + ")" + " <--> " + source + " (" + link.getSideNameFor(source) + ")");
+ }
+ } else
+ linkNames.add("");
+ }
+ return Collections.toString("\n", linkNames);
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return ex.getLocalizedMessage();
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+ * java.lang.String)
+ */
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ISkyWalkerOptionsChangeListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ISkyWalkerOptionsChangeListener.java
new file mode 100644
index 00000000000..f3c066dac3e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/ISkyWalkerOptionsChangeListener.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.skywalker;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface ISkyWalkerOptionsChangeListener {
+
+ public enum ModType {
+ Artifact, Level, ArtType, RelType, FilterEnabled, Layout, Link_Name, Show_Attribute
+ };
+
+ public void modified(ModType... modTypes);
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/RelTypeContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/RelTypeContentProvider.java
new file mode 100644
index 00000000000..d4e63171734
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/RelTypeContentProvider.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.skywalker;
+
+import java.util.Collection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class RelTypeContentProvider implements ITreeContentProvider {
+
+ /**
+ *
+ */
+ public RelTypeContentProvider() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+ */
+ @SuppressWarnings("unchecked")
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Collection) return ((Collection) parentElement).toArray();
+ if (parentElement instanceof RelationType) {
+ return new Object[] {new RelationLinkDescriptorSide((RelationType) parentElement, true),
+ new RelationLinkDescriptorSide((RelationType) parentElement, false)};
+ }
+ return new Object[] {};
+ }
+
+ public static class RelationLinkDescriptorSide {
+ private final RelationType desc;
+ private final Boolean sideA;
+
+ public RelationLinkDescriptorSide(RelationType desc, boolean sideA) {
+ this.desc = desc;
+ this.sideA = sideA;
+ }
+
+ public String toString() {
+ return (sideA ? desc.getSideAName() : desc.getSideBName()) + " - " + desc.getTypeName();
+ }
+
+ /**
+ * @return the sideA
+ */
+ public boolean isSideA() {
+ return sideA;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof RelationLinkDescriptorSide) {
+ return (((RelationLinkDescriptorSide) obj).getDesc().equals(desc) && ((RelationLinkDescriptorSide) obj).isSideA() == sideA);
+ }
+ return super.equals(obj);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ return desc.hashCode() + sideA.hashCode();
+ }
+
+ /**
+ * @return the desc
+ */
+ public RelationType getDesc() {
+ return desc;
+ }
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+ */
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+ */
+ public boolean hasChildren(Object element) {
+ return (element instanceof RelationType);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+ * java.lang.Object, java.lang.Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerArtTypeTabItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerArtTypeTabItem.java
new file mode 100644
index 00000000000..d1bec3146c1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerArtTypeTabItem.java
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.skywalker;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.ui.plugin.util.ArrayTreeContentProvider;
+import org.eclipse.osee.framework.ui.skynet.skywalker.ISkyWalkerOptionsChangeListener.ModType;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TabItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SkyWalkerArtTypeTabItem {
+
+ private CheckboxTreeViewer treeViewer;
+ private Button selectAll;
+ private Button deSelectAll;
+ private final SkyWalkerOptions options;
+
+ public SkyWalkerArtTypeTabItem(org.eclipse.swt.widgets.TabFolder tabFolder, SkyWalkerOptions options) {
+
+ this.options = options;
+ TabItem item = new TabItem(tabFolder, SWT.NONE);
+ item.setText("Artifact Type");
+
+ Composite comp = new Composite(tabFolder, SWT.BORDER);
+ comp.setLayout(ALayout.getZeroMarginLayout());
+ comp.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+
+ treeViewer = new CheckboxTreeViewer(comp, SWT.MULTI | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ treeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ treeViewer.setContentProvider(new ArrayTreeContentProvider());
+ treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ storeSelected();
+ }
+ });
+ treeViewer.setLabelProvider(new LabelProvider() {
+
+ public Image getImage(Object obj) {
+ if (obj instanceof ArtifactType) {
+ return ((ArtifactType) obj).getImage();
+ }
+ return null;
+ }
+
+ public String getText(Object obj) {
+ return obj.toString();
+ }
+ });
+ treeViewer.setSorter(new ViewerSorter());
+
+ Composite buttonComp = new Composite(comp, SWT.BORDER);
+ buttonComp.setLayout(ALayout.getZeroMarginLayout(2, false));
+ buttonComp.setLayoutData(new GridData());
+
+ selectAll = new Button(buttonComp, SWT.PUSH);
+ selectAll.setText("Select All");
+ selectAll.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ treeViewer.setAllChecked(true);
+ storeSelected();
+ }
+ });
+
+ deSelectAll = new Button(buttonComp, SWT.PUSH);
+ deSelectAll.setText("De-Select All");
+ deSelectAll.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ treeViewer.setAllChecked(false);
+ storeSelected();
+ }
+ });
+ options.addSkyWalkerOptionsChangeListener(new ISkyWalkerOptionsChangeListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.skywalker.ISkyWalkerOptionsChangeListener#modified(org.eclipse.osee.framework.ui.skynet.skywalker.ISkyWalkerOptionsChangeListener.ModType[])
+ */
+ public void modified(ModType... modTypes) {
+ handleOptionModified(modTypes);
+ }
+ });
+
+ // Set UI to defaults
+ handleOptionModified(ModType.FilterEnabled);
+ handleOptionModified(ModType.ArtType);
+ item.setControl(comp);
+ }
+
+ public void handleOptionModified(ModType... modTypes) {
+ List<ModType> modList = Arrays.asList(modTypes);
+ if (modList.contains(ModType.FilterEnabled)) {
+ if (selectAll != null) selectAll.setEnabled(options.isFilterEnabled());
+ if (deSelectAll != null) deSelectAll.setEnabled(options.isFilterEnabled());
+ }
+ if (modList.contains(ModType.ArtType)) {
+ if (treeViewer != null) {
+ treeViewer.setCheckedElements(options.getSelectedArtTypes().toArray());
+ }
+ }
+ if (modList.contains(ModType.Artifact)) {
+ if (treeViewer.getInput() == null && options.getAllArtTypes() != null && options.getAllArtTypes().size() > 0) {
+ treeViewer.setInput(options.getAllArtTypes());
+ treeViewer.setAllChecked(true);
+ }
+ }
+ }
+
+ public void storeSelected() {
+ Set<ArtifactType> selected = new HashSet<ArtifactType>();
+ for (Object obj : treeViewer.getCheckedElements()) {
+ if (obj instanceof ArtifactType) selected.add((ArtifactType) obj);
+ }
+ options.setSelectedArtTypes(selected);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerLayoutTabItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerLayoutTabItem.java
new file mode 100644
index 00000000000..6437f19018e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerLayoutTabItem.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.skywalker;
+
+import java.util.Arrays;
+import java.util.List;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.ui.plugin.util.ArrayTreeContentProvider;
+import org.eclipse.osee.framework.ui.skynet.skywalker.ISkyWalkerOptionsChangeListener.ModType;
+import org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerOptions.LinkName;
+import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
+import org.eclipse.osee.framework.ui.skynet.widgets.XRadioButtons;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.zest.layouts.algorithms.AbstractLayoutAlgorithm;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SkyWalkerLayoutTabItem {
+
+ private TreeViewer treeViewer;
+ private final Spinner levelSpinner;
+ private final SkyWalkerOptions options;
+ private final XRadioButtons radioButtons;
+
+ public SkyWalkerLayoutTabItem(org.eclipse.swt.widgets.TabFolder tabFolder, final SkyWalkerOptions options) {
+
+ this.options = options;
+ TabItem item = new TabItem(tabFolder, SWT.NONE);
+ item.setText("Layout");
+
+ Composite comp = new Composite(tabFolder, SWT.BORDER);
+ comp.setLayout(ALayout.getZeroMarginLayout());
+ comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ Composite levelComp = new Composite(comp, SWT.BORDER);
+ levelComp.setLayout(ALayout.getZeroMarginLayout(2, false));
+ levelComp.setLayoutData(new GridData());
+
+ (new Label(levelComp, SWT.NONE)).setText("Level: ");
+ levelSpinner = new Spinner(levelComp, SWT.BORDER);
+ levelSpinner.setMinimum(0);
+ levelSpinner.setMaximum(4);
+ levelSpinner.setIncrement(1);
+ levelSpinner.setPageIncrement(1);
+ levelSpinner.pack();
+ levelSpinner.addModifyListener(new ModifyListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ */
+ public void modifyText(ModifyEvent e) {
+ options.setLevels(levelSpinner.getSelection());
+ }
+ });
+
+ Composite treeComp = new Composite(comp, SWT.BORDER);
+ treeComp.setLayout(ALayout.getZeroMarginLayout());
+ treeComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ treeViewer = new TreeViewer(treeComp, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ treeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ treeViewer.setContentProvider(new ArrayTreeContentProvider());
+ treeViewer.setLabelProvider(new LabelProvider() {
+
+ public Image getImage(Object obj) {
+ return null;
+ }
+
+ public String getText(Object obj) {
+ return options.getLayoutName((AbstractLayoutAlgorithm) obj);
+ }
+ });
+ treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ if (treeViewer.getSelection().isEmpty()) return;
+ AbstractLayoutAlgorithm layout =
+ (AbstractLayoutAlgorithm) ((IStructuredSelection) treeViewer.getSelection()).getFirstElement();
+ if (layout != null) options.setLayout(layout);
+ }
+ });
+ treeViewer.setInput(options.getLayouts());
+
+ radioButtons = new XRadioButtons("Link Naming", "");
+ radioButtons.setVertical(true, 1);
+ radioButtons.setVerticalLabel(true);
+ for (LinkName linkName : LinkName.values())
+ radioButtons.addButton(linkName.name());
+ radioButtons.createWidgets(comp, 1);
+ radioButtons.setSelected(options.getLinkName().name());
+ radioButtons.addXModifiedListener(new XModifiedListener() {
+ public void widgetModified(org.eclipse.osee.framework.ui.skynet.widgets.XWidget widget) {
+ if (radioButtons.getSelectedNames().size() > 0) if (!options.getLinkName().equals(
+ radioButtons.getSelectedNames().iterator().next())) options.setLinkName(LinkName.valueOf(radioButtons.getSelectedNames().iterator().next()));
+ };
+ });
+
+ options.addSkyWalkerOptionsChangeListener(new ISkyWalkerOptionsChangeListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerOptionsChangeListener#modified(org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerOptionsChangeListener.ModType)
+ */
+ public void modified(ModType... modTypes) {
+ handleOptionModified(modTypes);
+ }
+ });
+
+ // Set UI to defaults
+ handleOptionModified(ModType.FilterEnabled);
+ handleOptionModified(ModType.Level);
+ handleOptionModified(ModType.Layout);
+ handleOptionModified(ModType.Link_Name);
+ item.setControl(comp);
+ }
+
+ public AbstractLayoutAlgorithm getSelected() {
+ return (AbstractLayoutAlgorithm) ((IStructuredSelection) treeViewer.getSelection()).getFirstElement();
+ }
+
+ public void handleOptionModified(ModType... modTypes) {
+ List<ModType> modList = Arrays.asList(modTypes);
+ if (modList.contains(ModType.Level)) {
+ if (levelSpinner != null) {
+ if (levelSpinner.getSelection() != options.getLevels()) levelSpinner.setSelection(options.getLevels());
+ }
+ }
+ if (modList.contains(ModType.Link_Name)) {
+ if (radioButtons != null) {
+ if (options.getLinkName().equals(radioButtons.getSelectedNames().iterator().next())) radioButtons.setSelected(options.getLinkName().name());
+ }
+ }
+ if (modList.contains(ModType.Layout)) {
+ if (treeViewer != null) {
+ if (treeViewer.getSelection() != options.getLayout()) treeViewer.setSelection(new StructuredSelection(
+ new Object[] {options.getLayout()}));
+ }
+ }
+ if (modList.contains(ModType.FilterEnabled)) {
+ if (levelSpinner != null) levelSpinner.setEnabled(options.isFilterEnabled());
+ if (treeViewer != null) treeViewer.getTree().setEnabled(options.isFilterEnabled());
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerOptions.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerOptions.java
new file mode 100644
index 00000000000..331da37f941
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerOptions.java
@@ -0,0 +1,455 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.skywalker;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AXml;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.skywalker.ISkyWalkerOptionsChangeListener.ModType;
+import org.eclipse.zest.layouts.LayoutStyles;
+import org.eclipse.zest.layouts.algorithms.AbstractLayoutAlgorithm;
+import org.eclipse.zest.layouts.algorithms.GridLayoutAlgorithm;
+import org.eclipse.zest.layouts.algorithms.RadialLayoutAlgorithm;
+import org.eclipse.zest.layouts.algorithms.SpringLayoutAlgorithm;
+import org.eclipse.zest.layouts.algorithms.TreeLayoutAlgorithm;
+import org.eclipse.zest.layouts.algorithms.VerticalLayoutAlgorithm;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SkyWalkerOptions {
+
+ private Artifact artifact;
+ private int levels = 1;
+ private static Map<AbstractLayoutAlgorithm, String> layouts;
+ private AbstractLayoutAlgorithm layout;
+ protected AbstractLayoutAlgorithm defaultLayout;
+ private Map<ArtifactType, Boolean> artTypes;
+ private Map<AttributeType, Boolean> showAttributes;
+ // RelationLinkDescriptor and RelationLinkDescriptorSide
+ private Map<Object, Boolean> relTypes;
+ private boolean filterEnabled = true;
+ private Set<ISkyWalkerOptionsChangeListener> listeners = new HashSet<ISkyWalkerOptionsChangeListener>();
+ public static String RADIAL_DOWN_LAYOUT = "Radial - Down";
+ public static String SPRING_LAYOUT = "Spring";
+ public static enum LinkName {
+ None, Link_Name, Full_Link_Name, Phrasing_A_to_B, Phrasing_B_to_A, Other_Side_Name
+ };
+ private LinkName linkName = LinkName.Link_Name;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public SkyWalkerOptions() {
+ loadLayouts();
+ layout = defaultLayout;
+ }
+
+ public void addSkyWalkerOptionsChangeListener(ISkyWalkerOptionsChangeListener skyWalkerOptionsChangeListener) {
+ listeners.add(skyWalkerOptionsChangeListener);
+ }
+
+ public String getExtendedName(Artifact artifact) throws OseeCoreException {
+ if (getSelectedShowAttributeTypes().size() == 0)
+ return "";
+ else {
+ StringBuffer sb = new StringBuffer();
+ for (AttributeType attributeType : getSelectedShowAttributeTypes()) {
+ if (artifact.getAttributeCount(attributeType.getName()) > 0) {
+ sb.append("\n");
+ sb.append(artifact.getAttributesToString(attributeType.getName()));
+ }
+ }
+ return sb.toString();
+ }
+ }
+
+ private void loadArtTypes() {
+ if (artTypes == null) {
+ artTypes = new HashMap<ArtifactType, Boolean>();
+ try {
+ for (ArtifactType descriptor : TypeValidityManager.getValidArtifactTypes(artifact.getBranch())) {
+ artTypes.put(descriptor, true);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ private void loadAttributeTypes() {
+ if (showAttributes == null) {
+ showAttributes = new HashMap<AttributeType, Boolean>();
+ try {
+ for (AttributeType descriptor : TypeValidityManager.getValidAttributeTypes(artifact.getBranch())) {
+ showAttributes.put(descriptor, false);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ private void loadRelTypes() {
+ if (relTypes == null) {
+ relTypes = new HashMap<Object, Boolean>();
+ try {
+ for (RelationType descriptor : RelationTypeManager.getValidTypes(artifact.getBranch())) {
+ relTypes.put(descriptor, true);
+ relTypes.put(new RelTypeContentProvider.RelationLinkDescriptorSide(descriptor, true), true);
+ relTypes.put(new RelTypeContentProvider.RelationLinkDescriptorSide(descriptor, false), true);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ public String toXml() {
+ StringBuffer sb = new StringBuffer();
+ sb.append(AXml.addTagData("guid", artifact.getGuid()));
+ sb.append(AXml.addTagData("branchId", artifact.getBranch().getBranchId() + ""));
+ sb.append(AXml.addTagData("artTypes", org.eclipse.osee.framework.jdk.core.util.Collections.toString(",",
+ getSelectedArtTypes())));
+ sb.append(AXml.addTagData("relTypes", org.eclipse.osee.framework.jdk.core.util.Collections.toString(",",
+ getSelectedRelTypes())));
+ sb.append(AXml.addTagData("showAttributes", org.eclipse.osee.framework.jdk.core.util.Collections.toString(",",
+ getSelectedShowAttributeTypes())));
+ sb.append(AXml.addTagData("layout", getLayoutName(getLayout())));
+ sb.append(AXml.addTagData("levels", getLevels() + ""));
+ sb.append(AXml.addTagData("linkName", getLinkName() + ""));
+ return sb.toString();
+ }
+
+ public void fromXml(String xml) {
+ try {
+ String guid = AXml.getTagData(xml, "guid");
+ if (guid != null && !guid.equals("")) {
+ String branchId = AXml.getTagData(xml, "branchId");
+ Branch branch = BranchManager.getBranch(Integer.parseInt(branchId));
+ Artifact art = ArtifactQuery.getArtifactFromId(guid, branch);
+ if (art != null) {
+ setArtifact(art);
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, "SkyWalker couldn't find stored artifact via guid", ex);
+ }
+ String artTypeStr = AXml.getTagData(xml, "artTypes");
+ if (artTypeStr != null && !artTypeStr.equals("")) {
+ for (Entry<ArtifactType, Boolean> desc : artTypes.entrySet()) {
+ desc.setValue(false);
+ }
+ for (String name : artTypeStr.split(",")) {
+ for (Entry<ArtifactType, Boolean> desc : artTypes.entrySet()) {
+ if (desc.getKey().getName().equals(name)) {
+ desc.setValue(true);
+ break;
+ }
+ }
+ }
+ }
+ String relTypeStr = AXml.getTagData(xml, "relTypes");
+ if (relTypeStr != null && !relTypeStr.equals("")) {
+ for (Entry<Object, Boolean> desc : relTypes.entrySet()) {
+ desc.setValue(false);
+ }
+ for (String name : relTypeStr.split(",")) {
+ for (Entry<Object, Boolean> desc : relTypes.entrySet()) {
+ if (desc.getKey().toString().equals(name)) {
+ desc.setValue(true);
+ break;
+ }
+ }
+ }
+ }
+ String showAttrString = AXml.getTagData(xml, "showAttributes");
+ if (showAttrString != null && !showAttrString.equals("")) {
+ for (Entry<AttributeType, Boolean> desc : showAttributes.entrySet()) {
+ desc.setValue(false);
+ }
+ for (String name : showAttrString.split(",")) {
+ for (Entry<AttributeType, Boolean> desc : showAttributes.entrySet()) {
+ if (desc.getKey().getName().equals(name)) {
+ desc.setValue(true);
+ break;
+ }
+ }
+ }
+ }
+ String layoutStr = AXml.getTagData(xml, "layout");
+ if (layoutStr != null && !layoutStr.equals("")) {
+ for (AbstractLayoutAlgorithm layout : getLayouts()) {
+ if (getLayoutName(layout).equals(layoutStr)) {
+ setLayout(layout);
+ break;
+ }
+ }
+ }
+ String levelStr = AXml.getTagData(xml, "levels");
+ if (levelStr != null && !levelStr.equals("")) {
+ setLevels(Integer.parseInt(levelStr));
+ }
+
+ String linkNameStr = AXml.getTagData(xml, "linkName");
+ if (linkNameStr != null && !linkNameStr.equals("")) {
+ setLinkName(LinkName.valueOf(linkNameStr));
+ }
+
+ notifyListeners(ModType.ArtType, ModType.RelType, ModType.Level, ModType.Layout, ModType.Link_Name,
+ ModType.Show_Attribute);
+ }
+
+ /**
+ * @return the artifact
+ */
+ public Artifact getArtifact() {
+ return artifact;
+ }
+
+ private Map<AbstractLayoutAlgorithm, String> loadLayouts() {
+ if (layouts == null) {
+ layouts = new HashMap<AbstractLayoutAlgorithm, String>();
+
+ RadialLayoutAlgorithm radLayout = new RadialLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING);
+ radLayout.setRangeToLayout((-90 * Math.PI) / 360, (90 * Math.PI) / 360);
+ defaultLayout = radLayout;
+ layouts.put(radLayout, "Radial - Right (default)");
+
+ radLayout = new RadialLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING);
+ radLayout.setRangeToLayout(0, (180 * Math.PI) / 360);
+ layouts.put(radLayout, RADIAL_DOWN_LAYOUT);
+
+ layouts.put(new RadialLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING), "Radial - Full");
+ layouts.put(new SpringLayoutAlgorithm(), SPRING_LAYOUT);
+ layouts.put(new TreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING), "Tree");
+ layouts.put(new VerticalLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING), "Vertical");
+ layouts.put(new GridLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING), "Grid");
+ }
+ return layouts;
+ }
+
+ /**
+ * @return the defaultLayout
+ */
+ public AbstractLayoutAlgorithm getLayout() {
+ return layout;
+ }
+
+ public AbstractLayoutAlgorithm getLayout(String layoutName) {
+ for (Entry<AbstractLayoutAlgorithm, String> entry : layouts.entrySet()) {
+ if (entry.getValue().equals(layoutName)) return entry.getKey();
+ }
+ return defaultLayout;
+ }
+
+ public Set<AbstractLayoutAlgorithm> getLayouts() {
+ return layouts.keySet();
+ }
+
+ public String getLayoutName(AbstractLayoutAlgorithm layout) {
+ return layouts.get(layout);
+ }
+
+ /**
+ * @param artifact the artifact to set
+ */
+ public void setArtifact(Artifact artifact) {
+ if (this.artifact == artifact) return;
+ this.artifact = artifact;
+ loadArtTypes();
+ loadRelTypes();
+ loadAttributeTypes();
+ notifyListeners(ModType.Artifact);
+ }
+
+ public boolean isValidArtifactType(ArtifactType type) {
+ if (!isFilterEnabled()) return true;
+ return getSelectedArtTypes().contains(type);
+ }
+
+ public boolean isValidRelationType(RelationType type) {
+ if (!isFilterEnabled()) return true;
+ return getSelectedRelTypes().contains(type);
+ }
+
+ /**
+ * @return the levels
+ */
+ public int getLevels() {
+ return levels;
+ }
+
+ /**
+ * @param levels the levels to set
+ */
+ public void setLevels(int levels) {
+ if (this.levels == levels) return;
+ this.levels = levels;
+ notifyListeners(ModType.Level);
+ }
+
+ /**
+ * @return the filterByArtType
+ */
+ public boolean isFilterEnabled() {
+ return filterEnabled;
+ }
+
+ /**
+ * @param filterByArtType the filterByArtType to set
+ */
+ public void setFilterEnabled(boolean enable) {
+ if (this.filterEnabled == enable) return;
+ this.filterEnabled = enable;
+ notifyListeners(ModType.FilterEnabled);
+ }
+
+ private void notifyListeners(ModType... modType) {
+ for (ISkyWalkerOptionsChangeListener listener : listeners)
+ listener.modified(modType);
+ }
+
+ public void setSelectedRelTypes(Object[] selected) {
+ List<Object> selList = new ArrayList<Object>();
+ for (Object obj : selected)
+ selList.add(obj);
+ for (Entry<Object, Boolean> entry : relTypes.entrySet()) {
+ entry.setValue(selList.contains(entry.getKey()));
+ }
+ notifyListeners(ModType.RelType);
+ }
+
+ public void setSelectedShowAttributes(Object[] selected) {
+ List<Object> selList = new ArrayList<Object>();
+ for (Object obj : selected)
+ selList.add(obj);
+ for (Entry<AttributeType, Boolean> entry : showAttributes.entrySet()) {
+ entry.setValue(selList.contains(entry.getKey()));
+ }
+ notifyListeners(ModType.Show_Attribute);
+ }
+
+ public void setSelectedArtTypes(Collection<ArtifactType> selected) {
+ for (Entry<ArtifactType, Boolean> entry : artTypes.entrySet()) {
+ entry.setValue(selected.contains(entry.getKey()));
+ }
+ notifyListeners(ModType.ArtType);
+ }
+
+ public Set<ArtifactType> getSelectedArtTypes() {
+ Set<ArtifactType> selected = new HashSet<ArtifactType>();
+ if (artTypes == null) return selected;
+ for (ArtifactType desc : artTypes.keySet())
+ if (artTypes.get(desc)) selected.add(desc);
+ return selected;
+ }
+
+ public Set<Object> getSelectedRelTypes() {
+ Set<Object> selected = new HashSet<Object>();
+ if (relTypes == null) return selected;
+ for (Object desc : relTypes.keySet())
+ if (relTypes.get(desc)) selected.add(desc);
+ return selected;
+ }
+
+ public Set<AttributeType> getSelectedShowAttributeTypes() {
+ Set<AttributeType> selected = new HashSet<AttributeType>();
+ if (showAttributes == null) return selected;
+ for (AttributeType desc : showAttributes.keySet())
+ if (showAttributes.get(desc)) selected.add(desc);
+ return selected;
+ }
+
+ public Set<ArtifactType> getAllArtTypes() {
+ if (artTypes == null) return new HashSet<ArtifactType>();
+ return artTypes.keySet();
+ }
+
+ public Set<Object> getAllRelTypes() {
+ if (relTypes == null) return new HashSet<Object>();
+ return relTypes.keySet();
+ }
+
+ public Set<AttributeType> getAllShowAttributes() {
+ if (showAttributes == null) return new HashSet<AttributeType>();
+ return showAttributes.keySet();
+ }
+
+ public Set<RelationType> getAllRelationLinkDescriptorTypes() {
+ if (relTypes == null) return new HashSet<RelationType>();
+ Set<RelationType> descs = new HashSet<RelationType>();
+ for (Object obj : relTypes.keySet()) {
+ if (obj instanceof RelationType) descs.add((RelationType) obj);
+ }
+ return descs;
+ }
+
+ /**
+ * @param layout the layout to set
+ */
+ public void setLayout(AbstractLayoutAlgorithm layout) {
+ if (this.layout == layout) return;
+ this.layout = layout;
+ notifyListeners(ModType.Layout);
+ }
+
+ /**
+ * @return the linkName
+ */
+ public LinkName getLinkName() {
+ return linkName;
+ }
+
+ /**
+ * @param linkName the linkName to set
+ */
+ public void setLinkName(LinkName linkName) {
+ if (this.linkName == linkName) return;
+ this.linkName = linkName;
+ notifyListeners(ModType.Link_Name);
+ }
+
+ /**
+ * @return the defaultLayout
+ */
+ public AbstractLayoutAlgorithm getDefaultLayout() {
+ return defaultLayout;
+ }
+
+ /**
+ * @param defaultLayout the defaultLayout to set
+ */
+ public void setDefaultLayout(AbstractLayoutAlgorithm defaultLayout) {
+ this.defaultLayout = defaultLayout;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerRelTypeTabItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerRelTypeTabItem.java
new file mode 100644
index 00000000000..31880bdf448
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerRelTypeTabItem.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.skywalker;
+
+import java.util.Arrays;
+import java.util.List;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.ui.skynet.skywalker.ISkyWalkerOptionsChangeListener.ModType;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TabItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SkyWalkerRelTypeTabItem {
+
+ private CheckboxTreeViewer treeViewer;
+ private Button selectAll;
+ private Button deSelectAll;
+ private final SkyWalkerOptions options;
+
+ public SkyWalkerRelTypeTabItem(org.eclipse.swt.widgets.TabFolder tabFolder, SkyWalkerOptions options) {
+
+ this.options = options;
+ TabItem item = new TabItem(tabFolder, SWT.NONE);
+ item.setText("Relation Type");
+
+ Composite comp = new Composite(tabFolder, SWT.BORDER);
+ comp.setLayout(ALayout.getZeroMarginLayout());
+ comp.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+
+ treeViewer = new CheckboxTreeViewer(comp, SWT.MULTI | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ treeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ treeViewer.setContentProvider(new RelTypeContentProvider());
+ treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ storeSelected();
+ }
+ });
+ treeViewer.setLabelProvider(new LabelProvider() {
+
+ public Image getImage(Object obj) {
+ return null;
+ }
+
+ public String getText(Object obj) {
+ return obj.toString();
+ }
+ });
+ treeViewer.setSorter(new ViewerSorter());
+
+ Composite buttonComp = new Composite(comp, SWT.BORDER);
+ buttonComp.setLayout(ALayout.getZeroMarginLayout(2, false));
+ buttonComp.setLayoutData(new GridData());
+
+ selectAll = new Button(buttonComp, SWT.PUSH);
+ selectAll.setText("Select All");
+ selectAll.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ treeViewer.setAllChecked(true);
+ storeSelected();
+ }
+ });
+
+ deSelectAll = new Button(buttonComp, SWT.PUSH);
+ deSelectAll.setText("De-Select All");
+ deSelectAll.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ treeViewer.setAllChecked(false);
+ storeSelected();
+ }
+ });
+
+ options.addSkyWalkerOptionsChangeListener(new ISkyWalkerOptionsChangeListener() {
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.skywalker.ISkyWalkerOptionsChangeListener#modified(org.eclipse.osee.framework.ui.skynet.skywalker.ISkyWalkerOptionsChangeListener.ModType[])
+ */
+ public void modified(ModType... modTypes) {
+ handleOptionModified(modTypes);
+ }
+ });
+ // Set UI to defaults
+ handleOptionModified(ModType.FilterEnabled);
+ handleOptionModified(ModType.RelType);
+ item.setControl(comp);
+ }
+
+ public void storeSelected() {
+ options.setSelectedRelTypes(treeViewer.getCheckedElements());
+ }
+
+ public void handleOptionModified(ModType... modTypes) {
+ List<ModType> modList = Arrays.asList(modTypes);
+ if (modList.contains(ModType.FilterEnabled)) {
+ if (selectAll != null) selectAll.setEnabled(options.isFilterEnabled());
+ if (deSelectAll != null) deSelectAll.setEnabled(options.isFilterEnabled());
+ }
+ if (modList.contains(ModType.RelType)) {
+ if (treeViewer != null) {
+ treeViewer.setCheckedElements(options.getSelectedRelTypes().toArray());
+ }
+ }
+ if (modList.contains(ModType.Artifact)) {
+ if (treeViewer.getInput() == null && options.getAllRelTypes() != null && options.getAllRelTypes().size() > 0) {
+ treeViewer.setInput(options.getAllRelationLinkDescriptorTypes());
+ treeViewer.setAllChecked(true);
+ }
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerShowAttributeTabItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerShowAttributeTabItem.java
new file mode 100644
index 00000000000..84c8473bf40
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerShowAttributeTabItem.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.skywalker;
+
+import java.util.Arrays;
+import java.util.List;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.ui.plugin.util.ArrayTreeContentProvider;
+import org.eclipse.osee.framework.ui.skynet.skywalker.ISkyWalkerOptionsChangeListener.ModType;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TabItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SkyWalkerShowAttributeTabItem {
+
+ private CheckboxTreeViewer treeViewer;
+ private final SkyWalkerOptions options;
+
+ public SkyWalkerShowAttributeTabItem(org.eclipse.swt.widgets.TabFolder tabFolder, SkyWalkerOptions options) {
+
+ this.options = options;
+ TabItem item = new TabItem(tabFolder, SWT.NONE);
+ item.setText("Show Attribute");
+
+ Composite comp = new Composite(tabFolder, SWT.BORDER);
+ comp.setLayout(ALayout.getZeroMarginLayout());
+ comp.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+
+ treeViewer = new CheckboxTreeViewer(comp, SWT.MULTI | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ treeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ treeViewer.setContentProvider(new ArrayTreeContentProvider());
+ treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ storeSelected();
+ }
+ });
+ treeViewer.setLabelProvider(new LabelProvider() {
+
+ public Image getImage(Object obj) {
+ return null;
+ }
+
+ public String getText(Object obj) {
+ return obj.toString();
+ }
+ });
+ treeViewer.setSorter(new ViewerSorter());
+
+ options.addSkyWalkerOptionsChangeListener(new ISkyWalkerOptionsChangeListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.skywalker.ISkyWalkerOptionsChangeListener#modified(org.eclipse.osee.framework.ui.skynet.skywalker.ISkyWalkerOptionsChangeListener.ModType[])
+ */
+ public void modified(ModType... modTypes) {
+ handleOptionModified(modTypes);
+ }
+ });
+ // Set UI to defaults
+ handleOptionModified(ModType.FilterEnabled);
+ handleOptionModified(ModType.Show_Attribute);
+ item.setControl(comp);
+ }
+
+ public void storeSelected() {
+ options.setSelectedShowAttributes(treeViewer.getCheckedElements());
+ }
+
+ public void handleOptionModified(ModType... modTypes) {
+ List<ModType> modList = Arrays.asList(modTypes);
+ if (modList.contains(ModType.Show_Attribute)) {
+ if (treeViewer != null) {
+ treeViewer.setCheckedElements(options.getSelectedShowAttributeTypes().toArray());
+ }
+ }
+ if (modList.contains(ModType.Artifact)) {
+ if (treeViewer.getInput() == null && options.getAllShowAttributes() != null && options.getAllShowAttributes().size() > 0) {
+ treeViewer.setInput(options.getAllShowAttributes());
+ }
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerTabOptions.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerTabOptions.java
new file mode 100644
index 00000000000..9794c4285e6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerTabOptions.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.skywalker;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TabFolder;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SkyWalkerTabOptions {
+
+ private TabFolder tabFolder;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public SkyWalkerTabOptions(Composite parent, int style, SkyWalkerOptions options) {
+ tabFolder = new TabFolder(parent, SWT.BORDER);
+
+ new SkyWalkerLayoutTabItem(tabFolder, options);
+ new SkyWalkerArtTypeTabItem(tabFolder, options);
+ new SkyWalkerRelTypeTabItem(tabFolder, options);
+ new SkyWalkerShowAttributeTabItem(tabFolder, options);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerView.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerView.java
new file mode 100644
index 00000000000..7f8cabb5a8e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/skywalker/SkyWalkerView.java
@@ -0,0 +1,368 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.skywalker;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.core.data.SystemUser;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.ArtifactDoubleClick;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.ImageCapture;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.zest.core.viewers.GraphViewer;
+import org.eclipse.zest.core.widgets.GraphItem;
+import org.eclipse.zest.core.widgets.GraphNode;
+import org.eclipse.zest.core.widgets.ZestStyles;
+
+/**
+ * @author Robert A. Fisher
+ * @author Donald G. Dunne
+ */
+public class SkyWalkerView extends ViewPart {
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerView";
+ protected GraphViewer viewer;
+ private static final String INPUT = "input";
+ private static final String GUID = "guid";
+ private static final String BRANCHID = "branchId";
+ private String storedGuid;
+ private String storedBrandId;
+ private final SkyWalkerOptions options = new SkyWalkerOptions();
+ private List<Artifact> history = new LinkedList<Artifact>();
+ private Action filterAction;
+ private Composite viewerComp;
+ protected SashForm sashForm;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createPartControl(Composite parent) {
+
+ sashForm = new SashForm(parent, SWT.HORIZONTAL);
+ sashForm.setLayout(new FillLayout());
+
+ viewerComp = new Composite(sashForm, SWT.NONE);
+ viewerComp.setLayout(new FillLayout());
+
+ viewer = new GraphViewer(viewerComp, ZestStyles.NONE);
+ viewer.setContentProvider(new ArtifactGraphContentProvider(options));
+ viewer.setLabelProvider(new ArtifactGraphLabelProvider(options));
+ viewer.setConnectionStyle(ZestStyles.CONNECTIONS_SOLID);
+ viewer.setNodeStyle(ZestStyles.NODES_NO_LAYOUT_RESIZE);
+ viewer.addDoubleClickListener(new IDoubleClickListener() {
+
+ public void doubleClick(DoubleClickEvent event) {
+ IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+ Iterator<?> itemsIter = selection.iterator();
+ while (itemsIter.hasNext()) {
+ Object obj = itemsIter.next();
+ if (!(obj instanceof Artifact)) continue;
+ Artifact artifact = (Artifact) obj;
+ explore(artifact);
+ }
+ }
+
+ });
+
+ Composite child1 = new Composite(sashForm, SWT.BORDER);
+ child1.setLayout(new FillLayout());
+ new SkyWalkerTabOptions(child1, SWT.NONE, options);
+
+ options.addSkyWalkerOptionsChangeListener(new ISkyWalkerOptionsChangeListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerOptionsChangeListener#modified(org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerOptionsChangeListener.ModType)
+ */
+ public void modified(ModType... modTypes) {
+ List<ModType> modList = Arrays.asList(modTypes);
+ // Don't redraw if artifact has been changed; else get in infinite loop
+ if (modList.contains(ModType.Artifact)) return;
+ if (modList.contains(ModType.Layout))
+ viewer.setLayoutAlgorithm(options.getLayout(), true);
+ else if (modList.contains(ModType.Show_Attribute)) {
+ try {
+ // exploring another artifact and then the original forces a redraw of all the
+ // objects
+ // which is necessary for a node size change
+ Artifact art = (Artifact) viewer.getInput();
+ explore(UserManager.getUser(SystemUser.UnAssigned));
+ if (art != null) explore(art);
+ } catch (Exception ex) {
+ // DO Nothing
+ }
+ } else
+ redraw();
+ }
+ });
+
+ sashForm.setWeights(new int[] {75, 25});
+
+ createActions();
+ viewer.setLayoutAlgorithm(options.getLayout());
+ // Restore current artifact if stored upon shutdown
+ try {
+ if (storedGuid != null) {
+ Artifact art =
+ ArtifactQuery.getArtifactFromId(storedGuid,
+ BranchManager.getBranch(Integer.parseInt(storedBrandId)));
+ if (art != null) explore(art);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ protected void createActions() {
+
+ IActionBars bars = getViewSite().getActionBars();
+ // IMenuManager mm = bars.getMenuManager();
+ IToolBarManager tbm = bars.getToolBarManager();
+
+ filterAction = new Action("Enable Filters", Action.AS_CHECK_BOX) {
+ public void run() {
+ options.setFilterEnabled(filterAction.isChecked());
+ redraw();
+ }
+ };
+ filterAction.setChecked(options.isFilterEnabled());
+ filterAction.setToolTipText("Enable Filters");
+ filterAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("filter.gif"));
+ tbm.add(filterAction);
+
+ Action action = new Action() {
+ public void run() {
+ ArtifactDoubleClick.openArtifact(viewer.getSelection());
+ }
+ };
+ action.setText("Open Selected");
+ action.setToolTipText("Open Selected");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("edit2.gif"));
+ tbm.add(action);
+
+ action = new Action() {
+ public void run() {
+ if (history.size() > 0) {
+ Artifact art = history.get(history.size() - 1);
+ history.remove(history.size() - 1);
+ explore(art, true);
+ }
+ }
+ };
+ action.setText("Back");
+ action.setToolTipText("Back");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("back.gif"));
+ tbm.add(action);
+
+ action = new Action() {
+ public void run() {
+ ImageCapture imgCapture = new ImageCapture(viewerComp);
+ imgCapture.popupDialog();
+ }
+ };
+ action.setText("Print");
+ action.setToolTipText("Print");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("print.gif"));
+ tbm.add(action);
+
+ action = new Action() {
+ public void run() {
+ handleSaveOptions();
+ }
+ };
+ action.setText("Save Options");
+ action.setToolTipText("Save Options");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("save.gif"));
+ tbm.add(action);
+
+ action = new Action() {
+ public void run() {
+ handleLoadOptions();
+ }
+ };
+ action.setText("Load Options");
+ action.setToolTipText("Load Options");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("load.gif"));
+ tbm.add(action);
+
+ action = new Action() {
+ public void run() {
+ redraw();
+ }
+ };
+ action.setText("Refresh");
+ action.setToolTipText("Refresh");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("refresh.gif"));
+ tbm.add(action);
+ }
+
+ public void handleSaveOptions() {
+ final FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell().getShell(), SWT.SAVE);
+ dialog.setFilterExtensions(new String[] {"*.sky"});
+ String filename = dialog.open();
+ if (filename != null) {
+ AFile.writeFile(filename, options.toXml());
+ AWorkbench.popup("Saved", "Save Successful");
+ }
+ }
+
+ public void handleLoadOptions() {
+ final FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell().getShell(), SWT.OPEN);
+ dialog.setFilterExtensions(new String[] {"*.sky"});
+ String filename = dialog.open();
+ if (filename != null) {
+ String xml = AFile.readFile(filename);
+ options.fromXml(xml);
+ explore(options.getArtifact());
+ }
+ }
+
+ public void redraw() {
+ if (viewer.getInput() != null) explore((Artifact) viewer.getInput());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ viewer.getControl().setFocus();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.ats.IActionable#getActionDescription()
+ */
+ public String getActionDescription() {
+ return "";
+ }
+
+ public void explore(Artifact artifact) {
+ explore(artifact, false);
+ }
+
+ private boolean inExplore = false;
+
+ private void explore(Artifact artifact, boolean fromHistory) {
+ // If already in explore method, don't respond to events trying to redraw
+ if (inExplore) return;
+ inExplore = true;
+ options.setArtifact(artifact);
+
+ // Add current artifact to history only if explore wasn't caused by going back in history
+ if (!fromHistory && viewer.getInput() != null) {
+ Artifact currArt = (Artifact) viewer.getInput();
+ if (history.size() == 0)
+ history.add(currArt);
+ else if (history.size() > 0 && !history.get(history.size() - 1).equals(currArt)) history.add(currArt);
+ }
+ viewer.setInput(options.getArtifact());
+ // Highlight center object
+ GraphItem item = viewer.findGraphItem(options.getArtifact());
+ if (item != null && (item instanceof GraphNode)) {
+ GraphNode node = (GraphNode) item;
+ node.setBackgroundColor(Display.getCurrent().getSystemColor(SWT.COLOR_CYAN));
+ viewer.update(node, null);
+ }
+ setPartName("Sky Walker (" + artifact.getDescriptiveName() + ")");
+ inExplore = false;
+ }
+
+ public static void exploreArtifact(Artifact artifact) {
+ exploreArtifact(artifact.getDescriptiveName(), artifact);
+ }
+
+ public static void exploreArtifact(String name, Artifact artifact) {
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ SkyWalkerView view;
+ try {
+ view =
+ (SkyWalkerView) page.showView(SkyWalkerView.VIEW_ID, new GUID().toString(), IWorkbenchPage.VIEW_ACTIVATE);
+ view.explore(artifact);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
+ */
+ @Override
+ public void saveState(IMemento memento) {
+ super.saveState(memento);
+
+ if (viewer.getInput() == null) return;
+ Artifact artifact = (Artifact) viewer.getInput();
+ memento = memento.createChild(INPUT);
+ memento.putString(GUID, artifact.getGuid());
+ memento.putString(BRANCHID, String.valueOf(artifact.getBranch().getBranchId()));
+ }
+
+ @Override
+ public void init(IViewSite site, IMemento memento) throws PartInitException {
+ super.init(site, memento);
+ try {
+ if (memento != null) {
+ memento = memento.getChild(INPUT);
+ if (memento != null) {
+ storedGuid = memento.getString(GUID);
+ storedBrandId = memento.getString(BRANCHID);
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, "Sky Walker error on init: ", ex);
+ }
+ }
+
+ /**
+ * @return the options
+ */
+ public SkyWalkerOptions getOptions() {
+ return options;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/status/SwtStatusMonitor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/status/SwtStatusMonitor.java
new file mode 100644
index 00000000000..1d1145a7935
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/status/SwtStatusMonitor.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.status;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.skynet.core.status.IStatusMonitor;
+
+/**
+ * @author Theron Virgin
+ */
+public class SwtStatusMonitor implements IStatusMonitor {
+ final IProgressMonitor monitor;
+
+ public SwtStatusMonitor(IProgressMonitor monitor) {
+ this.monitor = monitor;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.status.IStatusMonitor#startJob(java.lang.String, int)
+ */
+ @Override
+ public void startJob(String name, int totalWork) {
+ monitor.beginTask(name, totalWork);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.status.IStatusMonitor#updateWork(int)
+ */
+ @Override
+ public void updateWork(int workCompleted) {
+ monitor.worked(workCompleted);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.status.IStatusMonitor#updateWork(int)
+ */
+ @Override
+ public void done() {
+ monitor.done();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.status.IStatusMonitor#setSubtaskName()
+ */
+ @Override
+ public void setSubtaskName(String name) {
+ monitor.subTask(name);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/ArtifactTemplateProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/ArtifactTemplateProvider.java
new file mode 100644
index 00000000000..719abc3f312
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/ArtifactTemplateProvider.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.templates;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.render.IRenderer;
+
+/**
+ * This provider gets all of its templates from the common branch based on a name created from concatenating the
+ * getTemplate parameters together in the various possible combinations
+ *
+ * @author Ryan D. Brooks
+ */
+public class ArtifactTemplateProvider implements ITemplateProvider {
+ private HashMap<String, Artifact> templateMap;
+
+ public ArtifactTemplateProvider() {
+
+ }
+
+ private synchronized void ensureTemplateCachePopulated() throws OseeCoreException {
+ if (templateMap == null) {
+ templateMap = new HashMap<String, Artifact>();
+ Collection<Artifact> artifacts =
+ ArtifactQuery.getArtifactsFromType("Renderer Template", BranchManager.getCommonBranch());
+ for (Artifact art : artifacts) {
+ Collection<Attribute<String>> attrs = art.getAttributes("Template Match Criteria");
+ for (Attribute<String> attr : attrs) {
+ String matchCriteria = attr.getValue();
+ Artifact cachedArt = templateMap.get(matchCriteria);
+ if (cachedArt == null) {
+ templateMap.put(matchCriteria, art);
+ } else { //use the artifact with the higher name value and warn the user that there are duplicate match criteria
+ int value = cachedArt.getDescriptiveName().compareTo(art.getDescriptiveName());
+ if (value < 0) {
+ templateMap.put(matchCriteria, art);
+ }
+ OseeLog.log(
+ SkynetGuiPlugin.class,
+ Level.SEVERE,
+ String.format(
+ "ArtifactTemplateProvider has detected a conflict with 'Template Match Criteria' [%s]. Artifact [%s] will supply the template for all requests with this match criteria.",
+ matchCriteria, templateMap.get(matchCriteria).getDescriptiveName()));
+
+ }
+ }
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.template.ITemplateProvider#getTemplate(java.lang.String, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String, java.lang.String)
+ */
+ @Override
+ public Artifact getTemplate(IRenderer renderer, Artifact artifact, String presentationType, String option) throws OseeCoreException {
+ ensureTemplateCachePopulated();
+ List<String> possibleTemplateNames =
+ getPossibleTemplateNamesOrderedBySpecialization(renderer, artifact, presentationType, option);
+
+ for (String name : possibleTemplateNames) {
+ Artifact template = templateMap.get(name);
+ if (template != null) {
+ return template;
+ }
+ }
+ throw new OseeArgumentException(String.format("Unable to find a valid template match for [%s, %s, %s, %s].",
+ renderer.toString(), artifact.toString(), presentationType, option));
+ }
+
+ private List<String> getPossibleTemplateNamesOrderedBySpecialization(IRenderer renderer, Artifact artifact, String presentationType, String option) throws OseeArgumentException {
+ if (renderer == null || presentationType == null) {
+ throw new OseeArgumentException(String.format("Invalid renderer[%s] or presentationType[%s]",
+ renderer.toString(), presentationType.toString()));
+ }
+ List<String> list = new ArrayList<String>();
+
+ if (artifact != null && option != null) {
+ list.add(renderer.getId() + " " + artifact.getArtifactTypeName() + " " + presentationType + " " + option);
+ }
+ if (artifact != null) {
+ list.add(renderer.getId() + " " + artifact.getArtifactTypeName() + " " + presentationType);
+ }
+ if (option != null) {
+ list.add(renderer.getId() + " " + presentationType + " " + option);
+ }
+
+ list.add(renderer.getId() + " " + presentationType);
+ return list;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.template.ITemplateProvider#getApplicabilityRating(java.lang.String, org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String, java.lang.String)
+ */
+ public int getApplicabilityRating(IRenderer rendererId, Artifact artifact, String presentationType, String option) {
+ return ITemplateProvider.DEFAULT_MATCH;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/ITemplateProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/ITemplateProvider.java
new file mode 100644
index 00000000000..82082dd8376
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/ITemplateProvider.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.templates;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.render.IRenderer;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public interface ITemplateProvider {
+
+ public static final int SUBTYPE_TYPE_MATCH = 30;
+ public static final int ARTIFACT_TYPE_MATCH = 20;
+ public static final int DEFAULT_MATCH = 10;
+ public static final int NO_MATCH = -1;
+
+ public Artifact getTemplate(IRenderer renderer, Artifact artifact, String presentationType, String option) throws OseeCoreException;
+
+ public abstract int getApplicabilityRating(IRenderer renderer, Artifact artifact, String presentationType, String option);
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/SimpleTemplateProviderDbTask.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/SimpleTemplateProviderDbTask.java
new file mode 100644
index 00000000000..26ae757a78b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/SimpleTemplateProviderDbTask.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.templates;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.database.IDbInitializationTask;
+import org.eclipse.osee.framework.db.connection.OseeConnection;
+import org.eclipse.osee.framework.db.connection.exception.ArtifactDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+
+public class SimpleTemplateProviderDbTask implements IDbInitializationTask {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.database.initialize.tasks.IDbInitializationTask#run(java.sql.Connection)
+ */
+ public void run(OseeConnection connection) throws OseeCoreException {
+ try {
+ processTemplatesForDBInit();
+ } catch (IOException ex) {
+ throw new OseeCoreException(ex);
+ }
+ }
+
+ private void processTemplatesForDBInit() throws IOException, OseeCoreException {
+
+ Artifact templateFolder = getTemplateFolder();
+ IExtensionPoint ep =
+ Platform.getExtensionRegistry().getExtensionPoint(
+ "org.eclipse.osee.framework.ui.skynet.SimpleTemplateProviderTemplate");
+ for (IExtension extension : ep.getExtensions()) {
+ for (IConfigurationElement el : extension.getConfigurationElements()) {
+ Artifact templateArtifact =
+ ArtifactTypeManager.addArtifact("Renderer Template", BranchManager.getCommonBranch());
+ String filePath = el.getAttribute("File");
+ String name = filePath.substring(filePath.lastIndexOf('/') + 1);
+ name = name.substring(0, name.lastIndexOf('.'));
+ URL url = Platform.getBundle(el.getContributor().getName()).getEntry(filePath);
+
+ if (url != null) {
+ templateArtifact.setSoleAttributeValue("Name", name);
+ templateArtifact.setSoleAttributeFromStream(WordAttribute.WHOLE_WORD_CONTENT, url.openStream());
+ for (IConfigurationElement matchCriteriaEl : el.getChildren()) {
+ String match = matchCriteriaEl.getAttribute("match");
+ templateArtifact.addAttribute("Template Match Criteria", match);
+ }
+ templateArtifact.persistAttributes();
+ templateFolder.addChild(templateArtifact);
+ } else {
+ OseeLog.log(SimpleTemplateProviderDbTask.class, Level.SEVERE, String.format("Problem loading file %s",
+ filePath));
+ }
+ }
+ }
+ templateFolder.persistAttributesAndRelations();
+ }
+
+ private Artifact getTemplateFolder() throws OseeCoreException {
+ try {
+ return ArtifactQuery.getArtifactFromTypeAndName("Folder", "Document Templates",
+ BranchManager.getCommonBranch());
+ } catch (ArtifactDoesNotExist ex) {
+ Artifact rootArt =
+ ArtifactPersistenceManager.getDefaultHierarchyRootArtifact(BranchManager.getCommonBranch());
+
+ Artifact templateFolder =
+ ArtifactTypeManager.addArtifact("Folder", BranchManager.getCommonBranch(),
+ "Document Templates");
+ rootArt.addChild(templateFolder);
+ templateFolder.persistAttributesAndRelations();
+ return templateFolder;
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/TemplateManager.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/TemplateManager.java
new file mode 100644
index 00000000000..5bc7daae735
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/TemplateManager.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.templates;
+
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.plugin.core.util.ExtensionDefinedObjects;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.render.IRenderer;
+
+/**
+ * @author b1528444
+ */
+public class TemplateManager {
+ private static final String EXTENSION_ID = "org.eclipse.osee.framework.ui.skynet.TemplateProvider";
+ private static final String EXTENSION_ELEMENT = "TemplateProvider";
+ private static final String EXTENSION_CLASSNAME = "classname";
+ private final List<ITemplateProvider> templateProviders;
+ private static final TemplateManager instance = new TemplateManager();
+
+ private TemplateManager() {
+ ExtensionDefinedObjects<ITemplateProvider> extensionDefinedObjects =
+ new ExtensionDefinedObjects<ITemplateProvider>(EXTENSION_ID, EXTENSION_ELEMENT, EXTENSION_CLASSNAME);
+ templateProviders = extensionDefinedObjects.getObjects();
+ }
+
+ public static Artifact getTemplate(IRenderer renderer, Artifact artifact, String presentationType, String option) throws OseeCoreException {
+ ITemplateProvider bestTemplateProvider = null;
+ int highestRating = 0;
+ for (ITemplateProvider templateProvider : instance.templateProviders) {
+ int rating = templateProvider.getApplicabilityRating(renderer, artifact, presentationType, option);
+ if (rating > highestRating) {
+ bestTemplateProvider = templateProvider;
+ highestRating = rating;
+ }
+ }
+ return bestTemplateProvider.getTemplate(renderer, artifact, presentationType, option);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactClipboard.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactClipboard.java
new file mode 100644
index 00000000000..ddfaf5a270a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactClipboard.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.Collection;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactData;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTransfer;
+import org.eclipse.osee.framework.ui.skynet.HTMLTransferFormatter;
+import org.eclipse.osee.framework.ui.swt.NonBlankValidator;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.HTMLTransfer;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class ArtifactClipboard {
+ private static final String STATUS = "work";
+ private Clipboard clipboard;
+ private String viewId;
+
+ public ArtifactClipboard(String viewId) {
+ this.clipboard = new Clipboard(null);
+ this.viewId = viewId;
+ }
+
+ public void setArtifactsToClipboard(Collection<Artifact> artifactTransferData, Collection<String> textTransferData) {
+ if (artifactTransferData == null) {
+ throw new IllegalArgumentException("Artifacts can not be null for artifact copy.");
+ }
+ if (artifactTransferData.isEmpty()) {
+ throw new IllegalArgumentException("Artifacts can not be empty.");
+ }
+
+ Artifact[] artifacts = artifactTransferData.toArray(new Artifact[artifactTransferData.size()]);
+
+ clipboard.setContents(new Object[] {new ArtifactData(artifacts, STATUS, viewId),
+ HTMLTransferFormatter.getHtml(artifacts), Collections.toString(textTransferData, null, ", ", null)},
+ new Transfer[] {ArtifactTransfer.getInstance(), HTMLTransfer.getInstance(), TextTransfer.getInstance()});
+ }
+
+ public void setTextToClipboard(Collection<String> textTransferData) {
+ if (textTransferData == null) {
+ throw new IllegalArgumentException("Artifacts can not be null for artifact copy.");
+ }
+ if (textTransferData.isEmpty()) {
+ throw new IllegalArgumentException("Artifacts can not be empty.");
+ }
+
+ clipboard.setContents(new Object[] {Collections.toString(textTransferData, null, ", ", null)},
+ new Transfer[] {TextTransfer.getInstance()});
+ }
+
+ private static IInputValidator inputValidator = new NonBlankValidator("The new name must not be blank");
+
+ /**
+ * This method must be called from the display thread
+ *
+ * @throws Exception
+ */
+ public void pasteArtifactsFromClipboard(Artifact parent) throws Exception {
+ if (parent == null) throw new IllegalArgumentException("Parent can not be null.");
+
+ Object object = clipboard.getContents(ArtifactTransfer.getInstance());
+
+ if (object instanceof ArtifactData) {
+ Artifact[] clipboardArtifacts = ((ArtifactData) object).getArtifacts();
+
+ if (clipboardArtifacts.length == 1) {
+ Artifact clipboardArtifact = clipboardArtifacts[0];
+ if (clipboardArtifact instanceof User) {
+ return;
+ }
+
+ InputDialog dialog =
+ new InputDialog(Display.getCurrent().getActiveShell(), "Name Artifact", "Enter artifact name",
+ clipboardArtifacts[0].getDescriptiveName(), inputValidator);
+
+ if (dialog.open() == Window.CANCEL) {
+ return;
+ } else {
+ Artifact newArtifact = null;
+ newArtifact = clipboardArtifact.duplicate(parent.getBranch());
+ newArtifact.setDescriptiveName(dialog.getValue());
+ parent.addChild(newArtifact);
+ }
+ } else {
+ for (Artifact clipboardArtifact : clipboardArtifacts) {
+ // We do not support duplicating user artifacts.
+ if (clipboardArtifact instanceof User) {
+ continue;
+ }
+
+ Artifact newArtifact = null;
+ newArtifact = clipboardArtifact.duplicate(parent.getBranch());
+ parent.addChild(newArtifact);
+ }
+ }
+
+ parent.persistAttributesAndRelations();
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactDescriptiveLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactDescriptiveLabelProvider.java
new file mode 100644
index 00000000000..8c6f13cc8f9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactDescriptiveLabelProvider.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Generic Artifact Label Provider showing Descriptive Name as text
+ *
+ * @author Donald G. Dunne
+ */
+public class ArtifactDescriptiveLabelProvider implements ILabelProvider {
+
+ public Image getImage(Object arg0) {
+ return null;
+ }
+
+ public String getText(Object arg0) {
+ return ((Artifact) arg0).getDescriptiveName();
+ }
+
+ public void addListener(ILabelProviderListener arg0) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object arg0, String arg1) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener arg0) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactNameReverseSorter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactNameReverseSorter.java
new file mode 100644
index 00000000000..6faa65a61b4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactNameReverseSorter.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+/**
+ * Default sorter for artifacts. Sorts on descriptive name
+ */
+public class ArtifactNameReverseSorter extends ViewerSorter {
+
+ /**
+ * Default sorter for artifacts. Sorts on descriptive name
+ */
+ public ArtifactNameReverseSorter() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc) Method declared on ViewerSorter.
+ */
+ @SuppressWarnings("unchecked")
+ public int compare(Viewer viewer, Object o1, Object o2) {
+
+ return getComparator().compare(((Artifact) o2).getDescriptiveName(), ((Artifact) o1).getDescriptiveName());
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactNameSorter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactNameSorter.java
new file mode 100644
index 00000000000..b6d651d772a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactNameSorter.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+/**
+ * Default sorter for artifacts. Sorts on descriptive name
+ */
+public class ArtifactNameSorter extends ViewerSorter {
+
+ /**
+ * Default sorter for artifacts. Sorts on descriptive name
+ */
+ public ArtifactNameSorter() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc) Method declared on ViewerSorter.
+ */
+ @SuppressWarnings("unchecked")
+ public int compare(Viewer viewer, Object o1, Object o2) {
+
+ return getComparator().compare(((Artifact) o1).getDescriptiveName(), ((Artifact) o2).getDescriptiveName());
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactTypeAndDescriptiveLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactTypeAndDescriptiveLabelProvider.java
new file mode 100644
index 00000000000..3a0491982c3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ArtifactTypeAndDescriptiveLabelProvider.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Generic Artifact Label Provider showing Descriptive Name as text
+ *
+ * @author Donald G. Dunne
+ */
+public class ArtifactTypeAndDescriptiveLabelProvider implements ILabelProvider {
+
+ public Image getImage(Object arg0) {
+ return ((Artifact) arg0).getImage();
+ }
+
+ public String getText(Object arg0) {
+ return "[" + ((Artifact) arg0).getArtifactTypeName() + "][" + ((Artifact) arg0).getDescriptiveName() + "]";
+ }
+
+ public void addListener(ILabelProviderListener arg0) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object arg0, String arg1) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener arg0) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/AttributeCheckListDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/AttributeCheckListDialog.java
new file mode 100644
index 00000000000..84537586def
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/AttributeCheckListDialog.java
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.ArtifactTreeContentProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.SelectionDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class AttributeCheckListDialog extends SelectionDialog {
+ private CheckboxTreeViewer treeViewer;
+ private final ArrayList<AttributeType> selectedAttributes;
+ private String preferenceKey;
+
+ public AttributeCheckListDialog(Shell parent, String preferenceKey) {
+ this(parent, null, preferenceKey);
+ }
+
+ public AttributeCheckListDialog(Shell parent, Collection<AttributeType> attrTypes, String preferenceKey) {
+ super(parent);
+ setTitle("Select Attributes");
+ setMessage("Select Attributes");
+ this.selectedAttributes = new ArrayList<AttributeType>();
+ this.preferenceKey = preferenceKey;
+
+ if (attrTypes != null && !attrTypes.isEmpty()) {
+ selectedAttributes.addAll(attrTypes);
+ }
+ }
+
+ public String getSelectedAttributeData(Artifact artifact) throws Exception {
+ if (artifact == null) {
+ throw new IllegalArgumentException(" - ERROR: Null Artifact");
+ }
+
+ StringBuilder result = new StringBuilder();
+ for (AttributeType attributeType : artifact.getAttributeTypes()) {
+ if (selectedAttributes.contains(attributeType)) {
+ result.append(" - ");
+ result.append(artifact.getAttributesToString(attributeType.getName()));
+ }
+ }
+ return result.toString();
+ }
+
+ @Override
+ protected Control createDialogArea(Composite container) {
+
+ Composite comp = new Composite(container, SWT.NONE);
+ comp.setLayout(new GridLayout(2, false));
+ comp.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ treeViewer =
+ new CheckboxTreeViewer(comp,
+ SWT.MULTI | SWT.CHECK | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ treeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ treeViewer.setContentProvider(new ArtifactTreeContentProvider());
+ treeViewer.setSorter(new AttributeViewerSorter());
+ ArrayList<Object> objs = new ArrayList<Object>();
+ for (Object obj : selectedAttributes)
+ objs.add(obj);
+ treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ selectedAttributes.clear();
+ for (Object obj : treeViewer.getCheckedElements())
+ selectedAttributes.add((AttributeType) obj);
+ };
+ });
+ treeViewer.setLabelProvider(new LabelProvider() {
+
+ public String getText(Object obj) {
+ return obj.toString();
+ }
+ });
+ try {
+ treeViewer.setInput(TypeValidityManager.getValidAttributeTypes(BranchManager.getDefaultBranch()));
+ treeViewer.setCheckedElements(objs.toArray(new Object[objs.size()]));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return container;
+ }
+
+ public class AttributeViewerSorter extends ViewerSorter {
+ public AttributeViewerSorter() {
+ super();
+ }
+
+ @SuppressWarnings("unchecked")
+ public int compare(Viewer viewer, Object o1, Object o2) {
+ return getComparator().compare(((AttributeType) o1).getName(), ((AttributeType) o2).getName());
+ }
+ }
+
+ public boolean noneSelected() {
+ return selectedAttributes.isEmpty();
+ }
+
+ /**
+ * @return the selectedAttributes
+ */
+ public Collection<AttributeType> getSelectedAttributes() {
+ return selectedAttributes;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+ */
+ @Override
+ protected void okPressed() {
+ super.okPressed();
+
+ IPreferenceStore prefStore = SkynetGuiPlugin.getInstance().getPreferenceStore();
+ prefStore.setValue(preferenceKey, Collections.toString(getSelectedAttributes(), "", "|", ""));
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ChangeType.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ChangeType.java
new file mode 100644
index 00000000000..767d1a4056e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ChangeType.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.ArrayList;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Donald G. Dunne
+ */
+public enum ChangeType {
+
+ None, Support, Problem, Improvement;
+
+ public static String[] getChangeTypes() {
+ ArrayList<String> types = new ArrayList<String>();
+ for (ChangeType type : values())
+ if (type != None) types.add(type.name());
+ return types.toArray(new String[types.size()]);
+ }
+
+ public static ChangeType getChangeType(String name) {
+ for (ChangeType type : values()) {
+ if (type.name().equals(name)) return type;
+ }
+ return None;
+ }
+
+ public Image getImage() {
+ if (this == ChangeType.Problem)
+ return SkynetGuiPlugin.getInstance().getImage("greenBug.gif");
+ else if (this == ChangeType.Improvement)
+ return SkynetGuiPlugin.getInstance().getImage("greenPlus.gif");
+ else if (this == ChangeType.Support) return SkynetGuiPlugin.getInstance().getImage("users2.gif");
+ return null;
+ }
+
+ public static class ChangeTypeLabelProvider implements ILabelProvider {
+
+ public Image getImage(Object arg0) {
+ return ((ChangeType) arg0).getImage();
+ }
+
+ public String getText(Object arg0) {
+ return ((ChangeType) arg0).name();
+ }
+
+ public void addListener(ILabelProviderListener arg0) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object arg0, String arg1) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener arg0) {
+ }
+
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/DbConnectionExceptionComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/DbConnectionExceptionComposite.java
new file mode 100644
index 00000000000..8223ed6e3ff
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/DbConnectionExceptionComposite.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.swt.ExceptionComposite;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class DbConnectionExceptionComposite extends ExceptionComposite {
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public DbConnectionExceptionComposite(Composite parent, Exception ex) {
+ super(parent, ex);
+ }
+
+ /**
+ * Tests the DB Connection and returns true if ok. If exceptions and parent != null, the
+ * DbConnectionExceptionComposite will be displayed in parent giving exception information.
+ *
+ * @param parent
+ * @return
+ */
+ public static boolean dbConnectionIsOk(Composite parent) {
+ // try {
+ // ConnectionHandler.getConnection();
+ // } catch (Exception ex) {
+ // if (parent != null) new DbConnectionExceptionComposite(parent, ex);
+ // }
+ Result result = SkynetGuiPlugin.areOSEEServicesAvailable();
+ if (result.isFalse()) {
+ new DbConnectionExceptionComposite(parent, new IllegalStateException(
+ "OSEE Service(s) Unavailable:\n\t" + result.getText().replaceAll("\n", "\n\t")));
+ }
+ return result.isTrue();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/EmailGroupsAndUserGroups.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/EmailGroupsAndUserGroups.java
new file mode 100644
index 00000000000..6303c1660e6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/EmailGroupsAndUserGroups.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.UniversalGroup;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.UserGroupsCheckTreeDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItemAction;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateComposite.TableLoadOption;
+import org.eclipse.swt.program.Program;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class EmailGroupsAndUserGroups extends XNavigateItemAction {
+
+ private final GroupType[] groupType;
+ public static enum GroupType {
+ Groups, UserGroups, Both
+ };
+
+ /**
+ * @param parent
+ * @param teamDefHoldingVersions Team Definition Artifact that is related to versions or null for popup selection
+ */
+ public EmailGroupsAndUserGroups(XNavigateItem parent, GroupType... groupType) {
+ super(parent,
+ "Email " + (Arrays.asList(groupType).contains(GroupType.Both) ? "Groups / User Groups" : (Arrays.asList(
+ groupType).contains(GroupType.Groups) ? "Groups" : "User Groups")));
+ this.groupType = groupType;
+ }
+
+ public static Set<Artifact> getEmailGroupsAndUserGroups(User user, GroupType... groupType) throws OseeCoreException {
+ List<GroupType> groupTypes = Arrays.asList(groupType);
+ Set<Artifact> groupOptions = new HashSet<Artifact>();
+ if (groupTypes.contains(GroupType.Both) || groupTypes.contains(GroupType.Groups)) {
+ for (Artifact art : UniversalGroup.getGroups(BranchManager.getCommonBranch())) {
+ // Only add group if have read permissions
+ if (!art.getDescriptiveName().equals("Root Artifact") && AccessControlManager.checkObjectPermission(art,
+ PermissionEnum.READ)) groupOptions.add(art);
+ }
+ }
+ if (groupTypes.contains(GroupType.Both) || groupTypes.contains(GroupType.UserGroups)) {
+ for (Artifact art : ArtifactQuery.getArtifactsFromType("User Group", BranchManager.getCommonBranch())) {
+ // Only add group if have read permissions
+ if (!art.getDescriptiveName().equals("Root Artifact") && AccessControlManager.checkObjectPermission(art,
+ PermissionEnum.READ)) groupOptions.add(art);
+ }
+ }
+ return groupOptions;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.ats.navigate.ActionNavigateItem#run()
+ */
+ @Override
+ public void run(TableLoadOption... tableLoadOptions) throws Exception {
+ Set<Artifact> groupOptions = getEmailGroupsAndUserGroups(UserManager.getUser(), groupType);
+ UserGroupsCheckTreeDialog dialog = new UserGroupsCheckTreeDialog(groupOptions);
+ dialog.setTitle("Select Groups to Email");
+ if (dialog.open() == 0) {
+
+ Set<String> emails = new HashSet<String>();
+ for (Artifact artifact : dialog.getSelection()) {
+ if (artifact.getArtifactTypeName().equals("Universal Group")) {
+ for (Artifact userArt : artifact.getRelatedArtifacts(CoreRelationEnumeration.UNIVERSAL_GROUPING__MEMBERS)) {
+ if (userArt instanceof User) {
+ emails.add(((User) userArt).getEmail());
+ }
+ }
+ } else if (artifact.getArtifactTypeName().equals("User Group")) {
+ for (User user : artifact.getRelatedArtifacts(CoreRelationEnumeration.Users_User, User.class)) {
+ emails.add(user.getEmail());
+ }
+ }
+ }
+ if (emails.size() == 0) {
+ AWorkbench.popup("Error", "No emails configured.");
+ return;
+ }
+ Program.launch("mailto:" + org.eclipse.osee.framework.jdk.core.util.Collections.toString(";", emails));
+ AWorkbench.popup("Complete", "Configured emails openened in local email client.");
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/EmailableJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/EmailableJob.java
new file mode 100644
index 00000000000..a893c560870
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/EmailableJob.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OseeEmail.BodyType;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class EmailableJob extends Job {
+
+ private Collection<User> notifyUsers = new HashSet<User>();
+ private Collection<String> emailAddresses = new ArrayList<String>();
+
+ /**
+ * @param name
+ */
+ public EmailableJob(String name) {
+ super(name);
+ }
+
+ /**
+ * Called by the extending job that the job is complete
+ *
+ * @param htmlBody
+ */
+ protected void notifyOfCompletion(String subject, String htmlBody) {
+ if (notifyUsers.size() > 0) {
+ try {
+ Set<String> emails = new HashSet<String>();
+ for (User user : notifyUsers)
+ emails.add(user.getEmail());
+ emails.addAll(emailAddresses);
+ OseeEmail emailMessage =
+ new OseeEmail(emails, UserManager.getUser().getEmail(),
+ UserManager.getUser().getEmail(), subject, htmlBody, BodyType.Html);
+ emailMessage.send();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, "Your Email Message could not be sent.", ex, true);
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ return null;
+ }
+
+ public Collection<User> getNotifyUsers() {
+ return notifyUsers;
+ }
+
+ public void setNotifyUsers(Collection<User> notifyUsers) {
+ this.notifyUsers = notifyUsers;
+ }
+
+ public void setNotifyEmail(Collection<String> emailAddresses) {
+ this.emailAddresses = emailAddresses;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HierarchicalReportDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HierarchicalReportDialog.java
new file mode 100644
index 00000000000..30de65e34bf
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HierarchicalReportDialog.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.SelectionDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class HierarchicalReportDialog extends SelectionDialog {
+
+ XCheckBox showAttributesCheck = new XCheckBox("Include Attributes");
+ XCheckBox recurseChildrenCheck = new XCheckBox("Recurse Children");
+ boolean recurseChildren = true;
+
+ public HierarchicalReportDialog(Shell parent) {
+ super(parent);
+ setTitle("Heirarchical Report");
+ setMessage(String.format("Select Reporting Options"));
+ }
+
+ @Override
+ protected Control createDialogArea(Composite container) {
+
+ Composite comp = new Composite(container, SWT.NONE);
+ comp.setLayout(new GridLayout(2, false));
+ comp.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ recurseChildrenCheck.createWidgets(comp, 2);
+ recurseChildrenCheck.set(recurseChildren);
+ recurseChildrenCheck.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ recurseChildren = recurseChildrenCheck.isSelected();
+ };
+ });
+
+ return container;
+ }
+
+ public boolean isRecurseChildren() {
+ return recurseChildren;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HtmlExportTable.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HtmlExportTable.java
new file mode 100644
index 00000000000..71662cef3f1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HtmlExportTable.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.io.File;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class HtmlExportTable {
+
+ private static String elementTags[] = new String[] {"th", "td"};
+ private final String title;
+ private final String html;
+ private final boolean openInSystem;
+ private final boolean popupConfirm;
+
+ /**
+ * Given html and title, export embedded table into csv file and open in system editor
+ *
+ * @param shell used to request where to save file
+ * @param title for the top of the exported file
+ * @param html html that contains table - only first table will be exported
+ * @param openInSystem true if desire to open resulting file in operating system editor upon completion
+ */
+ public HtmlExportTable(String title, String html, boolean openInSystem) {
+ this(title, html, openInSystem, true);
+ }
+
+ public HtmlExportTable(String title, String html, boolean openInSystem, boolean popupConfirm) {
+ super();
+ this.title = title;
+ this.html = html;
+ this.openInSystem = openInSystem;
+ this.popupConfirm = popupConfirm;
+ }
+
+ public Result export() {
+ if (!popupConfirm || (popupConfirm && MessageDialog.openConfirm(Display.getCurrent().getActiveShell(),
+ "Export Table", "Export Table to CSV?"))) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(title + "\n");
+ String htmlStr = AHTML.htmlToText(html);
+ Matcher m =
+ Pattern.compile("<table.*?</table>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher(
+ htmlStr);
+ if (m.find()) {
+ String csv = m.group();
+ Matcher rowM =
+ Pattern.compile("<tr.*?>(.*?)</tr>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher(
+ csv);
+ while (rowM.find()) {
+ String row = rowM.group(1);
+ row = row.replaceAll("[\n\r]*", "");
+ // Handle all the headers
+ for (String tag : elementTags) {
+ Matcher thM =
+ Pattern.compile("<" + tag + ".*?>(.*?)</" + tag + ">",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE).matcher(row);
+ String csvRow = "";
+ while (thM.find()) {
+ csvRow += "\"" + removeLeadTrailSpaces(thM.group(1)) + "\",";
+ }
+ if (!csvRow.equals("")) {
+ csvRow = csvRow.replaceFirst(",$", "\n");
+ sb.append(csvRow);
+ }
+ }
+ }
+ String path = "";
+ if (popupConfirm) {
+ FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(), SWT.SAVE | SWT.SINGLE);
+ dialog.setFilterExtensions(new String[] {"*.csv"});
+ dialog.setFilterPath(System.getProperty("user.home"));
+ dialog.setFileName("table.csv");
+ path = dialog.open();
+ } else
+ path = System.getProperty("user.home") + File.separator + "table.csv";
+
+ if (path != null) {
+ File file = new File(path);
+ AFile.writeFile(file, sb.toString());
+ if (openInSystem) Program.launch(file.getAbsolutePath());
+ return Result.TrueResult;
+ }
+ } else {
+ AWorkbench.popup("ERROR", "Can't find table in results.\n\nNothing to export");
+ }
+ }
+ return Result.FalseResult;
+ }
+
+ private String removeLeadTrailSpaces(String inStr) {
+ String str = inStr;
+ str = str.replaceAll("^ *", "");
+ str = str.replaceAll(" *$", "");
+ str = str.replaceAll("\"", "'");
+ str = str.replaceAll("\n", " ");
+ return str;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HtmlReportJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HtmlReportJob.java
new file mode 100644
index 00000000000..064957de07e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/HtmlReportJob.java
@@ -0,0 +1,155 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.logging.Level;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.ui.plugin.util.AIFile;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.render.FileSystemRenderer;
+import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class HtmlReportJob extends Job {
+ private final CoreRelationEnumeration side;
+ private boolean recurseChildren;
+ private final String title;
+ private final Collection<Artifact> artifacts;
+ private Collection<String> onlyAttributeNames;
+ private IProgressMonitor monitor;
+
+ /**
+ * @throws TransformerFactoryConfigurationError
+ * @throws IOException
+ * @throws TransformerConfigurationException
+ */
+ public HtmlReportJob(String title, Collection<Artifact> artifacts, CoreRelationEnumeration side) throws TransformerConfigurationException, IOException, TransformerFactoryConfigurationError {
+ super(title);
+ this.title = title;
+ this.artifacts = artifacts;
+ this.side = side;
+ }
+
+ public HtmlReportJob(String title, Artifact artifact, CoreRelationEnumeration side) throws TransformerConfigurationException, IOException, TransformerFactoryConfigurationError {
+ this(title, new ArrayList<Artifact>(), side);
+ artifacts.add(artifact);
+ }
+
+ public IStatus run(IProgressMonitor monitor) {
+ this.monitor = monitor;
+
+ monitor.beginTask("", IProgressMonitor.UNKNOWN);
+ try {
+ final String html = generateHtml(title);
+
+ if (!monitor.isCanceled()) {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+
+ IFile workingFile;
+ try {
+ workingFile =
+ FileSystemRenderer.ensureRenderFolderExists(PresentationType.PREVIEW).getFile(
+ GUID.generateGuidStr() + ".html");
+ AIFile.writeToFile(workingFile, html);
+ Program.launch(workingFile.getLocation().toString());
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+ } catch (OseeCoreException ex) {
+ return new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, -1, ex.toString(), ex);
+ }
+ monitor.done();
+ return Status.OK_STATUS;
+ }
+
+ public String generateHtml(String title) throws OseeCoreException {
+ StringBuilder sb = new StringBuilder();
+ sb.append(AHTML.heading(3, title));
+ sb.append(AHTML.beginSimpleTable(0, 100));
+ int x = 1;
+ for (Artifact artifact : artifacts) {
+ monitor.setTaskName(String.format("Processing %s/%s", x + "", artifacts.size() + ""));
+ sb.append(AHTML.addSimpleTableRow(processArtifact(artifact, "" + x++, side, recurseChildren,
+ onlyAttributeNames)));
+ }
+ sb.append(AHTML.endSimpleTable());
+ return AHTML.titledPage(title, sb.toString());
+ }
+
+ public String processArtifact(Artifact art, String paraNum, CoreRelationEnumeration side, boolean recurseChildren, Collection<String> onlyAttributeNames) throws OseeCoreException {
+ if (monitor.isCanceled()) {
+ return "";
+ }
+
+ monitor.subTask(art.getDescriptiveName());
+ StringBuilder sb = new StringBuilder();
+ sb.append(AHTML.beginSimpleTable(0, 100));
+ sb.append(AHTML.addSimpleTableRow(String.format("%s %s", paraNum + "", AHTML.bold(art.getDescriptiveName()))));
+ sb.append(AHTML.addSimpleTableRow(processAttributes(art, recurseChildren, onlyAttributeNames)));
+ int x = 1;
+ if (recurseChildren) for (Artifact child : art.getRelatedArtifacts(side)) {
+ sb.append(AHTML.addSimpleTableRow(processArtifact(child, paraNum + "." + x++, side, recurseChildren,
+ onlyAttributeNames)));
+ }
+ sb.append(AHTML.endSimpleTable());
+ return sb.toString();
+ }
+
+ public String processAttributes(Artifact artifact, boolean recurseChildren, Collection<String> onlyAttributeNames) throws OseeCoreException {
+ StringBuilder sb = new StringBuilder();
+ sb.append(AHTML.beginMultiColumnTable(90));
+ sb.append(AHTML.addRowSpanMultiColumnTable(RendererManager.renderToHtml(artifact), 2));
+ sb.append(AHTML.endMultiColumnTable());
+ return sb.toString();
+ }
+
+ public boolean isRecurseChildren() {
+ return recurseChildren;
+ }
+
+ public void setRecurseChildren(boolean recurseChildren) {
+ this.recurseChildren = recurseChildren;
+ }
+
+ public Collection<String> getOnlyAttributeNames() {
+ return onlyAttributeNames;
+ }
+
+ public void setOnlyAttributeNames(Collection<String> onlyAttributeNames) {
+ this.onlyAttributeNames = onlyAttributeNames;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/IDefineNavigateItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/IDefineNavigateItem.java
new file mode 100644
index 00000000000..3c4e8360574
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/IDefineNavigateItem.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.List;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IDefineNavigateItem {
+
+ public List<XNavigateItem> getNavigateItems();
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/IOseeDictionary.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/IOseeDictionary.java
new file mode 100644
index 00000000000..79bac9728a1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/IOseeDictionary.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IOseeDictionary {
+
+ public boolean isWord(String word);
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ImageCapture.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ImageCapture.java
new file mode 100644
index 00000000000..65faefb9bc4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ImageCapture.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.ImageDialog;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ImageCapture {
+
+ final Image image;
+
+ public ImageCapture(Control control) {
+ GC gc = new GC(control.getDisplay());
+ Rectangle bounds = control.getBounds();
+ Point topLeft = control.toDisplay(0, 0);
+ image = new Image(Display.getCurrent(), bounds.width, bounds.height);
+ gc.copyArea(image, topLeft.x, topLeft.y);
+ gc.dispose();
+ }
+
+ public Image getImage() {
+ return image;
+ }
+
+ public void popupDialog() {
+ ImageDialog diag = new ImageDialog(image, Display.getCurrent().getActiveShell());
+ diag.open();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/KeyEventExample.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/KeyEventExample.java
new file mode 100644
index 00000000000..e63dda63217
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/KeyEventExample.java
@@ -0,0 +1,236 @@
+/*
+ * Created on Sep 10, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.util;
+
+/**
+ * @author Donald G. Dunne
+ *
+ */
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/*
+ * Control example snippet: print key state, code and character
+ *
+ * For a list of all SWT example snippets see
+ * http://www.eclipse.org/swt/snippets/
+ *
+ * @since 3.0
+ */
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+
+public class KeyEventExample {
+
+ static String stateMask(int stateMask) {
+ String string = "";
+ if ((stateMask & SWT.CTRL) != 0) string += " CTRL";
+ if ((stateMask & SWT.ALT) != 0) string += " ALT";
+ if ((stateMask & SWT.SHIFT) != 0) string += " SHIFT";
+ if ((stateMask & SWT.COMMAND) != 0) string += " COMMAND";
+ return string;
+ }
+
+ static String character(char character) {
+ switch (character) {
+ case 0:
+ return "'\\0'";
+ case SWT.BS:
+ return "'\\b'";
+ case SWT.CR:
+ return "'\\r'";
+ case SWT.DEL:
+ return "DEL";
+ case SWT.ESC:
+ return "ESC";
+ case SWT.LF:
+ return "'\\n'";
+ case SWT.TAB:
+ return "'\\t'";
+ }
+ return "'" + character + "'";
+ }
+
+ static String keyCode(int keyCode) {
+ switch (keyCode) {
+
+ /* Keyboard and Mouse Masks */
+ case SWT.ALT:
+ return "ALT";
+ case SWT.SHIFT:
+ return "SHIFT";
+ case SWT.CONTROL:
+ return "CONTROL";
+ case SWT.COMMAND:
+ return "COMMAND";
+
+ /* Non-Numeric Keypad Keys */
+ case SWT.ARROW_UP:
+ return "ARROW_UP";
+ case SWT.ARROW_DOWN:
+ return "ARROW_DOWN";
+ case SWT.ARROW_LEFT:
+ return "ARROW_LEFT";
+ case SWT.ARROW_RIGHT:
+ return "ARROW_RIGHT";
+ case SWT.PAGE_UP:
+ return "PAGE_UP";
+ case SWT.PAGE_DOWN:
+ return "PAGE_DOWN";
+ case SWT.HOME:
+ return "HOME";
+ case SWT.END:
+ return "END";
+ case SWT.INSERT:
+ return "INSERT";
+
+ /* Virtual and Ascii Keys */
+ case SWT.BS:
+ return "BS";
+ case SWT.CR:
+ return "CR";
+ case SWT.DEL:
+ return "DEL";
+ case SWT.ESC:
+ return "ESC";
+ case SWT.LF:
+ return "LF";
+ case SWT.TAB:
+ return "TAB";
+
+ /* Functions Keys */
+ case SWT.F1:
+ return "F1";
+ case SWT.F2:
+ return "F2";
+ case SWT.F3:
+ return "F3";
+ case SWT.F4:
+ return "F4";
+ case SWT.F5:
+ return "F5";
+ case SWT.F6:
+ return "F6";
+ case SWT.F7:
+ return "F7";
+ case SWT.F8:
+ return "F8";
+ case SWT.F9:
+ return "F9";
+ case SWT.F10:
+ return "F10";
+ case SWT.F11:
+ return "F11";
+ case SWT.F12:
+ return "F12";
+ case SWT.F13:
+ return "F13";
+ case SWT.F14:
+ return "F14";
+ case SWT.F15:
+ return "F15";
+
+ /* Numeric Keypad Keys */
+ case SWT.KEYPAD_ADD:
+ return "KEYPAD_ADD";
+ case SWT.KEYPAD_SUBTRACT:
+ return "KEYPAD_SUBTRACT";
+ case SWT.KEYPAD_MULTIPLY:
+ return "KEYPAD_MULTIPLY";
+ case SWT.KEYPAD_DIVIDE:
+ return "KEYPAD_DIVIDE";
+ case SWT.KEYPAD_DECIMAL:
+ return "KEYPAD_DECIMAL";
+ case SWT.KEYPAD_CR:
+ return "KEYPAD_CR";
+ case SWT.KEYPAD_0:
+ return "KEYPAD_0";
+ case SWT.KEYPAD_1:
+ return "KEYPAD_1";
+ case SWT.KEYPAD_2:
+ return "KEYPAD_2";
+ case SWT.KEYPAD_3:
+ return "KEYPAD_3";
+ case SWT.KEYPAD_4:
+ return "KEYPAD_4";
+ case SWT.KEYPAD_5:
+ return "KEYPAD_5";
+ case SWT.KEYPAD_6:
+ return "KEYPAD_6";
+ case SWT.KEYPAD_7:
+ return "KEYPAD_7";
+ case SWT.KEYPAD_8:
+ return "KEYPAD_8";
+ case SWT.KEYPAD_9:
+ return "KEYPAD_9";
+ case SWT.KEYPAD_EQUAL:
+ return "KEYPAD_EQUAL";
+
+ /* Other keys */
+ case SWT.CAPS_LOCK:
+ return "CAPS_LOCK";
+ case SWT.NUM_LOCK:
+ return "NUM_LOCK";
+ case SWT.SCROLL_LOCK:
+ return "SCROLL_LOCK";
+ case SWT.PAUSE:
+ return "PAUSE";
+ case SWT.BREAK:
+ return "BREAK";
+ case SWT.PRINT_SCREEN:
+ return "PRINT_SCREEN";
+ case SWT.HELP:
+ return "HELP";
+ }
+ return character((char) keyCode);
+ }
+
+ public static void printEvent(Event e) {
+ String string = e.type == SWT.KeyDown ? "DOWN:" : "UP :";
+ string += " stateMask=0x" + Integer.toHexString(e.stateMask) + stateMask(e.stateMask) + ",";
+ string += " keyCode=0x" + Integer.toHexString(e.keyCode) + " " + keyCode(e.keyCode) + ",";
+ string += " character=0x" + Integer.toHexString(e.character) + " " + character(e.character);
+ System.out.println(string);
+ }
+
+ public static void printEvent(String prefix, KeyEvent e) {
+ String string = prefix;
+ string += " stateMask=0x" + Integer.toHexString(e.stateMask) + stateMask(e.stateMask) + ",";
+ string += " keyCode=0x" + Integer.toHexString(e.keyCode) + " " + keyCode(e.keyCode) + ",";
+ string += " character=0x" + Integer.toHexString(e.character) + " " + character(e.character);
+ System.out.println(string);
+ }
+
+ public static void main(String[] args) {
+ Display display = new Display();
+ Shell shell = new Shell(display);
+ Listener listener = new Listener() {
+ public void handleEvent(Event e) {
+ printEvent(e);
+ }
+ };
+ shell.addListener(SWT.KeyDown, listener);
+ shell.addListener(SWT.KeyUp, listener);
+ shell.setSize(200, 200);
+ shell.open();
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch()) display.sleep();
+ }
+ display.dispose();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OSEELog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OSEELog.java
new file mode 100644
index 00000000000..d4377c67892
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OSEELog.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.logging.Level;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class OSEELog {
+
+ public static void logException(Class<?> clazz, String message, Exception ex, boolean popup) {
+ AWorkbench.popup("ERROR", message);
+ OseeLog.log(clazz, Level.SEVERE, message, ex);
+ }
+
+ public static void logSevere(Class<?> clazz, String message, boolean popup) {
+ AWorkbench.popup("ERROR", message);
+ OseeLog.log(clazz, Level.SEVERE, message);
+ }
+
+ public static void logException(Class<?> clazz, Exception ex, boolean popup) {
+ String message = ex.getLocalizedMessage() == null ? ex.getClass().getName() : ex.getLocalizedMessage();
+ logException(clazz, message, ex, popup);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeDictionary.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeDictionary.java
new file mode 100644
index 00000000000..6c63b078b9e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeDictionary.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.swt.styledText.IDictionary;
+import org.osgi.framework.Bundle;
+
+/**
+ * Dictionary provided by OSEE that includes all dictionarys through the OseeDictionary extension point.
+ *
+ * @author Donald G. Dunne
+ */
+public class OseeDictionary implements IDictionary {
+
+ private static Set<IOseeDictionary> dictionaries;
+ private static OseeDictionary instance = new OseeDictionary();
+
+ public static OseeDictionary getInstance() {
+ return instance;
+ }
+
+ private OseeDictionary() {
+ }
+
+ public boolean isWord(String word) {
+ // System.out.println("Lookup => \""+word+"\"");
+ if (dictionaries == null) {
+ getIDictionaries();
+ }
+ String cleanWord = getCleanWord(word);
+ if (cleanWord.equals("") || cleanWord.length() == 1) return true;
+ for (IOseeDictionary dict : dictionaries) {
+ if (dict.isWord(cleanWord)) return true;
+ }
+ return false;
+ }
+
+ // Remove any junky characters and check for acronyms and other known
+ // non-word type stuff. Return valid word to check in dictionary OR
+ // "" if there is no word in this string
+ // eg now) = now
+ // a..b = ""
+ // SQA = ""
+ // NEon = ""
+ private static Pattern pattern = Pattern.compile("^[a-zA-Z]{1}[a-z]+$");
+
+ private String getCleanWord(String w) {
+ // Single character is a valid word
+ if (w.length() == 1) return w;
+
+ // First, remove any non-word characters before and after string
+ // eg. end. (now) it!
+ w = w.replaceAll("^\\W+", "");
+ w = w.replaceAll("\\W+$", "");
+ w = w.replaceAll("'s$", ""); // Get rid of 's at end of word
+
+ // If any non-alphabetic characters still in string, not a word
+ // If string not either all lowercase or first letter capitalized, not a
+ // word
+ Matcher m = pattern.matcher(w);
+ if (!m.find()) return "";
+ return w.toLowerCase();
+ }
+
+ private static void getIDictionaries() {
+ dictionaries = new HashSet<IOseeDictionary>();
+ if (!Platform.isRunning()) return;
+ IExtensionPoint point = null;
+ try {
+ point =
+ Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.framework.ui.skynet.OseeDictionary");
+ } catch (NullPointerException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, "Can't access OseeDictionary extension point", ex);
+ return;
+ }
+ if (point == null) {
+ OSEELog.logSevere(SkynetGuiPlugin.class, "Can't access OseeDictionary extension point", true);
+ return;
+ }
+ IExtension[] extensions = point.getExtensions();
+ for (IExtension extension : extensions) {
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+ String classname = null;
+ String bundleName = null;
+ for (IConfigurationElement el : elements) {
+ if (el.getName().equals("OseeDictionary")) {
+ classname = el.getAttribute("classname");
+ bundleName = el.getContributor().getName();
+ if (classname != null && bundleName != null) {
+ Bundle bundle = Platform.getBundle(bundleName);
+ try {
+ Class<?> taskClass = bundle.loadClass(classname);
+ Object obj = taskClass.newInstance();
+ dictionaries.add((IOseeDictionary) obj);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, "Error loading OseeDictionary extension", ex, true);
+ }
+ }
+
+ }
+ }
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeEmail.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeEmail.java
new file mode 100644
index 00000000000..76805fff459
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeEmail.java
@@ -0,0 +1,383 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Properties;
+import java.util.logging.Level;
+import javax.activation.CommandMap;
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
+import javax.activation.FileDataSource;
+import javax.activation.MailcapCommandMap;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.AddressException;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.jdk.core.util.StringDataSource;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.ExportClassLoader;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Michael A. Winston
+ * @author Donald G. Dunne
+ */
+public class OseeEmail extends MimeMessage {
+ protected static final String emailType = "mail.smtp.host";
+ protected static final String HTMLHead = "<html><body>\n";
+ protected static final String HTMLEnd = "</body></html>\n";
+
+ public static final String plainText = "text/plain";
+ public static final String HTMLText = "text/html";
+
+ private String body = null;
+ private String bodyType = null;
+ private final Multipart mainMessage;
+ public static enum BodyType {
+ Html, Text
+ };
+
+ /**
+ * Default constructor
+ */
+ public OseeEmail() {
+ super(getSession());
+ mainMessage = new MimeMultipart();
+ }
+
+ /**
+ * Constructs an AEmail with the given arguments
+ *
+ * @param toAddresses - a list of valid addresses to send the message TO
+ * @param fromAddress - the sender of the message
+ * @param replyToAddress - a valid address of who the message should reply to
+ * @param subject - the subject of the message
+ * @param textBody - the plain text of the body
+ */
+ public OseeEmail(Collection<String> toAddresses, String fromAddress, String replyToAddress, String subject, String body, BodyType bodyType) {
+ this();
+ try {
+ setRecipients(toAddresses.toArray(new String[toAddresses.size()]));
+ setFrom(fromAddress);
+ setSubject(subject);
+ setReplyTo(replyToAddress);
+
+ if (bodyType == BodyType.Text) {
+ setBody(body);
+ } else if (bodyType == BodyType.Html) {
+ setHTMLBody(body);
+ } else
+ throw new IllegalArgumentException("Unhandled body type " + bodyType);
+
+ } catch (MessagingException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ /**
+ * Constructs an AEmail with the given arguments
+ *
+ * @param fromToReplyEmail - recipient email, from email and replyTo email address
+ * @param subject - the subject of the message
+ * @param body - the text/html of the body
+ * @param bodyType - Html or Text
+ */
+ public OseeEmail(String fromToReplyEmail, String subject, String body, BodyType bodyType) {
+ this(Arrays.asList(fromToReplyEmail), fromToReplyEmail, fromToReplyEmail, subject, body, bodyType);
+ }
+
+ /**
+ * Adds a single address to the recipient list
+ *
+ * @param addresses - a valid address to send the message TO
+ * @throws MessagingException
+ */
+ public void addRecipients(String addresses) throws MessagingException {
+ addRecipients(Message.RecipientType.TO, addresses);
+ }
+
+ /**
+ * Adds a list of addresses to the recipient list
+ *
+ * @param addresses - a list of valid addresses to send the message TO
+ * @throws MessagingException
+ */
+ public void addRecipients(String[] addresses) throws MessagingException {
+ addRecipients(Message.RecipientType.TO, addresses);
+ }
+
+ /**
+ * Adds a list of addresses to the corresponding recipient list
+ *
+ * @param type - specifies which field the address should be put in
+ * @param addresses - a list of valid addresses to send the message
+ * @throws MessagingException
+ */
+ public void addRecipients(Message.RecipientType type, String[] addresses) throws MessagingException {
+ if (addresses != null) {
+
+ InternetAddress newAddresses[] = new InternetAddress[addresses.length];
+
+ for (int i = 0; i < addresses.length; i++) {
+ newAddresses[i] = new InternetAddress(addresses[i]);
+ }
+
+ addRecipients(type, newAddresses);
+ }
+ }
+
+ /**
+ * Sets the recipient TO field
+ *
+ * @param addresses - a valid address to send the message TO
+ * @throws MessagingException
+ */
+ public void setRecipients(String addresses) throws MessagingException {
+ setRecipients(Message.RecipientType.TO, addresses);
+ }
+
+ /**
+ * Sets a list of addresses to the recipient list
+ *
+ * @param addresses - a list of valid addresses to send the message TO
+ * @throws MessagingException
+ */
+ public void setRecipients(String[] addresses) throws MessagingException {
+ setRecipients(Message.RecipientType.TO, addresses);
+ }
+
+ /**
+ * Sets a list of addresses to the corresponding recipient list
+ *
+ * @param type - specifies which field the address should be put in
+ * @param addresses - a list of valid addresses to send the message
+ * @throws MessagingException
+ */
+ public void setRecipients(Message.RecipientType type, String[] addresses) throws MessagingException {
+ if (addresses != null) {
+
+ InternetAddress newAddresses[] = new InternetAddress[addresses.length];
+
+ for (int i = 0; i < addresses.length; i++) {
+ newAddresses[i] = new InternetAddress(addresses[i]);
+ }
+
+ setRecipients(type, newAddresses);
+ }
+ }
+
+ /**
+ * Sets the from address
+ *
+ * @param address - the user name the message is from
+ * @throws AddressException
+ * @throws MessagingException
+ */
+ // Set all the From Values
+ public void setFrom(String address) throws AddressException, MessagingException {
+ setFrom(new InternetAddress(address));
+ }
+
+ /**
+ * Sets the address to reply to (if different than the from addresss)
+ *
+ * @param address - a valid address to reply to
+ * @throws MessagingException
+ */
+ public void setReplyTo(String address) throws MessagingException {
+ InternetAddress replyAddresses[] = new InternetAddress[1];
+ replyAddresses[0] = new InternetAddress(address);
+ setReplyTo(replyAddresses);
+ }
+
+ /**
+ * Gets the current Body Type of the message. NULL if one is not selected yet.
+ *
+ * @return A String representation of the current Body Type
+ */
+ // Set the Body
+ public String getBodyType() {
+ return bodyType;
+ }
+
+ /**
+ * Sets the text in the body of the message.
+ *
+ * @param text - the text to for the body of the message
+ */
+ public void setBody(String text) {
+ body = text;
+ bodyType = plainText;
+ }
+
+ /**
+ * Adds text to the body if the Body Type is "plain". If the body doesn't exist yet, then calls setBody.
+ *
+ * @param text - the text to add to the body
+ */
+ public void addBody(String text) {
+ if (bodyType == null)
+ setBody(text);
+ else if (bodyType.equals(plainText)) body += text;
+ }
+
+ /**
+ * Sets the text in the body of the HTML message. This will already add the &lthtml&gt&ltbody&gt and
+ * &lt/body&gt&lt/html&gt tags.
+ *
+ * @param htmlText - the text for the body of the HTML message
+ */
+ public void setHTMLBody(String htmlText) {
+ bodyType = HTMLText;
+ body = HTMLHead + htmlText;
+ }
+
+ /**
+ * Adds text to the HTML body if the Body Type is "html". If the body doesn't exist yet, then calls setHTMLBody.
+ *
+ * @param htmlText - the text to add to the HTML body
+ */
+ public void addHTMLBody(String htmlText) {
+ if (bodyType == null)
+ setHTMLBody(htmlText);
+ else if (bodyType.equals(HTMLText)) body += htmlText;
+
+ }
+
+ /**
+ * Sends the message.
+ */
+ public void send() {
+ SendThread sendThread = new SendThread(this);
+ sendThread.start();
+ }
+
+ private class SendThread extends Thread {
+
+ private final OseeEmail email;
+
+ public SendThread(OseeEmail email) {
+ this.email = email;
+ }
+
+ @Override
+ public void run() {
+ super.run();
+ email.sendLocalThread();
+ }
+ }
+
+ public void sendLocalThread() {
+ MimeBodyPart messageBodyPart = new MimeBodyPart();
+ ClassLoader original = Thread.currentThread().getContextClassLoader();
+ try {
+
+ MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
+ mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
+ mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
+ mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
+ mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
+ mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
+ CommandMap.setDefaultCommandMap(mc);
+
+ // Set class loader so can find the mail handlers
+ Thread.currentThread().setContextClassLoader(
+ new ExportClassLoader(SkynetGuiPlugin.getInstance().getPackageAdmin()));
+ if (bodyType == null) {
+ bodyType = plainText;
+ body = "";
+ } else if (bodyType.equals(HTMLText)) {
+ body += HTMLEnd;
+ }
+ messageBodyPart.setContent(body, bodyType);
+ mainMessage.addBodyPart(messageBodyPart, 0);
+ setContent(mainMessage);
+ Transport.send(this);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ } finally {
+ Thread.currentThread().setContextClassLoader(original);
+ }
+ }
+
+ private static String getMailServer() {
+ IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
+
+ if (extensionRegistry == null) {
+ throw new IllegalStateException("The extension registry is unavailable");
+ }
+
+ String extensionPointId = "org.eclipse.osee.framework.jdk.core.DefaultMailServer";
+ IExtensionPoint point = extensionRegistry.getExtensionPoint(extensionPointId);
+ if (point == null) {
+ throw new IllegalArgumentException("The extension point " + extensionPointId + " does not exist");
+ }
+
+ for (IExtension extension : point.getExtensions()) {
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+
+ for (IConfigurationElement element : elements) {
+ return element.getAttribute("serverAddress");
+ }
+ }
+ throw new IllegalStateException(
+ "No mail server defined. Use the extension point " + extensionPointId + " to define one.");
+ }
+
+ /**
+ * Gets the current session
+ *
+ * @return the Current SMTP Session
+ */
+ private static Session getSession() {
+ Properties props = System.getProperties();
+ props.put(emailType, getMailServer());
+
+ return Session.getDefaultInstance(props, null);
+ }
+
+ /**
+ * Adds an attachment to an email
+ *
+ * @param source
+ * @param attachmentName
+ * @throws MessagingException
+ */
+ public void addAttachment(DataSource source, String attachmentName) throws MessagingException {
+ MimeBodyPart messageBodyPart = new MimeBodyPart();
+ messageBodyPart.setDataHandler(new DataHandler(source));
+ messageBodyPart.setFileName(attachmentName);
+ mainMessage.addBodyPart(messageBodyPart);
+ }
+
+ public void addAttachment(File file) throws MessagingException {
+ addAttachment(new FileDataSource(file), file.getName());
+ }
+
+ public void addAttachment(String contents, String attachmentName) throws MessagingException {
+ addAttachment(new StringDataSource(contents, attachmentName), attachmentName);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeMainDictionary.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeMainDictionary.java
new file mode 100644
index 00000000000..b22cd3f8dc8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/OseeMainDictionary.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class OseeMainDictionary implements IOseeDictionary {
+
+ Set<String> dict;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.util.IOseeDictionary#isWord(java.lang.String)
+ */
+ public boolean isWord(String word) {
+ if (dict == null) loadDictionary();
+ boolean contains = dict.contains(word);
+ return contains;
+ }
+
+ private void loadDictionary() {
+ dict = new HashSet<String>();
+ String line;
+ InputStream is = null;
+ BufferedReader br = null;
+
+ // open OSEE english dictionary
+ try {
+ is = SkynetGuiPlugin.getInstance().getBundle().getEntry("support/spellCheck/AllWords.txt").openStream();
+ br = new BufferedReader(new InputStreamReader(is));
+ while ((line = br.readLine()) != null) {
+ line.replaceAll("[\t\r\n ]+$", "");
+ dict.add(line);
+ }
+ is.close();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ShowAttributeAction.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ShowAttributeAction.java
new file mode 100644
index 00000000000..945220025c6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/ShowAttributeAction.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.Collection;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ShowAttributeAction extends Action {
+ private AttributeCheckListDialog attributeDialog;
+ private final StructuredViewer viewer;
+ private String preferenceKey;
+ private ViewPart viewPart;
+
+ public ShowAttributeAction(StructuredViewer viewer, String preferenceKey) {
+ super("Show Attributes", SkynetGuiPlugin.getInstance().getImageDescriptor("filter.gif"));
+ setToolTipText("Show Attributes");
+ this.viewer = viewer;
+ this.preferenceKey = preferenceKey;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ int result = attributeDialog.open();
+ if (result == 0) {
+ viewer.refresh(true);
+ }
+ }
+
+ public void addToView(ViewPart viewPart) {
+ this.viewPart = viewPart;
+ IMenuManager toolbarManager = viewPart.getViewSite().getActionBars().getMenuManager();
+ toolbarManager.add(this);
+ }
+
+ public String getSelectedAttributeData(Artifact artifact) throws Exception {
+ return attributeDialog.getSelectedAttributeData(artifact);
+ }
+
+ public boolean noneSelected() {
+ return attributeDialog.noneSelected();
+ }
+
+ public Collection<AttributeType> getSelectedAttributes() {
+ return attributeDialog.getSelectedAttributes();
+ }
+
+ public void setValidAttributeTypes(Collection<AttributeType> attrTypes) {
+ attributeDialog = new AttributeCheckListDialog(viewPart.getSite().getShell(), attrTypes, preferenceKey);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetDragAndDrop.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetDragAndDrop.java
new file mode 100644
index 00000000000..01c8a6005f8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetDragAndDrop.java
@@ -0,0 +1,202 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactData;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTransfer;
+import org.eclipse.osee.framework.ui.skynet.HTMLTransferFormatter;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSource;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.DropTargetAdapter;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.HTMLTransfer;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public abstract class SkynetDragAndDrop {
+ private String viewId;
+ private DragSource source;
+ private DropTarget target;
+
+ public SkynetDragAndDrop(Control dragAndDropControl, String viewId) {
+ this(dragAndDropControl, dragAndDropControl, viewId);
+ }
+
+ /**
+ * Caller may optionally pass null for either the dragSource or dropTarget when both are not needed
+ *
+ * @param dragSource
+ * @param dropTarget
+ * @param viewId
+ */
+ public SkynetDragAndDrop(Control dragSource, Control dropTarget, String viewId) {
+ this.viewId = viewId;
+ if (dragSource != null) {
+ source = new DragSource(dragSource, DND.DROP_MOVE | DND.DROP_COPY);
+ setupDragSupport();
+ }
+ if (dropTarget != null) {
+ target = new DropTarget(dropTarget, DND.DROP_MOVE | DND.DROP_COPY);
+ setupDropSupport();
+ }
+ }
+
+ private void setupDragSupport() {
+ source.setTransfer(new Transfer[] {HTMLTransfer.getInstance(), ArtifactTransfer.getInstance(),
+ TextTransfer.getInstance()});
+ source.addDragListener(new DragSourceListener() {
+
+ public void dragFinished(DragSourceEvent event) {
+ }
+
+ public void dragSetData(DragSourceEvent event) {
+ performDataTransafer(event);
+ }
+
+ public void dragStart(DragSourceEvent event) {
+ }
+ });
+ }
+
+ private void performDataTransafer(DragSourceEvent event) {
+ if (HTMLTransfer.getInstance().isSupportedType(event.dataType)) {
+ htmlTransferDragSetData(event);
+ } else if (ArtifactTransfer.getInstance().isSupportedType(event.dataType)) {
+ artifactTransferDragSetData(event);
+ } else if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
+ textTransferDragSetData(event);
+ }
+ }
+
+ private void setupDropSupport() {
+ target.setTransfer(new Transfer[] {FileTransfer.getInstance(), TextTransfer.getInstance(),
+ ArtifactTransfer.getInstance()});
+ target.addDropListener(new DropTargetAdapter() {
+
+ public void dragOperationChanged(DropTargetEvent event) {
+ operationChanged(event);
+ }
+
+ public void drop(DropTargetEvent event) {
+ performDrop(event);
+ }
+
+ public void dragOver(DropTargetEvent event) {
+ performDragOver(event);
+ }
+
+ public void dropAccept(DropTargetEvent event) {
+ }
+ });
+ }
+
+ public void performDragOver(DropTargetEvent event) {
+ }
+
+ public void artifactTransferDragSetData(DragSourceEvent event) {
+ try {
+ if (getArtifacts() != null && getArtifacts().length > 0) {
+ event.data = new ArtifactData(getArtifacts(), "work", viewId);
+ }
+ } catch (Exception ex) {
+// OSEELog.logException(ChangeReportView.class, ex, true);
+ }
+ }
+
+ public void htmlTransferDragSetData(DragSourceEvent event) {
+ try {
+ if (getArtifacts() != null && getArtifacts().length > 0) {
+ event.data = HTMLTransferFormatter.getHtml(getArtifacts());
+ }
+ } catch (Exception ex) {
+// OSEELog.logException(ChangeReportView.class, ex, true);
+ }
+ }
+
+ public void textTransferDragSetData(DragSourceEvent event) {
+ try {
+ if (getArtifacts() != null && getArtifacts().length > 0) {
+ Artifact[] artifacts = getArtifacts();
+ Collection<String> names = new ArrayList<String>(artifacts.length);
+
+ for (Artifact artifact : artifacts)
+ names.add(artifact.getDescriptiveName());
+
+ event.data = Collections.toString(names, null, ", ", null);
+ }
+ } catch (Exception ex) {
+// OSEELog.logException(ChangeReportView.class, ex, true);
+ }
+ }
+
+ /**
+ * Override this method to supply the base class with artifacts to be used for drag and drop.
+ */
+ public abstract Artifact[] getArtifacts() throws Exception;
+
+ /**
+ * Override this method to implement the drop operation.
+ */
+ public void performDrop(DropTargetEvent event) {
+ if (event.data instanceof ArtifactData) {
+ performArtifactDrop(((ArtifactData) event.data).getArtifacts());
+ } else if (event.data instanceof String[]) {
+ performFileDrop((String[]) event.data);
+ } else if (event.data instanceof String) {
+ performTextDrop((String) event.data);
+ }
+ }
+
+ public void operationChanged(DropTargetEvent event) {
+ }
+
+ /**
+ * override this method and its cousins rather than performDrop in order to have the drop data preprocessed and
+ * passed in the desired form
+ *
+ * @param text
+ */
+ public void performTextDrop(String text) {
+
+ }
+
+ /**
+ * override this method and its cousins rather than performDrop in order to have the drop data preprocessed and
+ * passed in the desired form
+ *
+ * @param dropArtifacts
+ */
+ public void performArtifactDrop(Artifact[] dropArtifacts) {
+
+ }
+
+ /**
+ * override this method and its cousins rather than performDrop in order to have the drop data preprocessed and
+ * passed in the desired form
+ *
+ * @param fileNames
+ */
+ public void performFileDrop(String[] fileNames) {
+
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetGuiDebug.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetGuiDebug.java
new file mode 100644
index 00000000000..b1ba61f9bd4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetGuiDebug.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import org.eclipse.osee.framework.ui.plugin.util.Debug;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SkynetGuiDebug extends Debug {
+
+ protected String getPluginName() {
+ return "SkynetGui";
+ }
+
+ /**
+ * @param debugOn
+ * @param timeStampOn
+ * @param nameSpace
+ */
+ public SkynetGuiDebug(boolean debugOn, boolean timeStampOn, String nameSpace) {
+ super(debugOn, timeStampOn, nameSpace);
+ }
+
+ /**
+ * @param debugOn
+ * @param nameSpace
+ */
+ public SkynetGuiDebug(boolean debugOn, String nameSpace) {
+ super(debugOn, nameSpace);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetSelections.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetSelections.java
new file mode 100644
index 00000000000..6d225a5b775
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetSelections.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.Iterator;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.revision.TransactionData;
+import org.eclipse.osee.framework.ui.swt.ITreeNode;
+
+/**
+ * @author Robert A. Fisher
+ */
+public final class SkynetSelections {
+
+ /*
+ * This is a utility class and should not be instantiated
+ */
+ private SkynetSelections() {
+ }
+
+ public static boolean oneBranchSelected(IStructuredSelection selection) {
+ return selection.size() == 1 && boilDownObject(selection.getFirstElement()) instanceof Branch;
+ }
+
+ public static boolean oneDescendantBranchSelected(IStructuredSelection selection) {
+ Object object = boilDownObject(selection.getFirstElement());
+ return selection.size() == 1 && object instanceof Branch && ((Branch) object).hasParentBranch();
+ }
+
+ public static boolean oneTransactionSelected(IStructuredSelection selection) {
+ return selection.size() == 1 && boilDownObject(selection.getFirstElement()) instanceof TransactionData;
+ }
+
+ public static boolean transactionsSelected(IStructuredSelection selection) {
+ if (!selection.isEmpty()) {
+ Iterator<?> iter = selection.iterator();
+ while (iter.hasNext()) {
+ Object object = iter.next();
+ if (!(boilDownObject(object) instanceof TransactionData)) {
+ return false;
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static boolean twoTransactionsSelectedOnSameBranch(IStructuredSelection selection) throws OseeCoreException {
+ if (selection.size() == 2) {
+ Iterator<?> iter = selection.iterator();
+ Object obj1 = boilDownObject(iter.next());
+ Object obj2 = boilDownObject(iter.next());
+
+ return obj1 instanceof TransactionData && obj2 instanceof TransactionData && ((TransactionData) obj1).getTransactionId().getBranch() == ((TransactionData) obj2).getTransactionId().getBranch();
+ }
+
+ return false;
+ }
+
+ public static Object boilDownObject(Object object) {
+ while (object instanceof ITreeNode) {
+ object = ((ITreeNode) object).getBackingData();
+ }
+
+ return object;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetViews.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetViews.java
new file mode 100644
index 00000000000..8d693d1901c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/SkynetViews.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.osee.framework.core.data.OseeInfo;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class SkynetViews {
+
+ private static final String MEMENTO_SOURCE_GUID = "sourceDbGuid";
+
+ public static boolean isSourceValid(IMemento memento) {
+ boolean result = false;
+ if (memento != null) {
+ String dbId = memento.getString(MEMENTO_SOURCE_GUID);
+ if (Strings.isValid(dbId)) {
+ String currentDbId = null;
+ try {
+ currentDbId = OseeInfo.getValue("osee.db.guid");
+ } catch (OseeDataStoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, "Unable to set memento source db guid");
+ }
+ if (dbId.equals(currentDbId)) {
+ result = true;
+ }
+ }
+ }
+ return result;
+ }
+
+ public static void addDatabaseSourceId(IMemento memento) {
+ if (memento != null) {
+ try {
+ memento.putString(MEMENTO_SOURCE_GUID, OseeInfo.getValue("osee.db.guid"));
+ } catch (OseeDataStoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, "Unable to set memento source db guid");
+ }
+ }
+ }
+
+ public static void closeView(final String viewId, final String secondaryId) {
+ if (Strings.isValid(viewId)) {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ if (workbench != null) {
+ IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+ if (workbenchWindow != null) {
+ IWorkbenchPage workbenchPage = workbenchWindow.getActivePage();
+ if (workbenchPage != null) {
+ workbenchPage.hideView(workbenchPage.findViewReference(viewId, secondaryId));
+ }
+ }
+ }
+ }
+ });
+ }
+ }
+
+ /**
+ * @param memento
+ * @return Returns a collection of <code>DynamicAttributeDescriptor</code> stored in a memento.
+ * @throws OseeDataStoreException
+ */
+ public static List<AttributeType> loadAttrTypesFromPreferenceStore(String preferenceKey, Branch branch) throws OseeCoreException {
+ List<AttributeType> attributeDescriptors = new LinkedList<AttributeType>();
+ Collection<AttributeType> descriptors = TypeValidityManager.getValidAttributeTypes(branch);
+
+ IPreferenceStore preferenceStore = SkynetGuiPlugin.getInstance().getPreferenceStore();
+ for (String attributeType : preferenceStore.getString(preferenceKey).split("\\|")) {
+ for (AttributeType descriptor : descriptors) {
+ if (attributeType.equals(descriptor.getName())) {
+ attributeDescriptors.add(descriptor);
+ break;
+ }
+ }
+ }
+
+ return attributeDescriptors;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/TransactionIdLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/TransactionIdLabelProvider.java
new file mode 100644
index 00000000000..9a7e2c0f34c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/TransactionIdLabelProvider.java
@@ -0,0 +1,27 @@
+/*
+ * Created on Nov 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.util;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionId;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class TransactionIdLabelProvider extends LabelProvider {
+
+ public TransactionIdLabelProvider() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
+ */
+ @Override
+ public String getText(Object element) {
+ return ((TransactionId) element).toString() + " - " + ((TransactionId) element).getComment();
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/backup/BackupBranchesJob.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/backup/BackupBranchesJob.java
new file mode 100644
index 00000000000..ff7605b17b8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/backup/BackupBranchesJob.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util.backup;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osee.framework.jdk.core.util.StringFormat;
+import org.eclipse.osee.framework.jdk.core.util.io.Zip;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.EmailableJob;
+import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class BackupBranchesJob extends EmailableJob {
+
+ public static String JOB_NAME = "Backup OSEE Database";
+ XResultData rd;
+ private final String path;
+ private final Collection<Branch> branches;
+
+ /**
+ * @param name
+ */
+ public BackupBranchesJob(Collection<Branch> branches, String path, XResultData rd) {
+ super(JOB_NAME);
+ this.branches = branches;
+ this.path = path;
+ if (rd != null)
+ this.rd = rd;
+ else
+ this.rd = new XResultData();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ backup(branches);
+ if (rd.toString().equals("")) rd.log("No Problems Found");
+ rd.report(getName());
+ XResultPage page = rd.getReport(getName());
+
+ notifyOfCompletion(JOB_NAME, page.getManipulatedHtml());
+ monitor.done();
+ return Status.OK_STATUS;
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return new Status(Status.ERROR, SkynetGuiPlugin.PLUGIN_ID, -1, "Failed", ex);
+ }
+ }
+
+ public void backup(Collection<Branch> branches) {
+ XResultData rd = new XResultData();
+ try {
+ rd = new XResultData();
+ rd.log(getName());
+ rd.log("Starting OSEE DB Backup - " + XDate.getDateNow());
+ for (Branch branch : branches) {
+ rd.log("Backing up \"" + branch.getBranchShortName() + "\" - " + XDate.getDateNow());
+ String backupName = StringFormat.truncate(branch.getBranchName(), 25);
+ backupName = backupName.replaceAll("\\W+", "_");
+ File xmlFile =
+ new File(
+ path + "/OSEE_Branch_Backup__" + XDate.getDateNow("yyyy_MM_dd_HH_MM__") + backupName + ".xml");
+ if (xmlFile != null) {
+ throw new UnsupportedOperationException("Export from client is not supported");
+ // Job job = new ExportBranchJob(xmlFile, branch, false);
+ // job.setUser(true);
+ // job.setPriority(Job.LONG);
+ // job.schedule();
+ // try {
+ // job.join();
+ // } catch (InterruptedException ex) {
+ // OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ // rd.logError(ex.getLocalizedMessage());
+ // }
+ }
+ rd.log("Zipping up \"" + branch.getBranchShortName() + "\" - " + XDate.getDateNow());
+ Zip.zip(new String[] {xmlFile.getAbsolutePath()}, xmlFile.getAbsolutePath().replaceFirst(".xml", ".zip"));
+ // Delete backup file
+ xmlFile.delete();
+ rd.log("Finished with \"" + branch.getBranchShortName() + "\" - " + XDate.getDateNow());
+ }
+ rd.log("Completed - " + XDate.getDateNow());
+ rd.report(getName());
+
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ rd.logError(ex.getLocalizedMessage());
+ }
+
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailGroup.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailGroup.java
new file mode 100644
index 00000000000..b72c88d32a4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailGroup.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util.email;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class EmailGroup {
+
+ private final String groupName;
+ private ArrayList<String> emails = new ArrayList<String>();
+
+ public EmailGroup(String groupName, Collection<String> emails) {
+ this.groupName = groupName;
+ for (String s : emails)
+ this.emails.add(s);
+ }
+
+ public String getGroupName() {
+ return groupName;
+ }
+
+ public String toString() {
+ return groupName;
+ }
+
+ public ArrayList<String> getEmails() {
+ return emails;
+ }
+
+ public void setEmails(ArrayList<String> emails) {
+ this.emails = emails;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailWizard.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailWizard.java
new file mode 100644
index 00000000000..285d711ecb1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailWizard.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util.email;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import javax.mail.Message;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.ui.skynet.util.OseeEmail;
+import org.eclipse.osee.framework.ui.skynet.util.OseeEmail.BodyType;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class EmailWizard extends Wizard {
+ private EmailWizardPage wizardPage;
+ private String htmlMessage = null;
+ private String subject = null;
+ private ArrayList<EmailGroup> emailableGroups;
+ private ArrayList<Object> initialAddress = null;
+
+ public EmailWizard() {
+ super();
+ }
+
+ /**
+ * @param htmlMessage
+ * @param subject
+ * @param emailableFields
+ * @param initialAddress - User, AtsEmailGroup or String
+ */
+ public EmailWizard(String htmlMessage, String subject, ArrayList<EmailGroup> emailableFields, ArrayList<Object> initialAddress) {
+ this.htmlMessage = htmlMessage;
+ this.subject = subject;
+ this.emailableGroups = emailableFields;
+ this.initialAddress = initialAddress;
+ }
+
+ @Override
+ public void addPages() {
+ wizardPage = new EmailWizardPage("Page1", emailableGroups, initialAddress);
+ addPage(wizardPage);
+ }
+
+ @Override
+ public boolean performFinish() {
+ try {
+ OseeEmail emailMessage =
+ new OseeEmail(Arrays.asList(wizardPage.getToAddresses()), UserManager.getUser().getEmail(),
+ UserManager.getUser().getEmail(), subject, "", BodyType.Html);
+ emailMessage.setRecipients(Message.RecipientType.CC, wizardPage.getCcAddresses());
+ emailMessage.setRecipients(Message.RecipientType.BCC, wizardPage.getBccAddresses());
+ String otherText = wizardPage.getText();
+ if (!otherText.equals("")) emailMessage.setHTMLBody("<p>" + AHTML.textToHtml(wizardPage.getText()) + "</p><p>--------------------------------------------------------</p>");
+ // Remove hyperlinks cause they won't work in email.
+ emailMessage.addHTMLBody(htmlMessage);
+ emailMessage.send();
+ } catch (Exception e) {
+ MessageDialog.openInformation(null, "Message Could Not Be Sent",
+ "Your Email Message could not be sent.\n\n" + e.getLocalizedMessage());
+
+ // e.printStackTrace();
+ return false;
+ }
+
+ return true;
+ }
+
+ public void setEmailableGroups(ArrayList<EmailGroup> emailableGroups) {
+ this.emailableGroups = emailableGroups;
+ }
+
+ public void setHtmlMessage(String htmlMessage) {
+ this.htmlMessage = htmlMessage;
+ }
+
+ public void setSubject(String subject) {
+ this.subject = subject;
+ }
+
+ public ArrayList<Object> getInitialAddress() {
+ return initialAddress;
+ }
+
+ public void setInitialAddress(ArrayList<Object> initialAddress) {
+ this.initialAddress = initialAddress;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailWizardPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailWizardPage.java
new file mode 100644
index 00000000000..a5420e1f2f0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/email/EmailWizardPage.java
@@ -0,0 +1,314 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util.email;
+
+import java.util.ArrayList;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osee.framework.core.data.SystemUser;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.ui.plugin.util.ArrayTreeContentProvider;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.filteredTree.OSEEFilteredTree;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class EmailWizardPage extends WizardPage {
+ private Text text;
+ private final ArrayList<Object> initialAddress;
+ private OSEEFilteredTree namesList;
+ private ListViewer toList;
+ private ListViewer ccList;
+ private ListViewer bccList;
+
+ private final static String separator = "===============";
+ private final ArrayList<EmailGroup> groups;
+
+ /**
+ * @param pageName
+ * @param groups
+ * @param initialAddress User, EmailGroup or String
+ */
+ protected EmailWizardPage(String pageName, ArrayList<EmailGroup> groups, ArrayList<Object> initialAddress) {
+ super(pageName);
+ this.groups = groups;
+ this.initialAddress = initialAddress;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void createControl(Composite parent) {
+ setTitle("Email Action");
+
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout gl = new GridLayout();
+ gl.numColumns = 2;
+ composite.setLayout(gl);
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ composite.setLayoutData(gd);
+
+ Composite namesComp = new Composite(composite, SWT.NONE);
+ namesComp.setLayout(new GridLayout());
+ gd = new GridData(GridData.FILL_VERTICAL);
+ namesComp.setLayoutData(gd);
+
+ // Fill names array
+ ArrayList<Object> names = new ArrayList<Object>();
+ if (groups != null) {
+ names.addAll(groups);
+ if (groups.size() > 0) names.add(separator);
+ }
+
+ try {
+ names.addAll(UserManager.getUsers());
+ names.remove(UserManager.getUser(SystemUser.UnAssigned));
+ names.remove(UserManager.getUser(SystemUser.NoOne));
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ names.add(ex.getLocalizedMessage());
+ }
+
+ namesList = new OSEEFilteredTree(namesComp);
+ namesList.getViewer().setContentProvider(new ArrayTreeContentProvider());
+ namesList.getViewer().setLabelProvider(new NamesLabelProvider());
+ gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = 75;
+ namesList.getViewer().getTree().setLayoutData(gd);
+ namesList.getViewer().getTree().setLinesVisible(false);
+ namesList.getViewer().setInput(names);
+ namesList.getViewer().getTree().addListener(SWT.MouseDoubleClick, new Listener() {
+ public void handleEvent(Event event) {
+ if (event.button == 1) {
+ IStructuredSelection sel = (IStructuredSelection) namesList.getViewer().getSelection();
+ Object obj = sel.getFirstElement();
+ if ((obj instanceof String) && ((String) obj).equals(separator)) return;
+ toList.add(sel.getFirstElement());
+ }
+ }
+ });
+ namesList.getViewer().setSorter(new ViewerSorter() {
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ if (e1 instanceof EmailGroup && !(e2 instanceof EmailGroup)) {
+ return -1;
+ } else if (e2 instanceof EmailGroup && !(e1 instanceof EmailGroup)) {
+ return 1;
+ }
+ return getComparator().compare(e1.toString(), e2.toString());
+ }
+ });
+ Composite toComp = new Composite(composite, SWT.NONE);
+ gl = new GridLayout();
+ gl.numColumns = 2;
+ toComp.setLayout(gl);
+ gd = new GridData(GridData.FILL_BOTH);
+ toComp.setLayoutData(gd);
+
+ // Empty label to take up left column
+ Label label = new Label(toComp, SWT.NONE);
+ label = new Label(toComp, SWT.NONE);
+ label.setText("(select and right-click to delete)");
+
+ Button b = new Button(toComp, SWT.NONE);
+ b.setText("To-> ");
+ b.setSize(1000, 5);
+ b.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ widgetDefaultSelected(e);
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ IStructuredSelection sel = (IStructuredSelection) namesList.getViewer().getSelection();
+ for (Object obj : sel.toList())
+ toList.add(obj);
+ }
+ });
+
+ toList = new ListViewer(toComp);
+ toList.setContentProvider(new ArrayContentProvider());
+ toList.setLabelProvider(new NamesLabelProvider());
+ gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = 50;
+ toList.getList().setLayoutData(gd);
+ if (initialAddress != null) toList.setInput(initialAddress);
+ toList.getList().setMenu(getDeletePopup(toList));
+
+ b = new Button(toComp, SWT.NONE);
+ b.setText(" Cc-> ");
+ b.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ widgetDefaultSelected(e);
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ IStructuredSelection sel = (IStructuredSelection) namesList.getViewer().getSelection();
+ for (Object obj : sel.toList())
+ ccList.add(obj);
+ }
+ });
+
+ ccList = new ListViewer(toComp);
+ ccList.setContentProvider(new ArrayContentProvider());
+ ccList.setLabelProvider(new NamesLabelProvider());
+ gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = 20;
+ ccList.getList().setLayoutData(gd);
+ ccList.getList().setMenu(getDeletePopup(ccList));
+
+ b = new Button(toComp, SWT.NONE);
+ b.setText(" Bcc-> ");
+ b.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ widgetDefaultSelected(e);
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ IStructuredSelection sel = (IStructuredSelection) namesList.getViewer().getSelection();
+ for (Object obj : sel.toList())
+ bccList.add(obj);
+ }
+ });
+
+ bccList = new ListViewer(toComp);
+ bccList.setContentProvider(new ArrayContentProvider());
+ bccList.setLabelProvider(new NamesLabelProvider());
+ gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = 20;
+ bccList.getList().setLayoutData(gd);
+ bccList.getList().setMenu(getDeletePopup(bccList));
+ try {
+ bccList.setInput(new Object[] {UserManager.getUser().getEmail()});
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+
+ // Additional Text
+ Label l = new Label(composite, SWT.NONE);
+ l.setText("Additional Text:");
+ gd = new GridData();
+ gd.horizontalSpan = 2;
+ l.setLayoutData(gd);
+
+ text = new Text(composite, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL | SWT.BORDER);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = 2;
+ gd.heightHint = 75;
+ text.setLayoutData(gd);
+
+ setControl(composite);
+ }
+
+ private Menu getDeletePopup(ListViewer listView) {
+ Menu previewMenu = new Menu(listView.getControl());
+ MenuItem item = new MenuItem(previewMenu, SWT.CASCADE);
+ item.setText("Delete");
+ final ListViewer fListView = listView;
+ item.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection sel = (IStructuredSelection) fListView.getSelection();
+ for (Object obj : sel.toList())
+ fListView.remove(obj);
+ }
+ });
+
+ return previewMenu;
+ }
+
+ public String[] getToAddresses() throws OseeCoreException {
+ return getEmails(toList);
+ }
+
+ public String[] getCcAddresses() throws OseeCoreException {
+ return getEmails(ccList);
+ }
+
+ public String[] getBccAddresses() throws OseeCoreException {
+ return getEmails(bccList);
+ }
+
+ public String[] getEmails(ListViewer list) throws OseeCoreException {
+
+ ArrayList<String> emails = new ArrayList<String>();
+ for (int x = 0; x < list.getList().getItemCount(); x++) {
+ Object obj = list.getElementAt(x);
+ if (obj instanceof User)
+ emails.add(((User) obj).getEmail());
+ else if (obj instanceof String)
+ emails.add(((String) obj));
+ else if (obj instanceof EmailGroup) emails.addAll(((EmailGroup) obj).getEmails());
+ }
+ return emails.toArray(new String[emails.size()]);
+ }
+
+ public String getText() {
+ return text.getText();
+ }
+
+ public class NamesLabelProvider implements ILabelProvider {
+
+ public Image getImage(Object arg0) {
+ return null;
+ }
+
+ public String getText(Object element) {
+ if (element instanceof User)
+ return ((User) element).getName();
+ else if (element instanceof EmailGroup)
+ return ((EmailGroup) element).toString();
+ else if (element instanceof String) return ((String) element).toString();
+ return "";
+ }
+
+ public void addListener(ILabelProviderListener arg0) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object arg0, String arg1) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener arg0) {
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEECheckedFilteredTree.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEECheckedFilteredTree.java
new file mode 100644
index 00000000000..95beee9c19c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEECheckedFilteredTree.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util.filteredTree;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.dialogs.PatternFilter;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class OSEECheckedFilteredTree extends OSEEFilteredTree {
+
+ private Set<Object> checked = new HashSet<Object>();
+
+ /**
+ * @param parent
+ * @param treeStyle
+ * @param filter
+ */
+ public OSEECheckedFilteredTree(Composite parent, int treeStyle, PatternFilter filter) {
+ super(parent, treeStyle | SWT.CHECK, filter);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.dialogs.FilteredTree#createTreeControl(org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ protected Control createTreeControl(Composite parent, int style) {
+ Control control = super.createTreeControl(parent, style);
+ getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ storeResults(treeViewer.getTree().getItems());
+ }
+ });
+ getFilterControl().addModifyListener(new ModifyListener() {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ */
+ @Override
+ public void modifyText(ModifyEvent e) {
+ restoreChecked(treeViewer.getTree().getItems());
+ }
+ });
+ getViewer().getTree().addPaintListener(new PaintListener() {
+
+ @Override
+ public void paintControl(PaintEvent e) {
+ restoreChecked(treeViewer.getTree().getItems());
+ }
+ });
+ return control;
+ }
+
+ public void setInitalChecked(Collection<? extends Object> checked) {
+ this.checked.addAll(checked);
+ restoreChecked(treeViewer.getTree().getItems());
+ for (Object obj : checked) {
+ treeViewer.reveal(obj);
+ }
+ }
+
+ public void clearChecked() {
+ this.checked.clear();
+ restoreChecked(treeViewer.getTree().getItems());
+ }
+
+ private void restoreChecked(TreeItem treeItems[]) {
+ for (TreeItem treeItem : treeItems) {
+ if (treeItem.getChecked() && !checked.contains(treeItem.getData())) {
+ // System.out.println("Unchecked " + treeItem.getData());
+ treeItem.setChecked(false);
+ } else if (!treeItem.getChecked() && checked.contains(treeItem.getData())) {
+ // System.out.println("Checked " + treeItem.getData());
+ treeItem.setChecked(true);
+ }
+ restoreChecked(treeItem.getItems());
+ }
+ }
+
+ private void storeResults(TreeItem treeItems[]) {
+ for (TreeItem treeItem : treeItems) {
+ if (treeItem.getChecked() && !checked.contains(treeItem.getData())) {
+ // System.out.println("Added " + treeItem.getData());
+ checked.add(treeItem.getData());
+ } else if (!treeItem.getChecked() && checked.contains(treeItem.getData())) {
+ // System.out.println("Removed " + treeItem.getData());
+ checked.remove(treeItem.getData());
+ }
+ storeResults(treeItem.getItems());
+ }
+ }
+
+ /**
+ * @return the selected
+ */
+ public Set<Object> getChecked() {
+ return checked;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEECheckedFilteredTreeDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEECheckedFilteredTreeDialog.java
new file mode 100644
index 00000000000..4a238c25aa2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEECheckedFilteredTreeDialog.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util.filteredTree;
+
+import java.util.Set;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.util.ArtifactNameSorter;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.dialogs.PatternFilter;
+
+public abstract class OSEECheckedFilteredTreeDialog extends MessageDialog {
+
+ protected Label statusLabel;
+ private Button okButton;
+ private OSEECheckedFilteredTree treeViewer;
+ private final PatternFilter patternFilter;
+ private Object input;
+ private final IContentProvider contentProvider;
+ private final IBaseLabelProvider labelProvider;
+ private Set<? extends Object> initialSelections;
+
+ public OSEECheckedFilteredTreeDialog(String dialogTitle, String dialogMessage, PatternFilter patternFilter, IContentProvider contentProvider, IBaseLabelProvider labelProvider) {
+ super(Display.getCurrent().getActiveShell(), dialogTitle, null, dialogMessage, MessageDialog.NONE, new String[] {
+ "OK", "Cancel"}, 0);
+ this.contentProvider = contentProvider;
+ this.labelProvider = labelProvider;
+ this.patternFilter = patternFilter;
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ }
+
+ protected void createPreCustomArea(Composite parent) {
+ }
+
+ /**
+ * Sets the input. Convenience method.
+ *
+ * @param object the input.
+ */
+ public final void setInput(Object input) {
+ this.input = input;
+ if (treeViewer != null) treeViewer.getViewer().setInput(input);
+ }
+
+ /**
+ * Sets the initial selection. Convenience method.
+ *
+ * @param object the initial selection.
+ */
+ public void setInitialSelections(Set<? extends Object> initialSelections) {
+ this.initialSelections = initialSelections;
+ if (treeViewer != null) treeViewer.setInitalChecked(initialSelections);
+ }
+
+ @Override
+ protected Control createCustomArea(Composite parent) {
+
+ statusLabel = new Label(parent, SWT.NONE);
+ statusLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+ updateStatusLabel();
+
+ createPreCustomArea(parent);
+
+ Composite aiComp = new Composite(parent, SWT.NONE);
+ aiComp.setLayout(ALayout.getZeroMarginLayout());
+ aiComp.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ treeViewer =
+ new OSEECheckedFilteredTree(aiComp, SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER,
+ patternFilter);
+ treeViewer.getViewer().getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ treeViewer.getViewer().setContentProvider(contentProvider);
+ treeViewer.getViewer().setLabelProvider(labelProvider);
+ treeViewer.getViewer().setSorter(new ArtifactNameSorter());
+ treeViewer.getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ updateStatusLabel();
+ }
+ });
+ if (input != null) treeViewer.getViewer().setInput(input);
+ if (initialSelections != null) treeViewer.setInitalChecked(initialSelections);
+ return parent;
+ }
+
+ protected void updateStatusLabel() {
+ Result result = isComplete();
+ if (result.isFalse())
+ statusLabel.setText(result.getText());
+ else
+ statusLabel.setText("");
+ statusLabel.getParent().layout();
+ updateButtons();
+ }
+
+ @Override
+ protected Control createButtonBar(Composite parent) {
+ Control c = super.createButtonBar(parent);
+ okButton = getButton(0);
+ okButton.setEnabled(false);
+ return c;
+ }
+
+ protected Result isComplete() {
+ return Result.TrueResult;
+ }
+
+ private void updateButtons() {
+ if (okButton != null) okButton.setEnabled(isComplete().isTrue());
+ }
+
+ /**
+ * @return the treeViewer
+ */
+ public OSEECheckedFilteredTree getTreeViewer() {
+ return treeViewer;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEEFilteredTree.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEEFilteredTree.java
new file mode 100644
index 00000000000..eafe15a5607
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEEFilteredTree.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util.filteredTree;
+
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.dialogs.FilteredTree;
+import org.eclipse.ui.dialogs.PatternFilter;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class OSEEFilteredTree extends FilteredTree {
+
+ public OSEEFilteredTree(Composite parent) {
+ this(parent, SWT.BORDER | SWT.MULTI, new PatternFilter());
+ }
+
+ /**
+ * @param parent
+ * @param treeStyle
+ * @param filter
+ */
+ public OSEEFilteredTree(Composite parent, int treeStyle, PatternFilter filter) {
+ super(parent, treeStyle, filter);
+ setInitialText("");
+ }
+
+ @Override
+ protected Composite createFilterControls(Composite parent) {
+ Composite comp = new Composite(parent, SWT.NONE);
+ comp.setLayout(ALayout.getZeroMarginLayout(3, false));
+ comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ (new Label(comp, SWT.NONE)).setText("Filter: ");
+ super.createFilterControls(comp);
+
+ return comp;
+ }
+
+ @Override
+ protected void createFilterText(Composite parent) {
+ super.createFilterText(parent);
+ filterText.addKeyListener(new KeyListener() {
+ public void keyPressed(KeyEvent e) {
+ filterText.setFocus();
+ }
+
+ public void keyReleased(KeyEvent e) {
+ filterText.setFocus();
+ }
+ });
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEEFilteredTreeDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEEFilteredTreeDialog.java
new file mode 100644
index 00000000000..f557aaa3f5a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/filteredTree/OSEEFilteredTreeDialog.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util.filteredTree;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.util.ArtifactNameSorter;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.dialogs.PatternFilter;
+
+public abstract class OSEEFilteredTreeDialog extends MessageDialog {
+
+ protected Label statusLabel;
+ private Button okButton;
+ private OSEEFilteredTree treeViewer;
+ private final PatternFilter patternFilter;
+
+ public OSEEFilteredTreeDialog(String dialogTitle, String dialogMessage, PatternFilter patternFilter) {
+ super(Display.getCurrent().getActiveShell(), dialogTitle, null, dialogMessage, MessageDialog.NONE, new String[] {
+ "OK", "Cancel"}, 0);
+ this.patternFilter = patternFilter;
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ }
+
+ protected void createPreCustomArea(Composite parent) {
+ }
+
+ /**
+ * Sets the input. Convenience method.
+ *
+ * @param object the input.
+ */
+ public final void setInput(Object input) throws Exception {
+ getTreeViewer().getViewer().setInput(input);
+ }
+
+ /**
+ * Sets the initial selection. Convenience method.
+ *
+ * @param object the initial selection.
+ */
+ public void setInitialSelections(Object object) {
+ getTreeViewer().getViewer().setSelection(new StructuredSelection(object), true);
+ }
+
+ @Override
+ protected Control createCustomArea(Composite parent) {
+
+ statusLabel = new Label(parent, SWT.NONE);
+ statusLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+ updateStatusLabel();
+
+ createPreCustomArea(parent);
+
+ Composite aiComp = new Composite(parent, SWT.NONE);
+ aiComp.setLayout(ALayout.getZeroMarginLayout());
+ aiComp.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ treeViewer =
+ new OSEECheckedFilteredTree(aiComp,
+ SWT.MULTI | SWT.CHECK | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, patternFilter);
+ treeViewer.getViewer().getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ treeViewer.getViewer().setSorter(new ArtifactNameSorter());
+ treeViewer.getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ updateStatusLabel();
+ }
+ });
+ return parent;
+ }
+
+ protected void updateStatusLabel() {
+ Result result = isComplete();
+ if (result.isFalse())
+ statusLabel.setText(result.getText());
+ else
+ statusLabel.setText("");
+ statusLabel.getParent().layout();
+ updateButtons();
+ }
+
+ @Override
+ protected Control createButtonBar(Composite parent) {
+ Control c = super.createButtonBar(parent);
+ okButton = getButton(0);
+ okButton.setEnabled(false);
+ return c;
+ }
+
+ protected Result isComplete() {
+ return Result.TrueResult;
+ }
+
+ private void updateButtons() {
+ if (okButton != null) okButton.setEnabled(isComplete().isTrue());
+ }
+
+ /**
+ * @return the treeViewer
+ */
+ public OSEEFilteredTree getTreeViewer() {
+ return treeViewer;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/matrix/Matrix.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/matrix/Matrix.java
new file mode 100644
index 00000000000..154e318bb8e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/matrix/Matrix.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util.matrix;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+
+/**
+ * Creates HTML matrix
+ *
+ * @author Donald G. Dunne
+ */
+public class Matrix {
+ private String title;
+ private final ArrayList<MatrixItem> items;
+ private Map<String, MatrixItem> nameToItem = new HashMap<String, MatrixItem>();
+ private Set<String> values = new HashSet<String>();
+ private Map<String, Set<String>> nameToValues = new HashMap<String, Set<String>>();
+ // Names with no values will be listed at the bottom of the report so they don't take up space
+ private Set<String> noValueNames = new HashSet<String>();
+ private boolean useNameAsMark = false;
+ private IProgressMonitor monitor;
+
+ public Matrix(String title, ArrayList<MatrixItem> items) {
+ this.title = title;
+ this.items = items;
+ }
+
+ public String getMatrix() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(AHTML.heading(3, title));
+ sb.append(getMatrixBody());
+ return sb.toString();
+ }
+
+ private void processData() {
+ for (MatrixItem item : items) {
+ nameToItem.put(item.getName(), item);
+ values.addAll(item.getValues());
+ if (nameToValues.containsKey(item.getName())) {
+ Set<String> vals = nameToValues.get(item.getName());
+ vals.addAll(item.getValues());
+ nameToValues.remove(item.getName());
+ nameToValues.put(item.getName(), vals);
+ } else
+ nameToValues.put(item.getName(), item.getValues());
+ }
+ }
+
+ private String getMatrixBody() {
+ processData();
+ StringBuilder sb = new StringBuilder();
+ sb.append(AHTML.beginMultiColumnTable(100, 1));
+ // Determine all the names to deal with
+ Set<String> names = new HashSet<String>();
+ // Don't want to take up valuable table space with names that have no values; keep track
+ // of them and print them at the end of the report
+ for (String name : nameToItem.keySet()) {
+ System.out.println("nameToValues.get(name) *" + nameToValues.get(name) + "*");
+ if (nameToValues.get(name) == null || nameToValues.get(name).size() == 0)
+ noValueNames.add(name);
+ else
+ names.add(name);
+ }
+ // Create sortedNames for use in looping through
+ String[] sortedNames = names.toArray(new String[names.size()]);
+ Arrays.sort(sortedNames);
+ // Create headerNames with one more field due to value name column
+ names.add(" ");
+ String[] headerNames = names.toArray(new String[names.size()]);
+ Arrays.sort(headerNames);
+ // Add header names to table
+ sb.append(AHTML.addHeaderRowMultiColumnTable(headerNames));
+ int x = 1;
+ // Create sorted list of values
+ String[] sortedValues = values.toArray(new String[values.size()]);
+ Arrays.sort(sortedValues);
+ for (String value : sortedValues) {
+ String str = String.format("Processing %s/%s \"%s\"", x++ + "", values.size(), value);
+ System.out.println(str);
+ if (monitor != null) monitor.subTask(str);
+ List<String> marks = new ArrayList<String>();
+ marks.add(value);
+ for (String name : sortedNames) {
+ if (nameToValues.get(name) != null && nameToValues.get(name).contains(value))
+ marks.add(useNameAsMark ? name : "X");
+ else
+ marks.add(".");
+ }
+ String[] colOptions = new String[marks.size()];
+ int i = 0;
+ colOptions[i] = "";
+ for (i = 1; i < marks.size(); i++)
+ colOptions[i] = " align=center";
+ sb.append(AHTML.addRowMultiColumnTable(marks.toArray(new String[marks.size()]), colOptions));
+ }
+ sb.append(AHTML.endMultiColumnTable());
+ if (noValueNames.size() > 0) {
+ sb.append(AHTML.newline(2) + AHTML.bold("Items with no values: "));
+ String[] sortedItems = noValueNames.toArray(new String[noValueNames.size()]);
+ Arrays.sort(sortedItems);
+ for (String str : sortedItems)
+ sb.append(AHTML.newline() + str);
+ sb.append(AHTML.newline());
+ }
+ return sb.toString();
+ }
+
+ /**
+ * @return Returns the useNameAsMark.
+ */
+ public boolean isUseNameAsMark() {
+ return useNameAsMark;
+ }
+
+ /**
+ * @param useNameAsMark The useNameAsMark to set.
+ */
+ public void setUseNameAsMark(boolean useNameAsMark) {
+ this.useNameAsMark = useNameAsMark;
+ }
+
+ public IProgressMonitor getMonitor() {
+ return monitor;
+ }
+
+ public void setMonitor(IProgressMonitor monitor) {
+ this.monitor = monitor;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/matrix/MatrixItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/matrix/MatrixItem.java
new file mode 100644
index 00000000000..176004a4e54
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/util/matrix/MatrixItem.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.util.matrix;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MatrixItem {
+
+ private String name;
+ private Set<String> values = new HashSet<String>();
+
+ public MatrixItem() {
+ this("Unset", null);
+ }
+
+ public MatrixItem(String name) {
+ this(name, null);
+ }
+
+ public void addValues(Collection<String> values) {
+ this.values.addAll(values);
+ }
+
+ public void addValue(String value) {
+ this.values.add(value);
+ }
+
+ public MatrixItem(String name, String[] values) {
+ this.name = name;
+ if (values != null) for (String value : values)
+ this.values.add(value);
+ }
+
+ public Set<String> getValues() {
+ return values;
+ }
+
+ public void setValues(Set<String> values) {
+ this.values = values;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/ArtifactTypeContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/ArtifactTypeContentProvider.java
new file mode 100644
index 00000000000..d3c08f71ad2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/ArtifactTypeContentProvider.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class ArtifactTypeContentProvider implements ITreeContentProvider {
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Branch) {
+ ArrayList<Object> descriptors = new ArrayList<Object>();
+
+ try {
+ for (ArtifactType descriptor : TypeValidityManager.getValidArtifactTypes((Branch) parentElement)) {
+ descriptors.add((Object) descriptor);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+
+ }
+ return descriptors.toArray();
+ }
+ return null;
+ }
+
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ return false;
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/AttributeContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/AttributeContentProvider.java
new file mode 100644
index 00000000000..e8c8a49e5c2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/AttributeContentProvider.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class AttributeContentProvider implements ITreeContentProvider {
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Branch) {
+ ArrayList<Object> descriptors = new ArrayList<Object>();
+
+ try {
+ for (AttributeType descriptor : TypeValidityManager.getValidAttributeTypes((Branch) parentElement)) {
+ descriptors.add((Object) descriptor);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return descriptors.toArray();
+
+ }
+ return null;
+ }
+
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ return false;
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/DefaultBranchContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/DefaultBranchContentProvider.java
new file mode 100644
index 00000000000..c5889f0eca3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/DefaultBranchContentProvider.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class DefaultBranchContentProvider implements ITreeContentProvider, IBranchEventListener {
+ private final ITreeContentProvider provider;
+ private Viewer viewer;
+
+ /**
+ * @param provider
+ */
+ public DefaultBranchContentProvider(final ITreeContentProvider provider) {
+ if (provider == null) throw new IllegalArgumentException("provider can not be null");
+
+ this.provider = provider;
+ this.viewer = null;
+
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ this.viewer = viewer;
+ }
+
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ }
+
+ public Object[] getChildren(Object parentElement) {
+ return provider.getChildren(parentElement);
+ }
+
+ public Object getParent(Object element) {
+ return provider.getParent(element);
+ }
+
+ public boolean hasChildren(Object element) {
+ return provider.hasChildren(element);
+ }
+
+ public Object[] getElements(Object inputElement) {
+ return provider.getElements(BranchManager.getDefaultBranch());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, int branchId) {
+ if (branchModType == BranchEventType.DefaultBranchChanged) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ if (viewer != null) {
+ viewer.refresh();
+ }
+ }
+ });
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/HyperLinkLabel.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/HyperLinkLabel.java
new file mode 100644
index 00000000000..1661e33e7e2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/HyperLinkLabel.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseTrackListener;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * Creates a hyperlink label that when enabled, shows as blue and changes cursor when hover over and when disabled,
+ * shows in black with no cursor change. To add listener, use: link.addListener(SWT.MouseUp, new Listener() { public
+ * void handleEvent(org.eclipse.swt.widgets.Event event) { System.out.println("Link Selected"); } });
+ *
+ * @author Donald G. Dunne
+ */
+
+public class HyperLinkLabel extends Label {
+
+ private boolean hyperEnabled = true;
+ /**
+ * Amount of the margin width around the hyperlink (default is 1).
+ */
+ protected int marginWidth = 1;
+
+ /**
+ * Amount of the margin height around the hyperlink (default is 1).
+ */
+ protected int marginHeight = 1;
+
+ public HyperLinkLabel(Composite parent, int style) {
+ this(null, parent, style, null);
+ }
+
+ public HyperLinkLabel(FormToolkit toolkit, Composite parent, int style) {
+ this(toolkit, parent, style, null);
+ }
+
+ public HyperLinkLabel(FormToolkit toolkit, Composite parent, int style, String text) {
+ super(parent, style);
+ if (text != null) setText(text);
+ if (toolkit != null) toolkit.adapt(this, true, true);
+ refresh();
+ }
+
+ public static void adapt(final Label label) {
+ label.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
+ label.addMouseTrackListener(new MouseTrackListener() {
+
+ public void mouseEnter(MouseEvent e) {
+ label.setCursor(new Cursor(null, SWT.CURSOR_HAND));
+ }
+
+ public void mouseExit(MouseEvent e) {
+ label.setCursor(null);
+ };
+
+ public void mouseHover(MouseEvent e) {
+ }
+ });
+ }
+
+ MouseTrackListener listener = new MouseTrackListener() {
+
+ public void mouseEnter(MouseEvent e) {
+ setCursor(new Cursor(null, SWT.CURSOR_HAND));
+ }
+
+ public void mouseExit(MouseEvent e) {
+ setCursor(null);
+ };
+
+ public void mouseHover(MouseEvent e) {
+ }
+ };
+
+ public void refresh() {
+ if (hyperEnabled) {
+ setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
+ removeMouseTrackListener(listener);
+ addMouseTrackListener(listener);
+ } else {
+ setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
+ removeMouseTrackListener(listener);
+ }
+ }
+
+ public boolean isHyperEnabled() {
+ return hyperEnabled;
+ }
+
+ public void setHyperEnabled(boolean hyperEnabled) {
+ this.hyperEnabled = hyperEnabled;
+ refresh();
+ }
+
+ @Override
+ protected void checkSubclass() {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/IArtifactWidget.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/IArtifactWidget.java
new file mode 100644
index 00000000000..9ceb83347c0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/IArtifactWidget.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+/**
+ * Used by XWidgets that perform external data storage
+ *
+ * @author Donald G. Dunne
+ */
+public interface IArtifactWidget {
+ /**
+ * Set artifact used as storage for this widget
+ *
+ * @throws Exception TODO
+ */
+ public void setArtifact(Artifact artifact, String attrName) throws OseeCoreException;
+
+ /**
+ * Save data changes to artifact
+ *
+ * @throws Exception TODO
+ */
+ public void saveToArtifact() throws OseeCoreException;
+
+ /**
+ * Revert changes to widget data back to what was in artifact
+ *
+ * @throws Exception TODO
+ */
+ public void revert() throws OseeCoreException;
+
+ /**
+ * Return true if storage data different than widget data
+ *
+ * @return
+ * @throws Exception TODO
+ */
+ public Result isDirty() throws OseeCoreException;
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/IBranchArtifact.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/IBranchArtifact.java
new file mode 100644
index 00000000000..7cd599d6bd4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/IBranchArtifact.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IBranchArtifact {
+ public Branch getWorkingBranch() throws OseeCoreException;
+
+ public Artifact getArtifact();
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/RelationTypeContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/RelationTypeContentProvider.java
new file mode 100644
index 00000000000..938ec3068dd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/RelationTypeContentProvider.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.relation.RelationType;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class RelationTypeContentProvider implements ITreeContentProvider {
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Branch) {
+ ArrayList<Object> descriptors = new ArrayList<Object>();
+ try {
+ for (RelationType descriptor : RelationTypeManager.getValidTypes((Branch) parentElement)) {
+ descriptors.add((Object) descriptor);
+ }
+ return descriptors.toArray();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetActivator.class, Level.SEVERE, ex);
+ }
+ }
+ return null;
+ }
+
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ return false;
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/SkynetSpellModifyDictionary.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/SkynetSpellModifyDictionary.java
new file mode 100644
index 00000000000..11e9518014d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/SkynetSpellModifyDictionary.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.GlobalPreferences;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.IOseeDictionary;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SkynetSpellModifyDictionary implements XTextSpellModifyDictionary, IOseeDictionary {
+
+ private static String ATTRIBUTE_NAME = "Dictionary";
+ private static Set<String> dictionary;
+ private boolean debug = false;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XTextSpellModifyDictionary#addToGlobalDictionary(java.lang.String)
+ */
+ public boolean addToGlobalDictionary(String word) {
+ try {
+ return updateArtifact("Global", word, GlobalPreferences.get());
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XTextSpellModifyDictionary#addToLocalDictionary(java.lang.String)
+ */
+ public boolean addToLocalDictionary(String word) {
+ try {
+ return updateArtifact("Local", word, UserManager.getUser());
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ return false;
+ }
+ }
+
+ private boolean updateArtifact(String type, String word, Artifact art) {
+ if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Add to " + type + " Dictionary",
+ "Add \"" + word + "\" to " + type + " Dictionary")) {
+ try {
+ Set<String> words = new HashSet<String>();
+ for (String str : art.getSoleAttributeValue(ATTRIBUTE_NAME, "").split(";"))
+ words.add(str);
+ words.add(word);
+ art.setSoleAttributeValue(ATTRIBUTE_NAME, Collections.toString(";", words));
+ art.persistAttributes();
+ loadDictionary(true);
+ return true;
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.util.IOseeDictionary#isWord(java.lang.String)
+ */
+ public boolean isWord(String word) {
+ loadDictionary(false);
+ boolean contains = dictionary.contains(word);
+ if (debug) System.out.println("Checking SkynetSpell => \"" + word + "\" " + contains);
+ if (debug) System.out.println("SkynetSpellDict => " + Collections.toString(",", dictionary));
+ return contains;
+ }
+
+ public void loadDictionary(boolean force) {
+ if (!force && dictionary != null) return;
+ try {
+ dictionary = new HashSet<String>();
+ User user = UserManager.getUser();
+ if (user != null) {
+ String value = user.getSoleAttributeValue(ATTRIBUTE_NAME, "");
+ if (value != null) {
+ String[] entries = value.split(";");
+ for (String str : entries) {
+ if (debug) System.out.println("Adding Local => \"" + str + "\"");
+ if (str != null && !str.equals("")) dictionary.add(str);
+ }
+ if (GlobalPreferences.get() != null) {
+ for (String str : GlobalPreferences.get().getSoleAttributeValue(ATTRIBUTE_NAME, "").split(";")) {
+ if (debug) System.out.println("Adding Global => \"" + str + "\"");
+ if (str != null && !str.equals("")) dictionary.add(str);
+ }
+ }
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XArtifactTypeListViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XArtifactTypeListViewer.java
new file mode 100644
index 00000000000..249d4cdd23d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XArtifactTypeListViewer.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class XArtifactTypeListViewer extends XTypeListViewer {
+ private static final String NAME = "XArtifactTypeListViewer";
+
+ public XArtifactTypeListViewer(String keyedBranchName, String defaultValue) {
+ super(NAME);
+
+ setContentProvider(new DefaultBranchContentProvider(new ArtifactTypeContentProvider()));
+ ArrayList<Object> input = new ArrayList<Object>(1);
+ input.add(resolveBranch(keyedBranchName));
+
+ setInput(input);
+
+ if (defaultValue != null) {
+ try {
+ ArtifactType artifactType = ArtifactTypeManager.getType(defaultValue);
+ setDefaultSelected(artifactType);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XAttributeTypeListViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XAttributeTypeListViewer.java
new file mode 100644
index 00000000000..247e20ba591
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XAttributeTypeListViewer.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class XAttributeTypeListViewer extends XTypeListViewer {
+ private static final String NAME = "XAttributeTypeListViewer";
+
+ /**
+ * @param name
+ */
+ public XAttributeTypeListViewer(String keyedBranchName, String defaultValue) {
+ super(NAME);
+
+ setContentProvider(new DefaultBranchContentProvider(new AttributeContentProvider()));
+ ArrayList<Object> input = new ArrayList<Object>(1);
+ input.add(resolveBranch(keyedBranchName));
+
+ setInput(input);
+
+ if (defaultValue != null) {
+ try {
+ AttributeType attributeType = AttributeTypeManager.getType(defaultValue);
+ setDefaultSelected(attributeType);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectComboWidget.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectComboWidget.java
new file mode 100644
index 00000000000..70b85e2d140
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectComboWidget.java
@@ -0,0 +1,241 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.panels.BranchSelectSimpleComposite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class XBranchSelectComboWidget extends XWidget implements Listener {
+ public static final String WIDGET_ID = XBranchSelectWidget.class.getSimpleName();
+
+ private BranchSelectSimpleComposite selectComposite;
+ private Composite composite;
+ private int defaultBranch;
+
+ private final List<Listener> listeners = new ArrayList<Listener>();
+
+ public XBranchSelectComboWidget(String label) {
+ super(label);
+ this.defaultBranch = -1;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#createWidgets(org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ composite = null;
+
+ if (!verticalLabel && (horizontalSpan < 2)) {
+ horizontalSpan = 2;
+ } else if (verticalLabel) {
+ horizontalSpan = 1;
+ }
+
+ if (displayLabel && verticalLabel) {
+ composite = new Composite(parent, SWT.NONE);
+ GridLayout gL = new GridLayout();
+ gL.marginWidth = 0;
+ gL.marginHeight = 0;
+ composite.setLayout(gL);
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ } else {
+ composite = parent;
+ }
+
+ // Create List Widgets
+ if (displayLabel) {
+ labelWidget = new Label(composite, SWT.NONE);
+ labelWidget.setText(label + ":");
+ }
+ selectComposite = BranchSelectSimpleComposite.createBranchSelectComposite(composite, SWT.NONE);
+ if (defaultBranch != -1) {
+ selectComposite.restoreWidgetValues(null, Integer.toString(defaultBranch));
+ }
+ selectComposite.addListener(this);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#dispose()
+ */
+ @Override
+ public void dispose() {
+ if (selectComposite != null) {
+ selectComposite.removeListener(this);
+ selectComposite.dispose();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return composite;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getData()
+ */
+ @Override
+ public Branch getData() {
+ return selectComposite.getSelectedBranch();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getReportData()
+ */
+ @Override
+ public String getReportData() {
+ Branch branch = selectComposite.getSelectedBranch();
+ return branch != null ? branch.getBranchName() : "";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getXmlData()
+ */
+ @Override
+ public String getXmlData() {
+ System.out.println("Get XML Data Called: ");
+ return "";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#isValid()
+ */
+ @Override
+ public Result isValid() {
+ if (selectComposite.getSelectedBranch() == null) return new Result("Must select a Branch");
+ return Result.TrueResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#refresh()
+ */
+ @Override
+ public void refresh() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ selectComposite.setFocus();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setXmlData(java.lang.String)
+ */
+ @Override
+ public void setXmlData(String str) {
+ System.out.println("Set XML Data Called: " + str);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#toHTML(java.lang.String)
+ */
+ @Override
+ public String toHTML(String labelFont) {
+ System.out.println("Set to Html Called: " + labelFont);
+ return "";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setDisplayLabel(java.lang.String)
+ */
+ @Override
+ public void setDisplayLabel(final String displayLabel) {
+ Display.getCurrent().asyncExec(new Runnable() {
+ public void run() {
+ XBranchSelectComboWidget.super.setDisplayLabel(displayLabel);
+ getLabelWidget().setText(displayLabel);
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setToolTip(java.lang.String)
+ */
+ @Override
+ public void setToolTip(final String toolTip) {
+ Display.getCurrent().asyncExec(new Runnable() {
+ public void run() {
+ if (Strings.isValid(toolTip) != false) {
+ XBranchSelectComboWidget.super.setToolTip(toolTip);
+ if (selectComposite != null && selectComposite.isDisposed() != true) {
+ selectComposite.setToolTipText(toolTip);
+ for (Control control : selectComposite.getChildren()) {
+ control.setToolTipText(toolTip);
+ }
+ }
+ }
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ @Override
+ public void handleEvent(Event event) {
+ super.setLabelError();
+ notifyListeners(event);
+ }
+
+ public void setDefaultBranch(String branchName) {
+ if (Strings.isValid(branchName) != false) {
+ try {
+ Branch branch = BranchManager.getBranch(branchName);
+ defaultBranch = branch.getBranchId();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, "Unable to set default branch.", ex);
+ }
+ }
+ }
+
+ public void addListener(Listener listener) {
+ listeners.add(listener);
+ }
+
+ public void removeListener(Listener listener) {
+ listeners.remove(listener);
+ }
+
+ private void notifyListeners(Event event) {
+ for (Listener listener : listeners) {
+ listener.handleEvent(event);
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectWidget.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectWidget.java
new file mode 100644
index 00000000000..abf419e176a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectWidget.java
@@ -0,0 +1,248 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectComposite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+
+/**
+ * @author Roberto E. Escobar
+ * @author Donald G. Dunne
+ */
+public class XBranchSelectWidget extends XWidget implements Listener {
+ public static final String WIDGET_ID = XBranchSelectWidget.class.getSimpleName();
+
+ private BranchSelectComposite selectComposite;
+ private Composite composite;
+ private int defaultBranchId;
+
+ private final List<Listener> listeners = new ArrayList<Listener>();
+
+ public XBranchSelectWidget(String label) {
+ super(label);
+ this.defaultBranchId = -1;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#createWidgets(org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ composite = null;
+
+ if (!verticalLabel && (horizontalSpan < 2)) {
+ horizontalSpan = 2;
+ } else if (verticalLabel) {
+ horizontalSpan = 1;
+ }
+
+ if (displayLabel && verticalLabel) {
+ composite = new Composite(parent, SWT.NONE);
+ GridLayout gL = new GridLayout();
+ gL.marginWidth = 0;
+ gL.marginHeight = 0;
+ composite.setLayout(gL);
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ } else {
+ composite = parent;
+ }
+
+ // Create List Widgets
+ if (displayLabel) {
+ labelWidget = new Label(composite, SWT.NONE);
+ labelWidget.setText(label + ":");
+ }
+ selectComposite = BranchSelectComposite.createBranchSelectComposite(composite, SWT.NONE);
+ try {
+ if (defaultBranchId != -1) {
+ selectComposite.setDefaultSelectedBranch(BranchManager.getBranch(defaultBranchId));
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ selectComposite.addListener(this);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#dispose()
+ */
+ @Override
+ public void dispose() {
+ if (selectComposite != null) {
+ selectComposite.removeListener(this);
+ selectComposite.dispose();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return selectComposite.getBranchSelectText();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getData()
+ */
+ @Override
+ public Branch getData() {
+ return selectComposite.getSelectedBranch();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getReportData()
+ */
+ @Override
+ public String getReportData() {
+ Branch branch = selectComposite.getSelectedBranch();
+ return branch != null ? branch.getBranchName() : "";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getXmlData()
+ */
+ @Override
+ public String getXmlData() {
+ System.out.println("Get XML Data Called: ");
+ return "";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#isValid()
+ */
+ @Override
+ public Result isValid() {
+ if (selectComposite.getSelectedBranch() == null) {
+ return new Result("Must select a Branch");
+ }
+ return Result.TrueResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#refresh()
+ */
+ @Override
+ public void refresh() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ selectComposite.setFocus();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setXmlData(java.lang.String)
+ */
+ @Override
+ public void setXmlData(String str) {
+ System.out.println("Set XML Data Called: " + str);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#toHTML(java.lang.String)
+ */
+ @Override
+ public String toHTML(String labelFont) {
+ System.out.println("Set to Html Called: " + labelFont);
+ return "";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setDisplayLabel(java.lang.String)
+ */
+ @Override
+ public void setDisplayLabel(final String displayLabel) {
+ Display.getCurrent().asyncExec(new Runnable() {
+ public void run() {
+ XBranchSelectWidget.super.setDisplayLabel(displayLabel);
+ getLabelWidget().setText(displayLabel);
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setToolTip(java.lang.String)
+ */
+ @Override
+ public void setToolTip(final String toolTip) {
+ Display.getCurrent().asyncExec(new Runnable() {
+ public void run() {
+ if (Strings.isValid(toolTip) != false) {
+ XBranchSelectWidget.super.setToolTip(toolTip);
+ if (selectComposite != null && selectComposite.isDisposed() != true) {
+ selectComposite.setToolTipText(toolTip);
+ for (Control control : selectComposite.getChildren()) {
+ control.setToolTipText(toolTip);
+ }
+ }
+ }
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ @Override
+ public void handleEvent(Event event) {
+ super.setLabelError();
+ notifyListeners(event);
+ }
+
+ public void setDefaultBranch(String branchName) {
+ if (Strings.isValid(branchName) != false) {
+ try {
+ Branch branch = BranchManager.getBranch(branchName);
+ defaultBranchId = branch.getBranchId();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, "Unable to set default branch.", ex);
+ }
+ }
+ }
+
+ public void addListener(Listener listener) {
+ listeners.add(listener);
+ }
+
+ public void removeListener(Listener listener) {
+ listeners.remove(listener);
+ }
+
+ private void notifyListeners(Event event) {
+ for (Listener listener : listeners) {
+ listener.handleEvent(event);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectWidgetProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectWidgetProvider.java
new file mode 100644
index 00000000000..8999a88f37f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XBranchSelectWidgetProvider.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.IXWidgetProvider;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class XBranchSelectWidgetProvider implements IXWidgetProvider {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.IXWidgetProvider#createXWidget(java.lang.String, java.lang.String, boolean, org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData)
+ */
+ @Override
+ public XWidget createXWidget(String widgetName, String name, DynamicXWidgetLayoutData widgetLayoutData) {
+ XWidget toReturn = null;
+ if (widgetName.equals(XBranchSelectWidget.WIDGET_ID)) {
+ XBranchSelectWidget widget = new XBranchSelectWidget(name);
+ widget.setToolTip(widgetLayoutData.getToolTip());
+ widget.setDefaultBranch(widgetLayoutData.getDefaultValue());
+ toReturn = widget;
+ }
+ return toReturn;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCheckBox.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCheckBox.java
new file mode 100644
index 00000000000..a87ef52a6eb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCheckBox.java
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XCheckBox extends XWidget {
+
+ protected Button checkButton;
+ private Composite parent;
+ protected boolean selected = false;
+ private boolean labelAfter = true;
+
+ public XCheckBox(String displayLabel, String xmlRoot) {
+ super(displayLabel, xmlRoot);
+ }
+
+ public XCheckBox(String displayLabel) {
+ this(displayLabel, "");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return checkButton;
+ }
+
+ /**
+ * Create Check Widgets. Widgets Created: Label: "text entry" horizonatalSpan takes up 2 columns; horizontalSpan must
+ * be >=2
+ */
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ if (horizontalSpan < 2) {
+ horizontalSpan = 2;
+ }
+ this.parent = parent;
+
+ // Create Text Widgets
+ if (!labelAfter) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(label + ":");
+ }
+
+ checkButton = new Button(parent, SWT.CHECK);
+ GridData gd2 = new GridData(GridData.BEGINNING);
+ checkButton.setLayoutData(gd2);
+ checkButton.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent event) {
+ selected = checkButton.getSelection();
+ setLabelError();
+ notifyXModifiedListeners();
+ }
+ });
+ GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+ gd.horizontalSpan = horizontalSpan - 1;
+
+ if (labelAfter) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(label);
+ }
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ checkButton.setLayoutData(gd);
+ updateCheckWidget();
+ checkButton.setEnabled(isEditable());
+ }
+
+ @Override
+ public void dispose() {
+ labelWidget.dispose();
+ checkButton.dispose();
+ if (parent != null && !parent.isDisposed()) parent.layout();
+ }
+
+ public void setFocus() {
+ return;
+ }
+
+ public String getXmlData() {
+ if (get())
+ return "true";
+ else
+ return "false";
+ }
+
+ public String getReportData() {
+ return getXmlData();
+ }
+
+ public void setXmlData(String set) {
+ if (set.equals("true"))
+ set(true);
+ else
+ set(false);
+ }
+
+ public void addSelectionListener(SelectionListener selectionListener) {
+ checkButton.addSelectionListener(selectionListener);
+ }
+
+ public boolean get() {
+ if (checkButton == null || checkButton.isDisposed()) {
+ return selected;
+ } else {
+ return checkButton.getSelection();
+ }
+ }
+
+ private void updateCheckWidget() {
+ if (checkButton != null && !checkButton.isDisposed()) checkButton.setSelection(selected);
+ setLabelError();
+ }
+
+ public void set(boolean selected) {
+ this.selected = selected;
+ updateCheckWidget();
+ }
+
+ public void refresh() {
+ updateCheckWidget();
+ }
+
+ public Result isValid() {
+ return Result.TrueResult;
+ }
+
+ public String toHTML(String labelFont) {
+ return AHTML.getLabelStr(labelFont, label + ": ") + selected;
+ }
+
+ /**
+ * If set, label will be displayed after the checkbox NOTE: Has to be set before call to createWidgets
+ *
+ * @param labelAfter The labelAfter to set.
+ */
+ public void setLabelAfter(boolean labelAfter) {
+ this.labelAfter = labelAfter;
+ }
+
+ public Button getCheckButton() {
+ return checkButton;
+ }
+
+ public boolean isSelected() {
+ return selected;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return Boolean.valueOf(isSelected());
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCheckBoxDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCheckBoxDam.java
new file mode 100644
index 00000000000..1c2bb49eed6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCheckBoxDam.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.db.connection.exception.AttributeDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XCheckBoxDam extends XCheckBox implements IArtifactWidget {
+
+ private Artifact artifact;
+ private String attributeTypeName;
+
+ public XCheckBoxDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ public void setArtifact(Artifact artifact, String attrName) throws OseeCoreException {
+ this.artifact = artifact;
+ this.attributeTypeName = attrName;
+ try {
+ Boolean value = artifact.getSoleAttributeValue(attributeTypeName);
+ super.set(value);
+ } catch (AttributeDoesNotExist ex) {
+ super.set(false);
+ }
+ }
+
+ @Override
+ public void saveToArtifact() throws OseeCoreException {
+ try {
+ artifact.setSoleAttributeValue(attributeTypeName, checkButton.getSelection());
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#isDirty()
+ */
+ @Override
+ public Result isDirty() throws OseeCoreException {
+ try {
+ if (checkButton != null && checkButton.isDisposed() != true) {
+ Boolean enteredValue = checkButton.getSelection();
+ Boolean storedValue = artifact.getSoleAttributeValue(attributeTypeName);
+ if (enteredValue.booleanValue() != storedValue.booleanValue()) {
+ return new Result(true, attributeTypeName + " is dirty");
+ }
+ }
+ } catch (AttributeDoesNotExist ex) {
+ if (checkButton != null && checkButton.isDisposed() != true && checkButton.getSelection()) {
+ return new Result(true, attributeTypeName + " is dirty");
+ }
+ }
+ return Result.FalseResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#revert()
+ */
+ @Override
+ public void revert() throws OseeCoreException {
+ setArtifact(artifact, attributeTypeName);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCombo.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCombo.java
new file mode 100644
index 00000000000..fc19ed53f6f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XCombo.java
@@ -0,0 +1,356 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XCombo extends XWidget {
+
+ private Combo dataCombo;
+ private Composite parent;
+ protected String data = "";
+ protected String[] inDataStrings; // Strings sent in for display
+ //
+ private final Map<String, Integer> displayDataStrings = new HashMap<String, Integer>();
+ protected Map<String, String> dataStringToXmlString;
+ private String displayArray[];
+
+ public XCombo(String displayLabel, String xmlRoot, String xmlSubRoot) {
+ super(displayLabel, xmlRoot, xmlSubRoot);
+ }
+
+ public XCombo(String displayLabel, String xmlRoot) {
+ this(displayLabel, xmlRoot, "");
+ }
+
+ public XCombo(String displayLabel) {
+ this(displayLabel, "", "");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return dataCombo;
+ }
+
+ public void setEnabled(boolean enabled) {
+ dataCombo.setEnabled(enabled);
+ }
+
+ public void createWidgets(Composite composite, int horizontalSpan, String inDataStrings[]) {
+ this.inDataStrings = inDataStrings;
+ createWidgets(composite, horizontalSpan);
+ }
+
+ /**
+ * Create Data Widgets. Widgets Created: Data: "--select--" horizonatalSpan takes up 2 columns; horizontalSpan must
+ * be >=2 the string "--select--" will be added to the sent in dataStrings array
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+
+ GridData gd;
+ this.parent = parent;
+
+ if (inDataStrings == null) {
+ inDataStrings = new String[] {"DATA NOT FOUND"};
+ }
+ setDisplayDataStrings();
+
+ if (horizontalSpan < 2) {
+ horizontalSpan = 2;
+ }
+
+ // Create Data Widgets
+ if (!label.equals("")) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+
+ dataCombo = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
+ dataCombo.setItems(displayArray);
+ if (displayArray.length < 15) {
+ dataCombo.setVisibleItemCount(displayArray.length);
+ } else {
+ dataCombo.setVisibleItemCount(25);
+ }
+ gd = new GridData();
+ if (fillHorizontally) gd.grabExcessHorizontalSpace = true;
+ if (fillVertically) gd.grabExcessVerticalSpace = true;
+ gd.horizontalSpan = horizontalSpan - 1;
+ dataCombo.setLayoutData(gd);
+ ModifyListener dataComboListener = new ModifyListener() {
+
+ public void modifyText(ModifyEvent e) {
+ data = dataCombo.getText();
+ if (data.compareTo("--select--") == 0) {
+ data = "";
+ }
+ setLabelError();
+ notifyXModifiedListeners();
+ }
+ };
+ dataCombo.addModifyListener(dataComboListener);
+
+ refresh();
+ dataCombo.setEnabled(editable);
+ }
+
+ public int getDisplayPosition(String str) {
+ for (int i = 0; i < displayArray.length; i++) {
+ if (str.equals(displayArray[i])) return i;
+ }
+ return 0;
+ }
+
+ public int getDisplayPosition() {
+ for (int i = 0; i < displayArray.length; i++) {
+ if (data.equals(displayArray[i])) return i;
+ }
+ return 0;
+ }
+
+ public void setDataStrings(String[] inDataStrings) {
+ this.inDataStrings = inDataStrings;
+ setDisplayDataStrings();
+ if (dataCombo != null && !dataCombo.isDisposed()) {
+ dataCombo.setItems(displayArray);
+ if (displayArray.length < 15) dataCombo.setVisibleItemCount(displayArray.length);
+ }
+ updateComboWidget();
+ }
+
+ /**
+ * Given the inDataStrings, create the mapping of all data strings including "--select--" and map them to their index
+ * in the combo list.
+ */
+ private void setDisplayDataStrings() {
+ displayDataStrings.clear();
+ displayDataStrings.put("--select--", 0);
+ displayArray = new String[inDataStrings.length + 1];
+ displayArray[0] = "--select--";
+ for (int i = 0; i < inDataStrings.length; i++) {
+ displayDataStrings.put(inDataStrings[i], (i + 1));
+ displayArray[i + 1] = inDataStrings[i];
+ }
+ }
+
+ @Override
+ public void setFocus() {
+ if (dataCombo != null) dataCombo.setFocus();
+ }
+
+ public void setDataStringToXmlTranslations(Map<String, String> dataStringToXmlString) {
+ this.dataStringToXmlString = dataStringToXmlString;
+ }
+
+ @Override
+ public void setFromXml(String xml) throws IllegalStateException {
+ Matcher m;
+ if (xmlSubRoot.equals("")) {
+ m =
+ Pattern.compile("<" + xmlRoot + ">(.*?)</" + xmlRoot + ">", Pattern.MULTILINE | Pattern.DOTALL).matcher(
+ xml);
+ } else {
+ m =
+ Pattern.compile("<" + xmlRoot + "><" + xmlSubRoot + ">(.*?)</" + xmlSubRoot + "></" + xmlRoot + ">",
+ Pattern.MULTILINE | Pattern.DOTALL).matcher(xml);
+ }
+ while (m.find()) {
+ String str = m.group(1);
+ String transStr = null;
+ // If translation given, translate back to display string
+ // ie. bems number => full name
+ if (dataStringToXmlString != null) {
+ if (dataStringToXmlString.containsValue(str)) {
+ for (Iterator iter = dataStringToXmlString.entrySet().iterator(); iter.hasNext();) {
+ Map.Entry<String, String> entry = (Map.Entry<String, String>) iter.next();
+ if (str.equals(entry.getValue())) {
+ transStr = entry.getKey();
+ break;
+ }
+ }
+ }
+ }
+ if (transStr != null) {
+ set(transStr);
+ } else {
+ set(str);
+ }
+ break;
+ }
+ refresh();
+ }
+
+ @Override
+ public void refresh() {
+ updateComboWidget();
+ }
+
+ public void addModifyListener(ModifyListener modifyListener) {
+ if (dataCombo != null) dataCombo.addModifyListener(modifyListener);
+ }
+
+ public Combo getComboBox() {
+ return dataCombo;
+ }
+
+ /**
+ * @return selected display value (eg. Donald Dunne)
+ */
+ public String get() {
+ return data;
+ }
+
+ /**
+ * @return returns translated xml value (eg. 727536)
+ */
+ public String getXml() {
+ String s = "";
+ if (dataStringToXmlString == null) {
+ s = data;
+ } else {
+ s = dataStringToXmlString.get(data);
+ if (s == null) {
+ s = data;
+ }
+ }
+ return s;
+ }
+
+ @Override
+ public String getReportData() {
+ return data;
+ }
+
+ @Override
+ public String getXmlData() {
+ return getReportData();
+ }
+
+ @Override
+ public void setXmlData(String str) {
+ }
+
+ private void updateComboWidget() {
+ if (dataCombo != null && !dataCombo.isDisposed()) {
+ if (displayDataStrings.containsKey(data)) {
+ if (data.compareTo("") == 0) {
+ dataCombo.select(0);
+ } else {
+ Integer pos = displayDataStrings.get(data);
+ dataCombo.select(pos.intValue());
+ }
+ } else if (data.compareTo("") != 0) {
+ // if not found, add it and select it
+ displayDataStrings.put(data, displayDataStrings.size());
+ dataCombo.add(data);
+ dataCombo.select(displayDataStrings.size() - 1);
+ } else {
+ dataCombo.select(0);
+ }
+ if (displayDataStrings.size() < 15) dataCombo.setVisibleItemCount(displayDataStrings.size());
+ }
+ setLabelError();
+ }
+
+ public void set(String data) {
+ this.data = data;
+ updateComboWidget();
+ }
+
+ public void set(int pos) {
+ if (displayArray.length > pos) {
+ this.data = displayArray[pos];
+ updateComboWidget();
+ }
+ }
+
+ public void remove(String data) {
+ displayDataStrings.remove(data);
+ if (dataCombo.indexOf(data) >= 0) dataCombo.remove(data);
+ }
+
+ @Override
+ public Result isValid() {
+ if (requiredEntry && data.equals("")) {
+ return new Result(getLabel() + " must be selected.");
+ }
+ return Result.TrueResult;
+ }
+
+ @Override
+ public String toXml() {
+ return toXml(xmlRoot);
+ }
+
+ @Override
+ public String toXml(String xmlRoot) {
+ String s;
+ String dataStr = getXml();
+ if (xmlSubRoot == null || xmlSubRoot.equals("")) {
+ s = "<" + xmlRoot + ">" + dataStr + "</" + xmlRoot + ">\n";
+ } else {
+ s = "<" + xmlRoot + "><" + xmlSubRoot + ">" + dataStr + "</" + xmlSubRoot + "></" + xmlRoot + ">\n";
+ }
+ return s;
+ }
+
+ @Override
+ public String toHTML(String labelFont) {
+ return AHTML.getLabelStr(labelFont, label + ": ") + data;
+ }
+
+ public static void copy(XCombo from, XCombo to) throws IllegalStateException {
+ to.set(from.get());
+ }
+
+ @Override
+ public void dispose() {
+ if (labelWidget != null) labelWidget.dispose();
+ if (dataCombo != null) dataCombo.dispose();
+ if (labelWidget != null) labelWidget.dispose();
+ if (parent != null && !parent.isDisposed()) parent.layout();
+ }
+
+ public String[] getDisplayArray() {
+ return displayArray;
+ }
+
+ @Override
+ public Object getData() {
+ return dataCombo.getText();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboBooleanDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboBooleanDam.java
new file mode 100644
index 00000000000..fc3b1766680
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboBooleanDam.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.db.connection.exception.AttributeDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+public class XComboBooleanDam extends XCombo implements IArtifactWidget {
+
+ private Artifact artifact;
+ private String attributeTypeName;
+
+ public XComboBooleanDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ public void setArtifact(Artifact artifact, String attrName) throws OseeCoreException {
+ this.artifact = artifact;
+ this.attributeTypeName = attrName;
+ Boolean result = artifact.getSoleAttributeValue(attrName, null);
+ if (result == null)
+ super.set("");
+ else
+ super.set(result ? "yes" : "no");
+ }
+
+ @Override
+ public void saveToArtifact() throws OseeCoreException {
+ try {
+ if (data == null || data.equals("")) {
+ artifact.deleteSoleAttribute(attributeTypeName);
+ } else {
+ String enteredValue = get();
+ artifact.setSoleAttributeValue(attributeTypeName, (enteredValue != null && enteredValue.equals("yes")));
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#isDirty()
+ */
+ @Override
+ public Result isDirty() throws OseeCoreException {
+ try {
+ String enteredValue = get();
+ boolean storedValue = artifact.getSoleAttributeValue(attributeTypeName);
+ if (enteredValue.equals("yes") != storedValue) {
+ return new Result(true, attributeTypeName + " is dirty");
+ }
+ } catch (AttributeDoesNotExist ex) {
+ if (!get().equals("")) return new Result(true, attributeTypeName + " is dirty");
+ }
+ return Result.FalseResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#revert()
+ */
+ @Override
+ public void revert() throws OseeCoreException {
+ setArtifact(artifact, attributeTypeName);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboDam.java
new file mode 100644
index 00000000000..d363b7677df
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboDam.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.db.connection.exception.AttributeDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+public class XComboDam extends XCombo implements IArtifactWidget {
+
+ private Artifact artifact;
+ private String attributeTypeName;
+
+ public XComboDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ public void setArtifact(Artifact artifact, String attrName) throws OseeCoreException {
+ this.artifact = artifact;
+ this.attributeTypeName = attrName;
+ try {
+ String value = artifact.getSoleAttributeValue(attributeTypeName);
+ super.set(value.toString());
+ } catch (AttributeDoesNotExist ex) {
+ super.set("");
+ }
+ }
+
+ @Override
+ public void saveToArtifact() throws OseeCoreException {
+ try {
+ if (data == null || data.equals("")) {
+ artifact.deleteSoleAttribute(attributeTypeName);
+ } else {
+ String enteredValue = get();
+ artifact.setSoleAttributeValue(attributeTypeName, enteredValue);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#isDirty()
+ */
+ @Override
+ public Result isDirty() throws OseeCoreException {
+ try {
+ String enteredValue = get();
+ String storedValue = artifact.getSoleAttributeValue(attributeTypeName);
+ if (!enteredValue.equals(storedValue)) {
+ return new Result(true, attributeTypeName + " is dirty");
+ }
+ } catch (AttributeDoesNotExist ex) {
+ if (!get().equals("")) return new Result(true, attributeTypeName + " is dirty");
+ }
+ return Result.FalseResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#revert()
+ */
+ @Override
+ public void revert() throws OseeCoreException {
+ setArtifact(artifact, attributeTypeName);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboViewer.java
new file mode 100644
index 00000000000..6e953a1d6d3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XComboViewer.java
@@ -0,0 +1,291 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XComboViewer extends XWidget {
+
+ private ComboViewer comboViewer;
+ private Composite parent;
+ private Composite composite;
+ private boolean grabHorizontal = false;
+
+ protected SelectionListener listListener = new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ handleSelection();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ };
+ private Collection<Object> input;
+ private IContentProvider contentProvider;
+ private ILabelProvider labelProvider;
+ private ViewerSorter sorter;
+ private int widthHint;
+ private int heightHint;
+
+ public XComboViewer(String displayLabel) {
+ this(displayLabel, "list", "");
+ }
+
+ public XComboViewer() {
+ this("List", "list", "");
+ }
+
+ public XComboViewer(String displayLabel, String xmlRoot, String xmlSubRoot) {
+ super(displayLabel, xmlRoot, xmlSubRoot);
+ setReportType(XWidget.RPT_SINGLE_LINE);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return comboViewer.getControl();
+ }
+
+ public void setContentProvider(IContentProvider contentProvider) {
+ this.contentProvider = contentProvider;
+ }
+
+ public void setLabelProvider(ILabelProvider labelProvider) {
+ this.labelProvider = labelProvider;
+ }
+
+ public void setSorter(ViewerSorter sorter) {
+ this.sorter = sorter;
+ }
+
+ public void setInput(Collection<Object> input) {
+ this.input = input;
+ if (comboViewer != null) comboViewer.setInput(input);
+ }
+
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ comboViewer.addSelectionChangedListener(listener);
+ }
+
+ public void setHints(int widthHint, int heightHint) {
+ this.widthHint = widthHint;
+ this.heightHint = heightHint;
+ }
+
+ /**
+ * Create List Widgets. Widgets Created: List: horizonatalSpan takes up 2 columns; horizontalSpan must be >=2
+ */
+ public void createWidgets(Composite parent, int horizontalSpan) {
+
+ this.parent = parent;
+ composite = null;
+
+ if (!verticalLabel && (horizontalSpan < 2)) {
+ horizontalSpan = 2;
+ } else if (verticalLabel) {
+ horizontalSpan = 1;
+ }
+
+ if (displayLabel && verticalLabel) {
+ composite = new Composite(parent, SWT.NONE);
+ int numColumns = 1;
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = numColumns;
+ composite.setLayout(gridLayout);
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.horizontalSpan = horizontalSpan;
+ composite.setLayoutData(gd);
+ } else {
+ composite = parent;
+ }
+
+ // Create List Widgets
+ if (displayLabel) {
+ labelWidget = new Label(composite, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+
+ comboViewer = new ComboViewer(composite, SWT.NONE);
+ comboViewer.setContentProvider(contentProvider);
+ comboViewer.setLabelProvider(labelProvider);
+ if (sorter != null) comboViewer.setSorter(sorter);
+ comboViewer.setInput(input);
+ comboViewer.getCombo().addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ handleSelection();
+ }
+ });
+ GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+ if (grabHorizontal) gd.grabExcessHorizontalSpace = true;
+ if (widthHint > 0) gd.widthHint = widthHint;
+ if (heightHint > 0) gd.heightHint = heightHint;
+ comboViewer.getCombo().setLayoutData(gd);
+ comboViewer.getCombo().addSelectionListener(listListener);
+ updateListWidget();
+ }
+
+ @Override
+ public void dispose() {
+ labelWidget.dispose();
+ comboViewer.getCombo().dispose();
+ if (composite != null && !composite.isDisposed()) composite.dispose();
+ if (parent != null && !parent.isDisposed()) parent.layout();
+ }
+
+ public void setFocus() {
+ }
+
+ /**
+ * Don't need this since overriding toReport and toXml
+ */
+ public String getXmlData() {
+ return "";
+ }
+
+ /**
+ * Don't need this since overriding setFromXml
+ */
+ public void setXmlData(String str) {
+ return;
+ }
+
+ private void handleSelection() {
+ setLabelError();
+ notifyXModifiedListeners();
+ }
+
+ public void refresh() {
+ updateListWidget();
+ }
+
+ public void addSelectionListener(SelectionListener selectionListener) {
+ comboViewer.getCombo().addSelectionListener(selectionListener);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object getSelected() {
+ IStructuredSelection selection = (IStructuredSelection) comboViewer.getSelection();
+ Iterator iter = selection.iterator();
+ if (iter.hasNext()) return iter.next();
+ return null;
+ }
+
+ public void setFromXml(String xml) {
+ }
+
+ public Combo getCombo() {
+ return comboViewer.getCombo();
+ }
+
+ protected void updateListWidget() {
+ comboViewer.refresh();
+ setLabelError();
+ }
+
+ public void add(Object obj) {
+ input.add(obj);
+ }
+
+ public void add(Object[] names) {
+ for (Object name : names) {
+ add(name);
+ }
+ }
+
+ public void add(Collection<String> names) {
+ input.addAll(names);
+ }
+
+ public void setSelected(ArrayList<Object> selected) {
+ comboViewer.setSelection(new StructuredSelection(selected.toArray(new Object[selected.size()])));
+ updateListWidget();
+ }
+
+ public Result isValid() {
+ if (!requiredEntry) return Result.TrueResult;
+ Object selected = getSelected();
+ if (selected == null && isRequiredEntry()) return new Result("Must select " + getLabel());
+ return Result.TrueResult;
+ }
+
+ public String getReportData() {
+ String s = "\n";
+ Object obj = getSelected();
+ s = s + " - " + obj + "\n";
+ s = s.replaceAll("\n+$", "");
+ return s;
+ }
+
+ public String toXml() {
+ return toXml(xmlRoot, xmlSubRoot);
+ }
+
+ public String toXml(String xmlRoot, String xmlSubRoot) {
+ return "";
+ }
+
+ public String toHTML(String labelFont) {
+ String s = "<dl><dt>" + AHTML.getLabelStr(labelFont, label + ": ") + "<dt><ul type=\"disc\">";
+ Object xItem = getSelected();
+ s += "<li>" + xItem;
+ return s + "</ul></dl>";
+ }
+
+ /**
+ * @param grabHorizontal The grabHorizontal to set.
+ */
+ public void setGrabHorizontal(boolean grabHorizontal) {
+ this.grabHorizontal = grabHorizontal;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return getSelected();
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDate.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDate.java
new file mode 100644
index 00000000000..b55d7f48788
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDate.java
@@ -0,0 +1,337 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.nebula.widgets.calendarcombo.CalendarCombo;
+import org.eclipse.nebula.widgets.calendarcombo.CalendarListenerAdapter;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XDate extends XWidget {
+
+ private CalendarCombo dateCombo;
+ private Composite parent;
+ protected Date date;
+ public static String MMDDYY = "MM/dd/yyyy";
+ public static String MMDDYYHHMM = "MM/dd/yyyy hh:mm a";
+ public static String HHMMSS = "hh:mm:ss";
+ public static String HHMM = "hh:mm";
+ private String defaultFormat = MMDDYYHHMM;
+ private ArrayList<ModifyListener> listeners = new ArrayList<ModifyListener>();
+ private boolean requireFutureDate = false;
+
+ public XDate() {
+ this("", "");
+ }
+
+ public XDate(Date date) {
+ this("", "");
+ this.date = date;
+ }
+
+ public XDate(String displayLabel) {
+ this(displayLabel, "");
+ }
+
+ public XDate(String displayLabel, String xmlRoot) {
+ super(displayLabel, xmlRoot);
+ date = null;
+ }
+
+ public String getHHMM() {
+ return get(HHMM);
+ }
+
+ public String getHHMMSS() {
+ return get(HHMMSS);
+ }
+
+ public String getMMDDYY() {
+ return get(MMDDYY);
+ }
+
+ public String getMMDDYYHHMM() {
+ return get(MMDDYYHHMM);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return dateCombo;
+ }
+
+ /**
+ * Set the default format for the date ADate.MMMDDDYY or ADate MMMDDDYYYHHHMM or use java.util.date format string
+ *
+ * @param format
+ */
+ public void setFormat(String format) {
+ defaultFormat = format;
+ }
+
+ public void clearData() {
+ date = null;
+ }
+
+ public static String getDateStr(Date date, String format) {
+ if (date == null) return "";
+ return (new SimpleDateFormat(format)).format(date);
+ }
+
+ public static String getDateNow() {
+ return getDateNow(MMDDYY);
+ }
+
+ public static String getDateNow(String format) {
+ XDate d = new XDate();
+ d.setDateToNow();
+ return d.get(format);
+ }
+
+ /**
+ * Create Date Widgets Label/DatePickerCombo
+ *
+ * @param parent
+ * @param horizontalSpan - horizontalSpan takes up 4 columns, therefore horizontalSpan must be >=4
+ */
+ public void createWidgets(Composite parent, int horizontalSpan) {
+
+ // composite = new Composite(parent, parent.getStyle());
+ this.parent = parent;
+
+ if (horizontalSpan < 2) horizontalSpan = 2;
+
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(label + ": ");
+ dateCombo = new CalendarCombo(parent, SWT.BORDER);
+ dateCombo.setEnabled(true);
+ GridData gd = new GridData();
+ gd.widthHint = 100;
+ if (date != null) dateCombo.setDate(date);
+ dateCombo.addCalendarListener(new CalendarListenerAdapter() {
+ /* (non-Javadoc)
+ * @see org.eclipse.nebula.widgets.calendarcombo.CalendarListenerAdapter#dateChanged(java.util.Calendar)
+ */
+ @Override
+ public void dateChanged(Calendar newDate) {
+ super.dateChanged(newDate);
+ if (newDate == null)
+ date = null;
+ else
+ date = newDate.getTime();
+ setLabelError();
+ notifyXModifiedListeners();
+ dateCombo.getParent().layout();
+ }
+ });
+
+ }
+
+ @Override
+ public void dispose() {
+ labelWidget.dispose();
+ if (parent != null && !parent.isDisposed()) parent.layout();
+ }
+
+ public void setFromXml(String xml) {
+ Matcher m =
+ Pattern.compile("<" + xmlRoot + ">(\\d+)</" + xmlRoot + ">", Pattern.MULTILINE | Pattern.DOTALL).matcher(
+ xml);
+ if (m.find()) {
+ try {
+ Long l = new Long(m.group(1));
+ date = new Date(l.longValue());
+ } catch (NumberFormatException e) {
+ e.printStackTrace();
+ }
+ }
+ refresh();
+ }
+
+ public void addModifyListener(ModifyListener listener) {
+ listeners.add(listener);
+ updateListeners();
+ }
+
+ public void updateListeners() {
+ for (ModifyListener listener : listeners) {
+ if (dateCombo != null) {
+ dateCombo.removeModifyListener(listener);
+ dateCombo.addModifyListener(listener);
+ }
+ }
+ }
+
+ public void clear() {
+ date = new Date();
+ refresh();
+ }
+
+ public Date getDate() {
+ return date;
+ }
+
+ public void setDateToNow() {
+ setDate(new java.util.Date());
+ }
+
+ public void setDate(Date date) {
+ this.date = date;
+ if (dateCombo != null && !dateCombo.isDisposed()) {
+ if (dateCombo != null)
+ dateCombo.setDate(date);
+ else
+ dateCombo.setDate((Date) null);
+ }
+ }
+
+ public void refresh() {
+ setLabelError();
+ }
+
+ public Result isValid() {
+ if (isRequireFutureDate()) {
+ if (getDate().before(new Date())) return new Result(getLabel() + " must be in future.");
+ }
+ if (requiredEntry) {
+ if (get().equals("")) return new Result(getLabel() + " must be selected.");
+ }
+ return Result.TrueResult;
+ }
+
+ public String getReportData() {
+ return get();
+ }
+
+ public String get() {
+ if (date == null) return "";
+ return date.toString();
+ }
+
+ public String get(String pattern) {
+ return get(new SimpleDateFormat(pattern));
+ }
+
+ public String get(DateFormat dateFormat) {
+ if (date == null) return "";
+ String result = dateFormat.format(date);
+ return result;
+ }
+
+ public void setFocus() {
+ if (dateCombo != null) dateCombo.setFocus();
+ }
+
+ /**
+ * Don't need this since overriding toReport and toXml
+ */
+ public String getXmlData() {
+ String dateStr = "";
+ if (date != null) dateStr = date.getTime() + "";
+ return dateStr;
+ }
+
+ /**
+ * Don't need this since overriding setFromXml
+ */
+ public void setXmlData(String str) {
+ if (str.equals(""))
+ date = null;
+ else {
+ try {
+ Long l = new Long(str);
+ date = new Date(l.longValue());
+ } catch (NumberFormatException e) {
+ e.printStackTrace();
+ date = null;
+ }
+ }
+ }
+
+ public String toHTML(String labelFont) {
+ return AHTML.getLabelStr(labelFont, label + ": ") + get(defaultFormat);
+ }
+
+ public String toHTML(String labelFont, String pattern) {
+ return AHTML.getLabelStr(labelFont, label + ": ") + get(pattern);
+ }
+
+ public boolean isRequireFutureDate() {
+ return requireFutureDate;
+ }
+
+ public void setRequireFutureDate(boolean requireFutureDate) {
+ this.requireFutureDate = requireFutureDate;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return getDate();
+ }
+
+ public int getDifference(Date date) {
+ return calculateDifference(getDate(), date);
+ }
+
+ public static int calculateDifference(Date a, Date b) {
+ int tempDifference = 0;
+ int difference = 0;
+ Calendar earlier = Calendar.getInstance();
+ Calendar later = Calendar.getInstance();
+
+ if (a.compareTo(b) < 0) {
+ earlier.setTime(a);
+ later.setTime(b);
+ } else {
+ earlier.setTime(b);
+ later.setTime(a);
+ }
+
+ while (earlier.get(Calendar.YEAR) != later.get(Calendar.YEAR)) {
+ tempDifference = 365 * (later.get(Calendar.YEAR) - earlier.get(Calendar.YEAR));
+ difference += tempDifference;
+
+ earlier.add(Calendar.DAY_OF_YEAR, tempDifference);
+ }
+
+ if (earlier.get(Calendar.DAY_OF_YEAR) != later.get(Calendar.DAY_OF_YEAR)) {
+ tempDifference = later.get(Calendar.DAY_OF_YEAR) - earlier.get(Calendar.DAY_OF_YEAR);
+ difference += tempDifference;
+
+ earlier.add(Calendar.DAY_OF_YEAR, tempDifference);
+ }
+
+ return difference;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDateDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDateDam.java
new file mode 100644
index 00000000000..fd209cf3469
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDateDam.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.Date;
+import org.eclipse.osee.framework.db.connection.exception.AttributeDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+public class XDateDam extends XDate implements IArtifactWidget {
+
+ private Artifact artifact;
+ private String attributeTypeName;
+
+ public XDateDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ public void setArtifact(Artifact artifact, String attrName) throws OseeCoreException {
+ this.artifact = artifact;
+ this.attributeTypeName = attrName;
+ try {
+ Date value = artifact.getSoleAttributeValue(attributeTypeName);
+ super.setDate(value);
+ } catch (AttributeDoesNotExist ex) {
+ // do nothing
+ }
+ }
+
+ @Override
+ public void saveToArtifact() throws OseeCoreException {
+ try {
+ if (date == null || date.equals("")) {
+ artifact.deleteSoleAttribute(attributeTypeName);
+ } else {
+ Date enteredValue = getDate();
+ artifact.setSoleAttributeValue(attributeTypeName, enteredValue);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#isDirty()
+ */
+ @Override
+ public Result isDirty() throws OseeCoreException {
+ try {
+ Date enteredValue = getDate();
+ Date storedValue = artifact.getSoleAttributeValue(attributeTypeName);
+ if (enteredValue == null && storedValue == null) return Result.FalseResult;
+ if (enteredValue == null && storedValue != null) return new Result(true, attributeTypeName + " is dirty");
+ if (enteredValue != null && storedValue == null) return new Result(true, attributeTypeName + " is dirty");
+ if (enteredValue.getTime() != storedValue.getTime()) {
+ return new Result(true, attributeTypeName + " is dirty");
+ }
+ } catch (AttributeDoesNotExist ex) {
+ if (getDate() != null) return new Result(true, attributeTypeName + " is dirty");
+ }
+ return Result.FalseResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#revert()
+ */
+ @Override
+ public void revert() throws OseeCoreException {
+ setArtifact(artifact, attributeTypeName);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDragAndDrop.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDragAndDrop.java
new file mode 100644
index 00000000000..46dfc1e6d37
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XDragAndDrop.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class XDragAndDrop extends SkynetDragAndDrop {
+
+ /**
+ * @param control
+ * @param viewId
+ */
+ public XDragAndDrop(Control control, String viewId) {
+ super(control, viewId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop#getArtifacts()
+ */
+ @Override
+ public Artifact[] getArtifacts() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop#performArtifactDrop(org.eclipse.osee.framework.skynet.core.artifact.Artifact[])
+ */
+ @Override
+ public void performArtifactDrop(Artifact[] dropArtifacts) {
+
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFileSelectionDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFileSelectionDialog.java
new file mode 100644
index 00000000000..2fe4e53517f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFileSelectionDialog.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.io.File;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XFileSelectionDialog extends XText {
+
+ private String defaultFileSelection;
+
+ public XFileSelectionDialog() {
+ super();
+ }
+
+ /**
+ * @param displayLabel
+ */
+ public XFileSelectionDialog(String displayLabel) {
+ super(displayLabel);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XText#createWidgets(org.eclipse.swt.widgets.Composite, int, boolean)
+ */
+ @Override
+ public void createWidgets(final Composite parent, int horizontalSpan, boolean fillText) {
+ super.createWidgets(parent, horizontalSpan, fillText);
+
+ Button fileDialog = new Button(getStyledText().getParent(), SWT.NONE);
+ fileDialog.setText("Select File");
+ fileDialog.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(), SWT.OPEN);
+ dialog.setFilterExtensions(new String[] {"*.*"});
+ String defaultDir = getDefaultFileSelection();
+ File dir = new File(defaultDir != null ? defaultDir : "");
+ if (dir.isFile() || dir.isDirectory())
+ dialog.setFilterPath(defaultDir);
+ else
+ dialog.setFilterPath("c:\\");
+
+ String result = dialog.open();
+ if (result != null && !result.equals("")) {
+ setText(dialog.getFilterPath() + File.separatorChar + dialog.getFileName());
+ }
+ }
+ });
+ }
+
+ /**
+ * @return the defaultFileSelection
+ */
+ public String getDefaultFileSelection() {
+ return defaultFileSelection;
+ }
+
+ /**
+ * @param defaultFileSelection the defaultFileSelection to set
+ */
+ public void setDefaultFileSelection(String defaultFileSelection) {
+ this.defaultFileSelection = defaultFileSelection;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFloat.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFloat.java
new file mode 100644
index 00000000000..237751540aa
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFloat.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XFloat extends XText {
+ private double minValue = 0;
+ private boolean minValueSet = false;
+ private double maxValue = 0;
+ private boolean maxValueSet = false;
+
+ public XFloat(String displayLabel) {
+ super(displayLabel, "float");
+ }
+
+ public XFloat(String displayLabel, String xmlRoot) {
+ super(displayLabel, xmlRoot);
+ }
+
+ public void setMinValue(double minValue) {
+ minValueSet = true;
+ this.minValue = minValue;
+ }
+
+ public void setMaxValue(double maxValue) {
+ maxValueSet = false;
+ this.maxValue = maxValue;
+ }
+
+ public double getFloat() {
+ if (get().equals(""))
+ return 0.0;
+ else
+ return new Double(get());
+ }
+
+ public Result isValid() {
+ if (super.requiredEntry() || (super.get().compareTo("") != 0)) {
+ String name = getLabel();
+ if (name.equals("")) name = "Value";
+ Result result = super.isValid();
+ if (result.isFalse()) {
+ return result;
+ } else if (!this.isFloat()) {
+ return new Result(name + " must be a Float");
+ } else if (minValueSet && (this.getFloat() < minValue)) {
+ return new Result(name + " must be >= " + minValue);
+ } else if (maxValueSet && (this.getFloat() > maxValue)) {
+ return new Result(name + " must be <= " + maxValue);
+ }
+ }
+ return Result.TrueResult;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFloatDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFloatDam.java
new file mode 100644
index 00000000000..3e7e2e6ac42
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XFloatDam.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.db.connection.exception.AttributeDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XFloatDam extends XFloat implements IArtifactWidget {
+
+ private Artifact artifact;
+ private String attributeTypeName;
+
+ /**
+ * @param displayLabel
+ */
+ public XFloatDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ /**
+ * @param displayLabel
+ * @param xmlRoot
+ */
+ public XFloatDam(String displayLabel, String xmlRoot) {
+ super(displayLabel, xmlRoot);
+ }
+
+ public void setArtifact(Artifact artifact, String attrName) throws OseeCoreException {
+ this.artifact = artifact;
+ this.attributeTypeName = attrName;
+ try {
+ Double value = artifact.getSoleAttributeValue(attributeTypeName);
+ super.set(value.toString());
+ } catch (AttributeDoesNotExist ex) {
+ super.set("");
+ }
+ }
+
+ @Override
+ public void saveToArtifact() throws OseeCoreException {
+ try {
+ if (text == null || text.equals("")) {
+ artifact.deleteSoleAttribute(attributeTypeName);
+ } else {
+ Double enteredValue = getFloat();
+ artifact.setSoleAttributeValue(attributeTypeName, enteredValue);
+ }
+ } catch (NumberFormatException ex) {
+ // do nothing
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#isDirty()
+ */
+ @Override
+ public Result isDirty() throws OseeCoreException {
+ try {
+ Double enteredValue = getFloat();
+ Double storedValue = artifact.getSoleAttributeValue(attributeTypeName);
+ if (enteredValue.doubleValue() != storedValue.doubleValue()) {
+ return new Result(true, attributeTypeName + " is dirty");
+ }
+ } catch (AttributeDoesNotExist ex) {
+ if (!get().equals("")) return new Result(true, attributeTypeName + " is dirty");
+ } catch (NumberFormatException ex) {
+ // do nothing
+ }
+ return Result.FalseResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#revert()
+ */
+ @Override
+ public void revert() throws OseeCoreException {
+ setArtifact(artifact, attributeTypeName);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelGroupSelection.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelGroupSelection.java
new file mode 100644
index 00000000000..a332f2a7d00
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelGroupSelection.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.GroupListDialog;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XHyperlabelGroupSelection extends XHyperlinkLabelSelection {
+
+ public static final String WIDGET_ID = XHyperlabelGroupSelection.class.getSimpleName();
+ Set<Artifact> selectedGroups = new HashSet<Artifact>();
+
+ /**
+ * @param label
+ */
+ public XHyperlabelGroupSelection(String label) {
+ super(label);
+ }
+
+ public Set<Artifact> getSelectedGroups() {
+ return selectedGroups;
+ }
+
+ @Override
+ public String getCurrentValue() {
+ StringBuffer sb = new StringBuffer();
+ for (Artifact user : selectedGroups)
+ sb.append(user.getDescriptiveName() + ", ");
+ return sb.toString().replaceFirst(", $", "");
+ }
+
+ public void setSelectedUsers(Set<Artifact> selectedUsers) {
+ this.selectedGroups = selectedUsers;
+ refresh();
+ }
+
+ @Override
+ public boolean handleSelection() {
+ try {
+ GroupListDialog dialog = new GroupListDialog(Display.getCurrent().getActiveShell());
+ dialog.setRequireSelection(false);
+ int result = dialog.open();
+ if (result == 0) {
+ selectedGroups.clear();
+ for (Object obj : dialog.getResult()) {
+ selectedGroups.add((Artifact) obj);
+ }
+ notifyXModifiedListeners();
+ }
+ return true;
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return false;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelMemberSelDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelMemberSelDam.java
new file mode 100644
index 00000000000..d293e6a7784
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelMemberSelDam.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.db.connection.exception.AttributeDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AXml;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.widgets.Composite;
+
+public class XHyperlabelMemberSelDam extends XHyperlabelMemberSelection implements IArtifactWidget {
+
+ private Artifact artifact;
+ private String attributeTypeName;
+
+ public XHyperlabelMemberSelDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ public void setArtifact(Artifact artifact, String attrName) {
+ this.artifact = artifact;
+ this.attributeTypeName = attrName;
+
+ super.setSelectedUsers(getUsers());
+ }
+
+ public Set<User> getUsers() {
+ Set<User> users = new HashSet<User>();
+ try {
+ Matcher m =
+ Pattern.compile("<userId>(.*?)</userId>").matcher(artifact.getSoleAttributeValue(attributeTypeName, ""));
+ while (m.find()) {
+ users.add(UserManager.getUserByUserId(m.group(1)));
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ return users;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XText#createWidgets(org.eclipse.swt.widgets.Composite, int,
+ * boolean)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ super.createWidgets(parent, horizontalSpan);
+ }
+
+ @Override
+ public void saveToArtifact() throws OseeCoreException {
+ try {
+ String selectedStrValue = getSelectedStringValue();
+ if (selectedStrValue == null || selectedStrValue.equals("")) {
+ artifact.deleteSoleAttribute(attributeTypeName);
+ } else {
+ artifact.setSoleAttributeValue(attributeTypeName, selectedStrValue);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ public String getSelectedStringValue() throws OseeCoreException {
+ StringBuffer sb = new StringBuffer();
+ for (User user : getSelectedUsers()) {
+ sb.append(AXml.addTagData("userId", user.getUserId()));
+ }
+ return sb.toString();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#isDirty()
+ */
+ @Override
+ public Result isDirty() throws OseeCoreException {
+ try {
+ String enteredValue = getSelectedStringValue();
+ String storedValue = artifact.getSoleAttributeValue(attributeTypeName);
+ if (!enteredValue.equals(storedValue)) {
+ return new Result(true, attributeTypeName + " is dirty");
+ }
+ } catch (AttributeDoesNotExist ex) {
+ if (!artifact.getSoleAttributeValue(attributeTypeName, "").equals("")) return new Result(true,
+ attributeTypeName + " is dirty");
+ } catch (NumberFormatException ex) {
+ // do nothing
+ }
+ return Result.FalseResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#revert()
+ */
+ @Override
+ public void revert() throws OseeCoreException {
+ setArtifact(artifact, attributeTypeName);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelMemberSelection.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelMemberSelection.java
new file mode 100644
index 00000000000..df0203d91a5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlabelMemberSelection.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.UserCheckTreeDialog;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XHyperlabelMemberSelection extends XHyperlinkLabelSelection {
+
+ Set<User> selectedUsers = new HashSet<User>();
+
+ /**
+ * @param label
+ */
+ public XHyperlabelMemberSelection(String label) {
+ super(label);
+ }
+
+ public Set<User> getSelectedUsers() {
+ return selectedUsers;
+ }
+
+ @Override
+ public String getCurrentValue() {
+ StringBuffer sb = new StringBuffer();
+ for (User user : selectedUsers)
+ sb.append(user.getName() + ", ");
+ return sb.toString().replaceFirst(", $", "");
+ }
+
+ public void setSelectedUsers(Set<User> selectedUsers) {
+ this.selectedUsers = selectedUsers;
+ refresh();
+ }
+
+ @Override
+ public boolean handleSelection() {
+ try {
+ UserCheckTreeDialog uld = new UserCheckTreeDialog(Display.getCurrent().getActiveShell());
+ uld.setMessage("Select to assign.\nDeSelect to un-assign.");
+ uld.setInitialSelections(selectedUsers);
+ if (uld.open() != 0) return false;
+ selectedUsers.clear();
+ for (Artifact art : uld.getSelection()) {
+ selectedUsers.add((User) art);
+ }
+ return true;
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return false;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlinkLabelSelection.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlinkLabelSelection.java
new file mode 100644
index 00000000000..ad1eaf856a0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XHyperlinkLabelSelection.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class XHyperlinkLabelSelection extends XWidget {
+
+ Label valueLabel;
+ HyperLinkLabel hyperLinkLabel;
+
+ /**
+ * @param label
+ */
+ public XHyperlinkLabelSelection(String label) {
+ super(label);
+ }
+
+ public String getCurrentValue() {
+ return "";
+ }
+
+ public String getHyperlinkLabelString() {
+ return " (select) ";
+ }
+
+ public boolean handleSelection() {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#createWidgets(org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+
+ Composite comp = new Composite(parent, SWT.NONE);
+ comp.setLayout(ALayout.getZeroMarginLayout(3, false));
+ comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ // Create Text Widgets
+ if (displayLabel && !label.equals("")) {
+ labelWidget = new Label(comp, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+
+ hyperLinkLabel = new HyperLinkLabel(comp, SWT.NONE);
+ hyperLinkLabel.setToolTipText("Select to Modify");
+ hyperLinkLabel.addListener(SWT.MouseUp, new Listener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ public void handleEvent(Event event) {
+ if (handleSelection()) {
+ refresh();
+ notifyXModifiedListeners();
+ }
+ }
+ });
+ valueLabel = new Label(comp, SWT.NONE);
+ valueLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ valueLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
+
+ refresh();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#refresh()
+ */
+ @Override
+ public void refresh() {
+ hyperLinkLabel.refresh();
+ hyperLinkLabel.setText(getHyperlinkLabelString());
+ valueLabel.setText(getCurrentValue());
+ valueLabel.getParent().layout();
+ setLabelError();
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return valueLabel;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#adaptControls(org.eclipse.ui.forms.widgets.FormToolkit)
+ */
+ @Override
+ public void adaptControls(FormToolkit toolkit) {
+ super.adaptControls(toolkit);
+ toolkit.adapt(hyperLinkLabel, true, true);
+ hyperLinkLabel.refresh();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#toHTML(java.lang.String)
+ */
+ @Override
+ public String toHTML(String labelFont) {
+ return AHTML.getLabelValueStr(AHTML.LABEL_FONT, getHyperlinkLabelString(), getCurrentValue());
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#dispose()
+ */
+ @Override
+ public void dispose() {
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#getReportData()
+ */
+ @Override
+ public String getReportData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#getXmlData()
+ */
+ @Override
+ public String getXmlData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#isValid()
+ */
+ @Override
+ public Result isValid() {
+ return Result.TrueResult;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#setXmlData(java.lang.String)
+ */
+ @Override
+ public void setXmlData(String str) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XInteger.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XInteger.java
new file mode 100644
index 00000000000..f8e57e3820a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XInteger.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XInteger extends XText {
+ private int minValue = 0;
+ private boolean minValueSet = false;
+ private int maxValue = 0;
+ private boolean maxValueSet = false;
+
+ public XInteger(String displayLabel) {
+ this(displayLabel, "");
+ }
+
+ public XInteger(String displayLabel, String xmlRoot) {
+ super(displayLabel, xmlRoot);
+ }
+
+ public void setMinValue(int minValue) {
+ minValueSet = true;
+ this.minValue = minValue;
+ }
+
+ public void setMaxValue(int maxValue) {
+ maxValueSet = false;
+ this.maxValue = maxValue;
+ }
+
+ public Result isValid() {
+ if (super.requiredEntry() || (super.get().compareTo("") != 0)) {
+ Result result = super.isValid();
+ if (result.isFalse()) {
+ return result;
+ } else if (!this.isInteger()) {
+ return new Result("Must be an Integer");
+ } else if (minValueSet && (this.getInteger() < minValue)) {
+ return new Result("Must be >= " + minValue);
+ } else if (maxValueSet && (this.getInteger() > maxValue)) {
+ return new Result("Must be <= " + maxValue);
+ }
+ }
+ return Result.TrueResult;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XIntegerDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XIntegerDam.java
new file mode 100644
index 00000000000..1912782551f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XIntegerDam.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.db.connection.exception.AttributeDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+public class XIntegerDam extends XInteger implements IArtifactWidget {
+
+ private Artifact artifact;
+ private String attributeTypeName;
+
+ public XIntegerDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ public void setArtifact(Artifact artifact, String attrName) throws OseeCoreException {
+ this.artifact = artifact;
+ this.attributeTypeName = attrName;
+ try {
+ Integer value = artifact.getSoleAttributeValue(attributeTypeName);
+ super.set(value.toString());
+ } catch (AttributeDoesNotExist ex) {
+ super.set("");
+ }
+ }
+
+ @Override
+ public void saveToArtifact() throws OseeCoreException {
+ try {
+ if (text == null || text.equals("")) {
+ artifact.deleteSoleAttribute(attributeTypeName);
+ } else {
+ Integer enteredValue = getInteger();
+ artifact.setSoleAttributeValue(attributeTypeName, enteredValue);
+ }
+ } catch (NumberFormatException ex) {
+ // do nothing
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#isDirty()
+ */
+ @Override
+ public Result isDirty() throws OseeCoreException {
+ try {
+ Integer enteredValue = getInteger();
+ Integer storedValue = artifact.getSoleAttributeValue(attributeTypeName);
+ if (enteredValue.doubleValue() != storedValue.doubleValue()) {
+ return new Result(true, attributeTypeName + " is dirty");
+ }
+ } catch (AttributeDoesNotExist ex) {
+ if (!get().equals("")) return new Result(true, attributeTypeName + " is dirty");
+ } catch (NumberFormatException ex) {
+ // do nothing
+ }
+ return Result.FalseResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#revert()
+ */
+ @Override
+ public void revert() throws OseeCoreException {
+ setArtifact(artifact, attributeTypeName);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XLabel.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XLabel.java
new file mode 100644
index 00000000000..f852b38b1e7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XLabel.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * Simply shows the label name and nothing else. No storage or value associated with this widget.
+ *
+ * @author Donald G. Dunne
+ */
+public class XLabel extends XWidget {
+
+ public XLabel(String displayLabel) {
+ super(displayLabel, "");
+ }
+
+ /**
+ * Create Data Widgets. Widgets Created: Data: "--select--" horizonatalSpan takes up 2 columns; horizontalSpan must
+ * be >=2 the string "--select--" will be added to the sent in dataStrings array
+ */
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ if (horizontalSpan < 2) horizontalSpan = 2;
+ // Create Data Widgets
+ if (!label.equals("")) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(label);
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+ }
+
+ public void setFocus() {
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#dispose()
+ */
+ @Override
+ public void dispose() {
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return labelWidget;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#getReportData()
+ */
+ @Override
+ public String getReportData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#getXmlData()
+ */
+ @Override
+ public String getXmlData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#isValid()
+ */
+ @Override
+ public Result isValid() {
+ return Result.TrueResult;
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#refresh()
+ */
+ @Override
+ public void refresh() {
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#setXmlData(java.lang.String)
+ */
+ @Override
+ public void setXmlData(String str) {
+ }
+
+ /* (non-Javadoc)
+ * @see osee.skynet.gui.widgets.XWidget#toHTML(java.lang.String)
+ */
+ @Override
+ public String toHTML(String labelFont) {
+ return "";
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XLabelDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XLabelDam.java
new file mode 100644
index 00000000000..46b4ccc7840
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XLabelDam.java
@@ -0,0 +1,159 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Provided to show the contents of an attribute without any ability to edit
+ *
+ * @author Donald G. Dunne
+ */
+public class XLabelDam extends XWidget implements IArtifactWidget {
+
+ private Artifact artifact;
+ private String attributeTypeName;
+ private Text valueTextWidget;
+ private Composite parent;
+
+ public XLabelDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ @Override
+ public Control getControl() {
+ return valueTextWidget;
+ }
+
+ public void createWidgets(Composite parent, int horizontalSpan) {
+
+ this.parent = parent;
+ if (horizontalSpan < 2) horizontalSpan = 2;
+ // Create Data Widgets
+ if (!label.equals("")) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+ valueTextWidget = new Text(parent, SWT.NONE);
+ valueTextWidget.setEditable(false);
+
+ refresh();
+ }
+
+ public void setArtifact(Artifact artifact, String attrName) {
+ this.artifact = artifact;
+ this.attributeTypeName = attrName;
+
+ refresh();
+ }
+
+ @Override
+ public void saveToArtifact() {
+ // Do nothing cause labelDam is read-only
+ }
+
+ @Override
+ public Result isDirty() {
+ return Result.FalseResult;
+ }
+
+ public void refresh() {
+ if (artifact != null && valueTextWidget != null && !valueTextWidget.isDisposed()) {
+ try {
+ valueTextWidget.setText(artifact.getAttributesToString(attributeTypeName));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ public void dispose() {
+ if (labelWidget != null) labelWidget.dispose();
+ if (valueTextWidget != null) valueTextWidget.dispose();
+ if (parent != null && !parent.isDisposed()) parent.layout();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getReportData()
+ */
+ @Override
+ public String getReportData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getXmlData()
+ */
+ @Override
+ public String getXmlData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#isValid()
+ */
+ @Override
+ public Result isValid() {
+ return Result.TrueResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setXmlData(java.lang.String)
+ */
+ @Override
+ public void setXmlData(String str) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#toHTML(java.lang.String)
+ */
+ @Override
+ public String toHTML(String labelFont) {
+ return "";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return valueTextWidget.getText();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#revert()
+ */
+ @Override
+ public void revert() {
+ // Do nothing cause labelDam is read-only
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XList.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XList.java
new file mode 100644
index 00000000000..a4f38cd9a27
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XList.java
@@ -0,0 +1,471 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Menu;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XList extends XWidget {
+
+ public class XListItem {
+ private String name = "";
+ private String xmlValue = null;
+ private Object data = null;
+ private boolean selected = false;
+
+ public XListItem(String name) {
+ this.name = name;
+ }
+
+ public String toString() {
+ return name;
+ }
+
+ public Object getData() {
+ return data;
+ }
+
+ public void setData(Object data) {
+ this.data = data;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean isSelected() {
+ return selected;
+ }
+
+ public void setSelected(boolean selected) {
+ this.selected = selected;
+ }
+
+ public String getXmlValue() {
+ return xmlValue;
+ }
+
+ public void setXmlValue(String xmlValue) {
+ this.xmlValue = xmlValue;
+ }
+ }
+
+ private List listList;
+ private Menu listMenu;
+ private Composite parent;
+ private Composite composite;
+ private Map<String, XListItem> items = new HashMap<String, XListItem>();
+ private int requiredMinSelected = 0;
+ private int requiredMaxSelected = 0;
+ private boolean grabHorizontal = false;
+
+ protected SelectionListener listListener = new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ handleSelection();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ };
+
+ public XList(String displayLabel) {
+ this(displayLabel, "list", "");
+ }
+
+ public XList() {
+ this("List", "list", "");
+ }
+
+ public XList(String displayLabel, String xmlRoot, String xmlSubRoot) {
+ super(displayLabel, xmlRoot, xmlSubRoot);
+ setReportType(XWidget.RPT_SINGLE_LINE);
+ listMenu = null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return listList;
+ }
+
+ /**
+ * @param listMenu The listMenu to set.
+ */
+ public void setListMenu(Menu listMenu) {
+ this.listMenu = listMenu;
+ }
+
+ /**
+ * Create List Widgets. Widgets Created: List: horizonatalSpan takes up 2 columns; horizontalSpan must be >=2
+ */
+ public void createWidgets(Composite parent, int horizontalSpan) {
+
+ this.parent = parent;
+ composite = null;
+
+ if (!verticalLabel && (horizontalSpan < 2)) {
+ horizontalSpan = 2;
+ } else if (verticalLabel) {
+ horizontalSpan = 1;
+ }
+
+ if (displayLabel && verticalLabel) {
+ composite = new Composite(parent, SWT.NONE);
+ int numColumns = 1;
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = numColumns;
+ composite.setLayout(gridLayout);
+ GridData gd =
+ new GridData(
+ GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
+ gd.horizontalSpan = horizontalSpan;
+ composite.setLayoutData(gd);
+ } else {
+ composite = parent;
+ }
+
+ // Create List Widgets
+ if (displayLabel) {
+ labelWidget = new Label(composite, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+
+ listList = new List(composite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
+ String array[] = (String[]) items.keySet().toArray(new String[items.size()]);
+ java.util.Arrays.sort(array);
+ listList.setMenu(listMenu);
+ listList.setItems(array);
+ GridData gridData5 = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
+ gridData5.verticalSpan = 10;
+ if (grabHorizontal) {
+ gridData5.grabExcessHorizontalSpace = true;
+ }
+ int listHeight = listList.getItemHeight() * 6;
+ Rectangle trim = listList.computeTrim(0, 0, 0, listHeight);
+ gridData5.heightHint = trim.height;
+ gridData5.grabExcessVerticalSpace = true;
+ listList.setLayoutData(gridData5);
+ listList.addSelectionListener(listListener);
+ updateListWidget();
+ listList.setEnabled(isEditable());
+ }
+
+ @Override
+ public void dispose() {
+ labelWidget.dispose();
+ listList.dispose();
+ if (composite != parent) composite.dispose();
+ if (parent != null && !parent.isDisposed()) parent.layout();
+ }
+
+ public void setFocus() {
+ }
+
+ /**
+ * Don't need this since overriding toReport and toXml
+ */
+ public String getXmlData() {
+ return "";
+ }
+
+ /**
+ * Don't need this since overriding setFromXml
+ */
+ public void setXmlData(String str) {
+ return;
+ }
+
+ private void handleSelection() {
+ String sels[] = listList.getSelection();
+ for (XListItem xItem : items.values())
+ xItem.setSelected(false);
+ for (String sel : sels) {
+ XListItem xItem = items.get(sel);
+ if (xItem != null) xItem.setSelected(true);
+ }
+ setLabelError();
+
+ notifyXModifiedListeners();
+ }
+
+ public void refresh() {
+ updateListWidget();
+ }
+
+ public void addSelectionListener(SelectionListener selectionListener) {
+ listList.addSelectionListener(selectionListener);
+ }
+
+ public Set<XListItem> getSelected() {
+ Set<XListItem> sel = new HashSet<XListItem>();
+ for (XListItem xItem : items.values()) {
+ if (xItem.isSelected()) sel.add(xItem);
+ }
+ return sel;
+ }
+
+ public void setFromXml(String xml) {
+ Matcher inner, outter;
+ String outterXml;
+ items.clear();
+ outter =
+ Pattern.compile("<" + xmlRoot + ">(.*?)</" + xmlRoot + ">", Pattern.MULTILINE | Pattern.DOTALL).matcher(xml);
+ while (outter.find()) {
+ outterXml = outter.group(1);
+ inner = Pattern.compile("<" + xmlSubRoot + ">(.*?)</" + xmlSubRoot + ">").matcher(outterXml);
+ while (inner.find()) {
+ String str = inner.group(1);
+ XListItem xItem = getByXmlName(str);
+ if (xItem != null)
+ xItem.setSelected(true);
+ else {
+ xItem = add(str);
+ xItem.setSelected(true);
+ }
+ }
+ }
+ refresh();
+ }
+
+ public List getList() {
+ return listList;
+ }
+
+ public XListItem get(String name) {
+ return items.get(name);
+ }
+
+ public String getSelectedStr() {
+ StringBuffer sb = new StringBuffer();
+ for (XListItem item : getSelected())
+ sb.append(item.getName() + ", ");
+ return sb.toString().replaceFirst(", $", "");
+ }
+
+ public Collection<String> getSelectedStrs() {
+ Set<String> selected = new HashSet<String>();
+ for (XListItem item : getSelected()) {
+ selected.add(item.getName());
+ }
+ return selected;
+ }
+
+ public XListItem getByXmlName(String xmlName) {
+ for (XListItem xItem : items.values()) {
+ if (xItem.xmlValue.equals(xmlName)) return xItem;
+ }
+ return null;
+ }
+
+ protected void updateListWidget() {
+ if (listList == null || listList.isDisposed()) return;
+ String listItems[] = listList.getItems();
+ Set<String> listItemsSet = new HashSet<String>();
+ Set<String> selected = new HashSet<String>();
+ for (String listItem : listItems)
+ listItemsSet.add(listItem);
+ if (listList != null) {
+ listList.deselectAll();
+ for (XListItem xItem : items.values()) {
+ if (!listItemsSet.contains(xItem.getName())) {
+ listList.add(xItem.getName());
+ if (xItem.isSelected()) selected.add(xItem.getName());
+ } else if (xItem.isSelected()) selected.add(xItem.getName());
+ }
+ listList.setSelection(selected.toArray(new String[selected.size()]));
+ setLabelError();
+ }
+ }
+
+ public XListItem add(String name) {
+ XListItem xItem = new XListItem(name);
+ items.put(name, xItem);
+ return xItem;
+ }
+
+ public void add(String[] names) {
+ for (String name : names) {
+ add(name);
+ }
+ }
+
+ public void add(Collection<String> names) {
+ for (String name : names) {
+ add(name);
+ }
+ }
+
+ public void addSelected(String name) {
+ XListItem xItem = get(name);
+ if (xItem != null)
+ xItem.setSelected(true);
+ else {
+ xItem = add(name);
+ xItem.setSelected(true);
+ }
+ updateListWidget();
+ }
+
+ public void setSelected(String name) {
+ setSelected(Arrays.asList(name));
+ updateListWidget();
+ }
+
+ public void setSelected(Collection<String> names) {
+ ArrayList<String> handledNames = new ArrayList<String>();
+ for (Entry<String, XListItem> entry : items.entrySet()) {
+ if (names.contains(entry.getKey())) {
+ entry.getValue().selected = true;
+ handledNames.add(entry.getKey());
+ } else
+ entry.getValue().selected = false;
+ }
+ for (String name : names) {
+ if (!handledNames.contains(name)) {
+ XListItem item = new XListItem(name);
+ item.selected = true;
+ items.put(name, item);
+ }
+ }
+ updateListWidget();
+ }
+
+ public Result isValid() {
+ if (!requiredEntry) return Result.TrueResult;
+ int size = getSelected().size();
+ if (requiredMaxSelected != 0) {
+ if ((size >= requiredMinSelected) && (size <= requiredMaxSelected)) {
+ return Result.TrueResult;
+ } else if (size < requiredMinSelected)
+ return new Result(getLabel() + " must have at least " + requiredMinSelected + " selected.");
+ else if (size < requiredMaxSelected)
+ return new Result(getLabel() + " should only have " + requiredMaxSelected + " selected.");
+ else
+ return new Result(getLabel());
+ }
+ if (size == 0) return new Result(getLabel() + " must be selected.");
+ return Result.TrueResult;
+ }
+
+ /**
+ * Minimum number of selected items that makes this widget valid
+ *
+ * @param minSelected -
+ * @param maxSelected -
+ */
+ public void setRequiredSelected(int minSelected, int maxSelected) {
+ this.requiredMinSelected = minSelected;
+ this.requiredMaxSelected = maxSelected;
+ setRequiredEntry(true);
+ }
+
+ @Override
+ public void setRequiredEntry(boolean requiredEntry) {
+ super.setRequiredEntry(requiredEntry);
+ if (!requiredEntry) {
+ this.requiredMinSelected = 1;
+ this.requiredMaxSelected = 1;
+ }
+ }
+
+ public String getReportData() {
+ String s = "\n";
+ for (XListItem xItem : getSelected()) {
+ s = s + " - " + xItem + "\n";
+ }
+ s = s.replaceAll("\n+$", "");
+ return s;
+ }
+
+ public String toXml() {
+ return toXml(xmlRoot, xmlSubRoot);
+ }
+
+ public String toXml(String xmlRoot, String xmlSubRoot) {
+ String s = "<" + xmlRoot + ">\n";
+ for (XListItem xItem : getSelected()) {
+ String dataStr;
+ if (xItem.getXmlValue() != null) {
+ dataStr = xItem.getXmlValue();
+ } else {
+ dataStr = xItem.getName();
+ }
+ s = s + " <" + xmlSubRoot + ">" + dataStr + "</" + xmlSubRoot + ">\n";
+ }
+ s = s + "</" + xmlRoot + ">\n";
+ return s;
+ }
+
+ public String toHTML(String labelFont) {
+ String s = "<dl><dt>" + AHTML.getLabelStr(labelFont, label + ": ") + "<dt><ul type=\"disc\">";
+ for (XListItem xItem : getSelected()) {
+ s += "<li>" + xItem;
+ }
+
+ return s + "</ul></dl>";
+ }
+
+ /**
+ * @param grabHorizontal The grabHorizontal to set.
+ */
+ public void setGrabHorizontal(boolean grabHorizontal) {
+ this.grabHorizontal = grabHorizontal;
+ }
+
+ protected void clearAll() {
+ if (listList != null) listList.removeAll();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return getSelected();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListDam.java
new file mode 100644
index 00000000000..1ec6999fa22
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListDam.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XListDam extends XList implements IArtifactWidget {
+
+ private Artifact artifact;
+ private String attributeTypeName;
+
+ /**
+ * @param displayLabel
+ */
+ public XListDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ public void setArtifact(Artifact artifact, String attrName) throws OseeCoreException {
+ this.artifact = artifact;
+ this.attributeTypeName = attrName;
+ super.setSelected(getStoredStrs());
+ }
+
+ @Override
+ public void saveToArtifact() throws OseeCoreException {
+ artifact.setAttributeValues(attributeTypeName, getSelectedStrs());
+ }
+
+ public Collection<String> getStoredStrs() throws OseeCoreException {
+ return artifact.getAttributesToStringList(attributeTypeName);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#isDirty()
+ */
+ @Override
+ public Result isDirty() throws OseeCoreException {
+ try {
+ Collection<String> enteredValues = getSelectedStrs();
+ Collection<String> storedValues = getStoredStrs();
+ if (!Collections.isEqual(enteredValues, storedValues)) {
+ return new Result(true, attributeTypeName + " is dirty");
+ }
+ } catch (NumberFormatException ex) {
+ // do nothing
+ }
+ return Result.FalseResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#revert()
+ */
+ @Override
+ public void revert() throws OseeCoreException {
+ setArtifact(artifact, attributeTypeName);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListDropViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListDropViewer.java
new file mode 100644
index 00000000000..9dcb09a09d9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListDropViewer.java
@@ -0,0 +1,159 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTransfer;
+import org.eclipse.osee.framework.ui.skynet.ArtifactLabelProvider;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class XListDropViewer extends XListViewer {
+ private MenuItem removeFromMenuItem;
+ private TableViewer myTableViewer;
+ private ArrayContentProvider myArrayContentProvider = null;
+ private ArtifactLabelProvider myArtifactLabelProvider = null;
+
+ /**
+ * @param displayLabel
+ */
+ public XListDropViewer(String displayLabel) {
+ super(displayLabel);
+ this.myArrayContentProvider = new ArrayContentProvider();
+ setContentProvider(this.myArrayContentProvider);
+ this.myArtifactLabelProvider = new ArtifactLabelProvider();
+ setLabelProvider(this.myArtifactLabelProvider);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#createWidgets(org.eclipse.ui.forms.widgets.FormToolkit, org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ public void createWidgets(FormToolkit toolkit, Composite parent, int horizontalSpan) {
+ Menu popupMenu = definePopup(parent);
+ setMultiSelect(true);
+ super.setListMenu(popupMenu);
+ super.createWidgets(toolkit, parent, horizontalSpan);
+ this.myTableViewer = super.getTableViewer();
+ defineMenus(popupMenu);
+ }
+
+ private Menu definePopup(Composite parent) {
+ Menu popupMenu = new Menu(parent);
+ return popupMenu;
+ }
+
+ private void defineMenus(Menu popupMenu) {
+ // popupMenu.addMenuListener(new MenuEnablingListener());
+ createRemoveFromMenuItem(popupMenu);
+ myTableViewer.getTable().setMenu(popupMenu);
+ return;
+ }
+
+ private void createRemoveFromMenuItem(Menu popupMenu) {
+ removeFromMenuItem = new MenuItem(popupMenu, SWT.PUSH);
+ removeFromMenuItem.setText("Remove From This Blam's Parameters ");
+ removeFromMenuItem.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent event) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) myTableViewer.getSelection();
+ Iterator<?> iterator = structuredSelection.iterator();
+
+ Object orginalInput = getInput();
+ Collection<Object> modList = getCollectionInput();
+
+ while (iterator.hasNext()) {
+ modList.remove(iterator.next());
+ }
+
+ myArrayContentProvider.inputChanged(myTableViewer, orginalInput, modList);
+ refresh();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent ev) {
+ }
+ });
+ }
+
+ /**
+ * Adds artifacts to the viewer's input.
+ *
+ * @param artifacts
+ */
+ public void addToInput(Artifact... artifacts) {
+ ArrayList<Object> objects = new ArrayList<Object>();
+
+ for (Artifact artifact : artifacts) {
+ objects.add((Object) artifact);
+ }
+
+ if (getInput() == null) {
+ setInput(objects);
+ } else {
+ add(objects);
+ updateListWidget();
+ }
+ notifyXModifiedListeners();
+ }
+
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ super.createWidgets(parent, horizontalSpan);
+
+ // the viewer must be initialized first so the control is not null.
+ new XDragAndDrop();
+ }
+
+ @Override
+ public Object getData() {
+ return getInput();
+ }
+
+ private class XDragAndDrop extends SkynetDragAndDrop {
+ public XDragAndDrop() {
+ super(null, getControl(), "viewId");
+ }
+
+ @Override
+ public void performDragOver(DropTargetEvent event) {
+ if (ArtifactTransfer.getInstance().isSupportedType(event.currentDataType)) {
+ event.detail = DND.DROP_COPY;
+ }
+ }
+
+ @Override
+ public Artifact[] getArtifacts() {
+ return null;
+ }
+
+ @Override
+ public void performArtifactDrop(Artifact[] dropArtifacts) {
+ addToInput(dropArtifacts);
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListViewer.java
new file mode 100644
index 00000000000..5b44decea5e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListViewer.java
@@ -0,0 +1,403 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XListViewer extends XWidget {
+
+ // XListViewer uses a table so images can be used. SWT doesn't support images in ListViewer
+ private TableViewer listViewer;
+ private Menu listMenu;
+ private Composite parent;
+ private Composite composite;
+ private int requiredMinSelected = 0;
+ private int requiredMaxSelected = 0;
+ private boolean grabHorizontal = false;
+ private boolean multiSelect = false;
+ private Object defaultSelectedObject;
+
+ protected SelectionListener listListener = new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ handleSelection();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ };
+ private Collection<Object> input;
+ private IContentProvider contentProvider;
+ private ILabelProvider labelProvider;
+ private ViewerSorter sorter;
+ private int widthHint;
+ private int heightHint;
+
+ public XListViewer(String displayLabel) {
+ this(displayLabel, "list", "");
+ }
+
+ public XListViewer() {
+ this("List", "list", "");
+ }
+
+ public XListViewer(String displayLabel, String xmlRoot, String xmlSubRoot) {
+ super(displayLabel, xmlRoot, xmlSubRoot);
+ setReportType(XWidget.RPT_SINGLE_LINE);
+ listMenu = null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return listViewer.getControl();
+ }
+
+ /**
+ * @param listMenu The listMenu to set.
+ */
+ public void setListMenu(Menu listMenu) {
+ this.listMenu = listMenu;
+ }
+
+ public void setContentProvider(IContentProvider contentProvider) {
+ this.contentProvider = contentProvider;
+ }
+
+ public void setLabelProvider(ILabelProvider labelProvider) {
+ this.labelProvider = labelProvider;
+ if (listViewer != null) listViewer.setLabelProvider(labelProvider);
+ }
+
+ public void setSorter(ViewerSorter sorter) {
+ this.sorter = sorter;
+ }
+
+ public void setInput(Collection<Object> input) {
+ this.input = input;
+ if (listViewer != null) listViewer.setInput(input);
+ }
+
+ /**
+ * @param input
+ */
+ public void setInput(Object input) {
+ if (listViewer != null) listViewer.setInput(input);
+ }
+
+ public Object getInput() {
+ return listViewer.getInput();
+ }
+
+ public Collection<Object> getCollectionInput() {
+ return input;
+ }
+
+ public void setInputArtifacts(Collection<? extends Artifact> arts) {
+ ArrayList<Object> objs = new ArrayList<Object>();
+ for (Artifact art : arts)
+ objs.add((Object) art);
+ setInput(objs);
+ }
+
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ listViewer.addSelectionChangedListener(listener);
+ }
+
+ public void setHints(int widthHint, int heightHint) {
+ this.widthHint = widthHint;
+ this.heightHint = heightHint;
+ }
+
+ /**
+ * Create List Widgets. Widgets Created: List: horizonatalSpan takes up 2 columns; horizontalSpan must be >=2
+ */
+ public void createWidgets(Composite parent, int horizontalSpan) {
+
+ this.parent = parent;
+ composite = null;
+
+ if (!verticalLabel && (horizontalSpan < 2))
+ horizontalSpan = 2;
+ else if (verticalLabel) horizontalSpan = 1;
+
+ if (displayLabel && verticalLabel) {
+ composite = new Composite(parent, SWT.NONE);
+ // composite.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_CYAN));
+ composite.setLayout(new GridLayout(1, false));
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.horizontalSpan = 2;
+ gd.grabExcessHorizontalSpace = true;
+ gd.grabExcessVerticalSpace = true;
+ composite.setLayoutData(gd);
+ } else {
+ composite = parent;
+ }
+
+ // Create List Widgets
+ if (displayLabel) {
+ labelWidget = new Label(composite, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+
+ listViewer =
+ new TableViewer(composite,
+ (multiSelect ? SWT.MULTI : SWT.SINGLE) | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+ listViewer.setContentProvider(contentProvider);
+ listViewer.setLabelProvider(labelProvider);
+ if (sorter != null) listViewer.setSorter(sorter);
+ listViewer.setInput(input);
+ listViewer.getTable().setMenu(listMenu);
+ listViewer.getTable().addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ handleSelection();
+ }
+ });
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.verticalSpan = 10;
+ if (grabHorizontal) {
+ gd.grabExcessHorizontalSpace = true;
+ }
+ if (widthHint > 0) gd.widthHint = widthHint;
+ if (heightHint > 0) gd.heightHint = heightHint;
+ gd.grabExcessVerticalSpace = true;
+ listViewer.getTable().setLayoutData(gd);
+ listViewer.getTable().addSelectionListener(listListener);
+
+ if (defaultSelectedObject != null) {
+ setSelected(defaultSelectedObject);
+ }
+ updateListWidget();
+ }
+
+ @Override
+ public void dispose() {
+ labelWidget.dispose();
+ listViewer.getTable().dispose();
+ if (composite != null && !composite.isDisposed()) composite.dispose();
+ if (parent != null && !parent.isDisposed()) parent.layout();
+ }
+
+ public void setFocus() {
+ }
+
+ /**
+ * Don't need this since overriding toReport and toXml
+ */
+ public String getXmlData() {
+ return "";
+ }
+
+ /**
+ * Don't need this since overriding setFromXml
+ */
+ public void setXmlData(String str) {
+ return;
+ }
+
+ private void handleSelection() {
+ setLabelError();
+ notifyXModifiedListeners();
+ }
+
+ public void refresh() {
+ updateListWidget();
+ }
+
+ public void addSelectionListener(SelectionListener selectionListener) {
+ listViewer.getTable().addSelectionListener(selectionListener);
+ }
+
+ @SuppressWarnings("unchecked")
+ public ArrayList<Object> getSelected() {
+ ArrayList<Object> selected = new ArrayList<Object>();
+ IStructuredSelection selection = (IStructuredSelection) listViewer.getSelection();
+ Iterator i = selection.iterator();
+ while (i.hasNext())
+ selected.add(i.next());
+ return selected;
+ }
+
+ public void setFromXml(String xml) {
+ }
+
+ public Table getTable() {
+ return listViewer.getTable();
+ }
+
+ public TableViewer getTableViewer() {
+ return listViewer;
+ }
+
+ protected void updateListWidget() {
+ listViewer.refresh();
+ setLabelError();
+ }
+
+ public void add(Object object) {
+ if (!input.contains(object)) {
+ input.add(object);
+ }
+ }
+
+ public void add(Object[] objects) {
+ for (Object object : objects) {
+ add(object);
+ }
+ }
+
+ public void add(Collection<Object> objects) {
+ // to ensure no duplicates
+ input.removeAll(objects);
+
+ if (!input.containsAll(objects)) {
+ input.addAll(objects);
+ }
+ }
+
+ public void setSelected(ArrayList<Object> selected) {
+ setSelected(new StructuredSelection(selected.toArray(new Object[selected.size()])));
+ }
+
+ public void setSelected(Object selected) {
+ setSelected(new StructuredSelection(selected));
+ }
+
+ private void setSelected(StructuredSelection selection) {
+ listViewer.setSelection(selection);
+ updateListWidget();
+ }
+
+ public Result isValid() {
+ if (!requiredEntry) return Result.TrueResult;
+ int size = getSelected().size();
+ if (requiredMaxSelected != 0) {
+ if ((size >= requiredMinSelected) && (size <= requiredMaxSelected)) {
+ return Result.TrueResult;
+ } else if (size < requiredMinSelected)
+ return new Result(getLabel() + " must have at least " + requiredMinSelected + " selected.");
+ else if (size < requiredMaxSelected)
+ return new Result(getLabel() + " should only have " + requiredMaxSelected + " selected.");
+ else
+ return new Result(getLabel());
+ }
+ if (size == 0) return new Result(getLabel() + " must be selected.");
+ return Result.TrueResult;
+
+ }
+
+ /**
+ * Minimum number of selected items that makes this widget valid
+ *
+ * @param minSelected -
+ * @param maxSelected =
+ */
+ public void setRequiredSelected(int minSelected, int maxSelected) {
+ this.requiredMinSelected = minSelected;
+ this.requiredMaxSelected = maxSelected;
+ setRequiredEntry(true);
+ }
+
+ @Override
+ public void setRequiredEntry(boolean requiredEntry) {
+ super.setRequiredEntry(requiredEntry);
+ if (!requiredEntry) {
+ this.requiredMinSelected = 1;
+ this.requiredMaxSelected = 1;
+ }
+ }
+
+ public String getReportData() {
+ String s = "\n";
+ for (Object obj : getSelected()) {
+ s = s + " - " + obj + "\n";
+ }
+ s = s.replaceAll("\n+$", "");
+ return s;
+ }
+
+ public String toXml() {
+ return toXml(xmlRoot, xmlSubRoot);
+ }
+
+ public String toXml(String xmlRoot, String xmlSubRoot) {
+ return "";
+ }
+
+ public String toHTML(String labelFont) {
+ String s = "<dl><dt>" + AHTML.getLabelStr(labelFont, label + ": ") + "<dt><ul type=\"disc\">";
+ for (Object xItem : getSelected()) {
+ s += "<li>" + xItem;
+ }
+
+ return s + "</ul></dl>";
+ }
+
+ /**
+ * @param grabHorizontal The grabHorizontal to set.
+ */
+ public void setGrabHorizontal(boolean grabHorizontal) {
+ this.grabHorizontal = grabHorizontal;
+ }
+
+ public boolean isMultiSelect() {
+ return multiSelect;
+ }
+
+ public void setMultiSelect(boolean multiSelect) {
+ this.multiSelect = multiSelect;
+ }
+
+ @Override
+ public Object getData() {
+ return getSelected();
+ }
+
+ public void setDefaultSelected(Object defaultSelectedObject) {
+ this.defaultSelectedObject = defaultSelectedObject;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMembersCombo.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMembersCombo.java
new file mode 100644
index 00000000000..8b8ca7e1194
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMembersCombo.java
@@ -0,0 +1,328 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.Collection;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.swt.Search;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XMembersCombo extends XWidget {
+ private static final String DEFAULT_SELECTION = "--select--";
+ private Combo dataCombo;
+ private Composite composite;
+ private User selectedUser;
+ private Search searchControl;
+
+ public XMembersCombo(String displayLabel) {
+ this(displayLabel, "", "");
+ }
+
+ public XMembersCombo(String displayLabel, String xmlRoot, String xmlSubRoot) {
+ super(displayLabel, xmlRoot, xmlSubRoot);
+ }
+
+ public XMembersCombo(String displayLabel, Collection<User> members) {
+ super(displayLabel, displayLabel, "user");
+ }
+
+ public XMembersCombo(String displayLabel, String xmlRoot) {
+ this(displayLabel, xmlRoot, "");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return dataCombo;
+ }
+
+ public boolean equals(User user) {
+ return user.equals(selectedUser);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof XMembersCombo)
+ return ((XMembersCombo) obj).selectedUser.equals(selectedUser);
+ else
+ return super.equals(obj);
+ }
+
+ public void set(User user) {
+ selectedUser = user;
+ updateComboWidget();
+ }
+
+ @Override
+ public String toString() {
+ return label + ": *" + get() + "*";
+ }
+
+ /**
+ * Create Data Widgets. Widgets Created: Data: DEFAULT_SELECTION horizonatalSpan takes up 2 columns; horizontalSpan
+ * must be >=2 the string DEFAULT_SELECTION will be added to the sent in dataStrings array
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ composite = parent;
+
+ if (horizontalSpan < 2) horizontalSpan = 2;
+
+ // Create Data Widgets
+ if (!label.equals("")) {
+ labelWidget = new Label(composite, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+
+ dataCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
+ dataCombo.add(DEFAULT_SELECTION);
+ dataCombo.setData(DEFAULT_SELECTION, null);
+ try {
+ for (User user : UserManager.getUsersSortedByName()) {
+ dataCombo.add(user.getName());
+ dataCombo.setData(user.getName(), user);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ searchControl = new Search(dataCombo.getItems());
+
+ GridData gridData = new GridData();
+ if (fillHorizontally) gridData.grabExcessHorizontalSpace = true;
+ if (fillVertically) gridData.grabExcessVerticalSpace = true;
+ gridData.horizontalSpan = horizontalSpan - 1;
+ dataCombo.setLayoutData(gridData);
+
+ if (dataCombo.getItemCount() > 20) dataCombo.setVisibleItemCount(20);
+
+ dataCombo.addModifyListener(new ModifyListener() {
+
+ public void modifyText(ModifyEvent e) {
+ String selectedUserName = dataCombo.getText();
+ selectedUser = (User) dataCombo.getData(selectedUserName);
+ setLabelError();
+ notifyXModifiedListeners();
+ }
+ });
+
+ dataCombo.addFocusListener(new FocusListener() {
+ @Override
+ public void focusGained(FocusEvent e) {
+ resetSelectionList();
+ }
+
+ @Override
+ public void focusLost(FocusEvent e) {
+ }
+ });
+
+ dataCombo.addKeyListener(new KeyAdapter() {
+ // hook key pressed - see PR 14201
+ @Override
+ public void keyPressed(KeyEvent e) {
+ keyReleaseOccured(e);
+ }
+ });
+
+ refresh();
+ dataCombo.setEnabled(editable);
+ }
+
+ private void resetSelectionList() {
+ searchControl.reset();
+ dataCombo.setItems(searchControl.getItems());
+ refresh();
+ }
+
+ @Override
+ public void dispose() {
+ if (composite != null && !composite.isDisposed()) composite.dispose();
+ }
+
+ public User getUser() {
+ return selectedUser;
+ }
+
+ public boolean isAssigned() {
+ return selectedUser != null;
+ }
+
+ public boolean isAssigned(User user) {
+ return selectedUser != null && selectedUser.equals(user);
+ }
+
+ @Override
+ public void setEditable(boolean editable) {
+ super.setEditable(editable);
+ if (dataCombo != null && !dataCombo.isDisposed()) dataCombo.setEnabled(editable);
+ }
+
+ @Override
+ public void setFocus() {
+ if (dataCombo != null) dataCombo.setFocus();
+ }
+
+ @Override
+ public void setFromXml(String xml) {
+ Matcher matcher;
+ if (xmlSubRoot.equals("")) {
+ matcher =
+ Pattern.compile("<" + xmlRoot + ">(.*?)</" + xmlRoot + ">", Pattern.MULTILINE | Pattern.DOTALL).matcher(
+ xml);
+ } else {
+ matcher =
+ Pattern.compile("<" + xmlRoot + "><" + xmlSubRoot + ">(.*?)</" + xmlSubRoot + "></" + xmlRoot + ">",
+ Pattern.MULTILINE | Pattern.DOTALL).matcher(xml);
+ }
+ while (matcher.find()) {
+ String userId = matcher.group(1);
+ User user = null;
+ try {
+ user = UserManager.getUserByUserId(userId);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ set(user);
+ }
+ refresh();
+ }
+
+ @Override
+ public void refresh() {
+ updateComboWidget();
+ }
+
+ public void addModifyListener(ModifyListener modifyListener) {
+ dataCombo.addModifyListener(modifyListener);
+ }
+
+ public Combo getComboBox() {
+ return dataCombo;
+ }
+
+ /**
+ * @return selected display value (eg. Dunne, Donald G)
+ */
+ public String get() {
+ return selectedUser == null ? "" : selectedUser.getName();
+ }
+
+ @Override
+ public String getReportData() {
+ return get();
+ }
+
+ @Override
+ public String getXmlData() {
+ return get();
+ }
+
+ @Override
+ public void setXmlData(String str) {
+ }
+
+ private void updateComboWidget() {
+ if (dataCombo != null) {
+ int index = 0;
+
+ if (selectedUser != null) {
+ index = dataCombo.indexOf(selectedUser.getName());
+ if (index == -1) {
+ index = 0;
+ }
+ }
+ dataCombo.select(index);
+ }
+ setLabelError();
+ }
+
+ public void clear() {
+ selectedUser = null;
+ updateComboWidget();
+ }
+
+ @Override
+ public Result isValid() {
+ if (requiredEntry && !isAssigned()) return new Result("Must select " + getLabel());
+ return Result.TrueResult;
+ }
+
+ @Override
+ public String toXml() throws Exception {
+ return toXml(xmlRoot);
+ }
+
+ @Override
+ public String toXml(String xmlRoot) throws Exception {
+ String s;
+ String dataStr = selectedUser.getUserId();
+ if (xmlSubRoot == null || xmlSubRoot.equals("")) {
+ s = "<" + xmlRoot + ">" + dataStr + "</" + xmlRoot + ">\n";
+ } else {
+ s = "<" + xmlRoot + "><" + xmlSubRoot + ">" + dataStr + "</" + xmlSubRoot + "></" + xmlRoot + ">\n";
+ }
+ return s;
+ }
+
+ @Override
+ public String toHTML(String labelFont) {
+ return AHTML.getLabelStr(labelFont, label + ": ") + get();
+ }
+
+ protected void keyReleaseOccured(KeyEvent keyEvent) {
+ if (keyEvent.character != 0x00 && keyEvent.character != SWT.CR) {
+ searchControl.progressiveSearch(keyEvent);
+ if (searchControl.getDirty()) {
+ dataCombo.setItems(searchControl.getItems());
+ searchControl.setDirty(false);
+ refresh();
+ }
+ }
+ // If delete key pressed, reset
+ if (keyEvent.character == SWT.DEL || keyEvent.character == SWT.BS || keyEvent.character == SWT.ESC) {
+ resetSelectionList();
+ }
+ }
+
+ @Override
+ public Object getData() {
+ return selectedUser;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMembersList.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMembersList.java
new file mode 100644
index 00000000000..b4d883dd5b8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMembersList.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.ui.skynet.ArtifactLabelProvider;
+
+/**
+ * Set a AList with the members as the selections
+ *
+ * @author Donald G. Dunne
+ */
+public class XMembersList extends XListViewer {
+
+ public XMembersList() throws OseeCoreException {
+ this("MList", "", "");
+ }
+
+ public XMembersList(String displayLabel) throws OseeCoreException {
+ this(displayLabel, "", "");
+ }
+
+ public XMembersList(String displayLabel, String xmlRoot, String xmlSubRoot) throws OseeCoreException {
+ super(displayLabel, xmlRoot, xmlSubRoot);
+ super.setLabelProvider(new ArtifactLabelProvider());
+ super.setContentProvider(new ArrayContentProvider());
+ super.setInputArtifacts(UserManager.getUsersSortedByName());
+ }
+
+ public String[] getEmails() throws OseeCoreException {
+ ArrayList<String> v = new ArrayList<String>();
+ for (Object obj : this.getSelected()) {
+ User u = (User) obj;
+ String name = u.getName();
+ String email = u.getEmail();
+ if (!email.equals(""))
+ v.add(email);
+ else
+ v.add(name);
+ }
+ return (v.toArray(new String[0]));
+ }
+
+ public ArrayList<User> getUsers() {
+ ArrayList<User> v = new ArrayList<User>();
+
+ for (Object obj : this.getSelected()) {
+ v.add((User) obj);
+ }
+ return v;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XModifiedListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XModifiedListener.java
new file mode 100644
index 00000000000..8bd01a76947
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XModifiedListener.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface XModifiedListener {
+
+ public void widgetModified(XWidget widget);
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidget.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidget.java
new file mode 100644
index 00000000000..450f30954b8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidget.java
@@ -0,0 +1,279 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XMultiXWidget extends XWidget {
+
+ protected List<XWidget> xWidgets = new ArrayList<XWidget>();
+ protected XMultiXWidgetFactory xMultiXWidgetFactory;
+ protected Group group;
+ protected int horizontalSpan;
+
+ /**
+ * @param label
+ */
+ public XMultiXWidget(String label, XMultiXWidgetFactory xMultiXWidgetFactory) {
+ super(label);
+ this.xMultiXWidgetFactory = xMultiXWidgetFactory;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#createWidgets(org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ this.horizontalSpan = horizontalSpan;
+ // parent.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
+ group = new Group(parent, SWT.NONE);
+ if (toolkit != null) toolkit.adapt(group);
+ // group.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
+ group.setLayout(new GridLayout(2, false));
+ GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+ gridData.horizontalSpan = horizontalSpan;
+ group.setLayoutData(gridData);
+ if (isDisplayLabel()) group.setText(getLabel() + "(s): ");
+
+ // Create add label / icon
+ Label addLabel = new Label(group, SWT.NONE);
+ if (toolkit != null) toolkit.adapt(addLabel, true, true);
+ Image image = SkynetGuiPlugin.getInstance() != null ? SkynetGuiPlugin.getInstance().getImage("add.gif") : null;
+ if (image != null)
+ addLabel.setImage(image);
+ else
+ addLabel.setText("add");
+ addLabel.setToolTipText("Add New \"" + getLabel() + "\"");
+ addLabel.addListener(SWT.MouseUp, new Listener() {
+ public void handleEvent(org.eclipse.swt.widgets.Event event) {
+ handleAddXWidget();
+ };
+ });
+
+ // Create undo label / icon
+ Label undoLabel = new Label(group, SWT.NONE);
+ if (toolkit != null) toolkit.adapt(undoLabel, true, true);
+ image = null;
+ try {
+ image = SkynetGuiPlugin.getInstance() != null ? SkynetGuiPlugin.getInstance().getImage("undo.gif") : null;
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ if (image != null)
+ undoLabel.setImage(image);
+ else
+ undoLabel.setText("undo");
+ undoLabel.setToolTipText("Undo Changes to \"" + getLabel() + "\"");
+ undoLabel.addListener(SWT.MouseUp, new Listener() {
+ public void handleEvent(org.eclipse.swt.widgets.Event event) {
+ try {
+ handleUndo();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ };
+ });
+
+ // Create xWidget lines
+ for (final XWidget xWidget : xWidgets) {
+ createWidgetControlComposite(xWidget, group, 2);
+ }
+ }
+
+ protected void handleUndo() throws Exception {
+ System.out.println("handle undo");
+ }
+
+ protected void handleAddXWidget() {
+ System.out.println("Add widget ");
+ XWidget xWidget = xMultiXWidgetFactory.addXWidget();
+ createWidgetControlComposite(xWidget, group, 2);
+ if (!xWidgets.contains(xWidget)) xWidgets.add(xWidget);
+ xWidget.addXModifiedListener(xModifiedListener);
+ group.layout();
+ group.getParent().layout();
+ notifyXModifiedListeners();
+ }
+
+ XModifiedListener xModifiedListener = new XModifiedListener() {
+ public void widgetModified(XWidget widget) {
+ notifyXModifiedListeners();
+ };
+ };
+
+ private void createWidgetControlComposite(final XWidget xWidget, final Composite parent, int horizontalSpan) {
+ final Composite controlComp = new Composite(parent, SWT.NONE);
+ controlComp.setLayout(ALayout.getZeroMarginLayout(4, false));
+ GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+ gridData.horizontalSpan = 2;
+ controlComp.setLayoutData(gridData);
+ if (toolkit != null) toolkit.adapt(controlComp);
+
+ // Add delete label / icon
+ Label deleteLabel = new Label(controlComp, SWT.NONE);
+ if (toolkit != null) toolkit.adapt(deleteLabel, true, true);
+ Image image = SkynetGuiPlugin.getInstance() != null ? SkynetGuiPlugin.getInstance().getImage("delete.gif") : null;
+ if (image != null)
+ deleteLabel.setImage(image);
+ else
+ deleteLabel.setText("delete");
+ deleteLabel.setToolTipText("Delete \"" + getLabel() + "\"");
+ deleteLabel.addListener(SWT.MouseUp, new Listener() {
+ public void handleEvent(org.eclipse.swt.widgets.Event event) {
+ System.out.println("Delete widget " + xWidget);
+ xWidgets.remove(xWidget);
+ xWidget.dispose();
+ controlComp.dispose();
+ parent.layout();
+ group.layout();
+ group.getParent().layout();
+ notifyXModifiedListeners();
+ };
+ });
+
+ // Add Widget
+ xWidget.setFillHorizontally(true);
+ xWidget.createWidgets(controlComp, 1);
+
+ }
+
+ public void addXWidget(XWidget xWidget) {
+ xWidgets.add(xWidget);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#dispose()
+ */
+ @Override
+ public void dispose() {
+ for (XWidget xWidget : xWidgets) {
+ xWidget.dispose();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getReportData()
+ */
+ @Override
+ public String getReportData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getXmlData()
+ */
+ @Override
+ public String getXmlData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#isValid()
+ */
+ @Override
+ public Result isValid() {
+ for (XWidget xWidget : xWidgets) {
+ if (xWidget.isValid().isFalse()) return xWidget.isValid();
+ }
+ return Result.TrueResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#refresh()
+ */
+ @Override
+ public void refresh() {
+ for (XWidget xWidget : xWidgets) {
+ xWidget.refresh();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ if (xWidgets.size() > 0) xWidgets.iterator().next().setFocus();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setXmlData(java.lang.String)
+ */
+ @Override
+ public void setXmlData(String str) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#toHTML(java.lang.String)
+ */
+ @Override
+ public String toHTML(String labelFont) {
+ return null;
+ }
+
+ /**
+ * @return the xWidgets
+ */
+ public List<XWidget> getXWidgets() throws Exception {
+ return xWidgets;
+ }
+
+ /**
+ * @param widgets the xWidgets to set
+ */
+ public void setXWidgets(List<XWidget> widgets) {
+ xWidgets = widgets;
+ }
+
+ /**
+ * @param multiXWidgetFactory the xMultiXWidgetFactory to set
+ */
+ public void setXMultiXWidgetFactory(XMultiXWidgetFactory multiXWidgetFactory) {
+ xMultiXWidgetFactory = multiXWidgetFactory;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetDam.java
new file mode 100644
index 00000000000..d94fe6bf0f5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetDam.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.widgets.Composite;
+
+public abstract class XMultiXWidgetDam extends XMultiXWidget implements IArtifactWidget {
+
+ protected Artifact artifact;
+ protected String attributeTypeName;
+
+ public XMultiXWidgetDam(String label) {
+ super(label, null);
+ super.setXMultiXWidgetFactory(xMultiXWidgetFactory);
+ }
+
+ XMultiXWidgetFactory xMultiXWidgetFactory = new XMultiXWidgetFactory() {
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XMultiXWidgetFactory#addXWidget()
+ */
+ @Override
+ public XWidget addXWidget() {
+ return addXWidgetDam();
+ }
+ };
+
+ public void setArtifact(Artifact artifact, String attributeTypeName) {
+ this.artifact = artifact;
+ this.attributeTypeName = attributeTypeName;
+ }
+
+ public abstract void saveToArtifact() throws OseeCoreException;
+
+ public abstract Result isDirty() throws OseeCoreException;
+
+ @Override
+ public void revert() throws OseeCoreException {
+ setArtifact(artifact, attributeTypeName);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XMultiXWidget#createWidgets(org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ try {
+ createXWidgets();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ super.createWidgets(parent, horizontalSpan);
+ }
+
+ /**
+ * Creates the xWidgets widgets off artifact's set attributes that will be used in createWidgets
+ */
+ public abstract void createXWidgets() throws Exception;
+
+ /**
+ * Create new XWidget with default value in response to new attribute request
+ *
+ * @param artifact
+ * @return
+ */
+ public abstract XWidget addXWidgetDam();
+
+ public abstract void handleUndo() throws Exception;
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetFactory.java
new file mode 100644
index 00000000000..5fbb71aae7b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetFactory.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class XMultiXWidgetFactory {
+
+ public abstract XWidget addXWidget();
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetTextDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetTextDam.java
new file mode 100644
index 00000000000..8279f9ffd25
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetTextDam.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XMultiXWidgetTextDam extends XMultiXWidgetDam {
+
+ /**
+ * @param label
+ */
+ public XMultiXWidgetTextDam(String label) {
+ super(label);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XMultiXWidgetDam#addXWidgetDam()
+ */
+ @Override
+ public XWidget addXWidgetDam() {
+ return addXWidget("", null);
+ }
+
+ public XWidget addXWidget(String label, String defaultValue) {
+ XText xTextWidget = new XText(label);
+ xTextWidget.addXTextSpellModifyDictionary(new SkynetSpellModifyDictionary());
+ if (defaultValue != null && !defaultValue.equals("")) xTextWidget.setText(defaultValue);
+ xTextWidget.setFillHorizontally(true);
+ if (!xWidgets.contains(xTextWidget)) xWidgets.add(xTextWidget);
+ xTextWidget.addXModifiedListener(xModifiedListener);
+ return xTextWidget;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XMultiXWidgetDam#isDirty()
+ */
+ @Override
+ public Result isDirty() throws OseeCoreException {
+ List<String> enteredValues = getEnteredValues();
+ List<String> storedValues = artifact.getAttributesToStringList(attributeTypeName);
+ if (!Collections.isEqual(enteredValues, storedValues)) {
+ return new Result(true, attributeTypeName + " is dirty");
+ }
+ return Result.FalseResult;
+ }
+
+ public List<String> getEnteredValues() {
+ List<String> values = new ArrayList<String>();
+ for (XWidget xWidget : xWidgets) {
+ values.add(((XText) xWidget).get());
+ }
+ return values;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XMultiXWidgetDam#saveToArtifact()
+ */
+ @Override
+ public void saveToArtifact() throws OseeCoreException {
+ artifact.setAttributeValues(attributeTypeName, getEnteredValues());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XMultiXWidgetDam#createXWidgets()
+ */
+ @Override
+ public void createXWidgets() throws Exception {
+ xWidgets.clear();
+ for (String value : artifact.getAttributesToStringList(attributeTypeName)) {
+ addXWidget("", value);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XMultiXWidgetDam#handleUndo()
+ */
+ @Override
+ public void handleUndo() throws Exception {
+ Composite parent = group.getParent();
+ group.dispose();
+ System.err.println("dispose all widgets");
+ createXWidgets();
+ createWidgets(toolkit, parent, horizontalSpan);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetXTextTest.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetXTextTest.java
new file mode 100644
index 00000000000..0a862f23922
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XMultiXWidgetXTextTest.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+public class XMultiXWidgetXTextTest extends Composite {
+
+ public XMultiXWidgetXTextTest(Composite parent, int style) {
+ super(parent, style);
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(new GridLayout(1, true));
+ composite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ final XMultiXWidget multiWidget = new XMultiXWidget("Multiple Text Entries", new XMultiXWidgetFactory() {
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XMultiXWidgetFactory#addXWidget()
+ */
+ @Override
+ public XWidget addXWidget() {
+ return createXTextWidget("New", "");
+ }
+ });
+
+ for (String str : new String[] {"first", "second", "third"}) {
+ multiWidget.addXWidget(createXTextWidget("XText " + str, "Value " + str));
+ }
+
+ multiWidget.createWidgets(composite, 1);
+ multiWidget.addXModifiedListener(new XModifiedListener() {
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener#widgetModified(org.eclipse.osee.framework.ui.skynet.widgets.XWidget)
+ */
+ @Override
+ public void widgetModified(XWidget widget) {
+ System.out.println("Widget Modified");
+ }
+ });
+ }
+
+ public XText createXTextWidget(String name, String value) {
+ XText firstText = new XText(name);
+ firstText.addXTextSpellModifyDictionary(new SkynetSpellModifyDictionary());
+ firstText.setText(value);
+ firstText.setFillHorizontally(true);
+ return firstText;
+ }
+
+ public static void main(String[] args) {
+ Display Display_1 = Display.getDefault();
+ Shell Shell_1 = new Shell(Display_1, SWT.SHELL_TRIM);
+ Shell_1.setBounds(0, 0, 300, 300);
+ Shell_1.setLayout(new GridLayout());
+ Shell_1.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ new XMultiXWidgetXTextTest(Shell_1, SWT.NONE);
+
+ Shell_1.open();
+ while (!Shell_1.isDisposed()) {
+ if (!Display_1.readAndDispatch()) {
+ Display_1.sleep();
+ }
+ }
+
+ Display_1.dispose();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XOption.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XOption.java
new file mode 100644
index 00000000000..208ad36e5a8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XOption.java
@@ -0,0 +1,40 @@
+/*
+ * Created on May 30, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+/**
+ * @author Donald G. Dunne
+ */
+public enum XOption {
+ NONE,
+
+ REQUIRED,
+ NOT_REQUIRED,
+ ENABLED,
+ NOT_ENABLED,
+ EDITABLE,
+ NOT_EDITABLE,
+ HORIZONTAL_LABEL,
+ VERTICAL_LABEL,
+ LABEL_AFTER,
+ LABEL_BEFORE,
+ BEGIN_COMPOSITE_4,
+ BEGIN_COMPOSITE_6,
+ BEGIN_COMPOSITE_8,
+ BEGIN_COMPOSITE_10,
+ END_COMPOSITE,
+
+ // Fill Options
+ FILL_NONE,
+ FILL_HORIZONTALLY,
+ FILL_VERTICALLY,
+
+ // Align Options
+ ALIGN_LEFT,
+ ALIGN_RIGHT,
+ ALIGN_CENTER;
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XOptionHandler.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XOptionHandler.java
new file mode 100644
index 00000000000..c49d5d0269b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XOptionHandler.java
@@ -0,0 +1,104 @@
+/*
+ * Created on May 30, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XOptionHandler {
+
+ private Set<XOption> xOptions = new HashSet<XOption>();
+
+ public XOptionHandler(XOption... xOption) {
+ set(xOption);
+ }
+
+ public static Collection<XOption> getCollection(XOption... ats) {
+ Set<XOption> items = new HashSet<XOption>();
+ for (XOption item : ats) {
+ items.add(item);
+ }
+ return items;
+ }
+
+ public void add(XOption xOption) {
+ if (xOption.name().startsWith("ALIGN_")) {
+ xOptions.remove(XOption.ALIGN_CENTER);
+ xOptions.remove(XOption.ALIGN_LEFT);
+ xOptions.remove(XOption.ALIGN_RIGHT);
+ } else if (xOption == XOption.HORIZONTAL_LABEL) {
+ xOptions.remove(XOption.VERTICAL_LABEL);
+ } else if (xOption == XOption.EDITABLE) {
+ xOptions.remove(XOption.NOT_EDITABLE);
+ } else if (xOption == XOption.NOT_EDITABLE) {
+ xOptions.remove(XOption.EDITABLE);
+ } else if (xOption == XOption.NOT_REQUIRED) {
+ xOptions.remove(XOption.REQUIRED);
+ } else if (xOption == XOption.REQUIRED) {
+ xOptions.remove(XOption.NOT_REQUIRED);
+ } else if (xOption == XOption.NOT_ENABLED) {
+ xOptions.remove(XOption.ENABLED);
+ } else if (xOption == XOption.ENABLED) {
+ xOptions.remove(XOption.NOT_ENABLED);
+ } else if (xOption == XOption.FILL_NONE) {
+ xOptions.remove(XOption.FILL_HORIZONTALLY);
+ xOptions.remove(XOption.FILL_VERTICALLY);
+ } else if (xOption == XOption.VERTICAL_LABEL) {
+ xOptions.remove(XOption.HORIZONTAL_LABEL);
+ }
+ xOptions.add(xOption);
+ }
+
+ public void add(XOption... xOption) {
+ for (XOption xOpt : xOption) {
+ add(xOpt);
+ }
+ }
+
+ public void add(Collection<XOption> xOption) {
+ for (XOption xOpt : xOption) {
+ add(xOpt);
+ }
+ }
+
+ public boolean contains(XOption xOption) {
+ return xOptions.contains(xOption);
+ }
+
+ /**
+ * @return the xOptions
+ */
+ public Set<XOption> getXOptions() {
+ return xOptions;
+ }
+
+ /**
+ * @param options the xOptions to set
+ */
+ public void set(Set<XOption> options) {
+ this.xOptions.clear();
+ // Must go through the add method to ensure values set properly
+ for (XOption xOption : options) {
+ add(xOption);
+ }
+ }
+
+ /**
+ * @param options the xOptions to set
+ */
+ public void set(XOption options[]) {
+ this.xOptions.clear();
+ // Must go through the add method to ensure values set properly
+ for (XOption xOption : options) {
+ add(xOption);
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XPercent.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XPercent.java
new file mode 100644
index 00000000000..e8dc17989af
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XPercent.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XPercent extends XText {
+
+ public XPercent(String displayLabel, String xmlRoot) {
+ super(displayLabel, xmlRoot);
+ }
+
+ public void set(int percent) {
+ super.set(percent + "");
+ }
+
+ public Result isValid() {
+ if (super.requiredEntry()) {
+ Result result = super.isValid();
+ if (result.isFalse()) {
+ return result;
+ } else if (!this.isInteger()) {
+ return new Result("Percent must be an Integer");
+ } else if (this.getInteger() < 0 || this.getInteger() > 100) {
+ return new Result("Percent must be between 0 and 100");
+ }
+ }
+ return Result.TrueResult;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XPercentDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XPercentDam.java
new file mode 100644
index 00000000000..32cd7adc0d9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XPercentDam.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+public class XPercentDam extends XIntegerDam {
+
+ public XPercentDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XInteger#isValid()
+ */
+ @Override
+ public Result isValid() {
+ if (super.requiredEntry()) {
+ Result result = super.isValid();
+ if (result.isFalse()) {
+ return result;
+ } else if (!this.isInteger()) {
+ return new Result("Percent must be an Integer");
+ } else if (this.getInteger() < 0 || this.getInteger() > 100) {
+ return new Result("Percent must be between 0 and 100");
+ }
+ }
+ return Result.TrueResult;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButton.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButton.java
new file mode 100644
index 00000000000..53da6196a37
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButton.java
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * Generic label and radiobutton field object for use by single entry artifact attributes
+ *
+ * @author Donald G. Dunne
+ */
+public class XRadioButton extends XWidget {
+
+ private Composite parent;
+ private boolean selected = false;
+ private final String xmlRoot;
+ private Button button;
+ public static enum ButtonType {
+ Check, Radio
+ };
+ private ButtonType buttonType = ButtonType.Radio;
+ private boolean labelAfter;
+
+ public XRadioButton(String displayLabel) {
+ this(displayLabel, "");
+ }
+
+ public XRadioButton(String displayLabel, String xmlRoot) {
+ super(displayLabel, xmlRoot);
+ this.xmlRoot = xmlRoot;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return button;
+ }
+
+ public void setSelected(boolean selected) {
+ this.selected = selected;
+ if (button != null) button.setSelection(selected);
+ }
+
+ public String toString() {
+ return getLabel() + ": " + selected;
+ }
+
+ public void setFromXml(String xml) {
+ Matcher m;
+ m = Pattern.compile("<" + xmlRoot + ">(.*?)</" + xmlRoot + ">", Pattern.MULTILINE | Pattern.DOTALL).matcher(xml);
+ if (m.find()) {
+ String str = m.group(1);
+ if (str.equals("true"))
+ setSelected(true);
+ else if (str.equals("false"))
+ setSelected(false);
+ else
+ System.err.println("Unexpected radiobutton value " + str);
+ }
+ refresh();
+ }
+
+ public String getXmlData() {
+ return "" + selected;
+ }
+
+ public String getDisplayStr() {
+ return getXmlData();
+ }
+
+ /**
+ * Don't need this since overriding setFromXml
+ */
+ public void setXmlData(String str) {
+ }
+
+ /**
+ * Create radio Widgets. Widgets Created: Label: "text entry" horizonatalSpan takes up 2 columns; horizontalSpan must
+ * be >=2
+ */
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ this.parent = parent;
+ // Create Text Widgets
+ if (!isLabelAfter() && isDisplayLabel()) createLabel(parent);
+
+ button = new Button(parent, (buttonType == ButtonType.Check) ? SWT.CHECK : SWT.RADIO);
+ if (toolTip != null && !toolTip.equals("")) button.setToolTipText(toolTip);
+ if (getToolTip() != null && !getToolTip().equals("")) button.setToolTipText(getToolTip());
+ GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+ button.setLayoutData(gd);
+ button.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent event) {
+ Button b = (Button) event.getSource();
+ setSelected(b.getSelection());
+ notifyXModifiedListeners();
+ }
+ });
+ if (isLabelAfter()) createLabel(parent);
+ refresh();
+ }
+
+ public void createLabel(Composite parent) {
+ labelWidget = new Label(parent, SWT.NONE);
+ String str = label;
+ if (!isLabelAfter()) str += ":";
+ labelWidget.setText(str);
+ if (toolTip != null && !toolTip.equals("")) labelWidget.setToolTipText(toolTip);
+ }
+
+ public void dispose() {
+ button.dispose();
+ if (labelWidget != null) labelWidget.dispose();
+ if (parent != null && !parent.isDisposed()) parent.layout();
+ }
+
+ public void addSelectionListener(SelectionListener selectionListener) {
+ if (button != null) button.addSelectionListener(selectionListener);
+ }
+
+ public void removeSelectionListener(SelectionListener selectionListener) {
+ button.removeSelectionListener(selectionListener);
+ }
+
+ public boolean isSelected() {
+ return selected;
+ }
+
+ public void refresh() {
+ if (button != null) {
+ button.setSelection(selected);
+ }
+ setLabelError();
+ }
+
+ public Result isValid() {
+ return Result.TrueResult;
+ }
+
+ public String getReportData() {
+ return getXmlData();
+ }
+
+ public String toHTML(String labelFont) {
+ return AHTML.getLabelStr(labelFont, label + ": ") + getDisplayStr();
+ }
+
+ public boolean isLabelAfter() {
+ return labelAfter;
+ }
+
+ /**
+ * @return the buttonType
+ */
+ public ButtonType getButtonType() {
+ return buttonType;
+ }
+
+ /**
+ * @param buttonType the buttonType to set
+ */
+ public void setButtonType(ButtonType buttonType) {
+ this.buttonType = buttonType;
+ }
+
+ /**
+ * @param labelAfter the labelAfter to set
+ */
+ public void setLabelAfter(boolean labelAfter) {
+ this.labelAfter = labelAfter;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return selected;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ button.setFocus();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButtonTest.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButtonTest.java
new file mode 100644
index 00000000000..7404f34842c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButtonTest.java
@@ -0,0 +1,222 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.logging.Level;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.XRadioButton.ButtonType;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+public class XRadioButtonTest extends Composite {
+
+ public XRadioButtonTest(Composite parent, int style) {
+ super(parent, style);
+ Composite c = new Composite(parent, SWT.NONE);
+ c.setLayout(new GridLayout(2, false));
+ c.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+
+ final XRadioButton rb = new XRadioButton("Single Button", "singleButton");
+ rb.createWidgets(c, 2);
+ rb.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
+ };
+
+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+ try {
+ System.out.println("isSelected *" + rb.isSelected() + "*");
+ System.out.println("toXml *" + rb.toXml() + "*");
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ };
+ });
+
+ c = new Composite(parent, SWT.NONE);
+ c.setLayout(new GridLayout(2, false));
+ c.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+
+ final XRadioButton rb2 = new XRadioButton("Label After", "labelAfter");
+ rb2.setLabelAfter(true);
+ rb2.createWidgets(c, 2);
+ rb2.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
+ };
+
+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+ try {
+ System.out.println("isSelected *" + rb2.isSelected() + "*");
+ System.out.println("toXml *" + rb2.toXml() + "*");
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ };
+ });
+
+ c = new Composite(parent, SWT.NONE);
+ c.setLayout(new GridLayout(2, false));
+ c.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+
+ final XRadioButton rb3 = new XRadioButton("Check Box", "checkBox");
+ rb3.setButtonType(ButtonType.Check);
+ rb3.setLabelAfter(true);
+ rb3.createWidgets(c, 2);
+
+ rb3.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
+ };
+
+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+ try {
+ System.out.println("isSelected *" + rb3.isSelected() + "*");
+ System.out.println("toXml *" + rb3.toXml() + "*");
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ };
+ });
+
+ c = new Composite(parent, SWT.NONE);
+ c.setLayout(new GridLayout(1, false));
+ c.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+
+ final XRadioButtons rb4 = new XRadioButtons("Radios", "radios");
+ rb4.addButton("aaaaaa", "First tool tip");
+ rb4.addButton("ccccc", "2nd tool tip");
+ rb4.addButton("bbbbb", "3rd tool tip");
+ rb4.createWidgets(c, 1);
+ rb4.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
+ };
+
+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+ try {
+ System.out.println("isSelected *" + rb4.getXmlData() + "*");
+ System.out.println("toXml *" + rb4.toXml() + "*");
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ };
+ });
+
+ c = new Composite(parent, SWT.NONE);
+ c.setLayout(new GridLayout(2, false));
+
+ rb4.setLabel("Sorted Radios");
+ rb4.setSortNames(true);
+ rb4.createWidgets(c, 7);
+ rb4.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
+ };
+
+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+ try {
+ System.out.println("isSelected *" + rb4.getXmlData() + "*");
+ System.out.println("toXml *" + rb4.toXml() + "*");
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ };
+ });
+
+ c = new Composite(parent, SWT.NONE);
+ c.setLayout(new GridLayout(1, false));
+ final XRadioButtons rb5 = new XRadioButtons("Multi Select", "multiSelect");
+ rb5.addButton("aaaaaa", "First tool tip");
+ rb5.addButton("ddddd", "2nd tool tip");
+ rb5.addButton("fffff", "3rd tool tip");
+ rb5.addButton("bbbb", "3rd tool tip");
+ rb5.addButton("ccccc", "3rd tool tip");
+ rb5.setMultiSelect(true);
+ rb5.createWidgets(c, 11);
+ rb5.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
+ };
+
+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+ try {
+ System.out.println("isSelected *" + rb5.getXmlData() + "*");
+ System.out.println("toXml *" + rb5.toXml() + "*");
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ };
+ });
+
+ c = new Composite(parent, SWT.NONE);
+ c.setLayout(new GridLayout(1, false));
+
+ rb5.setLabel("Sorted Multi Select");
+ rb5.setSortNames(true);
+ rb5.createWidgets(c, 11);
+ rb5.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
+ };
+
+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+ try {
+ System.out.println("isSelected *" + rb5.getXmlData() + "*");
+ System.out.println("toXml *" + rb5.toXml() + "*");
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ };
+ });
+
+ c = new Composite(parent, SWT.NONE);
+ c.setLayout(new GridLayout(1, false));
+ final XRadioButtons rb6 = new XRadioButtons("Multi Select", "multiSelect");
+ rb6.addButtons(new String[] {"a", "k", "b", "c", "l", "d", "e", "m", "f", "g", "h", "i", "j"});
+ rb6.setVertical(true, 7);
+ rb6.setSortNames(true);
+ rb6.setMultiSelect(true);
+ rb6.createWidgets(c, 11);
+ rb6.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
+ };
+
+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+ try {
+ System.out.println("selected *" + rb6.getXmlData() + "*");
+ System.out.println("toXml *" + rb6.toXml() + "*");
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ };
+ });
+
+ }
+
+ public static void main(String[] args) {
+ Display Display_1 = Display.getDefault();
+ Shell Shell_1 = new Shell(Display_1, SWT.SHELL_TRIM);
+ Shell_1.setBounds(0, 0, 500, 500);
+ Shell_1.setLayout(new GridLayout());
+ Shell_1.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.HORIZONTAL_ALIGN_BEGINNING));
+
+ new XRadioButtonTest(Shell_1, SWT.NONE);
+
+ Shell_1.open();
+ while (!Shell_1.isDisposed()) {
+ if (!Display_1.readAndDispatch()) {
+ Display_1.sleep();
+ }
+ }
+
+ Display_1.dispose();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButtons.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButtons.java
new file mode 100644
index 00000000000..63d9b0f39c4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRadioButtons.java
@@ -0,0 +1,334 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.widgets.XRadioButton.ButtonType;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * Generic label and radiobutton field object for use by single entry artifact attributes
+ *
+ * @author Donald G. Dunne
+ */
+public class XRadioButtons extends XWidget {
+
+ private Composite comp;
+ private ArrayList<XRadioButton> xButtons = new ArrayList<XRadioButton>();
+ private boolean multiSelect;
+ private boolean vertical;
+ private int verticalColumns;
+ private boolean sortNames;
+
+ public XRadioButtons(String displayLabel, String xmlRoot) {
+ super(displayLabel, xmlRoot);
+ }
+
+ public void setFocus() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return null;
+ }
+
+ public void createWidgets(FormToolkit toolkit, Composite parent, int horizontalSpan) {
+ createWidgets(parent, horizontalSpan);
+ for (XRadioButton button : xButtons)
+ toolkit.adapt(button.getControl(), true, true);
+ if (labelWidget != null) toolkit.adapt(labelWidget, true, true);
+ }
+
+ public void addButtons(String items[]) {
+ xButtons.clear();
+ for (String item : items) {
+ xButtons.add(new XRadioButton(item, item));
+ }
+ }
+
+ public void addButton(String item, String toolTip) {
+ XRadioButton rb = new XRadioButton(item, item);
+ rb.setToolTip(toolTip);
+ xButtons.add(rb);
+ // System.out.println("added " + item);
+ }
+
+ public void addButton(String item) {
+ XRadioButton rb = new XRadioButton(item, item);
+ xButtons.add(rb);
+ // System.out.println("added " + item);
+ }
+
+ public void selectAll(boolean selected) {
+ for (XRadioButton rb : xButtons)
+ rb.setSelected(selected);
+ refresh();
+ }
+
+ public XRadioButton getButton(String name) {
+ for (XRadioButton button : xButtons)
+ if (button.getLabel().equals(name)) return button;
+ return null;
+ }
+
+ public void setSelected(String selected[]) {
+ // First, clear out all previous selections
+ selectAll(false);
+ // Set, selected items sent in
+ for (String name : selected) {
+ XRadioButton rb = getButton(name);
+ if (rb != null) rb.setSelected(true);
+ }
+ refresh();
+ }
+
+ public void setSelected(Collection<String> selected) {
+ if (selected != null) setSelected((String[]) selected.toArray(new String[selected.size()]));
+ }
+
+ public void setFromXml(String xml) throws IllegalStateException {
+ selectAll(false);
+ if (!multiSelect)
+ super.setFromXml(xml);
+ else {
+ Matcher m;
+ m =
+ Pattern.compile("<" + xmlRoot + ">(.*?)</" + xmlRoot + ">", Pattern.MULTILINE | Pattern.DOTALL).matcher(
+ xml);
+ if (m.find()) {
+ String str = m.group(1);
+ String strs[] = str.split(",");
+ setSelected(strs);
+ }
+ }
+ refresh();
+ }
+
+ public String getXmlData() {
+ String sel = "";
+ for (String str : getSelectedNames())
+ sel += str + ",";
+ sel = sel.replaceFirst(",$", "");
+ return sel;
+ }
+
+ public String getDisplayStr() {
+ return getXmlData();
+ }
+
+ public String toString() {
+ return getLabel() + ": " + Collections.toString(",", getSelectedNames());
+ }
+
+ public void setXmlData(String str) {
+ setSelected(str);
+ }
+
+ /**
+ * Create radio Widgets. Widgets Created: Label: "text entry" horizonatalSpan takes up 2 columns; horizontalSpan must
+ * be >=2
+ */
+ public void createWidgets(Composite parent, int horizontalSpan) {
+
+ Map<String, XRadioButton> nameToButton = new HashMap<String, XRadioButton>();
+ String names[] = new String[xButtons.size()];
+ int x = 0;
+ for (XRadioButton rb : xButtons) {
+ nameToButton.put(rb.getLabel().toLowerCase(), rb);
+ names[x++] = rb.getLabel().toLowerCase();
+ }
+
+ int numColumns = (names.length * 2) + (displayLabel ? 1 : 0);
+ if (vertical && horizontalSpan == 1)
+ numColumns = 1;
+ else if (vertical) numColumns = (displayLabel ? 1 : 0) + 1; // only need label an composite
+ // System.out.println("numColumns *" + numColumns + "*");
+ comp = new Composite(parent, SWT.NONE);
+ comp.setLayout(new GridLayout(numColumns, false));
+ GridData gd = new GridData();
+ gd.horizontalSpan = horizontalSpan;
+ comp.setLayoutData(gd);
+ // comp.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
+
+ // Create Text Widgets
+ if (displayLabel) {
+ labelWidget = new Label(comp, SWT.NONE);
+ labelWidget.setText(label + ":");
+ }
+ if (toolTip != null && displayLabel) {
+ labelWidget.setToolTipText(toolTip);
+ }
+
+ if (sortNames) Arrays.sort(names);
+
+ int numRows = 1;
+ if (vertical && xButtons.size() > verticalColumns) {
+ numRows = (int) (xButtons.size() / verticalColumns);
+ if ((xButtons.size() / verticalColumns) > 0) numRows++;
+ // System.out.println("numRows *" + numRows + "*");
+ }
+
+ Composite c = comp;
+ if (vertical) {
+ // System.out.println("verticalColumns *" + verticalColumns + "*");
+ c = new Composite(comp, SWT.NONE);
+ c.setLayout(ALayout.getZeroMarginLayout(verticalColumns, false));
+ // c.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+ }
+
+ Composite inComp = null;
+ if (!vertical) inComp = c;
+ for (int i = 0; i < names.length; i++) {
+ if (vertical && i % numRows == 0) {
+ inComp = new Composite(c, SWT.NONE);
+ inComp.setLayout(new GridLayout(2, false));
+ inComp.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+ // inComp.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_CYAN+i));
+ }
+ XRadioButton button = nameToButton.get(names[i]);
+ if (multiSelect) button.setButtonType(ButtonType.Check);
+ button.setLabelAfter(true);
+ button.createWidgets(inComp, 2);
+ // Since each button has it's own listeners, pass the notification on to anyone listening
+ // to XRadioButtons:w
+ button.addXModifiedListener(new XModifiedListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener#widgetModified(org.eclipse.osee.framework.ui.skynet.widgets.XWidget)
+ */
+ public void widgetModified(XWidget widget) {
+ notifyXModifiedListeners();
+ }
+ });
+ }
+ refresh();
+ }
+
+ @Override
+ public void dispose() {
+ for (XRadioButton rb : xButtons)
+ rb.dispose();
+ if (labelWidget != null) labelWidget.dispose();
+ if (comp != null && !comp.isDisposed()) comp.dispose();
+ }
+
+ public void addSelectionListener(SelectionListener selectionListener) {
+ for (XRadioButton rb : xButtons) {
+ rb.addSelectionListener(selectionListener);
+ }
+ }
+
+ public void removeSelectionListener(SelectionListener selectionListener) {
+ for (XRadioButton rb : xButtons) {
+ rb.removeSelectionListener(selectionListener);
+ }
+ }
+
+ public Set<String> getSelectedNames() {
+ Set<String> names = new HashSet<String>();
+ for (XRadioButton rb : xButtons) {
+ if (rb.isSelected()) names.add(rb.label);
+ }
+ return names;
+ }
+
+ public boolean isSelected(String name) {
+ XRadioButton rb = getButton(name);
+ if (rb != null) return rb.isSelected();
+ return false;
+ }
+
+ public boolean isSelected() {
+ for (XRadioButton rb : xButtons) {
+ if (rb.isSelected()) return true;
+ }
+ return false;
+ }
+
+ public void setSelected(String name) {
+ setSelected(new String[] {name});
+ }
+
+ public void refresh() {
+ setLabelError();
+ }
+
+ public Result isValid() {
+ if (requiredEntry && getSelectedNames().size() == 0) {
+ return new Result(getLabel() + " must have at least one selection.");
+ }
+ return Result.TrueResult;
+ }
+
+ public String getReportData() {
+ return getXmlData();
+ }
+
+ public String toHTML(String labelFont) {
+ return AHTML.getLabelStr(labelFont, label + ": ") + getDisplayStr();
+ }
+
+ public boolean isMultiSelect() {
+ return multiSelect;
+ }
+
+ public void setMultiSelect(boolean multiSelect) {
+ this.multiSelect = multiSelect;
+ }
+
+ public boolean isVertical() {
+ return vertical;
+ }
+
+ public void setVertical(boolean vertical, int columns) {
+ this.vertical = vertical;
+ this.verticalColumns = columns;
+ }
+
+ public boolean isSortNames() {
+ return sortNames;
+ }
+
+ public void setSortNames(boolean sortNames) {
+ this.sortNames = sortNames;
+ }
+
+ @Override
+ public Object getData() {
+ return getSelectedNames();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRelationTypeListViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRelationTypeListViewer.java
new file mode 100644
index 00000000000..c1ee01dcab7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XRelationTypeListViewer.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.ArrayList;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class XRelationTypeListViewer extends XTypeListViewer {
+ private static final String NAME = "XRelationTypeListViewer";
+
+ /**
+ * @param branch
+ * @param name
+ */
+ public XRelationTypeListViewer() {
+ super(NAME);
+
+ setContentProvider(new DefaultBranchContentProvider(new RelationTypeContentProvider()));
+ ArrayList<Object> input = new ArrayList<Object>(1);
+ input.add(BranchManager.getDefaultBranch());
+
+ setInput(input);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XText.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XText.java
new file mode 100644
index 00000000000..e5c646ed7d9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XText.java
@@ -0,0 +1,516 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.AXml;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.util.OseeDictionary;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+
+/**
+ * Generic label and text field object for use by single entry artifact attributes
+ *
+ * @author Donald G. Dunne
+ */
+public class XText extends XWidget {
+
+ protected StyledText sText; // Contains visable representation of text
+ private Composite parent;
+ protected String text = ""; // Where actual text with xml tags is stored
+ private int maxTextChars = 0;
+
+ private boolean dragableArtifact = false;
+ private boolean spellCheck = true;
+ private boolean debug = false;
+ private int width = 0;
+ private int height = 0;
+ private XTextSpellCheckPaintListener spellPaintListener;
+ private XTextSpellModifyDictionary modDict;
+
+ public XText() {
+ super("AText", "text");
+ }
+
+ public XText(String displayLabel) {
+ this(displayLabel, "text");
+ }
+
+ public XText(String displayLabel, String xmlRoot) {
+ this(displayLabel, xmlRoot, "");
+ }
+
+ public XText(String displayLabel, String xmlRoot, String xmlSubRoot) {
+ super(displayLabel, xmlRoot, xmlSubRoot);
+ }
+
+ public void setEnabled(boolean enabled) {
+ sText.setEnabled(enabled);
+ }
+
+ public void setSize(int width, int height) {
+ this.width = width;
+ this.height = height;
+ if (sText != null && !sText.isDisposed()) sText.setSize(width, height);
+ }
+
+ public void setHeight(int height) {
+ this.height = height;
+ if (sText != null && !sText.isDisposed()) sText.setSize(sText.getSize().x, height);
+ }
+
+ public String toString() {
+ return label + ": *" + text + "*";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return sText;
+ }
+
+ /**
+ * Create Text Widgets. Widgets Created: Label: "text entry" horizonatalSpan takes up 2 columns; horizontalSpan must
+ * be >=2
+ */
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ createWidgets(parent, horizontalSpan, true);
+ }
+
+ public void createWidgets(Composite parent, int horizontalSpan, boolean fillText) {
+
+ if (!verticalLabel && (horizontalSpan < 2)) {
+ horizontalSpan = 2;
+ }
+
+ this.parent = parent;
+ Composite composite = null;
+
+ ModifyListener textListener = new ModifyListener() {
+
+ public void modifyText(ModifyEvent e) {
+ if (sText != null) {
+ debug("modifyText");
+ text = sText.getText();
+ setLabelError();
+ notifyXModifiedListeners();
+ }
+ }
+ };
+
+ if (fillVertically) {
+ composite = new Composite(parent, SWT.NONE);
+ GridLayout layout = ALayout.getZeroMarginLayout(1, false);
+ layout.verticalSpacing = 4;
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+ } else {
+ composite = new Composite(parent, SWT.NONE);
+ GridLayout layout = ALayout.getZeroMarginLayout(2, false);
+ layout.verticalSpacing = 4;
+ composite.setLayout(layout);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = horizontalSpan;
+ composite.setLayoutData(gd);
+ }
+ // composite = parent;
+
+ // Create Text Widgets
+ if (displayLabel && !label.equals("")) {
+ labelWidget = new Label(composite, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+ if (fillVertically) {
+ sText = new StyledText(composite, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL);
+ } else {
+ sText = new StyledText(composite, SWT.BORDER | SWT.SINGLE);
+ }
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ if (verticalLabel)
+ gd.horizontalSpan = horizontalSpan;
+ else
+ gd.horizontalSpan = horizontalSpan - 1;
+ gd.grabExcessHorizontalSpace = true;
+ gd.horizontalAlignment = GridData.FILL;
+ if (fillVertically) {
+ gd.grabExcessVerticalSpace = true;
+ gd.verticalAlignment = GridData.FILL;
+ }
+ if (fillVertically) {
+ if (height > 0) gd.heightHint = height;
+ }
+
+ sText.setLayoutData(gd);
+ sText.setMenu(getDefaultMenu());
+ sText.addModifyListener(textListener);
+ if (text != null) sText.setText(text);
+ if (spellCheck) {
+ spellPaintListener = new XTextSpellCheckPaintListener(this, OseeDictionary.getInstance());
+ sText.addPaintListener(spellPaintListener);
+ if (modDict != null) spellPaintListener.addXTextSpellModifyDictionary(modDict);
+ }
+ if (width != 0 && height != 0) sText.setSize(width, height);
+
+ if (maxTextChars > 0) {
+ sText.setTextLimit(maxTextChars);
+ }
+ if (fillText) updateTextWidget();
+ setLabelError();
+ sText.setEditable(editable);
+ parent.layout();
+ }
+
+ public void addXTextSpellModifyDictionary(XTextSpellModifyDictionary modDict) {
+ this.modDict = modDict;
+ if (spellPaintListener != null) spellPaintListener.addXTextSpellModifyDictionary(modDict);
+ }
+
+ /**
+ * @return text including xml tags replaced for references
+ */
+ public String getText() {
+ String text = sText.getText();
+ return text;
+ }
+
+ /**
+ * @param text
+ */
+ public void setText(String text) {
+ this.text = text;
+ if (sText != null) sText.setText(text);
+ }
+
+ public Menu getDefaultMenu() {
+ Menu menu = new Menu(sText.getShell());
+ MenuItem cut = new MenuItem(menu, SWT.NONE);
+ cut.setText("Cut");
+ cut.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ sText.cut();
+ sText.redraw();
+ }
+ });
+ MenuItem copy = new MenuItem(menu, SWT.NONE);
+ copy.setText("Copy");
+ copy.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ sText.copy();
+ }
+ });
+ MenuItem paste = new MenuItem(menu, SWT.NONE);
+ paste.setText("Paste");
+ paste.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ sText.paste();
+ sText.redraw();
+ }
+ });
+ return menu;
+ }
+
+ @Override
+ public void dispose() {
+ if (labelWidget != null) labelWidget.dispose();
+ if (sText != null) {
+ if (spellPaintListener != null && !sText.isDisposed()) {
+ sText.removePaintListener(spellPaintListener);
+ }
+ sText.dispose();
+ sText = null;
+ }
+ if (parent != null && !parent.isDisposed()) parent.layout();
+ }
+
+ public void setFocus() {
+ if (sText != null) sText.setFocus();
+ }
+
+ public void setSpellChecking(boolean spellCheck) {
+ if (sText != null) {
+ if (spellCheck)
+ sText.addPaintListener(spellPaintListener);
+ else if (spellPaintListener != null) sText.removePaintListener(spellPaintListener);
+ }
+ this.spellCheck = spellCheck;
+ }
+
+ public void setEditable(boolean editable) {
+ super.setEditable(editable);
+ if (sText != null && !sText.isDisposed()) {
+ sText.setEditable(editable);
+ }
+ }
+
+ /**
+ * Set max character limit on text field
+ *
+ * @param limit - if 0, then limit is 999, else sets to limit
+ */
+ public void setMaxTextLimit(int limit) {
+ this.maxTextChars = limit;
+ if (sText != null) {
+ if (limit == 0) {
+ sText.setTextLimit(999);
+ } else {
+ sText.setTextLimit(limit);
+ }
+ }
+ }
+
+ public void forceFocus() {
+ if (sText != null) {
+ sText.forceFocus();
+ }
+ }
+
+ public void setFillVertically(boolean fillVertically) {
+ super.setFillVertically(fillVertically);
+ }
+
+ public boolean isInteger() {
+ try {
+ new Integer(text);
+ } catch (NumberFormatException e) {
+ return false;
+ }
+ return true;
+ }
+
+ public boolean isFloat() {
+ try {
+ new Float(text);
+ } catch (NumberFormatException e) {
+ return false;
+ }
+ return true;
+ }
+
+ public int getInteger() {
+ Integer num;
+ try {
+ num = new Integer(text);
+ } catch (NumberFormatException e) {
+ return 0;
+ }
+ return num.intValue();
+ }
+
+ public double getFloat() {
+ Double num;
+ try {
+ num = new Double(text);
+ } catch (NumberFormatException e) {
+ return 0;
+ }
+ return num.doubleValue();
+ }
+
+ public void setRequiredEntry(boolean requiredEntry) {
+ super.setRequiredEntry(requiredEntry);
+ setLabelError();
+ }
+
+ public boolean requiredEntry() {
+ return requiredEntry;
+ }
+
+ public void addModifyListener(ModifyListener modifyListener) {
+ if (sText != null) sText.addModifyListener(modifyListener);
+ }
+
+ public String get() {
+ if (debug) System.err.println("text set *" + text + "*");
+ return text;
+ }
+
+ public String getXmlData() {
+ if (sText == null || sText.isDisposed())
+ return AXml.textToXml(text);
+ else
+ try {
+ return AXml.textToXml(sText.getText());
+ } catch (SWTException e) {
+ return AXml.textToXml(text);
+ }
+ }
+
+ public String toXml() {
+ if (xmlSubRoot.equals("")) {
+ return toXml(xmlRoot);
+ } else {
+ return toXml(xmlRoot, xmlSubRoot);
+ }
+ }
+
+ public String toXml(String xmlRoot) {
+ String s = "<" + xmlRoot + ">" + getXmlData() + "</" + xmlRoot + ">\n";
+ return s;
+ }
+
+ public String toXml(String xmlRoot, String xmlSubRoot) {
+ String s =
+ "<" + xmlRoot + ">" + "<" + xmlSubRoot + ">" + getXmlData() + "</" + xmlSubRoot + ">" + "</" + xmlRoot + ">\n";
+ return s;
+ }
+
+ public void setXmlData(String str) {
+ set(str);
+ if (debug) System.err.println("setFromXml *" + str + "*");
+ }
+
+ public void setFromXml(String xml) {
+ Matcher m;
+ m = Pattern.compile("<" + xmlRoot + ">(.*?)</" + xmlRoot + ">", Pattern.MULTILINE | Pattern.DOTALL).matcher(xml);
+
+ if (m.find()) {
+ String xmlStr = m.group(1);
+ if (debug) System.err.println("xmlStr *" + xmlStr + "*");
+ String str = AXml.xmlToText(xmlStr);
+ if (debug) System.err.println("str *" + str + "*");
+ setXmlData(str);
+ }
+ }
+
+ public int getInt() {
+ Integer percent = new Integer(0);
+ try {
+ percent = new Integer(text);
+ } catch (NumberFormatException e) {
+ }
+ return percent.intValue();
+ }
+
+ protected void updateTextWidget() {
+ if (sText == null || sText.isDisposed()) return;
+ if (text.equals(sText.getText())) return;
+ // Disable Listeners so not to fill Undo List
+ sText.setText(text);
+ // Reenable Listeners
+ setLabelError();
+ }
+
+ public void set(String text) {
+ if (text == null)
+ this.text = "";
+ else
+ this.text = text;
+ if (debug) System.err.println("set *" + text + "*");
+ updateTextWidget();
+ }
+
+ public void set(XText text) {
+ set(text.get());
+ }
+
+ public void append(String text) {
+ this.text = this.text + text;
+ updateTextWidget();
+ }
+
+ public void refresh() {
+ updateTextWidget();
+ }
+
+ public String getReportData() {
+ String s = "";
+ String textStr = new String(text);
+ if (fillVertically) {
+ s = s + "\n";
+ textStr = textStr.replaceAll("\n", "\n" + " ");
+ textStr = " " + textStr;
+ }
+ s = s + textStr;
+ s = s.replaceAll("\n$", "");
+ return s;
+ }
+
+ public String toHTML(String labelFont, boolean newLineText) {
+ String s = AHTML.getLabelStr(labelFont, label + ": ");
+ if (newLineText) s = "<dl><dt>" + s + "<dd>";
+ s += text;
+ if (newLineText) s += "</dl>";
+ return s;
+ }
+
+ public String toHTML(String labelFont) {
+ return toHTML(labelFont, false);
+ }
+
+ /**
+ * @return Returns the dragableArtifact.
+ */
+ public boolean isDragableArtifact() {
+ return dragableArtifact;
+ }
+
+ /**
+ * @param dragableArtifact The dragableArtifact to set.
+ */
+ public void setDragableArtifact(boolean dragableArtifact) {
+ this.dragableArtifact = dragableArtifact;
+ }
+
+ public void debug(String str) {
+ if (debug) System.err.println("AText :" + str);
+ }
+
+ public Result isValid() {
+ if (isRequiredEntry() && get().equals("")) {
+ return new Result(String.format("Must enter \"%s\"", label));
+ }
+ return Result.TrueResult;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return sText.getText();
+ }
+
+ /**
+ * @return the sText
+ */
+ public StyledText getStyledText() {
+ return sText;
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextDam.java
new file mode 100644
index 00000000000..95d9d115208
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextDam.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.db.connection.exception.AttributeDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+public class XTextDam extends XText implements IArtifactWidget {
+
+ private Artifact artifact;
+ private String attributeTypeName;
+
+ public XTextDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ public void setArtifact(Artifact artifact, String attributeTypeName) throws OseeCoreException {
+ this.artifact = artifact;
+ this.attributeTypeName = attributeTypeName;
+
+ try {
+ String value = artifact.getSoleAttributeValue(attributeTypeName);
+ super.set(value);
+ } catch (AttributeDoesNotExist ex) {
+ super.set("");
+ }
+ }
+
+ @Override
+ public void saveToArtifact() throws OseeCoreException {
+ String value = get();
+ if (value == null || value.equals("")) {
+ artifact.deleteSoleAttribute(attributeTypeName);
+ } else if (!value.equals(artifact.getSoleAttributeValue(attributeTypeName, ""))) {
+ artifact.setSoleAttributeValue(attributeTypeName, value);
+ }
+ }
+
+ @Override
+ public Result isDirty() throws OseeCoreException {
+ try {
+ String enteredValue = get();
+ String storedValue = artifact.getSoleAttributeValue(attributeTypeName);
+ if (!enteredValue.equals(storedValue)) {
+ return new Result(true, attributeTypeName + " is dirty");
+ }
+ } catch (AttributeDoesNotExist ex) {
+ if (!get().equals("")) return new Result(true, attributeTypeName + " is dirty");
+ }
+ return Result.FalseResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget#revert()
+ */
+ @Override
+ public void revert() throws OseeCoreException {
+ setArtifact(artifact, attributeTypeName);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextDescriptiveName.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextDescriptiveName.java
new file mode 100644
index 00000000000..356b7f00b02
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextDescriptiveName.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+public class XTextDescriptiveName extends XTextDam implements IArtifactWidget {
+
+ public Artifact artifact;
+
+ public XTextDescriptiveName(String displayLabel) {
+ super(displayLabel);
+ }
+
+ public void setArtifact(Artifact artifact) throws Exception {
+ this.artifact = artifact;
+ super.setArtifact(artifact, "Name");
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextResourceDropDam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextResourceDropDam.java
new file mode 100644
index 00000000000..a27b1720150
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextResourceDropDam.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTransfer;
+import org.eclipse.osee.framework.ui.plugin.util.AJavaProject;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkspace;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.DropTargetAdapter;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ResourceTransfer;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XTextResourceDropDam extends XTextDam {
+
+ /**
+ * @param displayLabel
+ */
+ public XTextResourceDropDam(String displayLabel) {
+ super(displayLabel);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XTextDam#createWidgets(org.eclipse.swt.widgets.Composite,
+ * int, boolean)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan, boolean fillText) {
+ super.createWidgets(parent, horizontalSpan, fillText);
+ setupDragAndDropSupport();
+ }
+
+ private void setupDragAndDropSupport() {
+
+ // Do not allow drop if default branch is not same as artifacts that reside in this table
+ DropTarget target = new DropTarget(getStyledText(), DND.DROP_COPY);
+ target.setTransfer(new Transfer[] {ResourceTransfer.getInstance(), FileTransfer.getInstance(),
+ TextTransfer.getInstance(), ArtifactTransfer.getInstance()});
+ target.addDropListener(new DropTargetAdapter() {
+
+ public void drop(DropTargetEvent event) {
+ performDrop(event);
+ }
+
+ public void dragOver(DropTargetEvent event) {
+ event.detail = DND.DROP_COPY;
+ }
+
+ public void dropAccept(DropTargetEvent event) {
+ }
+ });
+ }
+
+ private void performDrop(DropTargetEvent e) {
+ Set<String> strs = new HashSet<String>();
+ if (e.data instanceof String) {
+ strs.add((String) e.data);
+ } else if (e.data instanceof String[]) {
+ for (String str : (String[]) e.data)
+ strs.add(str);
+ } else if (e.data instanceof IResource[]) {
+ IResource res[] = (IResource[]) e.data;
+ for (Object obj : res) {
+ StringBuffer sb = new StringBuffer();
+ if (obj instanceof IFile) {
+ IFile iFile = (IFile) obj;
+ if (iFile != null) {
+ File file = AWorkspace.iFileToFile(iFile);
+ try {
+ String javaPkg = AJavaProject.getJavaPackage(file);
+ if (javaPkg != null && !javaPkg.equals("")) sb.append(javaPkg + " - ");
+ } catch (Exception ex) {
+ // do nothing
+ }
+ sb.append(iFile.getName());
+ String ver = "unknown";//TODO properly abstract out version control (team providers?) so that we can get the version - VersionControl.getInstance().getRepositoryEntry(file).getVersion();
+ if (ver != null) {
+ if (ver.equals("unknown")) ver = "enter version here";
+ sb.append(" (" + ver + ")");
+ }
+ }
+ }
+ if (!sb.toString().equals("")) strs.add(sb.toString());
+ }
+ }
+ for (String str : strs) {
+ append(str + "\n");
+ }
+ refresh();
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextSpellCheckPaintListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextSpellCheckPaintListener.java
new file mode 100644
index 00000000000..6612d1b4050
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextSpellCheckPaintListener.java
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.StringTokenizer;
+import org.eclipse.osee.framework.ui.swt.styledText.ASpellWord;
+import org.eclipse.osee.framework.ui.swt.styledText.IDictionary;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+
+/**
+ * PaintListener that will underline all misspelled words in a StyledText widget. This class must be extended to provide
+ * for getting the dictionary and activating/deactivating certain functionality.
+ *
+ * @author Donald G. Dunne
+ */
+public class XTextSpellCheckPaintListener implements PaintListener {
+
+ private final IDictionary dict;
+ private final XText xText;
+ private Set<ASpellWord> errors = new HashSet<ASpellWord>();
+ private XTextSpellModifyDictionary modDict;
+
+ public XTextSpellCheckPaintListener(final XText xText, IDictionary dict) {
+ this.xText = xText;
+ this.dict = dict;
+ if (modDict != null) {
+ addXTextSpellModifyDictionary(modDict);
+ }
+ }
+
+ public void addXTextSpellModifyDictionary(XTextSpellModifyDictionary modDict) {
+ if (xText == null || xText.getStyledText() == null || xText.getStyledText().isDisposed()) return;
+ this.modDict = modDict;
+ xText.getStyledText().addMouseListener(mouseListener);
+ xText.getStyledText().addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ if (xText == null || xText.getStyledText() == null || xText.getStyledText().isDisposed()) return;
+ xText.getStyledText().removeMouseListener(mouseListener);
+ }
+ });
+ }
+
+ public void paintControl(PaintEvent e) {
+ if (xText == null || xText.getStyledText() == null || xText.getStyledText().isDisposed()) return;
+ GC gc = e.gc;
+ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
+ if (xText != null) {
+ String text = xText.getStyledText().getText();
+
+ // Get spelling errors
+ getErrors(text);
+ for (ASpellWord sw : errors)
+ drawError(sw.start, sw.word.length(), xText.getStyledText(), gc);
+ }
+ }
+
+ private MouseListener mouseListener = new MouseListener() {
+ public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
+ StyledText styledText = (StyledText) e.widget;
+ int offset = 0;
+ try {
+ offset = styledText.getOffsetAtLocation(new Point(e.x, e.y));
+ } catch (IllegalArgumentException ex) {
+ // Illegal arguement exception happens when selected point is outside
+ // the range of the rectangle. Since it does it's own calculation, just
+ // throw this exception away.
+ return;
+ }
+ for (ASpellWord sw : errors) {
+ if (sw.start < offset && (sw.start + sw.word.length()) > offset) {
+ // System.out.println("Found error word " + sw.word);
+ handleErrorSelected(sw);
+ break;
+ }
+ }
+ };
+
+ public void mouseDoubleClick(MouseEvent e) {
+ }
+
+ public void mouseDown(MouseEvent e) {
+ }
+ };
+
+ private void handleErrorSelected(final ASpellWord sw) {
+ Menu menu = xText.getStyledText().getMenu();
+
+ new MenuItem(menu, SWT.SEPARATOR);
+
+ MenuItem addLocal = new MenuItem(menu, SWT.NONE);
+ addLocal.setText("Add \"" + sw.word + "\" to Personal dictionary.");
+ addLocal.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ if (modDict.addToLocalDictionary(sw.word)) {
+ xText.getStyledText().redraw();
+ }
+ }
+ });
+
+ MenuItem addGlobal = new MenuItem(menu, SWT.NONE);
+ addGlobal.setText("Add \"" + sw.word + "\" to Global dictionary.");
+ addGlobal.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ if (modDict.addToGlobalDictionary(sw.word)) {
+ xText.getStyledText().redraw();
+ }
+ }
+ });
+ menu.addMenuListener(new MenuListener() {
+ public void menuHidden(MenuEvent e) {
+ xText.getStyledText().setMenu(xText.getDefaultMenu());
+ }
+
+ public void menuShown(MenuEvent e) {
+ };
+ });
+ }
+
+ /**
+ * Draws a single spelling error squiggly line
+ *
+ * @param offset - offset of bad word
+ * @param len - length of bad word
+ */
+ private void drawError(int offset, int len, StyledText sText, GC gc) {
+ if (sText.isDisposed()) return;
+ // Convert to coordinates
+ try {
+ Point off1 = sText.getLocationAtOffset(offset);
+ off1.y--;
+ Point off2 = sText.getLocationAtOffset(offset + len);
+ off2.y--;
+ int h = sText.getLineHeight();
+ int[] polyline = computePolyline(off1, off2, h);
+ gc.drawPolyline(polyline);
+ } catch (RuntimeException e) {
+ }
+ }
+
+ /**
+ */
+ private void getErrors(String str) {
+ errors.clear();
+ StringTokenizer st = new StringTokenizer(str, "[\t\r\n ]", true);
+ int loc = 0;
+ while (st.hasMoreTokens()) {
+ String string = st.nextToken();
+ // if not a whitespace character
+ if (!string.matches("^\\s*$")) {
+ // System.out.println("isWord: orig *" + string + "* => *" + word + "*");
+ if (!dict.isWord(string)) {
+ ASpellWord sw = new ASpellWord(string, loc);
+ // System.out.println("word " + word + " is error");
+ errors.add(sw);
+ }
+ }
+ loc += string.length();
+ }
+ }
+
+ /**
+ * Computes the squiggly line.
+ *
+ * @param left the left end point
+ * @param right the right end point
+ * @param height the height of the squiggly line
+ * @return the polyline array
+ */
+ private int[] computePolyline(Point left, Point right, int height) {
+
+ final int WIDTH = 3;
+ final int HEIGHT = 0;
+
+ int w2 = 2 * WIDTH;
+ int peeks = (right.x - left.x) / w2;
+
+ int leftX = left.x;
+
+ // compute (number of points) * 2
+ int length = 4 * peeks + 2;
+ if (length <= 0) return new int[0];
+
+ int[] coordinates = new int[length];
+
+ // compute top and bottom of peeks
+ int bottom = left.y + height;
+ int top = bottom - HEIGHT;
+
+ // populate array with peek coordinates
+ int index = 0;
+ for (int i = 0; i < peeks; i++) {
+ coordinates[index++] = leftX + (w2 * i);
+ coordinates[index++] = bottom;
+ coordinates[index++] = coordinates[index - 3] + WIDTH;
+ coordinates[index++] = top;
+ }
+ // add the last down flank
+ coordinates[length - 2] = left.x + (w2 * peeks);
+ coordinates[length - 1] = bottom;
+ return coordinates;
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextSpellModifyDictionary.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextSpellModifyDictionary.java
new file mode 100644
index 00000000000..96c23555d63
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTextSpellModifyDictionary.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface XTextSpellModifyDictionary {
+
+ public boolean addToLocalDictionary(String word);
+
+ public boolean addToGlobalDictionary(String word);
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTypeListViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTypeListViewer.java
new file mode 100644
index 00000000000..65399fe6d3c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XTypeListViewer.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public abstract class XTypeListViewer extends XListViewer {
+
+ public XTypeListViewer(String name) {
+ super(name);
+
+ setLabelProvider(new LabelProvider());
+ setSorter(new ViewerSorter());
+ }
+
+ public Branch resolveBranch(String keyedBranchName) {
+ Branch branch = null;
+ try {
+ if (keyedBranchName != null) {
+ branch = BranchManager.getKeyedBranch(keyedBranchName);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+
+ if (branch == null) {
+ branch = BranchManager.getDefaultBranch();
+ }
+ return branch;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidget.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidget.java
new file mode 100644
index 00000000000..5b355b1cddb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidget.java
@@ -0,0 +1,435 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.jdk.core.util.AXml;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * Abstract class for all widgets used in Wizards and Editors
+ */
+public abstract class XWidget {
+
+ protected Label labelWidget = null;
+ protected String label = "";
+ protected String xmlRoot = "";
+ protected String xmlSubRoot = "";
+ protected String toolTip = null;
+ protected boolean requiredEntry = false;
+ protected boolean editable = true;
+ protected boolean verticalLabel = false;
+ protected boolean fillVertically = false;
+ protected boolean fillHorizontally = false;
+
+ /**
+ * @return the fillHorizontally
+ */
+ public boolean isFillHorizontally() {
+ return fillHorizontally;
+ }
+
+ protected boolean displayLabel = true;
+ private final Set<XModifiedListener> modifiedListeners = new LinkedHashSet<XModifiedListener>();
+ private MouseListener mouseLabelListener;
+
+ /**
+ * Display "label: data"
+ */
+ public final static int RPT_NONE = 0;
+ /**
+ * Display "label: data\n\n" Default of AAtribute
+ */
+ public final static int RPT_SINGLE_LINE = 1;
+ /**
+ * Display "label:\n data\n\n"
+ */
+ public final static int RPT_MULTI_LINE = 2;
+ protected int reportType = RPT_SINGLE_LINE;
+ protected FormToolkit toolkit;
+
+ public XWidget(String label) {
+ this.label = label;
+ }
+
+ public XWidget(String label, String xmlRoot) {
+ this.label = label;
+ this.xmlRoot = xmlRoot;
+ }
+
+ public XWidget(String label, String xmlRoot, String xmlSubRoot) {
+ this.label = label;
+ this.xmlRoot = xmlRoot;
+ this.xmlSubRoot = xmlSubRoot;
+ }
+
+ public void setToolTip(String toolTip) {
+ this.toolTip = toolTip;
+ if (this.labelWidget != null && !labelWidget.isDisposed()) this.labelWidget.setToolTipText(toolTip);
+ }
+
+ public void addXModifiedListener(XModifiedListener listener) {
+ modifiedListeners.add(listener);
+ }
+
+ public void notifyXModifiedListeners() {
+ for (XModifiedListener listener : modifiedListeners)
+ listener.widgetModified(this);
+ }
+
+ public void setLabelError() {
+ if (labelWidget == null || labelWidget.isDisposed()) {
+ return;
+ }
+ if (!isValid().isTrue()) {
+ labelWidget.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+ } else {
+ labelWidget.setForeground(null);
+ }
+ if (mouseLabelListener == null) {
+ mouseLabelListener = new MouseListener() {
+ public void mouseDoubleClick(MouseEvent e) {
+ openHelp();
+ }
+
+ public void mouseDown(MouseEvent e) {
+ }
+
+ public void mouseUp(MouseEvent e) {
+ }
+ };
+ labelWidget.addMouseListener(mouseLabelListener);
+ }
+ }
+
+ public abstract Control getControl();
+
+ public void openHelp() {
+ try {
+ if (toolTip != null && label != null) MessageDialog.openInformation(
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), label + " Tool Tip", toolTip);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ /**
+ * Create Widgets used to display label and entry for wizards and editors
+ */
+ public abstract void createWidgets(Composite parent, int horizontalSpan);
+
+ public void createWidgets(FormToolkit toolkit, Composite parent, int horizontalSpan) {
+ this.toolkit = toolkit;
+ createWidgets(parent, horizontalSpan);
+ adaptControls(toolkit);
+ }
+
+ public void adaptControls(FormToolkit toolkit) {
+ if (getControl() != null) toolkit.adapt(getControl(), true, true);
+ if (labelWidget != null) {
+ toolkit.adapt(labelWidget, true, true);
+ toolkit.adapt(labelWidget.getParent(), true, true);
+ }
+ }
+
+ /**
+ * Create Widgets used to display label and entry for wizards and editors
+ */
+ public abstract void dispose();
+
+ /**
+ * Set focus to the entry widget
+ */
+ public abstract void setFocus();
+
+ /**
+ * Refresh the entry widget
+ */
+ public abstract void refresh();
+
+ /**
+ * Return true if entry is valid
+ *
+ * @return Return boolean validity indication.
+ */
+ public abstract Result isValid();
+
+ /**
+ * Called with string found between xml tags Used by setFromXml() String will be sent through AXml.xmlToText() before
+ * being sent to setXmlData implementation. Used by: setFromXml
+ *
+ * @param str - value to set
+ */
+ public abstract void setXmlData(String str);
+
+ /**
+ * Return string to save off between xml tags Used by call to toXml() String returned will be sent through
+ * AXml.textToXml() before being saved Used by: toXml
+ *
+ * @return Return Xml data string.
+ */
+ public abstract String getXmlData();
+
+ public abstract String toHTML(String labelFont);
+
+ public String toXml() throws Exception {
+ if (xmlSubRoot.equals("")) {
+ return toXml(xmlRoot);
+ } else {
+ return toXml(xmlRoot, xmlSubRoot);
+ }
+ }
+
+ public String toXml(String xmlRoot) throws Exception {
+ String s = "<" + xmlRoot + ">" + AXml.textToXml(getXmlData()) + "</" + xmlRoot + ">\n";
+ return s;
+ }
+
+ public String toXml(String xmlRoot, String xmlSubRoot) throws Exception {
+ String s =
+ "<" + xmlRoot + ">" + "<" + xmlSubRoot + ">" + AXml.textToXml(getXmlData()) + "</" + xmlSubRoot + ">" + "</" + xmlRoot + ">\n";
+ return s;
+ }
+
+ public void setFromXml(String xml) throws IllegalStateException {
+ Matcher m;
+ m = Pattern.compile("<" + xmlRoot + ">(.*?)</" + xmlRoot + ">", Pattern.MULTILINE | Pattern.DOTALL).matcher(xml);
+ if (m.find()) setXmlData(AXml.xmlToText(m.group(1)));
+ }
+
+ /**
+ * @return Returns vector of Strings.
+ */
+ public Vector<String> getDisplayLabels() {
+ Vector<String> l = new Vector<String>();
+ l.add(label);
+ return l;
+ }
+
+ /**
+ * @param displayLabel The displayLabel to set.
+ */
+ public void setDisplayLabel(String displayLabel) {
+ this.label = displayLabel;
+ }
+
+ /**
+ * @return Returns the editable.
+ */
+ public boolean isEditable() {
+ return editable;
+ }
+
+ /**
+ * @param editable The editable to set.
+ */
+ public void setEditable(boolean editable) {
+ this.editable = editable;
+ }
+
+ /**
+ * @return Returns the verticalLabel.
+ */
+ public boolean isVerticalLabel() {
+ return verticalLabel;
+ }
+
+ /**
+ * @param verticalLabel The verticalLabel to set.
+ */
+ public void setVerticalLabel(boolean verticalLabel) {
+ this.verticalLabel = verticalLabel;
+ }
+
+ /**
+ * @return Returns the xmlRoot.
+ */
+ public String getXmlRoot() {
+ return xmlRoot;
+ }
+
+ /**
+ * @param xmlRoot The xmlRoot to set.
+ */
+ public void setXmlRoot(String xmlRoot) {
+ this.xmlRoot = xmlRoot;
+ }
+
+ /**
+ * @return Returns the xmlSubRoot.
+ */
+ public String getXmlSubRoot() {
+ return xmlSubRoot;
+ }
+
+ /**
+ * @param xmlSubRoot The xmlSubRoot to set.
+ */
+ public void setXmlSubRoot(String xmlSubRoot) {
+ this.xmlSubRoot = xmlSubRoot;
+ }
+
+ /**
+ * @return Returns the toolTip.
+ */
+ public String getToolTip() {
+ return toolTip;
+ }
+
+ /**
+ * @return Returns the fillVertically.
+ */
+ public boolean isFillVertically() {
+ return fillVertically;
+ }
+
+ /**
+ * @param fillVertically The fillVertically to set.
+ */
+ public void setFillVertically(boolean fillVertically) {
+ this.fillVertically = fillVertically;
+ }
+
+ /**
+ * @return Returns the label.
+ */
+ public String getLabel() {
+ return label;
+ }
+
+ /**
+ * @param label The label to set.
+ */
+ public void setLabel(String label) {
+ this.label = label;
+ }
+
+ /**
+ * @return Returns the labelWidget.
+ */
+ public Label getLabelWidget() {
+ return labelWidget;
+ }
+
+ /**
+ * @param labelWidget The labelWidget to set.
+ */
+ public void setLabelWidget(Label labelWidget) {
+ this.labelWidget = labelWidget;
+ }
+
+ /**
+ * @return Returns the requiredEntry.
+ */
+ public boolean isRequiredEntry() {
+ return requiredEntry;
+ }
+
+ /**
+ * @param requiredEntry The requiredEntry to set.
+ */
+ public void setRequiredEntry(boolean requiredEntry) {
+ this.requiredEntry = requiredEntry;
+ }
+
+ /**
+ * @return Returns the reportType.
+ */
+ public int getReportType() {
+ return reportType;
+ }
+
+ /**
+ * @param reportType The reportType to set.
+ */
+ public void setReportType(int reportType) {
+ this.reportType = reportType;
+ }
+
+ /**
+ * Return data for display in Report (without label) NOTE: There should be no newlines at end of String
+ *
+ * @return Return string.
+ */
+ public abstract String getReportData();
+
+ @Override
+ public String toString() {
+ return toReport();
+ }
+
+ public String toReport() {
+ return toReport(reportType);
+ }
+
+ /**
+ * RPT_NONE (label: data), RPT_SINGLE_LINE (label: data\n\n), RPT_MULTI_LINE (label:\n data\n\n)
+ *
+ * @return String report
+ */
+ public String toReport(int rptType) {
+ String s = label + ": ";
+ switch (rptType) {
+ case RPT_SINGLE_LINE:
+ s += getReportData() + "\n\n";
+ break;
+ case RPT_MULTI_LINE:
+ String data = getReportData();
+ data = data.replaceAll("\n", "\n ");
+ s += "\n" + data + "\n\n";
+ break;
+ default:
+ s += getReportData();
+ break;
+ }
+ return s;
+ }
+
+ /**
+ * If set, label will be displayed with entry widget.
+ *
+ * @param displayLabel The displayLabel to set.
+ */
+ public void setDisplayLabel(boolean displayLabel) {
+ this.displayLabel = displayLabel;
+ }
+
+ public void setFillHorizontally(boolean fillHorizontally) {
+ this.fillHorizontally = fillHorizontally;
+ }
+
+ public abstract Object getData();
+
+ /**
+ * @return the displayLabel
+ */
+ public boolean isDisplayLabel() {
+ return displayLabel;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/DateValue.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/DateValue.java
new file mode 100644
index 00000000000..1b18674f35f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/DateValue.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.cellEditor;
+
+import java.util.Date;
+import org.eclipse.nebula.widgets.calendarcombo.CalendarCombo;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class DateValue extends UniversalCellEditorValue {
+ private Date date;
+
+ /**
+ *
+ */
+ public DateValue() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.jdk.core.swt.universalCellEditor.UniversalCellEditorValue#selectControl(org.eclipse.swt.widgets.Control[])
+ */
+ @Override
+ public Control prepareControl(UniversalCellEditor universalEditor) {
+ CalendarCombo datePicker = universalEditor.getDateControl();
+ datePicker.setDate(date);
+ return datePicker;
+ }
+
+ public void setValue(Date date) {
+ this.date = date;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/EnumeratedValue.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/EnumeratedValue.java
new file mode 100644
index 00000000000..b7fcfebac05
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/EnumeratedValue.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.cellEditor;
+
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class EnumeratedValue extends UniversalCellEditorValue {
+ private String value;
+ private String[] choices;
+
+ /**
+ *
+ */
+ public EnumeratedValue() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.jdk.core.swt.universalCellEditor.UniversalCellEditorValue#selectControl(org.eclipse.swt.widgets.Control[])
+ */
+ @Override
+ public Control prepareControl(UniversalCellEditor universalEditor) {
+ Combo comboBox = universalEditor.getEnumeratedControl();
+ comboBox.setItems(choices);
+ if (value != null) comboBox.setText(value);
+
+ comboBox.setVisibleItemCount(15);
+ return comboBox;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public void setChocies(String[] choices) {
+ this.choices = choices;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/StringValue.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/StringValue.java
new file mode 100644
index 00000000000..b2f6db564f9
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/StringValue.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.cellEditor;
+
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class StringValue extends UniversalCellEditorValue {
+ private String value;
+
+ /**
+ *
+ */
+ public StringValue() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.jdk.core.swt.universalCellEditor.UniversalCellEditorValue#selectControl(org.eclipse.swt.widgets.Control[])
+ */
+ @Override
+ public Control prepareControl(UniversalCellEditor universalEditor) {
+ Text textBox = universalEditor.getStringControl();
+ if (value != null) textBox.setText(value);
+ return textBox;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/UniversalCellEditor.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/UniversalCellEditor.java
new file mode 100644
index 00000000000..8dc61dbd661
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/UniversalCellEditor.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.cellEditor;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.nebula.widgets.calendarcombo.CalendarCombo;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class UniversalCellEditor extends CellEditor {
+ private Combo comboBox;
+ private Text textBox;
+ private CalendarCombo datePicker;
+ private Control control;
+ private boolean personCombo = false;
+
+ /**
+ * @param parent
+ */
+ public UniversalCellEditor(Composite parent) {
+ this(parent, SWT.NONE);
+ }
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public UniversalCellEditor(Composite parent, int style) {
+ super(parent, style);
+ this.comboBox = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
+ this.textBox = new Text(parent, SWT.SINGLE);
+ this.datePicker = new CalendarCombo(parent, SWT.BORDER);
+
+ setValueValid(true);
+ }
+
+ public Text getStringControl() {
+ return textBox;
+ }
+
+ public Combo getEnumeratedControl() {
+ return comboBox;
+ }
+
+ public Combo getPersonComboControl() {
+ personCombo = true;
+ return comboBox;
+ }
+
+ public CalendarCombo getDateControl() {
+ return datePicker;
+ }
+
+ /**
+ * Since UniveralCellEditor is managing its own controls and the CellEditor's mechanisms for managing the control
+ * have been completly overridden, return null back to CellEditor when it calls this method
+ */
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.CellEditor#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createControl(Composite parent) {
+ return null;
+ }
+
+ /**
+ * Returns whether this cell editor is activated.
+ *
+ * @return <code>true</code> if this cell editor's control is currently visible, and <code>false</code> if not
+ * visible
+ */
+ @Override
+ public boolean isActivated() {
+ return control != null && control.isVisible();
+ }
+
+ /**
+ * Returns the control used to implement this cell editor.
+ *
+ * @return the control, or <code>null</code> if this cell editor has no control
+ */
+ @Override
+ public Control getControl() {
+ return control;
+ }
+
+ /**
+ * Hides this cell editor's control. Does nothing if this cell editor is not visible.
+ */
+ @Override
+ public void deactivate() {
+ if (control != null && !control.isDisposed()) {
+ control.setVisible(false);
+ }
+ }
+
+ /**
+ * Disposes of this cell editor and frees any associated SWT resources.
+ */
+ @Override
+ public void dispose() {
+ if (control != null && !control.isDisposed()) {
+ control.dispose();
+ }
+ control = null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.CellEditor#doGetValue()
+ */
+ @Override
+ protected Object doGetValue() {
+ if ((control instanceof Combo) && personCombo) {
+ return comboBox.getText();
+ }
+ if (control instanceof Combo) {
+ return comboBox.getText();
+ }
+ if (control instanceof Text) {
+ return textBox.getText();
+ }
+ if (control instanceof CalendarCombo) {
+ return datePicker.getDate().getTime();
+ }
+ throw new IllegalArgumentException("Control was of an unexpected type: " + control.getClass().getName());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.CellEditor#doSetFocus()
+ */
+ @Override
+ protected void doSetFocus() {
+ control.setFocus();
+ }
+
+ /**
+ * called just befor a cell is to be edited
+ */
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.CellEditor#doSetValue(java.lang.Object)
+ */
+ @Override
+ protected void doSetValue(Object value) {
+ if (value instanceof UniversalCellEditorValue) {
+ UniversalCellEditorValue editorValue = (UniversalCellEditorValue) value;
+ control = editorValue.prepareControl(this);
+ } else {
+ throw new IllegalArgumentException("value of unexpected type: " + value.getClass().getName());
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/UniversalCellEditorValue.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/UniversalCellEditorValue.java
new file mode 100644
index 00000000000..1a4f703b453
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/cellEditor/UniversalCellEditorValue.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.cellEditor;
+
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public abstract class UniversalCellEditorValue {
+ /**
+ *
+ */
+ protected UniversalCellEditorValue() {
+ super();
+ }
+
+ public abstract Control prepareControl(UniversalCellEditor universalEditor);
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactCheckTreeDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactCheckTreeDialog.java
new file mode 100644
index 00000000000..1b11ed772a4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactCheckTreeDialog.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.util.ArtifactDescriptiveLabelProvider;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ArtifactCheckTreeDialog extends CheckedTreeSelectionDialog {
+
+ public ArtifactCheckTreeDialog(Collection<? extends Artifact> artifacts) {
+ this(artifacts, new ArtifactDescriptiveLabelProvider());
+ }
+
+ public ArtifactCheckTreeDialog(Collection<? extends Artifact> artifacts, ILabelProvider iLabelProvider) {
+ super(Display.getCurrent().getActiveShell(), iLabelProvider, new ArtifactTreeContentProvider());
+ if (artifacts != null) setInput(artifacts);
+ }
+
+ public ArtifactCheckTreeDialog() {
+ this(null);
+ }
+
+ public Collection<Artifact> getSelection() {
+ ArrayList<Artifact> arts = new ArrayList<Artifact>();
+ for (Object obj : getResult())
+ arts.add((Artifact) obj);
+ return arts;
+ }
+
+ @Override
+ protected Control createDialogArea(Composite container) {
+ Control c = super.createDialogArea(container);
+ getTreeViewer().setSorter(new ViewerSorter() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ return getComparator().compare(((Artifact) e1).getDescriptiveName(), ((Artifact) e2).getDescriptiveName());
+ }
+ });
+ return c;
+ }
+
+ public void setArtifacts(Collection<? extends Artifact> artifacts) {
+ setInput(artifacts);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactListDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactListDialog.java
new file mode 100644
index 00000000000..20bd9455f73
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactListDialog.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.util.Collection;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.util.ArtifactDescriptiveLabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.ListDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ArtifactListDialog extends ListDialog {
+
+ boolean requireSelection = true;
+
+ /**
+ * @return the requireSelection
+ */
+ public boolean isRequireSelection() {
+ return requireSelection;
+ }
+
+ /**
+ * @param requireSelection the requireSelection to set
+ */
+ public void setRequireSelection(boolean requireSelection) {
+ this.requireSelection = requireSelection;
+ }
+
+ public ArtifactListDialog(Shell parent) {
+ this(parent, null);
+ }
+
+ public ArtifactListDialog(Shell parent, Collection<? extends Artifact> artifacts) {
+ super(parent);
+ setContentProvider(new ArrayContentProvider());
+ setLabelProvider(new ArtifactDescriptiveLabelProvider());
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ }
+
+ public Artifact getSelection() {
+ return (Artifact) getResult()[0];
+ }
+
+ @Override
+ protected Control createDialogArea(Composite container) {
+ Control c = super.createDialogArea(container);
+ getTableViewer().setSorter(new ViewerSorter() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ return getComparator().compare(((Artifact) e1).getDescriptiveName(), ((Artifact) e2).getDescriptiveName());
+ }
+ });
+ return c;
+ }
+
+ public void setArtifacts(Collection<? extends Artifact> artifacts) {
+ setInput(artifacts);
+ }
+
+ @Override
+ protected void okPressed() {
+ if (requireSelection && getTableViewer().getSelection().isEmpty()) {
+ AWorkbench.popup("ERROR", "Must make selection.");
+ return;
+ }
+ super.okPressed();
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactTreeChildrenContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactTreeChildrenContentProvider.java
new file mode 100644
index 00000000000..5aa87afac3c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactTreeChildrenContentProvider.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * Shows artifacts and children of given class
+ *
+ * @author Donald G. Dunne
+ */
+public class ArtifactTreeChildrenContentProvider implements ITreeContentProvider {
+ private static Object[] EMPTY_ARRAY = new Object[0];
+ protected TreeViewer viewer;
+ private final Class<? extends Artifact> clazz;
+
+ public ArtifactTreeChildrenContentProvider(Class<? extends Artifact> clazz) {
+ this.clazz = clazz;
+ }
+
+ /*
+ * @see IContentProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /**
+ * Notifies this content provider that the given viewer's input has been switched to a different element.
+ * <p>
+ * A typical use for this method is registering the content provider as a listener to changes on the new input (using
+ * model-specific means), and deregistering the viewer from the old input. In response to these change notifications,
+ * the content provider propagates the changes to the viewer.
+ * </p>
+ *
+ * @param viewer the viewer
+ * @param oldInput the old input element, or <code>null</code> if the viewer did not previously have an input
+ * @param newInput the new input element, or <code>null</code> if the viewer does not have an input
+ * @see IContentProvider#inputChanged(Viewer, Object, Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ this.viewer = (TreeViewer) viewer;
+ }
+
+ /**
+ * The tree viewer calls its content provider&#8217;s getChildren method when it needs to create or display the child
+ * elements of the domain object, <b>parent </b>. This method should answer an array of domain objects that represent
+ * the unfiltered children of <b>parent </b>
+ *
+ * @see ITreeContentProvider#getChildren(Object)
+ */
+ @SuppressWarnings("unchecked")
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Collection) {
+ return ((Collection) parentElement).toArray();
+ }
+ if (parentElement.getClass().equals(clazz)) {
+ try {
+ return Artifacts.getChildrenOfTypeSet((Artifact) parentElement, clazz, true).toArray();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ return EMPTY_ARRAY;
+ }
+
+ /*
+ * @see ITreeContentProvider#getParent(Object)
+ */
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ /**
+ * The tree viewer asks its content provider if the domain object represented by <b>element </b> has any children.
+ * This method is used by the tree viewer to determine whether or not a plus or minus should appear on the tree
+ * widget.
+ *
+ * @see ITreeContentProvider#hasChildren(Object)
+ */
+ public boolean hasChildren(Object element) {
+ return getChildren(element).length > 0;
+ }
+
+ /**
+ * This is the method invoked by calling the <b>setInput </b> method on the tree viewer. In fact, the <b>getElements
+ * </b> method is called only in response to the tree viewer's <b>setInput </b> method and should answer with the
+ * appropriate domain objects of the inputElement. The <b>getElements </b> and <b>getChildren </b> methods operate in
+ * a similar way. Depending on your domain objects, you may have the <b>getElements </b> simply return the result of
+ * calling <b>getChildren </b>. The two methods are kept distinct because it provides a clean way to differentiate
+ * between the root domain object and all other domain objects.
+ *
+ * @see IStructuredContentProvider#getElements(Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactTreeContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactTreeContentProvider.java
new file mode 100644
index 00000000000..344dd326a27
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ArtifactTreeContentProvider.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.util.Collection;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * The basis for the comments in this class can be found at
+ * http://www.eclipse.org/articles/treeviewer-cg/TreeViewerArticle.htm
+ *
+ * @author Ryan D. Brooks
+ */
+public class ArtifactTreeContentProvider implements ITreeContentProvider {
+ private static Object[] EMPTY_ARRAY = new Object[0];
+ protected TreeViewer viewer;
+
+ public ArtifactTreeContentProvider() {
+ }
+
+ /*
+ * @see IContentProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /**
+ * Notifies this content provider that the given viewer's input has been switched to a different element.
+ * <p>
+ * A typical use for this method is registering the content provider as a listener to changes on the new input (using
+ * model-specific means), and deregistering the viewer from the old input. In response to these change notifications,
+ * the content provider propagates the changes to the viewer.
+ * </p>
+ *
+ * @param viewer the viewer
+ * @param oldInput the old input element, or <code>null</code> if the viewer did not previously have an input
+ * @param newInput the new input element, or <code>null</code> if the viewer does not have an input
+ * @see IContentProvider#inputChanged(Viewer, Object, Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ this.viewer = (TreeViewer) viewer;
+ // if (oldInput != null) {
+ // ((Artifact) oldInput).removeListenerRecursively(this);
+ // }
+ // if (newInput != null) { // TODO: must handle fact that only root item has a listener added
+ // ((Artifact) newInput).addListener(this);
+ // }
+ }
+
+ /**
+ * The tree viewer calls its content provider&#8217;s getChildren method when it needs to create or display the child
+ * elements of the domain object, <b>parent </b>. This method should answer an array of domain objects that represent
+ * the unfiltered children of <b>parent </b>
+ *
+ * @see ITreeContentProvider#getChildren(Object)
+ */
+ @SuppressWarnings("unchecked")
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Collection) {
+ return ((Collection) parentElement).toArray();
+ }
+ return EMPTY_ARRAY;
+ }
+
+ /*
+ * @see ITreeContentProvider#getParent(Object)
+ */
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ /**
+ * The tree viewer asks its content provider if the domain object represented by <b>element </b> has any children.
+ * This method is used by the tree viewer to determine whether or not a plus or minus should appear on the tree
+ * widget.
+ *
+ * @see ITreeContentProvider#hasChildren(Object)
+ */
+ public boolean hasChildren(Object element) {
+ return false;
+ }
+
+ /**
+ * This is the method invoked by calling the <b>setInput </b> method on the tree viewer. In fact, the <b>getElements
+ * </b> method is called only in response to the tree viewer's <b>setInput </b> method and should answer with the
+ * appropriate domain objects of the inputElement. The <b>getElements </b> and <b>getChildren </b> methods operate in
+ * a similar way. Depending on your domain objects, you may have the <b>getElements </b> simply return the result of
+ * calling <b>getChildren </b>. The two methods are kept distinct because it provides a clean way to differentiate
+ * between the root domain object and all other domain objects.
+ *
+ * @see IStructuredContentProvider#getElements(Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ChangeTypeDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ChangeTypeDialog.java
new file mode 100644
index 00000000000..ed3e546d147
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ChangeTypeDialog.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.util.ArrayList;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.util.ChangeType;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.ListDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ChangeTypeDialog extends ListDialog {
+
+ ChangeType selected = null;
+
+ public ChangeTypeDialog(Shell parent) {
+ super(parent);
+ setContentProvider(new ArrayContentProvider());
+ setLabelProvider(new ChangeLabelProvider());
+ setInput(ChangeType.values());
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ setTitle("Select Changet Type");
+ }
+
+ public ChangeType getSelection() {
+ return (ChangeType) getResult()[0];
+ }
+
+ @Override
+ protected Control createDialogArea(Composite container) {
+
+ (new Label(container, SWT.NONE)).setText(" Select Change Type:");
+
+ Control c = super.createDialogArea(container);
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = 80;
+ gd.widthHint = 300;
+ getTableViewer().getTable().setLayoutData(gd);
+ GridLayout layout = ALayout.getZeroMarginLayout();
+ layout.marginWidth = 20;
+ getTableViewer().getTable().getParent().setLayout(layout);
+ if (selected != null) {
+ ArrayList<Object> sel = new ArrayList<Object>();
+ sel.add(selected);
+ getTableViewer().setSelection(new StructuredSelection(sel.toArray(new Object[sel.size()])));
+ getTableViewer().getTable().setFocus();
+ }
+ return c;
+ }
+
+ @Override
+ protected void okPressed() {
+ if (getTableViewer().getSelection().isEmpty()) {
+ AWorkbench.popup("ERROR", "Must make selection.");
+ return;
+ }
+ super.okPressed();
+ }
+
+ public class ChangeLabelProvider implements ILabelProvider {
+
+ public Image getImage(Object arg0) {
+ ChangeType type = (ChangeType) arg0;
+ return type.getImage();
+ }
+
+ public String getText(Object arg0) {
+ ChangeType type = (ChangeType) arg0;
+ return type.name();
+ }
+
+ public void addListener(ILabelProviderListener arg0) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object arg0, String arg1) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener arg0) {
+ }
+
+ }
+
+ public void setSelected(ChangeType selected) {
+ this.selected = selected;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/CheckBoxDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/CheckBoxDialog.java
new file mode 100644
index 00000000000..d735713fb55
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/CheckBoxDialog.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+public class CheckBoxDialog extends MessageDialog {
+
+ private Button checkButton;
+ boolean fillVertically = false;
+ private String confirmationStatement;
+
+ //Have to save off the value so it is available after the dialog is closed since checkButton will get disposed.
+ private boolean checked = false;
+
+ public CheckBoxDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, String confirmationStatement, int dialogImageType, int defaultIndex) {
+ super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, new String[] {"OK", "Cancel"},
+ defaultIndex);
+
+ this.confirmationStatement = confirmationStatement;
+ setBlockOnOpen(true);
+ }
+
+ protected Control createCustomArea(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(new GridLayout(2, false));
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
+
+ checkButton = new Button(composite, SWT.CHECK);
+ checkButton.setText(confirmationStatement);
+ checkButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ checked = checkButton.getSelection();
+ getButton(0).setEnabled(checked);
+ }
+ });
+
+ return composite;
+ }
+
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ super.createButtonsForButtonBar(parent);
+
+ // Start off with OK disabled
+ getButton(0).setEnabled(false);
+ }
+
+ public boolean isChecked() {
+ return checked;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/DateSelectionDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/DateSelectionDialog.java
new file mode 100644
index 00000000000..586332a4e4c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/DateSelectionDialog.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.util.Calendar;
+import java.util.Date;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.nebula.widgets.calendarcombo.CalendarCombo;
+import org.eclipse.nebula.widgets.calendarcombo.CalendarListenerAdapter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+
+public class DateSelectionDialog extends MessageDialog {
+
+ private Date selectedDate;
+
+ private final String dialogMessage;
+ private boolean noneSelected = false;
+
+ public DateSelectionDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, int dialogImageType, String[] dialogButtonLabels, int defaultIndex, Date selectedDate) {
+ super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels,
+ defaultIndex);
+ this.selectedDate = selectedDate;
+ this.dialogMessage = dialogMessage;
+ }
+
+ public DateSelectionDialog(String dialogTitle, String dialogMessage, Date selectedDate) {
+ this(Display.getCurrent().getActiveShell(), dialogTitle, null, dialogMessage, MessageDialog.NONE, new String[] {
+ "Ok", "Cancel"}, 0, selectedDate);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite container) {
+
+ Composite filterComp = new Composite(container, SWT.NONE);
+
+ filterComp.setLayout(new GridLayout(1, false));
+ filterComp.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ (new Label(filterComp, SWT.None)).setText(dialogMessage);
+
+ final CalendarCombo dp = new CalendarCombo(filterComp, SWT.SINGLE | SWT.FLAT);
+ if (selectedDate != null) dp.setDate(selectedDate);
+ dp.addCalendarListener(new CalendarListenerAdapter() {
+ /* (non-Javadoc)
+ * @see org.eclipse.nebula.widgets.calendarcombo.ICalendarListener#dateChanged(java.util.Calendar)
+ */
+ public void dateChanged(Calendar date) {
+ if (date == null) {
+ noneSelected = true;
+ } else {
+ noneSelected = false;
+ selectedDate = dp.getDate().getTime();
+ }
+ }
+ });
+
+ // set selected date if != null
+ return filterComp;
+ }
+
+ /**
+ * @return the selectedDate
+ */
+ public Date getSelectedDate() {
+ return selectedDate;
+ }
+
+ /**
+ * @param selectedDate the selectedDate to set
+ */
+ public void setSelectedDate(Date selectedDate) {
+ this.selectedDate = selectedDate;
+ }
+
+ /**
+ * @return the noneSelected
+ */
+ public boolean isNoneSelected() {
+ return noneSelected;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/Dialogs.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/Dialogs.java
new file mode 100644
index 00000000000..e2c1a6478af
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/Dialogs.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.util.HtmlExportTable;
+import org.eclipse.osee.framework.ui.skynet.util.email.EmailWizard;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class Dialogs {
+
+ /**
+ * Allows user to save html from a file selection dialog
+ *
+ * @param htmlText
+ * @param openInSystem true if desire to open resulting file in system browser after saving
+ * @return Result
+ */
+ public static Result saveHtmlDialog(String htmlText, boolean openInSystem) {
+ if (htmlText == null || htmlText.equals("")) {
+ AWorkbench.popup("ERROR", "Save data is empty. Nothing to save.");
+ return Result.FalseResult;
+ }
+ final FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell().getShell(), SWT.SAVE);
+ dialog.setFilterExtensions(new String[] {"*.html"});
+ String filename = dialog.open();
+ if (filename == null || filename.equals("")) return Result.FalseResult;
+ AFile.writeFile(filename, htmlText);
+ if (openInSystem) Program.launch(filename);
+ return Result.TrueResult;
+ }
+
+ public static Result emailDialog(String title, String text) {
+ if (text == null || text.equals("")) {
+ AWorkbench.popup("ERROR", "Save data is empty. Nothing to email.");
+ return Result.FalseResult;
+ }
+ EmailWizard ew = new EmailWizard(text, title, null, null);
+ WizardDialog dialog = new WizardDialog(Display.getCurrent().getActiveShell(), ew);
+ dialog.create();
+ if (dialog.open() == 0) {
+ return Result.TrueResult;
+ }
+ return Result.FalseResult;
+ }
+
+ public static Result exportHtmlTableDialog(String title, String htmlText, boolean openInSystem) {
+ if (htmlText == null || htmlText.equals("")) {
+ AWorkbench.popup("ERROR", "Save data is empty. Nothing to export.");
+ return Result.FalseResult;
+ }
+ return (new HtmlExportTable((title.equals("") ? "Exported Text" : title), htmlText, openInSystem)).export();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/EntryCheckDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/EntryCheckDialog.java
new file mode 100644
index 00000000000..b5bd33edb9f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/EntryCheckDialog.java
@@ -0,0 +1,90 @@
+/*
+ * Created on Oct 15, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class EntryCheckDialog extends EntryDialog {
+
+ private final String checkBoxMessage;
+ private boolean checked = false;
+
+ /**
+ * @param dialogTitle
+ * @param dialogMessage
+ */
+ public EntryCheckDialog(String dialogTitle, String dialogMessage, String checkBoxMessage) {
+ super(dialogTitle, dialogMessage);
+ this.checkBoxMessage = checkBoxMessage;
+ }
+
+ /**
+ * @param parentShell
+ * @param dialogTitle
+ * @param dialogTitleImage
+ * @param dialogMessage
+ * @param dialogImageType
+ * @param dialogButtonLabels
+ * @param defaultIndex
+ */
+ public EntryCheckDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, String checkBoxMessage, int dialogImageType, String[] dialogButtonLabels, int defaultIndex) {
+ super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels,
+ defaultIndex);
+ this.checkBoxMessage = checkBoxMessage;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog#createCustomArea(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected void createExtendedArea(Composite parent) {
+
+ final XCheckBox text = new XCheckBox(checkBoxMessage);
+ text.setFillHorizontally(true);
+ text.setFocus();
+ text.setDisplayLabel(false);
+ text.set(checked);
+ text.createWidgets(parent, 2);
+
+ SelectionListener selectionListener = new SelectionListener() {
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ handleModified();
+ checked = text.isSelected();
+ }
+ };
+ text.addSelectionListener(selectionListener);
+
+ }
+
+ /**
+ * @return the checked
+ */
+ public boolean isChecked() {
+ return checked;
+ }
+
+ /**
+ * @param checked the checked to set
+ */
+ public void setChecked(boolean checked) {
+ this.checked = checked;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/EntryDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/EntryDialog.java
new file mode 100644
index 00000000000..d4dcdca6ef3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/EntryDialog.java
@@ -0,0 +1,206 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.ui.plugin.util.IShellCloseEvent;
+import org.eclipse.osee.framework.ui.skynet.widgets.XText;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseMoveListener;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+
+public class EntryDialog extends MessageDialog {
+
+ XText text;
+ Composite c;
+ String entryText = "";
+ String validationRegularExpression = null;
+ String validationErrorString = "";
+ Button ok;
+ MouseMoveListener listener;
+ Label errorLabel;
+ boolean fillVertically = false;
+
+ private final List<IShellCloseEvent> closeEventListeners = new ArrayList<IShellCloseEvent>();
+
+ public EntryDialog(String dialogTitle, String dialogMessage) {
+ super(Display.getCurrent().getActiveShell(), dialogTitle, null, dialogMessage, MessageDialog.QUESTION,
+ new String[] {"OK", "Cancel"}, 0);
+ }
+
+ public EntryDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, int dialogImageType, String[] dialogButtonLabels, int defaultIndex) {
+ super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels,
+ defaultIndex);
+ }
+
+ @Override
+ protected Control createCustomArea(Composite parent) {
+
+ c = new Composite(parent, SWT.NONE);
+ c.setLayout(new GridLayout(2, false));
+ c.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
+
+ listener = new MouseMoveListener() {
+
+ public void mouseMove(MouseEvent e) {
+ setInitialButtonState();
+ }
+ };
+ c.addMouseMoveListener(listener);
+
+ // Create error label
+ errorLabel = new Label(c, SWT.NONE);
+ errorLabel.setSize(errorLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ errorLabel.setText("");
+
+ text = new XText();
+ text.setFillHorizontally(true);
+ text.setFocus();
+ text.setDisplayLabel(false);
+ if (!entryText.equals("")) text.set(entryText);
+ if (fillVertically) {
+ text.setFillVertically(true);
+ text.setHeight(200);
+ }
+ text.createWidgets(c, 2);
+
+ ModifyListener modifyListener = new ModifyListener() {
+
+ public void modifyText(ModifyEvent e) {
+ handleModified();
+ }
+ };
+ text.addModifyListener(modifyListener);
+ createExtendedArea(c);
+ c.layout();
+ parent.layout();
+ return c;
+ }
+
+ /**
+ * Override to provide other widgets
+ *
+ * @param parent
+ */
+ protected void createExtendedArea(Composite parent) {
+ }
+
+ public void setInitialButtonState() {
+ if (ok == null) {
+ ok = getButton(0);
+ handleModified();
+ }
+ c.removeMouseMoveListener(listener);
+ }
+
+ public void handleModified() {
+ if (text != null) {
+ entryText = text.get();
+ if (text.get().equals("") || !isEntryValid()) {
+ getButton(getDefaultButtonIndex()).setEnabled(false);
+ errorLabel.setText(validationErrorString);
+ errorLabel.update();
+ c.layout();
+ } else {
+ getButton(getDefaultButtonIndex()).setEnabled(true);
+ errorLabel.setText("");
+ errorLabel.update();
+ c.layout();
+ }
+ }
+ }
+
+ public String getEntry() {
+ return entryText;
+ }
+
+ public void setEntry(String entry) {
+ if (text != null) text.set(entry);
+ this.entryText = entry;
+ }
+
+ /**
+ * override this method to make own checks on entry this will be called with every keystroke
+ *
+ * @return true if entry is valid
+ */
+ public boolean isEntryValid() {
+ if (validationRegularExpression == null) {
+ return true;
+ }
+ // verify title is alpha-numeric with spaces and dashes
+ Matcher m = Pattern.compile(validationRegularExpression).matcher(text.get());
+ return m.find();
+ }
+
+ public void setValidationRegularExpression(String regExp) {
+ validationRegularExpression = regExp;
+ }
+
+ public void setValidationErrorString(String errorText) {
+ validationErrorString = errorText;
+ }
+
+ /**
+ * Calling will enable dialog to loose focus
+ */
+ public void setModeless() {
+ setShellStyle(SWT.DIALOG_TRIM | SWT.MODELESS);
+ setBlockOnOpen(false);
+ }
+
+ public void setSelectionListener(SelectionListener listener) {
+ for (int i = 0; i < getButtonLabels().length; i++) {
+ Button button = getButton(i);
+ button.addSelectionListener(listener);
+ }
+ }
+
+ public boolean isFillVertically() {
+ return fillVertically;
+ }
+
+ public void setFillVertically(boolean fillVertically) {
+ this.fillVertically = fillVertically;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.MessageDialog#handleShellCloseEvent()
+ */
+ @Override
+ protected void handleShellCloseEvent() {
+ super.handleShellCloseEvent();
+ for (IShellCloseEvent event : closeEventListeners) {
+ event.onClose();
+ }
+ }
+
+ public void addShellCloseEventListeners(IShellCloseEvent event) {
+ closeEventListeners.add(event);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/GroupListDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/GroupListDialog.java
new file mode 100644
index 00000000000..67dabad3efc
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/GroupListDialog.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.util.ArrayList;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.UniversalGroup;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class GroupListDialog extends ArtifactListDialog {
+
+ public GroupListDialog(Shell parent) {
+ super(parent, null);
+ setTitle("Select group");
+ setMessage("Select group");
+ setLabelProvider(new GroupsDescriptiveLabelProvider());
+ ArrayList<Artifact> arts = new ArrayList<Artifact>();
+ try {
+ for (Artifact art : UniversalGroup.getGroups(BranchManager.getCommonBranch())) {
+ if (!art.getDescriptiveName().equals(ArtifactPersistenceManager.ROOT_ARTIFACT_TYPE_NAME)) {
+ arts.add(art);
+ }
+ }
+ if (!BranchManager.getDefaultBranch().equals(BranchManager.getCommonBranch())) {
+ for (Artifact art : UniversalGroup.getGroups(BranchManager.getDefaultBranch())) {
+ if (!art.getDescriptiveName().equals(ArtifactPersistenceManager.ROOT_ARTIFACT_TYPE_NAME)) {
+ arts.add(art);
+ }
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ setArtifacts(arts);
+ }
+
+ public class GroupsDescriptiveLabelProvider implements ILabelProvider {
+
+ public Image getImage(Object arg0) {
+ return null;
+ }
+
+ public String getText(Object obj) {
+ if (obj instanceof Artifact) {
+ Artifact art = (Artifact) obj;
+ if (art.getArtifactTypeName().equals(UniversalGroup.ARTIFACT_TYPE_NAME)) {
+ return art.toString() + " (" + art.getBranch().getBranchShortName() + ")";
+ }
+ art.toString();
+ }
+ return "";
+ }
+
+ public void addListener(ILabelProviderListener arg0) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object arg0, String arg1) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener arg0) {
+ }
+
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/HtmlDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/HtmlDialog.java
new file mode 100644
index 00000000000..8d2347f0105
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/HtmlDialog.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.io.File;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.browser.LocationListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+
+public class HtmlDialog extends MessageDialog {
+ protected Browser b;
+ private LocationListener listener;
+ private final String html;
+
+ public HtmlDialog(String title, String message, String html) {
+ super(Display.getCurrent().getActiveShell(), title, null, message, SWT.NONE, new String[] {"OK", "Cancel"}, 0);
+ this.html = html;
+ }
+
+ /**
+ * Add listener to browser widget.
+ *
+ * @param listener
+ */
+ public void addLocationListener(LocationListener listener) {
+ this.listener = listener;
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ Composite c = (Composite) super.createDialogArea(parent);
+ b = new Browser(c, SWT.BORDER);
+ GridData gd = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
+ b.setLayoutData(gd);
+ b.setText(html);
+ b.setSize(500, 500);
+ if (listener != null) b.addLocationListener(listener);
+ b.setMenu(pageOverviewGetPopup());
+
+ return c;
+ }
+
+ public Menu pageOverviewGetPopup() {
+ Menu menu = new Menu(b.getShell());
+ MenuItem item = new MenuItem(menu, SWT.NONE);
+ item.setText("View Source");
+ item.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ String file = System.getProperty("user.home") + File.separator + "out.html";
+ AFile.writeFile(file, html);
+ Program.launch(file);
+ }
+ });
+ return menu;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ImageDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ImageDialog.java
new file mode 100644
index 00000000000..aa7c3ddec25
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/ImageDialog.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.io.File;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.ui.plugin.util.OseeData;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.ImageLoader;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+public class ImageDialog extends MessageDialog {
+ private String title = "Image Viewer";
+ private static String buttons[] = new String[] {"Export as JPG", "Export as PNG", "Close"};
+ private final Image image;
+
+ public ImageDialog(Image image, Shell parentShell) {
+ this(image, parentShell, buttons, 3);
+ }
+
+ public ImageDialog(Image image, Shell parentShell, String[] buttons, int defaultButton) {
+ super(parentShell, "", null, "", MessageDialog.NONE, buttons, defaultButton);
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ this.image = image;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ getShell().setText(title);
+ Composite comp = new Composite(parent, SWT.NONE);
+ comp.setLayout(ALayout.getZeroMarginLayout());
+ comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ comp.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
+
+ ScrolledComposite sc = new ScrolledComposite(comp, SWT.V_SCROLL | SWT.H_SCROLL);
+ Canvas canvas = new Canvas(sc, SWT.BORDER);
+ sc.setContent(canvas);
+ canvas.setBounds(image.getBounds());
+ canvas.addPaintListener(new PaintListener() {
+ public void paintControl(PaintEvent e) {
+ e.gc.drawImage(image, 0, 0);
+ }
+ });
+ comp.layout();
+ return comp;
+ }
+
+ private enum ImageType {
+ JPG, PNG
+ };
+
+ protected void handleSave(ImageType imageType) {
+ ImageLoader loader = new ImageLoader();
+ ImageData imgData = image.getImageData();
+ loader.data = new ImageData[] {imgData};
+ int format = 0;
+ if (imageType == ImageType.JPG)
+ format = SWT.IMAGE_JPEG;
+ else if (imageType == ImageType.PNG) format = SWT.IMAGE_PNG;
+ File file = OseeData.getFile(GUID.generateGuidStr() + "." + imageType.name());
+ loader.save(file.getAbsolutePath(), format);
+ Program.launch(file.getAbsolutePath());
+ }
+
+ @Override
+ protected void buttonPressed(int buttonId) {
+ if (buttonId == 0)
+ handleSave(ImageType.JPG);
+ else if (buttonId == 1)
+ handleSave(ImageType.PNG);
+ else
+ close();
+ setReturnCode(buttonId);
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserCheckTreeDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserCheckTreeDialog.java
new file mode 100644
index 00000000000..2f3e36559d0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserCheckTreeDialog.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class UserCheckTreeDialog extends ArtifactCheckTreeDialog {
+
+ private Collection<User> initialSel;
+
+ /**
+ * @param parent
+ * @param artifacts
+ */
+ public UserCheckTreeDialog(Shell parent, Collection<User> artifacts) {
+ super(artifacts);
+ }
+
+ public UserCheckTreeDialog(Shell parent) throws OseeCoreException {
+ this(parent, UserManager.getUsers());
+ }
+
+ public void setInitialSelections(Collection<User> initialSel) {
+ this.initialSel = initialSel;
+ ArrayList<Object> objs = new ArrayList<Object>();
+ for (Artifact sel : initialSel)
+ objs.add(sel);
+ super.setInitialSelections((Object[]) objs.toArray(new Object[objs.size()]));
+ }
+
+ public Collection<User> getUsersSelected() {
+ Set<User> selected = new HashSet<User>();
+ for (Artifact art : getSelection())
+ selected.add((User) art);
+ return selected;
+ }
+
+ @Override
+ protected Control createDialogArea(Composite container) {
+ Control c = super.createDialogArea(container);
+ getTreeViewer().setSorter(new ViewerSorter() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ User user1 = ((User) e1);
+ User user2 = ((User) e2);
+ try {
+ if (UserManager.getUser().equals(user1)) {
+ return -1;
+ }
+ if (UserManager.getUser().equals(user2)) {
+ return 1;
+ }
+ if (initialSel != null) {
+ if (initialSel.contains(user1) && initialSel.contains(user2)) {
+ return getComparator().compare(user1.getName(), user2.getName());
+ }
+ if (initialSel.contains(user1)) {
+ return -1;
+ }
+ if (initialSel.contains(user2)) {
+ return 1;
+ }
+ }
+ return getComparator().compare(user1.getName(), user2.getName());
+ } catch (OseeCoreException ex) {
+ return -1;
+ }
+ }
+ });
+ return c;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserGroupsCheckTreeDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserGroupsCheckTreeDialog.java
new file mode 100644
index 00000000000..fc69eacc083
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserGroupsCheckTreeDialog.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import java.util.Collection;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class UserGroupsCheckTreeDialog extends ArtifactCheckTreeDialog {
+
+ /**
+ * @param parent
+ * @param artifacts
+ */
+ public UserGroupsCheckTreeDialog(Collection<Artifact> artifacts) {
+ super(artifacts);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite container) {
+ Control c = super.createDialogArea(container);
+ super.getTreeViewer().setLabelProvider(new ArtifactLabelProvider());
+ return c;
+ }
+
+ public class ArtifactLabelProvider implements ILabelProvider {
+
+ public Image getImage(Object arg0) {
+ return ((Artifact) arg0).getImage();
+ }
+
+ public String getText(Object arg0) {
+ return ((Artifact) arg0).getDescriptiveName() + " - (" + ((Artifact) arg0).getArtifactTypeName() + ")";
+ }
+
+ public void addListener(ILabelProviderListener arg0) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object arg0, String arg1) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener arg0) {
+ }
+
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserListDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserListDialog.java
new file mode 100644
index 00000000000..3c6f8f0891b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/dialog/UserListDialog.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.dialog;
+
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.ListDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class UserListDialog extends ListDialog {
+
+ public UserListDialog(Shell parent) throws OseeCoreException {
+ this(parent, "Select User");
+ }
+
+ public UserListDialog(Shell parent, String title) throws OseeCoreException {
+ super(parent);
+ setTitle(title);
+ setMessage(title);
+ setContentProvider(new ArrayContentProvider());
+ setLabelProvider(new LabelProvider() {
+ @Override
+ public String getText(Object element) {
+ if (element instanceof User) {
+ return ((User) element).getName();
+ }
+ return "Unknown Object";
+ }
+ });
+ setInput(UserManager.getUsersSortedByName());
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ }
+
+ public User getSelection() {
+ return (User) getResult()[0];
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/AttributeXWidgetFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/AttributeXWidgetFactory.java
new file mode 100644
index 00000000000..deb5e209105
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/AttributeXWidgetFactory.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.plugin.core.util.ExtensionPoints;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.osgi.framework.Bundle;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class AttributeXWidgetFactory {
+
+ private static List<IAttributeXWidgetProvider> widgetProviders;
+
+ public static IAttributeXWidgetProvider getAttributeXWidgetProvider(AttributeType attributeType) {
+ for (IAttributeXWidgetProvider provider : getAttributeXWidgetProviders()) {
+ DynamicXWidgetLayoutData data = provider.getDynamicXWidgetLayoutData(attributeType);
+ if (data != null) return provider;
+ }
+ return new DefaultAttributeXWidgetProvider();
+ }
+
+ public static List<IAttributeXWidgetProvider> getAttributeXWidgetProviders() {
+ widgetProviders = new ArrayList<IAttributeXWidgetProvider>();
+ for (IConfigurationElement el : ExtensionPoints.getExtensionElements(
+ "org.eclipse.osee.framework.ui.skynet.AttributeXWidgetProvider", "AttributeXWidgetProvider")) {
+ String classname = null;
+ String bundleName = null;
+ if (el.getName().equals("AttributeXWidgetProvider")) {
+ classname = el.getAttribute("classname");
+ bundleName = el.getContributor().getName();
+ if (classname != null && bundleName != null) {
+ Bundle bundle = Platform.getBundle(bundleName);
+ try {
+ Class<?> taskClass = bundle.loadClass(classname);
+ Object obj = taskClass.newInstance();
+ widgetProviders.add((IAttributeXWidgetProvider) obj);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, "Error loading AttributeXWidgetProvider extension", ex,
+ true);
+ }
+ }
+
+ }
+ }
+ return widgetProviders;
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DefaultAttributeXWidgetProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DefaultAttributeXWidgetProvider.java
new file mode 100644
index 00000000000..72f435ad113
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DefaultAttributeXWidgetProvider.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.BooleanAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.DateAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.EnumeratedAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.StringAttribute;
+import org.eclipse.osee.framework.ui.skynet.widgets.XOption;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class DefaultAttributeXWidgetProvider implements IAttributeXWidgetProvider {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.IAttributeXWidgetProvider#getDynamicXWidgetLayoutData(org.eclipse.osee.framework.skynet.core.attribute.Attribute)
+ */
+ @Override
+ public DynamicXWidgetLayoutData getDynamicXWidgetLayoutData(AttributeType attributeType) {
+ int min = attributeType.getMinOccurrences();
+ int max = attributeType.getMaxOccurrences();
+ DynamicXWidgetLayoutData defaultData = new DynamicXWidgetLayoutData(null);
+ defaultData.setName(attributeType.getName());
+ if (attributeType.getMinOccurrences() > 0) defaultData.getXOptionHandler().add(XOption.REQUIRED);
+ defaultData.setToolTip(attributeType.getTipText());
+ defaultData.getXOptionHandler().add(XOption.HORIZONTAL_LABEL);
+ defaultData.setStorageName(attributeType.getName());
+ if (min == 1) defaultData.getXOptionHandler().add(XOption.REQUIRED);
+ if (attributeType.getBaseAttributeClass().equals(EnumeratedAttribute.class)) {
+ if (max == 1) {
+ defaultData.setXWidgetName("XComboDam(" + Collections.toString(",",
+ EnumeratedAttribute.getChoices(attributeType)) + ")");
+ } else {
+ defaultData.setXWidgetName("XListDam(" + Collections.toString(",",
+ EnumeratedAttribute.getChoices(attributeType)) + ")");
+ defaultData.getXOptionHandler().add(XOption.VERTICAL_LABEL);
+ }
+ } else if (attributeType.getBaseAttributeClass().equals(StringAttribute.class)) {
+ if (max == 1) {
+ defaultData.setXWidgetName("XTextDam");
+ } else {
+ defaultData.setXWidgetName("XMultiXWidgetTextDam");
+ System.err.println("How handle multiple text instances?");
+ }
+ } else if (attributeType.getBaseAttributeClass().equals(BooleanAttribute.class)) {
+ if (min == 1) {
+ defaultData.setXWidgetName("XCheckBox");
+ } else {
+ defaultData.setXWidgetName("XComboBooleanDam");
+ }
+ } else if (attributeType.getBaseAttributeClass().equals(DateAttribute.class)) {
+ if (max <= 1) {
+ defaultData.setXWidgetName("XDateDam");
+ } else {
+ defaultData.setXWidgetName("XLabelDam");
+ System.err.println("How handle multiple text instances?");
+ }
+ } else {
+ defaultData.setXWidgetName("XLabelDam");
+ }
+ return defaultData;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DefaultXWidgetOptionResolver.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DefaultXWidgetOptionResolver.java
new file mode 100644
index 00000000000..fbd7d72c669
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DefaultXWidgetOptionResolver.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class DefaultXWidgetOptionResolver implements IXWidgetOptionResolver {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.IWidgetOptionResolver#getWidgetOptions(java.lang.String)
+ */
+ public String[] getWidgetOptions(DynamicXWidgetLayoutData xWidgetData) {
+ Matcher m = Pattern.compile("\\((.*?)\\)").matcher(xWidgetData.getXWidgetName());
+ if (m.find()) {
+ String data = m.group(1);
+ return data.split(",");
+ }
+ return new String[] {};
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DynamicXWidgetLayout.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DynamicXWidgetLayout.java
new file mode 100644
index 00000000000..e4b46e46937
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DynamicXWidgetLayout.java
@@ -0,0 +1,333 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.xml.parsers.ParserConfigurationException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.XWidgetParser;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.IArtifactWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.XLabelDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
+import org.eclipse.osee.framework.ui.skynet.widgets.XOption;
+import org.eclipse.osee.framework.ui.skynet.widgets.XText;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class DynamicXWidgetLayout {
+
+ private Set<DynamicXWidgetLayoutData> datas = new LinkedHashSet<DynamicXWidgetLayoutData>();
+ private Map<String, DynamicXWidgetLayoutData> nameToLayoutData = new HashMap<String, DynamicXWidgetLayoutData>();
+ private ArrayList<ArrayList<String>> orRequired = new ArrayList<ArrayList<String>>();
+ private ArrayList<ArrayList<String>> xorRequired = new ArrayList<ArrayList<String>>();
+ public static String OR_REQUIRED = "OrRequired";
+ public static String XOR_REQUIRED = "XOrRequired";
+ public static String XWIDGET = "XWidget";
+ public static String XWIDGETS_LIST = "xWidgets";
+ private final IDynamicWidgetLayoutListener dynamicWidgetLayoutListener;
+ private final IXWidgetOptionResolver optionResolver;
+ private final List<XWidget> xWidgets = new ArrayList<XWidget>();
+
+ public DynamicXWidgetLayout() {
+ this(null, new DefaultXWidgetOptionResolver());
+ }
+
+ public DynamicXWidgetLayout(IDynamicWidgetLayoutListener dynamicWidgetLayoutListener, IXWidgetOptionResolver optionResolver) {
+ this.dynamicWidgetLayoutListener = dynamicWidgetLayoutListener;
+ this.optionResolver = optionResolver;
+ }
+
+ public void dispose() {
+ for (DynamicXWidgetLayoutData layoutData : getLayoutDatas()) {
+ layoutData.getXWidget().dispose();
+ }
+ }
+
+ public void createBody(FormToolkit toolkit, Composite parent, Artifact artifact, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException {
+ Composite attrComp = null;
+ if (toolkit != null)
+ attrComp = toolkit.createComposite(parent);
+ else
+ attrComp = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout(1, false);
+ layout.marginWidth = layout.marginHeight = 2;
+ attrComp.setLayout(layout);
+ attrComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ if (toolkit != null) toolkit.adapt(attrComp);
+
+ boolean inChildComposite = false;
+ Composite childComp = null;
+ // Create Attributes
+ for (DynamicXWidgetLayoutData xWidgetLayoutData : getLayoutDatas()) {
+ Composite useComp = attrComp;
+
+ if (xWidgetLayoutData.getBeginComposite() > 0) {
+ childComp = new Composite(attrComp, SWT.NONE);
+ childComp.setLayout(ALayout.getZeroMarginLayout(xWidgetLayoutData.getBeginComposite(), false));
+ childComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ if (toolkit != null) toolkit.adapt(childComp);
+ inChildComposite = true;
+ }
+ if (inChildComposite) {
+ useComp = childComp;
+ if (xWidgetLayoutData.isEndComposite()) inChildComposite = false;
+ } else if (xWidgetLayoutData.getXOptionHandler().contains(XOption.HORIZONTAL_LABEL)) {
+ useComp = new Composite(attrComp, SWT.NONE);
+ useComp.setLayout(ALayout.getZeroMarginLayout(2, false));
+ useComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ if (toolkit != null) toolkit.adapt(useComp);
+ }
+
+ XWidget xWidget = xWidgetLayoutData.getXWidget();
+ xWidgets.add(xWidget);
+ if (!xWidgetLayoutData.getName().equals("")) xWidget.setLabel(xWidgetLayoutData.getName().replaceFirst(
+ "^.*?\\.", ""));
+ if (xWidgetLayoutData.getToolTip() != null && !xWidgetLayoutData.getToolTip().equals("")) xWidget.setToolTip(xWidgetLayoutData.getToolTip());
+ xWidget.setRequiredEntry(xWidgetLayoutData.isRequired());
+ if (xWidgetLayoutData.getXOptionHandler().contains(XOption.FILL_HORIZONTALLY) || xWidgetLayoutData.getXOptionHandler().contains(
+ XOption.FILL_VERTICALLY)) {
+ if (xWidget instanceof XText) {
+ if (xWidgetLayoutData.getXOptionHandler().contains(XOption.FILL_HORIZONTALLY)) ((XText) xWidget).setFillHorizontally(true);
+ if (xWidgetLayoutData.getXOptionHandler().contains(XOption.FILL_VERTICALLY)) {
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ useComp.setLayoutData(gd);
+ ((XText) xWidget).setFillVertically(true);
+ }
+ if (xWidgetLayoutData.isHeightSet()) ((XText) xWidget).setHeight(xWidgetLayoutData.getHeight());
+ }
+ }
+ xWidget.setEditable(xWidgetLayoutData.getXOptionHandler().contains(XOption.EDITABLE) && isEditable);
+ if (dynamicWidgetLayoutListener != null) dynamicWidgetLayoutListener.widgetCreating(xWidget, toolkit,
+ artifact, this, xModListener, isEditable);
+ if (artifact != null && (xWidget instanceof IArtifactWidget)) {
+ try {
+ ((IArtifactWidget) xWidget).setArtifact(artifact, xWidgetLayoutData.getStorageName());
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ if (toolkit != null)
+ xWidget.createWidgets(toolkit, useComp, 2);
+ else
+ xWidget.createWidgets(useComp, 2);
+ if (xWidgetLayoutData.getXOptionHandler().contains(XOption.FILL_VERTICALLY)) {
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.minimumHeight = 60;
+ ((XText) xWidget).getStyledText().setLayoutData(gd);
+ }
+ if (artifact != null && (xWidget instanceof XLabelDam)) ((XLabelDam) xWidget).setArtifact(artifact,
+ xWidgetLayoutData.getStorageName());
+ if (xModListener != null) xWidget.addXModifiedListener(xModListener);
+ xWidget.addXModifiedListener(refreshRequiredModListener);
+
+ if (dynamicWidgetLayoutListener != null) {
+ dynamicWidgetLayoutListener.widgetCreated(xWidget, toolkit, artifact, this, xModListener, isEditable);
+ dynamicWidgetLayoutListener.createXWidgetLayoutData(xWidgetLayoutData, xWidget, toolkit, artifact,
+ xModListener, isEditable);
+ }
+ xWidget.setLabelError();
+ }
+ refreshOrAndXOrRequiredFlags();
+ }
+ private XModifiedListener refreshRequiredModListener = new XModifiedListener() {
+ public void widgetModified(XWidget widget) {
+ refreshOrAndXOrRequiredFlags();
+ }
+ };
+
+ /**
+ * Required flags are set per XWidget and the labels change from Red to Black when the widget has been edited
+ * successfully. When a page is made up of two or more widgets that need to work together, these required flags need
+ * to be set/unset whenever a widget from the group gets modified.
+ */
+ private void refreshOrAndXOrRequiredFlags() {
+ // Handle orRequired
+ for (ArrayList<String> orReq : orRequired) {
+ // If group is complete, change all to black, else all red
+ boolean isComplete = isOrGroupFromAttrNameComplete(orReq.iterator().next());
+ for (String aName : orReq) {
+ DynamicXWidgetLayoutData layoutData = getLayoutData(aName);
+ Label label = layoutData.getXWidget().getLabelWidget();
+ if (label != null && !label.isDisposed()) label.setForeground(isComplete ? null : Display.getCurrent().getSystemColor(
+ SWT.COLOR_RED));
+ }
+ }
+ // Handle xorRequired
+ for (ArrayList<String> xorReq : xorRequired) {
+ // If group is complete, change all to black, else all red
+ boolean isComplete = isXOrGroupFromAttrNameComplete(xorReq.iterator().next());
+ for (String aName : xorReq) {
+ DynamicXWidgetLayoutData layoutData = getLayoutData(aName);
+ Label label = layoutData.getXWidget().getLabelWidget();
+ if (label != null && !label.isDisposed()) label.setForeground(isComplete ? null : Display.getCurrent().getSystemColor(
+ SWT.COLOR_RED));
+ }
+ }
+ }
+
+ public Result isPageComplete() {
+ for (DynamicXWidgetLayoutData data : datas) {
+ Result valid = data.getXWidget().isValid();
+ if (valid.isFalse()) {
+ // Check to see if widget is part of a completed OR or XOR group
+ if (!isOrGroupFromAttrNameComplete(data.getStorageName()) && !isXOrGroupFromAttrNameComplete(data.getStorageName())) return valid;
+ }
+ }
+ return Result.TrueResult;
+ }
+
+ public Set<DynamicXWidgetLayoutData> getLayoutDatas() {
+ return datas;
+ }
+
+ public void setLayoutDatas(List<DynamicXWidgetLayoutData> datas) {
+ this.datas.clear();
+ for (DynamicXWidgetLayoutData data : datas) {
+ data.setDynamicXWidgetLayout(this);
+ this.datas.add(data);
+ }
+ }
+
+ public void addWorkLayoutDatas(List<DynamicXWidgetLayoutData> datas) {
+ this.datas.addAll(datas);
+ }
+
+ public DynamicXWidgetLayoutData getLayoutData(String attrName) {
+ for (DynamicXWidgetLayoutData layoutData : datas)
+ if (layoutData.getStorageName().equals(attrName)) return layoutData;
+ return null;
+ }
+
+ public boolean isOrRequired(String attrName) {
+ return (getOrRequiredGroup(attrName)).size() > 0;
+ }
+
+ public boolean isXOrRequired(String attrName) {
+ return (getXOrRequiredGroup(attrName)).size() > 0;
+ }
+
+ public ArrayList<String> getOrRequiredGroup(String attrName) {
+ return getRequiredGroup(orRequired, attrName);
+ }
+
+ public ArrayList<String> getXOrRequiredGroup(String attrName) {
+ return getRequiredGroup(xorRequired, attrName);
+ }
+
+ private ArrayList<String> getRequiredGroup(ArrayList<ArrayList<String>> requiredList, String attrName) {
+ for (ArrayList<String> list : requiredList)
+ for (String aName : list)
+ if (aName.equals(attrName)) return list;
+ return new ArrayList<String>();
+ }
+
+ /**
+ * @param name
+ * @return true if ANY item in group is entered
+ */
+ public boolean isOrGroupFromAttrNameComplete(String name) {
+ for (String aName : getOrRequiredGroup(name)) {
+ DynamicXWidgetLayoutData layoutData = getLayoutData(aName);
+ if (layoutData.getXWidget() != null && layoutData.getXWidget().isValid().isTrue()) return true;
+ }
+ return false;
+ }
+
+ /**
+ * @param attrName
+ * @return true if only ONE item in group is entered
+ */
+ public boolean isXOrGroupFromAttrNameComplete(String attrName) {
+ boolean oneFound = false;
+ for (String aName : getXOrRequiredGroup(attrName)) {
+ DynamicXWidgetLayoutData layoutData = getLayoutData(aName);
+ if (layoutData.getXWidget() != null && layoutData.getXWidget().isValid().isTrue())
+ // If already found one, return false
+ if (oneFound)
+ return false;
+ else
+ oneFound = true;
+ }
+ return oneFound;
+ }
+
+ protected void processOrRequired(String instr) {
+ ArrayList<String> names = new ArrayList<String>();
+ for (String attr : instr.split(";"))
+ if (!attr.contains("[ \\s]*")) names.add(attr);
+ orRequired.add(names);
+ }
+
+ protected void processXOrRequired(String instr) {
+ ArrayList<String> names = new ArrayList<String>();
+ for (String attr : instr.split(";"))
+ if (!attr.contains("[ \\s]*")) names.add(attr);
+ xorRequired.add(names);
+ }
+
+ protected void processlayoutDatas(String xWidgetXml) throws IOException, ParserConfigurationException, SAXException {
+ Document document = Jaxp.readXmlDocument(xWidgetXml);
+ Element rootElement = document.getDocumentElement();
+
+ List<DynamicXWidgetLayoutData> attrs = XWidgetParser.extractlayoutDatas(this, rootElement);
+ for (DynamicXWidgetLayoutData attr : attrs) {
+ nameToLayoutData.put(attr.getName(), attr);
+ datas.add(attr);
+ }
+ }
+
+ protected void processLayoutDatas(Element element) throws IOException, ParserConfigurationException, SAXException {
+ List<DynamicXWidgetLayoutData> layoutDatas = XWidgetParser.extractlayoutDatas(this, element);
+ for (DynamicXWidgetLayoutData layoutData : layoutDatas) {
+ nameToLayoutData.put(layoutData.getName(), layoutData);
+ datas.add(layoutData);
+ }
+ }
+
+ /**
+ * @return the optionResolver
+ */
+ public IXWidgetOptionResolver getOptionResolver() {
+ return optionResolver;
+ }
+
+ /**
+ * @return the xWidgets
+ */
+ public List<XWidget> getXWidgets() {
+ return xWidgets;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DynamicXWidgetLayoutData.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DynamicXWidgetLayoutData.java
new file mode 100644
index 00000000000..b636e6810fb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/DynamicXWidgetLayoutData.java
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.XOption;
+import org.eclipse.osee.framework.ui.skynet.widgets.XOptionHandler;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class DynamicXWidgetLayoutData implements Cloneable {
+ private static final XWidgetFactory xWidgetFactory = XWidgetFactory.getInstance();
+ private static final int DEFAULT_HEIGHT = 9999;
+ private String name = "Unknown";
+ private String id = "";
+ private String storageName = "";
+ private String xWidgetName = UNKNOWN;
+ private static String UNKNOWN = "Unknown";
+ private XWidget xWidget;
+ private int beginComposite = 0; // If >0, indicates new child composite with columns == value
+ private boolean endComposite; // indicated end of child composite
+ private int height = DEFAULT_HEIGHT;
+ private String toolTip;
+ private DynamicXWidgetLayout dynamicXWidgetLayout;
+ private String defaultValue;
+ private String keyedBranchName;
+ private XOptionHandler xOptionHandler = new XOptionHandler();
+
+ public DynamicXWidgetLayoutData(DynamicXWidgetLayout dynamicXWidgetLayout, XOption... xOption) {
+ this.dynamicXWidgetLayout = dynamicXWidgetLayout;
+ xOptionHandler.add(XOption.EDITABLE);
+ xOptionHandler.add(XOption.ALIGN_LEFT);
+ xOptionHandler.add(xOption);
+ }
+
+ @Override
+ public Object clone() throws CloneNotSupportedException {
+ return super.clone();
+ }
+
+ public boolean isHeightSet() {
+ return height != DEFAULT_HEIGHT;
+ }
+
+ public String toString() {
+ return getName();
+ }
+
+ public String getName() {
+ return name.replaceFirst("^.*?\\.", "");
+ }
+
+ /**
+ * @return Returns the storageName.
+ */
+ public String getStorageName() {
+ return storageName;
+ }
+
+ /**
+ * @param storageName The storageName to set.
+ */
+ public void setStorageName(String storageName) {
+ this.storageName = storageName;
+ }
+
+ /**
+ * @return Returns the required.
+ */
+ public boolean isRequired() {
+ return xOptionHandler.contains(XOption.REQUIRED) || dynamicXWidgetLayout.isOrRequired(storageName) || dynamicXWidgetLayout.isXOrRequired(storageName);
+ }
+
+ /**
+ * @return Returns the xWidget.
+ */
+ public String getXWidgetName() {
+ return xWidgetName;
+ }
+
+ /**
+ * @param widget The xWidget to set.
+ */
+ public void setXWidgetName(String widget) {
+ xWidgetName = widget;
+ }
+
+ /**
+ * @param name The name to set.
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ // TODO This method will need to be removed
+ public XWidget getXWidget() {
+ if (xWidget == null) {
+ xWidget = xWidgetFactory.createXWidget(xWidgetName, name, this);
+ }
+ return xWidget;
+ }
+
+ public void setDefaultValue(String defaultValue) {
+ this.defaultValue = defaultValue;
+ }
+
+ /**
+ * @return Returns the height.
+ */
+ public int getHeight() {
+ return height;
+ }
+
+ /**
+ * @param height The height to set.
+ */
+ public void setHeight(int height) {
+ this.height = height;
+ }
+
+ /**
+ * @return Returns the beginComposite.
+ */
+ public int getBeginComposite() {
+ if (xOptionHandler.contains(XOption.BEGIN_COMPOSITE_10)) return 10;
+ if (xOptionHandler.contains(XOption.BEGIN_COMPOSITE_8)) return 8;
+ if (xOptionHandler.contains(XOption.BEGIN_COMPOSITE_6)) return 6;
+ if (xOptionHandler.contains(XOption.BEGIN_COMPOSITE_4)) return 4;
+ return beginComposite;
+ }
+
+ /**
+ * @param beginComposite The beginComposite to set.
+ */
+ public void setBeginComposite(int beginComposite) {
+ this.beginComposite = beginComposite;
+ }
+
+ /**
+ * @return Returns the endComposite.
+ */
+ public boolean isEndComposite() {
+ return endComposite;
+ }
+
+ /**
+ * @param endComposite The endComposite to set.
+ */
+ public void setEndComposite(boolean endComposite) {
+ this.endComposite = endComposite;
+ }
+
+ /**
+ * @return the toolTip
+ */
+ public String getToolTip() {
+ return toolTip;
+ }
+
+ /**
+ * @param toolTip the toolTip to set
+ */
+ public void setToolTip(String toolTip) {
+ this.toolTip = toolTip;
+ }
+
+ /**
+ * @return the dynamicXWidgetLayout
+ */
+ public DynamicXWidgetLayout getDynamicXWidgetLayout() {
+ return dynamicXWidgetLayout;
+ }
+
+ /**
+ * @return the defaultValue
+ */
+ public String getDefaultValue() {
+ return defaultValue;
+ }
+
+ /**
+ *
+ */
+ public void setKeyedBranchName(String keyedBranchName) {
+ this.keyedBranchName = keyedBranchName;
+ }
+
+ /**
+ * @return the keyedBranchName
+ */
+ public String getKeyedBranchName() {
+ return keyedBranchName;
+ }
+
+ /**
+ * @param dynamicXWidgetLayout the dynamicXWidgetLayout to set
+ */
+ public void setDynamicXWidgetLayout(DynamicXWidgetLayout dynamicXWidgetLayout) {
+ this.dynamicXWidgetLayout = dynamicXWidgetLayout;
+ }
+
+ /**
+ * @return the id
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * @param id the id to set
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ /**
+ * @return the xOptionHandler
+ */
+ public XOptionHandler getXOptionHandler() {
+ return xOptionHandler;
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IAttributeXWidgetProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IAttributeXWidgetProvider.java
new file mode 100644
index 00000000000..87af0b8b127
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IAttributeXWidgetProvider.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IAttributeXWidgetProvider {
+
+ public DynamicXWidgetLayoutData getDynamicXWidgetLayoutData(AttributeType attributeType);
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IDynamicWidgetLayoutListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IDynamicWidgetLayoutListener.java
new file mode 100644
index 00000000000..5c11cbf43de
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IDynamicWidgetLayoutListener.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IDynamicWidgetLayoutListener {
+
+ public void widgetCreating(XWidget xWidget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException;
+
+ public void widgetCreated(XWidget xWidget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException;
+
+ public void createXWidgetLayoutData(DynamicXWidgetLayoutData layoutData, XWidget xWidget, FormToolkit toolkit, Artifact art, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException;
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IWorkDefinitionProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IWorkDefinitionProvider.java
new file mode 100644
index 00000000000..a37b8639d28
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IWorkDefinitionProvider.java
@@ -0,0 +1,48 @@
+/*
+ * Created on May 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IWorkDefinitionProvider {
+
+ /**
+ * Return WorkItemDefinitions to be contributed programatically to the WorkDefinitionFactory. This includes Page and
+ * Workflow Definitions. This should only be used for development as all WorkItemDefinitions should be imported into
+ * the DB using ImportWorkItemDefinitions.
+ *
+ * @return
+ * @throws Exception TODO
+ */
+ public Collection<WorkItemDefinition> getProgramaticWorkItemDefinitions() throws OseeCoreException;
+
+ /**
+ * Return WorkFlowDefinition to use for the given state machine artifact.
+ *
+ * @param artifact
+ * @return
+ * @throws Exception TODO
+ */
+ public WorkFlowDefinition getWorkFlowDefinition(Artifact artifact) throws OseeCoreException;
+
+ /**
+ * Dynamic Work Item Definitions will be collected only when widgets are being drawn for the given workflow and
+ * workpage. This allows for dynamic widgets to be added conditionally and/or configured programatically.
+ *
+ * @param workFlowDefinition current workflow
+ * @param workPageDefinition current workpage
+ * @param data information provided to the extending plugins to determine if work item definitions should be added
+ * @return
+ * @throws Exception TODO
+ */
+ public Collection<WorkItemDefinition> getDynamicWorkItemDefinitionsForPage(WorkFlowDefinition workFlowDefinition, WorkPageDefinition workPageDefinition, Object data) throws OseeCoreException;
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IXWidgetOptionResolver.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IXWidgetOptionResolver.java
new file mode 100644
index 00000000000..59947a001ab
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IXWidgetOptionResolver.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IXWidgetOptionResolver {
+
+ public String[] getWidgetOptions(DynamicXWidgetLayoutData xWidgetData);
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IXWidgetProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IXWidgetProvider.java
new file mode 100644
index 00000000000..20359e7b43f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/IXWidgetProvider.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IXWidgetProvider {
+
+ public XWidget createXWidget(String xWidgetName, String name, DynamicXWidgetLayoutData xWidgetLayoutData);
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/UserCommunity.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/UserCommunity.java
new file mode 100644
index 00000000000..89581db08bc
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/UserCommunity.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class UserCommunity {
+ private static UserCommunity instance = new UserCommunity();
+
+ private UserCommunity() {
+ super();
+ }
+
+ public static UserCommunity getInstance() {
+ return instance;
+ }
+
+ public Set<String> getUserCommunityNames() {
+ Set<String> communities;
+ try {
+ communities =
+ AttributeTypeManager.getValidEnumerationAttributeValues("ats.User Community",
+ BranchManager.getCommonBranch());
+ } catch (OseeCoreException ex) {
+ communities = new HashSet<String>();
+ communities.add(ex.getLocalizedMessage());
+ }
+ return communities;
+ }
+
+ public String getUserCommunityCommaDelim() {
+ StringBuffer sb = new StringBuffer();
+ for (String name : getUserCommunityNames())
+ sb.append(name + ",");
+ return sb.toString().replaceFirst(",$", "");
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkDefinitionProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkDefinitionProvider.java
new file mode 100644
index 00000000000..f0c619eb9d8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkDefinitionProvider.java
@@ -0,0 +1,50 @@
+/*
+ * Created on May 29, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.plugin.core.util.ExtensionPoints;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.osgi.framework.Bundle;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkDefinitionProvider {
+
+ private static List<IWorkDefinitionProvider> workDefinitionProviders;
+
+ public static List<IWorkDefinitionProvider> getWorkDefinitionProviders() {
+ workDefinitionProviders = new ArrayList<IWorkDefinitionProvider>();
+ for (IConfigurationElement el : ExtensionPoints.getExtensionElements(
+ "org.eclipse.osee.framework.ui.skynet.WorkDefinitionProvider", "WorkDefinitionProvider")) {
+ String classname = null;
+ String bundleName = null;
+ if (el.getName().equals("WorkDefinitionProvider")) {
+ classname = el.getAttribute("classname");
+ bundleName = el.getContributor().getName();
+ if (classname != null && bundleName != null) {
+ Bundle bundle = Platform.getBundle(bundleName);
+ try {
+ Class<?> taskClass = bundle.loadClass(classname);
+ Object obj = taskClass.newInstance();
+ workDefinitionProviders.add((IWorkDefinitionProvider) obj);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, "Error loading WorkDefinitionProvider extension", ex,
+ true);
+ }
+ }
+
+ }
+ }
+ return workDefinitionProviders;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkFlowDefinition.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkFlowDefinition.java
new file mode 100644
index 00000000000..c494b4e2eae
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkFlowDefinition.java
@@ -0,0 +1,420 @@
+/*
+ * Created on May 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkFlowDefinition extends WorkItemWithChildrenDefinition {
+
+ public static String ARTIFACT_NAME = "Work Flow Definition";
+
+ public static enum TransitionType {
+ // Normal transition; will be provided as option in transition pulldown
+ ToPage,
+ // Allows the page to "return" to an earlier state; allows transition w/o page completion;
+ // will be provided as an option in transition pulldown (don't need to register as ToPage)
+ ToPageAsReturn,
+ // ToPage that will also be registered as the default selected transition state
+ ToPageAsDefault,
+ }
+ // fromPageId --- TransitionType ---> toPageIds
+ // Contains locally defined transitions
+ private final Map<String, Map<TransitionType, Set<String>>> pageIdToPageIdsViaTransitionType =
+ new HashMap<String, Map<TransitionType, Set<String>>>();
+ // Contains locally and inherited transitions
+ protected Map<String, Map<TransitionType, Set<String>>> inheritedPageIdToPageIdsViaTransitionType;
+ // Contains local and inherited pageNameToPageIds
+ protected Map<String, String> pageNameToPageId;
+ protected String startPageId;
+ protected String resolvedStartPageId;
+
+ public WorkFlowDefinition(String name, String id, String parentId) {
+ super(name, id, parentId);
+ }
+
+ public WorkFlowDefinition(Artifact artifact) throws OseeCoreException {
+ this(artifact.getDescriptiveName(), artifact.getSoleAttributeValue(
+ WorkItemAttributes.WORK_ID.getAttributeTypeName(), ""), artifact.getSoleAttributeValue(
+ WorkItemAttributes.WORK_PARENT_ID.getAttributeTypeName(), (String) null));
+ setType(artifact.getSoleAttributeValue(WorkItemAttributes.WORK_TYPE.getAttributeTypeName(), (String) null));
+ loadWorkDataKeyValueMap(artifact);
+
+ // Add local transitions from this artifact
+ addTransitionsFromArtifact(artifact, pageIdToPageIdsViaTransitionType, getId());
+
+ // Read in this workflow's start page
+ startPageId =
+ artifact.getSoleAttributeValue(WorkItemAttributes.START_PAGE.getAttributeTypeName(), null, String.class);
+ }
+
+ @Override
+ public Artifact toArtifact(WriteType writeType) throws OseeCoreException {
+ Artifact art = super.toArtifact(writeType);
+ // Make sure start page is defined in this or parent's definition
+ if (getResolvedStartPageId() == null) {
+ throw new IllegalStateException(
+ "For WorkFlowDefinition " + getId() + ". Start Page not defined. Must be in this or a parent's WorkFlowDefinition.");
+ }
+ // Only store start page if it's part of this definition
+ if (startPageId != null) {
+ art.setSoleAttributeFromString(WorkItemAttributes.START_PAGE.getAttributeTypeName(), startPageId);
+ }
+ // Store transition items declared as part of this definition
+ List<String> transitionItems = new ArrayList<String>();
+ for (Entry<String, Map<TransitionType, Set<String>>> pageToTransEntry : pageIdToPageIdsViaTransitionType.entrySet()) {
+ for (Entry<TransitionType, Set<String>> transToPageIdsEntry : pageIdToPageIdsViaTransitionType.get(
+ pageToTransEntry.getKey()).entrySet()) {
+ for (String toPage : transToPageIdsEntry.getValue()) {
+ transitionItems.add(pageToTransEntry.getKey() + ";" + transToPageIdsEntry.getKey().name() + ";" + toPage);
+ }
+ }
+ }
+ if (transitionItems.size() > 0) {
+ art.setAttributeValues(WorkItemAttributes.TRANSITION.getAttributeTypeName(), transitionItems);
+ }
+ return art;
+ }
+
+ public Collection<String> getPageNames() throws OseeCoreException {
+ loadPageData();
+ return pageNameToPageId.keySet();
+ }
+
+ public static void loadInheritedData(WorkFlowDefinition workFlowDefinition, String workflowId, Map<String, Map<TransitionType, Set<String>>> inheritedPageIdToPageIdsViaTransitionType) throws OseeCoreException {
+ addTransitionsFromArtifact(WorkItemDefinitionFactory.getWorkItemDefinitionArtifact(workFlowDefinition.getId()),
+ inheritedPageIdToPageIdsViaTransitionType, workflowId);
+ if (workFlowDefinition.hasParent()) {
+ WorkFlowDefinition.loadInheritedData((WorkFlowDefinition) workFlowDefinition.getParent(), workflowId,
+ inheritedPageIdToPageIdsViaTransitionType);
+ }
+ }
+
+ public synchronized void loadPageData() throws OseeCoreException {
+ if (inheritedPageIdToPageIdsViaTransitionType == null) {
+ inheritedPageIdToPageIdsViaTransitionType = new HashMap<String, Map<TransitionType, Set<String>>>();
+ WorkFlowDefinition.loadInheritedData(this, getId(), inheritedPageIdToPageIdsViaTransitionType);
+ }
+ resolvedStartPageId = getResolvedStartPageId(this, getId());
+ if (pageNameToPageId == null) {
+ pageNameToPageId = new HashMap<String, String>();
+ for (String pageNameOrId : inheritedPageIdToPageIdsViaTransitionType.keySet()) {
+ WorkPageDefinition workPageDefinition =
+ (WorkPageDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(getFullPageId(pageNameOrId));
+ pageNameToPageId.put(workPageDefinition.getPageName(), workPageDefinition.id);
+ for (Map<TransitionType, Set<String>> transTypeToPageIds : inheritedPageIdToPageIdsViaTransitionType.values()) {
+ for (TransitionType transType : transTypeToPageIds.keySet()) {
+ for (String pageId2 : transTypeToPageIds.get(transType)) {
+ workPageDefinition =
+ (WorkPageDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(getFullPageId(pageId2));
+ pageNameToPageId.put(workPageDefinition.getPageName(), workPageDefinition.id);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Since transitions can be defined by full ids or just page name (eg "Endorse"), check if pageId has namespace
+ * characters and thus it's full name or add id to given pageId
+ *
+ * @param pageId
+ * @return
+ */
+ private String getFullPageId(String pageId) {
+ return (pageId.contains(".")) ? pageId : getId() + "." + pageId;
+ }
+
+ public WorkPageDefinition getWorkPageDefinitionByName(String name) throws OseeCoreException {
+ loadPageData();
+ return getWorkPageDefinitionById(pageNameToPageId.get(name));
+ }
+
+ public WorkPageDefinition getWorkPageDefinitionById(String id) throws OseeCoreException {
+ loadPageData();
+ return (WorkPageDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(id);
+ }
+
+ public Collection<WorkRuleDefinition> getWorkRulesStartsWith(String ruleId) throws OseeCoreException {
+ Set<WorkRuleDefinition> workRules = new HashSet<WorkRuleDefinition>();
+ if (ruleId == null || ruleId.equals("")) return workRules;
+ // Get work rules from team definition
+ for (WorkRuleDefinition workRuleDefinition : getWorkRules()) {
+ if (!workRuleDefinition.getId().equals("") && workRuleDefinition.getId().startsWith(ruleId)) {
+ workRules.add(workRuleDefinition);
+ }
+ }
+
+ return workRules;
+ }
+
+ public Collection<WorkRuleDefinition> getWorkRules() throws OseeCoreException {
+ Set<WorkRuleDefinition> workRules = new HashSet<WorkRuleDefinition>();
+ // Get work rules from team definition
+ for (Artifact art : WorkItemDefinitionFactory.getWorkItemDefinitionArtifact(getId()).getRelatedArtifacts(
+ CoreRelationEnumeration.WorkItem__Child)) {
+ String id = art.getSoleAttributeValue(WorkItemAttributes.WORK_ID.getAttributeTypeName(), "");
+ if (id != null && !id.equals("")) {
+ workRules.add((WorkRuleDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(id));
+ }
+ }
+
+ return workRules;
+ }
+
+ /**
+ * @return Returns the defaultToPage.
+ */
+ public WorkPageDefinition getDefaultToPage(WorkPageDefinition workPageDefinition) throws OseeCoreException {
+ if (getPageDefinitions(workPageDefinition.getId(), TransitionType.ToPageAsDefault).size() > 0) return getPageDefinitions(
+ workPageDefinition.getId(), TransitionType.ToPageAsDefault).iterator().next();
+ return null;
+ }
+
+ /**
+ * This convenience method registers a transition forward and back. Useful for final/hold states like cancelled or
+ * completed that can be returned from<br>
+ * 1) fromPageId, toPageId, ToPage<br>
+ * 2) toPageId, fromPageId, ToPageAsReturn
+ *
+ * @param fromPageId
+ * @param toPageId
+ * @param transitionType
+ */
+ public void addPageTransitionToPageAndReturn(String fromPageId, String toPageId) {
+ addPageTransition(pageIdToPageIdsViaTransitionType, fromPageId, toPageId, TransitionType.ToPage);
+ addPageTransition(pageIdToPageIdsViaTransitionType, toPageId, fromPageId, TransitionType.ToPageAsReturn);
+ }
+
+ public static void addTransitionsFromArtifact(Artifact artifact, Map<String, Map<TransitionType, Set<String>>> pageIdToPageIdsViaTransitionType, String workflowId) throws OseeCoreException {
+ if (artifact == null) return;
+ // Read in this workflow's transition information
+ for (String transition : artifact.getAttributesToStringList(WorkItemAttributes.TRANSITION.getAttributeTypeName())) {
+ String[] strs = transition.split(";");
+ if (strs.length != 3) {
+ OSEELog.logException(
+ SkynetGuiPlugin.class,
+ new IllegalStateException(
+ "Transition attribute from artifact " + artifact.getHumanReadableId() + " is invalid. Must be <fromState>;<transitionType>;<toState>"),
+ false);
+ continue;
+ }
+ TransitionType transType = TransitionType.valueOf(strs[1]);
+ // Since workflows can be defined by stateName or pageId, resolve any stateName to pageId so only dealing with one index
+ // eg (Endorse -> <workflow id>.Endorse -> osee.ats.Endorse AND osee.ats.Endorse -> osee.ats.Endorse)
+ String fromPage = strs[0].contains(".") ? strs[0] : workflowId + "." + strs[0];
+ String toPage = strs[2].contains(".") ? strs[2] : workflowId + "." + strs[2];
+ addPageTransition(pageIdToPageIdsViaTransitionType, fromPage, toPage, transType);
+ }
+
+ }
+
+ /**
+ * Register transition for from and to pages. The use of simple page names (eg "Endorse") allows for other workflows
+ * to inherit this workflow by just using the same state names. id will be prepended to name prior to retrieving the
+ * WorkPageDefinitions
+ *
+ * @param fromPageId either page Name "Endorse" or full namespace "osee.ats.Endorse"
+ * @param toPageId either page Name "Endorse" or full namespace "osee.ats.Endorse"
+ * @param transitionType
+ */
+ public void addPageTransition(String fromPageId, String toPageId, TransitionType... transitionType) {
+ WorkFlowDefinition.addPageTransition(pageIdToPageIdsViaTransitionType, fromPageId, toPageId, transitionType);
+ }
+
+ /**
+ * Register transition for from and to pages. The use of simple page names (eg "Endorse") allows for other workflows
+ * to inherit this workflow by just using the same state names. id will be prepended to name prior to retrieving the
+ * WorkPageDefinitions
+ *
+ * @param fromPageId either page Name "Endorse" or full namespace "osee.ats.Endorse"
+ * @param toPageId either page Name "Endorse" or full namespace "osee.ats.Endorse"
+ * @param transitionType
+ */
+ public static void addPageTransition(Map<String, Map<TransitionType, Set<String>>> pageIdToPageIdsViaTransitionType, String fromPageId, String toPageId, TransitionType... transitionType) {
+ List<Object> transTypes = Collections.getAggregate((Object[]) transitionType);
+ Map<TransitionType, Set<String>> transitionTypeToPageIds = pageIdToPageIdsViaTransitionType.get(fromPageId);
+ if (transitionTypeToPageIds == null) {
+ transitionTypeToPageIds = new HashMap<TransitionType, Set<String>>();
+ }
+ for (TransitionType transType : transitionType) {
+ Set<String> toPageIds = transitionTypeToPageIds.get(transType);
+ if (toPageIds == null) {
+ toPageIds = new HashSet<String>();
+ }
+ if (transTypes.contains(TransitionType.ToPageAsDefault) && toPageIds.size() > 0) {
+ throw new IllegalArgumentException("Only allowed ONE DefaultToPage from " + fromPageId);
+ }
+ toPageIds.add(toPageId);
+
+ transitionTypeToPageIds.put(transType, toPageIds);
+ pageIdToPageIdsViaTransitionType.put(fromPageId, transitionTypeToPageIds);
+ }
+ }
+
+ /**
+ * Return all registered page definitions including those inherited from parent(s)
+ *
+ * @param fromPageId
+ * @param transitionType
+ * @return definitions
+ * @throws Exception
+ */
+ public List<WorkPageDefinition> getPageDefinitions(String fromPageId, TransitionType... transitionType) throws OseeCoreException {
+ return getPageDefinitions(this, fromPageId, true, transitionType);
+ }
+
+ public Map<TransitionType, Set<String>> getTransitionTypeToPageIds(String fromPageId) throws OseeCoreException {
+ loadPageData();
+ return pageIdToPageIdsViaTransitionType.get(fromPageId);
+ }
+
+ public Map<TransitionType, Set<String>> getInheritedTransitionTypeToPageIds(String fromPageId) throws OseeCoreException {
+ loadPageData();
+ return inheritedPageIdToPageIdsViaTransitionType.get(fromPageId);
+ }
+
+ public static List<WorkPageDefinition> getPageDefinitions(WorkFlowDefinition workFlowDefinition, String fromPageId, boolean includeInherited, TransitionType... transitionType) throws OseeCoreException {
+ Map<TransitionType, Set<String>> transitionTypeToPageIds = null;
+ if (includeInherited) {
+ transitionTypeToPageIds = workFlowDefinition.getInheritedTransitionTypeToPageIds(fromPageId);
+ } else {
+ transitionTypeToPageIds = workFlowDefinition.getTransitionTypeToPageIds(fromPageId);
+ }
+ List<WorkPageDefinition> workPageDefs = new ArrayList<WorkPageDefinition>();
+ if (transitionTypeToPageIds != null) {
+ for (TransitionType transType : transitionType) {
+ Set<String> toPageIds = transitionTypeToPageIds.get(transType);
+ if (toPageIds == null) {
+ continue;
+ }
+ for (WorkItemDefinition def : WorkItemDefinitionFactory.getWorkItemDefinitions(toPageIds)) {
+ workPageDefs.add((WorkPageDefinition) def);
+ }
+ }
+ }
+ return workPageDefs;
+ }
+
+ public List<WorkPageDefinition> getPagesOrdered() throws OseeCoreException {
+ WorkPageDefinition startWorkPageDefinition = getStartPage();
+ if (startWorkPageDefinition == null) throw new IllegalArgumentException(
+ "Can't locate Start WorkPageDefinition for workflow " + getName());
+
+ // Get ordered pages starting with start page
+ List<WorkPageDefinition> orderedPages = new ArrayList<WorkPageDefinition>();
+ getOrderedPages(startWorkPageDefinition, orderedPages);
+
+ // Move completed to the end if it exists
+ WorkPageDefinition completedPage = null;
+ for (WorkPageDefinition workPageDefinition : orderedPages)
+ if (workPageDefinition.isCompletePage()) completedPage = workPageDefinition;
+ if (completedPage != null) {
+ orderedPages.remove(completedPage);
+ orderedPages.add(completedPage);
+ }
+ // for (WorkPage wPage : orderedPages)
+ // System.out.println("Ordered Page: - " + wPage);
+ return orderedPages;
+ }
+
+ private void getOrderedPages(WorkPageDefinition workPageDefinition, List<WorkPageDefinition> pages) throws OseeCoreException {
+ // Add this page first
+ if (!pages.contains(workPageDefinition)) pages.add(workPageDefinition);
+ // Add default page
+ if (getDefaultToPage(workPageDefinition) != null) getOrderedPages(getDefaultToPage(workPageDefinition), pages);
+ // Add remaining pages
+ for (WorkPageDefinition wPage : getToPages(workPageDefinition))
+ if (!pages.contains(wPage)) getOrderedPages(wPage, pages);
+ }
+
+ /**
+ * @return Returns the toPages for given workPageDefinition including default and return toPages.
+ */
+ public List<WorkPageDefinition> getToPages(WorkPageDefinition workPageDefinition) throws OseeCoreException {
+ return getPageDefinitions(workPageDefinition.getId(), TransitionType.ToPage, TransitionType.ToPageAsDefault,
+ TransitionType.ToPageAsReturn);
+ }
+
+ /**
+ * @return Returns the returnPages for given workPageDefinition.
+ */
+ public List<WorkPageDefinition> getReturnPages(WorkPageDefinition workPageDefinition) throws OseeCoreException {
+ return getPageDefinitions(workPageDefinition.getId(), TransitionType.ToPageAsReturn);
+ }
+
+ public boolean isReturnPage(WorkPageDefinition fromWorkPageDefinition, WorkPageDefinition toWorkPageDefinition) throws OseeCoreException {
+ return getReturnPages(fromWorkPageDefinition).contains(toWorkPageDefinition);
+ }
+
+ @Override
+ public String toString() {
+ try {
+ return id + " - " + name + (parentId != null ? " - Parent: " + parentId : "") + getPageNames().toString();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return id + " - " + name;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinition#getArtifactTypeName()
+ */
+ @Override
+ public String getArtifactTypeName() {
+ return ARTIFACT_NAME;
+ }
+
+ public WorkPageDefinition getStartPage() throws OseeCoreException {
+ loadPageData();
+ if (resolvedStartPageId != null) {
+ return (WorkPageDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(resolvedStartPageId);
+ }
+ return null;
+ }
+
+ public void setStartPageId(String startPageId) {
+ this.startPageId = startPageId;
+ }
+
+ public String getStartPageId() throws OseeCoreException {
+ loadPageData();
+ return startPageId;
+ }
+
+ public String getResolvedStartPageId() throws OseeCoreException {
+ loadPageData();
+ return resolvedStartPageId;
+ }
+
+ private static String getResolvedStartPageId(WorkFlowDefinition workFlowDefinition, String workflowId) throws OseeCoreException {
+ if (workFlowDefinition.startPageId != null) {
+ return workFlowDefinition.startPageId.contains(".") ? workFlowDefinition.startPageId : workflowId + "." + workFlowDefinition.startPageId;
+ }
+ if (workFlowDefinition.hasParent()) {
+ return getResolvedStartPageId((WorkFlowDefinition) workFlowDefinition.getParent(), workflowId);
+ }
+ return null;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkFlowDefinitionFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkFlowDefinitionFactory.java
new file mode 100644
index 00000000000..48689692eb1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkFlowDefinitionFactory.java
@@ -0,0 +1,25 @@
+/*
+ * Created on May 29, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkFlowDefinitionFactory {
+
+ public static WorkFlowDefinition getWorkFlowDefinition(Artifact artifact) throws Exception {
+
+ // Check extensions for WorkFlowDefinition for given artifact
+ for (IWorkDefinitionProvider provider : WorkDefinitionProvider.getWorkDefinitionProviders()) {
+ WorkFlowDefinition workFlowDefinition = provider.getWorkFlowDefinition(artifact);
+ if (workFlowDefinition != null) return workFlowDefinition;
+ }
+ throw new IllegalArgumentException(
+ "No WorkFlowDefinition found for artifact " + artifact.getArtifactTypeName() + " - " + artifact.getHumanReadableId());
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemAttributes.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemAttributes.java
new file mode 100644
index 00000000000..68d6150eb71
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemAttributes.java
@@ -0,0 +1,41 @@
+/*
+ * Created on Jun 2, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkItemAttributes {
+
+ public static WorkItemAttributes WORK_ID = new WorkItemAttributes("Work Id");
+ public static WorkItemAttributes WORK_PARENT_ID = new WorkItemAttributes("Work Parent Id");
+ public static WorkItemAttributes WORK_DATA = new WorkItemAttributes("Work Data");
+ public static WorkItemAttributes WORK_DESCRIPTION = new WorkItemAttributes("Work Description");
+ public static WorkItemAttributes WORK_PAGE_NAME = new WorkItemAttributes("Work Page Name");
+ public static WorkItemAttributes WORK_TYPE = new WorkItemAttributes("Work Type");
+ public static WorkItemAttributes TRANSITION = new WorkItemAttributes("Transition");
+ public static WorkItemAttributes START_PAGE = new WorkItemAttributes("Start Page");
+
+ private final String attributeTypeName;
+
+ public WorkItemAttributes(String name, String attributeTypeName) {
+ this.attributeTypeName = attributeTypeName;
+ }
+
+ /**
+ * Creates attribute with displayName = "<name>" and storeName = "osee.wi.<name>"
+ *
+ * @param name
+ */
+ public WorkItemAttributes(String name) {
+ this(name, "osee.wi." + name);
+ }
+
+ public String getAttributeTypeName() {
+ return attributeTypeName;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemDefinition.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemDefinition.java
new file mode 100644
index 00000000000..a09aabe1e81
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemDefinition.java
@@ -0,0 +1,227 @@
+/*
+ * Created on May 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeStateException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+
+/**
+ * Definition of WorkItem. Once created, nothing in this class, or any subclasses, should be modified as these
+ * definitions are shared by all instantiations of pages, rules, workflows and widgets.
+ *
+ * @author Donald G. Dunne
+ */
+public abstract class WorkItemDefinition {
+
+ protected final String id;
+ protected final String name;
+ protected final String parentId;
+ protected String description;
+ protected Map<String, String> workDataKeyValueMap = new HashMap<String, String>();
+ private final Pattern keyValuePattern = Pattern.compile("^(.*?)=(.*)$", Pattern.MULTILINE);
+ protected String type;
+ public static enum WriteType {
+ Update, New
+ };
+
+ /**
+ * @return the workDataKeyValueMap
+ */
+ public Map<String, String> getWorkDataKeyValueMap() {
+ return workDataKeyValueMap;
+ }
+
+ /**
+ * @param workDataKeyValueMap the workDataKeyValueMap to set
+ */
+ public void setWorkDataKeyValueMap(Map<String, String> workDataKeyValueMap) {
+ this.workDataKeyValueMap = workDataKeyValueMap;
+ }
+
+ /**
+ * @param description the description to set
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * @return the description
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ public WorkItemDefinition(String name, String id, String parentId) {
+ this(name, id, parentId, null);
+ }
+
+ public WorkItemDefinition(String name, String id, String parentId, String type) {
+ this(name, id, parentId, type, null);
+ }
+
+ public WorkItemDefinition(String name, String id, String parentId, String type, String description) {
+ this.name = name;
+ this.id = id;
+ this.type = type;
+ this.parentId = parentId;
+ this.description = description;
+ if (parentId != null && parentId.equals("")) throw new IllegalArgumentException(
+ "parentId must either be null or a valid parent Id. Invalid for WorkItemDefinition " + id);
+ if (type != null && type.equals("")) {
+ throw new IllegalArgumentException(
+ "type must either be null or a value, not empty string. Invalid for WorkItemDefinition " + id);
+ }
+ if (this.id == null || this.id.equals("")) {
+ throw new IllegalArgumentException("id must be unique and non-null");
+ }
+
+ }
+
+ /**
+ * Determine if this workItemDefinition is or has a parent definition of pageId. This will walk up the tree of
+ * definition inheritance to answer the question
+ *
+ * @param pageId
+ * @return boolean
+ * @throws OseeCoreException TODO
+ */
+ public boolean isInstanceOfPage(String pageId, String... visitedPageIds) throws OseeCoreException {
+ // Collect all ids already visited
+ Set<String> visitedIds = new HashSet<String>();
+ for (String visitedId : visitedPageIds)
+ visitedIds.add(visitedId);
+
+ // Check for circular dependency
+ if (visitedIds.contains(getId())) throw new IllegalStateException(
+ "Circular dependency detected. Id already visited: " + getId());
+
+ // Check for instanceof
+ if (getId().equals(pageId)) return true;
+
+ // If parentId exists, check if it isInstanceOfPage
+ if (getParentId() != null) {
+ visitedIds.add(getId());
+ WorkItemDefinition workItemDefinition = WorkItemDefinitionFactory.getWorkItemDefinition(getParentId());
+ return workItemDefinition.isInstanceOfPage(pageId, visitedIds.toArray(new String[visitedIds.size()]));
+ }
+ return false;
+ }
+
+ public boolean hasParent() {
+ return (getParentId() != null);
+ }
+
+ public WorkItemDefinition getParent() throws OseeCoreException {
+ if (!hasParent()) return null;
+ return WorkItemDefinitionFactory.getWorkItemDefinition(getParentId());
+ }
+
+ @Override
+ public String toString() {
+ return getArtifactTypeName() + ": Name: \"" + name +
+ //
+ "\" Id: \"" + id + "\" " +
+ //
+ (parentId != null ? " Parent: " + parentId : "");
+ }
+
+ /**
+ * @return the id
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * @return the parentId
+ */
+ public String getParentId() {
+ return parentId;
+ }
+
+ public Artifact toArtifact(WriteType writeType) throws OseeCoreException {
+ Artifact artifact = WorkItemDefinitionFactory.getWorkItemDefinitionArtifact(getId());
+ if (writeType == WriteType.New) {
+ // Double-check that doesn't already exist in db. If so, exception cause duplicates
+ if (ArtifactQuery.getArtifactsFromAttribute(WorkItemAttributes.WORK_ID.getAttributeTypeName(), getId(),
+ BranchManager.getCommonBranch()).size() > 0) {
+ throw new IllegalStateException(
+ "WorkItemDefinition artifact creation failed. \"" + getId() + "\" already exists.");
+ }
+ }
+ if (artifact == null) {
+ // Create new
+ artifact = ArtifactTypeManager.addArtifact(getArtifactTypeName(), BranchManager.getCommonBranch());
+ }
+ artifact.setDescriptiveName(getName());
+ if (getParentId() != null) artifact.setSoleAttributeValue(
+ WorkItemAttributes.WORK_PARENT_ID.getAttributeTypeName(), getParentId());
+ if (getDescription() != null) artifact.setSoleAttributeValue(
+ WorkItemAttributes.WORK_DESCRIPTION.getAttributeTypeName(), getDescription());
+ artifact.setSoleAttributeValue(WorkItemAttributes.WORK_ID.getAttributeTypeName(), getId());
+ if (getType() != null) artifact.setSoleAttributeValue(WorkItemAttributes.WORK_TYPE.getAttributeTypeName(),
+ getType());
+ if (workDataKeyValueMap != null) {
+ for (Entry<String, String> entry : workDataKeyValueMap.entrySet()) {
+ artifact.addAttribute(WorkItemAttributes.WORK_DATA.getAttributeTypeName(),
+ entry.getKey() + "=" + entry.getValue());
+ }
+ }
+ WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(writeType, this, artifact);
+ return artifact;
+ }
+
+ public abstract String getArtifactTypeName();
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public void loadWorkDataKeyValueMap(Artifact artifact) throws OseeCoreException {
+ for (String value : artifact.getAttributesToStringList(WorkItemAttributes.WORK_DATA.getAttributeTypeName())) {
+ Matcher m = keyValuePattern.matcher(value);
+ if (m.find()) {
+ addWorkDataKeyValue(m.group(1), m.group(2));
+ } else {
+ throw new OseeStateException("Illegal value for WorkData; must be key=value");
+ }
+ }
+ }
+
+ public String getWorkDataValue(String key) {
+ return workDataKeyValueMap.get(key);
+ }
+
+ public void addWorkDataKeyValue(String key, String value) {
+ workDataKeyValueMap.put(key, value);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemDefinitionFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemDefinitionFactory.java
new file mode 100644
index 00000000000..efa00dda0d6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemDefinitionFactory.java
@@ -0,0 +1,216 @@
+/*
+ * Created on May 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinition.WriteType;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkItemDefinitionFactory {
+
+ private static Map<String, WorkItemDefinition> itemIdToDefinition;
+ private static Map<String, Artifact> itemIdToWidArtifact;
+
+ public static void clearCache() {
+ itemIdToDefinition = null;
+ itemIdToWidArtifact = null;
+ }
+
+ public synchronized static void loadDefinitions() throws OseeCoreException {
+ if (itemIdToDefinition == null) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.INFO, "Loading Work Item Definitions");
+ itemIdToDefinition = new HashMap<String, WorkItemDefinition>();
+ itemIdToWidArtifact = new HashMap<String, Artifact>();
+
+ // Add all work item definitions provided through extension points
+ for (IWorkDefinitionProvider provider : WorkDefinitionProvider.getWorkDefinitionProviders()) {
+ for (WorkItemDefinition def : provider.getProgramaticWorkItemDefinitions()) {
+ addItemDefinition(WriteType.New, def);
+ }
+ }
+
+ // This load is faster than loading each by artifact type
+
+
+
+ Collection<String> artifactTypeNames = new ArrayList<String>(4);
+ artifactTypeNames.add(WorkRuleDefinition.ARTIFACT_NAME);
+ artifactTypeNames.add(WorkPageDefinition.ARTIFACT_NAME);
+ artifactTypeNames.add(WorkFlowDefinition.ARTIFACT_NAME);
+ artifactTypeNames.add(WorkWidgetDefinition.ARTIFACT_NAME);
+ for (Artifact art : ArtifactQuery.getArtifactsFromTypes(artifactTypeNames , BranchManager.getCommonBranch())) {
+ if (art.getArtifactTypeName().equals(WorkRuleDefinition.ARTIFACT_NAME)) {
+ addItemDefinition(WriteType.New, new WorkRuleDefinition(art), art);
+ } else if (art.getArtifactTypeName().equals(WorkWidgetDefinition.ARTIFACT_NAME)) {
+ addItemDefinition(WriteType.New, new WorkWidgetDefinition(art), art);
+ } else if (art.getArtifactTypeName().equals(WorkPageDefinition.ARTIFACT_NAME)) {
+ addItemDefinition(WriteType.New, new WorkPageDefinition(art), art);
+ } else if (art.getArtifactTypeName().equals(WorkFlowDefinition.ARTIFACT_NAME)) {
+ addItemDefinition(WriteType.New, new WorkFlowDefinition(art), art);
+ }
+ }
+ }
+ }
+
+ /**
+ * This should only be called on database initialization or when new work item definitions are created during
+ * run-time.
+ *
+ * @param workItemDefinition
+ * @param artifact
+ */
+ public static void cacheWorkItemDefinitionArtifact(WriteType writeType, WorkItemDefinition workItemDefinition, Artifact artifact) {
+ addItemDefinition(writeType, workItemDefinition, artifact);
+ }
+
+ public static void relateWorkItemDefinitions(String parentWorkflowId, String childWorkflowId) throws OseeCoreException {
+ List<Artifact> parentArts =
+ ArtifactQuery.getArtifactsFromAttribute(WorkItemAttributes.WORK_ID.getAttributeTypeName(),
+ parentWorkflowId, BranchManager.getCommonBranch());
+ if (parentArts == null || parentArts.size() == 0) {
+ throw new IllegalArgumentException("Can't access parentWorkflowId " + parentWorkflowId);
+ }
+ Artifact parentArt = parentArts.iterator().next();
+ List<Artifact> childArts =
+ ArtifactQuery.getArtifactsFromAttribute(WorkItemAttributes.WORK_ID.getAttributeTypeName(), childWorkflowId,
+ BranchManager.getCommonBranch());
+ if (childArts == null || childArts.size() == 0) {
+ throw new IllegalArgumentException("Can't access childWorkflowId " + childWorkflowId);
+ }
+ Artifact childArt = childArts.iterator().next();
+ if (!parentArt.getRelatedArtifacts(CoreRelationEnumeration.WorkItem__Child, Artifact.class).contains(childArt)) {
+ parentArt.addRelation(CoreRelationEnumeration.WorkItem__Child, childArt);
+ parentArt.persistRelations();
+ }
+ }
+
+ private static void addItemDefinition(WriteType writeType, WorkItemDefinition workItemDefinition) {
+ if (workItemDefinition.getId() == null) throw new IllegalArgumentException("Item Id can't be null");
+ if (writeType == WriteType.New && itemIdToDefinition.containsKey(workItemDefinition.getId())) throw new IllegalArgumentException(
+ "Item Id must be unique. Already work item with id \"" + workItemDefinition.getId() + "\"");
+ itemIdToDefinition.put(workItemDefinition.getId(), workItemDefinition);
+ }
+
+ private static void addItemDefinition(WriteType writeType, WorkItemDefinition workItemDefinition, Artifact artifact) {
+ addItemDefinition(writeType, workItemDefinition);
+ itemIdToWidArtifact.put(workItemDefinition.id, artifact);
+ }
+
+ public static void loadDefinitions(Collection<Artifact> arts) throws OseeCoreException {
+ for (Artifact art : arts) {
+ if (art.getArtifactTypeName().equals(WorkRuleDefinition.ARTIFACT_NAME)) {
+ System.out.println("Updating WorkItemDefinition cache with " + art);
+ addItemDefinition(WriteType.New, new WorkRuleDefinition(art), art);
+ }
+ if (art.getArtifactTypeName().equals(WorkWidgetDefinition.ARTIFACT_NAME)) {
+ System.out.println("Updating WorkItemDefinition cache with " + art);
+ addItemDefinition(WriteType.New, new WorkWidgetDefinition(art), art);
+ }
+ if (art.getArtifactTypeName().equals(WorkPageDefinition.ARTIFACT_NAME)) {
+ System.out.println("Updating WorkItemDefinition cache with " + art);
+ addItemDefinition(WriteType.New, new WorkPageDefinition(art), art);
+ }
+ if (art.getArtifactTypeName().equals(WorkFlowDefinition.ARTIFACT_NAME)) {
+ System.out.println("Updating WorkItemDefinition cache with " + art);
+ addItemDefinition(WriteType.New, new WorkFlowDefinition(art), art);
+ }
+ }
+ }
+
+ public static WorkItemDefinition getWorkItemDefinition(String id) throws OseeCoreException {
+ if (id == null) throw new IllegalStateException("WorkItemDefinition id can't be null");
+ loadDefinitions();
+ WorkItemDefinition wid = itemIdToDefinition.get(id);
+ if (wid == null) {
+ // Attempt to get from DB
+ loadDefinitions(ArtifactQuery.getArtifactsFromAttribute(WorkItemAttributes.WORK_ID.getAttributeTypeName(), id,
+ BranchManager.getCommonBranch()));
+ }
+ return itemIdToDefinition.get(id);
+ }
+
+ public static Artifact getWorkItemDefinitionArtifact(String id) throws OseeCoreException {
+ if (id == null) throw new IllegalStateException("WorkItemDefinition id can't be null");
+ loadDefinitions();
+ Artifact art = itemIdToWidArtifact.get(id);
+ if (art == null) {
+ // Attempt to get from DB
+ loadDefinitions(ArtifactQuery.getArtifactsFromAttribute(WorkItemAttributes.WORK_ID.getAttributeTypeName(), id,
+ BranchManager.getCommonBranch()));
+ }
+ return itemIdToWidArtifact.get(id);
+ }
+
+ public static List<WorkItemDefinition> getWorkItemDefinition(java.util.Collection<String> ids) throws OseeCoreException {
+ loadDefinitions();
+ List<WorkItemDefinition> defs = new ArrayList<WorkItemDefinition>();
+ for (String id : ids) {
+ WorkItemDefinition def = getWorkItemDefinition(id);
+ if (def == null) throw new IllegalArgumentException("Work Item Id \"" + id + "\" is not a defined work item");
+ defs.add(def);
+ }
+ return defs;
+ }
+
+ public static List<WorkItemDefinition> getWorkItemDefinitionsStartsWithId(String id) throws OseeCoreException {
+ loadDefinitions();
+ List<WorkItemDefinition> defs = new ArrayList<WorkItemDefinition>();
+ for (Entry<String, WorkItemDefinition> entry : itemIdToDefinition.entrySet()) {
+ if (entry.getKey().startsWith(id)) {
+ defs.add(entry.getValue());
+ }
+ }
+ return defs;
+ }
+
+ /**
+ * Call to get dynamic definitions based on data specified. This is intended for extenders to be able to provide
+ * widgets that are either conditionally added or are configured dynamically based on dynamic circumstances
+ *
+ * @param data
+ * @return list of WorkItemDefinitions
+ */
+ public static List<WorkItemDefinition> getDynamicWorkItemDefintions(WorkFlowDefinition workFlowDefinition, WorkPageDefinition workPageDefinition, Object data) throws OseeCoreException {
+ List<WorkItemDefinition> dynamicDefinitions = new ArrayList<WorkItemDefinition>();
+ for (IWorkDefinitionProvider provider : WorkDefinitionProvider.getWorkDefinitionProviders()) {
+ dynamicDefinitions.addAll(provider.getDynamicWorkItemDefinitionsForPage(workFlowDefinition,
+ workPageDefinition, data));
+ }
+ return dynamicDefinitions;
+ }
+
+ public static List<WorkItemDefinition> getWorkItemDefinitions(Collection<String> pageids) throws OseeCoreException {
+ loadDefinitions();
+ List<WorkItemDefinition> defs = new ArrayList<WorkItemDefinition>();
+ for (String itemId : pageids) {
+ WorkItemDefinition def = getWorkItemDefinition(itemId);
+ if (def == null) throw new IllegalArgumentException("Item Id \"" + itemId + "\" is not a defined item");
+ defs.add(def);
+ }
+ return defs;
+ }
+
+ public static Collection<WorkItemDefinition> getWorkItemDefinitions() throws OseeCoreException {
+ loadDefinitions();
+ return itemIdToDefinition.values();
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemWithChildrenDefinition.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemWithChildrenDefinition.java
new file mode 100644
index 00000000000..11d2c6df20d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkItemWithChildrenDefinition.java
@@ -0,0 +1,90 @@
+/*
+ * Created on Oct 10, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class WorkItemWithChildrenDefinition extends WorkItemDefinition {
+
+ private final List<String> workItemIds = new ArrayList<String>();
+
+ public WorkItemWithChildrenDefinition(String itemName, String pageId, String parentId) {
+ super(itemName, pageId, parentId);
+ }
+
+ public WorkItemWithChildrenDefinition(Artifact artifact, String itemName, String pageName, String pageId, String parentId) throws OseeCoreException {
+ this(itemName, pageId, parentId);
+ for (Artifact art : artifact.getRelatedArtifacts(CoreRelationEnumeration.WorkItem__Child)) {
+ String widId = art.getSoleAttributeValue(WorkItemAttributes.WORK_ID.getAttributeTypeName(), (String) null);
+ workItemIds.add(widId);
+ }
+ }
+
+ public List<WorkItemDefinition> getWorkItems(boolean includeInherited) throws OseeCoreException {
+ List<WorkItemDefinition> wids = new ArrayList<WorkItemDefinition>();
+ getWorkItemsInherited(wids, includeInherited);
+ return wids;
+
+ }
+
+ @Override
+ public Artifact toArtifact(WriteType writeType) throws OseeCoreException {
+ Artifact art = super.toArtifact(writeType);
+ List<Artifact> children = new ArrayList<Artifact>();
+ for (WorkItemDefinition wid : getWorkItems(false)) {
+ Artifact widArt = WorkItemDefinitionFactory.getWorkItemDefinitionArtifact(wid.getId());
+ if (widArt == null) {
+ throw new IllegalStateException(
+ "While processing Work Item \"" + getId() + "\": No Artifact found for WorkItemDefinition \"" + wid.getId() + "\"");
+ }
+ children.add(widArt);
+ }
+ // This supports both relating new children and when WriteType.Overwrite of updating
+ art.setRelations(CoreRelationEnumeration.WorkItem__Child, children);
+ art.setRelationOrder(CoreRelationEnumeration.WorkItem__Child, children);
+ return art;
+ }
+
+ public void addWorkItem(String workItemDefintionId) {
+ workItemIds.add(workItemDefintionId);
+ }
+
+ public void removeWorkItem(String workItemDefintionId) {
+ workItemIds.remove(workItemDefintionId);
+ }
+
+ private void getWorkItemsInherited(List<WorkItemDefinition> workItemDefinitions, boolean includeInherited) throws OseeCoreException {
+ workItemDefinitions.addAll(WorkItemDefinitionFactory.getWorkItemDefinition(workItemIds));
+ if (includeInherited && getParentId() != null) {
+ WorkItemWithChildrenDefinition widParent =
+ (WorkPageDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(getParentId());
+ if (widParent != null) widParent.getWorkItemsInherited(workItemDefinitions, includeInherited);
+ }
+ }
+
+ public WorkItemDefinition getWorkItemDefinition(String id) throws OseeCoreException {
+ if (workItemIds.contains(id)) {
+ return WorkItemDefinitionFactory.getWorkItemDefinition(id);
+ }
+ return null;
+ }
+
+ /**
+ * @param workItems the workItems to set
+ */
+ public void setWorkItems(List<String> workItemDefintionIds) {
+ this.workItemIds.clear();
+ this.workItemIds.addAll(workItemDefintionIds);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPage.java
new file mode 100644
index 00000000000..914bcbf2fdb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPage.java
@@ -0,0 +1,257 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import javax.xml.parsers.ParserConfigurationException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinition.TransitionType;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+/**
+ * Instantiation of a workpagedefinition for a given workflow. This contains UI components that are specific to the
+ * instantiation.
+ *
+ * @author Donald G. Dunne
+ */
+public class WorkPage implements IDynamicWidgetLayoutListener {
+
+ protected DynamicXWidgetLayout dynamicXWidgetLayout;
+ protected final WorkPageDefinition workPageDefinition;
+ protected final WorkFlowDefinition workFlowDefinition;
+
+ /**
+ * @param instructionLines input lines of WorkAttribute declarations
+ */
+ public WorkPage(WorkFlowDefinition workFlowDefinition, WorkPageDefinition workPageDefinition, String xWidgetsXml, IXWidgetOptionResolver optionResolver) {
+ super();
+ this.workFlowDefinition = workFlowDefinition;
+ this.workPageDefinition = workPageDefinition;
+ dynamicXWidgetLayout = new DynamicXWidgetLayout(this, optionResolver);
+ try {
+ if (xWidgetsXml != null) processXmlLayoutDatas(xWidgetsXml);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, "Error processing attributes", ex);
+ }
+ }
+
+ public WorkPage(WorkFlowDefinition workFlowDefinition, WorkPageDefinition workPageDefinition, List<DynamicXWidgetLayoutData> datas, IXWidgetOptionResolver optionResolver) {
+ super();
+ this.workFlowDefinition = workFlowDefinition;
+ this.workPageDefinition = workPageDefinition;
+ dynamicXWidgetLayout = new DynamicXWidgetLayout(this, optionResolver);
+ dynamicXWidgetLayout.setLayoutDatas(datas);
+ }
+
+ public WorkPage(List<DynamicXWidgetLayoutData> datas, IXWidgetOptionResolver optionResolver) {
+ super();
+ this.workFlowDefinition = null;
+ this.workPageDefinition = null;
+ dynamicXWidgetLayout = new DynamicXWidgetLayout(this, optionResolver);
+ dynamicXWidgetLayout.setLayoutDatas(datas);
+ }
+
+ public WorkPage(String xWidgetsXml, IXWidgetOptionResolver optionResolver) {
+ this(null, null, xWidgetsXml, optionResolver);
+ }
+
+ public WorkPage(IXWidgetOptionResolver optionResolver) {
+ this(null, null, (String) null, optionResolver);
+ }
+
+ public void widgetCreating(XWidget xWidget, FormToolkit toolkit, Artifact art, WorkPage page, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException {
+ }
+
+ public void widgetCreated(XWidget xWidget, FormToolkit toolkit, Artifact art, WorkPage page, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException {
+ }
+
+ public void createXWidgetLayoutData(DynamicXWidgetLayoutData workAttr, XWidget xWidget, FormToolkit toolkit, Artifact art, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener#widgetCreated(org.eclipse.osee.framework.ui.skynet.widgets.XWidget,
+ * org.eclipse.ui.forms.widgets.FormToolkit,
+ * org.eclipse.osee.framework.skynet.core.artifact.Artifact,
+ * org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout,
+ * org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener, boolean)
+ */
+ public void widgetCreated(XWidget xWidget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException {
+ widgetCreated(xWidget, toolkit, art, this, xModListener, isEditable);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener#widgetCreating(org.eclipse.osee.framework.ui.skynet.widgets.XWidget,
+ * org.eclipse.ui.forms.widgets.FormToolkit,
+ * org.eclipse.osee.framework.skynet.core.artifact.Artifact,
+ * org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout,
+ * org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener, boolean)
+ */
+ public void widgetCreating(XWidget xWidget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException {
+ widgetCreating(xWidget, toolkit, art, this, xModListener, isEditable);
+ }
+
+ public void dispose() {
+ for (DynamicXWidgetLayoutData layoutData : getlayoutDatas()) {
+ layoutData.getXWidget().dispose();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof WorkPage) return getId().equals(((WorkPage) obj).getId());
+ return false;
+ }
+
+ public DynamicXWidgetLayout createBody(FormToolkit toolkit, Composite parent, Artifact artifact, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException {
+ dynamicXWidgetLayout.createBody(toolkit, parent, artifact, xModListener, isEditable);
+ return dynamicXWidgetLayout;
+ }
+
+ public Result isPageComplete() {
+ for (DynamicXWidgetLayoutData layoutData : dynamicXWidgetLayout.getLayoutDatas()) {
+ if (!layoutData.getXWidget().isValid().isTrue()) {
+ // Check to see if widget is part of a completed OR or XOR group
+ if (!dynamicXWidgetLayout.isOrGroupFromAttrNameComplete(layoutData.getStorageName()) && !dynamicXWidgetLayout.isXOrGroupFromAttrNameComplete(layoutData.getStorageName())) return new Result(
+ "Must Enter \"" + layoutData.getName() + "\"");
+ }
+ }
+ return Result.TrueResult;
+ }
+
+ public String getHtml(String backgroundColor) {
+ StringBuffer sb = new StringBuffer();
+ sb.append(AHTML.startBorderTable(100, backgroundColor, getName()));
+ for (DynamicXWidgetLayoutData layoutData : dynamicXWidgetLayout.getLayoutDatas()) {
+ sb.append(layoutData.getXWidget().toHTML(AHTML.LABEL_FONT) + AHTML.newline());
+ }
+ sb.append(AHTML.endBorderTable());
+ return sb.toString();
+ }
+
+ public String toString() {
+ StringBuffer sb =
+ new StringBuffer(
+ workPageDefinition.getPageName() + (workPageDefinition.getId() != null ? " (" + workPageDefinition.getId() + ") " : "") + "\n");
+ try {
+ for (WorkPageDefinition page : workFlowDefinition.getPageDefinitions(workPageDefinition.getId(),
+ TransitionType.ToPage)) {
+ sb.append("-> " + page.getPageName() + (workFlowDefinition.getPageDefinitions(workPageDefinition.getId(),
+ TransitionType.ToPageAsReturn).contains(
+ workFlowDefinition.getPageDefinitions(workPageDefinition.getId(), TransitionType.ToPage)) ? " (return)" : "") + "\n");
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return sb.toString();
+ }
+
+ public Set<DynamicXWidgetLayoutData> getlayoutDatas() {
+ return dynamicXWidgetLayout.getLayoutDatas();
+ }
+
+ public void addLayoutDatas(List<DynamicXWidgetLayoutData> datas) {
+ dynamicXWidgetLayout.addWorkLayoutDatas(datas);
+ }
+
+ public DynamicXWidgetLayoutData getLayoutData(String layoutName) {
+ return dynamicXWidgetLayout.getLayoutData(layoutName);
+ }
+
+ public void processInstructions(Document doc) throws IOException, ParserConfigurationException, SAXException {
+ processLayoutDatas(doc.getDocumentElement());
+ }
+
+ protected void processXmlLayoutDatas(String xWidgetXml) throws IOException, ParserConfigurationException, SAXException {
+ dynamicXWidgetLayout.processlayoutDatas(xWidgetXml);
+ }
+
+ protected void processLayoutDatas(Element element) throws IOException, ParserConfigurationException, SAXException {
+ dynamicXWidgetLayout.processLayoutDatas(element);
+ }
+
+ public String getName() {
+ return workPageDefinition.getPageName();
+ }
+
+ public String getId() {
+ return workPageDefinition.id;
+ }
+
+ /**
+ * @return Returns the toPages.
+ */
+ public List<WorkPageDefinition> getToPages() throws OseeCoreException {
+ return workFlowDefinition.getToPages(workPageDefinition);
+ }
+
+ /**
+ * @return Returns the toPages.
+ */
+ public List<WorkPageDefinition> getReturnPages() throws OseeCoreException {
+ return workFlowDefinition.getReturnPages(workPageDefinition);
+ }
+
+ public boolean isReturnPage(WorkPageDefinition page) throws OseeCoreException {
+ return getReturnPages().contains(page);
+ }
+
+ /**
+ * @return Returns the defaultToPage.
+ */
+ public WorkPageDefinition getDefaultToPage() throws OseeCoreException {
+ return workFlowDefinition.getDefaultToPage(workPageDefinition);
+ }
+
+ /**
+ * @return the workPageDefinition
+ */
+ public WorkPageDefinition getWorkPageDefinition() {
+ return workPageDefinition;
+ }
+
+ /**
+ * @return the workFlowDefinition
+ */
+ public WorkFlowDefinition getWorkFlowDefinition() {
+ return workFlowDefinition;
+ }
+
+ /**
+ * @return the dynamicXWidgetLayout
+ */
+ public DynamicXWidgetLayout getDynamicXWidgetLayout() {
+ return dynamicXWidgetLayout;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageButton.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageButton.java
new file mode 100644
index 00000000000..a376512710a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageButton.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkPageButton {
+
+ private String name = "Unknown";
+ private String attrName = "";
+ private boolean required = false;
+ private String xWidget = "Unknown";
+
+ /**
+ * <Name[:Attribute Name]>,<(Required|Optional)>,<XWidget> eg: Title:Name,Required,XText eg:
+ * Description,Optional,XText
+ */
+ public WorkPageButton(String xml) {
+ super();
+ String values[] = xml.split(",");
+ name = values[0];
+ if (name.contains(":")) {
+ String names[] = name.split(":");
+ name = names[0];
+ attrName = names[1];
+ } else
+ attrName = name;
+ required = (values[1].equals("Required") ? true : false);
+ xWidget = values[2];
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @return Returns the attrName.
+ */
+ public String getAttrName() {
+ return attrName;
+ }
+
+ /**
+ * @param attrName The attrName to set.
+ */
+ public void setAttrName(String attrName) {
+ this.attrName = attrName;
+ }
+
+ /**
+ * @return Returns the required.
+ */
+ public boolean isRequired() {
+ return required;
+ }
+
+ /**
+ * @param required The required to set.
+ */
+ public void setRequired(boolean required) {
+ this.required = required;
+ }
+
+ /**
+ * @return Returns the xWidget.
+ */
+ public String getXWidget() {
+ return xWidget;
+ }
+
+ /**
+ * @param widget The xWidget to set.
+ */
+ public void setXWidget(String widget) {
+ xWidget = widget;
+ }
+
+ /**
+ * @param name The name to set.
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinition.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinition.java
new file mode 100644
index 00000000000..bc6b208ad0d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinition.java
@@ -0,0 +1,95 @@
+/*
+ * Created on May 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkPageDefinition extends WorkItemWithChildrenDefinition {
+
+ public static String ARTIFACT_NAME = "Work Page Definition";
+ private String pageName;
+
+ public WorkPageDefinition(String pageName, String pageId, String parentId) {
+ this(pageId, pageName, pageId, parentId);
+ }
+
+ public WorkPageDefinition(String itemName, String pageName, String pageId, String parentId) {
+ super(itemName, pageId, parentId);
+ this.pageName = pageName;
+ }
+
+ public WorkPageDefinition(Artifact artifact) throws OseeCoreException {
+ super(artifact, artifact.getDescriptiveName(), artifact.getSoleAttributeValue(
+ WorkItemAttributes.WORK_PAGE_NAME.getAttributeTypeName(), (String) null), artifact.getSoleAttributeValue(
+ WorkItemAttributes.WORK_ID.getAttributeTypeName(), (String) null), artifact.getSoleAttributeValue(
+ WorkItemAttributes.WORK_PARENT_ID.getAttributeTypeName(), (String) null));
+ setType(artifact.getSoleAttributeValue(WorkItemAttributes.WORK_TYPE.getAttributeTypeName(), (String) null));
+ loadWorkDataKeyValueMap(artifact);
+ setPageName(artifact.getSoleAttributeValue(WorkItemAttributes.WORK_PAGE_NAME.getAttributeTypeName(),
+ (String) null));
+
+ }
+
+ public boolean hasWorkRule(String ruleId) throws OseeCoreException {
+ return getWorkItemDefinition(ruleId) != null;
+ }
+
+ @Override
+ public Artifact toArtifact(WriteType writeType) throws OseeCoreException {
+ Artifact art = super.toArtifact(writeType);
+ // Only store start page if it's part of this definition
+ if (pageName != null) {
+ art.setSoleAttributeFromString(WorkItemAttributes.WORK_PAGE_NAME.getAttributeTypeName(), pageName);
+ }
+ return art;
+ }
+
+ /**
+ * @return the workItems
+ * @throws OseeCoreException
+ */
+
+ public List<WorkItemDefinition> getWorkItemDefinitionsByType(String workType) throws OseeCoreException {
+ List<WorkItemDefinition> wids = new ArrayList<WorkItemDefinition>();
+ for (WorkItemDefinition workItemDefinition : getWorkItems(true)) {
+ if (workItemDefinition.getType() != null && workItemDefinition.getType().equals(workType)) {
+ wids.add(workItemDefinition);
+ }
+ }
+ return wids;
+ }
+
+ public boolean isCompletePage() {
+ return getPageName().equals("Completed");
+ }
+
+ public boolean isCancelledPage() {
+ return getPageName().equals("Cancelled");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinition#getArtifactTypeName()
+ */
+ @Override
+ public String getArtifactTypeName() {
+ return ARTIFACT_NAME;
+ }
+
+ public String getPageName() {
+ return pageName;
+ }
+
+ public void setPageName(String pageName) {
+ this.pageName = pageName;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinitionLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinitionLabelProvider.java
new file mode 100644
index 00000000000..8696f29259a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinitionLabelProvider.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkPageDefinitionLabelProvider implements ILabelProvider {
+
+ public Image getImage(Object arg0) {
+ return null;
+ }
+
+ public String getText(Object arg0) {
+ return ((WorkPageDefinition) arg0).getPageName();
+ }
+
+ public void addListener(ILabelProviderListener arg0) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object arg0, String arg1) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener arg0) {
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinitionViewSorter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinitionViewSorter.java
new file mode 100644
index 00000000000..b05d6751836
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageDefinitionViewSorter.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkPageDefinitionViewSorter extends ViewerSorter {
+
+ public WorkPageDefinitionViewSorter() {
+ super();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ return getComparator().compare(((WorkPageDefinition) e1).getPageName(), ((WorkPageDefinition) e2).getPageName());
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageSection.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageSection.java
new file mode 100644
index 00000000000..13534f2502e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkPageSection.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import org.eclipse.osee.framework.ui.skynet.XFormToolkit;
+import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.SectionPart;
+import org.eclipse.ui.forms.widgets.Section;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkPageSection extends SectionPart {
+
+ public WorkPageSection(Composite parent, XFormToolkit toolkit, int style, WorkPage page) throws Exception {
+ super(parent, toolkit, style);
+ createPage(parent, page, toolkit);
+ }
+
+ private Section createPage(Composite comp, WorkPage page, XFormToolkit toolkit) throws Exception {
+ Section section = toolkit.createSection(comp, Section.TWISTIE | Section.TITLE_BAR);
+ section.setText(page.getName());
+ section.setExpanded(true);
+ section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Composite mainComp = toolkit.createClientContainer(section, 1);
+ mainComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ createWorkArea(mainComp, page, toolkit);
+ return section;
+ }
+
+ private void createWorkArea(Composite comp, WorkPage page, XFormToolkit toolkit) throws Exception {
+ Composite workComp = toolkit.createContainer(comp, 1);
+ workComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ page.createBody(toolkit, workComp, null, xModListener, true);
+ }
+
+ final XModifiedListener xModListener = new XModifiedListener() {
+ public void widgetModified(XWidget widget) {
+ System.out.println("Widget changed");
+ }
+ };
+
+ @Override
+ public void refresh() {
+ super.refresh();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkRuleDefinition.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkRuleDefinition.java
new file mode 100644
index 00000000000..62f22de3404
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkRuleDefinition.java
@@ -0,0 +1,71 @@
+/*
+ * Created on Jun 1, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.Map;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkRuleDefinition extends WorkItemDefinition {
+
+ public static String ARTIFACT_NAME = "Work Rule Definition";
+
+ /**
+ * Instantiate rule with no value where name and id are same.
+ *
+ * @param name
+ * @param id
+ */
+ public WorkRuleDefinition(String id) {
+ this(id, id, null, null);
+ }
+
+ /**
+ * Instantiate rule with no value. This is for self describing rules such as atsAllowCommit.
+ *
+ * @param name
+ * @param id
+ */
+ public WorkRuleDefinition(String name, String id) {
+ this(name, id, null, null);
+ }
+
+ public WorkRuleDefinition(String name, String id, Map<String, String> workDataKeyValueMap, String type) {
+ super(name, id, null, type);
+ if (workDataKeyValueMap != null) {
+ setWorkDataKeyValueMap(workDataKeyValueMap);
+ }
+ }
+
+ public WorkRuleDefinition(Artifact artifact) throws OseeCoreException {
+ this(artifact.getDescriptiveName(), artifact.getSoleAttributeValue(
+ WorkItemAttributes.WORK_ID.getAttributeTypeName(), ""), null, null);
+ setDescription(artifact.getSoleAttributeValue(WorkItemAttributes.WORK_DESCRIPTION.getAttributeTypeName(), ""));
+ setType(artifact.getSoleAttributeValue(WorkItemAttributes.WORK_TYPE.getAttributeTypeName(), (String) null));
+ loadWorkDataKeyValueMap(artifact);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinition#toArtifact()
+ */
+ @Override
+ public Artifact toArtifact(WriteType writeType) throws OseeCoreException {
+ Artifact ruleArt = super.toArtifact(writeType);
+ return ruleArt;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinition#getArtifactTypeName()
+ */
+ @Override
+ public String getArtifactTypeName() {
+ return ARTIFACT_NAME;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkWidgetDefinition.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkWidgetDefinition.java
new file mode 100644
index 00000000000..52eb7464d83
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/WorkWidgetDefinition.java
@@ -0,0 +1,122 @@
+/*
+ * Created on May 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.io.IOException;
+import java.util.logging.Level;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.XWidgetParser;
+import org.xml.sax.SAXException;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class WorkWidgetDefinition extends WorkItemDefinition {
+
+ public static String ARTIFACT_NAME = "Work Widget Definition";
+ public static String tagName = DynamicXWidgetLayout.XWIDGET;
+ private DynamicXWidgetLayoutData widgetLayoutData;
+
+ public WorkWidgetDefinition(String name, String id) {
+ super(name, id, null);
+ }
+
+ public WorkWidgetDefinition(DynamicXWidgetLayoutData xWidgetLayoutData) {
+ super(xWidgetLayoutData.getName() + " - " + xWidgetLayoutData.getId(), xWidgetLayoutData.getId(), null);
+ setXWidgetLayoutData(xWidgetLayoutData);
+ }
+
+ public void setXWidgetLayoutData(DynamicXWidgetLayoutData xWidgetLayoutData) {
+ widgetLayoutData = xWidgetLayoutData;
+ }
+
+ public WorkWidgetDefinition(Artifact artifact) throws OseeCoreException {
+ this(artifact.getDescriptiveName(), artifact.getSoleAttributeValue(
+ WorkItemAttributes.WORK_ID.getAttributeTypeName(), artifact.getDescriptiveName()));
+ setType(artifact.getSoleAttributeValue(WorkItemAttributes.WORK_TYPE.getAttributeTypeName(), (String) null));
+ loadWorkDataKeyValueMap(artifact);
+
+ DynamicXWidgetLayoutData data = getFromXml(getWorkDataValue(tagName));
+ setXWidgetLayoutData(data);
+ }
+
+ @Override
+ public Artifact toArtifact(WriteType writeType) throws OseeCoreException {
+ Artifact art = super.toArtifact(writeType);
+ try {
+ art.setSoleAttributeFromString(WorkItemAttributes.WORK_DATA.getAttributeTypeName(),
+ tagName + "=" + XWidgetParser.toXml(get()));
+ } catch (ParserConfigurationException ex) {
+ throw new OseeCoreException(ex);
+ } catch (TransformerException ex) {
+ throw new OseeCoreException(ex);
+ }
+
+ return art;
+ }
+
+ public DynamicXWidgetLayoutData get() {
+ // Hand out an modifiable copy of the LayoutData to ensure widgets created off it aren't shared
+ try {
+ return (DynamicXWidgetLayoutData) widgetLayoutData.clone();
+ } catch (CloneNotSupportedException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return null;
+ }
+
+ public void set(DynamicXWidgetLayoutData xWidgetLayoutData) {
+ setXWidgetLayoutData(xWidgetLayoutData);
+ }
+
+ public static boolean isWorkItemXWidget(String xml) {
+ return xml.contains(tagName);
+ }
+
+ public String toXml() {
+ throw new IllegalStateException("WorkItemXWidgetDefinition.toXml() Not implemented.");
+ }
+
+ /**
+ * Create WorkItemXWidgetDefinition from xml
+ *
+ * @param xml <XWidget displayName="Problem" storageName="ats.Problem" xwidgetType="XTextDam" fill="Vertically"/>
+ * @return WorkWidgetDefinition
+ * @throws Exception
+ */
+ public static WorkWidgetDefinition createFromXml(String xml) throws OseeCoreException {
+ DynamicXWidgetLayoutData data = getFromXml(xml);
+ return new WorkWidgetDefinition(data);
+ }
+
+ public static DynamicXWidgetLayoutData getFromXml(String xml) throws OseeCoreException {
+ try {
+ DynamicXWidgetLayoutData data = XWidgetParser.extractlayoutData(null, xml);
+ if (data == null) throw new IllegalArgumentException(
+ "Unable to create WorkItemXWidgetDefinition from xml\"" + xml + "\"");
+ return data;
+ } catch (ParserConfigurationException ex) {
+ throw new OseeCoreException(ex);
+ } catch (IOException ex) {
+ throw new OseeCoreException(ex);
+ } catch (SAXException ex) {
+ throw new OseeCoreException(ex);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinition#getArtifactTypeName()
+ */
+ @Override
+ public String getArtifactTypeName() {
+ return ARTIFACT_NAME;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/XWidgetFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/XWidgetFactory.java
new file mode 100644
index 00000000000..a039ad7d154
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/workflow/XWidgetFactory.java
@@ -0,0 +1,250 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.workflow;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.attribute.BooleanAttribute;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.SkynetSpellModifyDictionary;
+import org.eclipse.osee.framework.ui.skynet.widgets.XArtifactTypeListViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.XAttributeTypeListViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox;
+import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBoxDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XCombo;
+import org.eclipse.osee.framework.ui.skynet.widgets.XComboBooleanDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XComboDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
+import org.eclipse.osee.framework.ui.skynet.widgets.XDateDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XFileSelectionDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.XFloat;
+import org.eclipse.osee.framework.ui.skynet.widgets.XFloatDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XHyperlabelMemberSelDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XInteger;
+import org.eclipse.osee.framework.ui.skynet.widgets.XLabel;
+import org.eclipse.osee.framework.ui.skynet.widgets.XLabelDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XList;
+import org.eclipse.osee.framework.ui.skynet.widgets.XListDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XListDropViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.XMembersCombo;
+import org.eclipse.osee.framework.ui.skynet.widgets.XMembersList;
+import org.eclipse.osee.framework.ui.skynet.widgets.XMultiXWidgetTextDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XOption;
+import org.eclipse.osee.framework.ui.skynet.widgets.XRelationTypeListViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.XText;
+import org.eclipse.osee.framework.ui.skynet.widgets.XTextDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XTextResourceDropDam;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.osgi.framework.Bundle;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class XWidgetFactory {
+
+ private static final XWidgetFactory reference = new XWidgetFactory();
+
+ private XWidgetFactory() {
+
+ }
+
+ public static XWidgetFactory getInstance() {
+ return reference;
+ }
+
+ public XWidget createXWidget(DynamicXWidgetLayoutData xWidgetLayoutData) {
+ return createXWidget(xWidgetLayoutData.getXWidgetName(), xWidgetLayoutData.getName(), xWidgetLayoutData);
+ }
+
+ public XWidget createXWidget(String xWidgetName, String name, DynamicXWidgetLayoutData xWidgetLayoutData) {
+ XWidget xWidget = null;
+
+ // Look for widget provider to create widget
+ for (IXWidgetProvider widgetProvider : getXWidgetProviders()) {
+ xWidget = widgetProvider.createXWidget(xWidgetName, name, xWidgetLayoutData);
+ if (xWidget != null) {
+ return xWidget;
+ }
+ }
+
+ // Otherwise, use default widget creation
+ if (xWidgetName.equals("XText")) {
+ xWidget = new XText(name);
+ if (xWidgetLayoutData.getDefaultValue() != null && !xWidgetLayoutData.getDefaultValue().equals("")) {
+ ((XText) xWidget).set(xWidgetLayoutData.getDefaultValue());
+ }
+ } else if (xWidgetName.equals("XMultiXWidgetTextDam"))
+ xWidget = new XMultiXWidgetTextDam(name);
+ else if (xWidgetName.equals("XInteger"))
+ xWidget = new XInteger(name);
+ else if (xWidgetName.equals("XTextDam"))
+ xWidget = new XTextDam(name);
+ else if (xWidgetName.equals("XLabelDam"))
+ xWidget = new XLabelDam(name);
+ else if (xWidgetName.equals("XMembersList")) {
+ try {
+ xWidget = new XMembersList(name);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ } else if (xWidgetName.equals("XMembersCombo"))
+ xWidget = new XMembersCombo(name);
+ else if (xWidgetName.equals("XDate"))
+ xWidget = new XDate(name);
+ else if (xWidgetName.equals("XFileSelectionDialog"))
+ xWidget = new XFileSelectionDialog(name);
+ else if (xWidgetName.equals("XDateDam"))
+ xWidget = new XDateDam(name);
+ else if (xWidgetName.equals("XTextResourceDropDam"))
+ xWidget = new XTextResourceDropDam(name);
+ else if (xWidgetName.equals("XFloat"))
+ xWidget = new XFloat(name);
+ else if (xWidgetName.equals("XFloatDam"))
+ xWidget = new XFloatDam(name);
+ else if (xWidgetName.equals("XIntegerDam"))
+ xWidget = new org.eclipse.osee.framework.ui.skynet.widgets.XIntegerDam(name);
+ else if (xWidgetName.equals("XLabel"))
+ xWidget = new XLabel(name);
+ else if (xWidgetName.equals("XCheckBox")) {
+ XCheckBox checkBox = new XCheckBox(name);
+ checkBox.setLabelAfter(xWidgetLayoutData.getXOptionHandler().contains(XOption.LABEL_AFTER));
+ if (xWidgetLayoutData.getDefaultValue() != null && !xWidgetLayoutData.getDefaultValue().equals("")) checkBox.set(xWidgetLayoutData.getDefaultValue().equals(
+ "true"));
+ xWidget = checkBox;
+ } else if (xWidgetName.equals("XCheckBoxDam")) {
+ XCheckBoxDam checkBox = new XCheckBoxDam(name);
+ checkBox.setLabelAfter(xWidgetLayoutData.getXOptionHandler().contains(XOption.LABEL_AFTER));
+ xWidget = checkBox;
+ } else if (xWidgetName.startsWith("XComboDam")) {
+ if (xWidgetLayoutData.getDynamicXWidgetLayout() != null) {
+ String values[] =
+ xWidgetLayoutData.getDynamicXWidgetLayout().getOptionResolver().getWidgetOptions(xWidgetLayoutData);
+ if (values.length > 0) {
+ xWidget = new XComboDam(name);
+ XComboDam combo = new XComboDam(name);
+ combo.setDataStrings(values);
+ xWidget = combo;
+ } else
+ throw new IllegalArgumentException(
+ "Invalid XComboDam. " + "Must be \"XComboDam(option1,option2,option3)\"");
+ }
+ } else if (xWidgetName.startsWith("XComboBooleanDam")) {
+ xWidget = new XComboBooleanDam(name);
+ XComboBooleanDam combo = new XComboBooleanDam(name);
+ combo.setDataStrings(BooleanAttribute.booleanChoices);
+ xWidget = combo;
+ if (xWidgetLayoutData.getDefaultValue() != null && !xWidgetLayoutData.getDefaultValue().equals("")) {
+ String value = xWidgetLayoutData.getDefaultValue();
+ if (value == null)
+ combo.set("");
+ else if (value.equals("true") || value.equals("yes"))
+ combo.set("yes");
+ else if (value.equals("false") || value.equals("no"))
+ combo.set("no");
+ else
+ combo.set("");
+ }
+ } else if (xWidgetName.startsWith("XCombo")) {
+ String values[] =
+ xWidgetLayoutData.getDynamicXWidgetLayout().getOptionResolver().getWidgetOptions(xWidgetLayoutData);
+ if (values.length > 0) {
+ XCombo combo = new XCombo(name);
+ combo.setDataStrings(values);
+ xWidget = combo;
+ } else
+ throw new IllegalArgumentException("Invalid XCombo. " + "Must be \"XCombo(option1,option2,option3)\"");
+ } else if (xWidgetName.startsWith("XListDam")) {
+ if (xWidgetLayoutData.getDynamicXWidgetLayout() != null) {
+ String values[] =
+ xWidgetLayoutData.getDynamicXWidgetLayout().getOptionResolver().getWidgetOptions(xWidgetLayoutData);
+ if (values.length > 0) {
+ XListDam list = new XListDam(name);
+ list.add(values);
+ xWidget = list;
+ } else
+ throw new IllegalArgumentException("Invalid XList. " + "Must be \"XList(option1,option2,option3)\"");
+ }
+ } else if (xWidgetName.equals("XHyperlabelMemberSelDam")) {
+ xWidget = new XHyperlabelMemberSelDam(name);
+ } else if (xWidgetName.startsWith("XListDropViewer")) {
+ xWidget = new XListDropViewer(name);
+ } else if (xWidgetName.equals("XArtifactTypeListViewer")) {
+ xWidget =
+ new XArtifactTypeListViewer(xWidgetLayoutData.getKeyedBranchName(), xWidgetLayoutData.getDefaultValue());
+ } else if (xWidgetName.equals("XAttributeTypeListViewer")) {
+ xWidget =
+ new XAttributeTypeListViewer(xWidgetLayoutData.getKeyedBranchName(), xWidgetLayoutData.getDefaultValue());
+ } else if (xWidgetName.equals("XRelationTypeListViewer")) {
+ xWidget = new XRelationTypeListViewer();
+ } else if (xWidgetName.startsWith("XList")) {
+ String values[] =
+ xWidgetLayoutData.getDynamicXWidgetLayout().getOptionResolver().getWidgetOptions(xWidgetLayoutData);
+ if (values.length > 0) {
+ XList list = new XList(name);
+ list.add(values);
+ xWidget = list;
+ if (xWidgetLayoutData.getDefaultValue() != null && !xWidgetLayoutData.getDefaultValue().equals("")) list.setSelected(Arrays.asList(xWidgetLayoutData.getDefaultValue().split(
+ ",")));
+ } else
+ throw new IllegalArgumentException("Invalid XList. " + "Must be \"XList(option1,option2,option3)\"");
+
+ } else {
+ throw new IllegalArgumentException("Unhandled XWidget \"" + xWidgetName + "\"");
+ }
+ if (xWidget instanceof XText) {
+ ((XText) xWidget).addXTextSpellModifyDictionary(new SkynetSpellModifyDictionary());
+ }
+ return xWidget;
+ }
+ private static Set<IXWidgetProvider> widgetProviders;
+
+ private static Set<IXWidgetProvider> getXWidgetProviders() {
+ widgetProviders = new HashSet<IXWidgetProvider>();
+ IExtensionPoint point =
+ Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.framework.ui.skynet.XWidgetProvider");
+ if (point == null) {
+ OSEELog.logSevere(SkynetGuiPlugin.class, "Can't access XWidgetProvider extension point", true);
+ return null;
+ }
+ IExtension[] extensions = point.getExtensions();
+ for (IExtension extension : extensions) {
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+ String classname = null;
+ String bundleName = null;
+ for (IConfigurationElement el : elements) {
+ if (el.getName().equals("XWidgetProvider")) {
+ classname = el.getAttribute("classname");
+ bundleName = el.getContributor().getName();
+ if (classname != null && bundleName != null) {
+ Bundle bundle = Platform.getBundle(bundleName);
+ try {
+ Class<?> taskClass = bundle.loadClass(classname);
+ Object obj = taskClass.newInstance();
+ widgetProviders.add((IXWidgetProvider) obj);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, "Error loading XWidgetProvider extension", ex, true);
+ }
+ }
+
+ }
+ }
+ }
+ return widgetProviders;
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphLine.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphLine.java
new file mode 100644
index 00000000000..22e016eaa84
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphLine.java
@@ -0,0 +1,67 @@
+/*
+ * Created on Nov 5, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xbargraph;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XBarGraphLine {
+ public static int DEFAULT_RED_FOREGROUND = SWT.COLOR_RED;
+ public static int DEFAULT_RED_BACKGROUND = SWT.COLOR_YELLOW;
+ public static int DEFAULT_GREEN_FOREGROUND = SWT.COLOR_GREEN;
+ public static int DEFAULT_GREEN_BACKGROUND = SWT.COLOR_YELLOW;
+ public String name;
+ List<XBarGraphLineSegment> segments = new ArrayList<XBarGraphLineSegment>();
+
+ public XBarGraphLine(String name, int value) {
+ this(name, DEFAULT_GREEN_FOREGROUND, DEFAULT_GREEN_BACKGROUND, value);
+ }
+
+ public XBarGraphLine(String name, int value, String valueStr) {
+ this(name, DEFAULT_GREEN_FOREGROUND, DEFAULT_GREEN_BACKGROUND, value, valueStr);
+ }
+
+ public XBarGraphLine(String name, List<XBarGraphLineSegment> segments) {
+ this.name = name;
+ this.segments = segments;
+ }
+
+ public XBarGraphLine(String name, int foreground, int background, long value) {
+ this(name, foreground, background, value, String.valueOf(value));
+ }
+
+ public XBarGraphLine(String name, int foreground, int background, long value, String valueStr) {
+ this.name = name;
+ segments.add(new XBarGraphLineSegment(valueStr, foreground, background, value));
+ }
+
+ public XBarGraphLine(String name, int foreground, int background, int remainingForeground, int remainingBackground, int value, String valueStr) {
+ this(name, foreground, background, value, valueStr);
+ segments.add(new XBarGraphLineSegment("", 100 - value));
+ }
+
+ public XBarGraphLine(String name, int foreground, int background, int remainingForeground, int remainingBackground, int value, String valueStr, String remainingValueStr) {
+ this(name, foreground, background, value, valueStr);
+ segments.add(new XBarGraphLineSegment(remainingValueStr, remainingForeground, remainingBackground, 100 - value));
+ }
+
+ public static XBarGraphLine getPercentLine(String name, int value) {
+ if (value == 100.0) {
+ return new XBarGraphLine(name, DEFAULT_GREEN_FOREGROUND, DEFAULT_GREEN_BACKGROUND, value, value + "%");
+ } else {
+ return new XBarGraphLine(name, DEFAULT_RED_FOREGROUND, DEFAULT_RED_BACKGROUND, value, value + "%");
+ }
+ }
+
+ public static XBarGraphLine getTextLine(String name, String value) {
+ return new XBarGraphLine(name, SWT.COLOR_WHITE, SWT.COLOR_WHITE, 0, value);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphLineSegment.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphLineSegment.java
new file mode 100644
index 00000000000..4544a4f9ec2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphLineSegment.java
@@ -0,0 +1,46 @@
+/*
+ * Created on Nov 5, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xbargraph;
+
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XBarGraphLineSegment {
+ public static int DEFAULT_RED_FOREGROUND = SWT.COLOR_RED;
+ public static int DEFAULT_RED_BACKGROUND = SWT.COLOR_YELLOW;
+ public static int DEFAULT_GREEN_FOREGROUND = SWT.COLOR_GREEN;
+ public static int DEFAULT_GREEN_BACKGROUND = SWT.COLOR_YELLOW;
+ String name;
+ int foreground;
+ int background;
+ long value;
+
+ public XBarGraphLineSegment(String name, long value) {
+ this(name, DEFAULT_GREEN_FOREGROUND, DEFAULT_GREEN_BACKGROUND, value);
+ }
+
+ public XBarGraphLineSegment(String name, int color, long value) {
+ this(name, color, color, value);
+ }
+
+ public XBarGraphLineSegment(String name, int foreground, int background, long value) {
+ this.name = name;
+ this.foreground = foreground;
+ this.background = background;
+ this.value = value;
+ }
+
+ public static XBarGraphLineSegment getPercentSegment(String name, long value) {
+ return new XBarGraphLineSegment(value + "%", DEFAULT_GREEN_FOREGROUND, DEFAULT_GREEN_BACKGROUND, value);
+ }
+
+ public static XBarGraphLineSegment getPercentSegment(String name, int color, long value) {
+ return new XBarGraphLineSegment(value + "%", color, color, value);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphTable.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphTable.java
new file mode 100644
index 00000000000..b3d121868c4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphTable.java
@@ -0,0 +1,242 @@
+/*
+ * Created on Nov 2, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xbargraph;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XBarGraphTable extends XWidget {
+
+ private final String itemHeader;
+ private final String percentHeader;
+ private Table table;
+ private final List<XBarGraphLine> lines;
+ private boolean isHeaderVisible = true;
+ private boolean isLinesVisible = true;
+
+ public XBarGraphTable(String label, String itemHeader, String percentHeader, List<XBarGraphLine> lines) {
+ super(label);
+ this.itemHeader = itemHeader;
+ this.percentHeader = percentHeader;
+ this.lines = lines;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#createWidgets(org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(label + ": ");
+
+ table = new Table(parent, SWT.BORDER);
+ table.setHeaderVisible(isHeaderVisible);
+ table.setLinesVisible(isLinesVisible);
+ if (isFillHorizontally()) {
+ table.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ }
+ TableColumn column1 = new TableColumn(table, SWT.NONE);
+ column1.setText(itemHeader);
+ column1.setWidth(300);
+ final TableColumn column2 = new TableColumn(table, SWT.NONE);
+ column2.setText(percentHeader);
+ column2.setWidth(500);
+ for (XBarGraphLine line : lines) {
+ TableItem item = new TableItem(table, SWT.NONE);
+ item.setText(line.name);
+ }
+
+ /*
+ * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
+ * Therefore, it is critical for performance that these methods be
+ * as efficient as possible.
+ */
+ table.addListener(SWT.PaintItem, new Listener() {
+ public void handleEvent(Event event) {
+ if (event.index == 1) {
+ GC gc = event.gc;
+ TableItem item = (TableItem) event.item;
+ int index = table.indexOf(item);
+ XBarGraphLine line = lines.get(index);
+ int cummulativeWidth = 0;
+ for (XBarGraphLineSegment seg : line.segments) {
+ Color foreground = gc.getForeground();
+ Color background = gc.getBackground();
+ gc.setForeground(Display.getCurrent().getSystemColor(seg.foreground));
+ gc.setBackground(Display.getCurrent().getSystemColor(seg.background));
+ int width = (column2.getWidth()) * (int) seg.value / 100;
+ gc.fillGradientRectangle(event.x + cummulativeWidth, event.y, width, event.height, true);
+ Rectangle rect2 = new Rectangle(event.x + cummulativeWidth, event.y, width - 1, event.height - 1);
+ gc.drawRectangle(rect2);
+ if (seg.name != null && !seg.name.equals("")) {
+ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_FOREGROUND));
+ Point size = event.gc.textExtent(seg.name);
+ int offset = Math.max(0, (event.height - size.y) / 2);
+ gc.drawText(seg.name, event.x + cummulativeWidth + 5, event.y + offset, true);
+ gc.setForeground(background);
+ gc.setBackground(foreground);
+ }
+ cummulativeWidth += width;
+ }
+ }
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#dispose()
+ */
+ @Override
+ public void dispose() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getControl()
+ */
+ @Override
+ public Control getControl() {
+ return table;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getReportData()
+ */
+ @Override
+ public String getReportData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getXmlData()
+ */
+ @Override
+ public String getXmlData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#isValid()
+ */
+ @Override
+ public Result isValid() {
+ return Result.TrueResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#refresh()
+ */
+ @Override
+ public void refresh() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setXmlData(java.lang.String)
+ */
+ @Override
+ public void setXmlData(String str) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#toHTML(java.lang.String)
+ */
+ @Override
+ public String toHTML(String labelFont) {
+ return null;
+ }
+
+ public static void main(String[] args) {
+ final Display display = new Display();
+ Shell shell = new Shell(display);
+ shell.setLayout(new GridLayout(1, false));
+ shell.setText("Show results as a bar chart in Table");
+
+ List<XBarGraphLine> lines = new ArrayList<XBarGraphLine>();
+ lines.add(XBarGraphLine.getPercentLine("Fix", 34));
+ lines.add(XBarGraphLine.getPercentLine("Improvement", 100));
+ lines.add(new XBarGraphLine("Support", SWT.COLOR_GREEN, SWT.COLOR_YELLOW, SWT.COLOR_RED, SWT.COLOR_YELLOW, 33,
+ "33%", "67%"));
+ List<XBarGraphLineSegment> segments = new ArrayList<XBarGraphLineSegment>();
+ segments.add(XBarGraphLineSegment.getPercentSegment("23%", SWT.COLOR_GREEN, 23));
+ segments.add(XBarGraphLineSegment.getPercentSegment("45%", SWT.COLOR_BLUE, 45));
+ segments.add(XBarGraphLineSegment.getPercentSegment("20%", SWT.COLOR_YELLOW, 20));
+ segments.add(XBarGraphLineSegment.getPercentSegment("12%", SWT.COLOR_MAGENTA, 12));
+ lines.add(new XBarGraphLine("Other", segments));
+ XBarGraphTable table = new XBarGraphTable("By Improvement", "", "Percent", lines);
+ table.createWidgets(shell, 1);
+
+ shell.pack();
+ shell.open();
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch()) display.sleep();
+ }
+ display.dispose();
+ }
+
+ /**
+ * @return the isHeaderVisible
+ */
+ public boolean isHeaderVisible() {
+ return isHeaderVisible;
+ }
+
+ /**
+ * @param isHeaderVisible the isHeaderVisible to set
+ */
+ public void setHeaderVisible(boolean isHeaderVisible) {
+ this.isHeaderVisible = isHeaderVisible;
+ }
+
+ /**
+ * @return the isLinesVisible
+ */
+ public boolean isLinesVisible() {
+ return isLinesVisible;
+ }
+
+ /**
+ * @param isLinesVisible the isLinesVisible to set
+ */
+ public void setLinesVisible(boolean isLinesVisible) {
+ this.isLinesVisible = isLinesVisible;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeView.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeView.java
new file mode 100644
index 00000000000..37585a277f7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeView.java
@@ -0,0 +1,270 @@
+/*******************************************************************************
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xchange;
+
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionId;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionIdManager;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetViews;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Jeff C. Phillips
+ * @author Donald G. Dunne
+ */
+public class ChangeView extends ViewPart implements IActionable, IBranchEventListener {
+
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeView";
+ private static String HELP_CONTEXT_ID = "ChangeView";
+ private XChangeViewer xChangeViewer;
+ private Branch branch;
+ private TransactionId transactionId;
+
+ public ChangeView() {
+ }
+
+ public static void open(Branch branch) throws OseeArgumentException {
+ if (branch == null) throw new OseeArgumentException("Branch can't be null");
+ ChangeView.openViewUpon(branch, null, true);
+ }
+
+ public static void open(TransactionId transactionId) throws OseeArgumentException {
+ if (transactionId == null) throw new OseeArgumentException("TransactionId can't be null");
+ ChangeView.openViewUpon(null, transactionId, true);
+ }
+
+ private static void openViewUpon(final Branch branch, final TransactionId transactionId, final Boolean loadChangeReport) {
+ Job job = new Job("Open Change View") {
+
+ @Override
+ protected IStatus run(final IProgressMonitor monitor) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ try {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ ChangeView changeView =
+ (ChangeView) page.showView(
+ VIEW_ID,
+ String.valueOf(branch != null ? branch.getBranchId() : transactionId.getTransactionNumber()),
+ IWorkbenchPage.VIEW_VISIBLE);
+
+ changeView.explore(branch, transactionId, loadChangeReport);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ });
+ monitor.done();
+ return Status.OK_STATUS;
+ }
+ };
+
+ Jobs.startJob(job);
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ }
+
+ @Override
+ public void setFocus() {
+ }
+
+ /*
+ * @see IWorkbenchPart#createPartControl(Composite)
+ */
+ @Override
+ public void createPartControl(Composite parent) {
+ /*
+ * Create a grid layout object so the text and treeviewer are layed out the way I want.
+ */
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 0;
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ parent.setLayout(layout);
+ parent.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ xChangeViewer = new XChangeViewer();
+ xChangeViewer.setDisplayLabel(false);
+ xChangeViewer.createWidgets(parent, 1);
+
+ MenuManager menuManager = new MenuManager();
+ menuManager.setRemoveAllWhenShown(true);
+ menuManager.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ MenuManager menuManager = (MenuManager) manager;
+ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+ });
+
+ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ xChangeViewer.getXViewer().getTree().setMenu(menuManager.createContextMenu(xChangeViewer.getXViewer().getTree()));
+ getSite().registerContextMenu("org.eclipse.osee.framework.ui.skynetd.widgets.xchange.ChangeView", menuManager,
+ xChangeViewer.getXViewer());
+
+ getSite().setSelectionProvider(xChangeViewer.getXViewer());
+ SkynetGuiPlugin.getInstance().setHelp(parent, HELP_CONTEXT_ID);
+ }
+
+ private void explore(final Branch branch, final TransactionId transactionId, boolean loadChangeReport) {
+ if (xChangeViewer != null) {
+ this.branch = branch;
+ this.transactionId = transactionId;
+
+ if (branch == null) {
+ setPartName("Change Report: " + transactionId.getBranch().getBranchShortName() + " - " + transactionId.getComment());
+ } else {
+ setPartName("Change Report: " + branch.getBranchShortName());
+ }
+
+ xChangeViewer.setInputData(branch, transactionId, loadChangeReport);
+ }
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ private static final String INPUT = "input";
+ private static final String BRANCH_ID = "branchId";
+ private static final String TRANSACTION_NUMBER = "transactionNumber";
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
+ */
+ @Override
+ public void saveState(IMemento memento) {
+ super.saveState(memento);
+ memento = memento.createChild(INPUT);
+ if (branch != null) {
+ memento.putInteger(BRANCH_ID, branch.getBranchId());
+ }
+ if (transactionId != null) {
+ memento.putInteger(TRANSACTION_NUMBER, transactionId.getTransactionNumber());
+ }
+ if (branch != null || transactionId != null) {
+ SkynetViews.addDatabaseSourceId(memento);
+ }
+ }
+
+ @Override
+ public void init(IViewSite site, IMemento memento) throws PartInitException {
+ super.init(site, memento);
+ try {
+ Integer branchId = null;
+
+ if (memento != null) {
+ memento = memento.getChild(INPUT);
+ if (memento != null) {
+ if (SkynetViews.isSourceValid(memento)) {
+ branchId = memento.getInteger(BRANCH_ID);
+ if (branchId != null) {
+ openViewUpon(BranchManager.getBranch(branchId), null, false);
+ } else {
+ Integer transactionNumber = memento.getInteger(TRANSACTION_NUMBER);
+ if (transactionNumber != null && transactionNumber > -1) {
+ openViewUpon(null, TransactionIdManager.getTransactionId(transactionNumber), false);
+ }
+ }
+ } else {
+ closeView();
+ }
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, "Change report error on init", ex);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, final int branchId) {
+ if (branchModType == BranchEventType.Deleted) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ closeView();
+ }
+ });
+ return;
+ } else if (branchModType == BranchEventType.Committed) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ try {
+ explore(branch, transactionId, true);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ });
+ // refresh view with new branch and transaction id
+ } else if (branchModType == BranchEventType.DefaultBranchChanged) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ if (xChangeViewer == null || xChangeViewer.getXViewer().getTree() == null || xChangeViewer.getXViewer().getTree().isDisposed()) return;
+ xChangeViewer.getXViewer().getTree().setEnabled(branch.getBranchId() == branchId);
+ }
+ });
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+ }
+
+ private void closeView() {
+ SkynetViews.closeView(VIEW_ID, getViewSite().getSecondaryId());
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewer.java
new file mode 100644
index 00000000000..16d75ebd1ec
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewer.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xchange;
+
+import java.util.ArrayList;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.change.Change;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TreeItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ChangeXViewer extends XViewer {
+ private static final boolean CHANGE_DEBUG =
+ "TRUE".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.osee.framework.ui.skynet/debug/Change"));
+
+ private final XChangeViewer xChangeViewer;
+
+ public ChangeXViewer(Composite parent, int style, XChangeViewer xRoleViewer) {
+ super(parent, style, new ChangeXViewerFactory());
+ this.addDoubleClickListener(new IDoubleClickListener() {
+ public void doubleClick(org.eclipse.jface.viewers.DoubleClickEvent event) {
+ try {
+ handleDoubleClick();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ };
+ });
+ this.xChangeViewer = xRoleViewer;
+ }
+
+ public void handleDoubleClick() throws Exception {
+ if (getSelectedChanges().size() == 0) return;
+ Change change = getSelectedChanges().iterator().next();
+ if (CHANGE_DEBUG) {
+ System.out.println(String.format(
+ "Handling a Double Click in the Change Report Table for a %s Change on Artifact %s ",
+ change.getItemKind(), change.getArtId()));
+ }
+ Artifact artifact = (Artifact) ((IAdaptable) change).getAdapter(Artifact.class);
+
+ if (artifact != null) {
+ ArtifactEditor.editArtifact(artifact);
+ }
+ }
+
+ public ArrayList<Change> getSelectedChanges() {
+ ArrayList<Change> arts = new ArrayList<Change>();
+ TreeItem items[] = getTree().getSelection();
+ if (items.length > 0) for (TreeItem item : items)
+ arts.add((Change) item.getData());
+ return arts;
+ }
+
+ @Override
+ protected void createSupportWidgets(Composite parent) {
+ super.createSupportWidgets(parent);
+ createMenuActions();
+ }
+
+ Action openMergeViewAction;
+
+ public void createMenuActions() {
+ MenuManager mm = getMenuManager();
+ mm.createContextMenu(getControl());
+ mm.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ updateMenuActions();
+ }
+ });
+
+ openMergeViewAction = new Action("Open Merge View", Action.AS_PUSH_BUTTON) {
+ @Override
+ public void run() {
+ AWorkbench.popup("ERROR", "Not implemented yet");
+ }
+ };
+ }
+
+ public void updateEditMenuActions() {
+ MenuManager mm = getMenuManager();
+
+ // EDIT MENU BLOCK
+ mm.insertBefore(MENU_GROUP_PRE, openMergeViewAction);
+ openMergeViewAction.setEnabled(getSelectedBranches().size() == 1 && getSelectedBranches().iterator().next().isBaselineBranch());
+
+ }
+
+ public void updateMenuActions() {
+ MenuManager mm = getMenuManager();
+
+ updateEditMenuActions();
+
+ mm.insertBefore(MENU_GROUP_PRE, new Separator());
+ }
+
+ /**
+ * Release resources
+ */
+ @Override
+ public void dispose() {
+ getLabelProvider().dispose();
+ }
+
+ public ArrayList<Branch> getSelectedBranches() {
+ ArrayList<Branch> arts = new ArrayList<Branch>();
+ TreeItem items[] = getTree().getSelection();
+ if (items.length > 0) for (TreeItem item : items)
+ arts.add((Branch) item.getData());
+ return arts;
+ }
+
+ /**
+ * @return the xChangeViewer
+ */
+ public XChangeViewer getXChangeViewer() {
+ return xChangeViewer;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewerFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewerFactory.java
new file mode 100644
index 00000000000..17e3098182c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewerFactory.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xchange;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerSorter;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn.SortDataType;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ChangeXViewerFactory extends SkynetXViewerFactory {
+
+ public static XViewerColumn Name =
+ new XViewerColumn("framework.change.artifactNames", "Artifact name(s)", 250, SWT.LEFT, true,
+ SortDataType.String, false, null);
+ public static XViewerColumn Item_Type =
+ new XViewerColumn("framework.change.itemType", "Item Type", 100, SWT.LEFT, true, SortDataType.String, false,
+ null);
+ public static XViewerColumn Item_Kind =
+ new XViewerColumn("framework.change.itemKind", "Item Kind", 70, SWT.LEFT, true, SortDataType.String, false,
+ null);
+ public static XViewerColumn Change_Type =
+ new XViewerColumn("framework.change.changeType", "Change Type", 50, SWT.LEFT, true, SortDataType.String,
+ false, null);
+ public static XViewerColumn Is_Value =
+ new XViewerColumn("framework.change.isValue", "Is Value", 150, SWT.LEFT, true, SortDataType.String, false,
+ null);
+ public static XViewerColumn Was_Value =
+ new XViewerColumn("framework.change.wasValue", "Was Value", 150, SWT.LEFT, true, SortDataType.String, false,
+ null);
+ public static XViewerColumn Artifact_Type =
+ new XViewerColumn("framework.change.artifactType", "Artifact Type", 75, SWT.LEFT, true, SortDataType.String,
+ false, null);
+ public static XViewerColumn Hrid =
+ new XViewerColumn("framework.change.hrid", "HRID", 50, SWT.LEFT, false, SortDataType.String, false, null);
+
+ public static String NAMESPACE = "osee.skynet.gui.ChangeXViewer";
+
+ public ChangeXViewerFactory() {
+ super(NAMESPACE);
+ registerColumn(Name, Item_Type, Item_Kind, Change_Type, Is_Value, Was_Value, Artifact_Type, Hrid);
+ registerAllAttributeColumns();
+ }
+
+ public XViewerSorter createNewXSorter(XViewer xViewer) {
+ return new XViewerSorter(xViewer);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeContentProvider.java
new file mode 100644
index 00000000000..7dc01fbf669
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeContentProvider.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xchange;
+
+import java.util.Collection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+public class XChangeContentProvider implements ITreeContentProvider {
+
+ private final ChangeXViewer changeXViewer;
+ private static Object[] EMPTY_ARRAY = new Object[0];
+
+ public XChangeContentProvider(ChangeXViewer commitXViewer) {
+ super();
+ this.changeXViewer = commitXViewer;
+ }
+
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Collection) {
+ return ((Collection<?>) parentElement).toArray();
+ }
+ return EMPTY_ARRAY;
+ }
+
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ if (element instanceof Collection) return true;
+ return false;
+ }
+
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ /**
+ * @return the changeXViewer
+ */
+ public ChangeXViewer getChangeXViewer() {
+ return changeXViewer;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeLabelProvider.java
new file mode 100644
index 00000000000..33ecb2815ba
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeLabelProvider.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xchange;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.change.Change;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.XMergeContentProvider;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerCells;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerLabelProvider;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+public class XChangeLabelProvider extends XViewerLabelProvider {
+
+ Font font = null;
+ private final ChangeXViewer changeXViewer;
+
+ public XChangeLabelProvider(ChangeXViewer changeXViewer) {
+ super(changeXViewer);
+ this.changeXViewer = changeXViewer;
+ }
+
+ @Override
+ public String getColumnText(Object element, XViewerColumn cCol, int columnIndex) throws OseeCoreException {
+ try {
+ if (!(element instanceof Change)) return "";
+ Change change = (Change) element;
+ if (cCol.equals(ChangeXViewerFactory.Name)) {
+ return change.getName();
+ } else if (cCol.equals(ChangeXViewerFactory.Change_Type)) {
+ return change.getModificationType().getDisplayName();
+ } else if (cCol.equals(ChangeXViewerFactory.Item_Kind)) {
+ return change.getItemKind();
+ } else if (cCol.equals(ChangeXViewerFactory.Item_Type)) {
+ return change.getItemTypeName();
+ } else if (cCol.equals(ChangeXViewerFactory.Is_Value)) {
+ return change.getIsValue();
+ } else if (cCol.equals(ChangeXViewerFactory.Was_Value)) {
+ return change.getWasValue();
+ } else if (cCol.equals(ChangeXViewerFactory.Artifact_Type)) {
+ return change.getArtifact().getArtifactTypeName();
+ } else if (cCol.equals(ChangeXViewerFactory.Hrid)) {
+ return change.getArtifact().getHumanReadableId();
+ }
+ } catch (Exception ex) {
+ return XViewerCells.getCellExceptionString(ex);
+ }
+ return "unhandled column";
+ }
+
+ public void dispose() {
+ if (font != null) font.dispose();
+ font = null;
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public ChangeXViewer getTreeViewer() {
+ return changeXViewer;
+ }
+
+ @Override
+ public Image getColumnImage(Object element, XViewerColumn xCol, int columnIndex) throws OseeCoreException {
+ try {
+ if (!(element instanceof Change)) return null;
+ Change change = (Change) element;
+ if (xCol.equals(ChangeXViewerFactory.Name)) {
+ try {
+ return change.getItemKindImage();
+ } catch (IllegalArgumentException ex) {
+ OSEELog.logException(XMergeContentProvider.class, ex, true);
+ } catch (Exception ex) {
+ OSEELog.logException(XMergeContentProvider.class, ex, true);
+ }
+ } else if (xCol.equals(ChangeXViewerFactory.Item_Type)) {
+ return change.getItemTypeImage();
+ }
+ } catch (Exception ex) {
+ // do nothing
+ }
+ return null;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeViewer.java
new file mode 100644
index 00000000000..377e22fc09d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeViewer.java
@@ -0,0 +1,357 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xchange;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.change.Change;
+import org.eclipse.osee.framework.skynet.core.revision.ChangeManager;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionId;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.status.SwtStatusMonitor;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.swt.widgets.Tree;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XChangeViewer extends XWidget implements IActionable {
+
+ private ChangeXViewer xChangeViewer;
+ public final static String normalColor = "#EEEEEE";
+ private static final String LOADING = "Loading ...";
+ private static final String NOT_CHANGES = "No changes were found";
+ protected Label extraInfoLabel;
+ private Branch branch;
+ private TransactionId transactionId;
+
+ /**
+ * @param label
+ */
+ public XChangeViewer() {
+ super("Change Report");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#createWidgets(org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+ // Create Text Widgets
+ if (displayLabel && !label.equals("")) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+
+ Composite mainComp = new Composite(parent, SWT.BORDER);
+ mainComp.setLayoutData(new GridData(GridData.FILL_BOTH));
+ mainComp.setLayout(ALayout.getZeroMarginLayout());
+ if (toolkit != null) toolkit.paintBordersFor(mainComp);
+
+ createTaskActionBar(mainComp);
+
+ xChangeViewer = new ChangeXViewer(mainComp, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION, this);
+ xChangeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ xChangeViewer.setContentProvider(new XChangeContentProvider(xChangeViewer));
+ xChangeViewer.setLabelProvider(new XChangeLabelProvider(xChangeViewer));
+
+ if (toolkit != null) toolkit.adapt(xChangeViewer.getStatusLabel(), false, false);
+
+ Tree tree = xChangeViewer.getTree();
+ GridData gridData = new GridData(GridData.FILL_BOTH);
+ gridData.heightHint = 100;
+ tree.setLayout(ALayout.getZeroMarginLayout());
+ tree.setLayoutData(gridData);
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+
+ new ChangeDragAndDrop(tree, ChangeXViewerFactory.NAMESPACE);
+ }
+
+ public void createTaskActionBar(Composite parent) {
+
+ // Button composite for state transitions, etc
+ Composite bComp = new Composite(parent, SWT.NONE);
+ // bComp.setBackground(mainSComp.getDisplay().getSystemColor(SWT.COLOR_CYAN));
+ bComp.setLayout(new GridLayout(2, false));
+ bComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Composite leftComp = new Composite(bComp, SWT.NONE);
+ leftComp.setLayout(new GridLayout());
+ leftComp.setLayoutData(new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL));
+
+ extraInfoLabel = new Label(leftComp, SWT.NONE);
+ extraInfoLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ extraInfoLabel.setText("\n");
+
+ Composite rightComp = new Composite(bComp, SWT.NONE);
+ rightComp.setLayout(new GridLayout());
+ rightComp.setLayoutData(new GridData(GridData.END));
+
+ ToolBar toolBar = new ToolBar(rightComp, SWT.FLAT | SWT.RIGHT);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ toolBar.setLayoutData(gd);
+ ToolItem item = null;
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("refresh.gif"));
+ item.setToolTipText("Refresh");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ setInputData(branch, transactionId, true);
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("customize.gif"));
+ item.setToolTipText("Customize Table");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ xChangeViewer.getCustomizeMgr().handleTableCustomization();
+ }
+ });
+
+ OseeAts.addButtonToEditorToolBar(this, SkynetGuiPlugin.getInstance(), toolBar, ChangeView.VIEW_ID,
+ "Change Report");
+ }
+
+ public void loadTable() {
+ refresh();
+ }
+
+ @SuppressWarnings("unchecked")
+ public ArrayList<Branch> getSelectedBranches() {
+ ArrayList<Branch> items = new ArrayList<Branch>();
+ if (xChangeViewer == null) return items;
+ if (xChangeViewer.getSelection().isEmpty()) return items;
+ Iterator i = ((IStructuredSelection) xChangeViewer.getSelection()).iterator();
+ while (i.hasNext()) {
+ Object obj = i.next();
+ items.add((Branch) obj);
+ }
+ return items;
+ }
+
+ @Override
+ public Control getControl() {
+ return xChangeViewer.getTree();
+ }
+
+ @Override
+ public void dispose() {
+ xChangeViewer.dispose();
+ }
+
+ @Override
+ public void setFocus() {
+ xChangeViewer.getTree().setFocus();
+ }
+
+ @Override
+ public void refresh() {
+ xChangeViewer.refresh();
+ setLabelError();
+ }
+
+ @Override
+ public Result isValid() {
+ return Result.TrueResult;
+ }
+
+ @Override
+ public String toHTML(String labelFont) {
+ return AHTML.simplePage("Unhandled");
+ }
+
+ /**
+ * @return Returns the xViewer.
+ */
+ public ChangeXViewer getXViewer() {
+ return xChangeViewer;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return xChangeViewer.getInput();
+ }
+
+ public void setInputData(final Branch branch, final TransactionId transactionId, final boolean loadChangeReport) {
+ this.branch = branch;
+ this.transactionId = transactionId;
+
+ extraInfoLabel.setText(LOADING);
+
+ Job job = new Job("Open Change View") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ final boolean hasBranch = branch != null;
+ final Collection<Change> changes = new ArrayList<Change>() ;
+ SwtStatusMonitor swtMonitor = new SwtStatusMonitor(monitor);
+
+ try {
+ if(loadChangeReport){
+ changes.addAll((hasBranch ? ChangeManager.getChangesPerBranch(branch, swtMonitor) : ChangeManager.getChangesPerTransaction(transactionId, swtMonitor)));
+ }
+
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ if(loadChangeReport){
+ if (changes.size() == 0) {
+ extraInfoLabel.setText(NOT_CHANGES);
+ xChangeViewer.setInput(changes);
+ } else {
+ String infoLabel =
+ String.format(
+ "Changes %s to branch: %s\n%s",
+ hasBranch ? "made" : "committed",
+ hasBranch ? branch : "(" + transactionId.getTransactionNumber() + ") " + transactionId.getBranch(),
+ hasBranch ? "" : "Comment: " + transactionId.getComment());
+ extraInfoLabel.setText(infoLabel);
+ xChangeViewer.setInput(changes);
+ }
+ }else{
+ extraInfoLabel.setText("Cleared on shut down - press refresh to reload");
+ }
+ }
+ });
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ Jobs.startJob(job);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getReportData()
+ */
+ @Override
+ public String getReportData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#getXmlData()
+ */
+ @Override
+ public String getXmlData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.XWidget#setXmlData(java.lang.String)
+ */
+ @Override
+ public void setXmlData(String str) {
+ }
+ public class ChangeDragAndDrop extends SkynetDragAndDrop {
+
+ public ChangeDragAndDrop(Tree tree, String viewId) {
+ super(tree, viewId);
+ }
+
+ @Override
+ public void performDragOver(DropTargetEvent event) {
+ event.detail = DND.DROP_NONE;
+ }
+
+ @Override
+ public Artifact[] getArtifacts() {
+ IStructuredSelection selection = (IStructuredSelection) xChangeViewer.getSelection();
+ ArrayList<Artifact> artifacts = new ArrayList<Artifact>();
+
+ if (selection != null && !selection.isEmpty()) {
+ for (Object object : selection.toArray()) {
+
+ if (object instanceof IAdaptable) {
+ Artifact artifact = (Artifact) ((IAdaptable) object).getAdapter(Artifact.class);
+
+ if (artifact != null) {
+ artifacts.add(artifact);
+ }
+ }
+ }
+ }
+ return artifacts.toArray(new Artifact[artifacts.size()]);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.ats.IActionable#getActionDescription()
+ */
+ @Override
+ public String getActionDescription() {
+ StringBuffer sb = new StringBuffer();
+ if (branch != null) sb.append("\nBranch: " + branch);
+ if (transactionId != null) sb.append("\nTransaction Id: " + transactionId.getTransactionNumber());
+ return sb.toString();
+ }
+
+ public TransactionId getTransactionId() throws OseeCoreException {
+ return transactionId;
+ }
+
+ /**
+ * @return the branch
+ */
+ public Branch getBranch() {
+ return branch;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitManagerView.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitManagerView.java
new file mode 100644
index 00000000000..b9b26070f49
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitManagerView.java
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xcommit;
+
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.IBranchArtifact;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @see ViewPart
+ * @author Donald G. Dunne
+ */
+public class CommitManagerView extends ViewPart implements IActionable, IBranchEventListener, IFrameworkTransactionEventListener {
+
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.widgets.xcommit.CommitManagerView";
+ private static String HELP_CONTEXT_ID = "CommitManagerView";
+ private XCommitViewer xCommitViewer;
+ private IBranchArtifact branchArtifact;
+ private static final String INPUT = "CommitManagerViewInput";
+
+ /**
+ * @author Donald G. Dunne
+ */
+ public CommitManagerView() {
+ }
+
+ public static void openViewUpon(final IBranchArtifact branchArtifact) {
+ Job job = new Job("Open Change Manager") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ try {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ CommitManagerView commitManagerView =
+ (CommitManagerView) page.showView(VIEW_ID,
+ String.valueOf(branchArtifact.getWorkingBranch().getBranchId()),
+ IWorkbenchPage.VIEW_ACTIVATE);
+ commitManagerView.explore(branchArtifact);
+
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ });
+
+ monitor.done();
+ return Status.OK_STATUS;
+ }
+ };
+
+ Jobs.startJob(job);
+ }
+
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ super.dispose();
+ }
+
+ @Override
+ public void setFocus() {
+ }
+
+ /*
+ * @see IWorkbenchPart#createPartControl(Composite)
+ */
+ @Override
+ public void createPartControl(Composite parent) {
+ /*
+ * Create a grid layout object so the text and treeviewer are layed out the way I want.
+ */
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 0;
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ parent.setLayout(layout);
+ parent.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ xCommitViewer = new XCommitViewer();
+ xCommitViewer.setDisplayLabel(false);
+ xCommitViewer.createWidgets(parent, 1);
+ if (branchArtifact != null) xCommitViewer.setArtifact(branchArtifact.getArtifact(), "");
+
+ SkynetGuiPlugin.getInstance().setHelp(parent, HELP_CONTEXT_ID);
+
+ OseeEventManager.addListener(this);
+ }
+
+ public void explore(IBranchArtifact branchArtifact) {
+ this.branchArtifact = branchArtifact;
+ try {
+ if (xCommitViewer != null && branchArtifact != null) xCommitViewer.setArtifact(branchArtifact.getArtifact(),
+ "");
+ setPartName("Commit Manager: " + branchArtifact.getWorkingBranch().getBranchShortName());
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ @Override
+ public void init(IViewSite site, IMemento memento) throws PartInitException {
+ super.init(site, memento);
+
+ try {
+ if (memento != null) {
+ memento = memento.getChild(INPUT);
+ if (memento != null) {
+ int artId = memento.getInteger("artId");
+ if (artId > 0) {
+ int branchId = memento.getInteger("branchId");
+ if (branchId > 0) {
+ Branch branch = BranchManager.getBranch(branchId);
+ Artifact artifact = ArtifactQuery.getArtifactFromId(artId, branch);
+ explore((IBranchArtifact) artifact);
+ }
+ }
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetActivator.class, Level.WARNING, "Commit Manager error on init: ", ex);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
+ */
+ @Override
+ public void saveState(IMemento memento) {
+ super.saveState(memento);
+ try {
+ memento = memento.createChild(INPUT);
+ memento.putInteger("artId", branchArtifact.getArtifact().getArtId());
+ memento.putInteger("branchId", branchArtifact.getArtifact().getBranch().getBranchId());
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, int branchId) {
+ if (branchArtifact.getArtifact().getBranch().getBranchId() == branchId) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ if (xCommitViewer.getXViewer() == null || xCommitViewer.getXViewer().getTree() == null || xCommitViewer.getXViewer().getTree().isDisposed()) return;
+ xCommitViewer.refresh();
+ }
+ });
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IFrameworkTransactionEventListener#handleFrameworkTransactionEvent(org.eclipse.osee.framework.ui.plugin.event.Sender.Source, org.eclipse.osee.framework.skynet.core.eventx.FrameworkTransactionData)
+ */
+ @Override
+ public void handleFrameworkTransactionEvent(final Sender sender, final FrameworkTransactionData transData) throws OseeCoreException {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ if (xCommitViewer.getXViewer() == null || xCommitViewer.getXViewer().getTree() == null || xCommitViewer.getXViewer().getTree().isDisposed()) return;
+ xCommitViewer.refresh();
+ }
+ });
+
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitXViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitXViewer.java
new file mode 100644
index 00000000000..571632de2e1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitXViewer.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xcommit;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TreeItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CommitXViewer extends XViewer {
+
+ private final XCommitViewer xCommitViewer;
+ private Branch workingBranch;
+
+ public CommitXViewer(Composite parent, int style, XCommitViewer xRoleViewer) {
+ super(parent, style, new CommitXViewerFactory());
+ this.xCommitViewer = xRoleViewer;
+ }
+
+ @Override
+ protected void createSupportWidgets(Composite parent) {
+ super.createSupportWidgets(parent);
+ createMenuActions();
+ }
+
+ Action openMergeViewAction;
+
+ public void createMenuActions() {
+ MenuManager mm = getMenuManager();
+ mm.createContextMenu(getControl());
+ mm.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ updateMenuActions();
+ }
+ });
+
+ openMergeViewAction = new Action("Open Merge View", Action.AS_PUSH_BUTTON) {
+ @Override
+ public void run() {
+ AWorkbench.popup("ERROR", "Not implemented yet");
+ }
+ };
+ }
+
+ public void updateEditMenuActions() {
+ MenuManager mm = getMenuManager();
+
+ // EDIT MENU BLOCK
+ mm.insertBefore(MENU_GROUP_PRE, openMergeViewAction);
+ openMergeViewAction.setEnabled(getSelectedBranches().size() == 1 && getSelectedBranches().iterator().next().isBaselineBranch());
+
+ }
+
+ public void updateMenuActions() {
+ MenuManager mm = getMenuManager();
+
+ updateEditMenuActions();
+
+ mm.insertBefore(MENU_GROUP_PRE, new Separator());
+ }
+
+ public void setWorkingBranch(Branch workingBranch) throws OseeCoreException {
+ this.workingBranch = workingBranch;
+ Set<Branch> branches = new HashSet<Branch>();
+ branches.add(workingBranch.getParentBranch());
+ setInput(branches.toArray());
+ expandAll();
+ }
+
+ /**
+ * Release resources
+ */
+ @Override
+ public void dispose() {
+ getLabelProvider().dispose();
+ }
+
+ public ArrayList<Branch> getSelectedBranches() {
+ ArrayList<Branch> arts = new ArrayList<Branch>();
+ TreeItem items[] = getTree().getSelection();
+ if (items.length > 0) for (TreeItem item : items)
+ arts.add((Branch) item.getData());
+ return arts;
+ }
+
+ /**
+ * @return the xUserRoleViewer
+ */
+ public XCommitViewer getXUserRoleViewer() {
+ return xCommitViewer;
+ }
+
+ /**
+ * @return the workingBranch
+ */
+ public Branch getWorkingBranch() {
+ return workingBranch;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitXViewerFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitXViewerFactory.java
new file mode 100644
index 00000000000..38c6413ee44
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/CommitXViewerFactory.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xcommit;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn.SortDataType;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CommitXViewerFactory extends SkynetXViewerFactory {
+
+ public static XViewerColumn Type_Col =
+ new XViewerColumn("osee.commit.type", "Type", 100, SWT.LEFT, true, SortDataType.String, false, null);
+ public static XViewerColumn Status_Col =
+ new XViewerColumn("osee.commit.status", "Status", 100, SWT.LEFT, true, SortDataType.String, false, null);
+ public static XViewerColumn Name_Col =
+ new XViewerColumn("osee.commit.name", "Name", 450, SWT.LEFT, true, SortDataType.String, false, null);
+ public static XViewerColumn Short_Name_Col =
+ new XViewerColumn("osee.commit.shortName", "Short Name", 200, SWT.LEFT, true, SortDataType.String, false, null);
+
+ public CommitXViewerFactory() {
+ super("osee.skynet.gui.CommitXViewer");
+ registerColumn(Type_Col, Status_Col, Name_Col, Short_Name_Col);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitContentProvider.java
new file mode 100644
index 00000000000..f4898e2ff4a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitContentProvider.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xcommit;
+
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+public class XCommitContentProvider implements ITreeContentProvider {
+
+ private final CommitXViewer commitXViewer;
+ private static Object[] EMPTY_ARRAY = new Object[0];
+
+ public XCommitContentProvider(CommitXViewer commitXViewer) {
+ super();
+ this.commitXViewer = commitXViewer;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Object[]) {
+ return (Object[]) parentElement;
+ }
+ if (parentElement instanceof Collection) {
+ return ((Collection) parentElement).toArray();
+ }
+ if (parentElement instanceof Branch) {
+ try {
+ return ((Branch) parentElement).getChildBranches().toArray();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ return EMPTY_ARRAY;
+ }
+
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ return getChildren(element).length > 0;
+ }
+
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof String) return new Object[] {inputElement};
+ return getChildren(inputElement);
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitLabelProvider.java
new file mode 100644
index 00000000000..99e8971e53f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitLabelProvider.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xcommit;
+
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerCells;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerLabelProvider;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+public class XCommitLabelProvider extends XViewerLabelProvider {
+ Font font = null;
+
+ private final CommitXViewer commitXViewer;
+
+ public XCommitLabelProvider(CommitXViewer commitXViewer) {
+ super(commitXViewer);
+ this.commitXViewer = commitXViewer;
+ }
+
+ @Override
+ public Image getColumnImage(Object element, XViewerColumn xCol, int columnIndex) throws OseeCoreException {
+ Branch branch = ((Branch) element);
+ if (xCol.equals(CommitXViewerFactory.Name_Col)) {
+ if (branch.equals(commitXViewer.getWorkingBranch())) return SkynetGuiPlugin.getInstance().getImage(
+ "nav_forward.gif");
+ return SkynetGuiPlugin.getInstance().getImage("branch.gif");
+ } else if (xCol.equals(CommitXViewerFactory.Status_Col)) {
+ try {
+ return getCommitStatusImage(branch);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String getColumnText(Object element, XViewerColumn xCol, int columnIndex) throws OseeCoreException {
+ Branch branch = ((Branch) element);
+ if (xCol.equals(CommitXViewerFactory.Type_Col)) {
+ if (branch.equals(commitXViewer.getWorkingBranch()))
+ return "Working";
+ else if (branch.equals(commitXViewer.getWorkingBranch().getParentBranch()))
+ return "Parent Baseline";
+ else {
+ try {
+ if (branch.isBaselineBranch()) return "Baseline";
+ } catch (Exception ex) {
+ return XViewerCells.getCellExceptionString(ex);
+ }
+ }
+ return "";
+ } else if (xCol.equals(CommitXViewerFactory.Status_Col)) {
+ if (branch.equals(commitXViewer.getWorkingBranch()))
+ return "";
+ else if (branch.equals(commitXViewer.getWorkingBranch().getParentBranch()) || branch.isBaselineBranch()) return isCommittedInto(branch) ? "Committed" : "UnCommitted";
+ return "";
+ } else if (xCol.equals(CommitXViewerFactory.Name_Col))
+ return branch.getBranchName();
+ else if (xCol.equals(CommitXViewerFactory.Short_Name_Col)) return branch.getBranchShortName();
+ return "unhandled column";
+ }
+
+ public void dispose() {
+ if (font != null) font.dispose();
+ font = null;
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public CommitXViewer getTreeViewer() {
+ return commitXViewer;
+ }
+
+ private boolean isCommittedInto(Branch branch) {
+ return !branch.getBranchName().equals("ftb2");
+ }
+
+ private Image getCommitStatusImage(Branch branch) throws OseeCoreException {
+ if (branch.equals(commitXViewer.getWorkingBranch()))
+ return null;
+ else if (branch.equals(commitXViewer.getWorkingBranch().getParentBranch()) || branch.isBaselineBranch()) return isCommittedInto(branch) ? SkynetGuiPlugin.getInstance().getImage(
+ "green_light.gif") : SkynetGuiPlugin.getInstance().getImage("red_light.gif");
+ return null;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitViewer.java
new file mode 100644
index 00000000000..4bca28d1865
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xcommit/XCommitViewer.java
@@ -0,0 +1,289 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xcommit;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.IBranchArtifact;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.swt.widgets.Tree;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XCommitViewer extends XWidget {
+
+ private CommitXViewer xCommitViewer;
+ private IDirtiableEditor editor;
+ public final static String normalColor = "#EEEEEE";
+ private Label extraInfoLabel;
+ private Artifact artifact;
+
+ /**
+ * @param label
+ */
+ public XCommitViewer() {
+ super("Commit Manager");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#createWidgets(org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+
+ // Create Text Widgets
+ if (displayLabel && !label.equals("")) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+
+ Composite mainComp = new Composite(parent, SWT.BORDER);
+ mainComp.setLayoutData(new GridData(GridData.FILL_BOTH));
+ mainComp.setLayout(ALayout.getZeroMarginLayout());
+ if (toolkit != null) toolkit.paintBordersFor(mainComp);
+
+ createTaskActionBar(mainComp);
+
+ xCommitViewer = new CommitXViewer(mainComp, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION, this);
+ xCommitViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ xCommitViewer.setContentProvider(new XCommitContentProvider(xCommitViewer));
+ xCommitViewer.setLabelProvider(new XCommitLabelProvider(xCommitViewer));
+ xCommitViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ refreshActionEnablement();
+ }
+ });
+
+ if (toolkit != null) toolkit.adapt(xCommitViewer.getStatusLabel(), false, false);
+
+ Tree tree = xCommitViewer.getTree();
+ GridData gridData = new GridData(GridData.FILL_BOTH);
+ gridData.heightHint = 100;
+ tree.setLayout(ALayout.getZeroMarginLayout());
+ tree.setLayoutData(gridData);
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+
+ }
+
+ public void createTaskActionBar(Composite parent) {
+
+ // Button composite for state transitions, etc
+ Composite bComp = new Composite(parent, SWT.NONE);
+ // bComp.setBackground(mainSComp.getDisplay().getSystemColor(SWT.COLOR_CYAN));
+ bComp.setLayout(new GridLayout(2, false));
+ bComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Composite leftComp = new Composite(bComp, SWT.NONE);
+ leftComp.setLayout(new GridLayout());
+ leftComp.setLayoutData(new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL));
+
+ extraInfoLabel = new Label(leftComp, SWT.NONE);
+ extraInfoLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ extraInfoLabel.setText("");
+
+ Composite rightComp = new Composite(bComp, SWT.NONE);
+ rightComp.setLayout(new GridLayout());
+ rightComp.setLayoutData(new GridData(GridData.END));
+
+ ToolBar toolBar = new ToolBar(rightComp, SWT.FLAT | SWT.RIGHT);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ toolBar.setLayoutData(gd);
+ ToolItem item = null;
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("branch_change.gif"));
+ item.setToolTipText("Show Change Report");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (xCommitViewer.getWorkingBranch() != null)
+ //ChangeReportView.openViewUpon(xCommitViewer.getWorkingBranch());
+ AWorkbench.popup("ERROR", "Not implemented yet.");
+ else
+ AWorkbench.popup("ERROR", "Not implemented yet.");
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("refresh.gif"));
+ item.setToolTipText("Refresh");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ loadTable();
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("customize.gif"));
+ item.setToolTipText("Customize Table");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ xCommitViewer.getCustomizeMgr().handleTableCustomization();
+ }
+ });
+
+ refreshActionEnablement();
+ }
+
+ public void refreshActionEnablement() {
+ }
+
+ public void loadTable() {
+ try {
+ if (artifact != null && (artifact instanceof IBranchArtifact)) xCommitViewer.setWorkingBranch(((IBranchArtifact) artifact).getWorkingBranch());
+ extraInfoLabel.setText("Commit Status for branch: \"" + ((IBranchArtifact) artifact).getWorkingBranch() + "\" - \"" + ((IBranchArtifact) artifact).getWorkingBranch().getBranchShortName() + "\"");
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ refresh();
+ }
+
+ @SuppressWarnings("unchecked")
+ public ArrayList<Branch> getSelectedBranches() {
+ ArrayList<Branch> items = new ArrayList<Branch>();
+ if (xCommitViewer == null) return items;
+ if (xCommitViewer.getSelection().isEmpty()) return items;
+ Iterator i = ((IStructuredSelection) xCommitViewer.getSelection()).iterator();
+ while (i.hasNext()) {
+ Object obj = i.next();
+ items.add((Branch) obj);
+ }
+ return items;
+ }
+
+ @Override
+ public Control getControl() {
+ return xCommitViewer.getTree();
+ }
+
+ @Override
+ public void dispose() {
+ xCommitViewer.dispose();
+ }
+
+ @Override
+ public void setFocus() {
+ xCommitViewer.getTree().setFocus();
+ }
+
+ @Override
+ public void refresh() {
+ xCommitViewer.refresh();
+ setLabelError();
+ refreshActionEnablement();
+ }
+
+ @Override
+ public Result isValid() {
+ return Result.TrueResult;
+ }
+
+ @Override
+ public void setXmlData(String str) {
+ }
+
+ @Override
+ public String getXmlData() {
+ return null;
+ }
+
+ @Override
+ public String toHTML(String labelFont) {
+ return AHTML.simplePage("Unhandled");
+ }
+
+ @Override
+ public String getReportData() {
+ return null;
+ }
+
+ /**
+ * @return Returns the xViewer.
+ */
+ public CommitXViewer getXViewer() {
+ return xCommitViewer;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return xCommitViewer.getInput();
+ }
+
+ public IDirtiableEditor getEditor() {
+ return editor;
+ }
+
+ public void setEditor(IDirtiableEditor editor) {
+ this.editor = editor;
+ }
+
+ @Override
+ public boolean isEditable() {
+ return editable;
+ }
+
+ @Override
+ public void setEditable(boolean editable) {
+ this.editable = editable;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IDamWidget#setArtifact(org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String)
+ */
+ public void setArtifact(Artifact artifact, String attrName) throws IllegalStateException {
+ this.artifact = artifact;
+ loadTable();
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeUtility.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeUtility.java
new file mode 100644
index 00000000000..482e1a1571b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeUtility.java
@@ -0,0 +1,386 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import java.util.Date;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.core.enums.ConflictType;
+import org.eclipse.osee.framework.db.connection.exception.ArtifactDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.MultipleArtifactsExist;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.skynet.core.conflict.ArtifactConflict;
+import org.eclipse.osee.framework.skynet.core.conflict.AttributeConflict;
+import org.eclipse.osee.framework.skynet.core.conflict.Conflict;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionId;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionIdManager;
+import org.eclipse.osee.framework.ui.plugin.util.AIFile;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.render.VbaWordDiffGenerator;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Theron Virgin
+ */
+public class MergeUtility {
+ /*
+ * This has all of the GUI prompts that help a user know what's going on
+ * when they set a merge.
+ */
+ public static final String CLEAR_PROMPT =
+ "This attribute has had Merge changes made are you sure you want to overwrite them? All changes will be lost.";
+ public static final String COMMITED_PROMPT =
+ "You can not change the value for a conflict that has been marked resolved or has already been commited. Change the conflict status if the source branch has not been commited and you wish to modify the value.";
+ public static final String ARTIFACT_DELETED_PROMPT =
+ "This Artifact has been changed on the source branch, but has been deleted on the destination branch. In order to commit this branch and resolve this conflict the Artifact will need to be reverted on the source branch. \n\nReverting the artifact is irreversible and you will need to restart OSEE after reverting to see changes.";
+ public static final String ATTRIBUTE_DELETED_PROMPT =
+ "This Attribute has been changed on the source branch, but has been deleted on the destination branch. In order to commit this branch and resolve this conflict the Attribute will need to be reverted on the source branch. \n\nReverting the attribute is irreversible and you will need to restart OSEE after reverting to see changes.";
+ public static final String INFORMATIONAL_CONFLICT =
+ "This Item has been deleted on the Source Branch, but has been changed on the destination branch. This conflict is informational only and will not prevent your from commiting, however when you commit it will delete the item on the destination branch.";
+ public static final String OPEN_MERGE_DIALOG =
+ "This will open a window that will allow in-document merging in Word. You will need to right click on every difference and either accept or reject the change. If you begin an in-document merge you will not be able to finalize the conflict until you resolve every change in the document.\n Computing a Merge will wipe out any merge changes you have made and start with a fresh diff of the two files. If you want to only view the changes use the difference options.\n Change that touch the entire file are better handled using copy and paste. \n\nWARNING: Word will occasionaly show incorrect changes especially when users have both modified the same block of text. Check your final version.";
+
+ private static final Pattern authorPattern =
+ Pattern.compile("aml:author=\".*?\"", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern rsidRootPattern =
+ Pattern.compile("\\</wsp:rsids\\>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern findSetRsids =
+ Pattern.compile("wsp:rsidR=\".*?\"", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern findSetRsidRPR =
+ Pattern.compile("wsp:rsidRPr=\".*?\"", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern findSetRsidP =
+ Pattern.compile("wsp:rsidP=\".*?\"", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern findSetRsidRDefault =
+ Pattern.compile("wsp:rsidRDefault=\".*?\"", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ private static final Pattern amlTerminatingDefault =
+ Pattern.compile("aml:id[^\\>]*?/", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+
+ private static final boolean DEBUG =
+ "TRUE".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.osee.framework.ui.skynet/debug/Merge"));
+
+ public static void clearValue(Conflict conflict, Shell shell, boolean prompt) throws MultipleArtifactsExist, ArtifactDoesNotExist, Exception {
+ if (conflict == null) return;
+ if (okToOverwriteEditedValue(conflict, shell, prompt)) {
+ conflict.clearValue();
+ }
+ }
+
+ public static void setToDest(Conflict conflict, Shell shell, boolean prompt) throws MultipleArtifactsExist, ArtifactDoesNotExist, Exception {
+ if (conflict == null) return;
+ if (okToOverwriteEditedValue(conflict, shell, prompt)) {
+ conflict.setToDest();
+ }
+ }
+
+ public static void setToSource(Conflict conflict, Shell shell, boolean prompt) throws MultipleArtifactsExist, ArtifactDoesNotExist, Exception {
+ if (conflict == null) return;
+ if (okToOverwriteEditedValue(conflict, shell, prompt)) {
+ conflict.setToSource();
+ }
+ }
+
+ public static boolean okToOverwriteEditedValue(Conflict conflict, Shell shell, boolean prompt) throws MultipleArtifactsExist, ArtifactDoesNotExist, Exception {
+ boolean proceed = true;
+ if (!conflict.statusEditable()) {
+ MessageDialog.openInformation(shell, "Attention", COMMITED_PROMPT);
+ return false;
+ }
+ if (!(conflict.mergeEqualsDestination() || conflict.mergeEqualsSource() || conflict.statusUntouched()) && prompt) {
+ proceed = MessageDialog.openConfirm(shell, "Confirm", CLEAR_PROMPT);
+ }
+ return proceed;
+ }
+
+ /*
+ * This is not in the AttributeConflict because it relies on the renderer
+ * that is in not in the skynet core package.
+ */
+ public static String showCompareFile(Artifact art1, Artifact art2, String fileName) throws Exception {
+ if (art1 == null || art2 == null) return " ";
+ return RendererManager.diff(art1, art2, true, new VariableMap("fileName", fileName));
+ }
+
+ /*
+ * This is not in the AttributeConflict because it relies on the renderer
+ * that is in not in the skynet core package.
+ */
+ public static String CreateMergeDiffFile(Artifact art1, Artifact art2, String fileName) throws Exception {
+ if (art1 == null || art2 == null) return " ";
+ return RendererManager.merge(art1, art2, fileName, false);
+ }
+
+ /*
+ * This is not in the AttributeConflict because it relies on the renderer
+ * that is in not in the skynet core package.
+ */
+ public static void mergeEditableDiffFiles(Artifact art1, String art1FileName, String art2FileName, String fileName, boolean show, boolean editable) throws Exception {
+ if (art1 == null) return;
+ RendererManager.merge(art1, null, AIFile.constructIFile(art1FileName), AIFile.constructIFile(art2FileName),
+ fileName.substring(fileName.lastIndexOf('\\') + 1), show);
+ }
+
+ public static Artifact getStartArtifact(Conflict conflict) {
+ try {
+ if (conflict.getSourceBranch() == null) return null;
+ TransactionId id = TransactionIdManager.getStartEndPoint(conflict.getSourceBranch()).getKey();
+ return ArtifactPersistenceManager.getInstance().getArtifact(conflict.getArtifact().getGuid(), id);
+
+ } catch (Exception ex) {
+ OseeLog.log(MergeUtility.class, Level.SEVERE, ex);
+ }
+ return null;
+ }
+
+ /**
+ * @param conflict
+ */
+ public static boolean showDeletedConflict(Conflict conflict, Shell shell) {
+ if (conflict.getConflictType().equals(ConflictType.ARTIFACT)) {
+ return showArtifactDeletedConflict(conflict, shell);
+ } else if (conflict.getConflictType().equals(ConflictType.ATTRIBUTE)) {
+ return showAttributeDeletedConflict(conflict, shell);
+ }
+ return false;
+ }
+
+ /**
+ * @param conflict
+ */
+ public static boolean showArtifactDeletedConflict(Conflict conflict, Shell shell) {
+ if (conflict.getConflictType().equals(ConflictType.ARTIFACT)) {
+ MessageDialog dialog =
+ new MessageDialog(shell, "Unresovable Conflict", null, ARTIFACT_DELETED_PROMPT, 1, new String[] {
+ "Revert Source Artifact", "Handle Later"}, 1);
+ if (dialog.open() == 0) {
+ try {
+ ((ArtifactConflict) conflict).revertSourceArtifact();
+ return true;
+ } catch (Exception ex) {
+ OseeLog.log(MergeUtility.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @param conflict
+ */
+ public static boolean showAttributeDeletedConflict(Conflict conflict, Shell shell) {
+ if (conflict.getConflictType().equals(ConflictType.ATTRIBUTE)) {
+ MessageDialog dialog =
+ new MessageDialog(shell, "Unresovable Conflict", null, ATTRIBUTE_DELETED_PROMPT, 1, new String[] {
+ "Revert Source Attribute", "Handle Later"}, 1);
+ if (dialog.open() == 0) {
+ try {
+ ((AttributeConflict) conflict).revertSourceAttribute();
+ return true;
+ } catch (Exception ex) {
+ OseeLog.log(MergeUtility.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ return false;
+ }
+
+ public static boolean showInformationalConflict(Shell shell) {
+ MessageDialog dialog =
+ new MessageDialog(shell, "Informational Conflict", null, INFORMATIONAL_CONFLICT, 2, new String[] {"OK"}, 1);
+ dialog.open();
+ return false;
+ }
+
+ public static void launchMerge(final AttributeConflict attributeConflict, Shell shell) {
+
+ try {
+ if (attributeConflict.getAttribute() instanceof WordAttribute) {
+ if (!attributeConflict.statusEditable()) {
+ MessageDialog.openInformation(shell, "Attention", COMMITED_PROMPT);
+ return;
+ }
+ String[] buttons;
+ if (attributeConflict.mergeEqualsSource() || attributeConflict.mergeEqualsDestination() || attributeConflict.statusUntouched()) {
+ buttons = new String[] {"Begin New Merge", "Show Help", "Cancel"};
+ } else {
+ buttons = new String[] {"Continue with last Merge", "Begin New Merge", "Show Help", "Cancel"};
+ }
+
+ MessageDialog dialog =
+ new MessageDialog(Display.getCurrent().getActiveShell().getShell(), "Merge Word Artifacts", null,
+ OPEN_MERGE_DIALOG, 4, buttons, 2);
+ int response = dialog.open();
+ if (buttons.length == 3) {
+ response++;
+ }
+ if (response == 2) {
+ PlatformUI.getWorkbench().getHelpSystem().displayHelpResource(
+ "/org.eclipse.osee.framework.ui.skynet/reference/Merge_Manager.html");
+ } else if (response == 1) {
+
+ Job job = new Job("Generate 3 Way Merge") {
+
+ @Override
+ protected IStatus run(final IProgressMonitor monitor) {
+ try {
+ int gamma = attributeConflict.getAttribute().getGammaId();
+ monitor.beginTask("Generate 3 Way Merge", 100);
+ VbaWordDiffGenerator generator = new VbaWordDiffGenerator();
+ generator.initialize(false, false);
+ monitor.worked(5);
+ String sourceChangeFile =
+ MergeUtility.CreateMergeDiffFile(getStartArtifact(attributeConflict),
+ attributeConflict.getSourceArtifact(), null);
+ monitor.worked(15);
+ String destChangeFile =
+ MergeUtility.CreateMergeDiffFile(getStartArtifact(attributeConflict),
+ attributeConflict.getDestArtifact(), null);
+ monitor.worked(15);
+ changeAuthorinWord("Source", sourceChangeFile, 2, 12345678, 55555555);
+ changeAuthorinWord("Destination", destChangeFile, 2, 56781234, 55555555);
+ monitor.worked(15);
+ MergeUtility.mergeEditableDiffFiles(
+ attributeConflict.getArtifact(),
+ sourceChangeFile,
+ destChangeFile,
+ "Source_Dest_Merge_" + attributeConflict.getArtifact().getSafeName() + "(" + attributeConflict.getArtifact().getGuid() + ")" + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml", false, true);
+
+ monitor.worked(40);
+ attributeConflict.markStatusToReflectEdit();
+
+ while (gamma == attributeConflict.getAttribute().getGammaId()) {
+ Thread.sleep(500);
+ }
+ monitor.done();
+ RendererManager.editInJob(attributeConflict.getArtifact());
+
+ } catch (Exception ex) {
+ OSEELog.logException(MergeView.class, ex, true);
+ }
+ monitor.done();
+ return Status.OK_STATUS;
+ }
+ };
+
+ Jobs.startJob(job);
+
+ } else if (response == 0) {
+ RendererManager.editInJob(attributeConflict.getArtifact());
+ attributeConflict.markStatusToReflectEdit();
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(MergeView.class, ex, true);
+ }
+ }
+
+ protected static void changeAuthorinWord(String newAuthor, String fileName, int revisionNumber, int rsidNumber, int baselineRsid) throws Exception {
+ String fileValue = AFile.readFile(fileName);
+
+ Matcher m = authorPattern.matcher(fileValue);
+ while (m.find()) {
+ String name = m.group();
+ fileValue = fileValue.replace(name, "aml:author=\"" + newAuthor + "\"");
+ }
+
+ m = findSetRsids.matcher(fileValue);
+ while (m.find()) {
+ String rev = m.group();
+ fileValue = fileValue.replace(rev, "wsp:rsidR=\"" + baselineRsid + "\"");
+ }
+ m = findSetRsidRPR.matcher(fileValue);
+ while (m.find()) {
+ String rev = m.group();
+ fileValue = fileValue.replace(rev, "wsp:rsidRPr=\"" + baselineRsid + "\"");
+ }
+ m = findSetRsidP.matcher(fileValue);
+ while (m.find()) {
+ String rev = m.group();
+ fileValue = fileValue.replace(rev, "wsp:rsidP=\"" + baselineRsid + "\"");
+ }
+ m = findSetRsidRDefault.matcher(fileValue);
+ while (m.find()) {
+ String rev = m.group();
+ fileValue = fileValue.replace(rev, "wsp:rsidRDefault=\"" + baselineRsid + "\"");
+ }
+
+ StringBuilder builder = new StringBuilder();
+ String[] pieces = fileValue.split("</?aml:annotation");
+ int position = 0;
+ for (String string : pieces) {
+ if (position != 0) {
+ if (position % 2 == 1) {
+ if (string.contains("w:type=\"Word.Insertion")) {
+ m = findSetRsids.matcher(string);
+ while (m.find()) {
+ String rev = m.group();
+ string = string.replace(rev, "wsp:rsidR=\"" + rsidNumber + "\"");
+ }
+ m = findSetRsidP.matcher(string);
+ while (m.find()) {
+ String rev = m.group();
+ string = string.replace(rev, "wsp:rsidP=\"" + rsidNumber + "\"");
+ }
+ m = findSetRsidRPR.matcher(string);
+ while (m.find()) {
+ String rev = m.group();
+ string = string.replace(rev, "wsp:rsidRPr=\"" + rsidNumber + "\"");
+ }
+ }
+ builder.append("<aml:annotation");
+ } else {
+ if (!amlTerminatingDefault.matcher(string).find()) {
+ builder.append("</aml:annotation");
+ } else {
+ builder.append("<aml:annotation");
+ }
+ }
+
+ }
+ builder.append(string);
+ if (!amlTerminatingDefault.matcher(string).find()) {
+ position++;
+ }
+ }
+
+ fileValue = builder.toString();
+
+ m = rsidRootPattern.matcher(fileValue);
+ while (m.find()) {
+ String rev = m.group();
+ fileValue = fileValue.replace(rev, "<wsp:rsid wsp:val=\"" + rsidNumber + "\"/></wsp:rsids>");
+ }
+ m = rsidRootPattern.matcher(fileValue);
+ while (m.find()) {
+ String rev = m.group();
+ fileValue = fileValue.replace(rev, "<wsp:rsid wsp:val=\"" + baselineRsid + "\"/></wsp:rsids>");
+ }
+
+ AFile.writeFile(fileName, fileValue);
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeView.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeView.java
new file mode 100644
index 00000000000..953fae6e605
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeView.java
@@ -0,0 +1,938 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.conflict.ArtifactConflict;
+import org.eclipse.osee.framework.skynet.core.conflict.AttributeConflict;
+import org.eclipse.osee.framework.skynet.core.conflict.Conflict;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.revision.ConflictManagerInternal;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionId;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionIdManager;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.AbstractSelectionEnabledHandler;
+import org.eclipse.osee.framework.ui.plugin.util.Commands;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchView;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetViews;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @see ViewPart
+ * @author Donald G. Dunne
+ */
+public class MergeView extends ViewPart implements IActionable, IBranchEventListener, IFrameworkTransactionEventListener {
+ private static final AccessControlManager accessControlManager = AccessControlManager.getInstance();
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeView";
+ public static String HELP_CONTEXT_ID = "Merge_Manager_View";
+ private XMergeViewer xMergeViewer;
+ private Conflict[] conflicts;
+ private static final boolean DEBUG =
+ "TRUE".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.osee.framework.ui.skynet/debug/Merge"));
+ private IHandlerService handlerService;
+ private Branch sourceBranch;
+ private Branch destBranch;
+ private TransactionId transactionId;
+ private TransactionId commitTrans;
+ private boolean showConflicts;
+
+ /**
+ * @author Donald G. Dunne
+ */
+ public MergeView() {
+ }
+
+ public static void openView(final Branch sourceBranch, final Branch destBranch, final TransactionId tranId) {
+ if (sourceBranch == null && destBranch == null && tranId == null) throw new IllegalArgumentException(
+ "Branch's and Transaction ID can't be null");
+ if (DEBUG && sourceBranch != null && destBranch != null) {
+ System.out.println(String.format("Openeing Merge View with Source Branch: %s and Destination Branch: %s",
+ sourceBranch.getBranchName(), destBranch.getBranchName()));
+ }
+ openViewUpon(sourceBranch, destBranch, tranId, null, true);
+ }
+
+ public static void openView(final TransactionId commitTrans) {
+ if (commitTrans == null) throw new IllegalArgumentException("Commit Transaction ID can't be null");
+ if (DEBUG) {
+ System.out.println(String.format("Openeing Merge View with Transaction ID: %d ",
+ commitTrans.getTransactionNumber()));
+ }
+ openViewUpon(null, null, null, commitTrans, true);
+ }
+
+ private static void openViewUpon(final Branch sourceBranch, final Branch destBranch, final TransactionId tranId, final TransactionId commitTrans, final boolean showConflicts) {
+ Job job = new Job("Open Merge View") {
+
+ @Override
+ protected IStatus run(final IProgressMonitor monitor) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ try {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ MergeView mergeView =
+ (MergeView) page.showView(
+ MergeView.VIEW_ID,
+ String.valueOf(sourceBranch != null ? sourceBranch.getBranchId() * 100000 + destBranch.getBranchId() : commitTrans.getTransactionNumber()),
+ IWorkbenchPage.VIEW_VISIBLE);
+ mergeView.showConflicts = showConflicts;
+ mergeView.explore(sourceBranch, destBranch, tranId, commitTrans, showConflicts);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+
+ monitor.done();
+ return Status.OK_STATUS;
+ }
+ };
+
+ Jobs.startJob(job);
+ }
+
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ super.dispose();
+ }
+
+ @Override
+ public void setFocus() {
+ }
+
+ /*
+ * @see IWorkbenchPart#createPartControl(Composite)
+ */
+ @Override
+ public void createPartControl(Composite parent) {
+ /*
+ * Create a grid layout object so the text and treeviewer are layed out the way I want.
+ */
+
+ PlatformUI.getWorkbench().getService(IHandlerService.class);
+ handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
+
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 0;
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ parent.setLayout(layout);
+ parent.setLayoutData(new GridData(GridData.FILL_BOTH));
+ xMergeViewer = new XMergeViewer();
+ xMergeViewer.setDisplayLabel(false);
+ xMergeViewer.createWidgets(parent, 1);
+
+ if (conflicts != null) xMergeViewer.setConflicts(conflicts);
+
+ MenuManager menuManager = new MenuManager();
+ menuManager.setRemoveAllWhenShown(true);
+ menuManager.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ MenuManager menuManager = (MenuManager) manager;
+ fillPopupMenu(menuManager);
+ }
+
+ private void fillPopupMenu(MenuManager menuManager) {
+ addSourceBranchDefaultMenuItem(menuManager);
+ addDestBranchDefaultMenuItem(menuManager);
+ menuManager.add(new Separator());
+ addEditArtifactMenuItem(menuManager);
+ addMergeMenuItem(menuManager);
+ menuManager.add(new Separator());
+ addPreviewMenuItem(menuManager);
+ addDiffMenuItem(menuManager);
+ menuManager.add(new Separator());
+ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+ });
+
+ xMergeViewer.getXViewer().getTree().setMenu(menuManager.createContextMenu(xMergeViewer.getXViewer().getTree()));
+
+ createSourceBranchDefaultMenuItem(menuManager);
+ createDestBranchDefaultMenuItem(menuManager);
+ menuManager.add(new Separator());
+ createEditArtifactMenuItem(menuManager);
+ createMergeMenuItem(menuManager);
+ menuManager.add(new Separator());
+ createPreviewMenuItem(menuManager);
+ createDiffMenuItem(menuManager);
+ menuManager.add(new Separator());
+ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+
+ OseeContributionItem.addTo(this, true);
+ getSite().registerContextMenu("org.eclipse.osee.framework.ui.skynetd.widgets.xmerge.MergeView", menuManager,
+ xMergeViewer.getXViewer());
+
+ getSite().setSelectionProvider(xMergeViewer.getXViewer());
+ SkynetGuiPlugin.getInstance().setHelp(parent, HELP_CONTEXT_ID);
+
+ OseeEventManager.addListener(this);
+ }
+
+ /**
+ * @param menuManager
+ */
+ private void addPreviewMenuItem(MenuManager menuManager) {
+ MenuManager subMenuManager = new MenuManager("Preview", "previewTransaction");
+ menuManager.add(subMenuManager);
+ addPreviewItems(subMenuManager, "Preview Source Artifact");
+ addPreviewItems(subMenuManager, "Preview Destination Artifact");
+ addPreviewItems(subMenuManager, "Preview Merge Artifact");
+ }
+
+ /**
+ * @param menuManager
+ */
+ private void createPreviewMenuItem(MenuManager menuManager) {
+ MenuManager subMenuManager = new MenuManager("Preview", "previewTransaction");
+ menuManager.add(subMenuManager);
+ createPreviewItems(subMenuManager, new PreviewHandler(menuManager, 1), "Preview Source Artifact");
+ createPreviewItems(subMenuManager, new PreviewHandler(menuManager, 2), "Preview Destination Artifact");
+ createPreviewItems(subMenuManager, new PreviewHandler(menuManager, 3), "Preview Merge Artifact");
+ }
+
+ /**
+ * @param subMenuManager
+ */
+ private String addPreviewItems(MenuManager subMenuManager, String command) {
+ CommandContributionItem previewCommand =
+ Commands.getLocalCommandContribution(getSite(), subMenuManager.getId() + command, command, null, null,
+ SkynetGuiPlugin.getInstance().getImageDescriptor("preview_artifact.gif"), null, null, null);
+ subMenuManager.add(previewCommand);
+ return previewCommand.getId();
+ }
+
+ /**
+ * @param subMenuManager
+ */
+ private void createPreviewItems(MenuManager subMenuManager, PreviewHandler handler, String command) {
+ handlerService.activateHandler(addPreviewItems(subMenuManager, command), handler);
+ }
+
+ /**
+ * @param menuManager
+ */
+ private void addDiffMenuItem(MenuManager menuManager) {
+ MenuManager subMenuManager = new MenuManager("Differences", "diffTransaction");
+ menuManager.add(subMenuManager);
+ addDiffItems(subMenuManager, "Show Source Branch Differences");
+ addDiffItems(subMenuManager, "Show Destination Branch Differences");
+ addDiffItems(subMenuManager, "Show Source/Destination Differences");
+ addDiffItems(subMenuManager, "Show Source/Merge Differences");
+ addDiffItems(subMenuManager, "Show Destination/Merge Differences");
+ }
+
+ /**
+ * @param menuManager
+ */
+ private void createDiffMenuItem(MenuManager menuManager) {
+ MenuManager subMenuManager = new MenuManager("Differences", "diffTransaction");
+ menuManager.add(subMenuManager);
+ createDiffItems(subMenuManager, new DiffHandler(menuManager, 1), "Show Source Branch Differences");
+ createDiffItems(subMenuManager, new DiffHandler(menuManager, 2), "Show Destination Branch Differences");
+ createDiffItems(subMenuManager, new DiffHandler(menuManager, 3), "Show Source/Destination Differences");
+ createDiffItems(subMenuManager, new DiffHandler(menuManager, 4), "Show Source/Merge Differences");
+ createDiffItems(subMenuManager, new DiffHandler(menuManager, 5), "Show Destination/Merge Differences");
+ }
+
+ /**
+ * @param subMenuManager
+ */
+ private String addDiffItems(MenuManager subMenuManager, String command) {
+ CommandContributionItem diffCommand =
+ Commands.getLocalCommandContribution(getSite(), subMenuManager.getId() + command, command, null, null,
+ null, null, null, null);
+ subMenuManager.add(diffCommand);
+ return diffCommand.getId();
+ }
+
+ /**
+ * @param subMenuManager
+ */
+ private void createDiffItems(MenuManager subMenuManager, DiffHandler handler, String command) {
+ handlerService.activateHandler(addDiffItems(subMenuManager, command), handler);
+ }
+
+ /**
+ * @param menuManager
+ */
+ private String addDestBranchDefaultMenuItem(MenuManager menuManager) {
+ CommandContributionItem setDestBranchDefaultCommand;
+ if (conflicts != null && conflicts.length != 0 && conflicts[0].getDestBranch() == BranchManager.getDefaultBranch()) {
+ setDestBranchDefaultCommand =
+ Commands.getLocalCommandContribution(getSite(), "setDestBranchDefaultCommand",
+ "Set Destination as Default Branch", null, null, SkynetGuiPlugin.getInstance().getImageDescriptor(
+ "chkbox_enabled.gif"), "D", null, "branch_manager_default_branch_menu");
+ } else {
+ setDestBranchDefaultCommand =
+ Commands.getLocalCommandContribution(getSite(), "setDestBranchDefaultCommand",
+ "Set Destination as Default Branch", null, null, null, "D", null,
+ "branch_manager_default_branch_menu");
+
+ }
+ menuManager.add(setDestBranchDefaultCommand);
+ return setDestBranchDefaultCommand.getId();
+ }
+
+ /**
+ * @param menuManager
+ */
+ private void createDestBranchDefaultMenuItem(MenuManager menuManager) {
+
+ handlerService.activateHandler(addDestBranchDefaultMenuItem(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ BranchView branchView = BranchView.getBranchView();
+ if (branchView != null) {
+ branchView.setDefaultBranch(conflicts[0].getDestBranch());
+ } else {
+ try {
+ BranchManager.setDefaultBranch(conflicts[0].getDestBranch());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ if (conflicts == null || conflicts.length == 0) return false;
+ return conflicts[0].getDestBranch() != BranchManager.getDefaultBranch();
+ }
+ });
+ }
+
+ /**
+ * @param menuManager
+ */
+ private String addEditArtifactMenuItem(MenuManager menuManager) {
+ CommandContributionItem editArtifactCommand;
+ editArtifactCommand =
+ Commands.getLocalCommandContribution(getSite(), "editArtifactCommand", "Edit Merge Artifact", null, null,
+ null, "E", null, "edit_Merge_Artifact");
+ menuManager.add(editArtifactCommand);
+ return editArtifactCommand.getId();
+ }
+
+ /**
+ * @param menuManager
+ */
+ private void createEditArtifactMenuItem(MenuManager menuManager) {
+
+ handlerService.activateHandler(addEditArtifactMenuItem(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ private AttributeConflict attributeConflict;
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (attributeConflict != null) {
+ try {
+ if (MergeUtility.okToOverwriteEditedValue(attributeConflict,
+ Display.getCurrent().getActiveShell().getShell(), false)) {
+ RendererManager.editInJob(attributeConflict.getArtifact());
+ attributeConflict.markStatusToReflectEdit();
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(MergeView.class, ex, true);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ List<Conflict> conflicts = xMergeViewer.getSelectedConflicts();
+ attributeConflict = null;
+ if (conflicts == null || conflicts.size() != 1 || !(conflicts.get(0) instanceof AttributeConflict) || !conflicts.get(
+ 0).statusEditable()) return false;
+ attributeConflict = ((AttributeConflict) conflicts.get(0));
+ return attributeConflict.isWordAttribute();
+ }
+ });
+ }
+
+ /**
+ * @param menuManager
+ */
+ private String addMergeMenuItem(MenuManager menuManager) {
+ CommandContributionItem mergeArtifactCommand;
+ mergeArtifactCommand =
+ Commands.getLocalCommandContribution(getSite(), "mergeArtifactCommand",
+ "Generate Three Way Merge (Developmental)", null, null, null, "E", null,
+ "Merge_Source_Destination_Artifact");
+ menuManager.add(mergeArtifactCommand);
+ return mergeArtifactCommand.getId();
+ }
+
+ /**
+ * @param menuManager
+ */
+ private void createMergeMenuItem(MenuManager menuManager) {
+
+ handlerService.activateHandler(addMergeMenuItem(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ private AttributeConflict attributeConflict;
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (attributeConflict != null) {
+ MergeUtility.launchMerge(attributeConflict, Display.getCurrent().getActiveShell().getShell());
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ List<Conflict> conflicts = xMergeViewer.getSelectedConflicts();
+ attributeConflict = null;
+ if (conflicts == null || conflicts.size() != 1 || !(conflicts.get(0) instanceof AttributeConflict) || !conflicts.get(
+ 0).statusEditable()) return false;
+ attributeConflict = ((AttributeConflict) conflicts.get(0));
+ return attributeConflict.isWordAttribute();
+ }
+ });
+ }
+
+ /**
+ * @param menuManager
+ */
+ private String addSourceBranchDefaultMenuItem(MenuManager menuManager) {
+ CommandContributionItem setSourceBranchDefaultCommand;
+ if (conflicts != null && conflicts.length != 0 && conflicts[0].getSourceBranch() == BranchManager.getDefaultBranch()) {
+ setSourceBranchDefaultCommand =
+ Commands.getLocalCommandContribution(getSite(), "setSourceBranchDefaultCommand",
+ "Set Source as Default Branch", null, null, SkynetGuiPlugin.getInstance().getImageDescriptor(
+ "chkbox_enabled.gif"), "S", null, "branch_manager_default_branch_menu");
+ } else {
+ setSourceBranchDefaultCommand =
+ Commands.getLocalCommandContribution(getSite(), "setSourceBranchDefaultCommand",
+ "Set Source as Default Branch", null, null, null, "S", null, "branch_manager_default_branch_menu");
+ }
+ menuManager.add(setSourceBranchDefaultCommand);
+ return setSourceBranchDefaultCommand.getId();
+ }
+
+ /**
+ * @param menuManager
+ */
+ private void createSourceBranchDefaultMenuItem(MenuManager menuManager) {
+
+ handlerService.activateHandler(addSourceBranchDefaultMenuItem(menuManager),
+
+ new AbstractSelectionEnabledHandler(menuManager) {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ BranchView branchView = BranchView.getBranchView();
+ if (branchView != null) {
+ branchView.setDefaultBranch(conflicts[0].getSourceBranch());
+ } else {
+ try {
+ BranchManager.setDefaultBranch(conflicts[0].getSourceBranch());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ if (conflicts == null || conflicts.length == 0 || conflicts[0].getSourceBranch() == null) return false;
+ return conflicts[0].getSourceBranch() != BranchManager.getDefaultBranch();
+ }
+ });
+ }
+
+ public void explore(final Branch sourceBranch, final Branch destBranch, final TransactionId transactionId, final TransactionId commitTrans, boolean showConflicts) {
+ this.sourceBranch = sourceBranch;
+ this.destBranch = destBranch;
+ this.transactionId = transactionId;
+ this.commitTrans = commitTrans;
+ try {
+ xMergeViewer.setInputData(sourceBranch, destBranch, transactionId, this, commitTrans, showConflicts);
+ if (sourceBranch != null) {
+ setPartName("Merge Manager: " + sourceBranch.getBranchShortName() + " <=> " + destBranch.getBranchShortName());
+ } else if (commitTrans != null) {
+ setPartName("Merge Manager: " + commitTrans.getTransactionNumber());
+ } else {
+ setPartName("Merge Manager");
+ }
+
+ } catch (Exception ex) {
+ OSEELog.logException(MergeView.class, ex, true);
+ }
+ }
+
+ public void setConflicts(Conflict[] conflicts) {
+ this.conflicts = conflicts;
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ @Override
+ public void init(IViewSite site, IMemento memento) throws PartInitException {
+ super.init(site, memento);
+ try {
+ Integer sourceBranchId = null;
+ Integer destBranchId = null;
+
+ if (memento != null) {
+ memento = memento.getChild(INPUT);
+ if (memento != null) {
+ if (SkynetViews.isSourceValid(memento)) {
+
+ Integer commitTransaction = memento.getInteger(COMMIT_NUMBER);
+ if (commitTransaction != null) {
+ openViewUpon(null, null, null, TransactionIdManager.getTransactionId(commitTransaction), false);
+ return;
+ }
+ sourceBranchId = memento.getInteger(SOURCE_BRANCH_ID);
+ final Branch sourceBranch = BranchManager.getBranch(sourceBranchId);
+ if (sourceBranch == null) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING,
+ "Merge View can't init due to invalid source branch id " + sourceBranchId);
+ xMergeViewer.setLabel("Could not restore this Merge View");
+ return;
+ }
+ destBranchId = memento.getInteger(DEST_BRANCH_ID);
+ final Branch destBranch = BranchManager.getBranch(destBranchId);
+ if (destBranch == null) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING,
+ "Merge View can't init due to invalid destination branch id " + sourceBranchId);
+ xMergeViewer.setLabel("Could not restore this Merge View");
+ return;
+ }
+ try {
+ TransactionId transactionId =
+ TransactionIdManager.getTransactionId(memento.getInteger(TRANSACTION_NUMBER));
+ openViewUpon(sourceBranch, destBranch, transactionId, null, false);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING,
+ "Merge View can't init due to invalid transaction id " + transactionId);
+ xMergeViewer.setLabel("Could not restore this Merge View due to invalid transaction id " + transactionId);
+ return;
+ }
+ } else {
+ SkynetViews.closeView(VIEW_ID, getViewSite().getSecondaryId());
+ }
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, "Merge View error on init", ex);
+ }
+ }
+
+ private static final String INPUT = "input";
+ private static final String SOURCE_BRANCH_ID = "sourceBranchId";
+ private static final String DEST_BRANCH_ID = "destBranchId";
+ private static final String TRANSACTION_NUMBER = "transactionNumber";
+ private static final String COMMIT_NUMBER = "commitTransactionNumber";
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
+ */
+ @Override
+ public void saveState(IMemento memento) {
+ super.saveState(memento);
+ memento = memento.createChild(INPUT);
+ if (sourceBranch != null) {
+ memento.putInteger(SOURCE_BRANCH_ID, sourceBranch.getBranchId());
+ memento.putInteger(DEST_BRANCH_ID, destBranch.getBranchId());
+ memento.putInteger(TRANSACTION_NUMBER, transactionId.getTransactionNumber());
+ } else if (commitTrans != null) {
+ memento.putInteger(COMMIT_NUMBER, commitTrans.getTransactionNumber());
+ }
+
+ if (sourceBranch != null || commitTrans != null) {
+ SkynetViews.addDatabaseSourceId(memento);
+ }
+ }
+
+ private class PreviewHandler extends AbstractSelectionEnabledHandler {
+ private final int partToPreview;
+ private List<Artifact> artifacts;
+
+ public PreviewHandler(MenuManager menuManager, int partToPreview) {
+ super(menuManager);
+ this.partToPreview = partToPreview;
+ }
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (!artifacts.isEmpty()) {
+ try {
+ RendererManager.previewInJob(artifacts);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ artifacts = new LinkedList<Artifact>();
+ List<Conflict> conflicts = xMergeViewer.getSelectedConflicts();
+ for (Conflict conflict : conflicts) {
+ try {
+ switch (partToPreview) {
+ case 1:
+ if (conflict.getSourceArtifact() != null) {
+ artifacts.add(conflict.getSourceArtifact());
+ }
+ break;
+ case 2:
+ if (conflict.getDestArtifact() != null) {
+ artifacts.add(conflict.getDestArtifact());
+ }
+ break;
+ case 3:
+ if (conflict.statusNotResolvable() || conflict.statusInformational()) return false;
+ if (conflict.getArtifact() != null) {
+ artifacts.add(conflict.getArtifact());
+ }
+ break;
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(MergeView.class, ex, true);
+ }
+ }
+
+ return accessControlManager.checkObjectListPermission(artifacts, PermissionEnum.READ);
+ }
+ }
+
+ private class DiffHandler extends AbstractSelectionEnabledHandler {
+ private final int diffToShow;
+ private AttributeConflict attributeConflict;
+ private ArtifactConflict artifactConflict;
+ private List<Artifact> artifacts;
+
+ public DiffHandler(MenuManager menuManager, int diffToShow) {
+ super(menuManager);
+ this.diffToShow = diffToShow;
+ }
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ try {
+ if (attributeConflict != null) {
+ switch (diffToShow) {
+ case 1:
+ MergeUtility.showCompareFile(
+ MergeUtility.getStartArtifact(attributeConflict),
+ attributeConflict.getSourceArtifact(),
+ "Source_Diff_For_" + attributeConflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ break;
+ case 2:
+ MergeUtility.showCompareFile(
+ MergeUtility.getStartArtifact(attributeConflict),
+ attributeConflict.getDestArtifact(),
+ "Destination_Diff_For_" + attributeConflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ break;
+ case 3:
+ MergeUtility.showCompareFile(
+ attributeConflict.getSourceArtifact(),
+ attributeConflict.getDestArtifact(),
+ "Source_Destination_Diff_For_" + attributeConflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ break;
+ case 4:
+ if (attributeConflict.wordMarkupPresent()) {
+ throw new OseeCoreException(AttributeConflict.DIFF_MERGE_MARKUP);
+ }
+ MergeUtility.showCompareFile(
+ attributeConflict.getSourceArtifact(),
+ attributeConflict.getArtifact(),
+ "Source_Merge_Diff_For_" + attributeConflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ break;
+ case 5:
+ if (attributeConflict.wordMarkupPresent()) {
+ throw new OseeCoreException(AttributeConflict.DIFF_MERGE_MARKUP);
+ }
+ MergeUtility.showCompareFile(
+ attributeConflict.getDestArtifact(),
+ attributeConflict.getArtifact(),
+ "Destination_Merge_Diff_For_" + attributeConflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ break;
+ }
+ } else if (artifactConflict != null) {
+ if (diffToShow == 1) {
+ MergeUtility.showCompareFile(
+ artifactConflict.getSourceArtifact(),
+ MergeUtility.getStartArtifact(artifactConflict),
+ "Source_Diff_For_" + artifactConflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ }
+ if (diffToShow == 2) {
+ MergeUtility.showCompareFile(
+ artifactConflict.getDestArtifact(),
+ MergeUtility.getStartArtifact(artifactConflict),
+ "Destination_Diff_For_" + artifactConflict.getArtifact().getSafeName() + (new Date()).toString().replaceAll(
+ ":", ";") + ".xml");
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(MergeView.class, ex, true);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEnabledWithException() throws OseeCoreException {
+ artifacts = new LinkedList<Artifact>();
+ List<Conflict> conflicts = xMergeViewer.getSelectedConflicts();
+ if (conflicts.size() != 1) return false;
+ if (conflicts.get(0) instanceof AttributeConflict) {
+ attributeConflict = (AttributeConflict) conflicts.get(0);
+ artifactConflict = null;
+ try {
+ switch (diffToShow) {
+ case 1:
+ if (attributeConflict.getSourceArtifact() != null && MergeUtility.getStartArtifact(attributeConflict) != null) {
+ artifacts.add(attributeConflict.getSourceArtifact());
+ artifacts.add(MergeUtility.getStartArtifact(attributeConflict));
+ } else
+ return false;
+ break;
+ case 2:
+ if (attributeConflict.getDestArtifact() != null && MergeUtility.getStartArtifact(attributeConflict) != null) {
+ artifacts.add(attributeConflict.getDestArtifact());
+ artifacts.add(MergeUtility.getStartArtifact(attributeConflict));
+ } else
+ return false;
+ break;
+ case 3:
+ if (attributeConflict.getDestArtifact() != null && attributeConflict.getSourceArtifact() != null) {
+ artifacts.add(attributeConflict.getSourceArtifact());
+ artifacts.add(attributeConflict.getDestArtifact());
+ } else
+ return false;
+ break;
+ case 4:
+ if (attributeConflict.getSourceArtifact() != null && attributeConflict.getArtifact() != null) {
+ artifacts.add(attributeConflict.getSourceArtifact());
+ artifacts.add(attributeConflict.getArtifact());
+ } else
+ return false;
+ break;
+ case 5:
+ if (attributeConflict.getDestArtifact() != null && attributeConflict.getArtifact() != null) {
+ artifacts.add(attributeConflict.getDestArtifact());
+ artifacts.add(attributeConflict.getArtifact());
+ } else
+ return false;
+ break;
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(MergeView.class, ex, true);
+ }
+
+ } else if (conflicts.get(0) instanceof ArtifactConflict) {
+ attributeConflict = null;
+ artifactConflict = (ArtifactConflict) conflicts.get(0);
+ try {
+ switch (diffToShow) {
+ case 1:
+ if (artifactConflict.getSourceArtifact() != null && conflicts.get(0).statusNotResolvable() && MergeUtility.getStartArtifact(artifactConflict) != null) {
+ artifacts.add(artifactConflict.getSourceArtifact());
+ artifacts.add(MergeUtility.getStartArtifact(artifactConflict));
+ } else
+ return false;
+ break;
+ case 2:
+ if (artifactConflict.getDestArtifact() != null && conflicts.get(0).statusInformational() && MergeUtility.getStartArtifact(artifactConflict) != null) {
+ artifacts.add(artifactConflict.getDestArtifact());
+ artifacts.add(MergeUtility.getStartArtifact(artifactConflict));
+ } else
+ return false;
+ break;
+ case 3:
+ return false;
+ case 4:
+ return false;
+ case 5:
+ return false;
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(MergeView.class, ex, true);
+ }
+
+ }
+ return accessControlManager.checkObjectListPermission(artifacts, PermissionEnum.READ);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, int)
+ */
+ @Override
+ public void handleBranchEvent(Sender sender, BranchEventType branchModType, int branchId) {
+ if (sourceBranch != null && destBranch != null && (sourceBranch.getBranchId() == branchId || destBranch.getBranchId() == branchId)) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ if (xMergeViewer != null && xMergeViewer.getXViewer().getTree().isDisposed() != true) {
+ xMergeViewer.refresh();
+ }
+ }
+ });
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
+ */
+ @Override
+ public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.skynet.core.eventx.IFrameworkTransactionEventListener#handleFrameworkTransactionEvent(org.eclipse.osee.framework.ui.plugin.event.Sender.Source, org.eclipse.osee.framework.skynet.core.eventx.FrameworkTransactionData)
+ */
+ @Override
+ public void handleFrameworkTransactionEvent(final Sender sender, final FrameworkTransactionData transData) throws OseeCoreException {
+ try {
+ if (sourceBranch == null || destBranch == null || (sourceBranch.getBranchId() != transData.getBranchId() && destBranch.getBranchId() != transData.getBranchId() && ConflictManagerInternal.getMergeBranchId(
+ sourceBranch.getBranchId(), destBranch.getBranchId()) != transData.getBranchId())) {
+ return;
+ }
+ } catch (OseeCoreException ex) {
+ //ignore the exception for an event don't want them poping up on people for no reason
+ }
+ final MergeView mergeView = this;
+ Displays.ensureInDisplayThread(new Runnable() {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ if (xMergeViewer.getXViewer() == null || xMergeViewer.getXViewer().getTree() == null || xMergeViewer.getXViewer().getTree().isDisposed()) return;
+ FrameworkTransactionData transData1 = transData;
+ for (Artifact artifact : transData.cacheChangedArtifacts) {
+ try {
+ Branch branch = artifact.getBranch();
+ for (Conflict conflict : conflicts) {
+ if ((artifact.equals(conflict.getSourceArtifact()) && branch.equals(conflict.getSourceBranch())) || (artifact.equals(conflict.getDestArtifact()) && branch.equals(conflict.getDestBranch()))) {
+ xMergeViewer.setInputData(sourceBranch, destBranch, transactionId, mergeView, commitTrans,
+ "Source Artifact Changed", showConflicts);
+ if (artifact.equals(conflict.getSourceArtifact()) & sender.isLocal()) {
+ new MessageDialog(
+ Display.getDefault().getActiveShell().getShell(),
+ "Modifying Source artifact while merging",
+ null,
+ "Typically changes done while merging should be done on the merge branch. You should not normally merge on the source branch.",
+ 2, new String[] {"OK"}, 1).open();
+ }
+ return;
+ } else if (artifact.equals(conflict.getArtifact())) {
+ xMergeViewer.refresh();
+ }
+ }
+ if (conflicts.length > 0 && (branch.equals(conflicts[0].getSourceBranch()) || branch.equals(conflicts[0].getDestBranch()))) {
+ xMergeViewer.setInputData(
+ sourceBranch,
+ destBranch,
+ transactionId,
+ mergeView,
+ commitTrans,
+ branch.equals(conflicts[0].getSourceBranch()) ? "Source Branch Changed" : "Destination Branch Changed",
+ showConflicts);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ if (transData.cacheChangedArtifacts.isEmpty() || !transData.cacheDeletedArtifacts.isEmpty()) {
+ Branch branch = transData.cacheDeletedArtifacts.iterator().next().getBranch();
+ if (conflicts.length > 0 && (branch.equals(conflicts[0].getSourceBranch()) || branch.equals(conflicts[0].getDestBranch()))) {
+ xMergeViewer.setInputData(
+ sourceBranch,
+ destBranch,
+ transactionId,
+ mergeView,
+ commitTrans,
+ branch.equals(conflicts[0].getSourceBranch()) ? "Source Branch Changed" : "Destination Branch Changed",
+ showConflicts);
+ }
+ }
+ }
+ });
+
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewer.java
new file mode 100644
index 00000000000..1355192931e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewer.java
@@ -0,0 +1,212 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.osee.framework.core.enums.ConflictType;
+import org.eclipse.osee.framework.db.connection.exception.MergeChangesInArtifactException;
+import org.eclipse.osee.framework.skynet.core.conflict.Conflict;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.mergeWizard.ConflictResolutionWizard;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * @author Donald G. Dunne
+ * @author Theron Virgin
+ */
+public class MergeXViewer extends XViewer {
+
+ private final XMergeViewer xMergeViewer;
+ private Conflict[] conflicts;
+ private ConflictResolutionWizard conWizard;
+ private XMergeLabelProvider labelProvider;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public MergeXViewer(Composite parent, int style, XMergeViewer xMergeViewer) {
+ super(parent, style, new MergeXViewerFactory());
+ this.xMergeViewer = xMergeViewer;
+ }
+
+ @Override
+ protected void createSupportWidgets(Composite parent) {
+ super.createSupportWidgets(parent);
+ createMenuActions();
+ }
+
+ Action openMergeViewAction;
+
+ public void createMenuActions() {
+ MenuManager mm = getMenuManager();
+ mm.createContextMenu(getControl());
+ mm.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ updateMenuActions();
+ }
+ });
+
+ openMergeViewAction = new Action("Open Merge View", Action.AS_PUSH_BUTTON) {
+ @Override
+ public void run() {
+ AWorkbench.popup("ERROR", "Not implemented yet");
+ }
+ };
+ }
+
+ public void updateEditMenuActions() {
+ MenuManager mm = getMenuManager();
+
+ // EDIT MENU BLOCK
+ mm.insertBefore(MENU_GROUP_PRE, openMergeViewAction);
+ openMergeViewAction.setEnabled(true);
+
+ }
+
+ @Override
+ public boolean isColumnMultiEditEnabled() {
+ return true;
+ }
+
+ public void updateMenuActions() {
+ MenuManager mm = getMenuManager();
+
+ updateEditMenuActions();
+
+ mm.insertBefore(MENU_GROUP_PRE, new Separator());
+ }
+
+ public void setConflicts(Conflict[] conflicts) {
+ this.conflicts = conflicts;
+ setInput(conflicts);
+ }
+
+ /**
+ * Release resources
+ */
+ @Override
+ public void dispose() {
+ getLabelProvider().dispose();
+ }
+
+ /**
+ * @return the xUserRoleViewer
+ */
+ public XMergeViewer getXUserRoleViewer() {
+ return xMergeViewer;
+ }
+
+ @Override
+ public void resetDefaultSorter() {
+ setSorter(new MergeXViewerSorter(this, labelProvider));
+ }
+
+ /**
+ * @return the transactionArtifactChanges
+ */
+ public Conflict[] getTransactionArtifactChanges() {
+ return conflicts;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer#handleLeftClickInIconArea(org.eclipse.swt.widgets.TreeColumn,
+ * org.eclipse.swt.widgets.TreeItem)
+ */
+ @Override
+ public boolean handleLeftClickInIconArea(TreeColumn treeColumn, TreeItem treeItem) {
+ Conflict conflict = (Conflict) treeItem.getData();
+ Shell shell = Display.getCurrent().getActiveShell().getShell();
+ if (conflict.statusCommitted()) {
+ return super.handleLeftClickInIconArea(treeColumn, treeItem);
+ }
+ try {
+ if (treeColumn.getText().equals(MergeXViewerFactory.Source.getName())) {
+ if (conflict.statusNotResolvable()) {
+ MergeUtility.showDeletedConflict(conflict, shell);
+ } else if (conflict.statusInformational()) {
+ MergeUtility.showInformationalConflict(shell);
+ } else {
+ MergeUtility.setToSource(conflict, shell, true);
+ }
+ } else if (treeColumn.getText().equals(MergeXViewerFactory.Destination.getName())) {
+ if (conflict.statusNotResolvable()) {
+ MergeUtility.showDeletedConflict(conflict, shell);
+ } else if (conflict.statusInformational()) {
+ MergeUtility.showInformationalConflict(shell);
+ } else {
+ MergeUtility.setToDest(conflict, shell, true);
+ }
+ } else if (treeColumn.getText().equals(MergeXViewerFactory.Merged.getName())) {
+ if (conflict.statusNotResolvable()) {
+ MergeUtility.showDeletedConflict(conflict, shell);
+ } else if (!(conflict.getConflictType().equals(ConflictType.ARTIFACT))) {
+ conWizard = new ConflictResolutionWizard(conflict);
+ WizardDialog dialog = new WizardDialog(shell, conWizard);
+ dialog.create();
+ if (dialog.open() == 0) {
+ conWizard.getResolved();
+ }
+ }
+ } else if (treeColumn.getText().equals(MergeXViewerFactory.Conflict_Resolved.getName())) {
+ if (conflict.statusNotResolvable()) {
+ if (MergeUtility.showDeletedConflict(conflict, shell)) {
+ xMergeViewer.refreshTable();
+ }
+ } else if (conflict.statusInformational()) {
+ MergeUtility.showInformationalConflict(shell);
+ } else {
+ conflict.handleResolvedSelection();
+ }
+ }
+
+ } catch (MergeChangesInArtifactException ex) {
+ MessageDialog.openError(shell, "Error", ex.getMessage());
+ } catch (Exception ex) {
+ OSEELog.logException(MergeXViewer.class, ex, true);
+ }
+ xMergeViewer.loadTable();
+ return super.handleLeftClickInIconArea(treeColumn, treeItem);
+ }
+
+ /* (non-Javadoc) Method declared on StructuredViewer. */
+ @Override
+ protected void doUpdateItem(Widget widget, Object element, boolean fullMap) {
+ super.doUpdateItem(widget, element, fullMap);
+ if (conWizard != null) {
+ try {
+ conWizard.setResolution();
+ } catch (Exception ex) {
+ OSEELog.logException(MergeXViewer.class, ex, true);
+ }
+ }
+ }
+
+ public void addLabelProvider(XMergeLabelProvider labelProvider) {
+ this.labelProvider = labelProvider;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerFactory.java
new file mode 100644
index 00000000000..e0bf773db72
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerFactory.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn.SortDataType;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MergeXViewerFactory extends SkynetXViewerFactory {
+
+ public static XViewerColumn Conflict_Resolved =
+ new XViewerColumn("framework.merge.conflictResolved", "Conflict Resolution", 43, SWT.LEFT, true,
+ SortDataType.String, false, null);
+ public static XViewerColumn Artifact_Name =
+ new XViewerColumn("framework.merge.artifactName", "Artifact Name", 200, SWT.LEFT, true, SortDataType.String,
+ false, null);
+ public static XViewerColumn Type =
+ new XViewerColumn("framework.merge.artifactType", "Artifact Type", 150, SWT.LEFT, true, SortDataType.String,
+ false, null);
+ public static XViewerColumn Change_Item =
+ new XViewerColumn("framework.merge.conflictingItem", "Conflicting Item", 150, SWT.LEFT, true,
+ SortDataType.String, false, null);
+ public static XViewerColumn Source =
+ new XViewerColumn("framework.merge.sourceValue", "Source Value", 100, SWT.LEFT, true, SortDataType.String,
+ false, null);
+ public static XViewerColumn Destination =
+ new XViewerColumn("framework.merge.destinationValue", "Destination Value", 100, SWT.LEFT, true,
+ SortDataType.String, false, null);
+ public static XViewerColumn Merged =
+ new XViewerColumn("framework.merge.mergedValue", "Merged Value", 100, SWT.LEFT, true, SortDataType.String,
+ false, null);
+ public static XViewerColumn Art_Id =
+ new XViewerColumn("framework.merge.artId", "Artifact Id", 75, SWT.LEFT, true, SortDataType.String, false, null);
+
+ public MergeXViewerFactory() {
+ super("osee.skynet.gui.MergeXViewer");
+ registerColumn(Conflict_Resolved, Artifact_Name, Type, Change_Item, Source, Destination, Merged, Art_Id);
+ registerAllAttributeColumns();
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerSorter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerSorter.java
new file mode 100644
index 00000000000..ea9664a4b54
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerSorter.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.skynet.core.conflict.Conflict;
+import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.XMergeLabelProvider.ConflictState;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerSorter;
+
+/**
+ * @author Theron Virgin
+ */
+public class MergeXViewerSorter extends XViewerSorter {
+
+ protected final XViewer xViewer;
+ protected final XMergeLabelProvider labelProvider;
+
+ /**
+ * @param xViewer
+ */
+ public MergeXViewerSorter(XViewer xViewer, XMergeLabelProvider labelProvider) {
+ super(xViewer);
+ this.xViewer = xViewer;
+ this.labelProvider = labelProvider;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerSorter#compare(org.eclipse.jface.viewers.Viewer,
+ * java.lang.Object, java.lang.Object, int)
+ */
+ @Override
+ public int compare(Viewer viewer, Object o1, Object o2, int sortXColIndex) {
+ try {
+ if (xViewer == null || !xViewer.getCustomizeMgr().isSorting()) return 0;
+ XViewerColumn sortXCol = xViewer.getCustomizeMgr().getSortXCols().get(sortXColIndex);
+ String value1 = labelProvider.getColumnText(o1, sortXCol, sortXColIndex);
+ String value2 = labelProvider.getColumnText(o2, sortXCol, sortXColIndex);
+
+ if (o1 instanceof Conflict && o2 instanceof Conflict) {
+ if (sortXCol.equals(MergeXViewerFactory.Conflict_Resolved)) {
+ int compareInt =
+ new Integer(ConflictState.getValue(value1)).compareTo(new Integer(ConflictState.getValue(value2)));
+ return getCompareBasedOnDirection(sortXCol, compareInt, viewer, o1, o2, sortXColIndex);
+ }
+ }
+
+ return super.compare(viewer, o1, o2, sortXColIndex);
+ } catch (Exception ex) {
+ // do nothing
+ }
+ return 1;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeContentProvider.java
new file mode 100644
index 00000000000..95eaa7eb07a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeContentProvider.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+public class XMergeContentProvider implements ITreeContentProvider {
+
+ private final MergeXViewer mergeXViewer;
+ private static Object[] EMPTY_ARRAY = new Object[0];
+
+ public XMergeContentProvider(MergeXViewer commitXViewer) {
+ super();
+ this.mergeXViewer = commitXViewer;
+ }
+
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Object[]) {
+ return (Object[]) parentElement;
+ }
+ // if(parentElement instanceof TransactionArtifactChange){
+ // return ((TransactionArtifactChange)parentElement).getAttributeChanges().toArray();
+ // }
+ return EMPTY_ARRAY;
+ }
+
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ return getChildren(element).length > 0;
+ }
+
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof String) return new Object[] {inputElement};
+ return getChildren(inputElement);
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeLabelProvider.java
new file mode 100644
index 00000000000..5577dfc1608
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeLabelProvider.java
@@ -0,0 +1,176 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.conflict.Conflict;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerLabelProvider;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+public class XMergeLabelProvider extends XViewerLabelProvider {
+ public static enum ConflictState {
+ UNTOUCHED(2, " "),
+ REVERT(1, "Must Be Reverted"),
+ MODIFIED(3, "Modified"),
+ CHANGED(4, "Artifact Changed After Resolution"),
+ RESOLVED(5, "Resolved"),
+ INFORMATIONAL(6, "Informational"),
+ COMMITTED(7, "Committed"),
+ CHANGED_EDIT(4, "Artifact Changed"), ;
+
+ private final int value;
+ private final String text;
+
+ ConflictState(int value, String text) {
+ this.value = value;
+ this.text = text;
+ }
+
+ public static final int getValue(String text) {
+ for (ConflictState state : values()) {
+ if (state.text.equals(text)) {
+ return state.value;
+ }
+ }
+ return 0;
+ }
+
+ public final String getText() {
+ return text;
+ }
+
+ };
+ Font font = null;
+
+ private final MergeXViewer mergeXViewer;
+
+ private final static String SOURCE_IMAGE = "green_s.gif";
+ private final static String DEST_IMAGE = "blue_d.gif";
+ private final static String MERGE_IMAGE = "yellow_m.gif";
+ private final static String START_WIZARD_IMAGE = "conflict.gif";
+ private final static String MARKED_MERGED_IMAGE = "chkbox_enabled.gif";
+ private final static String EDITED_IMAGE = "chkbox_disabled.gif";
+ private final static String OUT_OF_DATE_IMAGE = "chkbox_red.gif";
+ private final static String OUT_OF_DATE_COMMITTED_IMAGE = "chkbox_enabled_conflicted.gif";
+ private final static String NO_CONFLICT_IMAGE = "accept.gif";
+ private final static String NOT_RESOLVABLE_IMAGE = "red_light.gif";
+ private final static String INFORMATION_IMAGE = "issue.gif";
+
+ public XMergeLabelProvider(MergeXViewer mergeXViewer) {
+ super(mergeXViewer);
+ this.mergeXViewer = mergeXViewer;
+ }
+
+ @Override
+ public String getColumnText(Object element, XViewerColumn aCol, int columnIndex) throws OseeCoreException {
+ if (element instanceof Conflict) {
+ Conflict conflict = (Conflict) element;
+ if (aCol.equals(MergeXViewerFactory.Conflict_Resolved)) {
+ if (conflict.statusResolved()) return ConflictState.RESOLVED.getText();
+ if (conflict.statusEdited()) return ConflictState.MODIFIED.getText();
+ if (conflict.statusOutOfDate()) return ConflictState.CHANGED_EDIT.getText();
+ if (conflict.statusOutOfDateCommitted()) return ConflictState.CHANGED.getText();
+ if (conflict.statusUntouched()) return ConflictState.UNTOUCHED.getText();
+ if (conflict.statusNotResolvable()) return ConflictState.REVERT.getText();
+ if (conflict.statusInformational()) return ConflictState.INFORMATIONAL.getText();
+ if (conflict.statusCommitted()) return ConflictState.COMMITTED.getText();
+ } else if (aCol.equals(MergeXViewerFactory.Artifact_Name)) {
+ return conflict.getArtifactName();
+ } else if (aCol.equals(MergeXViewerFactory.Change_Item)) {
+ return conflict.getChangeItem();
+ } else if (aCol.equals(MergeXViewerFactory.Source)) {
+ return conflict.getSourceDisplayData();
+ } else if (aCol.equals(MergeXViewerFactory.Destination)) {
+ return conflict.getDestDisplayData();
+ } else if (aCol.equals(MergeXViewerFactory.Merged)) {
+ return conflict.getMergeDisplayData();
+ } else if (aCol.equals(MergeXViewerFactory.Type)) {
+ return conflict.getArtifact().getArtifactTypeName();
+ } else if (aCol.equals(MergeXViewerFactory.Art_Id)) {
+ return String.valueOf(conflict.getArtifact().getArtId());
+ }
+ }
+ return "unhandled column";
+ }
+
+ public void dispose() {
+ if (font != null) font.dispose();
+ font = null;
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public MergeXViewer getTreeViewer() {
+ return mergeXViewer;
+ }
+
+ @Override
+ public Image getColumnImage(Object element, XViewerColumn dCol, int columnIndex) throws OseeCoreException {
+ if (element instanceof Conflict) {
+ try {
+ Conflict conflict = (Conflict) element;
+ if (dCol.equals(MergeXViewerFactory.Artifact_Name)) {
+ return conflict.getArtifactImage();
+ } else if (dCol.equals(MergeXViewerFactory.Type)) {
+ return conflict.getArtifact().getImage();
+ } else if (dCol.equals(MergeXViewerFactory.Change_Item)) {
+ return conflict.getImage();
+ } else if (dCol.equals(MergeXViewerFactory.Source)) {
+ return SkynetGuiPlugin.getInstance().getImage(SOURCE_IMAGE);
+ } else if (dCol.equals(MergeXViewerFactory.Destination)) {
+ return SkynetGuiPlugin.getInstance().getImage(DEST_IMAGE);
+ } else if (dCol.equals(MergeXViewerFactory.Merged)) {
+ return getMergeImage(conflict);
+ } else if (dCol.equals(MergeXViewerFactory.Conflict_Resolved)) {
+ if (conflict.statusUntouched()) return null;
+ if (conflict.statusEdited()) return SkynetGuiPlugin.getInstance().getImage(EDITED_IMAGE);
+ if (conflict.statusResolved() || conflict.statusCommitted()) return SkynetGuiPlugin.getInstance().getImage(
+ MARKED_MERGED_IMAGE);
+ if (conflict.statusOutOfDate()) return SkynetGuiPlugin.getInstance().getImage(OUT_OF_DATE_IMAGE);
+ if (conflict.statusOutOfDateCommitted()) return SkynetGuiPlugin.getInstance().getImage(
+ OUT_OF_DATE_COMMITTED_IMAGE);
+ if (conflict.statusNotResolvable()) return SkynetGuiPlugin.getInstance().getImage(NOT_RESOLVABLE_IMAGE);
+ if (conflict.statusInformational()) return SkynetGuiPlugin.getInstance().getImage(INFORMATION_IMAGE);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(XMergeLabelProvider.class, ex, true);
+ }
+ }
+ return null;
+ }
+
+ public static Image getMergeImage(Conflict conflict) throws OseeCoreException {
+ if (conflict.statusInformational()) return null;
+ if (conflict.statusNotResolvable()) return SkynetGuiPlugin.getInstance().getImage(START_WIZARD_IMAGE);
+ if ((conflict.sourceEqualsDestination()) && (conflict.mergeEqualsSource())) return SkynetGuiPlugin.getInstance().getImage(
+ NO_CONFLICT_IMAGE);
+ if (conflict.statusUntouched()) return SkynetGuiPlugin.getInstance().getImage(START_WIZARD_IMAGE);
+ if (conflict.mergeEqualsDestination()) return SkynetGuiPlugin.getInstance().getImage(DEST_IMAGE);
+ if (conflict.mergeEqualsSource())
+ return SkynetGuiPlugin.getInstance().getImage(SOURCE_IMAGE);
+ else
+ return SkynetGuiPlugin.getInstance().getImage(MERGE_IMAGE);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeViewer.java
new file mode 100644
index 00000000000..a98ff54c2b1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeViewer.java
@@ -0,0 +1,572 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.osee.framework.core.data.SystemUser;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.IATSArtifact;
+import org.eclipse.osee.framework.skynet.core.conflict.Conflict;
+import org.eclipse.osee.framework.skynet.core.revision.ConflictManagerInternal;
+import org.eclipse.osee.framework.skynet.core.transaction.TransactionId;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.plugin.util.ListSelectionDialogNoSave;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.status.SwtStatusMonitor;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeView;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.swt.widgets.Tree;
+
+/**
+ * @author Donald G. Dunne
+ * @author Theron Virgin
+ */
+public class XMergeViewer extends XWidget implements IActionable {
+
+ private MergeXViewer mergeXViewer;
+ private IDirtiableEditor editor;
+ public final static String normalColor = "#EEEEEE";
+ private static final String LOADING = "Loading ...";
+ private static final String NO_CONFLICTS = "No conflicts were found";
+ private static final String CONFLICTS_NOT_LOADED = "Cleared on shutdown. Refresh to Reload.";
+ private Label extraInfoLabel;
+ private Conflict[] conflicts;
+ private String displayLabelText;
+ private ToolItem openAssociatedArtifactItem;
+ private Branch sourceBranch;
+ private Branch destBranch;
+ private TransactionId commitTrans;
+ private TransactionId tranId;
+ private MergeView mergeView;
+ private final static String CONFLICTS_RESOLVED = "\nAll Conflicts Are Resolved";
+
+ /**
+ * @param label
+ */
+ public XMergeViewer() {
+ super("Merge Manager");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#createWidgets(org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+
+ // Create Text Widgets
+ if (displayLabel && !label.equals("")) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+
+ Composite mainComp = new Composite(parent, SWT.BORDER);
+ mainComp.setLayoutData(new GridData(GridData.FILL_BOTH));
+ mainComp.setLayout(ALayout.getZeroMarginLayout());
+ if (toolkit != null) toolkit.paintBordersFor(mainComp);
+
+ createTaskActionBar(mainComp);
+
+ mergeXViewer = new MergeXViewer(mainComp, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION, this);
+ mergeXViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+ XMergeLabelProvider labelProvider = new XMergeLabelProvider(mergeXViewer);
+ mergeXViewer.addLabelProvider(labelProvider);
+ mergeXViewer.setSorter(new MergeXViewerSorter(mergeXViewer, labelProvider));
+ mergeXViewer.setContentProvider(new XMergeContentProvider(mergeXViewer));
+ mergeXViewer.setLabelProvider(new XMergeLabelProvider(mergeXViewer));
+ mergeXViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ refreshActionEnablement();
+ }
+ });
+
+ if (toolkit != null) toolkit.adapt(mergeXViewer.getStatusLabel(), false, false);
+
+ Tree tree = mergeXViewer.getTree();
+ GridData gridData = new GridData(GridData.FILL_BOTH);
+ gridData.heightHint = 100;
+ tree.setLayout(ALayout.getZeroMarginLayout());
+ tree.setLayoutData(gridData);
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+
+ }
+
+ private void refreshAssociatedArtifactItem(Branch sourceBranch) {
+ try {
+ Artifact branchAssociatedArtifact = sourceBranch.getAssociatedArtifact();
+ if (branchAssociatedArtifact != null) {
+ openAssociatedArtifactItem.setToolTipText("Open Associated Artifact");
+ openAssociatedArtifactItem.setEnabled(true);
+ openAssociatedArtifactItem.setImage(branchAssociatedArtifact.getImage());
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ public void createTaskActionBar(Composite parent) {
+
+ Composite bComp = new Composite(parent, SWT.NONE);
+ bComp.setLayout(new GridLayout(2, false));
+ bComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Composite leftComp = new Composite(bComp, SWT.NONE);
+ leftComp.setLayout(new GridLayout());
+ leftComp.setLayoutData(new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL));
+
+ extraInfoLabel = new Label(leftComp, SWT.NONE);
+ extraInfoLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ extraInfoLabel.setText("\n");
+
+ Composite rightComp = new Composite(bComp, SWT.NONE);
+ rightComp.setLayout(new GridLayout());
+ rightComp.setLayoutData(new GridData(GridData.END));
+
+ ToolBar toolBar = new ToolBar(rightComp, SWT.FLAT | SWT.RIGHT);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ toolBar.setLayoutData(gd);
+ ToolItem item = null;
+
+ openAssociatedArtifactItem = new ToolItem(toolBar, SWT.PUSH);
+ openAssociatedArtifactItem.setEnabled(false);
+ openAssociatedArtifactItem.setDisabledImage(null);
+ openAssociatedArtifactItem.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ try {
+ Branch sourceBranch = conflicts[0].getSourceBranch();
+ Artifact branchAssociatedArtifact = sourceBranch.getAssociatedArtifact();
+ if (branchAssociatedArtifact instanceof IATSArtifact) {
+ OseeAts.openATSArtifact(branchAssociatedArtifact);
+ return;
+ } else if (!branchAssociatedArtifact.equals(UserManager.getUser(SystemUser.NoOne))) {
+ ArtifactEditor.editArtifact(branchAssociatedArtifact);
+ return;
+ }
+ AWorkbench.popup("ERROR", "Unknown branch association");
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("branch_change_source.gif"));
+ item.setToolTipText("Show Source Branch Change Report");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (conflicts.length != 0) {
+ if (conflicts[0].getSourceBranch() != null) {
+
+ try {
+ ChangeView.open(conflicts[0].getSourceBranch());
+ } catch (Exception ex) {
+ OSEELog.logException(XMergeViewer.class, ex, true);
+ }
+ } else {
+ try {
+ ChangeView.open(conflicts[0].getCommitTransactionId());
+ } catch (Exception ex) {
+ OSEELog.logException(XMergeViewer.class, ex, true);
+ }
+ }
+ }
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("branch_change_dest.gif"));
+ item.setToolTipText("Show Destination Branch Change Report");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (conflicts.length != 0) {
+ try {
+ ChangeView.open(conflicts[0].getDestBranch());
+ } catch (Exception ex) {
+ OSEELog.logException(XMergeViewer.class, ex, true);
+ }
+ }
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("refresh.gif"));
+ item.setToolTipText("Refresh");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ setInputData(sourceBranch, destBranch, tranId, mergeView, commitTrans, true);
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("customize.gif"));
+ item.setToolTipText("Customize Table");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ mergeXViewer.getCustomizeMgr().handleTableCustomization();
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("branch_merge.gif"));
+ item.setToolTipText("Apply Merge Results From Prior Merge");
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (conflicts.length != 0) {
+ if (conflicts[0].getSourceBranch() != null) {
+ //(Object[] choose, Shell parentShell, String dialogTitle, Image dialogTitleImage,
+ //String dialogMessage, int dialogImageType, String[] dialogButtonLabels, int defaultIndex)
+ ArrayList<String> selections = new ArrayList<String>();
+ ArrayList<Integer> branchIds = new ArrayList<Integer>();
+ try {
+ Collection<Integer> destBranches =
+ ConflictManagerInternal.getDestinationBranchesMerged(sourceBranch.getBranchId());
+ for (Integer integer : destBranches) {
+ if (integer.intValue() != destBranch.getBranchId()) {
+ selections.add(BranchManager.getBranch(integer).getBranchName());
+ branchIds.add(integer);
+ }
+ }
+ if (selections.size() > 0) {
+ ListSelectionDialogNoSave dialog =
+ new ListSelectionDialogNoSave(selections.toArray(),
+ Display.getCurrent().getActiveShell().getShell(), "Apply Prior Merge Resolution",
+ null, "Select the destination branch that the previous commit was appplied to", 2,
+ new String[] {"Apply", "Cancel"}, 1);
+ if (dialog.open() == 0) {
+ System.out.print("Applying the merge found for Branch " + branchIds.toArray()[dialog.getSelection()]);
+ for (Conflict conflict : conflicts) {
+ conflict.applyPreviousMerge(ConflictManagerInternal.getMergeBranchId(
+ conflicts[0].getSourceBranch().getBranchId(), branchIds.get(dialog.getSelection())));
+ }
+ setInputData(sourceBranch, destBranch, tranId, mergeView, commitTrans,
+ " Aplying Previous Merge", true);
+ }
+ }
+ if (selections.size() == 0) {
+ new MessageDialog(Display.getCurrent().getActiveShell().getShell(),
+ "Apply Prior Merge Resolution", null, "This Source Branch has had No Prior Merges", 2,
+ new String[] {"OK"}, 1).open();
+ }
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(XMergeViewer.class, ex, false);
+ }
+ }
+ }
+ }
+ });
+
+ OseeAts.addButtonToEditorToolBar(this, SkynetGuiPlugin.getInstance(), toolBar, MergeView.VIEW_ID, "Merge Manager");
+ }
+
+ public void refreshTable() throws InterruptedException {
+ Job job = new Job("Loading Merge Manager") {
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+
+ try {
+ if (!(conflicts.length == 0)) {
+ Conflict[] artifactChanges = new Conflict[0];
+ if (conflicts[0].getToTransactionId() != null) {
+ setConflicts(ConflictManagerInternal.getConflictsPerBranch(conflicts[0].getSourceBranch(),
+ conflicts[0].getDestBranch(), conflicts[0].getToTransactionId(),
+ new SwtStatusMonitor(monitor)).toArray(artifactChanges));
+ } else {
+ setConflicts(org.eclipse.osee.framework.skynet.core.revision.ConflictManagerInternal.getConflictsPerBranch(
+ conflicts[0].getCommitTransactionId(), new SwtStatusMonitor(monitor)).toArray(
+ artifactChanges));
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(XMergeViewer.class, ex, true);
+ }
+
+ return Status.OK_STATUS;
+ }
+ };
+ Jobs.startJob(job).join();
+ loadTable();
+ }
+
+ public void refreshActionEnablement() {
+
+ }
+
+ public void loadTable() {
+ refresh();
+ }
+
+ @SuppressWarnings("unchecked")
+ public ArrayList<Conflict> getSelectedConflicts() {
+ ArrayList<Conflict> items = new ArrayList<Conflict>();
+ if (mergeXViewer == null) return items;
+ if (mergeXViewer.getSelection().isEmpty()) return items;
+ Iterator i = ((IStructuredSelection) mergeXViewer.getSelection()).iterator();
+ while (i.hasNext()) {
+ Object obj = i.next();
+ items.add((Conflict) obj);
+ }
+ return items;
+ }
+
+ @Override
+ public Control getControl() {
+ return mergeXViewer.getTree();
+ }
+
+ @Override
+ public void dispose() {
+ mergeXViewer.dispose();
+ }
+
+ @Override
+ public void setFocus() {
+ mergeXViewer.getTree().setFocus();
+ }
+
+ @Override
+ public void refresh() {
+ mergeXViewer.refresh();
+ setLabelError();
+ refreshActionEnablement();
+ int resolved = 0;
+ int informational = 0;
+ if (conflicts != null && conflicts.length != 0) {
+ for (Conflict conflict : conflicts) {
+ if (conflict.statusResolved() || conflict.statusCommitted()) {
+ resolved++;
+ }
+ if (conflict.statusInformational()) {
+ informational++;
+ }
+ }
+ if (resolved == conflicts.length) {
+ extraInfoLabel.setText(displayLabelText + CONFLICTS_RESOLVED);
+ } else {
+ extraInfoLabel.setText(displayLabelText + "\nConflicts : " + (conflicts.length - informational) + " <=> Resolved : " + resolved + (informational == 0 ? " " : ("\nInformational Conflicts : " + informational)));
+
+ }
+ }
+ }
+
+ @Override
+ public Result isValid() {
+ return Result.TrueResult;
+ }
+
+ @Override
+ public void setXmlData(String str) {
+ }
+
+ @Override
+ public String getXmlData() {
+ return null;
+ }
+
+ @Override
+ public String toHTML(String labelFont) {
+ return AHTML.simplePage("Unhandled");
+ }
+
+ @Override
+ public String getReportData() {
+ return null;
+ }
+
+ /**
+ * @return Returns the xViewer.
+ */
+ public MergeXViewer getXViewer() {
+ return mergeXViewer;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return mergeXViewer.getInput();
+ }
+
+ public IDirtiableEditor getEditor() {
+ return editor;
+ }
+
+ public void setEditor(IDirtiableEditor editor) {
+ this.editor = editor;
+ }
+
+ @Override
+ public boolean isEditable() {
+ return editable;
+ }
+
+ @Override
+ public void setEditable(boolean editable) {
+ this.editable = editable;
+ }
+
+ public void setInputData(final Branch sourceBranch, final Branch destBranch, final TransactionId tranId, final MergeView mergeView, final TransactionId commitTrans, boolean showConflicts) {
+ setInputData(sourceBranch, destBranch, tranId, mergeView, commitTrans, "", showConflicts);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IDamWidget#setArtifact(org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String)
+ */
+ public void setInputData(final Branch sourceBranch, final Branch destBranch, final TransactionId tranId, final MergeView mergeView, final TransactionId commitTrans, String loadingText, final boolean showConflicts) {
+ this.sourceBranch = sourceBranch;
+ this.destBranch = destBranch;
+ this.tranId = tranId;
+ this.mergeView = mergeView;
+ this.commitTrans = commitTrans;
+ extraInfoLabel.setText(LOADING + loadingText);
+ Job job = new Job("Loading Merge Manager") {
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ SwtStatusMonitor swtMonitor = new SwtStatusMonitor(monitor);
+ try {
+ if (showConflicts) {
+ if (commitTrans == null) {
+ conflicts =
+ ConflictManagerInternal.getConflictsPerBranch(sourceBranch, destBranch, tranId, swtMonitor).toArray(
+ new Conflict[0]);
+ } else {
+ conflicts =
+ ConflictManagerInternal.getConflictsPerBranch(commitTrans, swtMonitor).toArray(
+ new Conflict[0]);
+ }
+ }
+
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ if (showConflicts) {
+ if (conflicts.length == 0) {
+ extraInfoLabel.setText(NO_CONFLICTS);
+ } else {
+ setConflicts(conflicts);
+ mergeView.setConflicts(conflicts);
+ refresh();
+ }
+ } else {
+ extraInfoLabel.setText(CONFLICTS_NOT_LOADED);
+ }
+ }
+ });
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ Jobs.startJob(job);
+ if (sourceBranch != null) {
+ refreshAssociatedArtifactItem(sourceBranch);
+ }
+ }
+
+ public void setConflicts(Conflict[] conflicts) throws IllegalStateException {
+ this.conflicts = conflicts;
+ loadTable();
+ int resolved = 0;
+ int informational = 0;
+ for (Conflict conflict : conflicts) {
+ if (conflict.statusResolved() || conflict.statusCommitted()) {
+ resolved++;
+ }
+ if (conflict.statusInformational()) {
+ informational++;
+ }
+ }
+ mergeXViewer.setConflicts(conflicts);
+ if (conflicts != null && conflicts.length != 0) {
+ if (sourceBranch != null) {
+ displayLabelText =
+ "Source Branch : " + sourceBranch.getBranchName() + "\nDestination Branch : " + destBranch.getBranchName();
+ } else {
+ displayLabelText = "Commit Transaction ID : " + commitTrans + " " + commitTrans.getComment();
+ }
+ if (resolved == (conflicts.length - informational)) {
+ extraInfoLabel.setText(displayLabelText + CONFLICTS_RESOLVED);
+ } else {
+ extraInfoLabel.setText(displayLabelText + "\nConflicts : " + (conflicts.length - informational) + " <=> Resolved : " + resolved + (informational == 0 ? " " : ("\nInformational Conflicts : " + informational)));
+ }
+ }
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.ats.IActionable#getActionDescription()
+ */
+ @Override
+ public String getActionDescription() {
+ StringBuffer sb = new StringBuffer();
+ if (sourceBranch != null) sb.append("\nSource Branch: " + sourceBranch);
+ if (destBranch != null) sb.append("\nDestination Branch: " + destBranch);
+ if (tranId != null) sb.append("\nTransactionId: " + tranId);
+ if (commitTrans != null) sb.append("\nCommit TransactionId: " + commitTrans);
+ return sb.toString();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/test/Merge Manager Manual GUI testing.doc b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/test/Merge Manager Manual GUI testing.doc
new file mode 100644
index 00000000000..1f143fd9f0f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/test/Merge Manager Manual GUI testing.doc
Binary files differ
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateComposite.java
new file mode 100644
index 00000000000..61e0352ac9b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateComposite.java
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xnavigate;
+
+import java.util.List;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.filteredTree.OSEEFilteredTree;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.dialogs.FilteredTree;
+import org.eclipse.ui.dialogs.PatternFilter;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XNavigateComposite extends Composite {
+
+ protected Browser browser;
+ protected OSEEFilteredTree filteredTree;
+ private static PatternFilter patternFilter = new PatternFilter();
+ protected final XNavigateViewItems navigateViewItems;
+ private List<XNavigateItem> items;
+ public static enum TableLoadOption {
+ None, ForcePend, ClearLastSearchItem, NoUI
+ };
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public XNavigateComposite(XNavigateViewItems navigateViewItems, Composite parent, int style) {
+ super(parent, style);
+ this.navigateViewItems = navigateViewItems;
+
+ setLayout(new GridLayout(1, false));
+ setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ /*
+ * Create a grid layout object so the text and treeviewer are layed out the way I want.
+ */
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 0;
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ parent.setLayout(layout);
+ parent.setLayoutData(new GridData(GridData.FILL_BOTH));
+ // parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+
+ // if (!ConnectionHandler.isConnected()) {
+ // (new Label(parent, SWT.NONE)).setText("DB Connection Unavailable");
+ // return;
+ // }
+
+ filteredTree = new OSEEFilteredTree(this, SWT.SINGLE | SWT.BORDER, patternFilter);
+ filteredTree.getViewer().setContentProvider(new XNavigateContentProvider());
+ filteredTree.setInitialText("");
+ filteredTree.getViewer().setLabelProvider(new XNavigateLabelProvider());
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ filteredTree.getViewer().getTree().setLayoutData(gd);
+ filteredTree.getViewer().getTree().addListener(SWT.MouseDoubleClick, new Listener() {
+ public void handleEvent(Event event) {
+ try {
+ if (event.button == 1) handleDoubleClick();
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ });
+ filteredTree.getViewer().getTree().addKeyListener(new KeyListener() {
+ public void keyPressed(KeyEvent e) {
+ }
+
+ public void keyReleased(KeyEvent e) {
+ if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
+ try {
+ handleDoubleClick();
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+ });
+ // Disable native tree tooltip
+ filteredTree.getViewer().getTree().setToolTipText("");
+ filteredTree.getViewer().getTree().addListener(SWT.Dispose, tableListener);
+ filteredTree.getViewer().getTree().addListener(SWT.KeyDown, tableListener);
+ filteredTree.getViewer().getTree().addListener(SWT.MouseMove, tableListener);
+ filteredTree.getViewer().getTree().addListener(SWT.MouseHover, tableListener);
+
+ }
+
+ // Implement a "fake" tooltip
+ final Listener labelListener = new Listener() {
+ public void handleEvent(Event event) {
+ Label label = (Label) event.widget;
+ Shell shell = label.getShell();
+ switch (event.type) {
+ case SWT.MouseDown:
+ Event e = new Event();
+ e.item = (TableItem) label.getData("_TABLEITEM");
+ // Assuming table is single select, set the selection as if
+ // the mouse down event went through to the table
+ // filteredTree.getViewer().getTree().setSelection(new TableItem[] {(TableItem) e.item});
+ filteredTree.getViewer().getTree().notifyListeners(SWT.Selection, e);
+ shell.dispose();
+ filteredTree.getViewer().getTree().setFocus();
+ break;
+ case SWT.MouseExit:
+ shell.dispose();
+ break;
+ }
+ }
+ };
+
+ Shell tip = null;
+ Label label = null;
+
+ private void disposeTooltip() {
+ if (tip == null) return;
+ tip.dispose();
+ tip = null;
+ label = null;
+ }
+ Listener tableListener = new Listener() {
+
+ public void handleEvent(Event event) {
+ switch (event.type) {
+ case SWT.Dispose:
+ case SWT.KeyDown:
+ case SWT.MouseMove: {
+ if (tip == null) break;
+ disposeTooltip();
+ break;
+ }
+ case SWT.MouseHover: {
+ TreeItem item = filteredTree.getViewer().getTree().getItem(new Point(event.x, event.y));
+ if (item != null && (item.getData() instanceof XNavigateItem) && ((XNavigateItem) item.getData()).getDescription() != null && !((XNavigateItem) item.getData()).getDescription().equals(
+ "")) {
+ if (tip != null && !tip.isDisposed()) tip.dispose();
+ tip = new Shell(Display.getCurrent().getActiveShell(), SWT.ON_TOP | SWT.NO_FOCUS | SWT.TOOL);
+ tip.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+ FillLayout layout = new FillLayout();
+ layout.marginWidth = 2;
+ tip.setLayout(layout);
+ label = new Label(tip, SWT.NONE);
+ label.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
+ label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+ label.setData("_TABLEITEM", item);
+ label.setText(item.getText() + "\n\n" + ((XNavigateItem) item.getData()).getDescription());
+ label.addListener(SWT.MouseExit, labelListener);
+ label.addListener(SWT.MouseDown, labelListener);
+ Point size = tip.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+ Rectangle rect = item.getBounds(0);
+ Point pt = filteredTree.getViewer().getTree().toDisplay(rect.x, rect.y);
+ tip.setBounds(pt.x, pt.y + 15, size.x, size.y);
+ tip.setVisible(true);
+ }
+ }
+ }
+ }
+ };
+
+ protected void handleDoubleClick() throws OseeCoreException {
+ IStructuredSelection sel = (IStructuredSelection) filteredTree.getViewer().getSelection();
+ if (!sel.iterator().hasNext()) return;
+ XNavigateItem item = (XNavigateItem) sel.iterator().next();
+ handleDoubleClick(item);
+ }
+
+ protected void handleDoubleClick(XNavigateItem item, TableLoadOption... tableLoadOptions) throws OseeCoreException {
+ disposeTooltip();
+
+ if (item.getChildren().size() > 0) {
+ filteredTree.getViewer().setExpandedState(item, true);
+ } else {
+ try {
+ item.run(tableLoadOptions);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+
+ public void refresh() {
+ items = navigateViewItems.getSearchNavigateItems();
+ filteredTree.getViewer().setInput(items);
+ }
+
+ /**
+ * @return the listViewer
+ */
+ public FilteredTree getFilteredTree() {
+ return filteredTree;
+ }
+
+ /**
+ * @return the patternFilter
+ */
+ public PatternFilter getPatternFilter() {
+ return patternFilter;
+ }
+
+ /**
+ * @return the items
+ */
+ public List<XNavigateItem> getItems() {
+ return items;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateContentProvider.java
new file mode 100644
index 00000000000..f8dc4dcbfd5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateContentProvider.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xnavigate;
+
+import java.util.Collection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XNavigateContentProvider implements ITreeContentProvider {
+
+ /**
+ *
+ */
+ public XNavigateContentProvider() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+ */
+ @SuppressWarnings("unchecked")
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Object[]) return (Object[]) parentElement;
+ if (parentElement instanceof Collection) return ((Collection) parentElement).toArray();
+ if (parentElement instanceof XNavigateItem) return ((XNavigateItem) parentElement).getChildren().toArray(
+ new Object[((XNavigateItem) parentElement).getChildren().size()]);
+ return new Object[0];
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+ */
+ public Object getParent(Object element) {
+ if (element instanceof XNavigateItem) return ((XNavigateItem) element).getParent();
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+ */
+ public boolean hasChildren(Object element) {
+ return getChildren(element).length > 0;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+ * java.lang.Object, java.lang.Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItem.java
new file mode 100644
index 00000000000..0d3d67fb726
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItem.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xnavigate;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateComposite.TableLoadOption;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XNavigateItem {
+
+ private List<XNavigateItem> children = new ArrayList<XNavigateItem>();
+ private String name;
+ private XNavigateItem parent;
+ private final Image image;
+
+ public XNavigateItem(XNavigateItem parent, String name) {
+ this(parent, name, null);
+ }
+
+ public XNavigateItem(XNavigateItem parent, String name, Image image) {
+ this.parent = parent;
+ this.name = name;
+ this.image = image;
+ if (parent != null) parent.addChild(this);
+ }
+
+ public void addChild(XNavigateItem item) {
+ children.add(item);
+ }
+
+ public void removeChild(XNavigateItem item) {
+ children.remove(item);
+ }
+
+ public List<XNavigateItem> getChildren() {
+ return children;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public XNavigateItem getParent() {
+ return parent;
+ }
+
+ public String getDescription() {
+ return "";
+ }
+
+ /**
+ * @return the image
+ */
+ public Image getImage() {
+ return image;
+ }
+
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void run(TableLoadOption... tableLoadOptions) throws Exception {
+ }
+
+ /**
+ * @param parent the parent to set
+ */
+ public void setParent(XNavigateItem parent) {
+ this.parent = parent;
+ }
+
+ public String toString() {
+ return getName();
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItemAction.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItemAction.java
new file mode 100644
index 00000000000..02347c466ac
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItemAction.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xnavigate;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateComposite.TableLoadOption;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * Used to perform a specific java action
+ *
+ * @author Donald G. Dunne
+ */
+public class XNavigateItemAction extends XNavigateItem {
+
+ private final Action action;
+ private boolean promptFirst = false;
+
+ public XNavigateItemAction(XNavigateItem parent, String name) {
+ this(parent, name, false);
+ }
+
+ public XNavigateItemAction(XNavigateItem parent, String name, boolean promptFirst) {
+ super(parent, name);
+ this.action = null;
+ this.promptFirst = promptFirst;
+ }
+
+ public XNavigateItemAction(XNavigateItem parent, Action action) {
+ this(parent, action, null, false);
+ }
+
+ public XNavigateItemAction(XNavigateItem parent, Action action, Image image, boolean promptFirst) {
+ super(parent, action.getText(), image);
+ this.action = action;
+ this.promptFirst = promptFirst;
+ }
+
+ @Override
+ public void run(TableLoadOption... tableLoadOptions) throws Exception {
+ if (action != null) {
+ if (promptFirst) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Runnable#run()
+ */
+ public void run() {
+ if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), getName(), getName())) action.run();
+ }
+ });
+ } else
+ action.run();
+ }
+ }
+
+ public boolean isPromptFirst() {
+ return promptFirst;
+ }
+
+ public void setPromptFirst(boolean promptFirst) {
+ this.promptFirst = promptFirst;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItemBlam.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItemBlam.java
new file mode 100644
index 00000000000..2d9b249262a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateItemBlam.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xnavigate;
+
+import org.eclipse.osee.framework.ui.skynet.blam.BlamEditor;
+import org.eclipse.osee.framework.ui.skynet.blam.BlamOperations;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateComposite.TableLoadOption;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XNavigateItemBlam extends XNavigateItem {
+ private final BlamOperation blamOperation;
+
+ /**
+ * @param parent
+ * @param name
+ */
+ public XNavigateItemBlam(XNavigateItem parent, BlamOperation blamOperation) {
+ super(parent, blamOperation.getClass().getSimpleName());
+ this.blamOperation = blamOperation;
+ }
+
+ @Override
+ public void run(TableLoadOption... tableLoadOptions) throws Exception {
+ // Need a new copy of the BLAM operation so widgets don't collide
+ BlamEditor.edit(BlamOperations.getBlamOperation(blamOperation.getName()));
+ }
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateLabelProvider.java
new file mode 100644
index 00000000000..8614ee2eaf1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateLabelProvider.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xnavigate;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.swt.graphics.Image;
+
+public class XNavigateLabelProvider implements ILabelProvider {
+
+ /**
+ * ListViewers don't support images
+ *
+ * @param arg0 the element
+ * @return Image
+ */
+ public Image getImage(Object arg0) {
+ return ((XNavigateItem) arg0).getImage();
+ }
+
+ /**
+ * Gets the text for an element
+ *
+ * @param arg0 the element
+ * @return String
+ */
+ public String getText(Object arg0) {
+ return ((XNavigateItem) arg0).getName();
+ }
+
+ /**
+ * Adds a listener
+ *
+ * @param arg0 the listener
+ */
+ public void addListener(ILabelProviderListener arg0) {
+ // Throw it away
+ }
+
+ /**
+ * Disposes any resources
+ */
+ public void dispose() {
+ // Nothing to dispose
+ }
+
+ /**
+ * Returns whether changing the specified property for the specified element affect the label
+ *
+ * @param arg0 the element
+ * @param arg1 the property
+ * @return boolean
+ */
+ public boolean isLabelProperty(Object arg0, String arg1) {
+ return false;
+ }
+
+ /**
+ * Removes a listener
+ *
+ * @param arg0 the listener
+ */
+ public void removeListener(ILabelProviderListener arg0) {
+ // Ignore
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateUrlItem.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateUrlItem.java
new file mode 100644
index 00000000000..f20719b9599
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateUrlItem.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xnavigate;
+
+import java.net.URL;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateComposite.TableLoadOption;
+import org.eclipse.swt.program.Program;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.browser.IWebBrowser;
+import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XNavigateUrlItem extends XNavigateItemAction {
+
+ private final String url;
+ private final boolean external;
+
+ /**
+ * Creates a navigation item that will open the given url either internal or external to Eclipse.
+ *
+ * @param parent
+ * @param name to use as display name
+ * @param url to open
+ * @param external true to open in system browser; false to open inside Eclipse
+ */
+ public XNavigateUrlItem(XNavigateItem parent, String name, String url, boolean external) {
+ super(parent, name);
+ this.url = url;
+ this.external = external;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.ats.navigate.ActionNavigateItem#run()
+ */
+ @Override
+ public void run(TableLoadOption... tableLoadOptions) {
+ if (external)
+ Program.launch(url);
+ else {
+ IWorkbenchBrowserSupport browserSupport = PlatformUI.getWorkbench().getBrowserSupport();
+ try {
+ IWebBrowser browser = browserSupport.createBrowser("osee.ats.navigator.browser");
+ browser.openURL(new URL(url));
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateViewFilter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateViewFilter.java
new file mode 100644
index 00000000000..feb9dc9326b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateViewFilter.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xnavigate;
+
+import java.util.regex.Pattern;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+public class XNavigateViewFilter extends ViewerFilter {
+
+ private boolean enabled = false;
+ private String text;
+
+ public XNavigateViewFilter(TreeViewer treeViewer) {
+ }
+
+ public void setFilterText(String text) {
+ this.text = text;
+
+ }
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (!enabled) return true;
+ XNavigateItem item = (XNavigateItem) element;
+ return Pattern.compile(text).matcher(item.getName()).find();
+ }
+
+ /**
+ * @return the enabled
+ */
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ /**
+ * @param enabled the enabled to set
+ */
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateViewItems.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateViewItems.java
new file mode 100644
index 00000000000..d6837c7ef95
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xnavigate/XNavigateViewItems.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xnavigate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XNavigateViewItems {
+ private static XNavigateViewItems navigateSearches = new XNavigateViewItems();
+
+ protected XNavigateViewItems() {
+ super();
+ }
+
+ public static XNavigateViewItems getInstance() {
+ return navigateSearches;
+ }
+
+ public List<XNavigateItem> getSearchNavigateItems() {
+ List<XNavigateItem> items = new ArrayList<XNavigateItem>();
+ return items;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/ResultBrowserHyperCmd.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/ResultBrowserHyperCmd.java
new file mode 100644
index 00000000000..925bb01de3d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/ResultBrowserHyperCmd.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xresults;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Donald G. Dunne
+ */
+public enum ResultBrowserHyperCmd {
+ openAction,
+ openArtifctBranch,
+ openArtifactEditor,
+ openArtifactHyperViewer,
+ openBranch,
+ openChangeReport,
+ openPriorityHelp;
+
+ public static String getHyperCmdStr(ResultBrowserHyperCmd resultBrowserHyperCmd, String value) {
+ return String.format("%s=%s", resultBrowserHyperCmd.name(), value);
+ }
+
+ public static ResultBrowserHyperCmd getCmdStrHyperCmd(String hyperCmdStr) {
+ Matcher m = Pattern.compile("(.*?)=(.*)").matcher(hyperCmdStr);
+ if (m.find()) return ResultBrowserHyperCmd.getHyperCmd(m.group(1));
+ return null;
+ }
+
+ public static String getCmdStrValue(String hyperCmdStr) {
+ Matcher m = Pattern.compile("(.*?)=(.*)").matcher(hyperCmdStr);
+ if (m.find()) return (String) m.group(2);
+ return "";
+ }
+
+ public static ResultBrowserHyperCmd getHyperCmd(String str) {
+ for (ResultBrowserHyperCmd resultBrowserHyperCmd : ResultBrowserHyperCmd.values()) {
+ if (resultBrowserHyperCmd.toString().equals(str)) return resultBrowserHyperCmd;
+ }
+ throw new IllegalArgumentException("Invalid ResultBrowserHyperCmd Name");
+ }
+};
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/ResultBrowserListener.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/ResultBrowserListener.java
new file mode 100644
index 00000000000..002eb330c17
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/ResultBrowserListener.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xresults;
+
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchView;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.swt.browser.LocationEvent;
+import org.eclipse.swt.browser.LocationListener;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ResultBrowserListener implements LocationListener {
+
+ /**
+ *
+ */
+ public ResultBrowserListener() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.browser.LocationListener#changing(org.eclipse.swt.browser.LocationEvent)
+ */
+ public void changing(LocationEvent event) {
+ try {
+ String location = event.location;
+ if (location.contains("javascript:print")) return;
+ String cmdStr = location.replaceFirst("about:blank", "");
+ cmdStr = cmdStr.replaceFirst("blank", "");
+ ResultBrowserHyperCmd resultBrowserHyperCmd = ResultBrowserHyperCmd.getCmdStrHyperCmd(cmdStr);
+ String value = ResultBrowserHyperCmd.getCmdStrValue(cmdStr);
+ if (resultBrowserHyperCmd == ResultBrowserHyperCmd.openAction) {
+ event.doit = false;
+ OseeAts.getAtsLib().openArtifact(value, OseeAts.OpenView.ActionEditor);
+ }
+ if (resultBrowserHyperCmd == ResultBrowserHyperCmd.openArtifctBranch) {
+ event.doit = false;
+ try {
+ java.util.regex.Matcher m = Pattern.compile("^(.*?)\\((.*?)\\)$").matcher(value);
+ if (m.find()) {
+ String hrid = m.group(1);
+ Integer branchId = Integer.parseInt(m.group(2));
+ OseeAts.getAtsLib().openArtifact(hrid, branchId, OseeAts.OpenView.ActionEditor);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ } else if (resultBrowserHyperCmd == ResultBrowserHyperCmd.openArtifactEditor) {
+ event.doit = false;
+ OseeAts.getAtsLib().openArtifact(value, OseeAts.OpenView.ArtifactEditor);
+ } else if (resultBrowserHyperCmd == ResultBrowserHyperCmd.openArtifactHyperViewer) {
+ event.doit = false;
+ OseeAts.getAtsLib().openArtifact(value, OseeAts.OpenView.ArtifactHyperViewer);
+ } else if (resultBrowserHyperCmd == ResultBrowserHyperCmd.openBranch) {
+ event.doit = false;
+ int branchId = new Integer(value);
+ Branch branch = BranchManager.getBranch(branchId);
+ BranchView.revealBranch(branch);
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, "Can't process hyperlink.", ex, true);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.browser.LocationListener#changed(org.eclipse.swt.browser.LocationEvent)
+ */
+ public void changed(LocationEvent event) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultData.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultData.java
new file mode 100644
index 00000000000..5fb0a252f45
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultData.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xresults;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.logging.IHealthStatus;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.logging.SevereLoggingMonitor;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * Used to log Info, Warning and Errors to multiple locations (logger, stderr/out and XResultView). Upon completion, a
+ * call to report(title) will open results in the ResultsView
+ *
+ * @author Donald G. Dunne
+ */
+public class XResultData {
+
+ StringBuffer sb = new StringBuffer();
+ private static enum Type {
+ Severe, Warning, Info;
+ }
+
+ public static void runExample() {
+ XResultData rd = new XResultData();
+ rd.log("This is just a normal log message");
+ rd.logWarning("This is a warning");
+ rd.logError("This is an error");
+
+ rd.log("Here is a nice table");
+ rd.addRaw(AHTML.beginMultiColumnTable(95, 1));
+ rd.addRaw(AHTML.addHeaderRowMultiColumnTable(new String[] {"Type", "Title", "Status"}));
+ for (int x = 0; x < 3; x++)
+ rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {"Type " + x, "Title " + x, x + ""}));
+ rd.addRaw(AHTML.endMultiColumnTable());
+ rd.report("This is my report title");
+ }
+
+ public void addRaw(String str) {
+ sb.append(str);
+ }
+
+ public void reportSevereLoggingMonitor(SevereLoggingMonitor monitorLog) {
+ List<IHealthStatus> stats = monitorLog.getSevereLogs();
+ for (IHealthStatus stat : new CopyOnWriteArrayList<IHealthStatus>(stats)) {
+ if (stat.getException() != null) {
+ logError("Exception: " + Lib.exceptionToString(stat.getException()));
+ }
+ }
+ }
+
+ public void log(IProgressMonitor monitor, String str) {
+ log(str);
+ if (monitor != null) monitor.setTaskName(str);
+ }
+
+ public void log(String str) {
+ logStr(Type.Info, str + "\n", null);
+ }
+
+ public void log(String str, IProgressMonitor monitor) {
+ logStr(Type.Info, str + "\n", monitor);
+ }
+
+ public void logError(String str) {
+ logStr(Type.Severe, str + "\n", null);
+ }
+
+ public void logWarning(String str) {
+ logStr(Type.Warning, str + "\n", null);
+ }
+
+ public boolean isEmpty() {
+ return toString().equals("");
+ }
+
+ public void logStr(Type type, final String str, final IProgressMonitor monitor) {
+ String resultStr = "";
+ if (type == Type.Warning)
+ resultStr = "Warning: " + str;
+ else if (type == Type.Severe)
+ resultStr = "Error: " + str;
+ else
+ resultStr = str;
+ sb.append(resultStr);
+ OseeLog.log(SkynetGuiPlugin.class, Level.parse(type.name().toUpperCase()), resultStr);
+ if (monitor != null) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ monitor.subTask(str);
+ }
+ });
+ }
+ }
+
+ @Override
+ public String toString() {
+ return sb.toString();
+ }
+
+ public void report(final String title) {
+ report(title, Manipulations.ALL);
+ }
+
+ public void report(final String title, final Manipulations... manipulations) {
+ final List<Manipulations> manips = Collections.getAggregate(manipulations);
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ XResultView.getResultView().addResultPage(getReport(title, manipulations));
+ if (!manips.contains(Manipulations.NO_POPUP)) {
+ AWorkbench.popup("Complete", title + " Complete...Results in Result View");
+ }
+ }
+ });
+ }
+
+ public XResultPage getReport(final String title) {
+ return getReport(title, Manipulations.ALL);
+ }
+
+ public XResultPage getReport(final String title, Manipulations... manipulations) {
+ return new XResultPage(title + " - " + XDate.getDateNow(XDate.MMDDYYHHMM),
+ (sb.toString().equals("") ? "Nothing Logged" : sb.toString()), manipulations);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultHtml.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultHtml.java
new file mode 100644
index 00000000000..1407d0799f7
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultHtml.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xresults;
+
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XResultHtml {
+
+ /**
+ *
+ */
+ public XResultHtml() {
+ super();
+ }
+
+ public static String getOpenHyperlinkHtml(Artifact art) {
+ return getOpenHyperlinkHtml(art.getDescriptiveName(), art);
+ }
+
+ public static String getOpenHyperlinkHtml(String name, String hrid) {
+ return AHTML.getHyperlink(ResultBrowserHyperCmd.getHyperCmdStr(ResultBrowserHyperCmd.openAction, hrid), name);
+ }
+
+ public static String getOpenHyperlinkHtml(String name, String hrid, int branchId) {
+ return AHTML.getHyperlink(ResultBrowserHyperCmd.getHyperCmdStr(ResultBrowserHyperCmd.openArtifctBranch,
+ hrid + "(" + branchId + ")"), name);
+ }
+
+ public static String getOpenArtEditHyperlinkHtml(String name, String hrid) {
+ return AHTML.getHyperlink(ResultBrowserHyperCmd.getHyperCmdStr(ResultBrowserHyperCmd.openArtifactEditor, hrid),
+ name);
+ }
+
+ public static String getOpenArtViewHyperlinkHtml(String name, String hrid) {
+ return AHTML.getHyperlink(ResultBrowserHyperCmd.getHyperCmdStr(ResultBrowserHyperCmd.openArtifactHyperViewer,
+ hrid), name);
+ }
+
+ public static String getOpenHyperlinkHtml(String name, Artifact art) {
+ return AHTML.getHyperlink(ResultBrowserHyperCmd.getHyperCmdStr(ResultBrowserHyperCmd.openAction, art.getGuid()),
+ name);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultPage.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultPage.java
new file mode 100644
index 00000000000..c2f92bd4853
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultPage.java
@@ -0,0 +1,275 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xresults;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.Dialogs;
+import org.eclipse.swt.program.Program;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XResultPage {
+
+ private String title;
+ private String html;
+ private final String id; // Used to add and remove to menu item
+ private String manipulatedHtml;
+ private Set<Manipulations> manipulations = new HashSet<Manipulations>();
+ private int numWarnings = Integer.MAX_VALUE;
+ private int numErrors = Integer.MAX_VALUE;
+ public static enum Manipulations {
+ NONE, HRID_CMD_HYPER, // Replace all HRID strings with hyperlinks; ATS=<hrid> opens Action
+ // editor
+ // ART=<hrid> opens Artifact editor, BOTH=<hrid> allows either
+ HRID_ATS_HYPER, // Replace all HRID strings with hyperlinks to open ATS; this happens after
+ // the HRID_CMD_HYPER replace
+ ERROR_RED, // Make all "Error" strings red
+ WARNING_YELLOW, // Make all "Warning" strings yellow
+ CONVERT_NEWLINES, // Convert all \n to <br>
+ HTML_MANIPULATIONS, // Do all except converting newlines
+ RAW_HTML, // Just display in simple html page
+ ERROR_WARNING_HEADER, // Shows Errors: 4 Warnings: 23 count at top of page
+ NO_POPUP, // No dialog will show at the end of the display of the result page
+ ALL
+ };
+ public enum HyperType {
+ ATS, ART, BOTH
+ };
+
+ /**
+ * Create and display result page with all Manipulations available
+ */
+ public XResultPage(String title, String text) {
+ this(title, text, Manipulations.ALL);
+ }
+
+ /**
+ * Create and display result page with given Manipulations
+ *
+ * @param title title of the page (include date/time due or something unique due to multi-page view of results)
+ * @param html html to display (minus manipulations). this html MUST already handle new lines (eg
+ * text.replaceAll("\n",AHTML.newLine())) or use the CONVERT_NEWLINES manipultion
+ * @param manipulations manipulations desired for the input HTML
+ */
+ public XResultPage(String title, String html, Manipulations... manipulations) {
+ super();
+ this.title = title;
+ this.html = html;
+ id = GUID.generateGuidStr();
+ for (Manipulations man : manipulations) {
+ if (man == Manipulations.ALL) {
+ this.manipulations.add(Manipulations.HRID_ATS_HYPER);
+ this.manipulations.add(Manipulations.HRID_CMD_HYPER);
+ this.manipulations.add(Manipulations.ERROR_RED);
+ this.manipulations.add(Manipulations.CONVERT_NEWLINES);
+ this.manipulations.add(Manipulations.WARNING_YELLOW);
+ } else if (man == Manipulations.HTML_MANIPULATIONS) {
+ this.manipulations.add(Manipulations.HRID_ATS_HYPER);
+ this.manipulations.add(Manipulations.HRID_CMD_HYPER);
+ this.manipulations.add(Manipulations.ERROR_RED);
+ this.manipulations.add(Manipulations.WARNING_YELLOW);
+ } else
+ this.manipulations.add(man);
+ }
+ }
+
+ public int getNumWarnings() {
+ if (numWarnings != Integer.MAX_VALUE) return numWarnings;
+ if (manipulations.contains(Manipulations.WARNING_YELLOW)) numWarnings =
+ Lib.numOccurances(html, "Warning:");
+ if (numWarnings == Integer.MAX_VALUE) return 0;
+ return numWarnings;
+ }
+
+ public int getNumErrors() {
+ if (numErrors != Integer.MAX_VALUE) return numErrors;
+ if (manipulations.contains(Manipulations.ERROR_RED)) numErrors =
+ Lib.numOccurances(html, "Error:");
+ if (numErrors == Integer.MAX_VALUE) return 0;
+ return numErrors;
+ }
+
+ public static String getCmdValue(HyperType type, String hrid) {
+ return String.format("%s=%s", type.name(), hrid);
+ }
+
+ /**
+ * @param type
+ * @param name that will show hyperlinked
+ * @param hrid value that will be returned upon selection of hyperlink
+ * @return cmd value to put in HTML for processing by result page
+ */
+ public static String getCmdValue(HyperType type, String name, String hrid) {
+ return String.format("%s=%s:%s", type.name(), name, hrid);
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getErrorWarningHtml() {
+ return String.format("<b>Errors</b>: %d <b>Warnings</b>: %d<br><br>",
+ getNumErrors(), getNumWarnings());
+ }
+
+ public String getManipulatedHtml() {
+ return getManipulatedHtml(manipulations);
+ }
+
+ public String getManipulatedHtml(Collection<Manipulations> manipulations) {
+ if (manipulatedHtml == null) {
+ String str =
+ (manipulations.contains(Manipulations.ERROR_WARNING_HEADER) ? getErrorWarningHtml() : "") + getText();
+ if (manipulations.contains(Manipulations.RAW_HTML)) {
+ str = AHTML.simplePage(str);
+ } else {
+ if (manipulations.contains(Manipulations.CONVERT_NEWLINES)) str =
+ str.replaceAll("\n", AHTML.newline());
+ if (manipulations.contains(Manipulations.HRID_CMD_HYPER)) {
+ // System.err.println("match " + line);
+ // Match getText so it doesn't mess up replace
+ // Retireve all ATS=WPN_PAGE:HSRID matches
+ Matcher m =
+ Pattern.compile("([A-Z]{3,4})=(.*?):([A-Z0-9]{5})").matcher(str);
+ Set<String> cmdNameHrids = new HashSet<String>();
+ while (m.find())
+ cmdNameHrids.add(m.group());
+ // Retrieve all ATS=Name:HRSID matches and replace with hyperlinking
+ for (String cmdNameHrid : cmdNameHrids) {
+ String value = cmdNameHrid;
+ value = value.replaceAll("^.*?=", "");
+ String name = value;
+ name = name.replaceAll(":.*$", "");
+ String hrid = value;
+ hrid = hrid.replaceAll("^.*:", "");
+ if (cmdNameHrid.startsWith(HyperType.BOTH.name())) {
+ String replaceStr =
+ hrid + " (" + XResultHtml.getOpenHyperlinkHtml("ATS-" + name,
+ hrid);
+ replaceStr +=
+ " " + XResultHtml.getOpenArtEditHyperlinkHtml("AE-" + name,
+ hrid);
+ replaceStr += ")";
+ str = str.replaceAll(cmdNameHrid, replaceStr);
+ } else if (cmdNameHrid.startsWith(HyperType.ATS.name())) {
+ str =
+ str.replaceAll(cmdNameHrid, XResultHtml.getOpenHyperlinkHtml(
+ name, hrid));
+ } else if (cmdNameHrid.startsWith(HyperType.ART.name())) {
+ str =
+ str.replaceAll(cmdNameHrid,
+ XResultHtml.getOpenArtEditHyperlinkHtml(name, hrid));
+ }
+ }
+ // Retrieve all ATS=HRSID matches and replace with hyperlinking
+ m = Pattern.compile("([A-Z]{3,4})=([A-Z0-9]{5})").matcher(str);
+ Set<String> cmdHrids = new HashSet<String>();
+ while (m.find())
+ cmdHrids.add(m.group());
+ for (String cmdHrid : cmdHrids) {
+ String hrid = cmdHrid;
+ hrid = hrid.replaceAll("^.*?=", "");
+ if (cmdHrid.startsWith(HyperType.BOTH.name())) {
+ String replaceStr =
+ hrid + " (" + XResultHtml.getOpenHyperlinkHtml("ATS", hrid);
+ replaceStr +=
+ " " + XResultHtml.getOpenArtEditHyperlinkHtml("AE", hrid);
+ replaceStr += ")";
+ str = str.replaceAll(cmdHrid, replaceStr);
+ } else if (cmdHrid.startsWith(HyperType.ATS.name())) {
+ str =
+ str.replaceAll(cmdHrid, XResultHtml.getOpenHyperlinkHtml(hrid,
+ hrid));
+ } else if (cmdHrid.startsWith(HyperType.ART.name())) {
+ str =
+ str.replaceAll(cmdHrid,
+ XResultHtml.getOpenArtEditHyperlinkHtml(hrid, hrid));
+ }
+ }
+ }
+ if (manipulations.contains(Manipulations.HRID_ATS_HYPER)) {
+ Matcher m =
+ Pattern.compile(
+ "(?<![A-Za-z0-9])([A-Z0-9]{1}[B-DF-HJ-NP-TV-Z0-9]{3}[A-Z0-9]{1})(?![A-Za-z0-9])").matcher(
+ str);
+ Set<String> hrids = new HashSet<String>();
+ while (m.find())
+ hrids.add(m.group(1));
+ for (String hrid : hrids)
+ str =
+ str.replaceAll(hrid, XResultHtml.getOpenHyperlinkHtml(hrid, hrid));
+ }
+ if (manipulations.contains(Manipulations.ERROR_RED)) {
+ str = str.replaceAll("Error:", AHTML.color("red", "Error:"));
+ }
+ if (manipulations.contains(Manipulations.WARNING_YELLOW)) {
+ str = str.replaceAll("Warning:", AHTML.color("orange", "Warning:"));
+ }
+ }
+ manipulatedHtml = str;
+ }
+ return manipulatedHtml;
+ }
+
+ public String getText() {
+ return html;
+ }
+
+ public void setHtml(String html) {
+ this.html = html;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public Set<Manipulations> getManipulations() {
+ return manipulations;
+ }
+
+ public void setManipulations(Set<Manipulations> manipulations) {
+ this.manipulations = manipulations;
+ }
+
+ public void handleExport() {
+ Dialogs.exportHtmlTableDialog(title, html, true);
+ }
+
+ public void saveToFile() {
+ saveToFile(null);
+ }
+
+ public void saveToFile(String filename) {
+ if (manipulatedHtml == null) {
+ getManipulatedHtml();
+ }
+ if (filename == null) {
+ Dialogs.saveHtmlDialog(manipulatedHtml, true);
+ } else {
+ AFile.writeFile(filename, manipulatedHtml);
+ Program.launch(filename);
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultView.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultView.java
new file mode 100644
index 00000000000..c6dc07ab517
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultView.java
@@ -0,0 +1,333 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xresults;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.Dialogs;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @see ViewPart
+ * @author Donald G. Dunne
+ */
+public class XResultView extends ViewPart implements IActionable {
+
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultView";
+ private static String HELP_CONTEXT_ID = "xResultView";
+ private static File errorImageFile = null;
+ private XResultPage currentPage;
+ private final List<XResultPage> pages = new ArrayList<XResultPage>();
+ private Label errorLabel;
+ private XResultsComposite xResultsComp;
+
+ /**
+ * @author Donald G. Dunne
+ */
+ public XResultView() {
+ if (errorImageFile == null) {
+ try {
+ errorImageFile = SkynetGuiPlugin.getInstance().getPluginFile("images/bug.gif");
+ } catch (IOException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ /**
+ * There is no way to keep track of the items in an menu to display them correctly. Thus, we need to remove all and
+ * re-add from ordered list we have kept.
+ */
+ public void updateActionList() {
+ IMenuManager manager = getViewSite().getActionBars().getMenuManager();
+ manager.removeAll();
+
+ int x = 1;
+ for (final XResultPage fPage : pages) {
+ // Add to pulldown
+ Action action = new Action(x++ + ") " + fPage.getTitle(), Action.AS_CHECK_BOX) {
+
+ @Override
+ public void run() {
+ displayPage(fPage);
+ // Redisplay so check the current action
+ updateActionList();
+ }
+ };
+ action.setToolTipText(fPage.getTitle());
+ action.setId(fPage.getId());
+ if (fPage == currentPage) action.setChecked(true);
+ manager.add(action);
+ }
+ manager.update(true);
+ }
+
+ public void addResultPage(XResultPage page) {
+ currentPage = page;
+
+ XResultView xResultView = getResultView();
+ if (xResultView == null) return;
+
+ pages.add(0, page);
+
+ updateActionList();
+
+ // Display page
+ displayPage(page);
+
+ }
+
+ public void displayPage(XResultPage page) {
+ displayPage(page, false);
+ }
+
+ public void displayPage(XResultPage page, boolean print) {
+
+ currentPage = page;
+
+ // Create report title with errors/warnings if appropriate
+ StringBuffer sb = new StringBuffer();
+ sb.append(" " + page.getTitle());
+ sb.append(String.format("\n Errors: %s Warnings: %s", page.getNumErrors(), page.getNumWarnings()));
+ setErrorLabel(sb.toString());
+
+ // Display results in browser
+ xResultsComp.setHtmlText(page.getManipulatedHtml(), page.getTitle());
+
+ }
+
+ private void setErrorLabel(String text) {
+ errorLabel.setText(text);
+ errorLabel.getParent().layout();
+ }
+
+ public static XResultView getResultView() {
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ try {
+ return (XResultView) page.showView(VIEW_ID);
+ } catch (PartInitException e1) {
+ MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Launch Error",
+ "Couldn't Launch Results View " + e1.getMessage());
+ }
+ return null;
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ }
+
+ @Override
+ public void setFocus() {
+ }
+
+ /*
+ * @see IWorkbenchPart#createPartControl(Composite)
+ */
+ @Override
+ public void createPartControl(Composite parent) {
+ /*
+ * Create a grid layout object so the text and treeviewer are layed out the way I want.
+ */
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 0;
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ parent.setLayout(layout);
+ parent.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ errorLabel = new Label(parent, SWT.NONE);
+
+ xResultsComp = new XResultsComposite(parent, SWT.BORDER);
+
+ SkynetGuiPlugin.getInstance().setHelp(parent, HELP_CONTEXT_ID);
+ SkynetGuiPlugin.getInstance().setHelp(xResultsComp.getBrowser(), HELP_CONTEXT_ID);
+
+ createActions();
+ }
+
+ protected void createActions() {
+
+ IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
+ Action action = new Action("Remove Result") {
+
+ @Override
+ public void run() {
+ if (currentPage == null) {
+ AWorkbench.popup("ERROR", "Nothing to remove");
+ return;
+ }
+ if (MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "Remove Result",
+ "Remove Result\n\nAre you sure?")) {
+ if (pages.contains(currentPage)) pages.remove(currentPage);
+ updateActionList();
+ xResultsComp.getBrowser().setText(AHTML.simplePage("Select page to display."));
+ setErrorLabel("");
+ if (pages.size() == 0) currentPage = null;
+ }
+ }
+ };
+ action.setToolTipText("Remove the current result");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("remove.gif"));
+ toolbarManager.add(action);
+
+ action = new Action("Remove All Results") {
+
+ @Override
+ public void run() {
+ if (currentPage == null) {
+ AWorkbench.popup("ERROR", "Nothing to remove");
+ return;
+ }
+ if (MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "Remove All Results",
+ "Remove All Results\n\nAre you sure?")) {
+ pages.clear();
+ updateActionList();
+ xResultsComp.getBrowser().setText(AHTML.simplePage(""));
+ setErrorLabel("");
+ currentPage = null;
+ }
+ }
+ };
+ action.setToolTipText("Remove all the results");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("removeAll.gif"));
+ toolbarManager.add(action);
+
+ action = new Action("Print") {
+
+ @Override
+ public void run() {
+ printContents();
+ }
+ };
+ action.setToolTipText("Print");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("print.gif"));
+ toolbarManager.add(action);
+
+ action = new Action("Email") {
+
+ @Override
+ public void run() {
+ if (currentPage == null) {
+ AWorkbench.popup("ERROR", "Nothing to email");
+ return;
+ }
+ Set<Manipulations> manipulations = new HashSet<Manipulations>();
+ manipulations.add(Manipulations.ALL);
+ manipulations.add(Manipulations.ERROR_WARNING_HEADER);
+ Dialogs.emailDialog(getTitle(), currentPage.getManipulatedHtml(manipulations));
+ }
+ };
+ action.setToolTipText("Email");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("email.gif"));
+ toolbarManager.add(action);
+
+ action = new Action("Export Table") {
+
+ @Override
+ public void run() {
+ if (currentPage == null) {
+ AWorkbench.popup("ERROR", "Nothing to export");
+ return;
+ }
+ currentPage.handleExport();
+ }
+ };
+ action.setToolTipText("Export table into csv file");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("export.gif"));
+ toolbarManager.add(action);
+
+ action = new Action("Save Report") {
+
+ @Override
+ public void run() {
+ if (currentPage == null) {
+ AWorkbench.popup("ERROR", "Nothing to export");
+ return;
+ }
+ currentPage.saveToFile();
+ }
+ };
+ action.setToolTipText("Save report to file");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("save.gif"));
+ toolbarManager.add(action);
+
+ action = new Action("Import Save Results Report") {
+
+ @Override
+ public void run() {
+ try {
+ final FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell().getShell(), SWT.OPEN);
+ dialog.setFilterExtensions(new String[] {"*.html"});
+ String filename = dialog.open();
+ if (filename == null || filename.equals("")) return;
+ String html = AFile.readFile(filename);
+ if (html == null) throw new IllegalStateException("Can't load file");
+ if (html.equals("")) throw new IllegalStateException("Empty file");
+ XResultView.getResultView().addResultPage(new XResultPage(filename, html, Manipulations.RAW_HTML));
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ };
+ action.setToolTipText("Import saved results report into Results View");
+ action.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("load.gif"));
+ toolbarManager.add(action);
+
+ OseeAts.addBugToViewToolbar(this, this, SkynetGuiPlugin.getInstance(), VIEW_ID, "Result View");
+
+ // IMenuManager manager = getViewSite().getActionBars().getMenuManager();
+
+ }
+
+ public void printContents() {
+ if (currentPage == null) {
+ AWorkbench.popup("ERROR", "Nothing to print");
+ return;
+ }
+ xResultsComp.getBrowser().setUrl("javascript:print()");
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultsComposite.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultsComposite.java
new file mode 100644
index 00000000000..1064109f34f
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xresults/XResultsComposite.java
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xresults;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.Dialogs;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XResultsComposite extends Composite {
+
+ protected Browser browser;
+ private String htmlText;
+ private String title = "";
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public XResultsComposite(Composite parent, int style) {
+ super(parent, style);
+
+ setLayout(new GridLayout(1, false));
+ setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 0;
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ parent.setLayout(layout);
+ parent.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ browser = new Browser(this, SWT.BORDER);
+ browser.addLocationListener(new ResultBrowserListener());
+ browser.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
+ browser.setMenu(getPopup(parent));
+
+ }
+
+ public Menu getPopup(Composite comp) {
+ Menu menu = new Menu(comp);
+
+ MenuItem item = new MenuItem(menu, SWT.NONE);
+ item.setText("View Source");
+ item.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ if (htmlText == null || htmlText.equals("")) {
+ AWorkbench.popup("ERROR", "Nothing to view");
+ return;
+ }
+ String fileName = System.getProperty("user.home") + File.separator + "out.html";
+ AFile.writeFile(fileName, htmlText);
+ Program.launch(fileName);
+ }
+ });
+
+ item = new MenuItem(menu, SWT.NONE);
+ item.setText("Print");
+ item.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ if (htmlText == null || htmlText.equals("")) {
+ AWorkbench.popup("ERROR", "Nothing to print");
+ return;
+ }
+ browser.setUrl("javascript:print()");
+ }
+ });
+
+ item = new MenuItem(menu, SWT.NONE);
+ item.setText("Email");
+ item.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ if (htmlText == null || htmlText.equals("")) {
+ AWorkbench.popup("ERROR", "Nothing to email");
+ return;
+ }
+ Set<Manipulations> manipulations = new HashSet<Manipulations>();
+ manipulations.add(Manipulations.ALL);
+ manipulations.add(Manipulations.ERROR_WARNING_HEADER);
+ Dialogs.emailDialog(title, htmlText);
+ }
+ });
+ item = new MenuItem(menu, SWT.NONE);
+ item.setText("Export Table");
+ item.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ Dialogs.exportHtmlTableDialog(title, htmlText, true);
+ }
+ });
+ item = new MenuItem(menu, SWT.NONE);
+ item.setText("Save to File");
+ item.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ Dialogs.saveHtmlDialog(htmlText, true);
+ }
+ });
+ return menu;
+ }
+
+ /**
+ * @return the browser
+ */
+ public Browser getBrowser() {
+ return browser;
+ }
+
+ /**
+ * @return the htmlText
+ */
+ public String getHtmlText() {
+ return htmlText;
+ }
+
+ /**
+ * @param htmlText the htmlText to set
+ */
+ public void setHtmlText(String htmlText) {
+ this.htmlText = htmlText;
+ }
+
+ /**
+ * @param title
+ * @param htmlText
+ */
+ public void setHtmlText(String htmlText, String title) {
+ this.htmlText = htmlText;
+ this.title = title;
+ if (browser != null && !browser.isDisposed()) browser.setText(htmlText);
+ }
+
+ /**
+ * @return the title
+ */
+ public String getTitle() {
+ return title;
+ }
+
+ /**
+ * @param title the title to set
+ */
+ public void setTitle(String title) {
+ this.title = title;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/IXViewerFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/IXViewerFactory.java
new file mode 100644
index 00000000000..3456424d856
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/IXViewerFactory.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.XViewerCustomMenu;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface IXViewerFactory {
+ /**
+ * Returns the default sorter to use for this xviewer
+ *
+ * @param viewer
+ * @return
+ */
+ XViewerSorter createNewXSorter(XViewer viewer);
+
+ /**
+ * Returns the default table customization for this viewer including column definitions, sorting and filtering (if
+ * any)
+ *
+ * @return
+ */
+ CustomizeData getDefaultTableCustomizeData();
+
+ /**
+ * Returns the default column definition for the given id
+ *
+ * @param id
+ * @return
+ */
+ XViewerColumn getDefaultXViewerColumn(String id);
+
+ /**
+ * Provides the storage mechanism for save/load of personal/global customizations
+ *
+ * @return
+ */
+ IXViewerCustomizations getXViewerCustomizations();
+
+ /**
+ * Provides custom menu for XViewer
+ *
+ * @return
+ */
+ XViewerCustomMenu getXViewerCustomMenu();
+
+ /**
+ * Unique namespace for this viewer
+ *
+ * @return
+ */
+ String getNamespace();
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XPromptChange.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XPromptChange.java
new file mode 100644
index 00000000000..b614a637787
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XPromptChange.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import java.util.Collection;
+import java.util.Date;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+import org.eclipse.osee.framework.ui.plugin.util.EnumStringMultiSelectionDialog;
+import org.eclipse.osee.framework.ui.plugin.util.EnumStringSingleSelectionDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.DateSelectionDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XPromptChange {
+
+ private final static String VALID_FLOAT_REG_EX = "^[0-9\\.]+$";
+ private final static String VALID_INTEGER_REG_EX = "^[0-9]+$";
+ private final static String VALID_PERCENT_REG_EX =
+ "^(0*100{1,1}\\.?((?<=\\.)0*)?%?$)|(^0*\\d{0,2}\\.?((?<=\\.)\\d*)?%?)$";
+ public static enum Option {
+ SINGLE_LINE, MULTI_LINE
+ };
+
+ public static Date promptChangeDate(String displayName, Date currDate) {
+ // prompt that current release is (get from attribute); want to change
+ DateSelectionDialog diag =
+ new DateSelectionDialog("Select " + displayName, "Select " + displayName,
+ currDate != null ? currDate : null);
+ if (diag.open() == 0) {
+ return diag.getSelectedDate();
+ }
+ return null;
+ }
+
+ public static EnumStringSingleSelectionDialog promptChangeSingleSelectEnumeration(String displayName, Collection<String> enums, String currSelected) {
+ final EnumStringSingleSelectionDialog diag =
+ new EnumStringSingleSelectionDialog(displayName, displayName, enums, currSelected);
+ if (diag.open() == 0) {
+ return diag;
+ }
+ return null;
+ }
+
+ public static EnumStringMultiSelectionDialog promptChangeMultiSelectEnumeration(String displayName, Collection<String> enums, Collection<String> currEnums) {
+ final EnumStringMultiSelectionDialog diag = new EnumStringMultiSelectionDialog(displayName, enums, currEnums);
+ if (diag.open() == 0) {
+ return diag;
+ }
+ return null;
+ }
+
+ public static String promptChangeInteger(String displayName, int currEntry) {
+ return promptChangeInteger(displayName, currEntry == 0 ? "" : String.valueOf(currEntry));
+ }
+
+ public static String promptChangeInteger(String displayName, String currEntry) {
+ return promptChangeString(displayName, currEntry, VALID_INTEGER_REG_EX);
+ }
+
+ public static String promptChangePercent(String displayName, String currEntry) {
+ return promptChangeString(displayName, currEntry, VALID_PERCENT_REG_EX);
+ }
+
+ public static String promptChangeFloat(String displayName, double currEntry) {
+ return promptChangeFloat(displayName, currEntry == 0 ? "" : String.valueOf(currEntry));
+ }
+
+ public static String promptChangeFloat(String displayName, String currEntry) {
+ return promptChangeString(displayName, currEntry, VALID_FLOAT_REG_EX);
+ }
+
+ public static String promptChangeString(String displayName, String currEntry, String validationRegEx) {
+ return promptChangeString(displayName, currEntry, validationRegEx, Option.SINGLE_LINE);
+ }
+
+ public static String promptChangeString(String displayName, String currEntry, String validationRegEx, Option option) {
+ EntryDialog ed =
+ new EntryDialog(Display.getCurrent().getActiveShell(), "Enter " + displayName, null,
+ "Enter " + displayName, MessageDialog.QUESTION, new String[] {"OK", "Clear", "Cancel"}, 0);
+ if (option == Option.MULTI_LINE) ed.setFillVertically(true);
+ if (currEntry != null && !currEntry.equals("")) ed.setEntry(currEntry);
+ if (validationRegEx != null) ed.setValidationRegularExpression(validationRegEx);
+ int result = ed.open();
+ if (result == 0)
+ return ed.getEntry();
+ else if (result == 1) return "";
+ return null;
+ }
+
+ public static Boolean promptChangeBoolean(String displayName, String toggleMessage, boolean currSelection) {
+ MessageDialogWithToggle md =
+ new MessageDialogWithToggle(Display.getCurrent().getActiveShell(), displayName, null, displayName,
+ MessageDialog.QUESTION, new String[] {"Ok", "Cancel"}, MessageDialog.OK,
+ (toggleMessage != null ? toggleMessage : displayName), currSelection);
+ int result = md.open();
+ if (result == 256) {
+ return md.getToggleState();
+ }
+ return null;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XSubMenuManager.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XSubMenuManager.java
new file mode 100644
index 00000000000..a3b7a6b70b4
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XSubMenuManager.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class XSubMenuManager extends MenuManager {
+
+ private boolean visible = true;
+
+ /**
+ * @param string
+ */
+ public XSubMenuManager(String string) {
+ super(string);
+ }
+
+ public boolean isEnabled() {
+ return true;
+ }
+
+ public boolean isVisible() {
+ return visible;
+ }
+
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.add(new Separator());
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewer.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewer.java
new file mode 100644
index 00000000000..a6996ab1ff3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewer.java
@@ -0,0 +1,456 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import java.util.Collection;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.ColumnFilterDataUI;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeManager;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.FilterDataUI;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewer extends TreeViewer {
+
+ public static final String MENU_GROUP_PRE = "XVIEWER MENU GROUP PRE";
+ public static final String MENU_GROUP_POST = "XVIEWER MENU GROUP POST";
+ private Label statusLabel;
+ private final MenuManager menuManager;
+ private static boolean ctrlKeyDown = false;
+ private static boolean altKeyDown = false;
+ protected final IXViewerFactory xViewerFactory;
+ private final FilterDataUI filterDataUI;
+ private final ColumnFilterDataUI columnFilterDataUI;
+ private static boolean ctrlKeyListenersSet = false;
+
+ /**
+ * @return the columnFilterDataUI
+ */
+ public ColumnFilterDataUI getColumnFilterDataUI() {
+ return columnFilterDataUI;
+ }
+ private boolean columnMultiEditEnabled = false;
+ private CustomizeManager customizeMgr;
+ private TreeColumn rightClickSelectedColumn = null;
+ private Integer rightClickSelectedColumnNum = null;
+ private TreeItem rightClickSelectedItem = null;
+
+ public XViewer(Composite parent, int style, IXViewerFactory xViewerFactory) {
+ super(parent, style);
+ this.xViewerFactory = xViewerFactory;
+ this.menuManager = new MenuManager();
+ this.menuManager.setRemoveAllWhenShown(true);
+ this.menuManager.createContextMenu(parent);
+ this.filterDataUI = new FilterDataUI(this);
+ this.columnFilterDataUI = new ColumnFilterDataUI(this);
+ try {
+ customizeMgr = new CustomizeManager(this, xViewerFactory);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ createSupportWidgets(parent);
+
+ Tree tree = getTree();
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+ setUseHashlookup(true);
+ setupCtrlKeyListener();
+ }
+
+ public void dispose() {
+ filterDataUI.dispose();
+ columnFilterDataUI.dispose();
+ }
+
+ @Override
+ public void setLabelProvider(IBaseLabelProvider labelProvider) {
+ if (!(labelProvider instanceof XViewerLabelProvider) && !(labelProvider instanceof XViewerStyledTextLabelProvider)) {
+ throw new IllegalArgumentException("Label Provider must extend XViewerLabelProvider");
+ }
+ super.setLabelProvider(labelProvider);
+ }
+
+ public void addCustomizeToViewToolbar(final ViewPart viewPart) {
+ addCustomizeToViewToolbar(viewPart.getViewSite().getActionBars().getToolBarManager());
+ }
+
+ public Action getCustomizeAction() {
+ Action customizeAction = new Action("Customize Table") {
+
+ @Override
+ public void run() {
+ customizeMgr.handleTableCustomization();
+ }
+ };
+ customizeAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("customize.gif"));
+ customizeAction.setToolTipText("Customize Table");
+ return customizeAction;
+ }
+
+ public void addCustomizeToViewToolbar(IToolBarManager toolbarManager) {
+ toolbarManager.add(getCustomizeAction());
+ }
+
+ protected void createSupportWidgets(Composite parent) {
+
+ Composite comp = new Composite(parent, SWT.NONE);
+ comp.setLayout(ALayout.getZeroMarginLayout(4, false));
+ comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ filterDataUI.createWidgets(comp);
+
+ statusLabel = new Label(comp, SWT.NONE);
+ statusLabel.setText(" ");
+ statusLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ getTree().addListener(SWT.MouseDown, new Listener() {
+ public void handleEvent(Event event) {
+ if (event.button == 3) {
+ rightClickSelectedColumn = null;
+ rightClickSelectedColumnNum = null;
+ rightClickSelectedItem = null;
+ Point pt = new Point(event.x, event.y);
+ rightClickSelectedItem = getTree().getItem(pt);
+ if (rightClickSelectedItem == null) return;
+ for (int colNum = 0; colNum < getTree().getColumnCount(); colNum++) {
+ Rectangle rect = rightClickSelectedItem.getBounds(colNum);
+ if (rect.contains(pt)) {
+ rightClickSelectedColumnNum = colNum;
+ rightClickSelectedColumn = getTree().getColumn(colNum);
+ break;
+ }
+ }
+ }
+ }
+ });
+ getTree().addListener(SWT.MouseUp, new Listener() {
+ public void handleEvent(Event event) {
+ Point pt = new Point(event.x, event.y);
+ TreeItem item = getTree().getItem(pt);
+ if (item == null) return;
+ for (int colNum = 0; colNum < getTree().getColumnCount(); colNum++) {
+ Rectangle rect = item.getBounds(colNum);
+ if (rect.contains(pt)) {
+ if (event.button == 1 && ((event.stateMask & SWT.MODIFIER_MASK) == SWT.ALT)) {
+ // System.out.println("Column " + colNum);
+ handleAltLeftClick(getTree().getColumns()[colNum], item);
+ } else if (event.x <= (rect.x + 18)) {
+ handleLeftClickInIconArea(getTree().getColumns()[colNum], item);
+ }
+ // System.out.println("Column " + colNum);
+ handleLeftClick(getTree().getColumns()[colNum], item);
+ }
+ }
+ updateStatusLabel();
+ }
+ });
+
+ getTree().setMenu(getMenuManager().getMenu());
+ columnFilterDataUI.createWidgets(comp);
+
+ customizeMgr.loadCustomization();
+ }
+
+ public int getCurrentColumnWidth(XViewerColumn xCol) {
+ for (TreeColumn col : getTree().getColumns()) {
+ if (col.getText().equals(xCol.getName())) {
+ return col.getWidth();
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ protected void inputChanged(Object input, Object oldInput) {
+ super.inputChanged(input, oldInput);
+ updateStatusLabel();
+ }
+
+ /**
+ * Will be called when Alt-Left-Click is done within table cell
+ *
+ * @param treeColumn
+ * @param treeItem
+ * @return true if handled
+ */
+ public boolean handleAltLeftClick(TreeColumn treeColumn, TreeItem treeItem) {
+ return false;
+ }
+
+ /**
+ * Will be called when click is within the first 18 pixels of the cell rectangle where the icon would be. This method
+ * will be called in addition to handleLeftClick since both are true.
+ *
+ * @param treeColumn
+ * @param treeItem
+ * @return true if handled
+ */
+ public boolean handleLeftClickInIconArea(TreeColumn treeColumn, TreeItem treeItem) {
+ return false;
+ }
+
+ /**
+ * Will be called when a cell obtains a mouse left-click. This method will be called in addition to
+ * handleLeftClickInIconArea if both are true
+ *
+ * @param treeColumn
+ * @param treeItem
+ * @return true if handled
+ */
+ public boolean handleLeftClick(TreeColumn treeColumn, TreeItem treeItem) {
+ return false;
+ }
+
+ public void handleColumnMultiEdit(TreeColumn treeColumn, Collection<TreeItem> treeItems) {
+ }
+
+ public boolean isColumnMultiEditable(TreeColumn treeColumn, Collection<TreeItem> treeItems) {
+ if (!isColumnMultiEditEnabled()) return false;
+ if (!(treeColumn.getData() instanceof XViewerColumn)) return false;
+ return (!((XViewerColumn) treeColumn.getData()).isMultiColumnEditable());
+ }
+
+ public XViewerColumn getXTreeColumn(int columnIndex) {
+ return (XViewerColumn) getTree().getColumn(columnIndex).getData();
+ }
+
+ // Only create one listener for all XViewers
+ private void setupCtrlKeyListener() {
+ if (ctrlKeyListenersSet == false) {
+ ctrlKeyListenersSet = true;
+ Display.getCurrent().addFilter(SWT.KeyDown, displayKeysListener);
+ Display.getCurrent().addFilter(SWT.KeyUp, displayKeysListener);
+ }
+ }
+ Listener displayKeysListener = new Listener() {
+ public void handleEvent(org.eclipse.swt.widgets.Event event) {
+ if (event.keyCode == SWT.CTRL) {
+ if (event.type == SWT.KeyDown) {
+ ctrlKeyDown = true;
+ } else if (event.type == SWT.KeyUp) {
+ ctrlKeyDown = false;
+ }
+ }
+ if (event.keyCode == SWT.ALT) {
+ if (event.type == SWT.KeyDown) {
+ altKeyDown = true;
+ } else if (event.type == SWT.KeyUp) {
+ altKeyDown = false;
+ }
+ }
+ }
+ };
+
+ public void resetDefaultSorter() {
+ customizeMgr.resetDefaultSorter();
+ }
+
+ /**
+ * Override this method if need to perform other tasks upon remove
+ *
+ * @param objects
+ */
+ public void remove(Collection<Object> objects) {
+ super.remove(objects);
+ }
+
+ public void load(Collection<Object> objects) {
+ super.setInput(objects);
+ }
+
+ @Override
+ public void setSorter(ViewerSorter sorter) {
+ super.setSorter(sorter);
+ updateStatusLabel();
+ }
+
+ public MenuManager getMenuManager() {
+ return this.menuManager;
+ }
+
+ public int getVisibleItemCount(TreeItem items[]) {
+ int cnt = items.length;
+ for (TreeItem item : items)
+ if (item.getExpanded()) cnt += getVisibleItemCount(item.getItems());
+ return cnt;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.StructuredViewer#refresh()
+ */
+ @Override
+ public void refresh() {
+ if (getTree() == null || getTree().isDisposed()) return;
+ super.refresh();
+ updateStatusLabel();
+ }
+
+ public boolean isFiltered() {
+ return getFilters().length > 0;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.StructuredViewer#refresh(boolean)
+ */
+ @Override
+ public void refresh(boolean updateLabels) {
+ super.refresh(updateLabels);
+ updateStatusLabel();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.StructuredViewer#refresh(java.lang.Object, boolean)
+ */
+ @Override
+ public void refresh(Object element, boolean updateLabels) {
+ super.refresh(element, updateLabels);
+ updateStatusLabel();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.StructuredViewer#refresh(java.lang.Object)
+ */
+ @Override
+ public void refresh(Object element) {
+ super.refresh(element);
+ updateStatusLabel();
+ }
+
+ /**
+ * Override this to add information to the status string. eg. extra filters etc.
+ *
+ * @return string to add
+ */
+ public String getStatusString() {
+ return "";
+ }
+
+ public void getStatusLine1(StringBuffer sb) {
+ int loadedNum = 0;
+ if (getRoot() != null && ((ITreeContentProvider) getContentProvider()) != null) {
+ loadedNum = ((ITreeContentProvider) getContentProvider()).getChildren(getRoot()).length;
+ }
+ sb.append(" " + loadedNum + " Loaded - " + getVisibleItemCount(getTree().getItems()) + " Shown - " + ((IStructuredSelection) getSelection()).size() + " Selected - ");
+ customizeMgr.getStatusLabelAddition(sb);
+ filterDataUI.getStatusLabelAddition(sb);
+ columnFilterDataUI.getStatusLabelAddition(sb);
+ sb.append(getStatusString());
+ }
+
+ public void getStatusLine2(StringBuffer sb) {
+ customizeMgr.getSortingStr(sb);
+ }
+
+ public void updateStatusLabel() {
+ if (getTree().isDisposed() || statusLabel.isDisposed()) return;
+ StringBuffer sb = new StringBuffer();
+ getStatusLine1(sb);
+ if (sb.length() > 0) {
+ sb.append("\n");
+ }
+ getStatusLine2(sb);
+ String str = sb.toString();
+ statusLabel.setText(str);
+ statusLabel.getParent().getParent().layout();
+ statusLabel.setToolTipText(str);
+ }
+
+ public String getViewerNamespace() {
+ return getXViewerFactory().getNamespace();
+ }
+
+ public IXViewerFactory getXViewerFactory() {
+ return xViewerFactory;
+ }
+
+ public Label getStatusLabel() {
+ return statusLabel;
+ }
+
+ /**
+ * @return the textFilterComp
+ */
+ public FilterDataUI getFilterDataUI() {
+ return filterDataUI;
+ }
+
+ public boolean isColumnMultiEditEnabled() {
+ return columnMultiEditEnabled;
+ }
+
+ public void setColumnMultiEditEnabled(boolean columnMultiEditEnabled) {
+ this.columnMultiEditEnabled = columnMultiEditEnabled;
+ }
+
+ /**
+ * @return the rightClickSelectedColumn
+ */
+ public TreeColumn getRightClickSelectedColumn() {
+ return rightClickSelectedColumn;
+ }
+
+ /**
+ * @return the rightClickSelectedItem
+ */
+ public TreeItem getRightClickSelectedItem() {
+ return rightClickSelectedItem;
+ }
+
+ public Integer getRightClickSelectedColumnNum() {
+ return rightClickSelectedColumnNum;
+ }
+
+ public CustomizeManager getCustomizeMgr() {
+ return customizeMgr;
+ }
+
+ public boolean isCtrlKeyDown() {
+ return ctrlKeyDown;
+ }
+
+ public boolean isAltKeyDown() {
+ return altKeyDown;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerCells.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerCells.java
new file mode 100644
index 00000000000..ba74fa4ae5a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerCells.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import java.util.logging.Level;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerCells {
+
+ public static String getCellExceptionString(String message) {
+ return CELL_ERROR_PREFIX + " - " + message;
+ }
+
+ public static String getCellExceptionString(Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ return CELL_ERROR_PREFIX + " - " + ex.getLocalizedMessage();
+ }
+
+ public static final String CELL_ERROR_PREFIX = "!Error";
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumn.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumn.java
new file mode 100644
index 00000000000..8c0fe176f19
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumn.java
@@ -0,0 +1,244 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import org.eclipse.osee.framework.jdk.core.util.AXml;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerColumn {
+
+ private XViewer xViewer;
+ private String id;
+ private String name = "";
+ private String description;
+ private boolean multiColumnEditable = false;
+ private int width;
+ private int align;
+ private boolean sortForward = true; // if true, sort alphabetically; else reverse
+ private boolean show = true;
+ private SortDataType sortDataType = SortDataType.String;
+ private String toolTip = "";
+ public enum SortDataType {
+ Date, Float, Percent, String, String_MultiLine, Boolean, Integer
+ };
+
+ public XViewerColumn(String id, String name, int width, int align, boolean show, SortDataType sortDataType, boolean multiColumnEditable, String description) {
+ super();
+ this.id = id;
+ this.name = name;
+ this.width = width;
+ this.align = align;
+ this.show = show;
+ this.sortDataType = sortDataType;
+ this.multiColumnEditable = multiColumnEditable;
+ this.description = description;
+ this.toolTip = this.name;
+ }
+
+ /**
+ * XViewer uses copies of column definitions so originals that are registered are not corrupted. Classes extending
+ * XViewerColumn need to extend this method to copy extra stored fields
+ *
+ * @param col
+ */
+ public XViewerColumn copy() {
+ return new XViewerColumn(id, name, width, align, show, sortDataType, multiColumnEditable, description);
+ }
+
+ public XViewerColumn(XViewer xViewer, String xml) {
+ this.xViewer = xViewer;
+ setFromXml(xml);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof XViewerColumn) {
+ return ((XViewerColumn) obj).getId().equals(id);
+ }
+ return super.equals(obj);
+ }
+
+ @Override
+ public int hashCode() {
+ return getId().hashCode();
+ }
+
+ public static String ID = "id";
+ public static String NAME = "name";
+ public static String WIDTH = "wdth";
+ public static String ALIGN = "algn";
+ public static String SORT_FORWARD = "srtFwd";
+ public static String SHOW = "show";
+ public static String XTREECOLUMN_TAG = "xCol";
+
+ public String toXml() {
+ StringBuffer sb = new StringBuffer("<" + XTREECOLUMN_TAG + ">");
+ sb.append(AXml.addTagData(ID, id));
+ sb.append(AXml.addTagData(NAME, name));
+ sb.append(AXml.addTagData(WIDTH, width + ""));
+ sb.append(AXml.addTagData(ALIGN, getAlignStoreName(align)));
+ sb.append(AXml.addTagData(SORT_FORWARD, sortForward + ""));
+ sb.append(AXml.addTagData(SHOW, show + ""));
+ sb.append("</" + XTREECOLUMN_TAG + ">");
+ return sb.toString();
+ }
+
+ public void setFromXml(String xml) {
+ id = AXml.getTagData(xml, ID);
+ name = AXml.getTagData(xml, NAME);
+ width = AXml.getTagIntData(xml, WIDTH);
+ align = getAlignStoreValue(AXml.getTagData(xml, ALIGN));
+ sortForward = AXml.getTagBooleanData(xml, SORT_FORWARD);
+ show = AXml.getTagBooleanData(xml, SHOW);
+ }
+
+ public static String getColumnId(String xml) {
+ return AXml.getTagData(xml, ID);
+ }
+
+ public String getAlignStoreName(int align) {
+ if (align == SWT.CENTER)
+ return "center";
+ else if (align == SWT.RIGHT)
+ return "right";
+ else
+ return "left";
+ }
+
+ public int getAlignStoreValue(String str) {
+ if (str.equals("center"))
+ return SWT.CENTER;
+ else if (str.equals("right"))
+ return SWT.RIGHT;
+ else
+ return SWT.LEFT;
+ }
+
+ public String getDisplayName() {
+ return name + " - " + id + " - width:" + width + " - show:" + show;
+ }
+
+ @Override
+ public String toString() {
+ return "column:[" + name + "][" + id + "][" + width + "][" + show + "][" + align + "]";
+ }
+
+ public int getAlign() {
+ return align;
+ }
+
+ public void setAlign(int align) {
+ this.align = align;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public XViewer getTreeViewer() {
+ return xViewer;
+ }
+
+ public boolean isSortForward() {
+ return sortForward;
+ }
+
+ public void setSortForward(boolean sortForward) {
+ this.sortForward = sortForward;
+ }
+
+ public void reverseSort() {
+ setSortForward(!sortForward);
+ }
+
+ public boolean isShow() {
+ return show;
+ }
+
+ public void setShow(boolean show) {
+ this.show = show;
+ }
+
+ /**
+ * @return alternateName if exists, otherwise systemName
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @return the sortDataType
+ */
+ public SortDataType getSortDataType() {
+ return sortDataType;
+ }
+
+ /**
+ * @param sortDataType the sortDataType to set
+ */
+ public void setSortDataType(SortDataType sortDataType) {
+ this.sortDataType = sortDataType;
+ }
+
+ /**
+ * @param treeViewer the treeViewer to set
+ */
+ public void setXViewer(XViewer treeViewer) {
+ this.xViewer = treeViewer;
+ }
+
+ /**
+ * @return the toolTip
+ */
+ public String getToolTip() {
+ return toolTip;
+ }
+
+ /**
+ * @param toolTip the toolTip to set
+ */
+ public void setToolTip(String toolTip) {
+ if (toolTip != null) this.toolTip = toolTip;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ this.toolTip = getName() + ":\n" + getDescription();
+ }
+
+ public boolean isMultiColumnEditable() {
+ return multiColumnEditable;
+ }
+
+ public void setMultiColumnEditable(boolean multiColumnEditable) {
+ this.multiColumnEditable = multiColumnEditable;
+ }
+
+ public void setWidth(int width) {
+ this.width = width;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumnLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumnLabelProvider.java
new file mode 100644
index 00000000000..854737de1ea
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumnLabelProvider.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerColumnLabelProvider implements ILabelProvider {
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public Image getImage(Object element) {
+ return null;
+ }
+
+ public String getText(Object element) {
+ if (!(element instanceof XViewerColumn)) return "";
+ XViewerColumn xCol = (XViewerColumn) element;
+ return xCol.getDisplayName();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumnSorter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumnSorter.java
new file mode 100644
index 00000000000..6304939cb3b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerColumnSorter.java
@@ -0,0 +1,38 @@
+/*
+ * Created on Oct 30, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.widgets.TreeColumn;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerColumnSorter extends ViewerSorter {
+
+ public XViewerColumnSorter() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer,
+ * java.lang.Object, java.lang.Object)
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ if (e1 instanceof XViewerColumn) {
+ return getComparator().compare(((XViewerColumn) e1).toString(), ((XViewerColumn) e2).toString());
+ } else if ((e1 instanceof TreeColumn) && ((TreeColumn) e1).getData() instanceof XViewerColumn) {
+
+ return getComparator().compare(((XViewerColumn) ((TreeColumn) e1).getData()).toString(),
+ ((XViewerColumn) ((TreeColumn) e2).getData()).toString());
+ } else
+ return 0;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerFactory.java
new file mode 100644
index 00000000000..b879fb5fb2e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerFactory.java
@@ -0,0 +1,116 @@
+/*
+ * Created on Jul 21, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.XViewerCustomMenu;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.XViewerCustomizations;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerFactory implements IXViewerFactory {
+
+ private String namespace;
+
+ /**
+ * @param namespace the namespace to set
+ */
+ public void setNamespace(String namespace) {
+ this.namespace = namespace;
+ }
+
+ private final List<XViewerColumn> columns = new ArrayList<XViewerColumn>();
+ private final Map<String, XViewerColumn> idToColumn = new HashMap<String, XViewerColumn>();
+
+ public XViewerFactory(String namespace) {
+ this.namespace = namespace;
+ }
+
+ public void registerColumn(XViewerColumn... columns) {
+ if (columns.length == 0) throw new IllegalArgumentException("columns can't be null");
+ for (XViewerColumn xCol : columns) {
+ if (!columnRegistered(xCol)) {
+ this.columns.add(xCol);
+ idToColumn.put(xCol.getId(), xCol);
+ }
+ }
+ }
+
+ public boolean columnRegistered(XViewerColumn column) {
+ return this.columns.contains(column);
+ }
+
+ public void clearColumnRegistration() {
+ this.columns.clear();
+ idToColumn.clear();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.IXViewerFactory#createNewXSorter(org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer)
+ */
+ @Override
+ public XViewerSorter createNewXSorter(XViewer xViewer) {
+ return new XViewerSorter(xViewer);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.IXViewerFactory#getDefaultTableCustomizeData(org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer)
+ */
+ @Override
+ public CustomizeData getDefaultTableCustomizeData() {
+ CustomizeData custData = new CustomizeData();
+ custData.setNameSpace(namespace);
+ custData.getColumnData().setColumns(getColumns());
+ return custData;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.IXViewerFactory#getDefaultXViewerColumn(java.lang.String)
+ */
+ @Override
+ public XViewerColumn getDefaultXViewerColumn(String id) {
+ // Return a copy so don't corrupt original definition of column
+ XViewerColumn col = idToColumn.get(id);
+ if (col == null) return null;
+ return col.copy();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.IXViewerFactory#getXViewerCustomizations(org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer)
+ */
+ @Override
+ public IXViewerCustomizations getXViewerCustomizations() {
+ return new XViewerCustomizations();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.IXViewerFactory#getXViewerCustomMenu()
+ */
+ @Override
+ public XViewerCustomMenu getXViewerCustomMenu() {
+ return new XViewerCustomMenu();
+ }
+
+ public String getNamespace() {
+ return namespace;
+ }
+
+ public List<XViewerColumn> getColumns() {
+ // Return a copy so don't corrupt original definition of column
+ List<XViewerColumn> columnCopy = new ArrayList<XViewerColumn>();
+ for (XViewerColumn xCol : columns) {
+ columnCopy.add(xCol.copy());
+ }
+ return columnCopy;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerLabelProvider.java
new file mode 100644
index 00000000000..7f23c75828b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerLabelProvider.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ITableColorProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class XViewerLabelProvider implements ITableLabelProvider, ITableColorProvider {
+
+
+private final XViewer viewer;
+
+ // Store index of columnIndex to XViewerColumns to speed up label providing
+ private Map<Integer, XViewerColumn> indexToXViewerColumnMap = new HashMap<Integer, XViewerColumn>();
+
+ private XViewerColumn getTreeColumnOffIndex(int columnIndex) {
+ if (!indexToXViewerColumnMap.containsKey(columnIndex)) {
+ XViewerColumn xViewerColumn = viewer.getXTreeColumn(columnIndex);
+ if (xViewerColumn != null) {
+ indexToXViewerColumnMap.put(columnIndex, xViewerColumn);
+ }
+ }
+ return indexToXViewerColumnMap.get(columnIndex);
+ }
+
+ // When columns get re-ordered, need to clear out this cache so indexing can be re-computed
+ public void clearXViewerColumnIndexCache() {
+ indexToXViewerColumnMap.clear();
+ }
+
+ /**
+ * @param viewer
+ */
+ public XViewerLabelProvider(final XViewer viewer) {
+ super();
+ this.viewer = viewer;
+ }
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ try {
+ XViewerColumn xViewerColumn = getTreeColumnOffIndex(columnIndex);
+ // If not shown, don't process any further
+ if (!xViewerColumn.isShow()) return null;
+ if (xViewerColumn != null) {
+ if (xViewerColumn instanceof XViewerValueColumn) {
+ Image image = ((XViewerValueColumn) xViewerColumn).getColumnImage(element, xViewerColumn, columnIndex);
+ if (image != null) return image;
+ }
+ return getColumnImage(element, xViewerColumn, columnIndex);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return null;
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ try {
+ XViewerColumn xViewerColumn = getTreeColumnOffIndex(columnIndex);
+ // If not shown, don't process any further
+ if (!xViewerColumn.isShow()) return "";
+ if (xViewerColumn instanceof XViewerValueColumn) {
+ return ((XViewerValueColumn) xViewerColumn).getColumnText(element, xViewerColumn, columnIndex);
+ }
+ return getColumnText(element, xViewerColumn, columnIndex);
+ } catch (Exception ex) {
+ return XViewerCells.getCellExceptionString(ex);
+ }
+ }
+
+ @Override
+ public Color getBackground(Object element, int columnIndex) {
+ try {
+ XViewerColumn xViewerColumn = getTreeColumnOffIndex(columnIndex);
+ // If not shown, don't process any further
+ if (!xViewerColumn.isShow()) return null;
+ if (xViewerColumn instanceof XViewerValueColumn) {
+ return ((XViewerValueColumn) xViewerColumn).getBackground(element, xViewerColumn, columnIndex);
+ } else {
+ return getBackground(element, xViewerColumn, columnIndex);
+ }
+ } catch (Exception ex) {
+ // do nothing
+ }
+ return null;
+ }
+
+ @Override
+ public Color getForeground(Object element, int columnIndex) {
+ try {
+ XViewerColumn xViewerColumn = getTreeColumnOffIndex(columnIndex);
+ // If not shown, don't process any further
+ if (!xViewerColumn.isShow()) return null;
+ if (xViewerColumn instanceof XViewerValueColumn) {
+ return ((XViewerValueColumn) xViewerColumn).getForeground(element, xViewerColumn, columnIndex);
+ } else {
+ return getForeground(element, xViewerColumn, columnIndex);
+ }
+ } catch (Exception ex) {
+ // do nothing
+ }
+ return null;
+ }
+
+ public Color getBackground(Object element, XViewerColumn xCol, int columnIndex) {
+ return null;
+ }
+
+ public Color getForeground(Object element, XViewerColumn xCol, int columnIndex) {
+ return null;
+ }
+
+ public abstract Image getColumnImage(Object element, XViewerColumn xCol, int columnIndex) throws OseeCoreException;
+
+ public abstract String getColumnText(Object element, XViewerColumn xCol, int columnIndex) throws OseeCoreException;
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerSorter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerSorter.java
new file mode 100644
index 00000000000..5272e93998a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerSorter.java
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn.SortDataType;
+
+/**
+ * XTreeSorter is equipped to: 1) Sort columns forward and backward by re-selecting the column 2) Sort by multiple
+ * columns
+ *
+ * @author Donald G. Dunne
+ */
+public class XViewerSorter extends ViewerSorter {
+ private final XViewer treeViewer;
+ private final static SimpleDateFormat format10 = new SimpleDateFormat("MM/dd/yyyy");
+
+ public XViewerSorter(XViewer treeViewer) {
+ super();
+ this.treeViewer = treeViewer;
+ }
+
+ @SuppressWarnings("unchecked")
+ public int compare(Viewer viewer, Object o1, Object o2, int sortXColIndex) {
+ if (treeViewer.getCustomizeMgr().isLoading()) return 0;
+ List<XViewerColumn> sortXCols = treeViewer.getCustomizeMgr().getSortXCols();
+ if (sortXCols == null || sortXCols.size() == 0) return 0;
+ XViewerColumn sortXCol = sortXCols.get(sortXColIndex);
+ try {
+ int columnNum = treeViewer.getCustomizeMgr().getColumnNumFromXViewerColumn(sortXCol);
+ String o1Str = ((XViewerLabelProvider) treeViewer.getLabelProvider()).getColumnText(o1, columnNum);
+ String o2Str = ((XViewerLabelProvider) treeViewer.getLabelProvider()).getColumnText(o2, columnNum);
+
+ // System.out.println("sortForward.get(columnNum) *" +
+ // sortXCol.isSortForward() + "*");
+ int compareInt = 0;
+ if (o1Str == null)
+ compareInt = -1;
+ else if (o2Str == null)
+ compareInt = 1;
+ else if (sortXCol.getSortDataType() == SortDataType.Date)
+ compareInt = getCompareForDate(o1Str, o2Str);
+ else if (sortXCol.getSortDataType() == SortDataType.Percent)
+ compareInt = getCompareForPercent(o1Str, o2Str);
+ else if (sortXCol.getSortDataType() == SortDataType.Float)
+ compareInt = getCompareForFloat(o1Str, o2Str);
+ else if (sortXCol.getSortDataType() == SortDataType.Integer)
+ compareInt = getCompareForInteger(o1Str, o2Str);
+ else
+ compareInt = getComparator().compare(o1Str, o2Str);
+
+ return getCompareBasedOnDirection(sortXCol, compareInt, viewer, o1, o2, sortXColIndex);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return 0;
+ }
+
+ @Override
+ public int compare(Viewer viewer, Object o1, Object o2) {
+ return compare(viewer, o1, o2, 0);
+ }
+
+ public int getCompareBasedOnDirection(XViewerColumn sortXCol, int compareInt, Viewer viewer, Object o1, Object o2, int sortXColIndex) {
+ List<XViewerColumn> sortXCols = treeViewer.getCustomizeMgr().getSortXCols();
+ int returnInt = (sortXCol.isSortForward() ? 1 : -1) * compareInt;
+ // System.out.println("returnInt *" + returnInt + "*");
+ if (returnInt == 0 && sortXCols.size() > (sortXColIndex + 1)) {
+ returnInt = compare(viewer, o1, o2, (sortXColIndex + 1));
+ }
+ return returnInt;
+ }
+
+ public int getCompareForFloat(String float1, String float2) {
+ double float1Float = 0;
+ try {
+ float1Float = (new Double(float1)).doubleValue();
+ } catch (NumberFormatException ex) {
+ return 0;
+ }
+ double float2Float = 0;
+ try {
+ float2Float = (new Double(float2)).doubleValue();
+ } catch (NumberFormatException ex) {
+ return 1;
+ }
+ return getCompareForFloat(float1Float, float2Float);
+ }
+
+ public int getCompareForInteger(String int1, String int2) {
+ int int1Integer = 0;
+ try {
+ int1Integer = (new Integer(int1)).intValue();
+ } catch (NumberFormatException ex) {
+ return 0;
+ }
+ int int2Integer = 0;
+ try {
+ int2Integer = (new Integer(int2)).intValue();
+ } catch (NumberFormatException ex) {
+ return 1;
+ }
+ return getCompareForInteger(int1Integer, int2Integer);
+ }
+
+ public static int getCompareForFloat(double float1, double float2) {
+ if (float1 == float2)
+ return 0;
+ else if (float1 == 0 || float1 < float2)
+ return -1;
+ else if (float2 == 0 || float2 < float1)
+ return 1;
+ else
+ return 0;
+ }
+
+ public static int getCompareForInteger(int int1, int int2) {
+ if (int1 == int2)
+ return 0;
+ else if (int1 == 0 || int1 < int2)
+ return -1;
+ else if (int2 == 0 || int2 < int1)
+ return 1;
+ else
+ return 0;
+ }
+
+ public int getCompareForDate(String date1, String date2) {
+ if (date1.trim().equals("")) return -1;
+ if (date2.trim().equals("")) return 1;
+ DateFormat format;
+ if (date1.length() == 10) {
+ format = format10;
+ } else {
+ format = SimpleDateFormat.getInstance();
+ }
+ Date date1Date = null;
+ try {
+ date1Date = format.parse(date1);
+ } catch (ParseException ex) {
+ try {
+ date1Date = SimpleDateFormat.getInstance().parse(date1);
+ } catch (ParseException ex2) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex2);
+ return 0;
+ }
+ }
+ Date date2Date = null;
+ try {
+ date2Date = format.parse(date2);
+ } catch (ParseException ex) {
+ try {
+ date2Date = SimpleDateFormat.getInstance().parse(date2);
+ } catch (ParseException ex2) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex2);
+ return 0;
+ }
+ }
+ return getCompareForDate(date1Date, date2Date);
+ }
+
+ public int getCompareForDate(Date date1, Date date2) {
+ return date1.compareTo(date2);
+ }
+
+ public int getCompareForPercent(String percent1, String percent2) {
+ int percent1Int = 0;
+ try {
+ percent1Int = (new Integer(percent1)).intValue();
+ } catch (NumberFormatException ex) {
+ percent1Int = -1;
+ }
+ int percent2Int = 0;
+ try {
+ percent2Int = (new Integer(percent2)).intValue();
+ } catch (NumberFormatException ex) {
+ percent2Int = 1;
+ }
+ return getCompareForPercent(percent1Int, percent2Int);
+ }
+
+ @SuppressWarnings("unchecked")
+ public int getCompareForPercent(int percent1, int percent2) {
+ int compareInt = 0;
+ if (percent1 == percent2)
+ compareInt = 0;
+ else if (percent1 == 0)
+ compareInt = -1;
+ else if (percent2 == 0)
+ compareInt = 1;
+ else if (percent1 == 100)
+ compareInt = 1;
+ else if (percent2 == 100)
+ compareInt = -1;
+ else
+ compareInt = getComparator().compare(String.valueOf(percent1), String.valueOf(percent2));
+ return compareInt;
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerStyledTextLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerStyledTextLabelProvider.java
new file mode 100644
index 00000000000..6d126d88d3d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerStyledTextLabelProvider.java
@@ -0,0 +1,210 @@
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.StyledCellLabelProvider;
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.jface.viewers.ViewerCell;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.custom.StyleRange;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+public abstract class XViewerStyledTextLabelProvider extends
+ StyledCellLabelProvider {
+
+ private final XViewer viewer;
+
+ // Store index of columnIndex to XViewerColumns to speed up label providing
+ private Map<Integer, XViewerColumn> indexToXViewerColumnMap = new HashMap<Integer, XViewerColumn>();
+
+ private XViewerColumn getTreeColumnOffIndex(int columnIndex) {
+ if (!indexToXViewerColumnMap.containsKey(columnIndex)) {
+ XViewerColumn xViewerColumn = viewer.getXTreeColumn(columnIndex);
+ if (xViewerColumn != null) {
+ indexToXViewerColumnMap.put(columnIndex, xViewerColumn);
+ }
+ }
+ return indexToXViewerColumnMap.get(columnIndex);
+ }
+
+ // When columns get re-ordered, need to clear out this cache so indexing can
+ // be re-computed
+ public void clearXViewerColumnIndexCache() {
+ indexToXViewerColumnMap.clear();
+ }
+
+ /**
+ * Creates a {@link XViewerStyledTextLabelProvider} that delegates
+ * the requests for the styled labels and the images to a
+ * {@link IStyledLabelProvider}.
+ *
+ * @param labelProvider
+ * the label provider that provides the styled labels and the
+ * images
+ */
+ public XViewerStyledTextLabelProvider(XViewer viewer) {
+ this.viewer = viewer;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.viewers.StyledCellLabelProvider#update(org.eclipse.
+ * jface.viewers.ViewerCell)
+ */
+ public void update(ViewerCell cell) {
+ Object element = cell.getElement();
+
+ StyledString styledString = getStyledText(element, cell
+ .getColumnIndex());
+ String newText = styledString.toString();
+
+ StyleRange[] oldStyleRanges = cell.getStyleRanges();
+ StyleRange[] newStyleRanges = isOwnerDrawEnabled() ? styledString
+ .getStyleRanges() : null;
+
+ if (!Arrays.equals(oldStyleRanges, newStyleRanges)) {
+ cell.setStyleRanges(newStyleRanges);
+ if (cell.getText().equals(newText)) {
+ // make sure there will be a refresh from a change
+ cell.setText(""); //$NON-NLS-1$
+ }
+ }
+
+ cell.setText(newText);
+ cell.setImage(getColumnImage(element, cell.getColumnIndex()));
+ cell.setFont(getFont(element, cell.getColumnIndex()));
+ cell.setForeground(getForeground(element, cell.getColumnIndex()));
+ cell.setBackground(getBackground(element, cell.getColumnIndex()));
+
+ // no super call required. changes on item will trigger the refresh.
+ }
+
+ /**
+ * @param element
+ * @param columnIndex
+ * @return
+ */
+ private Font getFont(Object element, int columnIndex) {
+ try {
+ XViewerColumn xViewerColumn = getTreeColumnOffIndex(columnIndex);
+ // If not shown, don't process any further
+ if (!xViewerColumn.isShow())
+ return null;
+ if (xViewerColumn instanceof XViewerValueColumn) {
+ return ((XViewerValueColumn) xViewerColumn).getFont(element,
+ xViewerColumn, columnIndex);
+ } else {
+ return getFont(element, xViewerColumn, columnIndex);
+ }
+ } catch (Exception ex) {
+ // do nothing
+ }
+ return null;
+ }
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ try {
+ XViewerColumn xViewerColumn = getTreeColumnOffIndex(columnIndex);
+ // If not shown, don't process any further
+ if (!xViewerColumn.isShow())
+ return null;
+ if (xViewerColumn != null) {
+ if (xViewerColumn instanceof XViewerValueColumn) {
+ Image image = ((XViewerValueColumn) xViewerColumn)
+ .getColumnImage(element, xViewerColumn, columnIndex);
+ if (image != null)
+ return image;
+ }
+ return getColumnImage(element, xViewerColumn, columnIndex);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return null;
+ }
+
+ private StyledString getStyledText(Object element, int columnIndex) {
+ try {
+ XViewerColumn xViewerColumn = getTreeColumnOffIndex(columnIndex);
+ // If not shown, don't process any further
+ if (!xViewerColumn.isShow())
+ return new StyledString("");
+ if (xViewerColumn instanceof XViewerValueColumn) {
+ return ((XViewerValueColumn) xViewerColumn).getStyledText(
+ element, xViewerColumn, columnIndex);
+ }
+ return getStyledText(element, xViewerColumn, columnIndex);
+ } catch (Exception ex) {
+ return new StyledString(XViewerCells.getCellExceptionString(ex));
+ }
+ }
+
+ private Color getBackground(Object element, int columnIndex) {
+ try {
+ XViewerColumn xViewerColumn = getTreeColumnOffIndex(columnIndex);
+ // If not shown, don't process any further
+ if (!xViewerColumn.isShow())
+ return null;
+ if (xViewerColumn instanceof XViewerValueColumn) {
+ return ((XViewerValueColumn) xViewerColumn).getBackground(
+ element, xViewerColumn, columnIndex);
+ } else {
+ return getBackground(element, xViewerColumn, columnIndex);
+ }
+ } catch (Exception ex) {
+ // do nothing
+ }
+ return null;
+ }
+
+ /**
+ * @param element
+ * @param viewerColumn
+ * @param columnIndex
+ * @return
+ */
+
+ private Color getForeground(Object element, int columnIndex) {
+ try {
+ XViewerColumn xViewerColumn = getTreeColumnOffIndex(columnIndex);
+ // If not shown, don't process any further
+ if (!xViewerColumn.isShow())
+ return null;
+ if (xViewerColumn instanceof XViewerValueColumn) {
+ return ((XViewerValueColumn) xViewerColumn).getForeground(
+ element, xViewerColumn, columnIndex);
+ } else {
+ return getForeground(element, xViewerColumn, columnIndex);
+ }
+ } catch (Exception ex) {
+ // do nothing
+ }
+ return null;
+ }
+
+ public abstract Image getColumnImage(Object element, XViewerColumn xCol,
+ int column) throws OseeCoreException;
+
+ public abstract StyledString getStyledText(Object element,
+ XViewerColumn xCol, int column) throws OseeCoreException;
+
+ public abstract Color getBackground(Object element,
+ XViewerColumn viewerColumn, int columnIndex)
+ throws OseeCoreException;
+
+ public abstract Color getForeground(Object element,
+ XViewerColumn viewerColumn, int columnIndex)
+ throws OseeCoreException;
+
+ public abstract Font getFont(Object element, XViewerColumn viewerColumn,
+ int columnIndex) throws OseeCoreException;
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerTextFilter.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerTextFilter.java
new file mode 100644
index 00000000000..c5ec7c45c44
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerTextFilter.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+public class XViewerTextFilter extends ViewerFilter {
+
+ private final XViewer xViewer;
+ private ITableLabelProvider labelProv;
+ private Pattern textPattern;
+ private Matcher matcher;
+ private final Map<String, Pattern> colIdToPattern = new HashMap<String, Pattern>();
+
+ public XViewerTextFilter(XViewer xViewer) {
+ this.xViewer = xViewer;
+ }
+
+ /**
+ * Setup all patterns for text and column text filters
+ */
+ public void update() {
+ // Update text filter pattern
+ if (xViewer.getCustomizeMgr().getFilterText() == null || xViewer.getCustomizeMgr().getFilterText().equals("")) {
+ textPattern = null;
+ } else {
+ textPattern = Pattern.compile(xViewer.getCustomizeMgr().getFilterText(), Pattern.CASE_INSENSITIVE);
+ }
+ // Update column filter patterns
+ colIdToPattern.clear();
+ for (String colId : xViewer.getCustomizeMgr().getColumnFilterData().getColIds()) {
+ String colFilterText = xViewer.getCustomizeMgr().getColumnFilterText(colId);
+ if (colFilterText != null) {
+ boolean isNot = colFilterText.startsWith("!");
+ if (isNot) {
+ colFilterText = colFilterText.replaceFirst("^!", "");
+ }
+ // Handle != case ^(.(?<!big))*$
+ if (isNot) {
+ if (colFilterText.equals("")) {
+ colIdToPattern.put(colId, NOT_EMPTY_STR_PATTERN);
+ } else {
+ colIdToPattern.put(colId, Pattern.compile("^(.(?<!" + colFilterText + "))*$",
+ Pattern.CASE_INSENSITIVE));
+ }
+ }
+ // Handle normal case
+ else {
+ if (colFilterText.equals("")) {
+ colIdToPattern.put(colId, EMPTY_STR_PATTERN);
+ } else {
+ colIdToPattern.put(colId, Pattern.compile(
+ xViewer.getCustomizeMgr().getColumnFilterData().getFilterText(colId), Pattern.CASE_INSENSITIVE));
+ }
+ }
+ }
+ }
+ }
+ private static final Pattern EMPTY_STR_PATTERN = Pattern.compile("");
+ private static final Pattern NOT_EMPTY_STR_PATTERN = Pattern.compile("^.+$");
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (textPattern == null && colIdToPattern.size() == 0) return true;
+ if (labelProv == null) labelProv = (ITableLabelProvider) xViewer.getLabelProvider();
+ boolean match = true;
+ // Must match all column filters or don't show
+ for (String filteredColId : xViewer.getCustomizeMgr().getColumnFilterData().getColIds()) {
+ XViewerColumn xCol = xViewer.getCustomizeMgr().getCurrentTableColumn(filteredColId);
+ if (xCol.isShow()) {
+ // Check column filters
+ if (colIdToPattern.keySet().contains(xCol.getId())) {
+ String cellStr =
+ labelProv.getColumnText(element, xViewer.getCustomizeMgr().getColumnNumFromXViewerColumn(xCol));
+ if (cellStr != null) {
+ matcher = colIdToPattern.get(xCol.getId()).matcher(cellStr);
+ if (!matcher.find()) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+ if (!match) return false;
+
+ // Must match at least one column for filter text
+ if (textPattern == null) {
+ return match;
+ }
+ if (textPattern != null) {
+ for (XViewerColumn xCol : xViewer.getCustomizeMgr().getCurrentTableColumns()) {
+ if (xCol.isShow()) {
+ // Check text filter
+ String cellStr =
+ labelProv.getColumnText(element, xViewer.getCustomizeMgr().getColumnNumFromXViewerColumn(xCol));
+ if (cellStr != null) {
+ matcher = textPattern.matcher(cellStr);
+ if (matcher.find()) return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerTreeReport.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerTreeReport.java
new file mode 100644
index 00000000000..0aa0caede15
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerTreeReport.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+import org.eclipse.swt.widgets.TreeItem;
+
+public class XViewerTreeReport {
+
+ private final XViewer xViewer;
+ private final String title;
+
+ public XViewerTreeReport(String title, XViewer treeViewer) {
+ this.title = title;
+ this.xViewer = treeViewer;
+ }
+
+ public XViewerTreeReport(XViewer xViewer) {
+ this("Table View Report", xViewer);
+ }
+
+ public void open() {
+ open(xViewer.getTree().getItems());
+ }
+
+ public void open(TreeItem items[]) {
+ try {
+ String html = getHtml(items);
+ XResultData xResultData = new XResultData();
+ xResultData.addRaw(html);
+ xResultData.report(title, Manipulations.RAW_HTML);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ private Map<XViewerColumn, Integer> xColToColumnIndex = null;
+
+ public String getHtml(TreeItem items[]) throws OseeCoreException {
+ StringBuffer sb = new StringBuffer("<html><body>");
+ sb.append(AHTML.beginMultiColumnTable(100, 1));
+ List<XViewerColumn> columns = xViewer.getCustomizeMgr().getCurrentTableColumnsInOrder();
+ List<String> headerStrs = new ArrayList<String>(50);
+ List<XViewerColumn> showCols = new ArrayList<XViewerColumn>(50);
+ xColToColumnIndex = xViewer.getCustomizeMgr().getCurrentTableColumnsIndex();
+ for (XViewerColumn xCol : columns) {
+ if (xCol.isShow()) {
+ showCols.add(xCol);
+ headerStrs.add(xCol.getName());
+ }
+ }
+ sb.append(AHTML.addHeaderRowMultiColumnTable(headerStrs.toArray(new String[headerStrs.size()])));
+ // Get column widths and column name and setup the columns
+ XViewerLabelProvider labelProv = (XViewerLabelProvider) xViewer.getLabelProvider();
+ ArrayList<String[]> list = new ArrayList<String[]>();
+ for (TreeItem item : items) {
+ addRow(item, list, labelProv, showCols, 1);
+ }
+ for (String[] strs : list) {
+ sb.append(AHTML.addRowMultiColumnTable(strs));
+ }
+ sb.append(AHTML.endMultiColumnTable());
+ sb.append("</body></html>");
+ return sb.toString();
+ }
+
+ public void addRow(TreeItem item, ArrayList<String[]> rowData, XViewerLabelProvider labelProv, List<XViewerColumn> showCols, int level) throws OseeCoreException {
+ List<String> cellData = new ArrayList<String>(showCols.size());
+ boolean firstCell = true;
+ for (XViewerColumn xCol : showCols) {
+ String str = "";
+ if (firstCell) {
+ for (int y = 0; y < level; y++) {
+ str += "&nbsp;&nbsp;&nbsp;&nbsp;";
+ }
+ firstCell = false;
+ }
+ str += labelProv.getColumnText(item.getData(), xColToColumnIndex.get(xCol));
+ cellData.add(str);
+ }
+ rowData.add(cellData.toArray(new String[cellData.size()]));
+ if (item.getExpanded()) {
+ for (TreeItem i : item.getItems()) {
+ addRow(i, rowData, labelProv, showCols, level + 1);
+ }
+ }
+
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerValueColumn.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerValueColumn.java
new file mode 100644
index 00000000000..d24a0296112
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/XViewerValueColumn.java
@@ -0,0 +1,64 @@
+/*
+ * Created on Jul 14, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer;
+
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerValueColumn extends XViewerColumn {
+
+ /**
+ * XViewer uses copies of column definitions so originals that are registered are not corrupted. Classes extending
+ * XViewerValueColumn MUST extend this constructor so the correct sub-class is created
+ *
+ * @param col
+ */
+ public XViewerValueColumn copy() {
+ return new XViewerValueColumn(getId(), getName(), getWidth(), getAlign(), isShow(), getSortDataType(),
+ isMultiColumnEditable(), getDescription());
+ }
+
+ public XViewerValueColumn(String id, String name, int width, int align, boolean show, SortDataType sortDataType, boolean multiColumnEditable, String description) {
+ super(id, name, width, align, show, sortDataType, multiColumnEditable, description);
+ }
+
+ public XViewerValueColumn(XViewer viewer, String xml) {
+ super(viewer, xml);
+ }
+
+ public Image getColumnImage(Object element, XViewerColumn column, int columnIndex) throws OseeCoreException {
+ return null;
+ }
+
+ public String getColumnText(Object element, XViewerColumn column, int columnIndex) throws OseeCoreException {
+ return "unhandled";
+ }
+
+ public Color getBackground(Object element, XViewerColumn xCol, int columnIndex) throws OseeCoreException {
+ return null;
+ }
+
+ public Color getForeground(Object element, XViewerColumn xCol, int columnIndex) throws OseeCoreException {
+ return null;
+ }
+
+ //This method will only be called be the XViewerStyledTextLabelProvider
+ public StyledString getStyledText(Object element, XViewerColumn viewerColumn, int columnIndex) throws OseeCoreException {
+ return new StyledString(getColumnText(element, viewerColumn, columnIndex));
+ }
+
+ //This method will only be called be the XViewerStyledTextLabelProvider
+ public Font getFont(Object element, XViewerColumn viewerColumn, int columnIndex) throws OseeCoreException {
+ return null;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnData.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnData.java
new file mode 100644
index 00000000000..c9c10211665
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnData.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ColumnData {
+
+ List<XViewerColumn> columns = new ArrayList<XViewerColumn>();
+ Map<String, XViewerColumn> idToColumn = new HashMap<String, XViewerColumn>();
+
+ public List<XViewerColumn> setFromXml(String xml) {
+ columns.clear();
+ Matcher columnMatch =
+ Pattern.compile("<" + XViewerColumn.XTREECOLUMN_TAG + ">(.*?)</" + XViewerColumn.XTREECOLUMN_TAG + ">").matcher(
+ xml);
+ while (columnMatch.find()) {
+ String colXml = columnMatch.group(1);
+ XViewerColumn xCol = new XViewerColumn(null, colXml);
+ columns.add(xCol);
+ idToColumn.put(xCol.getId(), xCol);
+ }
+ return columns;
+ }
+
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer("columnData:[");
+ for (XViewerColumn xCol : columns) {
+ sb.append(xCol);
+ }
+ sb.append("]");
+ return sb.toString();
+ }
+
+ public XViewerColumn getXColumn(String id) {
+ return idToColumn.get(id);
+ }
+
+ public String getXml(boolean visibleColumnsOnly) {
+ StringBuffer sb = new StringBuffer();
+ for (XViewerColumn xCol : columns) {
+ if (!visibleColumnsOnly || (visibleColumnsOnly && xCol.isShow())) {
+ sb.append(xCol.toXml());
+ }
+ }
+ return sb.toString();
+ }
+
+ /**
+ * @return the columns
+ */
+ public List<XViewerColumn> getColumns() {
+ return columns;
+ }
+
+ /**
+ * @param columns the columns to set
+ */
+ public void setColumns(List<XViewerColumn> columns) {
+ this.columns = columns;
+ idToColumn.clear();
+ for (XViewerColumn xCol : columns) {
+ idToColumn.put(xCol.getId(), xCol);
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnFilterData.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnFilterData.java
new file mode 100644
index 00000000000..cd45e5f47ca
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnFilterData.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.jdk.core.util.AXml;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ColumnFilterData {
+
+ private static final String COLUMN_FILTER_TAG = "xColFilter";
+ private static final String COLUMN_ID_TAG = "id";
+ private static final String FILTER_TEXT_TAG = "str";
+ private final Map<String, String> colIdToFilterText = new HashMap<String, String>();
+ private static Pattern p = Pattern.compile("<" + COLUMN_FILTER_TAG + ">(.*?)</" + COLUMN_FILTER_TAG + ">");
+
+ /**
+ * @return the filterText
+ */
+ public String getFilterText(String colId) {
+ return colIdToFilterText.get(colId);
+ }
+
+ public Set<String> getColIds() {
+ return colIdToFilterText.keySet();
+ }
+
+ /**
+ * @param filterText the filterText to set
+ */
+ public void setFilterText(String colId, String filterText) {
+ colIdToFilterText.put(colId, filterText);
+ }
+
+ public void clear() {
+ colIdToFilterText.clear();
+ }
+
+ public void removeFilterText(String colId) {
+ colIdToFilterText.remove(colId);
+ }
+
+ public String getXml() {
+ StringBuffer sb = new StringBuffer();
+ for (String colId : colIdToFilterText.keySet()) {
+ sb.append(AXml.addTagData(COLUMN_FILTER_TAG, AXml.addTagData(COLUMN_ID_TAG, colId) + AXml.addTagData(
+ FILTER_TEXT_TAG, colIdToFilterText.get(colId))));
+ }
+ return sb.toString();
+ }
+
+ public void setFromXml(String xml) {
+ colIdToFilterText.clear();
+ Matcher columnMatch = p.matcher(xml);
+ while (columnMatch.find()) {
+ colIdToFilterText.put(AXml.getTagData(columnMatch.group(1), COLUMN_ID_TAG), AXml.getTagData(
+ columnMatch.group(1), FILTER_TEXT_TAG));
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "colFilter:[" + colIdToFilterText.toString() + "]";
+ }
+
+ public boolean isFiltered() {
+ return colIdToFilterText.size() > 0;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnFilterDataUI.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnFilterDataUI.java
new file mode 100644
index 00000000000..83433f59423
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/ColumnFilterDataUI.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ColumnFilterDataUI {
+
+ private final XViewer xViewer;
+
+ public ColumnFilterDataUI(XViewer xViewer) {
+ this.xViewer = xViewer;
+ }
+
+ public void createWidgets(Composite comp) {
+ }
+
+ public void dispose() {
+ }
+
+ public void promptSetFilter(String colId) {
+ EntryDialog ed =
+ new EntryDialog(Display.getCurrent().getActiveShell(), "Filter Column", null,
+ "Enter filter string for " + colId + ":\n\nNote: !string negates the match", MessageDialog.QUESTION,
+ new String[] {"OK", "Clear", "Clear All", "Cancel"}, 0);
+ String str = xViewer.getCustomizeMgr().getColumnFilterData().getFilterText(colId);
+ if (str != null && !str.equals("")) {
+ ed.setEntry(str);
+ }
+ int result = ed.open();
+ if (result == 0) {
+ xViewer.getCustomizeMgr().setColumnFilterText(colId, ed.getEntry());
+ } else if (result == 1) {
+ xViewer.getCustomizeMgr().setColumnFilterText(colId, null);
+ } else if (result == 2) {
+ xViewer.getCustomizeMgr().clearAllColumnFilters();
+ }
+ }
+
+ public void getStatusLabelAddition(StringBuffer sb) {
+ for (String colId : xViewer.getCustomizeMgr().getColumnFilterData().getColIds()) {
+ sb.append("[" + colId + "=" + xViewer.getCustomizeMgr().getColumnFilterData().getFilterText(colId) + "]");
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeData.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeData.java
new file mode 100644
index 00000000000..f543ac99a74
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeData.java
@@ -0,0 +1,206 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.OverlayImage;
+import org.eclipse.osee.framework.ui.plugin.util.OverlayImage.Location;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CustomizeData {
+
+ private String guid = GUID.generateGuidStr();
+ private String name;
+ private String nameSpace;
+ private boolean personal = false;
+ protected SortingData sortingData = new SortingData(this);
+ protected FilterData filterData = new FilterData();
+ protected ColumnFilterData columnFilterData = new ColumnFilterData();
+
+ /**
+ * @return the columnFilterData
+ */
+ public ColumnFilterData getColumnFilterData() {
+ return columnFilterData;
+ }
+
+ protected ColumnData columnData = new ColumnData();
+ private final Map<String, Image> imageMap = new HashMap<String, Image>();
+ private boolean isWorkbench = false;
+
+ public CustomizeData() {
+ isWorkbench = Platform.isRunning();
+ }
+
+ public boolean isTableDefaultCustData() {
+ return name.equals(CustomizeManager.TABLE_DEFAULT_LABEL);
+ }
+
+ public boolean isCurrentTableCustData() {
+ return name.equals(CustomizeManager.CURRENT_LABEL);
+ }
+
+ public CustomizeData(String xml) {
+ this();
+ setFromXml(xml);
+ }
+
+ public void resetGuid() {
+ guid = GUID.generateGuidStr();
+ }
+
+ public Image getImage(boolean isDefault) {
+ if (!isWorkbench) return null;
+ if (name.equals(CustomizeManager.TABLE_DEFAULT_LABEL) || name.equals(CustomizeManager.CURRENT_LABEL)) {
+ return SkynetGuiPlugin.getInstance().getImage("customize.gif");
+ }
+ String index = "" + personal + isDefault;
+ if (imageMap.containsKey(index)) return imageMap.get(index);
+ Image image = SkynetGuiPlugin.getInstance().getImage("customize.gif");
+ if (!personal) image =
+ new OverlayImage(image, SkynetGuiPlugin.getInstance().getImageDescriptor("customizeG.gif"),
+ Location.BOT_RIGHT).createImage();
+ if (isDefault) image =
+ new OverlayImage(image, SkynetGuiPlugin.getInstance().getImageDescriptor("customizeD.gif"),
+ Location.TOP_RIGHT).createImage();
+ imageMap.put(index, image);
+ return image;
+ }
+
+ public String getXml(boolean visibleColumnsOnly) {
+ StringBuffer sb =
+ new StringBuffer(
+ "<XTreeProperties name=\"" + name + "\" namespace=\"" + nameSpace + "\" guid=\"" + guid + "\">");
+ sb.append(sortingData.getXml());
+ sb.append(filterData.getXml());
+ sb.append(columnFilterData.getXml());
+ sb.append(columnData.getXml(visibleColumnsOnly));
+ sb.append("</XTreeProperties>");
+ return sb.toString();
+ }
+
+ public void setFromXml(String xml) {
+ Matcher m = Pattern.compile("name=\"(.*?)\".*?namespace=\"(.*?)\".*?guid=\"(.*?)\"").matcher(xml);
+ if (m.find()) {
+ name = m.group(1);
+ nameSpace = m.group(2);
+ guid = m.group(3);
+ } else {
+ name = "Invalid customize format for " + xml.substring(0, 50);
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, new IllegalStateException(name));
+ return;
+ }
+ sortingData.setFromXml(xml);
+ filterData.setFromXml(xml);
+ columnData.setFromXml(xml);
+ columnFilterData.setFromXml(xml);
+ }
+
+ @Override
+ public String toString() {
+ return "[" + name + "][" + nameSpace + "][" + guid + "][" + columnData + "][" + filterData + "][" + columnFilterData + "][" + sortingData + "]";
+ }
+
+ /**
+ * @return the personal
+ */
+ public boolean isPersonal() {
+ return personal;
+ }
+
+ /**
+ * @param personal the personal to set
+ */
+ public void setPersonal(boolean personal) {
+ this.personal = personal;
+ }
+
+ /**
+ * @return the columnData
+ */
+ public ColumnData getColumnData() {
+ return columnData;
+ }
+
+ /**
+ * @return the filterData
+ */
+ public FilterData getFilterData() {
+ return filterData;
+ }
+
+ /**
+ * @return the sortingData
+ */
+ public SortingData getSortingData() {
+ return sortingData;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the nameSpace
+ */
+ public String getNameSpace() {
+ return nameSpace;
+ }
+
+ /**
+ * @param nameSpace the nameSpace to set
+ */
+ public void setNameSpace(String nameSpace) {
+ this.nameSpace = nameSpace;
+ }
+
+ public String getGuid() {
+ return guid;
+ }
+
+ /**
+ * @param guid the guid to set
+ */
+ public void setGuid(String guid) {
+ this.guid = guid;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return (obj instanceof CustomizeData) && ((CustomizeData) obj).getGuid().equals(guid);
+ }
+
+ @Override
+ public int hashCode() {
+ return guid.hashCode();
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeDataLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeDataLabelProvider.java
new file mode 100644
index 00000000000..ba34bd67e4d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeDataLabelProvider.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import java.util.logging.Level;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Generic Label Provider showing Descriptive Name as text
+ *
+ * @author Donald G. Dunne
+ */
+public class CustomizeDataLabelProvider implements ILabelProvider {
+
+ private final XViewer xViewer;
+
+ public CustomizeDataLabelProvider(XViewer xViewer) {
+ this.xViewer = xViewer;
+ }
+
+ public Image getImage(Object arg0) {
+ return ((CustomizeData) arg0).getImage(xViewer.getCustomizeMgr().isCustomizationUserDefault((CustomizeData) arg0));
+ }
+
+ public String getText(Object arg0) {
+ CustomizeData custom = (CustomizeData) arg0;
+ String text =
+ (xViewer.getCustomizeMgr().isCustomizationUserDefault(custom) ? "(Default) " : "") + custom.getName();
+ try {
+ if (AccessControlManager.isOseeAdmin()) {
+ text += " - " + custom.getGuid();
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ return text;
+ }
+
+ public void addListener(ILabelProviderListener arg0) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object arg0, String arg1) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener arg0) {
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeManager.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeManager.java
new file mode 100644
index 00000000000..2ccdc6e42dd
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/CustomizeManager.java
@@ -0,0 +1,497 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.IXViewerFactory;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerLabelProvider;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerSorter;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerTextFilter;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.dialog.XViewerCustomizeDialog;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.TreeColumn;
+
+/**
+ * This manages the default table column definitions versus the user modified column data, sorter and filters.
+ *
+ * @author Donald G. Dunne
+ */
+public class CustomizeManager {
+
+ private final IXViewerFactory xViewerFactory;
+ private final XViewer xViewer;
+ private XViewerTextFilter xViewerTextFilter;
+ private CustomizeData currentCustData;
+ public static String CURRENT_LABEL = "-- Current Table View --";
+ public static String TABLE_DEFAULT_LABEL = "-- Table Default --";
+ // Added to keep filter, sorter from working till finished loading
+ public boolean loading = true;
+ public static List<String> REMOVED_COLUMNS_TO_IGNORE = Arrays.asList("Metrics from Tasks");
+
+ public CustomizeManager(XViewer xViewer, IXViewerFactory xViewerFactory) throws OseeCoreException {
+ this.xViewer = xViewer;
+ this.xViewerFactory = xViewerFactory;
+ // Set customize to be user default, if selected, or table default
+ CustomizeData userCustData = xViewerFactory.getXViewerCustomizations().getUserDefaultCustData();
+ if (userCustData != null) {
+ currentCustData = resolveLoadedCustomizeData(userCustData);
+ } else {
+ currentCustData = getTableDefaultCustData();
+ currentCustData.setNameSpace(xViewerFactory.getNamespace());
+ }
+ xViewerFactory.getXViewerCustomMenu().init(xViewer);
+ }
+
+ private final Map<String, XViewerColumn> oldNameToColumnId = new HashMap<String, XViewerColumn>();
+
+ /**
+ * Since saved customize data is stored as xml, all the columns need to be resolved to the columns available from the
+ * factory
+ *
+ * @param loadedCustData
+ * @return CustomizeData
+ */
+ public CustomizeData resolveLoadedCustomizeData(CustomizeData loadedCustData) {
+ // Otherwise, have to resolve what was saved with what is valid for this table and available from the factory
+ CustomizeData resolvedCustData = new CustomizeData();
+ resolvedCustData.setName(loadedCustData.getName());
+ resolvedCustData.setPersonal(loadedCustData.isPersonal());
+ resolvedCustData.setGuid(loadedCustData.getGuid());
+ resolvedCustData.setNameSpace(loadedCustData.getNameSpace());
+ /*
+ * Need to resolve columns with what factory has which gets correct class/subclass of XViewerColumn and allows for removal of old and addition of new columns
+ */
+ List<XViewerColumn> resolvedColumns = new ArrayList<XViewerColumn>();
+ for (XViewerColumn storedCol : loadedCustData.getColumnData().getColumns()) {
+ XViewerColumn resolvedCol = xViewer.getXViewerFactory().getDefaultXViewerColumn(storedCol.getId());
+ // Handle known stored values
+ if (resolvedCol == null) {
+ String name = storedCol.getName();
+ if (name.equals("Impacted Items")) {
+ resolvedCol = xViewer.getXViewerFactory().getDefaultXViewerColumn("ats.column.actionableItems");
+ } else if (name.equals("State Percent")) {
+ resolvedCol = xViewer.getXViewerFactory().getDefaultXViewerColumn("ats.column.statePercentComplete");
+ }
+ }
+ // if not found, may have been stored without namespace; try to resolve for backward compatibility
+ if (resolvedCol == null) {
+ String name = storedCol.getName().replaceAll(" ", "");
+ resolvedCol = oldNameToColumnId.get(name);
+ // First try to match by .<oldname>
+ if (resolvedCol == null) {
+ for (XViewerColumn xCol : xViewer.getXViewerFactory().getDefaultTableCustomizeData().getColumnData().getColumns()) {
+ String colId = xCol.getId().toLowerCase();
+ String oldName = "." + name.toLowerCase();
+ if (colId.endsWith(oldName)) {
+ resolvedCol = xCol;
+ oldNameToColumnId.put(name, resolvedCol);
+ oldNameToColumnId.put(storedCol.getName(), resolvedCol);
+ break;
+ }
+ }
+ }
+ // Then try to match by id endswith name
+ if (resolvedCol == null) {
+ for (XViewerColumn xCol : xViewer.getXViewerFactory().getDefaultTableCustomizeData().getColumnData().getColumns()) {
+ if (xCol.getId().endsWith(name)) {
+ resolvedCol = xCol;
+ oldNameToColumnId.put(name, resolvedCol);
+ oldNameToColumnId.put(storedCol.getName(), resolvedCol);
+ break;
+ }
+ }
+ }
+ }
+ // Only handle columns that the factory supports and only resolve shown columns (rest will be loaded later)
+ if (resolvedCol != null && resolvedCol.getWidth() > 0) {
+ resolvedCol.setWidth(storedCol.getWidth());
+ resolvedCol.setName(storedCol.getName());
+ resolvedCol.setShow(storedCol.isShow());
+ resolvedCol.setSortForward(storedCol.isSortForward());
+ resolvedColumns.add(resolvedCol);
+ }
+ if (resolvedCol == null) {
+ // Ignore known removed columns
+ if (!REMOVED_COLUMNS_TO_IGNORE.contains(storedCol.getName())) {
+ OseeLog.log(
+ SkynetGuiPlugin.class,
+ Level.WARNING,
+ "XViewer Conversion for saved Customization \"" + loadedCustData.getName() + "\" dropped unresolved column Name: \"" + storedCol.getName() + "\" Id: \"" + storedCol.getId() + "\". Delete customization and re-save to resolve.");
+ }
+ }
+ }
+ /*
+ * Add extra columns that were added to the table since storage of this custData
+ */
+ for (XViewerColumn extraCol : xViewer.getXViewerFactory().getDefaultTableCustomizeData().getColumnData().getColumns()) {
+ if (!resolvedColumns.contains(extraCol)) {
+ // Since column wasn't saved, don't show it
+ extraCol.setShow(false);
+ resolvedColumns.add(extraCol);
+ }
+ }
+ resolvedCustData.getColumnData().setColumns(resolvedColumns);
+ resolvedCustData.getColumnFilterData().setFromXml(loadedCustData.getColumnFilterData().getXml());
+ resolvedCustData.getFilterData().setFromXml(loadedCustData.getFilterData().getXml());
+ resolvedCustData.getSortingData().setFromXml(loadedCustData.getSortingData().getXml());
+ return resolvedCustData;
+ }
+
+ public void setFilterText(String text) {
+ currentCustData.filterData.setFilterText(text);
+ xViewerTextFilter.update();
+ xViewer.refresh();
+ }
+
+ public String getFilterText() {
+ return currentCustData.getFilterData().getFilterText();
+ }
+
+ public void setColumnFilterText(String colId, String text) {
+ if (text == null || text.equals("")) {
+ currentCustData.columnFilterData.removeFilterText(colId);
+ } else {
+ currentCustData.columnFilterData.setFilterText(colId, text);
+ }
+ xViewerTextFilter.update();
+ xViewer.refresh();
+ }
+
+ public void clearFilters() {
+ xViewer.getFilterDataUI().clear();
+ currentCustData.columnFilterData.clear();
+ xViewerTextFilter.update();
+ xViewer.refresh();
+ }
+
+ public void clearAllColumnFilters() {
+ currentCustData.columnFilterData.clear();
+ xViewerTextFilter.update();
+ xViewer.refresh();
+ }
+
+ public String getColumnFilterText(String colId) {
+ return currentCustData.getColumnFilterData().getFilterText(colId);
+ }
+
+ public ColumnFilterData getColumnFilterData() {
+ return currentCustData.getColumnFilterData();
+ }
+
+ /**
+ * Clears out current columns, sorting and filtering and loads table customization
+ */
+ public void loadCustomization() {
+ loadCustomization(currentCustData);
+ }
+
+ public void resetDefaultSorter() {
+ XViewerSorter sorter = xViewer.getXViewerFactory().createNewXSorter(xViewer);
+ xViewer.setSorter(sorter);
+ }
+
+ public void clearSorter() {
+ currentCustData.getSortingData().clearSorter();
+ xViewer.setSorter(null);
+ xViewer.updateStatusLabel();
+ }
+
+ public void handleTableCustomization() {
+ (new XViewerCustomizeDialog(xViewer)).open();
+ }
+
+ public void getStatusLabelAddition(StringBuffer sb) {
+ if (currentCustData != null && currentCustData.getName() != null &&
+ //
+ !currentCustData.getName().equals(CURRENT_LABEL) &&
+ //
+ !currentCustData.getName().equals(TABLE_DEFAULT_LABEL) &&
+ //
+ currentCustData.getName() != null) {
+ sb.append("[Custom: " + currentCustData.getName() + "]");
+ }
+ }
+
+ /**
+ * @return the currentCustData
+ */
+ public CustomizeData generateCustDataFromTable() {
+ CustomizeData custData = new CustomizeData();
+ custData.setName(CustomizeManager.CURRENT_LABEL);
+ custData.setNameSpace(xViewer.getXViewerFactory().getNamespace());
+ List<XViewerColumn> columns = new ArrayList<XViewerColumn>(15);
+ for (Integer index : xViewer.getTree().getColumnOrder()) {
+ TreeColumn treeCol = xViewer.getTree().getColumn(index);
+ XViewerColumn xCol = (XViewerColumn) treeCol.getData();
+ xCol.setWidth(treeCol.getWidth());
+ xCol.setShow(treeCol.getWidth() > 0);
+ columns.add(xCol);
+ }
+ // Add all columns that are not visible
+ for (XViewerColumn xCol : xViewer.getXViewerFactory().getDefaultTableCustomizeData().getColumnData().getColumns()) {
+ if (!columns.contains(xCol)) {
+ xCol.setShow(false);
+ columns.add(xCol);
+ }
+ }
+ custData.columnData.setColumns(columns);
+ custData.sortingData.setFromXml(currentCustData.sortingData.getXml());
+ custData.filterData.setFromXml(currentCustData.filterData.getXml());
+ custData.columnFilterData.setFromXml(currentCustData.columnFilterData.getXml());
+ return custData;
+ }
+
+ public List<XViewerColumn> getCurrentTableColumns() {
+ return currentCustData.getColumnData().getColumns();
+ }
+
+ public XViewerColumn getCurrentTableColumn(String id) {
+ return currentCustData.getColumnData().getXColumn(id);
+ }
+
+ public List<XViewerColumn> getCurrentTableColumnsInOrder() {
+ List<XViewerColumn> columns = new ArrayList<XViewerColumn>(15);
+ for (Integer index : xViewer.getTree().getColumnOrder()) {
+ TreeColumn treeCol = xViewer.getTree().getColumn(index);
+ XViewerColumn xCol = (XViewerColumn) treeCol.getData();
+ columns.add(xCol);
+ }
+ return columns;
+ }
+
+ public List<XViewerColumn> getCurrentVisibleTableColumns() {
+ List<XViewerColumn> columns = new ArrayList<XViewerColumn>(15);
+ for (XViewerColumn xCol : getCurrentTableColumns()) {
+ if (xCol.isShow()) {
+ columns.add(xCol);
+ }
+ }
+ return columns;
+ }
+
+ /**
+ * Return index of XColumn to original column index on creation of table. Since table allows drag re-ordering of
+ * columns, this index will provide the map back to the original column index. Used for label providers
+ * getColumnText(object, index)
+ *
+ * @return index
+ */
+ public Map<XViewerColumn, Integer> getCurrentTableColumnsIndex() {
+ int[] index = xViewer.getTree().getColumnOrder();
+ Map<XViewerColumn, Integer> xColToColumnIndex = new HashMap<XViewerColumn, Integer>(index.length);
+ for (int x = 0; x < index.length; x++) {
+ TreeColumn treeCol = xViewer.getTree().getColumn(index[x]);
+ XViewerColumn xCol = (XViewerColumn) treeCol.getData();
+ xColToColumnIndex.put(xCol, index[x]);
+ }
+ return xColToColumnIndex;
+ }
+
+ public int getColumnNumFromXViewerColumn(XViewerColumn xCol) {
+ for (Integer index : xViewer.getTree().getColumnOrder()) {
+ TreeColumn treeCol = xViewer.getTree().getColumn(index);
+ XViewerColumn treeXCol = (XViewerColumn) treeCol.getData();
+ if (xCol.equals(treeXCol)) return index;
+ }
+ return 0;
+ }
+
+ /**
+ * @return the defaultCustData
+ */
+ public CustomizeData getTableDefaultCustData() {
+ CustomizeData custData = xViewer.getXViewerFactory().getDefaultTableCustomizeData();
+ if (custData.getName() == null || custData.getName().equals("")) {
+ custData.setName(TABLE_DEFAULT_LABEL);
+ }
+ custData.setNameSpace(xViewer.getViewerNamespace());
+ return custData;
+ }
+
+ public void getSortingStr(StringBuffer sb) {
+ if (currentCustData.getSortingData().isSorting()) {
+ List<XViewerColumn> cols = getSortXCols();
+ if (cols.size() == 0) return;
+ sb.append("Sort: ");
+ for (XViewerColumn col : getSortXCols()) {
+ if (col != null) {
+ sb.append("[" + col.getName());
+ sb.append(col.isSortForward() ? " (FWD)] " : " (REV)] ");
+ }
+ }
+ }
+ }
+
+ public int getDefaultWidth(String id) {
+ XViewerColumn xCol = xViewerFactory.getDefaultXViewerColumn(id);
+ if (xCol == null)
+ return 75;
+ else
+ return xCol.getWidth();
+ }
+
+ public boolean isCustomizationUserDefault(CustomizeData custData) {
+ return xViewerFactory.getXViewerCustomizations().isCustomizationUserDefault(custData);
+ }
+
+ public List<XViewerColumn> getSortXCols() {
+ // return sort columns depending on default/customize
+ return currentCustData.getSortingData().getSortXCols(oldNameToColumnId);
+ }
+
+ public boolean isLoading() {
+ return loading;
+ }
+
+ public List<CustomizeData> getSavedCustDatas() throws Exception {
+ List<CustomizeData> custDatas = new ArrayList<CustomizeData>();
+ for (CustomizeData savedCustData : xViewerFactory.getXViewerCustomizations().getSavedCustDatas()) {
+ custDatas.add(resolveLoadedCustomizeData(savedCustData));
+ }
+ return custDatas;
+ }
+
+ public void saveCustomization(CustomizeData custData) throws Exception {
+ xViewerFactory.getXViewerCustomizations().saveCustomization(custData);
+ }
+
+ /**
+ * Set to newName or clear if newName == ""
+ *
+ * @param xCol
+ * @param newName
+ */
+ public void customizeColumnName(XViewerColumn xCol, String newName) {
+ if (newName == "") {
+ XViewerColumn defaultXCol = xViewerFactory.getDefaultXViewerColumn(xCol.getId());
+ if (defaultXCol == null) {
+ AWorkbench.popup("ERROR", "Column not defined. Can't retrieve default name.");
+ return;
+ }
+ xCol.setName(xCol.getName());
+ } else {
+ xCol.setName(newName);
+ }
+ }
+
+ public void setUserDefaultCustData(CustomizeData newCustData, boolean set) throws Exception {
+ xViewerFactory.getXViewerCustomizations().setUserDefaultCustData(newCustData, set);
+ }
+
+ public void deleteCustomization(CustomizeData custData) throws Exception {
+ xViewerFactory.getXViewerCustomizations().deleteCustomization(custData);
+
+ }
+
+ public boolean isSorting() {
+ return currentCustData.getSortingData().isSorting();
+ }
+
+ /**
+ * Clears out current columns, sorting and filtering and loads table customization
+ */
+ public void loadCustomization(final CustomizeData newCustData) {
+ loading = true;
+ if (xViewerTextFilter == null) {
+ xViewerTextFilter = new XViewerTextFilter(xViewer);
+ xViewer.addFilter(xViewerTextFilter);
+ }
+ if (xViewer.getTree().isDisposed()) return;
+ currentCustData = newCustData;
+ if (currentCustData.getName() == null || currentCustData.getName().equals("")) {
+ currentCustData.setName(CURRENT_LABEL);
+ }
+ currentCustData.setNameSpace(xViewer.getViewerNamespace());
+ if (currentCustData.getSortingData().isSorting())
+ xViewer.resetDefaultSorter();
+ else
+ xViewer.setSorter(null);
+ // Dispose all existing columns
+ for (TreeColumn treeCol : xViewer.getTree().getColumns())
+ treeCol.dispose();
+ // Create new columns
+ addColumns();
+ xViewer.updateStatusLabel();
+ if (xViewer.getLabelProvider() instanceof XViewerLabelProvider) {
+ ((XViewerLabelProvider) xViewer.getLabelProvider()).clearXViewerColumnIndexCache();
+ }
+ loading = false;
+ }
+
+ public void addColumns() {
+ for (final XViewerColumn xCol : currentCustData.getColumnData().getColumns()) {
+ // Only add visible columns
+ if (!xCol.isShow()) continue;
+ xCol.setXViewer(xViewer);
+ TreeColumn column = new TreeColumn(xViewer.getTree(), xCol.getAlign());
+ column.setMoveable(true);
+ column.setData(xCol);
+ if (xCol.getToolTip() == null || xCol.getToolTip().equals("") || xCol.getToolTip().equals(xCol.getName())) {
+ column.setToolTipText(xCol.getName() + "\n" + xCol.getId());
+ } else {
+ column.setToolTipText(xCol.getToolTip() + xCol.getName() + "\n" + xCol.getId());
+ }
+ column.setText(xCol.getName());
+ column.setWidth(xCol.getWidth());
+ column.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ // Add sorter if doesn't exist
+ if (xViewer.getSorter() == null) {
+ resetDefaultSorter();
+ }
+ if (xViewer.isAltKeyDown()) {
+ xViewer.getColumnFilterDataUI().promptSetFilter(xCol.getId());
+ } else if (xViewer.isCtrlKeyDown()) {
+ List<XViewerColumn> currSortCols = currentCustData.getSortingData().getSortXCols(oldNameToColumnId);
+ if (currSortCols == null) {
+ currSortCols = new ArrayList<XViewerColumn>();
+ currSortCols.add(xCol);
+ } else {
+ // If already selected this item, reverse the sort
+ if (currSortCols.contains(xCol)) {
+ for (XViewerColumn currXCol : currSortCols)
+ if (currXCol.equals(xCol)) currXCol.reverseSort();
+ } else
+ currSortCols.add(xCol);
+ }
+ currentCustData.getSortingData().setSortXCols(currSortCols);
+ } else {
+
+ List<XViewerColumn> cols = new ArrayList<XViewerColumn>();
+ cols.add(xCol);
+ // If sorter already has this column sorted, reverse the sort
+ List<XViewerColumn> currSortCols = currentCustData.getSortingData().getSortXCols(oldNameToColumnId);
+ if (currSortCols != null && currSortCols.size() == 1 && currSortCols.iterator().next().equals(xCol)) xCol.reverseSort();
+ // Set the newly sorted column
+ currentCustData.getSortingData().setSortXCols(cols);
+ }
+ xViewer.refresh();
+ xViewer.updateStatusLabel();
+ }
+ });
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/FilterData.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/FilterData.java
new file mode 100644
index 00000000000..41f71ca0cab
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/FilterData.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import org.eclipse.osee.framework.jdk.core.util.AXml;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class FilterData {
+
+ private String filterText = "";
+ private static final String FILTER_TAG = "xFilter";
+
+ /**
+ * @return the filterText
+ */
+ public String getFilterText() {
+ return filterText;
+ }
+
+ /**
+ * @param filterText the filterText to set
+ */
+ public void setFilterText(String filterText) {
+ this.filterText = filterText;
+ }
+
+ public String getXml() {
+ return AXml.addTagData(FILTER_TAG, filterText);
+ }
+
+ public void setFromXml(String xml) {
+ filterText = AXml.getTagData(xml, FILTER_TAG);
+ }
+
+ public String toString() {
+ return "filterData:[" + filterText + "]";
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/FilterDataUI.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/FilterDataUI.java
new file mode 100644
index 00000000000..8652f1da09b
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/FilterDataUI.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class FilterDataUI {
+
+ private Text filterText;
+ private Label filterLabel;
+ private final XViewer xViewer;
+
+ public FilterDataUI(XViewer xViewer) {
+ this.xViewer = xViewer;
+ }
+
+ public void createWidgets(Composite comp) {
+ Label label = new Label(comp, SWT.NONE);
+ label.setText("Filter:");
+ label.setToolTipText("Type string and press enter to filter.\nClear field to un-filter.");
+ GridData gd = new GridData(SWT.RIGHT, SWT.NONE, false, false);
+ label.setLayoutData(gd);
+
+ filterText = new Text(comp, SWT.SINGLE | SWT.BORDER);
+ gd = new GridData(SWT.RIGHT, SWT.NONE, false, false);
+ gd.widthHint = 100;
+ filterText.setLayoutData(gd);
+
+ filterText.addKeyListener(new KeyListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.events.KeyListener#keyPressed(org.eclipse.swt.events.KeyEvent)
+ */
+ public void keyPressed(KeyEvent e) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.events.KeyListener#keyReleased(org.eclipse.swt.events.KeyEvent)
+ */
+ public void keyReleased(KeyEvent e) {
+ // System.out.println(e.keyCode);
+ if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
+ xViewer.getCustomizeMgr().setFilterText(filterText.getText());
+ }
+ }
+ });
+
+ filterLabel = new Label(comp, SWT.NONE);
+ filterLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.NONE, false, false));
+ if (PlatformUI.isWorkbenchRunning()) {
+ filterLabel.setImage(SkynetGuiPlugin.getInstance().getImage("clear.gif"));
+ } else {
+ filterLabel.setText("clear");
+ }
+ filterLabel.addListener(SWT.MouseUp, new Listener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ public void handleEvent(Event event) {
+ filterText.setText("");
+ xViewer.getCustomizeMgr().setFilterText("");
+ }
+ });
+ }
+
+ public void dispose() {
+ }
+
+ public void clear() {
+ filterText.setText("");
+ xViewer.getCustomizeMgr().setFilterText("");
+ }
+
+ public void getStatusLabelAddition(StringBuffer sb) {
+ if (filterText != null && !filterText.getText().equals("")) {
+ sb.append("[Text Filter]");
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/IXViewerCustomizations.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/IXViewerCustomizations.java
new file mode 100644
index 00000000000..de10000263d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/IXViewerCustomizations.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import java.util.List;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+
+/**
+ * Methods to implement if this XViewer allows the user to save local/global customizations
+ *
+ * @author Donald G. Dunne
+ */
+public interface IXViewerCustomizations {
+
+ public void saveCustomization(CustomizeData custData) throws Exception;
+
+ public List<CustomizeData> getSavedCustDatas() throws Exception;
+
+ public CustomizeData getUserDefaultCustData() throws OseeCoreException;
+
+ public boolean isCustomizationUserDefault(CustomizeData custData);
+
+ public void setUserDefaultCustData(CustomizeData newCustData, boolean set) throws Exception;
+
+ public void deleteCustomization(CustomizeData custData) throws Exception;
+
+ public boolean isCustomizationPersistAvailable();
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/SortingData.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/SortingData.java
new file mode 100644
index 00000000000..886db2bbec2
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/SortingData.java
@@ -0,0 +1,138 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.jdk.core.util.AXml;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SortingData {
+
+ private static String XTREESORTER_TAG = "xSorter";
+ private static String COL_NAME_TAG = "id";
+ private static String OLD_COL_NAME_TAG = "name";
+ private final List<String> sortingIds = new ArrayList<String>();
+ private final CustomizeData custData;
+
+ public SortingData(CustomizeData custData) {
+ this.custData = custData;
+ }
+
+ public SortingData(String xml) {
+ this.custData = null;
+ setFromXml(xml);
+ }
+
+ public void clearSorter() {
+ sortingIds.clear();
+ }
+
+ public boolean isSorting() {
+ return sortingIds.size() > 0;
+ }
+
+ @Override
+ public String toString() {
+ return org.eclipse.osee.framework.jdk.core.util.Collections.toString(",", sortingIds);
+ }
+
+ public List<XViewerColumn> getSortXCols(Map<String, XViewerColumn> oldNameToColumnId) {
+ List<XViewerColumn> cols = new ArrayList<XViewerColumn>();
+ for (String id : getSortingIds()) {
+ XViewerColumn xCol = custData.getColumnData().getXColumn(id);
+ // For backward compatibility, try to resolve column name
+ if (xCol == null) {
+ XViewerColumn resolvedCol = oldNameToColumnId.get(id);
+ if (resolvedCol != null) {
+ xCol = custData.getColumnData().getXColumn(resolvedCol.getId());
+ }
+ }
+ if (xCol != null) {
+ cols.add(xCol);
+ } else {
+ // Ignore known removed columns
+ if (!CustomizeManager.REMOVED_COLUMNS_TO_IGNORE.contains(id)) {
+ OseeLog.log(
+ SkynetGuiPlugin.class,
+ Level.WARNING,
+ "XViewer Conversion for saved Customization \"" + custData.getName() + "\" dropped unresolved SORTING column Name/Id: \"" + id + "\". Delete customization and re-save to resolve.");
+ }
+ }
+ }
+ return cols;
+ }
+
+ public void setSortXCols(List<XViewerColumn> sortXCols) {
+ sortingIds.clear();
+ for (XViewerColumn xCol : sortXCols) {
+ sortingIds.add(xCol.getId());
+ }
+ }
+
+ public String getXml() {
+ StringBuffer sb = new StringBuffer("<" + XTREESORTER_TAG + ">");
+ // NOTE: Sorting direction is stored as part of the column data
+ for (String item : sortingIds)
+ sb.append(AXml.addTagData(COL_NAME_TAG, item));
+ sb.append("</" + XTREESORTER_TAG + ">");
+ return sb.toString();
+ }
+
+ public void setFromXml(String xml) {
+ // NOTE: Sorting direction is stored as part of the column data
+ sortingIds.clear();
+ String xmlSortStr = AXml.getTagData(xml, XTREESORTER_TAG);
+ Matcher m = Pattern.compile("<" + COL_NAME_TAG + ">(.*?)</" + COL_NAME_TAG + ">").matcher(xmlSortStr);
+ while (m.find()) {
+ sortingIds.add(m.group(1));
+ }
+ Matcher mOld = Pattern.compile("<" + OLD_COL_NAME_TAG + ">(.*?)</" + OLD_COL_NAME_TAG + ">").matcher(xmlSortStr);
+ while (mOld.find()) {
+ sortingIds.add(mOld.group(1));
+ }
+ }
+
+ /**
+ * @return the sortingNames
+ */
+ public List<String> getSortingIds() {
+ return sortingIds;
+ }
+
+ public void removeSortingName(String name) {
+ this.sortingIds.remove(name);
+ }
+
+ public void addSortingName(String name) {
+ if (!this.sortingIds.contains(name)) this.sortingIds.add(name);
+ }
+
+ /**
+ * @param sortingNames the sortingNames to set
+ */
+ public void setSortingNames(String... xViewerColumnId) {
+ this.sortingIds.clear();
+ for (String id : xViewerColumnId) {
+ this.sortingIds.add(id);
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/XViewerCustomMenu.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/XViewerCustomMenu.java
new file mode 100644
index 00000000000..c0b672fdde8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/XViewerCustomMenu.java
@@ -0,0 +1,409 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.dialogs.ListDialogSortable;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.HtmlDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumnSorter;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerLabelProvider;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerTreeReport;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.dialogs.ListDialog;
+
+/**
+ * Allow for the customization of the xViewer's right-click menus
+ *
+ * @author Donald G. Dunne
+ */
+public class XViewerCustomMenu {
+
+ protected XViewer xViewer;
+ private final Clipboard clipboard = new Clipboard(null);
+
+ protected Action filterByColumn;
+ protected Action clearAllSorting;
+ protected Action clearAllFilters;
+ protected Action tableProperties;
+ protected Action viewTableReport;
+ protected Action columnMultiEdit;
+ protected Action removeSelected;
+ protected Action removeNonSelected;
+ protected Action copySelected;
+ protected Action copySelectedCell;
+ protected Action viewSelectedCell;
+
+ /**
+ * @param factory
+ */
+ public XViewerCustomMenu() {
+ }
+
+ public void init(XViewer xviewer) {
+ this.xViewer = xviewer;
+ setupActions();
+ xViewer.getMenuManager().addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ setupMenu();
+ }
+ });
+ xViewer.getTree().addKeyListener(new KeySelectedListener());
+ xViewer.getTree().addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(org.eclipse.swt.events.DisposeEvent e) {
+ if (clipboard != null) clipboard.dispose();
+ };
+ });
+ }
+
+ protected void setupMenu() {
+ MenuManager mm = xViewer.getMenuManager();
+ mm.add(new GroupMarker(XViewer.MENU_GROUP_PRE));
+ mm.add(new Separator());
+ mm.add(tableProperties);
+ mm.add(viewTableReport);
+ if (xViewer.isColumnMultiEditEnabled()) {
+ mm.add(columnMultiEdit);
+ }
+ mm.add(viewSelectedCell);
+ mm.add(copySelected);
+ mm.add(copySelectedCell);
+ mm.add(new Separator());
+ mm.add(filterByColumn);
+ mm.add(clearAllFilters);
+ mm.add(clearAllSorting);
+ mm.add(new Separator());
+ mm.add(removeSelected);
+ mm.add(removeNonSelected);
+ mm.add(new GroupMarker(XViewer.MENU_GROUP_POST));
+ }
+
+ protected void setupActions() {
+ removeSelected = new Action("Remove Selected from View") {
+ @Override
+ public void run() {
+ performRemoveSelectedRows();
+ };
+ };
+ removeNonSelected = new Action("Remove Non-Selected from View") {
+ @Override
+ public void run() {
+ performRemoveNonSelectedRows();
+ };
+ };
+ copySelected = new Action("Copy Selected Row(s)- Ctrl-C") {
+ @Override
+ public void run() {
+ performCopy();
+ };
+ };
+ viewSelectedCell = new Action("View Selected Cell Data") {
+ @Override
+ public void run() {
+ performViewCell();
+ };
+ };
+ copySelectedCell = new Action("Copy Selected Column - Ctrl-Shift-C") {
+ @Override
+ public void run() {
+ performCopyCell();
+ };
+ };
+ clearAllSorting = new Action("Clear All Sorting") {
+ @Override
+ public void run() {
+ xViewer.getCustomizeMgr().clearSorter();
+ };
+ };
+ clearAllFilters = new Action("Clear All Filters") {
+ @Override
+ public void run() {
+ xViewer.getCustomizeMgr().clearFilters();
+ };
+ };
+ filterByColumn = new Action("Filter By Column") {
+ @Override
+ public void run() {
+ performFilterByColumn();
+ };
+ };
+ tableProperties = new Action("Table Customization") {
+ @Override
+ public void run() {
+ xViewer.getCustomizeMgr().handleTableCustomization();
+ }
+ };
+ viewTableReport = new Action("View Table Report") {
+ @Override
+ public void run() {
+ new XViewerTreeReport(xViewer).open();
+ }
+ };
+ columnMultiEdit = new Action("Column Multi Edit") {
+ @Override
+ public void run() {
+ Set<TreeColumn> editableColumns = new HashSet<TreeColumn>();
+ Collection<TreeItem> selectedTreeItems = Arrays.asList(xViewer.getTree().getSelection());
+ for (TreeColumn treeCol : xViewer.getTree().getColumns()) {
+ if (xViewer.isColumnMultiEditable(treeCol, selectedTreeItems)) {
+ editableColumns.add(treeCol);
+ }
+ }
+ if (editableColumns.size() == 0) {
+ AWorkbench.popup("ERROR", "No Columns Are Multi-Editable");
+ return;
+ }
+ ListDialogSortable ld = new ListDialogSortable(new XViewerColumnSorter(), xViewer.getTree().getShell());
+ ld.setMessage("Select Column to Edit");
+ ld.setInput(editableColumns);
+ ld.setLabelProvider(treeColumnLabelProvider);
+ ld.setContentProvider(new ArrayContentProvider());
+ ld.setTitle("Select Column to Edit");
+ int result = ld.open();
+ if (result != 0) return;
+ xViewer.handleColumnMultiEdit((TreeColumn) ld.getResult()[0], selectedTreeItems);
+ }
+ };
+ }
+
+ private class KeySelectedListener implements KeyListener {
+ public void keyPressed(KeyEvent e) {
+ }
+
+ public void keyReleased(KeyEvent e) {
+ if (e.keyCode == 'c' && e.stateMask == (SWT.CONTROL | SWT.SHIFT)) {
+ performCopyCell();
+ } else if (e.keyCode == 'c' && e.stateMask == SWT.CONTROL) {
+ performCopy();
+ }
+ }
+ }
+
+ private void performRemoveSelectedRows() {
+ try {
+ TreeItem[] items = xViewer.getTree().getSelection();
+ if (items.length == 0) {
+ AWorkbench.popup("ERROR", "No items to copy");
+ return;
+ }
+ Set<Object> objs = new HashSet<Object>();
+ for (TreeItem item : items) {
+ objs.add(item.getData());
+ }
+ xViewer.remove(objs);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ private void performRemoveNonSelectedRows() {
+ try {
+ TreeItem[] items = xViewer.getTree().getSelection();
+ if (items.length == 0) {
+ AWorkbench.popup("ERROR", "No items to copy");
+ return;
+ }
+ Set<Object> keepObjects = new HashSet<Object>();
+ for (TreeItem item : items) {
+ keepObjects.add(item.getData());
+ }
+ xViewer.load(keepObjects);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ private void performViewCell() {
+ try {
+ TreeColumn treeCol = xViewer.getRightClickSelectedColumn();
+ TreeItem treeItem = xViewer.getRightClickSelectedItem();
+ if (treeCol != null) {
+ XViewerColumn xCol = (XViewerColumn) treeCol.getData();
+ String data =
+ ((XViewerLabelProvider) xViewer.getLabelProvider()).getColumnText(treeItem.getData(), xCol,
+ xViewer.getRightClickSelectedColumnNum());
+ if (data != null && !data.equals("")) new HtmlDialog(treeCol.getText() + " Data",
+ treeCol.getText() + " Data", data).open();
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ private void performFilterByColumn() {
+ Set<TreeColumn> visibleColumns = new HashSet<TreeColumn>();
+ for (TreeColumn treeCol : xViewer.getTree().getColumns())
+ if (treeCol.getWidth() > 0) visibleColumns.add(treeCol);
+ if (visibleColumns.size() == 0) {
+ AWorkbench.popup("ERROR", "No Columns Are Available");
+ return;
+ }
+ ListDialog ld = new ListDialog(xViewer.getTree().getShell()) {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.ListDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createDialogArea(Composite container) {
+ Control control = super.createDialogArea(container);
+ getTableViewer().setSorter(treeColumnSorter);
+ return control;
+ }
+ };
+ ld.setMessage("Select Column to Filter");
+ ld.setInput(visibleColumns);
+ ld.setLabelProvider(treeColumnLabelProvider);
+ ld.setContentProvider(new ArrayContentProvider());
+ ld.setTitle("Select Column to Filter");
+ int result = ld.open();
+ if (result != 0) return;
+ TreeColumn treeCol = (TreeColumn) ld.getResult()[0];
+ String colId = ((XViewerColumn) treeCol.getData()).getId();
+ xViewer.getColumnFilterDataUI().promptSetFilter(colId);
+
+ }
+
+ private void performCopyCell() {
+ Set<TreeColumn> visibleColumns = new HashSet<TreeColumn>();
+ TreeItem[] items = xViewer.getTree().getSelection();
+ if (items.length == 0) {
+ AWorkbench.popup("ERROR", "No items to copy");
+ return;
+ }
+ ArrayList<String> textTransferData = new ArrayList<String>();
+ ITableLabelProvider labelProv = (ITableLabelProvider) xViewer.getLabelProvider();
+ for (TreeColumn treeCol : xViewer.getTree().getColumns())
+ if (treeCol.getWidth() > 0) visibleColumns.add(treeCol);
+ if (visibleColumns.size() == 0) {
+ AWorkbench.popup("ERROR", "No Columns Are Available");
+ return;
+ }
+ ListDialog ld = new ListDialog(xViewer.getTree().getShell()) {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.ListDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createDialogArea(Composite container) {
+ Control control = super.createDialogArea(container);
+ getTableViewer().setSorter(treeColumnSorter);
+ return control;
+ }
+ };
+ ld.setMessage("Select Column to Copy");
+ ld.setInput(visibleColumns);
+ ld.setLabelProvider(treeColumnLabelProvider);
+ ld.setContentProvider(new ArrayContentProvider());
+ ld.setTitle("Select Column to Copy");
+ int result = ld.open();
+ if (result != 0) return;
+ TreeColumn treeCol = (TreeColumn) ld.getResult()[0];
+ StringBuffer sb = new StringBuffer();
+ for (TreeItem item : items) {
+ for (int x = 0; x < xViewer.getTree().getColumnCount(); x++) {
+ if (xViewer.getTree().getColumn(x).equals(treeCol)) {
+ sb.append(labelProv.getColumnText(item.getData(), x) + "\n");
+ }
+ }
+ }
+ textTransferData.add(sb.toString());
+
+ if (textTransferData.size() > 0) clipboard.setContents(
+ new Object[] {org.eclipse.osee.framework.jdk.core.util.Collections.toString(textTransferData, null, ", ",
+ null)}, new Transfer[] {TextTransfer.getInstance()});
+ }
+
+ private void performCopy() {
+ TreeItem[] items = xViewer.getTree().getSelection();
+ if (items.length == 0) {
+ AWorkbench.popup("ERROR", "No items to copy");
+ return;
+ }
+ ArrayList<String> textTransferData = new ArrayList<String>();
+ ITableLabelProvider labelProv = (ITableLabelProvider) xViewer.getLabelProvider();
+ if (items != null && items.length > 0) {
+ StringBuffer sb = new StringBuffer();
+ for (TreeItem item : items) {
+ List<String> strs = new ArrayList<String>();
+ for (int x = 0; x < xViewer.getTree().getColumnCount(); x++) {
+ if (xViewer.getTree().getColumn(x).getWidth() > 0) {
+ String data = labelProv.getColumnText(item.getData(), x);
+ if (data != null) strs.add(data);
+ }
+ }
+ sb.append(org.eclipse.osee.framework.jdk.core.util.Collections.toString("\t", strs) + "\n");
+ }
+ textTransferData.add(sb.toString());
+
+ if (textTransferData.size() > 0) clipboard.setContents(
+ new Object[] {org.eclipse.osee.framework.jdk.core.util.Collections.toString(textTransferData, null,
+ ", ", null)}, new Transfer[] {TextTransfer.getInstance()});
+ }
+ }
+
+ static LabelProvider treeColumnLabelProvider = new LabelProvider() {
+ @Override
+ public String getText(Object element) {
+ if (element instanceof TreeColumn) {
+ return ((TreeColumn) element).getText();
+ }
+ return "Unknown element type";
+ }
+ };
+
+ static ViewerSorter treeColumnSorter = new ViewerSorter() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer,
+ * java.lang.Object, java.lang.Object)
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ return getComparator().compare(((TreeColumn) e1).getText(), ((TreeColumn) e2).getText());
+ }
+ };
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/XViewerCustomizations.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/XViewerCustomizations.java
new file mode 100644
index 00000000000..4a8f19613e1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/XViewerCustomizations.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerCustomizations implements IXViewerCustomizations {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#deleteCustomization(org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData)
+ */
+ public void deleteCustomization(CustomizeData custData) throws Exception {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#getCustDatas()
+ */
+ public List<CustomizeData> getSavedCustDatas() {
+ return new ArrayList<CustomizeData>();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#getUserDefaultCustData()
+ */
+ public CustomizeData getUserDefaultCustData() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#isCustomizationUserDefault(org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData)
+ */
+ public boolean isCustomizationUserDefault(CustomizeData custData) {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#saveCustomization(org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData)
+ */
+ public void saveCustomization(CustomizeData custData) throws Exception {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#setUserDefaultCustData(org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData, boolean)
+ */
+ public void setUserDefaultCustData(CustomizeData newCustData, boolean set) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#isCustomizationPersistAvailable()
+ */
+ public boolean isCustomizationPersistAvailable() {
+ return false;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/dialog/CustomizationDataSelectionDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/dialog/CustomizationDataSelectionDialog.java
new file mode 100644
index 00000000000..b382e520354
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/dialog/CustomizationDataSelectionDialog.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.dialog;
+
+import java.util.Iterator;
+import java.util.List;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox;
+import org.eclipse.osee.framework.ui.skynet.widgets.XText;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeDataLabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.ListDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CustomizationDataSelectionDialog extends ListDialog {
+
+ private XText custText;
+ private String enteredName;
+ private boolean saveGlobal = false;
+ private XCheckBox saveGlobalCheck;
+ private CustomizeData selectedCustData = null;
+
+ public CustomizationDataSelectionDialog(XViewer xViewer, List<CustomizeData> custDatas) {
+ this(Display.getCurrent().getActiveShell(), xViewer, custDatas);
+ }
+
+ public CustomizationDataSelectionDialog(Shell parent, XViewer xViewer, List<CustomizeData> custDatas) {
+ super(Display.getCurrent().getActiveShell());
+ setContentProvider(new ArrayContentProvider());
+ setLabelProvider(new CustomizeDataLabelProvider(xViewer));
+ setInput(custDatas);
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ setTitle("Save Customization");
+ setMessage("Enter name or select customization.");
+ }
+
+ @Override
+ protected void okPressed() {
+ if (custText.get().equals("") && getSelectedCustData() == null) {
+ AWorkbench.popup("ERROR", "Must select customization or enter new customization name.");
+ return;
+ }
+ super.okPressed();
+ }
+
+ @Override
+ protected Control createDialogArea(Composite container) {
+
+ Control c = super.createDialogArea(container);
+
+ Composite comp = new Composite(container, SWT.NONE);
+ comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ comp.setLayout(new GridLayout(2, true));
+
+ custText = new XText("Enter New Customization Name");
+ custText.createWidgets(comp, 1);
+ custText.setFocus();
+ custText.addModifyListener(new ModifyListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ */
+ public void modifyText(ModifyEvent e) {
+ enteredName = custText.get();
+ }
+ });
+
+ if (OseeAts.isAtsAdmin()) {
+ comp = new Composite(container, SWT.NONE);
+ comp.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ comp.setLayout(new GridLayout(2, false));
+
+ saveGlobalCheck = new XCheckBox("Save Global");
+ saveGlobalCheck.createWidgets(comp, 1);
+ saveGlobalCheck.addSelectionListener(new SelectionAdapter() {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ saveGlobal = saveGlobalCheck.get();
+ }
+ });
+ }
+
+ getTableViewer().addSelectionChangedListener(new ISelectionChangedListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ selectedCustData = getSelectedCustomizeData();
+ if (saveGlobalCheck != null) {
+ saveGlobalCheck.set(!selectedCustData.isPersonal());
+ saveGlobal = !selectedCustData.isPersonal();
+ }
+ }
+ });
+ return c;
+ }
+
+ private CustomizeData getSelectedCustomizeData() {
+ IStructuredSelection selection = (IStructuredSelection) getTableViewer().getSelection();
+ if (selection.size() == 0) return null;
+ Iterator<?> i = selection.iterator();
+ return (CustomizeData) i.next();
+ }
+
+ /**
+ * @return the selectedCustData
+ */
+ public CustomizeData getSelectedCustData() {
+ return selectedCustData;
+ }
+
+ public String getEnteredName() {
+ return enteredName;
+ }
+
+ public boolean isSaveGlobal() {
+ return saveGlobal;
+ }
+
+ public void setSaveGlobal(boolean saveGlobal) {
+ this.saveGlobal = saveGlobal;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/dialog/XViewerCustomizeDialog.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/dialog/XViewerCustomizeDialog.java
new file mode 100644
index 00000000000..6ba19351411
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/customize/dialog/XViewerCustomizeDialog.java
@@ -0,0 +1,1154 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.dialog;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.ArrayTreeContentProvider;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.filteredTree.OSEEFilteredTree;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumnLabelProvider;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumnSorter;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.ColumnFilterData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeDataLabelProvider;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeManager;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.SortingData;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceAdapter;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DropTargetAdapter;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.dialogs.PatternFilter;
+
+public class XViewerCustomizeDialog extends MessageDialog {
+ private String title = "Customize Table";
+ private static String buttons[] = new String[] {"Ok", "Apply", "Cancel"};
+ private final XViewer xViewerToCustomize;
+ private OSEEFilteredTree custTable;
+ private OSEEFilteredTree hiddenColTable;
+ private OSEEFilteredTree visibleColTable;
+ private Text sorterText;
+ private Text filterText;
+ private Text columnFilterText;
+ // Select Customization Buttons
+ Button setDefaultButton, deleteButton;
+ // Config Customization Buttons - Moving items
+ Button addItemButton, addAllItemButton, removeItemButton, removeAllItemButton, moveUpButton, moveDownButton;
+ // Config Customization Buttons
+ Button saveButton, renameButton;
+ private static String SET_AS_DEFAULT = " Set as Default ";
+ private static String REMOVE_DEFAULT = "Remove Default";
+ private CustomizeData defaultTableCustData;
+ private boolean inWorkbench = false;
+ boolean isFeedbackAfter = false;
+
+ public XViewerCustomizeDialog(XViewer xViewer) {
+ this(xViewer, Display.getCurrent().getActiveShell());
+ }
+
+ private XViewerCustomizeDialog(XViewer xViewer, Shell parentShell) {
+ super(parentShell, "", null, "", MessageDialog.NONE, buttons, 0);
+ this.xViewerToCustomize = xViewer;
+ inWorkbench = Platform.isRunning();
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ DragSourceAdapter hiddenTableDragListener = new DragSourceAdapter() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.dnd.DragSourceAdapter#dragStart(org.eclipse.swt.dnd.DragSourceEvent)
+ */
+ @Override
+ public void dragStart(DragSourceEvent event) {
+ if (hiddenColTable.getViewer().getSelection().isEmpty()) {
+ event.doit = false;
+ }
+ }
+
+ /*
+ * @see org.eclipse.swt.dnd.DragSourceAdapter#dragSetData(org.eclipse.swt.dnd.DragSourceEvent)
+ */
+ @Override
+ public void dragSetData(DragSourceEvent event) {
+ if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
+ List<XViewerColumn> selCols = getHiddenTableSelection();
+ Collection<String> ids = new ArrayList<String>(selCols.size());
+
+ for (XViewerColumn xCol : selCols)
+ ids.add(xCol.getId());
+
+ event.data = Collections.toString(ids, null, ", ", null);
+ }
+ }
+ };
+ DropTargetAdapter hiddenTableDropListener = new DropTargetAdapter() {
+
+ @Override
+ public void dragOperationChanged(DropTargetEvent event) {
+ }
+
+ @Override
+ public void drop(DropTargetEvent event) {
+ if (event.data instanceof String) {
+ performHiddenTableTextDrop(event);
+ }
+ }
+
+ @Override
+ public void dragOver(DropTargetEvent event) {
+ performHiddenTableDragOver(event);
+ }
+
+ @Override
+ public void dropAccept(DropTargetEvent event) {
+ }
+ };
+
+ /**
+ * Drag should only be from visible table
+ *
+ * @param event
+ */
+ public void performHiddenTableDragOver(DropTargetEvent event) {
+ if (!TextTransfer.getInstance().isSupportedType(event.currentDataType)) {
+ event.detail = DND.DROP_NONE;
+ return;
+ }
+ // Only allow drag from visibleColTable
+ if (event.widget != visibleColTable) {
+ return;
+ }
+
+ event.detail = DND.DROP_MOVE;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void performHiddenTableTextDrop(DropTargetEvent event) {
+
+ String droppedIds = (String) event.data;
+
+ List<XViewerColumn> droppedVisibleTableXCols = new ArrayList<XViewerColumn>();
+ List<XViewerColumn> orderCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput();
+ for (XViewerColumn xCol : orderCols) {
+ if (droppedIds.contains(xCol.getId())) {
+ droppedVisibleTableXCols.add(xCol);
+ }
+ }
+
+ moveFromVisibleToHidden(droppedVisibleTableXCols);
+ }
+
+ DragSourceAdapter visibleTableDragListener = new DragSourceAdapter() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.dnd.DragSourceAdapter#dragStart(org.eclipse.swt.dnd.DragSourceEvent)
+ */
+ @Override
+ public void dragStart(DragSourceEvent event) {
+ if (visibleColTable.getViewer().getSelection().isEmpty()) {
+ event.doit = false;
+ }
+ }
+
+ /*
+ * @see org.eclipse.swt.dnd.DragSourceAdapter#dragSetData(org.eclipse.swt.dnd.DragSourceEvent)
+ */
+ @Override
+ public void dragSetData(DragSourceEvent event) {
+ if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
+ List<XViewerColumn> selCols = getVisibleTableSelection();
+ Collection<String> ids = new ArrayList<String>(selCols.size());
+
+ for (XViewerColumn xCol : selCols)
+ ids.add(xCol.getId());
+
+ event.data = Collections.toString(ids, null, ", ", null);
+ }
+ }
+ };
+ DropTargetAdapter visibleTableDropListener = new DropTargetAdapter() {
+
+ @Override
+ public void dragOperationChanged(DropTargetEvent event) {
+ }
+
+ @Override
+ public void drop(DropTargetEvent event) {
+ if (event.data instanceof String) {
+ performVisibleTableTextDrop(event);
+ }
+ }
+
+ @Override
+ public void dragOver(DropTargetEvent event) {
+ performVisibleTableDragOver(event);
+ }
+
+ @Override
+ public void dropAccept(DropTargetEvent event) {
+ }
+ };
+
+ @SuppressWarnings("unchecked")
+ public void performVisibleTableTextDrop(DropTargetEvent event) {
+ Tree tree = visibleColTable.getViewer().getTree();
+ TreeItem dragOverTreeItem = tree.getItem(visibleColTable.getViewer().getTree().toControl(event.x, event.y));
+ XViewerColumn dragOverXCol = (XViewerColumn) dragOverTreeItem.getData();
+
+ String droppedIds = (String) event.data;
+
+ // Don't allow dropping on same item as dragging
+ if (droppedIds.contains(dragOverXCol.getId())) {
+ return;
+ }
+
+ List<XViewerColumn> droppedXCols = new ArrayList<XViewerColumn>();
+ List<XViewerColumn> orderCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput();
+ for (XViewerColumn xCol : orderCols) {
+ if (droppedIds.contains(xCol.getId())) {
+ droppedXCols.add(xCol);
+ }
+ }
+ for (XViewerColumn xCol : (List<XViewerColumn>) hiddenColTable.getViewer().getInput()) {
+ if (droppedIds.contains(xCol.getId())) {
+ droppedXCols.add(xCol);
+ }
+ }
+ orderCols.removeAll(droppedXCols);
+
+ int dropXColOrderColsIndex = 0;
+ for (XViewerColumn xCol : (List<XViewerColumn>) visibleColTable.getViewer().getInput()) {
+ if (xCol.getId().equals(dragOverXCol.getId())) {
+ break;
+ }
+ dropXColOrderColsIndex++;
+ }
+
+ if (isFeedbackAfter) {
+ orderCols.addAll(dropXColOrderColsIndex + 1, droppedXCols);
+ } else {
+ orderCols.addAll(dropXColOrderColsIndex, droppedXCols);
+ }
+ visibleColTable.getViewer().setInput(orderCols);
+
+ List<XViewerColumn> hiddenCols = (List<XViewerColumn>) hiddenColTable.getViewer().getInput();
+ hiddenCols.removeAll(droppedXCols);
+ hiddenColTable.getViewer().setInput(hiddenCols);
+ }
+
+ public void performVisibleTableDragOver(DropTargetEvent event) {
+ if (!TextTransfer.getInstance().isSupportedType(event.currentDataType)) {
+ event.detail = DND.DROP_NONE;
+ return;
+ }
+
+ Tree tree = visibleColTable.getViewer().getTree();
+ TreeItem dragOverTreeItem = tree.getItem(visibleColTable.getViewer().getTree().toControl(event.x, event.y));
+ if (dragOverTreeItem == null) {
+ return;
+ }
+
+ event.feedback = DND.FEEDBACK_EXPAND;
+ event.detail = DND.DROP_NONE;
+
+ if (dragOverTreeItem != null) {
+ IStructuredSelection selectedItem = (IStructuredSelection) visibleColTable.getViewer().getSelection();
+ if (selectedItem == null || selectedItem.isEmpty()) {
+ selectedItem = (IStructuredSelection) hiddenColTable.getViewer().getSelection();
+ }
+ if (selectedItem == null) {
+ return;
+ }
+ Object obj = selectedItem.getFirstElement();
+ if (obj instanceof XViewerColumn) {
+ if (isFeedbackAfter) {
+ event.feedback = DND.FEEDBACK_INSERT_AFTER;
+ } else {
+ event.feedback = DND.FEEDBACK_INSERT_BEFORE;
+ }
+ event.detail = DND.DROP_MOVE;
+ }
+ } else {
+ tree.setInsertMark(null, false);
+ }
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+
+ getShell().setText(title);
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ if (inWorkbench) {
+ SkynetGuiPlugin.getInstance().setHelp(parent, "table_customization");
+ }
+
+ final Composite comp = new Composite(parent, SWT.NONE);
+ GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gd.heightHint = 700;
+ comp.setLayoutData(gd);
+ final GridLayout gridLayout_2 = new GridLayout();
+ gridLayout_2.numColumns = 2;
+ comp.setLayout(gridLayout_2);
+
+ final Label namespaceLabel = new Label(comp, SWT.NONE);
+ GridData gridData = new GridData(SWT.CENTER, SWT.CENTER, false, false);
+ gridData.horizontalSpan = 2;
+ namespaceLabel.setLayoutData(gridData);
+ namespaceLabel.setText("Customization Namespace: " + xViewerToCustomize.getXViewerFactory().getNamespace());
+
+ final Label selectCustomizationLabel = new Label(comp, SWT.NONE);
+ selectCustomizationLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+ selectCustomizationLabel.setText("Select Customization");
+
+ // Column Configuration
+ final Group configureColumnsGroup = new Group(comp, SWT.NONE);
+ configureColumnsGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 3));
+ configureColumnsGroup.setText("Configure Customization");
+ final GridLayout gridLayout = new GridLayout();
+ gridLayout.marginWidth = 3;
+ gridLayout.marginHeight = 3;
+ gridLayout.numColumns = 3;
+ configureColumnsGroup.setLayout(gridLayout);
+
+ final Composite hiddenTableComp = new Composite(configureColumnsGroup, SWT.NONE);
+ hiddenTableComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ final GridLayout gridLayout_4 = new GridLayout();
+ gridLayout_4.marginWidth = 0;
+ gridLayout_4.marginHeight = 0;
+ hiddenTableComp.setLayout(gridLayout_4);
+
+ final Label hiddenColumnsLabel = new Label(hiddenTableComp, SWT.NONE);
+ hiddenColumnsLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+ hiddenColumnsLabel.setText("Hidden Columns");
+
+ // Hidden Column Table
+ hiddenColTable = new OSEEFilteredTree(hiddenTableComp);
+ final Tree table_1 = hiddenColTable.getViewer().getTree();
+ final GridData gd_table_1 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2);
+ gd_table_1.widthHint = 300;
+ table_1.setLayoutData(gd_table_1);
+ hiddenColTable.getViewer().setLabelProvider(new XViewerColumnLabelProvider());
+ hiddenColTable.getViewer().setContentProvider(new ArrayTreeContentProvider());
+ hiddenColTable.getViewer().setSorter(new XViewerColumnSorter());
+ hiddenColTable.getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ updateButtonEnablements();
+ }
+ });
+
+ final Composite moveButtonComp = new Composite(configureColumnsGroup, SWT.NONE);
+ moveButtonComp.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+ final GridLayout gridLayout_5 = new GridLayout();
+ gridLayout_5.marginWidth = 0;
+ gridLayout_5.marginHeight = 0;
+ moveButtonComp.setLayout(gridLayout_5);
+
+ addItemButton = new Button(moveButtonComp, SWT.NONE);
+ addItemButton.setText(">");
+ addItemButton.setToolTipText("Add");
+ addItemButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+ addItemButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ handleAddItemButton();
+ }
+ });
+
+ addAllItemButton = new Button(moveButtonComp, SWT.NONE);
+ addAllItemButton.setText(">>");
+ addAllItemButton.setToolTipText("Add All");
+ addAllItemButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ handleAddAllItemButton();
+ }
+ });
+
+ removeItemButton = new Button(moveButtonComp, SWT.NONE);
+ removeItemButton.setText("<");
+ removeItemButton.setToolTipText("Remove");
+ removeItemButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+ removeItemButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ handleRemoveItemButton();
+ }
+ });
+
+ removeAllItemButton = new Button(moveButtonComp, SWT.NONE);
+ removeAllItemButton.setText("<<");
+ removeAllItemButton.setToolTipText("Remove All");
+ removeAllItemButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ handleRemoveAllItemButton();
+ }
+ });
+
+ moveUpButton = new Button(moveButtonComp, SWT.NONE);
+ moveUpButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+ moveUpButton.setText("^");
+ moveUpButton.setToolTipText("Move Up");
+ moveUpButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ handleMoveUpButton();
+ }
+ });
+
+ moveDownButton = new Button(moveButtonComp, SWT.NONE);
+ moveDownButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+ moveDownButton.setText("v");
+ moveDownButton.setToolTipText("Move Down");
+ moveDownButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ handleMoveDownButton();
+ }
+ });
+
+ final Composite visibleTableComp = new Composite(configureColumnsGroup, SWT.NONE);
+ visibleTableComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ final GridLayout gridLayout_6 = new GridLayout();
+ gridLayout_6.marginWidth = 0;
+ gridLayout_6.marginHeight = 0;
+ visibleTableComp.setLayout(gridLayout_6);
+
+ final Label visibleColumnsLabel = new Label(visibleTableComp, SWT.NONE);
+ visibleColumnsLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+ visibleColumnsLabel.setText("Visible Columns");
+
+ // Visible Column Table
+ visibleColTable = new OSEEFilteredTree(visibleTableComp);
+ final Tree table = visibleColTable.getViewer().getTree();
+ final GridData gd_table = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gd_table.widthHint = 300;
+ table.setLayoutData(gd_table);
+ visibleColTable.getViewer().setLabelProvider(new XViewerColumnLabelProvider());
+ visibleColTable.getViewer().setContentProvider(new ArrayTreeContentProvider());
+ visibleColTable.getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ updateButtonEnablements();
+ }
+ });
+ visibleColTable.getViewer().addDragSupport(DND.DROP_MOVE, new Transfer[] {TextTransfer.getInstance()},
+ visibleTableDragListener);
+ visibleColTable.getViewer().addDropSupport(DND.DROP_MOVE, new Transfer[] {TextTransfer.getInstance()},
+ visibleTableDropListener);
+ hiddenColTable.getViewer().addDragSupport(DND.DROP_MOVE, new Transfer[] {TextTransfer.getInstance()},
+ hiddenTableDragListener);
+ hiddenColTable.getViewer().addDropSupport(DND.DROP_MOVE, new Transfer[] {TextTransfer.getInstance()},
+ hiddenTableDropListener);
+
+ gridLayout.numColumns = 3;
+ gridLayout.numColumns = 3;
+
+ // Sorter text block
+ final Composite composite_2 = new Composite(configureColumnsGroup, SWT.NONE);
+ composite_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1));
+ final GridLayout gridLayout_3 = new GridLayout();
+ gridLayout_3.numColumns = 3;
+ composite_2.setLayout(gridLayout_3);
+
+ final Label sorterLabel = new Label(composite_2, SWT.NONE);
+ sorterLabel.setText("Sorter:");
+
+ sorterText = new Text(composite_2, SWT.BORDER);
+ sorterText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+ final Label clearSorterLabel = new Label(composite_2, SWT.PUSH);
+ if (inWorkbench)
+ clearSorterLabel.setImage(SkynetGuiPlugin.getInstance().getImage("clear.gif"));
+ else
+ clearSorterLabel.setText("clear");
+ clearSorterLabel.addMouseListener(new MouseListener() {
+ public void mouseDown(MouseEvent e) {
+ }
+
+ public void mouseDoubleClick(MouseEvent e) {
+
+ }
+
+ public void mouseUp(MouseEvent e) {
+ sorterText.setText("");
+ }
+ });
+
+ // Filter text block
+ final Composite composite_7 = new Composite(composite_2, SWT.NONE);
+ composite_7.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1));
+ final GridLayout gridLayout_13 = new GridLayout();
+ gridLayout_13.numColumns = 3;
+ composite_7.setLayout(gridLayout_13);
+
+ final Label filterLabel = new Label(composite_7, SWT.NONE);
+ filterLabel.setText("Filter Text:");
+
+ filterText = new Text(composite_7, SWT.BORDER);
+ filterText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+ final Label clearFilterLabel = new Label(composite_7, SWT.PUSH);
+ if (inWorkbench)
+ clearFilterLabel.setImage(SkynetGuiPlugin.getInstance().getImage("clear.gif"));
+ else
+ clearFilterLabel.setText("clear");
+ clearFilterLabel.addMouseListener(new MouseListener() {
+ public void mouseDown(MouseEvent e) {
+ }
+
+ public void mouseDoubleClick(MouseEvent e) {
+
+ }
+
+ public void mouseUp(MouseEvent e) {
+ filterText.setText("");
+ }
+ });
+
+ // Filter text block
+ final Composite composite_8 = new Composite(composite_2, SWT.NONE);
+ composite_8.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1));
+ final GridLayout gridLayout_14 = new GridLayout();
+ gridLayout_14.numColumns = 3;
+ composite_8.setLayout(gridLayout_14);
+
+ final Label columnFilterLabel = new Label(composite_8, SWT.NONE);
+ columnFilterLabel.setText("Column Filter:");
+
+ columnFilterText = new Text(composite_8, SWT.BORDER);
+ columnFilterText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+ final Label clearColumnFilterLabel = new Label(composite_8, SWT.PUSH);
+ if (inWorkbench)
+ clearColumnFilterLabel.setImage(SkynetGuiPlugin.getInstance().getImage("clear.gif"));
+ else
+ clearColumnFilterLabel.setText("clear");
+ clearColumnFilterLabel.addMouseListener(new MouseListener() {
+ public void mouseDown(MouseEvent e) {
+ }
+
+ public void mouseDoubleClick(MouseEvent e) {
+
+ }
+
+ public void mouseUp(MouseEvent e) {
+ columnFilterText.setText("");
+ }
+ });
+
+ // Button block
+ final Composite composite_1 = new Composite(composite_2, SWT.NONE);
+ composite_1.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
+ final GridLayout gridLayout_10 = new GridLayout();
+ gridLayout_10.numColumns = 5;
+ composite_1.setLayout(gridLayout_10);
+
+ // Customization Buttons
+ renameButton = new Button(composite_1, SWT.NONE);
+ renameButton.setText("Rename Column");
+ renameButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ handleRenameButton();
+ }
+ });
+
+ saveButton = new Button(composite_1, SWT.NONE);
+ saveButton.setText("Save Customization");
+ saveButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ handleSaveButton();
+ }
+ });
+
+ // Customization Table and Buttons
+ final Composite custComp = new Composite(comp, SWT.NONE);
+ final GridData gd_composite_6 = new GridData(SWT.FILL, SWT.FILL, true, true);
+ custComp.setLayoutData(gd_composite_6);
+ final GridLayout gridLayout_1 = new GridLayout();
+ gridLayout_1.marginWidth = 0;
+ gridLayout_1.marginHeight = 0;
+ custComp.setLayout(gridLayout_1);
+
+ // Customization Table
+ custTable = new OSEEFilteredTree(custComp, SWT.BORDER, new PatternFilter());
+ final Tree table_2 = custTable.getViewer().getTree();
+ final GridData gd_table_2 = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gd_table_2.heightHint = 270;
+ gd_table_2.widthHint = 200;
+ table_2.setLayoutData(gd_table_2);
+ custTable.getViewer().setLabelProvider(new CustomizeDataLabelProvider(xViewerToCustomize));
+ custTable.getViewer().setContentProvider(new ArrayTreeContentProvider());
+ custTable.getViewer().setSorter(new ViewerSorter() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ if (((CustomizeData) e1).getName().startsWith("-"))
+ return -1;
+ else if (((CustomizeData) e2).getName().startsWith("-"))
+ return 1;
+ else
+ return getComparator().compare(((CustomizeData) e1).getName(), ((CustomizeData) e2).getName());
+ }
+ });
+ custTable.getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ handleCustTableSelectionChanged();
+ updateButtonEnablements();
+ storeCustTableSelection();
+ }
+ });
+
+ // Customization Table Buttons
+ final Composite composite = new Composite(comp, SWT.NONE);
+ composite.setLayoutData(new GridData());
+ final GridLayout gridLayout_7 = new GridLayout();
+ gridLayout_7.numColumns = 4;
+ composite.setLayout(gridLayout_7);
+
+ setDefaultButton = new Button(composite, SWT.NONE);
+ setDefaultButton.setLayoutData(new GridData());
+ setDefaultButton.setText(SET_AS_DEFAULT);
+ setDefaultButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ handleSetDefaultButton();
+ updateButtonEnablements();
+ }
+ });
+
+ deleteButton = new Button(composite, SWT.NONE);
+ deleteButton.setLayoutData(new GridData());
+ deleteButton.setText("Delete");
+ deleteButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ handleDeleteButton();
+ updateButtonEnablements();
+ }
+ });
+
+ try {
+ loadCustomizeTable();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ updateButtonEnablements();
+
+ return comp;
+ }
+
+ @SuppressWarnings("unchecked")
+ private void handleAddItemButton() {
+ // Remove from hidden
+ List<XViewerColumn> hiddenSelCols = getHiddenTableSelection();
+ if (hiddenSelCols == null) return;
+ List<XViewerColumn> hiddenCols = (List<XViewerColumn>) hiddenColTable.getViewer().getInput();
+ hiddenCols.removeAll(hiddenSelCols);
+ hiddenColTable.getViewer().setInput(hiddenCols);
+
+ // Add to visible
+ List<XViewerColumn> visibleCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput();
+ visibleCols.addAll(hiddenSelCols);
+ visibleColTable.getViewer().setInput(visibleCols);
+ }
+
+ private void handleRemoveItemButton() {
+ List<XViewerColumn> visibleSelCols = getVisibleTableSelection();
+ if (visibleSelCols != null && visibleSelCols.size() != 0) {
+ moveFromVisibleToHidden(visibleSelCols);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void moveFromVisibleToHidden(List<XViewerColumn> visibleSelCols) {
+ // Remove from visible
+ if (visibleSelCols == null || visibleSelCols.size() == 0) return;
+ List<XViewerColumn> visibleCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput();
+ visibleCols.removeAll(visibleSelCols);
+ visibleColTable.getViewer().setInput(visibleCols);
+
+ // Add to hidden
+ List<XViewerColumn> hiddenCols = (List<XViewerColumn>) hiddenColTable.getViewer().getInput();
+ hiddenCols.addAll(visibleSelCols);
+ hiddenColTable.getViewer().setInput(hiddenCols);
+
+ updateSortTextField();
+ updateColumnFilterField();
+ }
+
+ @SuppressWarnings("unchecked")
+ private void updateSortTextField() {
+ // get visible column ids
+ List<String> visibleColumnIds = new ArrayList<String>();
+ for (XViewerColumn xCol : (List<XViewerColumn>) visibleColTable.getViewer().getInput()) {
+ visibleColumnIds.add(xCol.getId());
+ }
+ // get current sortIds
+ SortingData sortingData = new SortingData(sorterText.getText());
+ List<String> currentSortIds = sortingData.getSortingIds();
+
+ // get complement to determine ids that are sorted but not visible == invalid
+ for (String invalidId : org.eclipse.osee.framework.jdk.core.util.Collections.setComplement(currentSortIds,
+ visibleColumnIds)) {
+ sortingData.removeSortingName(invalidId);
+ }
+ if (sorterText != null && !sorterText.isDisposed()) {
+ sorterText.setText(sortingData.getXml());
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void updateColumnFilterField() {
+ // get visible column ids
+ List<String> visibleColumnIds = new ArrayList<String>();
+ for (XViewerColumn xCol : (List<XViewerColumn>) visibleColTable.getViewer().getInput()) {
+ visibleColumnIds.add(xCol.getId());
+ }
+ // get current columnFilterIds
+ ColumnFilterData columnFilterData = new ColumnFilterData();
+ columnFilterData.setFromXml(columnFilterText.getText());
+ Set<String> currentSortIds = columnFilterData.getColIds();
+
+ // get complement to determine ids that are sorted but not visible == invalid
+ for (String invalidId : org.eclipse.osee.framework.jdk.core.util.Collections.setComplement(currentSortIds,
+ visibleColumnIds)) {
+ columnFilterData.removeFilterText(invalidId);
+ }
+ if (columnFilterText != null && !columnFilterText.isDisposed()) {
+ columnFilterText.setText(columnFilterData.getXml());
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void handleAddAllItemButton() {
+
+ List<XViewerColumn> hiddenCols = (List<XViewerColumn>) hiddenColTable.getViewer().getInput();
+
+ List<XViewerColumn> visibleCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput();
+
+ visibleCols.addAll(hiddenCols);
+ visibleColTable.getViewer().setInput(visibleCols);
+
+ hiddenCols.clear();
+ hiddenColTable.getViewer().setInput(hiddenCols);
+
+ updateSortTextField();
+ updateColumnFilterField();
+ }
+
+ @SuppressWarnings("unchecked")
+ private void handleRemoveAllItemButton() {
+
+ List<XViewerColumn> visibleCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput();
+
+ List<XViewerColumn> hiddenCols = (List<XViewerColumn>) hiddenColTable.getViewer().getInput();
+ hiddenCols.addAll(visibleCols);
+ hiddenColTable.getViewer().setInput(hiddenCols);
+
+ // Add to visible
+ visibleCols.clear();
+ visibleColTable.getViewer().setInput(visibleCols);
+
+ updateSortTextField();
+ updateColumnFilterField();
+ }
+
+ @SuppressWarnings("unchecked")
+ private void handleMoveUpButton() {
+ List<XViewerColumn> selCols = getVisibleTableSelection();
+ if (selCols == null) return;
+ List<XViewerColumn> orderCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput();
+ int index = orderCols.indexOf(selCols.iterator().next());
+ if (index > 0) {
+ orderCols.removeAll(selCols);
+ orderCols.addAll(index - 1, selCols);
+ visibleColTable.getViewer().setInput(orderCols);
+ } else
+ return;
+ ArrayList<XViewerColumn> selected = new ArrayList<XViewerColumn>();
+ selected.addAll(selCols);
+ visibleColTable.getViewer().setSelection(new StructuredSelection(selected.toArray(new Object[selected.size()])));
+ visibleColTable.getViewer().getTree().setFocus();
+ updateButtonEnablements();
+ }
+
+ @SuppressWarnings("unchecked")
+ private void handleMoveDownButton() {
+ List<XViewerColumn> selCols = getVisibleTableSelection();
+ if (selCols == null) return;
+ List<XViewerColumn> orderCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput();
+ int index = orderCols.indexOf(selCols.iterator().next());
+ if (index < (orderCols.size() - selCols.size())) {
+ orderCols.removeAll(selCols);
+ orderCols.addAll(index + 1, selCols);
+ visibleColTable.getViewer().setInput(orderCols);
+ } else
+ return;
+ ArrayList<XViewerColumn> selected = new ArrayList<XViewerColumn>();
+ selected.addAll(selCols);
+ visibleColTable.getViewer().setSelection(new StructuredSelection(selected.toArray(new Object[selected.size()])));
+ visibleColTable.getViewer().getTree().setFocus();
+ updateButtonEnablements();
+ }
+
+ /**
+ * @return xColumns from hidden and visible customization lists
+ */
+ private List<XViewerColumn> getConfigCustXViewerColumns() {
+ List<XViewerColumn> xCols = new ArrayList<XViewerColumn>();
+ for (XViewerColumn xCol : getTableXViewerColumns(visibleColTable.getViewer())) {
+ xCol.setShow(true);
+ xCol.setXViewer(xViewerToCustomize);
+ xCols.add(xCol);
+ }
+ for (XViewerColumn xCol : getTableXViewerColumns(hiddenColTable.getViewer())) {
+ xCol.setShow(false);
+ xCol.setXViewer(xViewerToCustomize);
+ xCols.add(xCol);
+ }
+ return xCols;
+ }
+
+ private void handleSaveButton() {
+ try {
+ List<CustomizeData> custDatas = new ArrayList<CustomizeData>();
+ for (CustomizeData custData : xViewerToCustomize.getCustomizeMgr().getSavedCustDatas()) {
+ if (custData.isPersonal())
+ custDatas.add(custData);
+ else if (OseeAts.isAtsAdmin()) custDatas.add(custData);
+ }
+ CustomizationDataSelectionDialog diag = new CustomizationDataSelectionDialog(xViewerToCustomize, custDatas);
+ if (diag.open() == 0) {
+ String name = diag.getEnteredName();
+ try {
+ CustomizeData diagSelectedCustomizeData = diag.getSelectedCustData();
+ String diagEnteredNewName = diag.getEnteredName();
+ CustomizeData custData = getConfigCustomizeCustData();
+ if (diagEnteredNewName != null) {
+ custData.setName(name);
+ // Set currently selected to newly saved custData
+ selectedCustTableCustData = custData;
+ } else {
+ custData.setName(diagSelectedCustomizeData.getName());
+ custData.setGuid(diagSelectedCustomizeData.getGuid());
+ }
+ custData.setPersonal(!diag.isSaveGlobal());
+ xViewerToCustomize.getCustomizeMgr().saveCustomization(custData);
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ loadCustomizeTable();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ private void handleRenameButton() {
+ XViewerColumn xCol = getVisibleTableSelection().iterator().next();
+ EntryDialog ed =
+ new EntryDialog(Display.getCurrent().getActiveShell(), "Rename Column", null, "Enter new name",
+ MessageDialog.QUESTION, new String[] {"OK", "Use Default", "Cancel"}, 0);
+ int result = ed.open();
+ if (result == 2) return;
+ if (result == 0) {
+ xViewerToCustomize.getCustomizeMgr().customizeColumnName(xCol, ed.getEntry());
+ } else if (result == 1) {
+ xViewerToCustomize.getCustomizeMgr().customizeColumnName(xCol, "");
+ }
+ visibleColTable.getViewer().update(xCol, null);
+ }
+
+ /**
+ * @return CustomizeData represented by the configuration area
+ */
+ private CustomizeData getConfigCustomizeCustData() {
+ CustomizeData custData = new CustomizeData();
+ custData.resetGuid();
+ custData.setNameSpace(xViewerToCustomize.getXViewerFactory().getNamespace());
+ custData.getColumnData().setColumns(getConfigCustXViewerColumns());
+ custData.getSortingData().setFromXml(sorterText.getText());
+ custData.getFilterData().setFilterText(filterText.getText());
+ custData.getColumnFilterData().setFromXml(columnFilterText.getText());
+ return custData;
+ }
+
+ private void handleLoadConfigCustButton() {
+ xViewerToCustomize.getCustomizeMgr().loadCustomization(getConfigCustomizeCustData());
+ xViewerToCustomize.refresh();
+ }
+
+ private void handleSetDefaultButton() {
+ try {
+ CustomizeData custData = getCustTableSelection();
+ if (custData.getName().equals(CustomizeManager.TABLE_DEFAULT_LABEL) || custData.getName().equals(
+ CustomizeManager.CURRENT_LABEL)) {
+ if (inWorkbench)
+ AWorkbench.popup("ERROR", "Can't set table default or current as default");
+ else
+ System.err.println("Can't set table default or current as default");
+ return;
+ }
+ if (xViewerToCustomize.getCustomizeMgr().isCustomizationUserDefault(custData)) {
+ if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Remove Default",
+ "Remove \"" + custData.getName() + "\" as default for this table?")) {
+ xViewerToCustomize.getCustomizeMgr().setUserDefaultCustData(custData, false);
+ }
+ } else if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Set Default",
+ "Set \"" + custData.getName() + "\" as default for this table?")) {
+ xViewerToCustomize.getCustomizeMgr().setUserDefaultCustData(custData, true);
+ }
+ loadCustomizeTable();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ private void handleDeleteButton() {
+ try {
+ CustomizeData custSel = getCustTableSelection();
+ if (custSel.getName().equals(CustomizeManager.TABLE_DEFAULT_LABEL) || custSel.getName().equals(
+ CustomizeManager.CURRENT_LABEL)) {
+ if (inWorkbench)
+ AWorkbench.popup("ERROR", "Can't delete defaults.");
+ else
+ System.err.println("Can't delete defaults");
+ return;
+ }
+ if (custSel == null) return;
+ if (!custSel.isPersonal() && !OseeAts.isAtsAdmin()) {
+ AWorkbench.popup("ERROR", "Global Customizations can only be deleted by admin");
+ if (inWorkbench)
+ AWorkbench.popup("ERROR", "Global Customizations can only be deleted by admin");
+ else
+ System.err.println("Global Customizations can only be deleted by admin");
+ return;
+ }
+ if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Delete Customization",
+ "Delete \"" + custSel.getName() + "\" customization?")) {
+ xViewerToCustomize.getCustomizeMgr().deleteCustomization(custSel);
+ loadCustomizeTable();
+ updateButtonEnablements();
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ private void updateButtonEnablements() {
+ CustomizeData custData = getCustTableSelection();
+ setDefaultButton.setEnabled(xViewerToCustomize.getXViewerFactory().getXViewerCustomizations().isCustomizationPersistAvailable() && custTable.getViewer().getTree().isFocusControl() && custData != null && !custData.getName().equals(
+ CustomizeManager.TABLE_DEFAULT_LABEL) && !custData.getName().equals(CustomizeManager.CURRENT_LABEL));
+ if (custTable.getViewer().getTree().isFocusControl() && custData != null) {
+ setDefaultButton.setText(xViewerToCustomize.getCustomizeMgr().isCustomizationUserDefault(custData) ? REMOVE_DEFAULT : SET_AS_DEFAULT);
+ setDefaultButton.getParent().layout();
+ }
+ deleteButton.setEnabled(xViewerToCustomize.getXViewerFactory().getXViewerCustomizations().isCustomizationPersistAvailable() && custTable.getViewer().getTree().isFocusControl() && custData != null);
+ addItemButton.setEnabled(hiddenColTable.getViewer().getTree().isFocusControl() && getHiddenTableSelection() != null);
+ removeItemButton.setEnabled(visibleColTable.getViewer().getTree().isFocusControl() && getVisibleTableSelection() != null);
+ renameButton.setEnabled(visibleColTable.getViewer().getTree().isFocusControl() && getVisibleTableSelection() != null && getVisibleTableSelection().size() == 1);
+ moveDownButton.setEnabled(visibleColTable.getViewer().getTree().isFocusControl() && getVisibleTableSelection() != null);
+ moveUpButton.setEnabled(visibleColTable.getViewer().getTree().isFocusControl() && getVisibleTableSelection() != null);
+ saveButton.setEnabled(xViewerToCustomize.getXViewerFactory().getXViewerCustomizations() != null && xViewerToCustomize.getXViewerFactory().getXViewerCustomizations().isCustomizationPersistAvailable());
+ }
+
+ private void loadCustomizeTable() throws Exception {
+ // Add stored customization data
+ List<CustomizeData> custDatas = xViewerToCustomize.getCustomizeMgr().getSavedCustDatas();
+
+ // Add table default customization data
+ defaultTableCustData = xViewerToCustomize.getCustomizeMgr().getTableDefaultCustData();
+ defaultTableCustData.setName(CustomizeManager.TABLE_DEFAULT_LABEL);
+ custDatas.add(defaultTableCustData);
+
+ // Add current customization data generated from actual table
+ CustomizeData currentCustData = xViewerToCustomize.getCustomizeMgr().generateCustDataFromTable();
+ currentCustData.setName(CustomizeManager.CURRENT_LABEL);
+ custDatas.add(currentCustData);
+
+ custTable.getViewer().setInput(custDatas);
+
+ restoreCustTableSelection();
+
+ // If selection not restored, select default
+ if (getCustTableSelection() == null) {
+ ArrayList<Object> sel = new ArrayList<Object>();
+ sel.add(currentCustData);
+ custTable.getViewer().setSelection(new StructuredSelection(sel.toArray(new Object[sel.size()])));
+ custTable.getViewer().getTree().setFocus();
+ }
+
+ updateSortTextField();
+ updateColumnFilterField();
+ updateButtonEnablements();
+ }
+
+ private CustomizeData getCustTableSelection() {
+ IStructuredSelection selection = (IStructuredSelection) custTable.getViewer().getSelection();
+ if (selection.size() == 0) return null;
+ Iterator<?> i = selection.iterator();
+ CustomizeData storedCustData = (CustomizeData) i.next();
+ return storedCustData;
+ }
+
+ private List<XViewerColumn> getVisibleTableSelection() {
+ return getTableSelection(visibleColTable.getViewer());
+ }
+
+ private List<XViewerColumn> getHiddenTableSelection() {
+ return getTableSelection(hiddenColTable.getViewer());
+ }
+
+ private List<XViewerColumn> getTableSelection(TreeViewer xColTableViewer) {
+ List<XViewerColumn> xCols = new ArrayList<XViewerColumn>();
+ IStructuredSelection selection = (IStructuredSelection) xColTableViewer.getSelection();
+ if (selection.size() == 0) return null;
+ Iterator<?> i = selection.iterator();
+ while (i.hasNext())
+ xCols.add((XViewerColumn) i.next());
+ return xCols;
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<XViewerColumn> getTableXViewerColumns(TreeViewer xColTableViewer) {
+ return (List<XViewerColumn>) xColTableViewer.getInput();
+ }
+
+ private void handleCustTableSelectionChanged() {
+ if (getCustTableSelection() == null) return;
+ CustomizeData custData = getCustTableSelection();
+ if (custData == null) {
+ OSEELog.logException(SkynetGuiPlugin.class, new IllegalStateException("Can't obtain selection Xml"), true);
+ return;
+ }
+
+ List<XViewerColumn> hideXCols = new ArrayList<XViewerColumn>();
+ List<XViewerColumn> showXCols = new ArrayList<XViewerColumn>();
+ for (XViewerColumn xCol : custData.getColumnData().getColumns()) {
+ if (xCol.isShow())
+ showXCols.add(xCol);
+ else
+ hideXCols.add(xCol);
+ }
+
+ hiddenColTable.getViewer().setInput(hideXCols);
+ visibleColTable.getViewer().setInput(showXCols);
+
+ sorterText.setText(custData.getSortingData().getXml());
+ sorterText.setData(custData);
+
+ filterText.setText(custData.getFilterData().getFilterText());
+ filterText.setData(custData);
+
+ columnFilterText.setText(custData.getColumnFilterData().getXml());
+ columnFilterText.setData(custData);
+
+ updateSortTextField();
+ updateColumnFilterField();
+ }
+ private CustomizeData selectedCustTableCustData = null;
+
+ public void storeCustTableSelection() {
+ // Store selected so can re-select after event re-draw
+ if (getCustTableSelection() != null) {
+ selectedCustTableCustData = getCustTableSelection();
+ }
+ // System.out.println("Selection " + selectedCustTableCustData.getName() + " - " + selectedCustTableCustData.getGuid());
+ }
+
+ public void restoreCustTableSelection() {
+ if (selectedCustTableCustData != null) {
+ ArrayList<Object> selected = new ArrayList<Object>();
+ selected.add(selectedCustTableCustData);
+ custTable.getViewer().setSelection(new StructuredSelection(selected.toArray(new Object[selected.size()])));
+ // System.out.println("Restoring " + selectedCustTableCustData.getName() + " - " + selectedCustTableCustData.getGuid());
+ }
+ }
+
+ @Override
+ protected void buttonPressed(int buttonId) {
+ // Ok
+ if (buttonId == 0) {
+ handleLoadConfigCustButton();
+ close();
+ }
+ // Apply
+ else if (buttonId == 1) {
+ handleLoadConfigCustButton();
+ }
+ // Cancel
+ else
+ close();
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/AttributeSortDataType.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/AttributeSortDataType.java
new file mode 100644
index 00000000000..a4924143b52
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/AttributeSortDataType.java
@@ -0,0 +1,31 @@
+/*
+ * Created on Jul 14, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet;
+
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.BooleanAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.DateAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.FloatingPointAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.IntegerAttribute;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn.SortDataType;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class AttributeSortDataType {
+
+ public static SortDataType getSortDataType(AttributeType attributeType) {
+ SortDataType sortType = SortDataType.String;
+ if (attributeType.getBaseAttributeClass().equals(DateAttribute.class))
+ sortType = SortDataType.Date;
+ else if (attributeType.getBaseAttributeClass().equals(FloatingPointAttribute.class))
+ sortType = SortDataType.Float;
+ else if (attributeType.getBaseAttributeClass().equals(IntegerAttribute.class))
+ sortType = SortDataType.Integer;
+ else if (attributeType.getBaseAttributeClass().equals(BooleanAttribute.class)) sortType = SortDataType.Boolean;
+ return sortType;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetCustomizations.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetCustomizations.java
new file mode 100644
index 00000000000..475f216da84
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetCustomizations.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SkynetCustomizations implements IXViewerCustomizations {
+
+ // Artifact that stores shared/global customizations
+ private Artifact globalCustomizationsArtifact;
+ // Collection of all customizations both from local and global storage
+ private final List<CustomizeData> custDatas = new ArrayList<CustomizeData>();
+ // Storage mechanism (user's User Artifact) for storage of selected default customizations guids for each XViewer namespace
+ private final SkynetUserArtifactCustomizeDefaults userArtifactDefaults;
+ // Attribute name for storing customizations both locally and globally
+ private static String CUSTOMIZATION_ATTRIBUTE_NAME = "XViewer Customization";
+ private final SkynetXViewerFactory skynetXViewerFactory;
+
+ public SkynetCustomizations(SkynetXViewerFactory skynetXViewerFactory) throws OseeCoreException {
+ this.skynetXViewerFactory = skynetXViewerFactory;
+ this.userArtifactDefaults = new SkynetUserArtifactCustomizeDefaults(UserManager.getUser());
+ globalCustomizationsArtifact = XViewerCustomizationArtifact.getAtsCustArtifact();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#getCustDatas()
+ */
+ public List<CustomizeData> getSavedCustDatas() throws OseeCoreException {
+ loadCustomizationData();
+ return custDatas;
+ }
+
+ private static void saveCustomization(CustomizeData custData, Artifact saveArt) throws OseeCoreException {
+ boolean found = false;
+ Collection<Attribute<String>> attributes = saveArt.getAttributes(CUSTOMIZATION_ATTRIBUTE_NAME);
+ for (Attribute<String> attribute : attributes) {
+ if (attribute.getDisplayableString().contains("namespace=\"" + custData.getNameSpace() + "\"") && attribute.getDisplayableString().contains(
+ "name=\"" + custData.getName() + "\"")) {
+ attribute.setValue(custData.getXml(true));
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ saveArt.addAttribute(CUSTOMIZATION_ATTRIBUTE_NAME, custData.getXml(true));
+ }
+ saveArt.persistAttributes();
+ }
+
+ public void saveCustomization(CustomizeData custData) throws OseeCoreException {
+ if (custData.isPersonal())
+ saveCustomization(custData, UserManager.getUser());
+ else
+ saveCustomization(custData, globalCustomizationsArtifact);
+ }
+
+ public void loadCustomizationData() throws OseeCoreException {
+ custDatas.clear();
+ User user = UserManager.getUser();
+ if (user != null) custDatas.addAll(getArtifactCustomizations(user));
+ for (CustomizeData custData : custDatas)
+ custData.setPersonal(true);
+ custDatas.addAll(getArtifactCustomizations(getGlobalCustomizationsArtifact()));
+ }
+
+ /**
+ * @return Returns the defaultCustomizationsArtifact.
+ */
+ public Artifact getGlobalCustomizationsArtifact() {
+ return globalCustomizationsArtifact;
+ }
+
+ /**
+ * Artifact that holds default customizations for this XTreeViewer. These will be selectable to everyone, but only
+ * writable to Developer/AtsAdmin. Users will be able to save their own customizations separately. If no defaults are
+ * necessary, don't set this artifact upon creation.
+ *
+ * @param defaultCustomizationsArtifact The defaultCustomizationsArtifact to set.
+ */
+ public void setGlobalCustomizationsArtifact(Artifact defaultCustomizationsArtifact) {
+ this.globalCustomizationsArtifact = defaultCustomizationsArtifact;
+ }
+
+ public void deleteCustomization(CustomizeData custData) throws OseeCoreException {
+ Artifact deleteArt = null;
+ if (custData.isPersonal())
+ deleteArt = UserManager.getUser();
+ else
+ deleteArt = getGlobalCustomizationsArtifact();
+ deleteCustomization(custData, deleteArt);
+ // Remove item as default if set
+ if (userArtifactDefaults.isDefaultCustomization(custData)) {
+ userArtifactDefaults.removeDefaultCustomization(custData);
+ userArtifactDefaults.save();
+ }
+
+ }
+
+ public void deleteCustomization(CustomizeData custData, Artifact deleteArt) throws OseeCoreException {
+ Pattern pattern = Pattern.compile("name=\"(.*?)\".*?namespace=\"" + custData.getNameSpace() + "\"");
+ for (Attribute<?> attribute : deleteArt.getAttributes(CUSTOMIZATION_ATTRIBUTE_NAME)) {
+ String str = attribute.getDisplayableString();
+ Matcher m = pattern.matcher(str);
+ if (m.find() && m.group(1).equals(custData.getName())) {
+ attribute.delete();
+ deleteArt.persistAttributes();
+ break;
+ }
+ }
+ }
+
+ public CustomizeData getUserDefaultCustData() throws OseeCoreException {
+ for (CustomizeData custData : getSavedCustDatas()) {
+ if (userArtifactDefaults.isDefaultCustomization(custData)) {
+ return custData;
+ }
+ }
+ return null;
+ }
+
+ public boolean isCustomizationUserDefault(CustomizeData custData) {
+ try {
+ return (getUserDefaultCustData() != null && getUserDefaultCustData().getGuid().equals(custData.getGuid()));
+ } catch (Exception ex) {
+ return false;
+ }
+ }
+
+ public void setUserDefaultCustData(CustomizeData newCustData, boolean set) throws Exception {
+ // Remove old defaults
+ for (CustomizeData custData : getSavedCustDatas()) {
+ if (userArtifactDefaults.isDefaultCustomization(custData)) {
+ userArtifactDefaults.removeDefaultCustomization(custData);
+ }
+ }
+ // Add new default
+ if (set) userArtifactDefaults.setDefaultCustomization(newCustData);
+ // persist
+ userArtifactDefaults.save();
+ }
+
+ private List<CustomizeData> getArtifactCustomizations(Artifact customizationArtifact) throws OseeCoreException {
+ List<CustomizeData> custDatas = new ArrayList<CustomizeData>();
+ if (customizationArtifact != null) {
+
+ Collection<Attribute<String>> attributes = customizationArtifact.getAttributes(CUSTOMIZATION_ATTRIBUTE_NAME);
+ for (Attribute<String> attr : attributes) {
+ String str = attr.getValue();
+ Matcher m =
+ Pattern.compile("name=\"(.*?)\".*?namespace=\"" + skynetXViewerFactory.getNamespace() + "\"").matcher(
+ str);
+ if (m.find()) {
+ CustomizeData custData = new CustomizeData(str);
+ custDatas.add(custData);
+ }
+ }
+ }
+ return custDatas;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#isCustomizationPersistAvailable()
+ */
+ public boolean isCustomizationPersistAvailable() {
+ return true;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetUserArtifactCustomizeDefaults.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetUserArtifactCustomizeDefaults.java
new file mode 100644
index 00000000000..9b5cc1fbd76
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetUserArtifactCustomizeDefaults.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.db.connection.exception.AttributeDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AXml;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData;
+
+/**
+ * This class provides the functionality necessary to store the user's defaults in their User Artifact
+ *
+ * @author Donald G. Dunne
+ */
+public class SkynetUserArtifactCustomizeDefaults {
+
+ // XViewer.getViewerNamespace, CustomizeData.getName
+ Set<String> defaultGuids = new HashSet<String>();
+ private static String XVIEWER_DEFAULT_ATTRIBUTE = "XViewer Defaults";
+ private static String DEFAULT_CUST_GUID_TAG = "defaultCustGuid";
+ private final User user;
+
+ public SkynetUserArtifactCustomizeDefaults(User user) {
+ this.user = user;
+ loadCustomizeDefaults();
+ }
+
+ public int size() {
+ return defaultGuids.size();
+ }
+
+ private void setDefaultCustomizationsFromXml(String xml) {
+ defaultGuids.clear();
+ Matcher m = Pattern.compile("<" + DEFAULT_CUST_GUID_TAG + ">(.*?)</" + DEFAULT_CUST_GUID_TAG + ">").matcher(xml);
+ while (m.find()) {
+ defaultGuids.add(m.group(1));
+ }
+ }
+
+ public void setDefaultCustomization(CustomizeData custData) {
+ defaultGuids.add(custData.getGuid());
+ }
+
+ public void removeDefaultCustomization(CustomizeData custData) {
+ defaultGuids.remove(custData.getGuid());
+ }
+
+ public boolean isDefaultCustomization(CustomizeData custData) {
+ return defaultGuids.contains(custData.getGuid());
+ }
+
+ private void loadCustomizeDefaults() {
+ String xml = "";
+ if (user != null) {
+ try {
+ xml = user.getSoleAttributeValue(XVIEWER_DEFAULT_ATTRIBUTE);
+ if (xml == null) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, "Invalid null for XViewerDefaults for user " + user);
+ xml = "";
+ }
+ } catch (AttributeDoesNotExist ex) {
+ xml = "";
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ xml = "";
+ }
+ }
+ setDefaultCustomizationsFromXml(xml);
+ }
+
+ public void save() {
+ try {
+ if (defaultGuids.size() == 0) {
+ user.deleteSoleAttribute(XVIEWER_DEFAULT_ATTRIBUTE);
+ } else {
+ user.setSoleAttributeValue(XVIEWER_DEFAULT_ATTRIBUTE, getDefaultCustomizationXml());
+ }
+ user.persistAttributes();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ public Set<String> getGuids() {
+ return defaultGuids;
+ }
+
+ public void setGuids(Collection<String> defaultGuids) {
+ this.defaultGuids.clear();
+ this.defaultGuids.addAll(defaultGuids);
+ }
+
+ private String getDefaultCustomizationXml() {
+ StringBuffer sb = new StringBuffer();
+ for (String guid : defaultGuids)
+ sb.append(AXml.addTagData(DEFAULT_CUST_GUID_TAG, guid));
+ return sb.toString();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizeDefaults#isSaveDefaultsEnabled()
+ */
+ public boolean isSaveDefaultsEnabled() {
+ return user != null;
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetXViewerFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetXViewerFactory.java
new file mode 100644
index 00000000000..874d2cc9d32
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetXViewerFactory.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerFactory;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.XViewerCustomizations;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerArtifactNameColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerAttributeColumn;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SkynetXViewerFactory extends XViewerFactory {
+
+ /**
+ * @param namespace
+ */
+ public SkynetXViewerFactory(String namespace) {
+ super(namespace);
+ }
+
+ private IXViewerCustomizations xViewerCustomizations;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.IXViewerFactory#getXViewerCustomizations()
+ */
+ @Override
+ public IXViewerCustomizations getXViewerCustomizations() {
+ try {
+ if (SkynetGuiPlugin.areOSEEServicesAvailable().isTrue()) {
+ if (xViewerCustomizations == null) {
+ xViewerCustomizations = new SkynetCustomizations(this);
+ }
+ return xViewerCustomizations;
+ }
+ } catch (Throwable ex) {
+ OseeLog.log(SkynetXViewerFactory.class, Level.SEVERE,
+ "Failed to retrieve XViewer customizations from the persistence layer.", ex);
+ }
+ return new XViewerCustomizations();
+ }
+
+ public void registerAllAttributeColumns() {
+ try {
+ registerColumn(getAllAttributeColumns().toArray(new XViewerColumn[AttributeTypeManager.getAllTypes().size()]));
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ public void registerAllAttributeColumnsForArtifacts(Collection<? extends Artifact> artifacts, boolean show) {
+ try {
+ for (XViewerColumn xCol : SkynetXViewerFactory.getAllAttributeColumnsForArtifacts(artifacts)) {
+ xCol.setShow(show);
+ registerColumn(xCol);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ public static List<XViewerColumn> getAllAttributeColumns() throws OseeDataStoreException {
+ List<XViewerColumn> columns = new ArrayList<XViewerColumn>();
+ for (AttributeType attributeType : AttributeTypeManager.getAllTypes()) {
+ columns.add(getAttributeColumn(attributeType));
+ }
+ return columns;
+ }
+
+ public static XViewerColumn getAttributeColumn(AttributeType attributeType) {
+ return new XViewerAttributeColumn("attribute." + attributeType.getName(), attributeType.getName(),
+ attributeType.getName(), 75, SWT.LEFT, false, XViewerAttributeSortDataType.get(attributeType), false, null);
+ }
+
+ /**
+ * @param artifacts
+ * @return columns for attributes valid for at least on of the given artifacts
+ */
+ public static List<XViewerColumn> getAllAttributeColumnsForArtifacts(Collection<? extends Artifact> artifacts) {
+ List<XViewerColumn> columns = new ArrayList<XViewerColumn>();
+ Set<AttributeType> attributeTypes = new HashSet<AttributeType>();
+ try {
+ for (Artifact art : artifacts) {
+ attributeTypes.addAll(art.getAttributeTypes());
+ }
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ Set<String> attrNames = new HashSet<String>();
+ // Add Name first
+ columns.add(new XViewerArtifactNameColumn("Name"));
+ attrNames.add("Name");
+ for (AttributeType attributeType : attributeTypes) {
+ if (!attrNames.contains(attributeType.getName())) {
+ columns.add(getAttributeColumn(attributeType));
+ attrNames.add(attributeType.getName());
+ }
+ }
+ return columns;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/XViewerAttributeSortDataType.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/XViewerAttributeSortDataType.java
new file mode 100644
index 00000000000..848dfbc9406
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/XViewerAttributeSortDataType.java
@@ -0,0 +1,31 @@
+/*
+ * Created on Jul 15, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet;
+
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.BooleanAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.DateAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.FloatingPointAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.IntegerAttribute;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn.SortDataType;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerAttributeSortDataType {
+
+ public static SortDataType get(AttributeType attributeType) {
+ SortDataType sortType = SortDataType.String;
+ if (attributeType.getBaseAttributeClass().equals(DateAttribute.class))
+ sortType = SortDataType.Date;
+ else if (attributeType.getBaseAttributeClass().equals(FloatingPointAttribute.class))
+ sortType = SortDataType.Float;
+ else if (attributeType.getBaseAttributeClass().equals(IntegerAttribute.class))
+ sortType = SortDataType.Integer;
+ else if (attributeType.getBaseAttributeClass().equals(BooleanAttribute.class)) sortType = SortDataType.Boolean;
+ return sortType;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/XViewerCustomizationArtifact.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/XViewerCustomizationArtifact.java
new file mode 100644
index 00000000000..b453b02da34
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/XViewerCustomizationArtifact.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet;
+
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.BasicArtifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+
+/**
+ * This singleton artifact stores the default customizations for ATS XViewers
+ *
+ * @author Donald G. Dunne
+ */
+public class XViewerCustomizationArtifact extends BasicArtifact {
+
+ public static String ARTIFACT_TYPE_NAME = "XViewer Global Customization";
+ public static XViewerCustomizationArtifact xViewerCustomizationArtifact;
+
+ /**
+ * @param parentFactory
+ * @param guid
+ * @param humanReadableId
+ * @param branch
+ */
+ public XViewerCustomizationArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) {
+ super(parentFactory, guid, humanReadableId, branch, artifactType);
+ }
+
+ public static XViewerCustomizationArtifact getAtsCustArtifact() {
+ return getAtsCustArtifactOrCreate(false, null);
+ }
+
+ public static XViewerCustomizationArtifact getAtsCustArtifactOrCreate(boolean create, SkynetTransaction transaction) {
+ if (xViewerCustomizationArtifact == null) {
+ try {
+ Collection<Artifact> arts =
+ ArtifactQuery.getArtifactsFromTypeAndName(ARTIFACT_TYPE_NAME, ARTIFACT_TYPE_NAME,
+ BranchManager.getCommonBranch());
+ if (arts.size() == 1) {
+ xViewerCustomizationArtifact = (XViewerCustomizationArtifact) arts.iterator().next();
+ } else if (arts.size() == 0 && create) {
+ xViewerCustomizationArtifact =
+ (XViewerCustomizationArtifact) ArtifactTypeManager.addArtifact(ARTIFACT_TYPE_NAME,
+ BranchManager.getCommonBranch(), ARTIFACT_TYPE_NAME);
+ xViewerCustomizationArtifact.persistAttributes(transaction);
+ } else if (arts.size() != 1) throw new IllegalArgumentException(
+ "Should only be one " + ARTIFACT_TYPE_NAME + ". Found " + arts.size() + ". ATS not configured in OSEE?.");
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ return xViewerCustomizationArtifact;
+ }
+
+} \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerArtifactNameColumn.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerArtifactNameColumn.java
new file mode 100644
index 00000000000..7dc5b276d1e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerArtifactNameColumn.java
@@ -0,0 +1,49 @@
+/*
+ * Created on Jul 14, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerArtifactNameColumn extends XViewerValueColumn {
+
+ public XViewerArtifactNameColumn(String name) {
+ this("framework.artifact.name." + name, name, 150, SWT.LEFT, true, SortDataType.String, false, null);
+ }
+
+ public XViewerArtifactNameColumn(String id, String name, int width, int align, boolean show, SortDataType sortDataType, boolean multiColumnEditable, String description) {
+ super(id, name, width, align, show, sortDataType, multiColumnEditable, description);
+ }
+
+ /**
+ * XViewer uses copies of column definitions so originals that are registered are not corrupted. Classes extending
+ * XViewerValueColumn MUST extend this constructor so the correct sub-class is created
+ *
+ * @param col
+ */
+ public XViewerArtifactNameColumn copy() {
+ return new XViewerArtifactNameColumn(getId(), getName(), getWidth(), getAlign(), isShow(), getSortDataType(),
+ isMultiColumnEditable(), getDescription());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn#getColumnText(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn)
+ */
+ @Override
+ public String getColumnText(Object element, XViewerColumn column, int columnIndex) throws OseeCoreException {
+ if (element instanceof Artifact) {
+ return ((Artifact) element).getDescriptiveName();
+ }
+ return super.getColumnText(element, column, columnIndex);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerArtifactTypeColumn.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerArtifactTypeColumn.java
new file mode 100644
index 00000000000..0bf039138a6
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerArtifactTypeColumn.java
@@ -0,0 +1,61 @@
+/*
+ * Created on Jul 14, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerArtifactTypeColumn extends XViewerValueColumn {
+
+ public XViewerArtifactTypeColumn(String name) {
+ this("framework.artifact.type." + name, name, 150, SWT.LEFT, true, SortDataType.String, false, "Artifact Type");
+ }
+
+ public XViewerArtifactTypeColumn(String id, String name, int width, int align, boolean show, SortDataType sortDataType, boolean multiColumnEditable, String description) {
+ super(id, name, width, align, show, sortDataType, multiColumnEditable, description);
+ }
+
+ /**
+ * XViewer uses copies of column definitions so originals that are registered are not corrupted. Classes extending
+ * XViewerValueColumn MUST extend this constructor so the correct sub-class is created
+ *
+ * @param col
+ */
+ public XViewerArtifactTypeColumn copy() {
+ return new XViewerArtifactTypeColumn(getId(), getName(), getWidth(), getAlign(), isShow(), getSortDataType(),
+ isMultiColumnEditable(), getDescription());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn#getColumnText(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn)
+ */
+ @Override
+ public String getColumnText(Object element, XViewerColumn column, int columnIndex) throws OseeCoreException {
+ if (element instanceof Artifact) {
+ return ((Artifact) element).getArtifactTypeName();
+ }
+ return super.getColumnText(element, column, columnIndex);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn#getColumnImage(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn)
+ */
+ @Override
+ public Image getColumnImage(Object element, XViewerColumn column, int columnIndex) throws OseeCoreException {
+ if (element instanceof Artifact) {
+ return ((Artifact) element).getImage();
+ }
+ return super.getColumnImage(element, column, columnIndex);
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerAttributeColumn.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerAttributeColumn.java
new file mode 100644
index 00000000000..467013d87c8
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerAttributeColumn.java
@@ -0,0 +1,58 @@
+/*
+ * Created on Jul 14, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.change.Change;
+import org.eclipse.osee.framework.skynet.core.conflict.Conflict;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerAttributeColumn extends XViewerValueColumn {
+
+ private final String attributeTypeName;
+
+ /**
+ * XViewer uses copies of column definitions so originals that are registered are not corrupted. Classes extending
+ * XViewerValueColumn need to extend this constructor to copy extra stored fields
+ *
+ * @param col
+ */
+ public XViewerAttributeColumn copy() {
+ return new XViewerAttributeColumn(getId(), getName(), getAttributeTypeName(), getWidth(), getAlign(), isShow(),
+ getSortDataType(), isMultiColumnEditable(), getDescription());
+ }
+
+ public XViewerAttributeColumn(String id, String name, String attributeTypeName, int width, int align, boolean show, SortDataType sortDataType, boolean multiColumnEditable, String description) {
+ super(id, name, width, align, show, sortDataType, multiColumnEditable, description);
+ this.attributeTypeName = attributeTypeName;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn#getColumnText(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn)
+ */
+ @Override
+ public String getColumnText(Object element, XViewerColumn column, int columnIndex) throws OseeCoreException {
+ if (element instanceof Artifact) {
+ return ((Artifact) element).getAttributesToString(attributeTypeName);
+ }
+ if (element instanceof Change) {
+ return ((Change) element).getArtifact().getAttributesToString(attributeTypeName);
+ }
+ if (element instanceof Conflict) {
+ return ((Conflict) element).getArtifact().getAttributesToString(attributeTypeName);
+ }
+ return super.getColumnText(element, column, columnIndex);
+ }
+
+ public String getAttributeTypeName() {
+ return attributeTypeName;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerGuidColumn.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerGuidColumn.java
new file mode 100644
index 00000000000..32f2de2f3e0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerGuidColumn.java
@@ -0,0 +1,49 @@
+/*
+ * Created on Jul 14, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerGuidColumn extends XViewerValueColumn {
+
+ public XViewerGuidColumn(String name) {
+ this("framework.guid." + name, name, 75, SWT.LEFT, true, SortDataType.String, false, "Globally Unique Identifier");
+ }
+
+ public XViewerGuidColumn(String id, String name, int width, int align, boolean show, SortDataType sortDataType, boolean multiColumnEditable, String description) {
+ super(id, name, width, align, show, sortDataType, multiColumnEditable, description);
+ }
+
+ /**
+ * XViewer uses copies of column definitions so originals that are registered are not corrupted. Classes extending
+ * XViewerValueColumn MUST extend this constructor so the correct sub-class is created
+ *
+ * @param col
+ */
+ public XViewerGuidColumn copy() {
+ return new XViewerGuidColumn(getId(), getName(), getWidth(), getAlign(), isShow(), getSortDataType(),
+ isMultiColumnEditable(), getDescription());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn#getColumnText(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn)
+ */
+ @Override
+ public String getColumnText(Object element, XViewerColumn column, int columnIndex) throws OseeCoreException {
+ if (element instanceof Artifact) {
+ return ((Artifact) element).getGuid();
+ }
+ return "";
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerHridColumn.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerHridColumn.java
new file mode 100644
index 00000000000..a578129245d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/column/XViewerHridColumn.java
@@ -0,0 +1,49 @@
+/*
+ * Created on Jul 14, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerHridColumn extends XViewerValueColumn {
+
+ public XViewerHridColumn(String name) {
+ this("framework.hrid." + name, name, 75, SWT.LEFT, true, SortDataType.String, false, "Human Readable ID");
+ }
+
+ public XViewerHridColumn(String id, String name, int width, int align, boolean show, SortDataType sortDataType, boolean multiColumnEditable, String description) {
+ super(id, name, width, align, show, sortDataType, multiColumnEditable, description);
+ }
+
+ /**
+ * XViewer uses copies of column definitions so originals that are registered are not corrupted. Classes extending
+ * XViewerValueColumn MUST extend this constructor so the correct sub-class is created
+ *
+ * @param col
+ */
+ public XViewerHridColumn copy() {
+ return new XViewerHridColumn(getId(), getName(), getWidth(), getAlign(), isShow(), getSortDataType(),
+ isMultiColumnEditable(), getDescription());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerValueColumn#getColumnText(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn)
+ */
+ @Override
+ public String getColumnText(Object element, XViewerColumn column, int columnIndex) throws OseeCoreException {
+ if (element instanceof Artifact) {
+ return ((Artifact) element).getHumanReadableId();
+ }
+ return "";
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/IXViewerTestTask.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/IXViewerTestTask.java
new file mode 100644
index 00000000000..c9dfd3c002e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/IXViewerTestTask.java
@@ -0,0 +1,34 @@
+/*
+ * Created on Jun 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test;
+
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IXViewerTestTask {
+ public enum RunDb {
+ Production_Db, Test_Db
+ };
+
+ public enum TaskType {
+ Regression, Db_Health, Data_Exchange, Backup
+ }
+
+ public String getStartTime();
+
+ public String getEmailAddress();
+
+ public String getId();
+
+ public TaskType getTaskType();
+
+ public String getDescription();
+
+ public RunDb getRunDb();
+
+ public String getCategory();
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerStyledStringLableProviderTest.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerStyledStringLableProviderTest.java
new file mode 100644
index 00000000000..75eef036d77
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerStyledStringLableProviderTest.java
@@ -0,0 +1,117 @@
+/*
+ * Created on Jun 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test.IXViewerTestTask.RunDb;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test.IXViewerTestTask.TaskType;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerStyledStringLableProviderTest extends XViewer {
+ private Set<IXViewerTestTask> runList = new HashSet<IXViewerTestTask>();
+
+ /**
+ * @param parent
+ * @param style
+ * @param namespace
+ * @param viewerFactory
+ */
+ public XViewerStyledStringLableProviderTest(Composite parent, int style) {
+ super(parent, style, new XViewerTestFactory());
+ }
+
+ public boolean isScheduled(IXViewerTestTask autoRunTask) {
+ return true;
+ }
+
+ public boolean isRun(IXViewerTestTask autoRunTask) {
+ return runList.contains(autoRunTask);
+ }
+
+ public void setRun(IXViewerTestTask autoRunTask, boolean run) {
+ if (run)
+ runList.add(autoRunTask);
+ else
+ runList.remove(autoRunTask);
+ }
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ Display Display_1 = Display.getDefault();
+ Shell Shell_1 = new Shell(Display_1, SWT.SHELL_TRIM);
+ Shell_1.setText("XViewer Styled Text Test");
+ Shell_1.setBounds(0, 0, 1000, 500);
+ Shell_1.setLayout(new GridLayout());
+ Shell_1.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.HORIZONTAL_ALIGN_BEGINNING));
+
+ XViewerStyledStringLableProviderTest xViewerTest = new XViewerStyledStringLableProviderTest(Shell_1, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
+ xViewerTest.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+ xViewerTest.setContentProvider(new XViewerTestContentProvider());
+ xViewerTest.setLabelProvider(new XViewerTestStyledStringLabelProvider(xViewerTest));
+
+ List<Object> tasks = new ArrayList<Object>();
+ for (int x = 0; x < 1; x++) {
+ tasks.addAll(getTestTasks());
+ }
+ System.err.println("Setting Input...");
+ xViewerTest.setInput(tasks);
+ Shell_1.open();
+ while (!Shell_1.isDisposed()) {
+ if (!Display_1.readAndDispatch()) {
+ Display_1.sleep();
+ }
+ }
+
+ Display_1.dispose();
+ }
+
+ private static List<IXViewerTestTask> getTestTasks() {
+ List<IXViewerTestTask> tasks = new ArrayList<IXViewerTestTask>();
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Backup, "org.eclipse.osee.test1", "10:03",
+ "run to test this", "Suite A", "mark@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Data_Exchange, "org.eclipse.osee.test2", "9:22",
+ "run to test that", "Suite B", "john@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Backup, "org.eclipse.osee.test4", "8:23",
+ "in this world", "Suite A", "john@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Backup, "org.eclipse.osee.test3", "23:01",
+ "now is the time", "Suite B", "mike@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Db_Health, "org.eclipse.osee.test5", "7:32",
+ "may be never", "Suite A", "steve@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Data_Exchange, "org.eclipse.osee.test14", "6:11",
+ "how can this solve the problem", "Suite A", "steve@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Backup, "org.eclipse.osee.test6", "5:13",
+ "run to test this", "Suite B", "john@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Db_Health, "org.eclipse.osee.test12", "23:15",
+ "run to test this", "Suite A", "mike@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Backup, "org.eclipse.osee.test13", "4:01",
+ "run to test this", "Suite B", "steve@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Data_Exchange, "org.eclipse.osee.test11", "3:16",
+ "run to test this", "Suite A", "steve@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Backup, "org.eclipse.osee.test10", "5:01",
+ "run to test this", "Suite C", "mike@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Data_Exchange, "org.eclipse.osee.test9", "4:27",
+ "run to test this", "Suite C", "steve@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Regression, "org.eclipse.osee.test7", "2:37",
+ "run to test this", "Suite C", "john@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Db_Health, "org.eclipse.osee.test8", "24:00",
+ "run to test this", "Suite C", "mike@eclipse.com"));
+ return tasks;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTest.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTest.java
new file mode 100644
index 00000000000..a4d4ed585e1
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTest.java
@@ -0,0 +1,139 @@
+/*
+ * Created on Jun 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test.IXViewerTestTask.RunDb;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test.IXViewerTestTask.TaskType;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerTest extends XViewer {
+ private final Set<IXViewerTestTask> runList = new HashSet<IXViewerTestTask>();
+
+ /**
+ * @param parent
+ * @param style
+ * @param namespace
+ * @param viewerFactory
+ */
+ public XViewerTest(Composite parent, int style) {
+ super(parent, style, new XViewerTestFactory());
+ }
+
+ public boolean isScheduled(IXViewerTestTask autoRunTask) {
+ return true;
+ }
+
+ public boolean isRun(IXViewerTestTask autoRunTask) {
+ return runList.contains(autoRunTask);
+ }
+
+ public void setRun(IXViewerTestTask autoRunTask, boolean run) {
+ if (run)
+ runList.add(autoRunTask);
+ else
+ runList.remove(autoRunTask);
+ }
+
+ private static XViewerTest xViewerTest = null;
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ Display Display_1 = Display.getDefault();
+ Shell Shell_1 = new Shell(Display_1, SWT.SHELL_TRIM);
+ Shell_1.setText("XViewer Test");
+ Shell_1.setBounds(0, 0, 1000, 500);
+ Shell_1.setLayout(new GridLayout());
+ Shell_1.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.HORIZONTAL_ALIGN_BEGINNING));
+
+ Label label = new Label(Shell_1, SWT.None);
+ label.setText("Refresh");
+ label.addListener(SWT.MouseUp, new Listener() {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ @Override
+ public void handleEvent(Event event) {
+ List<Object> tasks = new ArrayList<Object>();
+ for (int x = 0; x < 1; x++) {
+ tasks.addAll(getTestTasks());
+ }
+ System.err.println("Refreshing Input...");
+ xViewerTest.setInput(tasks);
+ }
+ });
+
+ xViewerTest = new XViewerTest(Shell_1, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
+ xViewerTest.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+ xViewerTest.setContentProvider(new XViewerTestContentProvider());
+ xViewerTest.setLabelProvider(new XViewerTestLabelProvider(xViewerTest));
+
+ List<Object> tasks = new ArrayList<Object>();
+ for (int x = 0; x < 1; x++) {
+ tasks.addAll(getTestTasks());
+ }
+ System.err.println("Setting Input...");
+ xViewerTest.setInput(tasks);
+ Shell_1.open();
+ while (!Shell_1.isDisposed()) {
+ if (!Display_1.readAndDispatch()) {
+ Display_1.sleep();
+ }
+ }
+
+ Display_1.dispose();
+ }
+
+ private static List<IXViewerTestTask> getTestTasks() {
+ List<IXViewerTestTask> tasks = new ArrayList<IXViewerTestTask>();
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Backup, "org.eclipse.osee.test1", "10:03",
+ "run to test this", "Suite A", "mark@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Data_Exchange, "org.eclipse.osee.test2", "9:22",
+ "run to test that", "Suite B", "john@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Backup, "org.eclipse.osee.test4", "8:23",
+ "in this world", "Suite A", "john@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Backup, "org.eclipse.osee.test3", "23:01",
+ "now is the time", "Suite B", "mike@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Db_Health, "org.eclipse.osee.test5", "7:32",
+ "may be never", "Suite A", "steve@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Data_Exchange, "org.eclipse.osee.test14", "6:11",
+ "how can this solve the problem", "Suite A", "steve@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Backup, "org.eclipse.osee.test6", "5:13",
+ "run to test this", "Suite B", "john@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Db_Health, "org.eclipse.osee.test12", "23:15",
+ "run to test this", "Suite A", "mike@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Backup, "org.eclipse.osee.test13", "4:01",
+ "run to test this", "Suite B", "steve@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Data_Exchange, "org.eclipse.osee.test11", "3:16",
+ "run to test this", "Suite A", "steve@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Backup, "org.eclipse.osee.test10", "5:01",
+ "run to test this", "Suite C", "mike@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Data_Exchange, "org.eclipse.osee.test9", "4:27",
+ "run to test this", "Suite C", "steve@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Production_Db, TaskType.Regression, "org.eclipse.osee.test7", "2:37",
+ "run to test this", "Suite C", "john@eclipse.com"));
+ tasks.add(new XViewerTestTask(RunDb.Test_Db, TaskType.Db_Health, "org.eclipse.osee.test8", "24:00",
+ "run to test this", "Suite C", "mike@eclipse.com"));
+ return tasks;
+ }
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestContentProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestContentProvider.java
new file mode 100644
index 00000000000..8ed7dab01fb
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestContentProvider.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test;
+
+import java.util.Collection;
+import java.util.HashSet;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+public class XViewerTestContentProvider implements ITreeContentProvider {
+
+ protected Collection<IXViewerTestTask> rootSet = new HashSet<IXViewerTestTask>();
+ private static Object[] EMPTY_ARRAY = new Object[0];
+
+ public XViewerTestContentProvider() {
+ super();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Object[]) {
+ return (Object[]) parentElement;
+ }
+ if (parentElement instanceof Collection) {
+ return ((Collection) parentElement).toArray();
+ }
+ return EMPTY_ARRAY;
+ }
+
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ return false;
+ }
+
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof String) return new Object[] {inputElement};
+ return getChildren(inputElement);
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ /**
+ * @return the rootSet
+ */
+ public Collection<IXViewerTestTask> getRootSet() {
+ return rootSet;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestCustomizations.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestCustomizations.java
new file mode 100644
index 00000000000..d7a002af9ae
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestCustomizations.java
@@ -0,0 +1,115 @@
+/*
+ * Created on Jul 22, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.io.MatchFilter;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations;
+
+/**
+ * For testing purposes only, just save customizations as files at C:/UserData
+ *
+ * @author Donald G. Dunne
+ */
+public class XViewerTestCustomizations implements IXViewerCustomizations {
+
+ public XViewerTestCustomizations() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#deleteCustomization(org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData)
+ */
+ @Override
+ public void deleteCustomization(CustomizeData custData) throws Exception {
+ File file = new File(getFilename(custData));
+ if (file.exists()) file.delete();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#getSavedCustDatas()
+ */
+ @Override
+ public List<CustomizeData> getSavedCustDatas() {
+ List<CustomizeData> custDatas = new ArrayList<CustomizeData>();
+ for (String filename : Lib.readListFromDir(new File("C:/UserData/"), new MatchFilter("CustData_.*\\.xml"), true)) {
+ custDatas.add(new CustomizeData(AFile.readFile("C:/UserData/" + filename)));
+ }
+ return custDatas;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#getUserDefaultCustData()
+ */
+ @Override
+ public CustomizeData getUserDefaultCustData() {
+ File file = new File(getDefaultFilename());
+ if (!file.exists()) return null;
+ String defaultGuid = AFile.readFile(file).replaceAll("\\s", "");
+ if (defaultGuid != null) {
+ for (CustomizeData custData : getSavedCustDatas()) {
+ if (custData.getGuid().equals(defaultGuid)) {
+ return custData;
+ }
+ }
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#isCustomizationPersistAvailable()
+ */
+ @Override
+ public boolean isCustomizationPersistAvailable() {
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#isCustomizationUserDefault(org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData)
+ */
+ @Override
+ public boolean isCustomizationUserDefault(CustomizeData custData) {
+ File file = new File(getDefaultFilename());
+ if (!file.exists()) return false;
+ String defaultGuid = AFile.readFile(getDefaultFilename()).replaceAll("\\s", "");
+ return custData.getGuid().equals(defaultGuid);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#saveCustomization(org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData)
+ */
+ @Override
+ public void saveCustomization(CustomizeData custData) throws Exception {
+ AFile.writeFile(getFilename(custData), custData.getXml(true));
+ Thread.sleep(2000);
+ }
+
+ private String getFilename(CustomizeData custData) {
+ return "C:/UserData/CustData_" + custData.getGuid() + ".xml";
+ }
+
+ private String getDefaultFilename() {
+ return "C:/UserData/CustDataUserDefault.txt";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations#setUserDefaultCustData(org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData, boolean)
+ */
+ @Override
+ public void setUserDefaultCustData(CustomizeData newCustData, boolean set) {
+ if (set)
+ AFile.writeFile(getDefaultFilename(), newCustData.getGuid());
+ else {
+ File file = new File(getDefaultFilename());
+ if (file.exists()) file.delete();
+ }
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestFactory.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestFactory.java
new file mode 100644
index 00000000000..d399ac208f5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestFactory.java
@@ -0,0 +1,56 @@
+/*
+ * Created on Jun 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerFactory;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn.SortDataType;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.IXViewerCustomizations;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerTestFactory extends XViewerFactory {
+
+ private static String COLUMN_NAMESPACE = "xviewer.test";
+ public static XViewerColumn Run_Col =
+ new XViewerColumn(COLUMN_NAMESPACE + ".run", "Run", 50, SWT.LEFT, true, SortDataType.String, false, null);
+ public static XViewerColumn Name_Col =
+ new XViewerColumn(COLUMN_NAMESPACE + ".name", "Name", 150, SWT.LEFT, true, SortDataType.String, false, null);
+ public static XViewerColumn Schedule_Time =
+ new XViewerColumn(COLUMN_NAMESPACE + ".startTime", "Start Time", 40, SWT.CENTER, true, SortDataType.String,
+ false, null);
+ public static XViewerColumn Run_Db =
+ new XViewerColumn(COLUMN_NAMESPACE + ".runDb", "Run DB", 80, SWT.LEFT, true, SortDataType.String, false, null);
+ public static XViewerColumn Task_Type =
+ new XViewerColumn(COLUMN_NAMESPACE + ".taskType", "Task Type", 80, SWT.LEFT, true, SortDataType.String, false,
+ null);
+ public static XViewerColumn Category =
+ new XViewerColumn(COLUMN_NAMESPACE + ".category", "Category", 80, SWT.LEFT, false, SortDataType.String, false,
+ null);
+ public static XViewerColumn Notification =
+ new XViewerColumn(COLUMN_NAMESPACE + ".emailResults", "Email Results To", 150, SWT.LEFT, true,
+ SortDataType.String, false, null);
+ public static XViewerColumn Description =
+ new XViewerColumn(COLUMN_NAMESPACE + ".description", "Description", 75, SWT.LEFT, true, SortDataType.String,
+ false, null);
+ public static XViewerColumn Other_Description =
+ new XViewerColumn(COLUMN_NAMESPACE + ".otherDescription", "Other Description", 75, SWT.LEFT, false,
+ SortDataType.String, false, null);
+
+ public XViewerTestFactory() {
+ super("xviewer.test");
+ registerColumn(Run_Col, Name_Col, Schedule_Time, Run_Db, Task_Type, Category, Notification, Description,
+ Other_Description);
+ }
+
+ @Override
+ public IXViewerCustomizations getXViewerCustomizations() {
+ return new XViewerTestCustomizations();
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestLabelProvider.java
new file mode 100644
index 00000000000..234c743e45a
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestLabelProvider.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerLabelProvider;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+public class XViewerTestLabelProvider extends XViewerLabelProvider {
+ Font font = null;
+ private final XViewerTest xViewerTest;
+
+ public XViewerTestLabelProvider(XViewerTest xViewerTest) {
+ super(xViewerTest);
+ this.xViewerTest = xViewerTest;
+ }
+
+ @Override
+ public String getColumnText(Object element, XViewerColumn xCol, int columnIndex) {
+ if (element instanceof String) {
+ if (columnIndex == 1)
+ return (String) element;
+ else
+ return "";
+ }
+ IXViewerTestTask task = ((IXViewerTestTask) element);
+ if (task == null) return "";
+ if (xCol.equals(XViewerTestFactory.Run_Col)) return String.valueOf(xViewerTest.isRun(task));
+ if (xCol.equals(XViewerTestFactory.Name_Col)) return task.getId();
+ if (xCol.equals(XViewerTestFactory.Schedule_Time)) return task.getStartTime();
+ if (xCol.equals(XViewerTestFactory.Run_Db)) return task.getRunDb().name();
+ if (xCol.equals(XViewerTestFactory.Task_Type)) return task.getTaskType().name();
+ if (xCol.equals(XViewerTestFactory.Description)) return task.getDescription();
+ if (xCol.equals(XViewerTestFactory.Category)) return task.getCategory();
+ if (xCol.equals(XViewerTestFactory.Notification)) return task.getEmailAddress();
+ return "unhandled column";
+ }
+
+ public void dispose() {
+ if (font != null) font.dispose();
+ font = null;
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ /**
+ * Allows test to be run as standalone without workbench kickoff.<br>
+ * TODO Add ability to display images when XViewerTest kicked off as Java Application
+ *
+ * @param imageName
+ * @return
+ */
+ private Image getSkynetImages(String imageName) {
+ if (SkynetGuiPlugin.getInstance() != null) return SkynetGuiPlugin.getInstance().getImage(imageName);
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerLabelProvider#getColumnImage(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn)
+ */
+ @Override
+ public Image getColumnImage(Object element, XViewerColumn xCol, int columnIndex) {
+ if (xCol.equals(XViewerTestFactory.Run_Col)) {
+ return xViewerTest.isRun((IXViewerTestTask) element) ? getSkynetImages("chkbox_enabled.gif") : getSkynetImages("chkbox_disabled.gif");
+ }
+ if (xCol.equals(XViewerTestFactory.Name_Col) && xViewerTest.isScheduled((IXViewerTestTask) element)) {
+ return getSkynetImages("clock.gif");
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITableColorProvider#getBackground(java.lang.Object, int)
+ */
+ @Override
+ public Color getBackground(Object element, int columnIndex) {
+ return null;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestStyledStringLabelProvider.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestStyledStringLabelProvider.java
new file mode 100644
index 00000000000..47d8b2d53aa
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestStyledStringLabelProvider.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerStyledTextLabelProvider;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+public class XViewerTestStyledStringLabelProvider extends XViewerStyledTextLabelProvider {
+ Font font = null;
+ private final XViewerStyledStringLableProviderTest xViewerTest;
+
+ public XViewerTestStyledStringLabelProvider(XViewerStyledStringLableProviderTest xViewerTest) {
+ super(xViewerTest);
+ this.xViewerTest = xViewerTest;
+ }
+
+
+
+ public void dispose() {
+ if (font != null) font.dispose();
+ font = null;
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ /**
+ * Allows test to be run as standalone without workbench kickoff.<br>
+ * TODO Add ability to display images when XViewerTest kicked off as Java Application
+ *
+ * @param imageName
+ * @return
+ */
+ private Image getSkynetImages(String imageName) {
+ if (SkynetGuiPlugin.getInstance() != null) return SkynetGuiPlugin.getInstance().getImage(imageName);
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerLabelProvider#getColumnImage(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn)
+ */
+ @Override
+ public Image getColumnImage(Object element, XViewerColumn xCol, int columnIndex) {
+ if (xCol.equals(XViewerTestFactory.Run_Col)) {
+ return xViewerTest.isRun((IXViewerTestTask) element) ? getSkynetImages("chkbox_enabled.gif") : getSkynetImages("chkbox_disabled.gif");
+ }
+ if (xCol.equals(XViewerTestFactory.Name_Col) && xViewerTest.isScheduled((IXViewerTestTask) element)) {
+ return getSkynetImages("clock.gif");
+ }
+ return null;
+ }
+
+/* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerStyledTextLabelProvider#getBackground(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn, int)
+ */
+@Override
+public Color getBackground(Object element, XViewerColumn viewerColumn,
+ int columnIndex) throws OseeCoreException {
+ return null;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerStyledTextLabelProvider#getFont(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn, int)
+ */
+@Override
+public Font getFont(Object element, XViewerColumn viewerColumn, int columnIndex)
+ throws OseeCoreException {
+ return null;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerStyledTextLabelProvider#getForeground(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn, int)
+ */
+@Override
+public Color getForeground(Object element, XViewerColumn viewerColumn,
+ int columnIndex) throws OseeCoreException {
+ return null;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerStyledTextLabelProvider#getStyledText(java.lang.Object, org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn, int)
+ */
+@Override
+public StyledString getStyledText(Object element, XViewerColumn xCol, int columnIndex)
+ throws OseeCoreException {
+ if (element instanceof String) {
+ if (columnIndex == 1)
+ return new StyledString((String) element);
+ else
+ return new StyledString("");
+ }
+ IXViewerTestTask task = ((IXViewerTestTask) element);
+ if (task == null) return new StyledString("");
+ if (xCol.equals(XViewerTestFactory.Run_Col)) return new StyledString(String.valueOf(xViewerTest.isRun(task)),StyledString.COUNTER_STYLER);
+ if (xCol.equals(XViewerTestFactory.Name_Col)) return new StyledString(task.getId(),StyledString.DECORATIONS_STYLER);
+ if (xCol.equals(XViewerTestFactory.Schedule_Time)) return new StyledString(task.getStartTime(),StyledString.QUALIFIER_STYLER);
+ if (xCol.equals(XViewerTestFactory.Run_Db)) return new StyledString(task.getRunDb().name(),StyledString.COUNTER_STYLER);
+ if (xCol.equals(XViewerTestFactory.Task_Type)) return new StyledString(task.getTaskType().name(),StyledString.DECORATIONS_STYLER);
+ if (xCol.equals(XViewerTestFactory.Description)) return new StyledString(task.getDescription(),StyledString.COUNTER_STYLER);
+ if (xCol.equals(XViewerTestFactory.Category)) return new StyledString(task.getCategory(),StyledString.DECORATIONS_STYLER);
+ if (xCol.equals(XViewerTestFactory.Notification)) return new StyledString(task.getEmailAddress(),StyledString.QUALIFIER_STYLER);
+ return new StyledString("unhandled column");
+}
+
+
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestTask.java b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestTask.java
new file mode 100644
index 00000000000..6eea091eee3
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/test/XViewerTestTask.java
@@ -0,0 +1,83 @@
+/*
+ * Created on Jun 28, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.test;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XViewerTestTask implements IXViewerTestTask {
+
+ private final RunDb runDb;
+ private final TaskType taskType;
+ private final String id;
+ private final String startTime;
+ private final String description;
+ private final String category;
+ private final String emailAddress;
+
+ /**
+ *
+ */
+ public XViewerTestTask(RunDb runDb, TaskType taskType, String id, String startTime, String description, String category, String emailAddress) {
+ this.runDb = runDb;
+ this.taskType = taskType;
+ this.id = id;
+ this.startTime = startTime;
+ this.description = description;
+ this.category = category;
+ this.emailAddress = emailAddress;
+ }
+
+ /**
+ * @return the runDb
+ */
+ public RunDb getRunDb() {
+ return runDb;
+ }
+
+ /**
+ * @return the taskType
+ */
+ public TaskType getTaskType() {
+ return taskType;
+ }
+
+ /**
+ * @return the id
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * @return the startTime
+ */
+ public String getStartTime() {
+ return startTime;
+ }
+
+ /**
+ * @return the description
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * @return the category
+ */
+ public String getCategory() {
+ return category;
+ }
+
+ /**
+ * @return the emailAddress
+ */
+ public String getEmailAddress() {
+ return emailAddress;
+ }
+
+}
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/AllWords.txt b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/AllWords.txt
new file mode 100644
index 00000000000..87b4062c121
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/AllWords.txt
@@ -0,0 +1,134689 @@
+AAA
+AAAS
+Aachen
+Aalborg
+Aalesund
+aardvark
+aardvark's
+aardvarks
+aardwolf
+Aargau
+Aarhus
+Aaron
+Aaronic
+AAU
+ab
+abac
+abaca
+aback
+abacterial
+abactinal
+abacus
+abacuses
+abadan
+abaddon
+abaft
+abakan
+abalone
+abalone's
+abalones
+abamp
+abampere
+abandon
+abandoned
+abandonee
+abandoner
+abandoning
+abandonment
+abandonments
+abandons
+abase
+abased
+abasement
+abasements
+abaser
+abases
+abash
+abashed
+abashes
+abashing
+abashment
+abasing
+abate
+abated
+abatement
+abatements
+abater
+abates
+abating
+abatis
+abatises
+abator
+abattoir
+abaxial
+Abba
+abbacy
+Abbado
+abbas
+abbasid
+abbatial
+abbe
+abberations
+abbess
+Abbevillian
+abbey
+abbey's
+Abbeydale
+abbeys
+abbot
+abbot's
+abbots
+Abbott
+Abbott's
+abbreviate
+abbreviated
+abbreviates
+abbreviating
+abbreviation
+abbreviations
+abbreviator
+abcoulomb
+abdias
+abdicable
+abdicate
+abdicated
+abdicates
+abdicating
+abdication
+abdicator
+abdomen
+abdomen's
+abdomens
+abdominal
+abdominally
+abdominous
+abduce
+abduced
+abducens
+abducent
+abducentes
+abducing
+abduct
+abducted
+abducting
+abduction
+abduction's
+abductions
+abductor
+abductor's
+abductors
+abducts
+Abe
+Abe's
+abeam
+abecedarian
+abed
+abednego
+Abel
+Abelard
+Abele
+Abelian
+Abelmosk
+Abelson
+Abelson's
+abeokuta
+aberdare
+Aberdeen
+Aberdeen's
+Abernathy
+Abernathy's
+Abernethy
+aberrance
+aberrancy
+aberrant
+aberrantly
+aberrated
+aberration
+aberrational
+aberrations
+Aberystwyth
+abet
+abetment
+abets
+abetted
+abetter
+abetting
+abettor
+abeyance
+abeyant
+abfarad
+abhenry
+abhor
+abhorred
+abhorrence
+abhorrent
+abhorrently
+abhorrer
+abhorring
+abhors
+abib
+abidance
+abide
+abided
+abider
+abides
+abiding
+abidingly
+Abidjan
+abietic
+Abigail
+Abigail's
+Abilene
+abilene
+Abilene's
+abilities
+ability
+ability's
+abingdon
+abiogenesis
+abiogenetic
+abiogenetical
+abiogenetically
+abiogenist
+abiological
+abiologically
+abiotic
+abiotically
+abirritant
+abirritate
+abject
+abjection
+abjections
+abjectly
+abjectness
+abjuration
+abjure
+abjured
+abjurer
+abjures
+abjuring
+abkhaz
+ablactation
+ablate
+ablated
+ablates
+ablating
+ablation
+ablative
+ablatively
+ablator
+ablaut
+ablaze
+able
+abler
+ablest
+abloom
+abluted
+ablution
+ablutionary
+ablutions
+ably
+abnegate
+abnegates
+abnegation
+abnegator
+Abner
+Abner's
+abnormal
+abnormalities
+abnormality
+abnormalize
+abnormalizes
+abnormally
+aboard
+abode
+abode's
+abodes
+abohm
+aboideau
+aboil
+abolish
+abolishable
+abolished
+abolisher
+abolishers
+abolishes
+abolishing
+abolishment
+abolishment's
+abolishments
+abolition
+abolitionary
+abolitionism
+abolitionist
+abolitionists
+abolitionize
+abolitionizes
+abomasal
+abominable
+abominably
+abominate
+abominated
+abominates
+abominating
+abomination
+abominations
+abominator
+abominators
+aboral
+aborally
+aboriginal
+aboriginally
+aborigine
+aborigine's
+aborigines
+aborning
+abort
+aborted
+aborter
+aborticide
+abortifacient
+aborting
+abortion
+abortion's
+abortionist
+abortionists
+abortions
+abortive
+abortively
+abortiveness
+aborts
+Abos
+aboukir
+aboulia
+abound
+abounded
+abounding
+abounds
+about
+above
+aboveboard
+aboveground
+abovementioned
+abracadabra
+abradable
+abradant
+abrade
+abraded
+abrader
+abrades
+abrading
+Abraham
+Abram
+Abram's
+Abrams
+Abramson
+abranchiate
+abrasion
+abrasion's
+abrasions
+abrasive
+abrasively
+abrasiveness
+abrasives
+Abravanel
+Abraxas
+abreact
+abreaction
+abreaction's
+abreactions
+abreast
+abri
+abridge
+abridged
+abridgement
+abridger
+abridges
+abridging
+abridgment
+abrin
+abroach
+abroad
+abrogate
+abrogated
+abrogates
+abrogating
+abrogation
+abrupt
+abruption
+abruptly
+abruptness
+abruzzi
+Absalom
+abscess
+abscessed
+abscesses
+abscise
+abscised
+abscisin
+abscising
+abscissa
+abscissa's
+abscissae
+abscissas
+abscission
+abscond
+absconded
+absconder
+absconding
+absconds
+abseil
+absence
+absence's
+absences
+absent
+absented
+absentee
+absentee's
+absenteeism
+absentees
+absentia
+absenting
+absently
+absentminded
+absentmindedly
+absentmindedness
+absents
+absinth
+absinthe
+absinthism
+absolute
+absolutely
+absoluteness
+absolutes
+absolution
+absolutism
+absolutist
+absolutistic
+absolutization
+absolutization's
+absolutizations
+absolutize
+absolutizes
+absolve
+absolved
+absolver
+absolves
+absolving
+absonant
+absorb
+absorbability
+absorbable
+absorbance
+absorbancy
+absorbant
+absorbed
+absorbefacient
+absorbency
+absorbent
+absorbent's
+absorbents
+absorber
+absorbing
+absorbingly
+absorbs
+absorbtions
+absorptance
+absorption
+absorption's
+absorptional
+absorptions
+absorptive
+absorptivity
+absquatulate
+abstain
+abstained
+abstainer
+abstaining
+abstains
+abstemious
+abstemiously
+abstention
+abstentions
+abstentious
+abstergent
+abstinence
+abstinent
+abstinently
+abstract
+abstractable
+abstracted
+abstractedly
+abstractedness
+abstracter
+abstracting
+abstraction
+abstraction's
+abstractional
+abstractionism
+abstractionist
+abstractionists
+abstractions
+abstractive
+abstractly
+abstractness
+abstractor
+abstractor's
+abstractors
+abstracts
+abstrict
+abstriction
+abstrictions
+abstruse
+abstrusely
+abstruseness
+abstrusenesses
+abstrusity
+absurd
+absurdism
+absurdist
+absurdities
+absurdity
+absurdity's
+absurdly
+absurdness
+absurdum
+Abu
+abubble
+abuilding
+abukir
+abulia
+abundance
+abundances
+abundant
+abundantly
+abusable
+abuse
+abused
+abuser
+abusers
+abuses
+abusing
+abusive
+abusively
+abusiveness
+abut
+abutilon
+abutment
+abutments
+abuts
+abuttals
+abutted
+abutter
+abutter's
+abutters
+abutting
+abuzz
+abvolt
+abwatt
+aby
+abydos
+abysm
+abysmal
+abysmally
+abyss
+abyss's
+abyssal
+abysses
+Abyssinia
+Abyssinian
+Abyssinians
+AC
+acacia
+academe
+academia
+academic
+academical
+academically
+academician
+academicianship
+academicism
+academics
+academies
+academism
+academy
+academy's
+Acadia
+acajou
+acanthaceous
+acanthine
+acanthocephalan
+acanthoid
+acanthopterygian
+acanthous
+acanthus
+acanthuses
+Acapulco
+acariasis
+acarid
+acaroid
+acarology
+acarpellous
+acarpelous
+acarpous
+Acarus
+acas
+acatalectic
+acaudal
+acaulescence
+acaulescent
+accad
+accede
+acceded
+accedes
+acceding
+accelerando
+accelerate
+accelerated
+accelerates
+accelerating
+acceleratingly
+acceleration
+accelerations
+accelerative
+accelerator
+accelerators
+accelerometer
+accelerometer's
+accelerometers
+accent
+accented
+accenting
+accentless
+accentor
+accents
+accentual
+accentually
+accentuate
+accentuated
+accentuates
+accentuating
+accentuation
+accept
+acceptability
+acceptable
+acceptableness
+acceptably
+acceptance
+acceptance's
+acceptances
+acceptant
+acceptation
+accepted
+acceptedly
+accepter
+accepters
+accepting
+acceptingly
+acceptingness
+acceptive
+acceptor
+acceptor's
+acceptors
+accepts
+access
+accessary
+accessed
+accesses
+accessibility
+accessible
+accessibleness
+accessibly
+accessing
+accession
+accession's
+accessional
+accessions
+accessorial
+accessories
+accessorize
+accessors
+accessory
+accessory's
+acciaccatura
+accidence
+accident
+accident's
+accidental
+accidentalism
+accidentalist
+accidentally
+accidentalness
+accidently
+accidents
+accidie
+accipiter
+accipitrine
+acclaim
+acclaimed
+acclaimer
+acclaiming
+acclaims
+acclamation
+acclimate
+acclimated
+acclimates
+acclimating
+acclimation
+acclimatizable
+acclimatizable's
+acclimatizables
+acclimatization
+acclimatization's
+acclimatizations
+acclimatize
+acclimatized
+acclimatizer
+acclimatizers
+acclimatizes
+acclimatizing
+acclivity
+accolade
+accolades
+accommodate
+accommodated
+accommodates
+accommodating
+accommodatingly
+accommodation
+accommodational
+accommodations
+accommodative
+accommodativeness
+accommodator
+accommodators
+accommodatory
+accompanied
+accompanier
+accompanies
+accompaniment
+accompaniment's
+accompaniments
+accompanist
+accompanist's
+accompanists
+accompany
+accompanying
+accompanyist
+accompanyists
+accomplice
+accomplices
+accomplish
+accomplishable
+accomplished
+accomplisher
+accomplishers
+accomplishes
+accomplishing
+accomplishment
+accomplishment's
+accomplishments
+accord
+accordance
+accordances
+accordant
+accordantly
+accorded
+accorder
+accorders
+according
+accordingly
+accordion
+accordion's
+accordionist
+accordionists
+accordions
+accords
+accost
+accostable
+accosted
+accosting
+accosts
+account
+accountabilities
+accountability
+accountable
+accountableness
+accountably
+accountancy
+accountant
+accountant's
+accountants
+accountantship
+accounted
+accounting
+accountings
+accounts
+accouplement
+accouter
+accoutered
+accoutering
+accouterment
+accouterment's
+accouterments
+accouters
+Accra
+accredit
+accreditable
+accreditation
+accreditations
+accredited
+accrescent
+accrete
+accreted
+accreting
+accretion
+accretion's
+accretionary
+accretions
+accretive
+Accrington
+accruable
+accrual
+accruals
+accrue
+accrued
+accruement
+accrues
+accruing
+acculturate
+acculturated
+acculturates
+acculturating
+acculturation
+acculturational
+acculturationist
+acculturative
+acculturize
+accumbency
+accumbent
+accumulable
+accumulate
+accumulated
+accumulates
+accumulating
+accumulation
+accumulations
+accumulative
+accumulatively
+accumulativeness
+accumulator
+accumulator's
+accumulators
+accuracies
+accuracy
+accurate
+accurately
+accurateness
+accursed
+accursedly
+accursedness
+accurses
+accursing
+accurst
+accusal
+accusation
+accusation's
+accusations
+accusative
+accusatory
+accuse
+accused
+accuser
+accusers
+accuses
+accusing
+accusingly
+accusor
+accustom
+accustomation
+accustomed
+accustomedness
+accustoming
+accustoms
+accutron
+ace
+ace's
+aced
+acedia
+Aceldama
+acellular
+acentric
+acephalous
+acer
+acerate
+acerb
+acerbate
+acerbic
+acerbically
+acerbity
+acerose
+acervate
+acervately
+acervation
+aces
+acescent
+acetabulum
+acetal
+acetaldehyde
+acetamide
+acetaminophen
+acetanilide
+acetate
+acetic
+acetification
+acetifier
+acetify
+acetometer
+acetone
+acetonic
+acetonization
+acetonization's
+acetonizations
+acetonize
+acetonizes
+acetophenetidin
+acetous
+acetum
+acetyl
+acetylate
+acetylation
+acetylative
+acetylcholine
+acetylene
+acetylenic
+acetylide
+acetylsalicylic
+achaea
+Achaean
+Achaemenid
+Achates
+ache
+ached
+achelous
+achene
+Achernar
+acheron
+aches
+acheulian
+achier
+achiest
+achievable
+achieve
+achieved
+achievement
+achievement's
+achievements
+achiever
+achievers
+achieves
+achieving
+Achilles
+achiness
+aching
+achingly
+Achitophel
+achlamydeous
+achlorhydria
+achondrite
+achondroplasia
+achromat
+achromatic
+achromatically
+achromaticity
+achromatin
+achromatism
+achromatization
+achromatize
+achromatized
+achromatizes
+achromatizing
+achromatous
+achromic
+achy
+acicula
+aciculate
+aciculum
+acid
+acidhead
+acidic
+acidiferous
+acidifiable
+acidification
+acidifier
+acidify
+acidimeter
+acidimeter's
+acidimeters
+acidimetric
+acidimetry
+acidities
+acidity
+acidize
+acidizes
+acidly
+acidness
+acidometer
+acidophil
+acidophilus
+acidosis
+acids
+acidulant
+acidulate
+acidulation
+acidulent
+acidulous
+acierate
+acinaciform
+acing
+aciniform
+acinus
+Acis
+ackee
+Ackerman
+Ackley
+acknowledge
+acknowledgeable
+acknowledged
+acknowledgedly
+acknowledger
+acknowledgers
+acknowledges
+acknowledging
+acknowledgment
+acknowledgment's
+acknowledgments
+acl
+aclinic
+ACM
+acme
+acne
+acned
+acnode
+acock
+acol
+acold
+acolyte
+acolytes
+aconcagua
+aconite
+acorn
+acorn's
+acorns
+acotyledon
+acouchi
+acoustic
+acoustical
+acoustically
+acoustician
+acoustics
+acquaint
+acquaintance
+acquaintance's
+acquaintances
+acquaintanceship
+acquainted
+acquainting
+acquaints
+acquiesce
+acquiesced
+acquiescence
+acquiescent
+acquiescently
+acquiesces
+acquiescing
+acquirable
+acquire
+acquired
+acquirement
+acquires
+acquiring
+acquisition
+acquisition's
+acquisitional
+acquisitionist
+acquisitions
+acquisititious
+acquisitive
+acquisitively
+acquisitiveness
+acquit
+acquitment
+acquits
+acquittal
+acquittals
+acquittance
+acquitted
+acquitter
+acquitting
+acre
+acre's
+acreage
+acres
+acrid
+acridine
+acridity
+acridly
+acridness
+acriflavine
+acrilan
+acrimonious
+acrimoniously
+acrimony
+acrobacy
+acrobat
+acrobat's
+acrobatic
+acrobatically
+acrobatics
+acrobats
+acrocarpous
+acrocentric
+acrodont
+acrodrome
+acrogen
+acrolein
+acrolith
+acromegaly
+acromion
+acronym
+acronym's
+acronymic
+acronymically
+acronymize
+acronymizes
+acronyms
+acropetal
+acropetally
+acrophobia
+acrophobic
+acropolis
+acrospire
+across
+acrostic
+acrostical
+acrostically
+acroter
+acrylamide
+acrylate
+acrylic
+acrylonitrile
+acrylyl
+ACS
+act
+acta
+Acta
+actability
+actable
+Actaeon
+acted
+actin
+actinal
+acting
+Actinia
+actinic
+actinide
+actinidin
+actiniform
+actinium
+actinochemistry
+actinoid
+actinolite
+actinomere
+actinometer
+actinometer's
+actinometers
+actinomorphic
+actinomycete
+actinomycin
+actinomycosis
+actinon
+actinopod
+actinotherapy
+actinouranium
+actinozoan
+action
+action's
+actionable
+actionably
+actionize
+actionizes
+actionless
+actions
+Actium
+activate
+activated
+activates
+activating
+activation
+activations
+activator
+activator's
+activators
+active
+actively
+activeness
+activism
+activist
+activist's
+activistic
+activists
+activities
+activity
+activity's
+activize
+activizes
+actomyosin
+Acton
+Acton's
+actor
+actor's
+actorish
+actors
+actress
+actress's
+actresses
+acts
+actual
+actualities
+actuality
+actualization
+actualization's
+actualizations
+actualize
+actualized
+actualizes
+actualizing
+actually
+actuals
+actuarial
+actuarially
+actuaries
+actuary
+actuate
+actuated
+actuates
+actuating
+actuation
+actuator
+actuator's
+actuators
+acuity
+aculeate
+aculeus
+acumen
+acuminate
+acumination
+acupuncture
+acutance
+acute
+acutely
+acuteness
+acuter
+acutest
+acyclic
+acyclical
+acyclically
+acyl
+acylate
+acylated
+acylates
+ad
+Ada
+Ada's
+adactylous
+adage
+adages
+adagio
+adagios
+Adair
+Adair's
+Adam
+adamance
+adamancy
+adamant
+adamantine
+adamantly
+adamawa
+Adamite
+Adams
+adamsite
+Adamson
+adana
+adapt
+adaptability
+adaptable
+adaptably
+adaptaplex
+adaptation
+adaptation's
+adaptational
+adaptationally
+adaptations
+adapted
+adaptedness
+adapter
+adapters
+adapting
+adaption
+adaptitude
+adaptive
+adaptively
+adaptiveness
+adaptivity
+adaptor
+adaptors
+adapts
+Adar
+adaxial
+add
+addable
+Addams
+addax
+added
+addend
+addenda
+addendum
+adder
+adders
+addible
+addict
+addicted
+addicting
+addiction
+addiction's
+addictions
+addictive
+addicts
+adding
+Addington
+Addis
+Addison
+addition
+addition's
+additional
+additionally
+additions
+additive
+additive's
+additively
+additives
+additivity
+addle
+addled
+addlepated
+addles
+addling
+address
+addressability
+addressable
+addressed
+addressee
+addressee's
+addressees
+addresser
+addressers
+addresses
+addressing
+Addressograph
+addressor
+adds
+adduce
+adduced
+adducer
+adduces
+adducible
+adducing
+adduct
+adducted
+adducting
+adduction
+adductive
+adductor
+adducts
+Adelaide
+Adelaide's
+Adele
+Adele's
+Adelia
+Adelia's
+ademption
+Aden
+Aden's
+Adenauer
+adenectomy
+adenine
+adenitis
+adenocarcinoma
+adenohypophysis
+adenoid
+adenoidal
+adenoidectomy
+adenoids
+adenoma
+adenomatous
+adenosine
+adenovirus
+adept
+adeptly
+adeptness
+adepts
+adequacies
+adequacy
+adequate
+adequately
+adequateness
+adhere
+adhered
+adherence
+adherences
+adherend
+adherent
+adherent's
+adherently
+adherents
+adherer
+adherers
+adheres
+adhering
+adhesion
+adhesional
+adhesions
+adhesive
+adhesive's
+adhesively
+adhesiveness
+adhesives
+adhibit
+adiabatic
+adiabatically
+adiabaticlly
+adiaphorism
+adiaphorous
+adiathermancy
+adieu
+adieux
+Adige
+adios
+adipic
+adipocere
+adipose
+adiposity
+Adirondack
+Adirondacks
+adit
+adivasi
+adjacency
+adjacent
+adjacently
+adject
+adjectival
+adjectivally
+adjective
+adjective's
+adjectively
+adjectives
+adjoin
+adjoined
+adjoining
+adjoins
+adjoint
+adjourn
+adjourned
+adjourning
+adjournment
+adjourns
+adjudge
+adjudged
+adjudges
+adjudging
+adjudicate
+adjudicated
+adjudicates
+adjudicating
+adjudication
+adjudication's
+adjudications
+adjudicative
+adjudicator
+adjudicatory
+adjunct
+adjunct's
+adjunction
+adjunctive
+adjunctly
+adjuncts
+adjuration
+adjuratory
+adjure
+adjured
+adjures
+adjuring
+adjust
+adjustability
+adjustable
+adjustably
+adjusted
+adjuster
+adjusters
+adjusting
+adjustive
+adjustment
+adjustment's
+adjustmental
+adjustments
+adjustor
+adjustor's
+adjustors
+adjusts
+adjutancy
+adjutant
+adjutants
+adjuvant
+Adkins
+adle
+Adler
+Adler's
+Adlerian
+adman
+admass
+admeasure
+admeasurement
+admetus
+adminicle
+administer
+administered
+administering
+administerings
+administers
+administrable
+administrant
+administrate
+administrated
+administrates
+administrating
+administration
+administration's
+administrational
+administrationist
+administrations
+administrative
+administratively
+administrator
+administrator's
+administrators
+administratrix
+admirability
+admirable
+admirableness
+admirably
+admiral
+admiral's
+admirals
+admiralty
+admiration
+admirations
+admire
+admired
+admirer
+admirers
+admires
+admiring
+admiringly
+admissibility
+admissible
+admission
+admission's
+admissions
+admissive
+admit
+admits
+admittance
+admitted
+admittedly
+admitter
+admitters
+admitting
+admix
+admixed
+admixes
+admixture
+admonish
+admonished
+admonisher
+admonishes
+admonishing
+admonishingly
+admonishment
+admonishment's
+admonishments
+admonition
+admonition's
+admonitions
+admonitorily
+admonitory
+adnate
+adnominal
+adnoun
+ado
+adobe
+adolescence
+adolescent
+adolescent's
+adolescently
+adolescents
+Adolph
+Adolph's
+Adolphus
+Adonai
+Adonic
+Adonis
+adopt
+adoptability
+adoptable
+adopted
+adoptee
+adoptees
+adopter
+adopters
+adoptianism
+adoptianist
+adopting
+adoption
+adoption's
+adoptionism
+adoptionist
+adoptions
+adoptive
+adoptively
+adopts
+adorability
+adorable
+adorableness
+adorably
+adoration
+adore
+adored
+adorer
+adores
+adoring
+adorn
+adorned
+adorning
+adornment
+adornment's
+adornments
+adorns
+adowa
+adoze
+adposition
+adrastus
+adrenal
+adrenalin
+adrenaline
+adrenalize
+adrenalizes
+adrenally
+adrenergic
+adrenocortical
+Adrian
+Adrian's
+Adriatic
+Adrienne
+Adrienne's
+adrift
+adroit
+adroitly
+adroitness
+ads
+adscititious
+adscription
+adsorb
+adsorbability
+adsorbable
+adsorbate
+adsorbed
+adsorbent
+adsorbing
+adsorbs
+adsorbtion
+adsorption
+adsorptive
+adsorptively
+adsuki
+adularia
+adulate
+adulating
+adulation
+adulations
+adulator
+adulatory
+Adullamite
+adult
+adult's
+adulterant
+adulterate
+adulterated
+adulterates
+adulterating
+adulteration
+adulterator
+adulterer
+adulterer's
+adulterers
+adulteress
+adulteresses
+adulterine
+adulterize
+adulterizes
+adulterous
+adulterously
+adultery
+adulthood
+adultlike
+adultly
+adultness
+adults
+adumbral
+adumbrate
+adumbrated
+adumbrates
+adumbrating
+adumbration
+adumbrative
+adumbratively
+adust
+aduwa
+advance
+advanced
+advancement
+advancement's
+advancements
+advancer
+advancers
+advances
+advancing
+advantage
+advantaged
+advantageous
+advantageously
+advantageousness
+advantages
+advantaging
+advection
+advections
+advective
+advent
+adventist
+adventists
+adventitia
+adventitious
+adventitiously
+adventitiousness
+adventive
+adventively
+adventure
+adventured
+adventurer
+adventurers
+adventures
+adventuresome
+adventuresomeness
+adventuress
+adventuresses
+adventuring
+adventurism
+adventurist
+adventuristic
+adventurists
+adventurous
+adventurously
+adventurousness
+adverb
+adverb's
+adverbial
+adverbialize
+adverbializes
+adverbially
+adverbs
+adversarial
+adversaries
+adversary
+adversary's
+adversative
+adversatively
+adverse
+adversed
+adversely
+adverses
+adversing
+adversities
+adversity
+advert
+adverted
+advertence
+advertency
+advertent
+advertently
+adverting
+advertise
+advertised
+advertisement
+advertisement's
+advertisements
+advertiser
+advertisers
+advertises
+advertising
+adverts
+advice
+advisability
+advisable
+advisableness
+advisably
+advise
+advised
+advisedly
+advisee
+advisee's
+advisees
+advisement
+advisements
+adviser
+adviser's
+advisers
+advises
+advising
+advisor
+advisor's
+advisors
+advisory
+advocacy
+advocate
+advocated
+advocates
+advocating
+advocation
+advocative
+advocator
+Advowson
+adygei
+adynamia
+adynamic
+adytum
+adz
+adze
+adzhar
+adzuki
+aeciospore
+aecium
+Aedes
+aedile
+Aegean
+Aegeus
+Aegina
+aegis
+Aegisthus
+aegospotami
+aegrotat
+Aeneas
+Aeneid
+aeneous
+aeolian
+Aeolic
+Aeolipile
+Aeolis
+aeolotropic
+aeolotropy
+Aeolus
+aeonian
+aeonic
+Aepyornis
+aerate
+aerated
+aerates
+aerating
+aeration
+aerator
+aerators
+aerial
+aerial's
+aerialist
+aerially
+aerials
+aerie
+aerier
+aerily
+aero
+aeroacoustic
+Aerobacter
+aeroballistic
+aeroballistics
+aerobatic
+aerobatics
+aerobe
+aerobic
+aerobically
+aerobics
+aerobiological
+aerobiologically
+aerobiology
+aerobiosis
+aerobiotic
+aerobiotically
+aerodynamic
+aerodynamical
+aerodynamically
+aerodynamicist
+aerodynamics
+aerodyne
+aeroembolism
+aerogene
+aerogenes
+aerogram
+aerogram's
+aerograms
+aerographer
+aerography
+aerolite
+aerolith
+aerolitic
+aerological
+aerologist
+aerology
+aeromagnetic
+aeromechanics
+aeromedical
+aeromedicine
+aerometeorograph
+aerometer
+aerometer's
+aerometers
+aeronaut
+aeronautic
+aeronautical
+aeronautically
+aeronautics
+aeroneurosis
+aeronomer
+aeronomic
+aeronomical
+aeronomics
+aeronomist
+aeropause
+aerosol
+aerosolization
+aerosolize
+aerosolized
+aerosols
+aerospace
+aerosphere
+aerostat
+aerostatics
+aerothermodynamics
+aery
+Aeschines
+Aeschylus
+Aesculapian
+Aesculapius
+Aesir
+Aesop
+aesthesiometer
+aesthesiometer's
+aesthesiometers
+aestheticism
+aestheticize
+aestheticizes
+Aetolia
+afar
+afars
+afeard
+afeared
+afebrile
+affability
+affable
+affably
+affair
+affair's
+affaire
+affaires
+affairs
+affect
+affectability
+affectable
+affectate
+affectation
+affectation's
+affectations
+affected
+affectedly
+affectedness
+affecter
+affecting
+affectingly
+affection
+affection's
+affectional
+affectionally
+affectionate
+affectionately
+affectioned
+affectionless
+affections
+affective
+affectively
+affectivity
+affectless
+affectlessness
+affects
+Affenpinscher
+afferent
+afferently
+affettuoso
+affiance
+affianced
+affiant
+afficionado
+affidavit
+affidavit's
+affidavits
+affiliate
+affiliated
+affiliates
+affiliating
+affiliation
+affiliations
+affine
+affined
+affinely
+affinities
+affinity
+affinity's
+affirm
+affirmable
+affirmance
+affirmation
+affirmation's
+affirmations
+affirmative
+affirmatively
+affirmed
+affirming
+affirms
+affix
+affixable
+affixal
+affixation
+affixed
+affixes
+affixial
+affixing
+affixment
+afflatus
+afflict
+afflicted
+afflicting
+affliction
+affliction's
+afflictions
+afflictive
+afflictively
+afflicts
+affluence
+affluency
+affluent
+affluently
+afflux
+afford
+affordable
+afforded
+affording
+affords
+afforest
+afforestation
+affray
+affreightment
+affricate
+affricates
+affrication
+affricative
+affright
+affront
+affronted
+affronting
+affronts
+affusion
+afghan
+afghani
+Afghani
+Afghani's
+Afghanis
+Afghanistan
+Afghanistan's
+afghans
+aficionada
+aficionado
+aficionados
+afield
+afire
+aflame
+aflatoxin
+afloat
+aflutter
+afoot
+afore
+aforemention
+aforementioned
+aforesaid
+aforethought
+aforetime
+afoul
+afraid
+afreet
+afresh
+Africa
+Africa's
+African
+African's
+Africanism
+Africanist
+Africanization
+Africanization's
+Africanizations
+Africanize
+Africanized
+Africanizes
+Africanizing
+Africans
+afrika
+Afrikaans
+afrikaans
+Afrikander
+Afrikaner
+Afrikanerdom
+Afrikanerization
+Afrikanerize
+Afrikanerized
+Afrikanerizes
+Afrikanerizing
+afrit
+afro
+afrormosia
+aft
+after
+afterbirth
+afterbody
+afterbrain
+afterburner
+afterburners
+afterburning
+aftercare
+afterclap
+afterdamp
+afterdeck
+aftereffect
+aftereffects
+afterglow
+afterheat
+afterimage
+afterlife
+aftermath
+aftermost
+afternoon
+afternoon's
+afternoons
+afterpains
+afterpiece
+afters
+aftersensation
+aftershaft
+aftershave
+aftershock
+aftershock's
+aftershocks
+aftertaste
+aftertax
+afterthought
+afterthoughts
+aftertime
+afterward
+afterwards
+afterword
+afterworld
+aga
+agadir
+again
+against
+agalloch
+Agama
+Agamemnon
+agamete
+agamic
+agamically
+agamogenesis
+Agapanthus
+agape
+agapeic
+agapeically
+agar
+agaric
+agartala
+agate
+agates
+agateware
+Agatha
+agatize
+agatizes
+agave
+agaze
+age
+aged
+agedly
+agedness
+Agee
+Agee's
+agegroup
+ageing
+ageless
+agelessly
+agelessness
+agelong
+agencies
+agency
+agency's
+agenda
+agenda's
+agendaless
+agendas
+agendum
+agene
+agenesis
+agenize
+agent
+agent's
+agentive
+agentry
+agents
+ager
+Ageratum
+agers
+ages
+Aggie
+aggie
+aggies
+Aggies
+agglomerate
+agglomerated
+agglomerates
+agglomeration
+agglomerative
+agglutinability
+agglutinate
+agglutinated
+agglutinates
+agglutinating
+agglutination
+agglutinative
+agglutinin
+agglutinins
+agglutinogen
+agglutinogenic
+aggradation
+aggrade
+aggrandizable
+aggrandizable's
+aggrandizables
+aggrandization
+aggrandize
+aggrandized
+aggrandizement
+aggrandizement's
+aggrandizements
+aggrandizer
+aggrandizers
+aggrandizes
+aggrandizing
+aggravate
+aggravated
+aggravates
+aggravating
+aggravation
+aggravations
+aggregate
+aggregated
+aggregately
+aggregateness
+aggregates
+aggregating
+aggregation
+aggregational
+aggregations
+aggregative
+aggregatively
+aggress
+aggression
+aggression's
+aggressions
+aggressive
+aggressively
+aggressiveness
+aggressivity
+aggressor
+aggressors
+aggrieve
+aggrieved
+aggrievedly
+aggrieves
+aggrieving
+aggro
+agha
+aghast
+agile
+agilely
+agility
+Agincourt
+aging
+agio
+agios
+agiotage
+agist
+agitate
+agitated
+agitatedly
+agitates
+agitating
+agitation
+agitational
+agitations
+agitative
+agitato
+agitator
+agitator's
+agitators
+agitprop
+Aglaia
+aglare
+agleam
+aglet
+agley
+aglimmer
+aglitter
+aglow
+agma
+agminate
+agnail
+agnate
+agnatic
+agnatically
+agnation
+Agnes
+Agnew
+Agnew's
+agni
+agnize
+agnized
+agnizes
+agnizing
+agnomen
+agnostic
+agnostic's
+agnosticism
+agnostics
+agnus
+ago
+agog
+agon
+agone
+agonic
+agonies
+agonist
+agonistic
+agonistical
+agonistically
+agonists
+agonize
+agonized
+agonizedlies
+agonizedly
+agonizer
+agonizers
+agonizes
+agonizing
+agonizingly
+agony
+agora
+agoraphobia
+agoraphobic
+Agostini
+agouti
+Agra
+agraffe
+agram
+agranulocytosis
+Agrapha
+agraphia
+agrarian
+agrarianism
+agrarianize
+agrarianizes
+agree
+agreeability
+agreeable
+agreeableness
+agreeably
+agreed
+agreeing
+agreement
+agreement's
+agreements
+agreer
+agreers
+agrees
+agrestal
+agrestic
+agribusiness
+Agricola
+agricultural
+agriculturalist
+agriculturalists
+agriculturally
+agriculture
+agriculturist
+agrigento
+agrimony
+agriology
+Agrippa
+agrippina
+agrobiological
+agrobiologically
+agrobiology
+agrologic
+agrological
+agrologically
+agrologist
+agrology
+agronomic
+agronomical
+agronomically
+agronomics
+agronomist
+agronomy
+agrose
+agrostology
+aground
+agrypnotic
+Aguascalientes
+ague
+agueweed
+aguish
+aguishly
+agulhas
+Agway
+ah
+aha
+ahab
+Ahasuerus
+ahead
+ahem
+ahimsa
+ahistoric
+ahistorical
+ahithophel
+Ahmedabad
+Ahmednagar
+ahold
+ahoy
+Ahriman
+ahura
+Ahvenanmaa
+Ahwaz
+AI
+aid
+Aida
+Aida's
+Aidan
+aide
+aided
+aider
+aides
+Aidin
+aiding
+aidman
+aids
+aiglet
+aigrette
+aiguille
+aiguillette
+Aiken
+Aiken's
+aikido
+aikona
+ail
+ailanthus
+aile
+ailed
+Aileen
+aileron
+ailerons
+ailing
+ailment
+ailment's
+ailments
+ails
+ailurophile
+ailurophobe
+aim
+aimed
+aimer
+aimers
+aiming
+aimless
+aimlessly
+aimlessness
+aims
+ain
+ain't
+aintab
+Ainu
+air
+airbag
+airbag's
+airbags
+airboat
+airborne
+airbrick
+airbrush
+airburst
+airbus
+aircraft
+aircraftman
+aircrafts
+aircrew
+airdrie
+airdrome
+airdrop
+airdrops
+aire
+aired
+Airedale
+Airedale's
+airer
+airers
+Aires
+airfare
+airfield
+airfield's
+airfields
+airflow
+airfoil
+airfoils
+airforce
+airframe
+airframe's
+airframes
+airfreight
+airglow
+airgun
+airhead
+airier
+airiest
+airily
+airiness
+airing
+airings
+airless
+airlessness
+airlift
+airlift's
+airlifts
+airline
+airline's
+airliner
+airliner's
+airliners
+airlines
+airlock
+airlock's
+airlocks
+airmail
+airmails
+airman
+airmanship
+airmass
+airmen
+airmobile
+airpark
+airplane
+airplane's
+airplanes
+airplay
+airport
+airport's
+airports
+airpost
+airs
+airscrew
+airship
+airship's
+airships
+airsick
+airsickness
+airspace
+airspeed
+airspeeds
+airstream
+airstrip
+airstrip's
+airstrips
+airt
+airtight
+airtightness
+airwave
+airwaves
+airway
+airway's
+airways
+airworthiness
+airworthy
+airy
+aisha
+aisle
+aisles
+aisne
+ait
+aitch
+aitchbone
+Aitken
+Aitken's
+ajaccio
+ajar
+Ajax
+ajmer
+AK
+AKA
+Akan
+akbar
+akela
+akene
+Akers
+akhara
+akhenaten
+Akhmatova
+akihito
+akimbo
+akin
+Akkad
+Akkadian
+akkerman
+Akmolinsk
+Akron
+aksum
+Aktyubinsk
+akure
+akvavit
+Al
+AL
+Al's
+ala
+Alabama
+Alabama's
+Alabamans
+Alabamian
+Alabamian's
+alabaster
+alabastrine
+alack
+alacritous
+alacrity
+Aladdin
+alagez
+alagoas
+alai
+Alameda
+Alamein
+Alamo
+alamode
+alamogordo
+Alamos
+Alan
+Alan's
+alanbrooke
+alanine
+alannah
+alap
+alar
+Alaric
+alarm
+alarmed
+alarming
+alarmingly
+alarmism
+alarmist
+alarms
+alary
+alas
+Alaska
+Alaska's
+Alastair
+alate
+alated
+alation
+alb
+alba
+albacete
+albacore
+Albania
+Albania's
+Albanian
+Albanian's
+Albanians
+Albany
+albata
+albatross
+albedo
+albeit
+albemarle
+Alberich
+Albert
+Alberta
+alberti
+albertite
+Alberto
+albertus
+albescent
+Albi
+Albigenses
+albinic
+albinism
+albino
+Albinoni
+albinotic
+albinus
+Albion
+albite
+Alboin
+Albrecht
+Albrecht's
+Albright
+Albright's
+album
+albumen
+albumenization
+albumenize
+albumenized
+albumenizes
+albumenizing
+albumin
+albuminate
+albuminization
+albuminization's
+albuminizations
+albuminize
+albuminizes
+albuminoid
+albuminous
+albuminuria
+albumose
+albums
+Albuquerque
+alburnum
+Albury
+alcaeus
+alcahest
+alcaic
+alcaide
+alcalde
+alcan
+alcatraz
+alcazar
+Alcestis
+alchemic
+alchemical
+alchemically
+alchemist
+alchemistic
+alchemistical
+alchemize
+alchemy
+alcheringa
+Alcibiades
+alcidine
+Alcman
+Alcmena
+alcmene
+Alcoa
+Alcock
+alcohol
+alcohol's
+alcoholic
+alcoholic's
+alcoholically
+alcoholicity
+alcoholics
+alcoholism
+alcoholisms
+alcoholizable
+alcoholizable's
+alcoholizables
+alcoholization
+alcoholization's
+alcoholizations
+alcoholize
+alcoholizes
+alcoholometer
+alcoholometer's
+alcoholometers
+alcoholometry
+alcohols
+Alcoran
+Alcott
+Alcott's
+alcove
+alcove's
+alcoved
+alcoves
+alcuin
+Alcyone
+aldabra
+aldan
+Aldebaran
+aldehyde
+Alden
+Alden's
+alder
+alderman
+alderman's
+aldermanic
+Aldermaston
+aldermen
+Alderney
+aldershot
+Aldine
+aldis
+aldol
+aldosterone
+aldoxime
+Aldrich
+Aldrich's
+aldrin
+Aldus
+ale
+aleatoric
+aleatory
+Alec
+Aleck
+alecost
+alecto
+alee
+alegar
+alehouse
+alekhine
+Aleksandropol
+Aleksandrovsk
+Alemanni
+Alemannic
+alembic
+alembicated
+aleph
+Aleppo
+Aler
+alert
+alerted
+alertedly
+alerter
+alerters
+alerting
+alertly
+alertness
+alerts
+alessandria
+alethic
+aleurone
+Aleut
+Aleutian
+alevin
+alewife
+Alex
+Alexander
+Alexanders
+Alexandra
+Alexandre
+alexandretta
+Alexandria
+Alexandrian
+alexandrine
+alexandrite
+Alexei
+Alexei's
+alexia
+alexipharmic
+Alexis
+Alexius
+Alfa
+alfa
+alfalfa
+alfieri
+alfilaria
+Alfonso
+Alfonso's
+alforja
+Alfred
+Alfred's
+Alfredo
+Alfredo's
+alfresco
+alga
+algae
+algaecide
+algal
+algarroba
+algebra
+algebra's
+algebraic
+algebraical
+algebraically
+algebraist
+algebraization
+algebraization's
+algebraizations
+algebraize
+algebraizes
+algebras
+algeciras
+Algenib
+Alger
+Alger's
+Algeria
+Algeria's
+Algerian
+Algerian's
+Algerine
+algicidal
+algicide
+algid
+algidity
+Algiers
+algin
+alginate
+alginates
+alginic
+algoid
+Algol
+Algol's
+algolagnia
+algology
+algometer
+Algonkian
+Algonquian
+Algonquin
+Algonquin's
+algophobia
+algor
+algorism
+algorithm
+algorithm's
+algorithmic
+algorithmically
+algorithms
+Alhambra
+Ali
+alia
+alias
+aliased
+aliases
+aliasing
+alibi
+alibi's
+alibis
+alible
+alicante
+Alice
+Alicia
+alicyclic
+alidade
+alien
+alien's
+alienability
+alienable
+alienage
+alienate
+alienated
+alienates
+alienating
+alienation
+alienator
+alienee
+alienism
+alienist
+alienize
+alienizes
+alienor
+aliens
+aliform
+aligarh
+alight
+alighted
+alighting
+alightment
+align
+aligned
+aligner
+aligning
+alignment
+alignments
+aligns
+alike
+alikeness
+aliment
+alimentary
+alimentation
+alimentative
+aliments
+alimony
+aline
+alinement
+aliped
+aliphatic
+aliquot
+aliquot's
+aliquots
+Alison
+Alison's
+Alistair
+alit
+aliunde
+alive
+aliveness
+alizarin
+alk
+alkahest
+alkahestic
+alkalescence
+alkalescent
+alkali
+alkali's
+alkalic
+alkalify
+alkalimeter
+alkalimeter's
+alkalimeters
+alkalimetry
+alkaline
+alkalinity
+alkalinization
+alkalinization's
+alkalinizations
+alkalinize
+alkalinizes
+alkalis
+alkalization
+alkalize
+alkalized
+alkalizes
+alkalizing
+alkaloid
+alkaloid's
+alkaloidal
+alkaloids
+alkalosis
+alkane
+alkene
+alkmaar
+Alkoran
+alky
+alkyd
+alkyl
+alkylation
+alkyne
+all
+alla
+Allah
+Allah's
+Allahabad
+Allan
+allan
+allanite
+allantoid
+allantois
+allargando
+allay
+allayed
+allaying
+allays
+allegate
+allegation
+allegation's
+allegations
+allege
+alleged
+allegedly
+alleges
+Alleghenies
+Allegheny
+allegiance
+allegiance's
+allegiances
+allegiant
+alleging
+allegoric
+allegorical
+allegorically
+allegoricalness
+allegories
+allegorist
+allegorization
+allegorize
+allegorized
+allegorizer
+allegorizes
+allegorizing
+allegory
+allegory's
+Allegra
+allegretto
+allegretto's
+allegrettos
+allegro
+allegro's
+allegros
+allele
+alleles
+allelic
+allelism
+allelomorph
+alleluia
+allemand
+allemande
+Allen
+Allenby
+Allendale
+Allende
+Allentown
+alleppey
+allergen
+allergenic
+allergic
+allergies
+allergist
+allergy
+allergy's
+allery
+allethrin
+alleviate
+alleviated
+alleviates
+alleviating
+alleviation
+alleviative
+alleviator
+alleviator's
+alleviators
+alleviatory
+alley
+alley's
+alleys
+alleyway
+alleyway's
+alleyways
+allhallows
+Allhallowtide
+allheal
+alliaceous
+alliance
+alliance's
+alliances
+allied
+allier
+allies
+alligator
+alligator's
+alligatored
+alligators
+Allis
+Allison
+alliterate
+alliterated
+alliterates
+alliterating
+alliteration
+alliteration's
+alliterations
+alliterative
+alliteratively
+allium
+alloa
+allocable
+allocatable
+allocate
+allocated
+allocates
+allocating
+allocation
+allocation's
+allocations
+allocative
+allocator
+allocator's
+allocators
+allocution
+allodial
+allodium
+allogamous
+allogamy
+allogeneic
+allograft
+allograph
+allographic
+allomerism
+allomerous
+allometric
+allometry
+allomorph
+allomorphic
+allomorphism
+allonge
+allons
+allonym
+allopath
+allopathic
+allopathically
+allopathy
+allopatric
+allopatrically
+allopatry
+allophane
+allophone
+allophones
+allophonic
+alloplasm
+allopurinol
+allosteric
+allosterically
+allot
+alloted
+allotee
+allotment
+allotment's
+allotments
+allotransplant
+allotransplantation
+allotrope
+allotropic
+allotropically
+allotropy
+allots
+allotted
+allottee
+allottees
+allotter
+allotting
+allotts
+allotype
+allotypic
+allotypically
+allotypy
+allover
+allow
+allowable
+allowableness
+allowably
+allowance
+allowance's
+allowanced
+allowances
+allowancing
+allowed
+allowedly
+allowing
+allows
+alloy
+alloy's
+alloyed
+alloying
+alloys
+allseed
+allspice
+Allstate
+allude
+alluded
+alludes
+alluding
+allure
+allured
+allurement
+allures
+alluring
+allusion
+allusion's
+allusions
+allusive
+allusively
+allusiveness
+alluvial
+alluvion
+alluvium
+ally
+allying
+allyl
+allylic
+Allyn
+Allyn's
+allyou
+alma
+almada
+Almaden
+Almaden's
+almagest
+almanac
+almanac's
+almanacs
+almandine
+almandite
+Almeida
+almelo
+almemar
+almightiness
+almighty
+Almohade
+almond
+almond's
+almonds
+almoner
+almonry
+Almoravide
+almost
+alms
+almsgiver
+almsgiving
+almshouse
+almshouses
+almsman
+almucantar
+almuce
+alnico
+alodium
+aloe
+aloes
+aloft
+alogical
+alogically
+aloha
+aloin
+alone
+aloneness
+along
+alongshore
+alongside
+aloof
+aloofly
+aloofness
+alopecia
+alost
+aloud
+alow
+alp
+alpaca
+alpenglow
+alpenhorn
+alpenstock
+Alpert
+Alpert's
+alpes
+alpestrine
+alpha
+alphabet
+alphabet's
+alphabetic
+alphabetical
+alphabetically
+alphabetics
+alphabetization
+alphabetization's
+alphabetizations
+alphabetize
+alphabetized
+alphabetizer
+alphabetizers
+alphabetizes
+alphabetizing
+alphabets
+alphameric
+alphamerical
+alphamerics
+alphanumeric
+alphanumerical
+alphanumerically
+alphanumerics
+alphatically
+Alpheratz
+alpheus
+Alphonse
+Alphonse's
+alphonsus
+alphorn
+alphosis
+alpine
+alpinism
+alpinist
+alps
+already
+alright
+alsace
+Alsatia
+Alsatian
+Alsatians
+alsike
+also
+Alsop
+Alsop's
+alt
+Altaic
+Altair
+Altair's
+Altamira
+altar
+altar's
+altarpiece
+altars
+altazimuth
+altdorf
+altdorfer
+alter
+alterability
+alterable
+alterably
+alterate
+alteration
+alteration's
+alterations
+alterative
+altercate
+altercation
+altercation's
+altercations
+altered
+alterer
+alterers
+altering
+alterman
+altern
+alternant
+alternate
+alternated
+alternately
+alternates
+alternating
+alternation
+alternations
+alternative
+alternatively
+alternativeness
+alternatives
+alternator
+alternator's
+alternators
+alternize
+alternizes
+alters
+althea
+althing
+altho
+althorn
+although
+altimeter
+altimeter's
+altimeters
+altimetry
+altiplano
+altissimo
+altitude
+altitudes
+altitudinal
+altitudinous
+alto
+alto's
+altocumulus
+altogether
+altogther
+Alton
+Alton's
+altona
+altos
+altostratus
+altricial
+Altrincham
+altruism
+altruist
+altruistic
+altruistically
+altruists
+ALU
+aludel
+alula
+alum
+alumina
+aluminate
+aluminiferous
+aluminization
+aluminize
+aluminized
+aluminizes
+aluminizing
+aluminosilicate
+aluminothermy
+aluminous
+aluminum
+aluminum's
+aluminums
+alumna
+alumna's
+alumnae
+alumni
+alumnus
+alumroot
+alundum
+alunite
+Alva
+Alva's
+Alvarez
+alveolar
+alveolarly
+alveolate
+alveolation
+alveoli
+alveolus
+alvey
+Alvin
+alvine
+alway
+always
+Alyssa
+Alyssa's
+alyssum
+alytical
+am
+AMA
+amadavat
+Amadeus
+amadou
+amagasaki
+amah
+amain
+amalekite
+amalgam
+amalgam's
+amalgamate
+amalgamated
+amalgamates
+amalgamating
+amalgamation
+amalgamations
+amalgamative
+amalgamatize
+amalgamatizes
+amalgamator
+amalgamization
+amalgamization's
+amalgamizations
+amalgamize
+amalgamizes
+amalgams
+amalthea
+Amanda
+Amanda's
+amanita
+amanuenses
+amanuensis
+amaranth
+amaranthaceous
+amaranthine
+amarelle
+Amarillo
+Amarillo's
+amaryllidaceous
+Amaryllis
+amass
+amassed
+amasser
+amasses
+amassing
+amassment
+amateur
+amateur's
+amateurish
+amateurishly
+amateurishness
+amateurism
+amateurs
+Amati
+amative
+amatively
+amativeness
+amatol
+amatory
+amaurosis
+amaurotic
+amaut
+amaze
+amazed
+amazedly
+amazement
+amazer
+amazers
+amazes
+amazing
+amazingly
+amazon
+amazon's
+amazonas
+amazonite
+amazons
+ambage
+ambages
+ambagious
+ambala
+ambary
+ambassador
+ambassador's
+ambassadorial
+ambassadors
+ambassadorship
+ambassadress
+amber
+ambergris
+amberjack
+amberoid
+ambiance
+ambiances
+ambidexterity
+ambidextrous
+ambidextrously
+ambience
+ambiences
+ambient
+ambiguities
+ambiguity
+ambiguity's
+ambiguous
+ambiguously
+ambiguousness
+ambit
+ambition
+ambition's
+ambitionless
+ambitions
+ambitious
+ambitiously
+ambitiousness
+ambivalence
+ambivalent
+ambivalently
+ambiversion
+ambiversive
+ambivert
+amble
+ambled
+ambler
+ambles
+ambling
+amblygonite
+amblyopia
+ambo
+amboceptor
+Amboina
+amboise
+amboyna
+ambroid
+ambrose
+ambrosia
+ambrosial
+ambrosially
+Ambrosian
+ambrotype
+ambry
+ambsace
+ambulacral
+ambulacrum
+ambulance
+ambulance's
+ambulances
+ambulant
+ambulate
+ambulation
+ambulatorily
+ambulatory
+ambuscade
+ambuscader
+ambush
+ambushed
+ambusher
+ambushes
+ambushment
+Amdahl
+amdahl
+Amdahl's
+ameba
+ameer
+Amelia
+Amelia's
+Ameling
+ameliorate
+ameliorated
+ameliorating
+amelioration
+ameliorative
+ameliorator
+amelioratory
+amen
+amenabilities
+amenability
+amenable
+amenably
+amend
+amendable
+amendatory
+amende
+amended
+amender
+amending
+amendment
+amendment's
+amendments
+amends
+amenhotep
+amenities
+amenity
+amenorrhea
+ament
+amentia
+Amerada
+amerce
+amercement
+amerciable
+amercing
+America
+America's
+American
+American's
+Americana
+Americanism
+Americanist
+Americanization
+Americanization's
+Americanizations
+Americanize
+americanized
+Americanizer
+Americanizers
+Americanizes
+Americanizing
+Americans
+Americas
+americium
+Amerigo
+Amerindian
+Amersfoort
+Ames
+amesace
+Ameslan
+amethyst
+amethystine
+ametropia
+ametropic
+Amfortas
+amhara
+amharic
+Amharic
+Amherst
+Amherst's
+ami
+amiability
+amiable
+amiableness
+amiabler
+amiablest
+amiably
+amianthus
+amicability
+amicable
+amicableness
+amicably
+amice
+amicus
+amid
+amide
+amidol
+amidship
+amidships
+amidst
+amiens
+amigo
+amin
+amine
+amino
+aminobenzoic
+aminophenol
+aminopyridine
+aminopyrine
+amir
+amis
+Amish
+amiss
+amitosis
+amitotic
+amitotically
+amitrole
+amity
+Amman
+ammendment
+ammendments
+Ammerman
+Ammerman's
+ammeter
+ammeter's
+ammeters
+ammine
+ammino
+ammo
+ammocoete
+ammon
+ammonal
+ammonate
+ammonia
+ammoniac
+ammoniacal
+ammonias
+ammoniate
+ammoniation
+ammonic
+ammonification
+ammonifier
+ammonify
+ammonite
+Ammonites
+ammonites
+ammonitic
+ammonium
+ammonoid
+ammunition
+ammunitions
+amnesia
+amnesiac
+amnesic
+amnestic
+amnesty
+amnia
+amniocentesis
+amnion
+amniote
+amniotic
+Amoco
+Amoco's
+amoeba
+amoeba's
+amoebae
+amoebaean
+amoeban
+amoebas
+amoebiasis
+amoebic
+amoebocyte
+amoeboid
+amok
+amon
+among
+amongst
+Amontillado
+amontillado
+amor
+amor's
+amoral
+amoralism
+amorality
+amoralize
+amoralizes
+amorally
+amoretto
+amorism
+amorism's
+amorisms
+amoristic
+amoristics
+amoroso
+amorous
+amorously
+amorousness
+amorphism
+amorphization
+amorphize
+amorphous
+amorphously
+amorphousness
+amors
+amort
+amortizable
+amortizable's
+amortizables
+amortization
+amortization's
+amortizations
+amortize
+amortized
+amortizement
+amortizement's
+amortizements
+amortizes
+amortizing
+Amos
+amount
+amounted
+amounter
+amounters
+amounting
+amounts
+amour
+amour's
+amours
+amowt
+Amoy
+amp
+Ampelopsis
+amperage
+amperages
+ampere
+amperes
+ampersand
+ampersand's
+ampersands
+Ampex
+Ampex's
+amphetamine
+amphetamines
+amphiarthrosis
+amphiaster
+amphibia
+amphibian
+amphibian's
+amphibians
+amphibiotic
+amphibious
+amphibiously
+amphibiousness
+amphiblastula
+amphibole
+amphibolite
+amphibolitic
+amphibology
+amphibrach
+amphichroic
+amphicoelous
+amphictyon
+amphictyony
+amphidiploid
+amphigory
+amphimacer
+amphimixis
+amphioxis
+amphioxus
+amphipathic
+amphiploid
+amphipod
+amphiprostyle
+amphiprotic
+amphisbaena
+amphistylar
+amphitheater
+amphitheater's
+amphitheaters
+amphitheatric
+amphitheatrical
+amphitheatrically
+amphithecium
+amphitricha
+Amphitrite
+amphitropous
+Amphitryon
+amphora
+amphoteric
+ample
+ampleness
+ampler
+amplest
+amplexicaul
+amplexus
+amplidyne
+amplification
+amplifications
+amplified
+amplifier
+amplifiers
+amplifies
+amplify
+amplifying
+amplitude
+amplitude's
+amplitudes
+amply
+ampoule
+ampoule's
+ampoules
+amps
+ampul
+ampule
+ampulla
+amputate
+amputated
+amputates
+amputating
+amputation
+amputator
+amputee
+amra
+amravati
+amrita
+Amritsar
+ams
+Amsterdam
+Amsterdam's
+amstrad
+Amtrak
+Amtrak's
+amuck
+amulet
+amulets
+Amundsen
+amur
+amuse
+amused
+amusedly
+amusement
+amusement's
+amusements
+amuser
+amusers
+amuses
+amusing
+amusingly
+amusingness
+amusive
+Amy
+Amy's
+amygdala
+amygdalate
+amygdale
+amygdalin
+amygdaline
+amygdaloid
+amygdaloidal
+amyl
+amylaceous
+amylase
+amylene
+amyloid
+amylolysis
+amylolytic
+amylopectin
+amylopsin
+amylose
+amyotonia
+Amytal
+an
+ana
+Anabaena
+anabantid
+anabaptism
+Anabaptist
+Anabaptist's
+Anabaptists
+Anabas
+anabasis
+anabatic
+Anabel
+Anabel's
+anabiosis
+anabiotic
+Anableps
+anabolic
+anabolism
+anabolite
+anabranch
+anacardiaceous
+anachorism
+anachronic
+anachronism
+anachronism's
+anachronisms
+anachronistic
+anachronistically
+anachronous
+anachronously
+anaclinal
+anaclitic
+anacoluthia
+anacoluthic
+anacoluthically
+anacoluthon
+anaconda
+anacondas
+anacoustic
+Anacreon
+Anacreontic
+anacrusis
+anaculture
+anadem
+anadex
+anadiplosis
+anadromous
+anadyr
+anaerobe
+anaerobic
+anaerobically
+anaerobiosis
+anaglyph
+anaglyphic
+anaglypta
+anagnorisis
+anagoge
+anagram
+anagram's
+anagrammatic
+anagrammatical
+anagrammatically
+anagrammatization
+anagrammatize
+anagrams
+Anaheim
+Anaheim's
+anak
+anal
+analcite
+Analects
+analects
+analemma
+analemma's
+analemmas
+analeptic
+analgesia
+analgesic
+analgetic
+analog
+analog's
+analogic
+analogical
+analogically
+analogies
+analogism
+analogism's
+analogisms
+analogist
+analogize
+analogizes
+analogous
+analogously
+analogousness
+analogs
+analogy
+analogy's
+analphabet
+analphabetic
+analphabetism
+analysand
+analysis
+analyst
+analyst's
+analysts
+analytic
+analytical
+analytically
+analyticities
+analyticity
+analytics
+analyzable
+analyzation
+analyze
+analyzed
+analyzer
+analyzers
+analyzes
+analyzing
+Anam
+anambra
+anamnesis
+anamorphic
+anamorphism
+anamorphoscope
+anamorphosis
+anandrous
+Ananias
+ananthous
+anapaest
+anaphase
+anaphasic
+anaphora
+anaphoric
+anaphorically
+anaphrodisiac
+anaphylaxis
+anaplasia
+anaplasmosis
+anaplastic
+anaplasty
+anaptyxis
+anapurna
+anarch
+anarchic
+anarchical
+anarchism
+anarchist
+anarchist's
+anarchistic
+anarchists
+anarchize
+anarchizes
+anarcho
+anarchy
+anarthria
+anarthrous
+anasarca
+anastasia
+anastigmat
+anastigmatic
+anastomose
+anastomoses
+anastomosis
+anastomotic
+anastrophe
+anatase
+anathema
+anathematization
+anathematize
+anathematized
+anathematizes
+anathematizing
+Anatole
+Anatole's
+anatolia
+Anatolian
+anatomic
+anatomical
+anatomically
+anatomicals
+anatomist
+anatomize
+anatomy
+anatoxin
+anatropous
+anatto
+anaxagoras
+anaximander
+anaximenes
+anbury
+ancestor
+ancestor's
+ancestors
+ancestral
+ancestrally
+ancestress
+ancestry
+Anchises
+anchor
+anchorage
+anchorage's
+anchorages
+anchored
+anchoress
+anchoret
+anchoring
+anchorite
+anchoritic
+anchoritically
+anchoritism
+anchorless
+anchorman
+anchors
+anchoveta
+anchovies
+anchovy
+anchylose
+ancient
+anciently
+ancientness
+ancientry
+ancients
+ancillaries
+ancillary
+ancipital
+ancohuma
+ancon
+Ancona
+ancy
+ancylostomiasis
+and
+andalusia
+Andalusia
+andalusite
+Andaman
+andante
+andantino
+Andean
+Andean's
+anded
+anderlecht
+anders
+Andersen
+Andersen's
+Anderson
+Anderson's
+Andes
+andesine
+andesite
+andesitic
+Andhra
+anding
+andiron
+andizhan
+Andorra
+Andorra's
+Andover
+Andover's
+andradite
+Andre
+Andre's
+Andrea
+Andrea's
+andreanof
+Andrei
+Andrei's
+andreotti
+Andrew
+Andrew's
+androcles
+androclinium
+androecium
+androgen
+androgenic
+androgenous
+androgyne
+androgynous
+androgyny
+android
+Andromache
+Andromeda
+andros
+androsphinx
+androsterone
+ands
+andvari
+Andy
+Andy's
+ane
+anear
+anecdotage
+anecdotal
+anecdotalist
+anecdotalists
+anecdotally
+anecdote
+anecdote's
+anecdotes
+anecdotic
+anecdotical
+anecdotically
+anecdotist
+anechoic
+anelace
+anele
+anemia
+anemia's
+anemias
+anemic
+anemically
+anemics
+anemochore
+anemograph
+anemographic
+anemography
+anemology
+anemometer
+anemometer's
+anemometers
+anemometric
+anemometrical
+anemometry
+anemone
+anemophilous
+anemoscope
+anent
+anergy
+aneroid
+anesthesia
+anesthesia's
+anesthesias
+anesthesiologist
+anesthesiology
+anesthetic
+anesthetic's
+anesthetically
+anesthetics
+anesthetist
+anesthetization
+anesthetization's
+anesthetizations
+anesthetize
+anesthetized
+anesthetizer
+anesthetizer's
+anesthetizers
+anesthetizes
+anesthetizing
+anestrus
+anethole
+aneto
+aneuploid
+aneurin
+aneurism
+aneurysm
+aneurysmal
+anew
+anfractuosity
+anfractuous
+Angara
+Angarsk
+angary
+angel
+angel's
+Angela
+Angeleno
+Angeleno's
+Angelenos
+Angeles
+angelfish
+angelic
+Angelica
+Angelica's
+angelical
+angelically
+angelicize
+angelicizes
+angelico
+Angelina
+Angeline
+angelize
+angelizes
+angell
+Angelo
+angelology
+angels
+Angelus
+anger
+angered
+angering
+angerless
+angers
+Angevin
+Angie
+angina
+anginal
+anginose
+angiocardiographic
+angiocardiography
+angiography
+angiology
+angioma
+angiosperm
+Angkor
+angle
+angled
+angler
+anglers
+angles
+Anglesey
+anglesite
+angleworm
+Anglia
+anglia
+Anglian
+Anglican
+Anglican's
+Anglicanism
+Anglicanism's
+Anglicanize
+Anglicanizes
+Anglicans
+anglice
+anglicism
+Anglicist
+anglicization
+anglicization's
+anglicizations
+anglicize
+anglicized
+anglicizes
+angling
+Anglo
+Anglomania
+Anglophile
+Anglophilia
+Anglophilia's
+Anglophiliac
+Anglophilic
+Anglophilism
+Anglophily
+Anglophobe
+Anglophobia
+Anglophobia's
+Anglophobic
+Anglophone
+Angola
+Angola's
+angora
+angostura
+angra
+angrier
+angriest
+angrily
+angriness
+angry
+angst
+angstrom
+angstroms
+Anguilla
+anguilliform
+anguine
+anguish
+anguished
+angular
+angularity
+angularization
+angularization's
+angularizations
+angularize
+angularizes
+angularly
+angulation
+Angus
+angwantibo
+anhalt
+Anheuser
+anhinga
+anhwei
+anhydride
+anhydridization
+anhydridization's
+anhydridizations
+anhydridize
+anhydridizes
+anhydrite
+anhydrous
+anhydrously
+ani
+aniakchak
+aniconic
+anil
+anile
+aniline
+anilingus
+anima
+animadversion
+animadvert
+animal
+animal's
+animalcular
+animalcule
+animalculum
+animalism
+animalist
+animalistic
+animality
+animalization
+animalization's
+animalizations
+animalize
+animalized
+animalizes
+animalizing
+animallike
+animally
+animalness
+animals
+animate
+animated
+animatedly
+animately
+animateness
+animates
+animating
+animation
+animations
+animatism
+animato
+animator
+animator's
+animators
+animism
+animist
+animistic
+animized
+animosity
+animus
+anion
+anion's
+anionic
+anionics
+anions
+anise
+aniseed
+aniseikonia
+aniseikonic
+anisette
+anisodactyl
+anisogamy
+anisole
+anisometric
+anisometropia
+anisotropic
+anisotropically
+anisotropies
+anisotropism
+anisotropy
+anisotropy's
+Anita
+Anjou
+Ankara
+ankerite
+ankh
+anking
+ankle
+ankle's
+anklebone
+anklebones
+ankles
+anklet
+ankus
+ankylosaur
+ankylose
+ankylosis
+ankylostomiasis
+anlace
+anlage
+Ann
+Anna
+annaba
+annabergite
+annal
+Annale
+Annalen
+annalen
+Annalist
+Annalistic
+annalize
+annalizes
+annals
+Annam
+Annamese
+Annapolis
+Annapurna
+annates
+annatto
+Anne
+Anne's
+anneal
+annealed
+annealer
+annealers
+annealing
+anneals
+annecy
+annelid
+Annette
+annex
+annexation
+annexational
+annexationist
+annexations
+annexe
+annexed
+annexes
+annexing
+annhilate
+Annie
+annihilate
+annihilated
+annihilates
+annihilating
+annihilation
+annihilative
+annihilator
+annihilatory
+anniversaries
+anniversary
+anniversary's
+anno
+annotate
+annotated
+annotates
+annotating
+annotation
+annotations
+annotative
+annotator
+annotators
+announce
+announced
+announcement
+announcement's
+announcements
+announcer
+announcers
+announces
+announcing
+annoy
+annoyance
+annoyance's
+annoyances
+annoyed
+annoyer
+annoyers
+annoying
+annoyingly
+annoys
+annual
+annualization
+annualize
+annualized
+annualizes
+annualizing
+annually
+annuals
+annuary
+annuitant
+annuities
+annuity
+annul
+annular
+annularity
+annularly
+annulate
+annulated
+annulately
+annulation
+annulet
+annuli
+annulled
+annulling
+annulment
+annulment's
+annulments
+annulose
+annuls
+annulus
+annum
+annunciate
+annunciated
+annunciates
+annunciating
+annunciation
+annunciator
+annunciators
+annunciatory
+annunicates
+anoa
+anodal
+anodally
+anode
+anode's
+anodes
+anodic
+anodically
+anodization
+anodize
+anodized
+anodizes
+anodizing
+anodyne
+anodynic
+anoestrus
+anoint
+anointed
+anointer
+anointing
+anointment
+anoints
+anole
+anomalies
+anomalistic
+anomalistical
+anomalous
+anomalously
+anomalousness
+anomaly
+anomaly's
+anomer
+anomeric
+anomic
+anomie
+anon
+anonym
+anonymity
+anonymous
+anonymously
+anonymousness
+Anopheles
+anorak
+anorectic
+anoretic
+anorexia
+anorexigenic
+anorthic
+anorthite
+anorthitic
+anorthosite
+anorthositic
+anosmia
+anosmic
+another
+another's
+Anouilh
+anovulant
+anovulatory
+anoxaemia
+anoxemia
+anoxemic
+anoxia
+anoxic
+ansate
+anschluss
+Anselm
+Anselm's
+Anselmo
+Anselmo's
+anserine
+Ansermet
+anshan
+ANSI
+ANSI's
+Anson
+answer
+answerable
+answered
+answerer
+answerers
+answering
+answers
+ant
+ant's
+antacid
+Antaeus
+antagonism
+antagonisms
+antagonist
+antagonist's
+antagonistic
+antagonistically
+antagonists
+antagonization
+antagonization's
+antagonizations
+antagonize
+antagonized
+antagonizer
+antagonizers
+antagonizes
+antagonizing
+antarctic
+Antarctic
+Antarctica
+Antarctica's
+Antares
+ante
+anteater
+anteater's
+anteaters
+antebellum
+antecede
+antecedence
+antecedent
+antecedent's
+antecedently
+antecedents
+antecessor
+antechamber
+antechambers
+antechoir
+anted
+antedate
+antedated
+antedates
+antedating
+antediluvian
+antefix
+antefixal
+anteing
+antelope
+antelope's
+antelopes
+antemeridian
+antemortem
+antenatal
+antenna
+antenna's
+antennae
+antennal
+antennas
+antennule
+antependium
+antepenultimate
+anterior
+anteriorly
+anteriors
+anteroom
+anterooms
+antetype
+anteversion
+antevert
+anthelion
+anthelmintic
+anthem
+anthem's
+anthemion
+anthems
+anther
+antheridium
+antherozoid
+anthesis
+anthill
+anthocyanin
+anthologies
+anthologist
+anthologization
+anthologize
+anthologized
+anthologizer
+anthologizes
+anthologizing
+anthology
+Anthony
+anthophore
+anthotaxy
+anthozoan
+anthracene
+anthracite
+anthracitic
+anthracitization
+anthracitization's
+anthracitizations
+anthracnose
+anthracoid
+anthraquinone
+anthrax
+anthrop
+anthropic
+anthropical
+anthropocentric
+anthropocentrically
+anthropocentricity
+anthropogenesis
+anthropogenetic
+anthropogenic
+anthropography
+anthropoid
+anthropological
+anthropologically
+anthropologist
+anthropologist's
+anthropologists
+anthropology
+anthropometric
+anthropometrical
+anthropometrically
+anthropometrics
+anthropometry
+anthropomorphic
+anthropomorphically
+anthropomorphism
+anthropomorphist
+anthropomorphization
+anthropomorphize
+anthropomorphized
+anthropomorphizes
+anthropomorphizing
+anthropomorphosis
+anthropomorphous
+anthropopathism
+anthropopathy
+anthropophagi
+anthropophagite
+anthropophagous
+anthropophagus
+anthropophagy
+anthroposophy
+Anthurium
+anti
+antiaircraft
+antianxiety
+antibacterial
+antibaryon
+antibes
+antibiosis
+antibiotic
+antibiotically
+antibiotics
+antiblack
+antiblackism
+antibodies
+antibody
+antic
+antic's
+antically
+anticancer
+anticancerous
+anticatalyst
+anticatalyzer
+anticatalyzer's
+anticatalyzers
+anticathode
+anticentralization
+anticentralization's
+anticentralizations
+antichlor
+anticholinergic
+anticholinesterase
+antichrist
+anticipant
+anticipants
+anticipatable
+anticipate
+anticipated
+anticipates
+anticipating
+anticipation
+anticipations
+anticipative
+anticipatively
+anticipator
+anticipatory
+anticize
+anticizes
+anticlastic
+anticlerical
+anticlericalism
+anticlimactic
+anticlimactical
+anticlimactically
+anticlimax
+anticlimaxes
+anticlinal
+anticline
+anticlinorium
+anticlockwise
+anticoagulant
+anticoagulate
+anticoagulation
+anticodon
+anticompetitive
+anticonvulsant
+anticonvulsive
+anticosti
+antics
+anticyclone
+anticyclones
+antidepressant
+antiderivative
+antidisestablishmentarianism
+antidiuretic
+antidotal
+antidotally
+antidote
+antidote's
+antidotes
+antidromic
+antiegalitarian
+antienzyme
+antiepicenter
+antiepicenter's
+antiepicenters
+antiestablishment
+Antietam
+antifebrile
+antifederalist
+antiferromagnetism
+antifertility
+antifertilizer
+antifertilizer's
+antifertilizers
+antifluoridation
+antiform
+antiformant
+antifouling
+antifreeze
+antifriction
+antifundamentalist
+antifungal
+antigen
+antigen's
+antigenic
+antigenically
+antigenicity
+antigens
+antiglobulin
+antigone
+Antigonus
+antigorite
+antigravity
+Antigua
+antihalation
+antihelices
+antihelix
+antihemophilic
+antihero
+antiheros
+antihistamine
+antihistaminic
+antihistorical
+antihypertensive
+antiknock
+antilabor
+antilabor's
+antilabors
+antilepton
+antileptons
+antileukemic
+antilitter
+Antilles
+antilog
+antilogarithm
+antilogarithms
+antilogism
+antilogs
+antilogy
+antimacassar
+antimacassars
+antimagnetic
+antimalarial
+antimalarials
+antimasque
+antimatter
+antimatter's
+antimedieval
+antimedieval's
+antimedievals
+antimere
+antimetabolite
+antimicrobial
+antimilitarist
+antimilitarists
+antimissile
+antimissiles
+antimitotic
+antimonial
+antimonic
+antimonious
+antimonous
+antimony
+antimonyl
+antineoplastic
+antineutrino
+antineutron
+anting
+antinodal
+antinode
+antinomian
+antinomy
+antinovel
+antinovelist
+antinucleon
+Antioch
+antiochus
+antioxidant
+antioxidizer
+antioxidizer's
+antioxidizers
+antioxidizing
+antioxidizing's
+antioxidizings
+antiparallel
+antiparasitic
+antiparticle
+antipasto
+antipater
+antipathetic
+antipathetically
+antipathize
+antipathizes
+antipathy
+antiperiodic
+antiperiplanar
+antiperistalsis
+antipersonnel
+antiperspirant
+antiphlogistic
+antiphon
+antiphonal
+antiphonally
+antiphonary
+antiphony
+antiphrasis
+antipodal
+antipode
+antipode's
+antipodean
+antipodes
+antipoetic
+antipollution
+antipope
+antiproton
+antipsychiatry
+antipyretic
+antipyrine
+antiquarian
+antiquarian's
+antiquarianism
+antiquarianize
+antiquarianizes
+antiquarians
+antiquary
+antiquate
+antiquated
+antiquation
+antique
+antique's
+antiques
+antiquities
+antiquity
+antirachitic
+antiredeposition
+antiremonstrant
+antiresonance
+antiresonator
+antirheumatic
+antirrhinum
+antirumor
+antirumor's
+antirumors
+antisana
+antiscorbutic
+antisemite
+antisemite's
+antisemites
+antisemitic
+antisemitism
+antisemitism's
+antisensitize
+antisensitizer
+antisensitizer's
+antisensitizers
+antisensitizes
+antisepsis
+antiseptic
+antiseptically
+antisepticize
+antisepticizes
+antiseptize
+antiseptizes
+antisera
+antiserum
+antisiphon
+antisiphon's
+antisiphons
+antislavery
+antisocial
+antispasmodic
+antistatic
+antisthenes
+antistrophe
+antistrophic
+antistrophically
+antisubmarine
+antisymmetric
+antisymmetry
+antitank
+antithesis
+antithesize
+antithesizes
+antithetic
+antithetical
+antithetically
+antithyroid
+antitoxic
+antitoxin
+antitoxin's
+antitoxins
+antitrades
+antitragus
+antitrust
+antitruster
+antitubercular
+antituberculous
+antitumor
+antitumoral
+antitussive
+antitype
+antivenin
+antiviral
+antivitamin
+antiworld
+antler
+antlered
+antlia
+antlion
+antofagasta
+Antoine
+Antoinette
+Anton
+Anton's
+antoninus
+Antonio
+Antonio's
+antonioni
+antonius
+antonomasia
+Antony
+antonym
+antonymic
+antonymous
+antonyms
+antonymy
+antre
+antrim
+antrorse
+antrorsely
+antrum
+ants
+antung
+Antwerp
+anu
+Anubis
+anuradhapura
+anuran
+anuresis
+anuria
+anurous
+anus
+anvers
+anvil
+anvil's
+anviled
+anviling
+anvils
+anxieties
+anxiety
+anxious
+anxiously
+anxiousness
+any
+anyang
+anybodies
+anybody
+anyhow
+anymore
+anyone
+anyone's
+anyones
+anyplace
+anything
+anythings
+anytime
+anyway
+anyways
+anywhere
+anywheres
+anywise
+Anzac
+anzio
+anzus
+aorangi
+aorta
+aortal
+aortic
+aortographic
+aortography
+aosta
+aoudad
+apace
+apache
+apaches
+apagoge
+apalachicola
+apanage
+aparri
+apart
+apartheid
+apartment
+apartment's
+apartmental
+apartments
+apartness
+apatetic
+apathetic
+apathetically
+apathy
+apatite
+ape
+apeak
+aped
+apeldoorn
+apelike
+apelles
+apeman
+apennines
+aper
+aperient
+aperiodic
+aperiodically
+aperiodicity
+aperitif
+aperture
+apertured
+apery
+apes
+apetalous
+Apetalous
+apex
+apexes
+aphaeresis
+aphaeretic
+aphagia
+aphanite
+aphanitic
+aphasia
+aphasiac
+aphasic
+aphelion
+apheliotropic
+aphesis
+aphetic
+aphetically
+aphid
+aphid's
+aphides
+aphids
+Aphis
+aphonia
+aphonic
+aphorism
+aphorism's
+aphorisms
+aphorist
+aphoristic
+aphoristically
+aphorize
+aphorized
+aphorizer
+aphorizers
+aphorizes
+aphorizing
+aphotic
+aphrodisiac
+aphrodisiacal
+Aphrodite
+Aphrodite's
+aphtha
+aphyllous
+aphylly
+apia
+apian
+apiarian
+apiaries
+apiarist
+apiary
+apical
+apically
+apices
+apiculate
+apicultural
+apiculture
+apiculturist
+apiece
+apiezon
+aping
+Apis
+apish
+apishly
+apishness
+apivorous
+aplacental
+aplanatic
+aplanospore
+aplasia
+aplastic
+aplenty
+aplite
+aplomb
+apnoea
+apo
+apocalypse
+apocalyptic
+apocalyptical
+apocalyptically
+apocalypticism
+apocalyptism
+apocalyptist
+apocarp
+apocarpous
+apocarpy
+apochromat
+apochromatic
+apocopate
+apocope
+apocrine
+apocrypha
+apocryphal
+apocryphally
+apocryphalness
+apocynaceous
+apocynthion
+apodal
+apodeictic
+apodictic
+apodictically
+apodosis
+apodous
+apoenzyme
+apogamic
+apogamous
+apogamy
+apogean
+apogee
+apogees
+apogeotropism
+apolar
+apolitical
+apolitically
+apollinaire
+Apollinaire
+apollinaris
+Apollo
+Apollo's
+Apollonian
+Apollyon
+apologetic
+apologetically
+apologetics
+apologia
+apologie
+apologies
+apologist
+apologist's
+apologists
+apologize
+apologized
+apologizer
+apologizers
+apologizes
+apologizing
+apologue
+apology
+apology's
+apolune
+apomict
+apomixis
+apomorphine
+aponeurosis
+aponeurotic
+apopemptic
+apophasis
+apophthegm
+apophyge
+apophyllite
+apophysis
+apoplectic
+apoplectically
+apoplexy
+apopolectic
+aport
+aposematic
+aposematically
+aposiopesis
+apospory
+apostasy
+apostate
+apostates
+apostatization
+apostatize
+apostatized
+apostatizes
+apostatizing
+apostil
+apostle
+apostle's
+apostles
+apostleship
+apostolate
+apostolic
+apostolicity
+apostrophe
+apostrophes
+apostrophic
+apostrophize
+apostrophized
+apostrophizes
+apostrophizing
+apothecary
+apothecial
+apothecium
+apothegm
+apothegmatic
+apothegmatical
+apothegmatically
+apothem
+apotheoses
+apotheosis
+apotheosize
+apotropaic
+apotropaically
+Appalachia
+Appalachia's
+Appalachian
+Appalachian's
+Appalachians
+appall
+appalled
+appalling
+appallingly
+appalls
+appaloosa
+Appaloosas
+appaloosas
+appanage
+apparatus
+apparatuses
+apparel
+appareled
+appareling
+apparels
+apparency
+apparent
+apparently
+apparentness
+apparition
+apparition's
+apparitional
+apparitions
+apparitor
+appassionato
+appeal
+appealability
+appealable
+appealed
+appealer
+appealers
+appealing
+appealingly
+appeals
+appear
+appearance
+appearances
+appeared
+appearer
+appearers
+appearing
+appears
+appeasable
+appease
+appeased
+appeasement
+appeaser
+appeases
+appeasing
+appel
+appellant
+appellant's
+appellants
+appellate
+appellation
+appellative
+appellatively
+appellee
+append
+appendage
+appendage's
+appendages
+appendant
+appendectomy
+appended
+appender
+appenders
+appendicectomy
+appendices
+appendicitis
+appendicle
+appendicular
+appending
+appendix
+appendix's
+appendixes
+appends
+appenzell
+apperceive
+apperception
+apperceptive
+appertain
+appertained
+appertaining
+appertains
+appestat
+appetence
+appetency
+appetent
+appetite
+appetite's
+appetites
+appetitive
+appetize
+appetized
+appetizement
+appetizement's
+appetizements
+appetizer
+appetizers
+appetizes
+appetizing
+appetizingly
+Appian
+applaud
+applaudable
+applaudably
+applauded
+applauder
+applauding
+applauds
+applause
+apple
+apple's
+Appleby
+Appleby's
+applecart
+applecarts
+applejack
+apples
+applesauce
+applesnits
+Appleton
+appliance
+appliance's
+appliances
+applicability
+applicable
+applicant
+applicant's
+applicants
+applicate
+application
+application's
+applications
+applicative
+applicatively
+applicator
+applicator's
+applicators
+applicatory
+applied
+applier
+appliers
+applies
+applique
+appliques
+apply
+applying
+appoint
+appointe
+appointed
+appointee
+appointee's
+appointees
+appointer
+appointers
+appointing
+appointive
+appointment
+appointment's
+appointments
+appointor
+appointors
+appoints
+appomattox
+Appomattox
+apport
+apportion
+apportioned
+apportioning
+apportionment
+apportionments
+apportions
+appose
+apposed
+apposing
+apposite
+appositely
+appositeness
+apposition
+appositional
+appositionally
+appositive
+appositively
+appraisal
+appraisal's
+appraisals
+appraise
+appraised
+appraisement
+appraiser
+appraisers
+appraises
+appraising
+appraisingly
+appreciable
+appreciably
+appreciate
+appreciated
+appreciates
+appreciating
+appreciation
+appreciations
+appreciative
+appreciatively
+appreciativeness
+appreciator
+appreciatory
+apprehend
+apprehended
+apprehender
+apprehending
+apprehends
+apprehensible
+apprehensibly
+apprehension
+apprehension's
+apprehensions
+apprehensive
+apprehensively
+apprehensiveness
+apprentice
+apprenticed
+apprentices
+apprenticeship
+apprenticeships
+appressed
+apprise
+apprised
+appriser
+apprisers
+apprises
+apprising
+apprisings
+apprize
+apprized
+apprizer
+apprizers
+apprizes
+apprizing
+apprizingly
+apprizings
+approach
+approachability
+approachable
+approached
+approacher
+approachers
+approaches
+approaching
+approbate
+approbation
+approbatory
+appropriable
+appropriate
+appropriated
+appropriately
+appropriateness
+appropriates
+appropriatest
+appropriating
+appropriation
+appropriations
+appropriative
+appropriator
+appropriator's
+appropriators
+approvable
+approvably
+approval
+approval's
+approvals
+approve
+approved
+approver
+approvers
+approves
+approving
+approvingly
+approx
+approximable
+approximal
+approximant
+approximate
+approximated
+approximately
+approximates
+approximating
+approximation
+approximations
+approximative
+approximatively
+approximator
+approximators
+appulse
+appurtenance
+appurtenances
+appurtenant
+Apr
+apractic
+apraxia
+apraxic
+apricot
+apricot's
+apricots
+April
+April's
+Aprils
+apriorism
+apriority
+apron
+apron's
+aprons
+apropos
+APS
+apse
+apses
+apsidal
+apsides
+apsis
+apt
+apteral
+apterous
+apterygial
+apteryx
+aptitude
+aptitudes
+aptitudinal
+aptitudinally
+aptly
+aptness
+apuleius
+apulia
+apure
+apurimac
+Apus
+apyrase
+apyretic
+aqaba
+aqua
+aquacade
+aquaculture
+aquafortis
+aqualung
+aqualunger
+aquamarine
+aquanaut
+aquaplane
+aquaplaner
+aquarelle
+aquarellist
+aquaria
+aquarist
+aquarium
+Aquarius
+aquas
+aquashow
+aquatic
+aquatically
+aquatics
+aquatint
+aquatinter
+aquatintist
+aquavit
+aqueduct
+aqueduct's
+aqueducts
+aqueous
+aqueously
+aquicultural
+aquiculture
+aquidneck
+aquifer
+aquiferous
+aquifers
+Aquila
+Aquila's
+aquilegia
+aquileia
+aquiline
+aquilinity
+Aquinas
+aquire
+aquit
+aquitaine
+aquittal
+aquiver
+AR
+ara
+Arab
+Arab's
+arabesque
+Arabia
+Arabia's
+Arabian
+Arabian's
+Arabianize
+Arabianizes
+Arabians
+Arabic
+Arabic's
+arabica
+Arabicize
+Arabicizes
+arability
+arabinose
+Arabist
+arabization
+arabize
+arabized
+arabizes
+arabizing
+arable
+Arabs
+Araby
+Arachne
+Arachne's
+arachnid
+arachnid's
+arachnids
+arachnoid
+arad
+Arafat
+arafura
+aragats
+aragon
+aragonite
+araguaia
+Araiza
+arak
+arakan
+araks
+araldite
+araliaceous
+aram
+Aramaic
+aran
+araneid
+arany
+Arapaho
+arapaima
+ararat
+araroba
+aras
+araucania
+Araucanian
+Araucaria
+Arawakan
+araxes
+arbalest
+Arbela
+arbil
+arbiter
+arbiter's
+arbiters
+arbitrable
+arbitrage
+arbitrager
+arbitrageur
+arbitral
+arbitrament
+arbitrarily
+arbitrariness
+arbitrary
+arbitrate
+arbitrated
+arbitrates
+arbitrating
+arbitration
+arbitrational
+arbitrative
+arbitrator
+arbitrator's
+arbitrators
+arbitress
+arbor
+arbor's
+arboraceous
+arboreal
+arboreally
+arbored
+arboreous
+arbores
+arborescence
+arborescent
+arborescently
+arboretum
+arboriculture
+arboriculturist
+arborist
+arborist's
+arborists
+arborization
+arborize
+arborized
+arborizes
+arborizing
+arbors
+arborvitae
+arbovirus
+arbritrary
+arbroath
+arbuthnot
+arbutus
+arc
+arcade
+arcade's
+arcaded
+arcades
+Arcadia
+Arcadian
+Arcadic
+arcading
+arcana
+arcane
+arcanum
+arcature
+arccos
+arccosine
+arced
+arch
+archae
+archaean
+archaeological
+archaeologically
+archaeologist
+archaeologist's
+archaeologists
+archaeology
+archaeomagnetism
+Archaeopteryx
+Archaeornis
+archaeozoic
+archaic
+archaically
+archaicness
+archaism
+archaist
+archaistic
+archaize
+archaized
+archaizer
+archaizers
+archaizes
+archaizing
+archangel
+archangel's
+archangelic
+archangels
+archbishop
+archbishopric
+archdeacon
+archdeaconate
+archdeaconry
+archdiocesan
+archdiocese
+archdioceses
+archducal
+archduchess
+archduchy
+archduke
+archdukedom
+Archean
+arched
+archegonial
+archegonium
+archenemy
+archenteron
+archer
+archerfish
+archers
+archery
+arches
+archespore
+archetypal
+archetypally
+archetype
+archetypes
+archetypical
+archetypically
+archfiend
+archfool
+Archibald
+archicarp
+archidiaconal
+archidiaconate
+Archie
+Archie's
+archiepiscopal
+archiepiscopate
+archil
+Archilochian
+archilochus
+archimage
+archimandrite
+Archimedes
+archine
+arching
+archipelagic
+archipelago
+archipelagoes
+archipenko
+archiphoneme
+archiplasm
+architect
+architect's
+architectonic
+architectonically
+architectonics
+architects
+architectural
+architecturally
+architecture
+architecture's
+architectures
+architrave
+archival
+archive
+archived
+archiver
+archivers
+archives
+archiving
+archivist
+archivists
+archivolt
+archly
+archness
+archon
+archoplasm
+archpriest
+archway
+arcing
+arclength
+arclike
+arco
+ARCO
+arcograph
+arcs
+arcsin
+arcsine
+arctan
+arctangent
+arctic
+Arctic
+arctically
+arcticize
+arcticizes
+Arctogaea
+Arcturus
+arcuate
+arcuately
+arcuation
+arcus
+ardeb
+Arden
+Arden's
+ardency
+ardennes
+ardent
+ardently
+ardor
+ardor's
+ardors
+arduous
+arduously
+arduousness
+are
+area
+area's
+areal
+areally
+areas
+areaway
+areawide
+Areca
+areg
+aren't
+arena
+arena's
+arenaceous
+arenas
+arenicolous
+arenite
+areography
+areola
+areolar
+areolate
+areolation
+areole
+Areopagus
+Arequipa
+Ares
+ares
+Arethusa
+aretino
+arezzo
+argal
+argali
+argand
+argent
+argenteuil
+argentic
+argentiferous
+Argentina
+Argentina's
+argentine
+Argentinian
+argentite
+argentous
+argentum
+arger
+Argerich
+argil
+argillaceous
+argilliferous
+argillite
+arginine
+Argive
+Argo
+Argo's
+argol
+argolis
+argon
+argonaut
+argonauts
+Argonne
+argonon
+Argos
+argos
+argosy
+argot
+argovie
+arguable
+arguably
+argue
+argued
+arguer
+arguers
+argues
+argufier
+argufy
+arguing
+argument
+argument's
+argumentation
+argumentative
+argumentatively
+arguments
+argumentum
+Argus
+argyle
+argyll
+Argyrol
+arhat
+aria
+Ariadne
+Arian
+Arianism
+Arianism's
+arianist
+Arianist
+Arianist's
+arianists
+Arianists
+arica
+arid
+aridity
+aridness
+Ariel
+Aries
+arietta
+aright
+aril
+arillode
+arimathea
+ariminum
+ariose
+arioso
+ariosto
+arise
+arisen
+ariser
+arises
+arising
+arisings
+arista
+aristaeus
+aristarchus
+Aristides
+Aristippus
+aristocracy
+aristocrat
+aristocrat's
+aristocratic
+aristocratically
+aristocrats
+aristophanes
+Aristotelean
+Aristotelian
+Aristotelian's
+Aristotle
+Aristotle's
+arithmetic
+arithmetical
+arithmetically
+arithmetician
+arithmetics
+arithmetization
+arithmetization's
+arithmetizations
+arithmetize
+arithmetized
+arithmetizes
+Arius
+Arizona
+Arizona's
+arjuna
+ark
+Arkansan
+Arkansas
+Arkansas's
+Arkhangelsk
+Arkhipova
+arkose
+arkwright
+Arlberg
+Arlen
+Arlene
+arles
+Arlington
+arlon
+arm
+arm's
+armada
+armadillo
+armadillos
+Armageddon
+Armageddon's
+armagh
+armagnac
+armament
+armament's
+armamentarium
+armaments
+Armata
+armature
+armatures
+armband
+armchair
+armchair's
+armchairs
+Armco
+armed
+Armenia
+Armenian
+Armenian's
+armentieres
+armer
+armers
+armes
+armet
+armful
+armfuls
+armhole
+armies
+armiger
+armillaria
+armillary
+arming
+Arminian
+arminius
+armipotent
+armistice
+armless
+armlet
+armlike
+armload
+armoire
+Armonk
+armor
+armor's
+armored
+armorer
+armorer's
+armorers
+armorial
+armorially
+armorica
+armoried
+armories
+armoring
+armorist
+armorist's
+armorists
+armorless
+armors
+armory
+armory's
+Armour
+Armour's
+armpit
+armpit's
+armpits
+armrest
+arms
+armsful
+Armstrong
+Armstrong's
+armure
+army
+army's
+arne
+arnhem
+arnica
+arnim
+arno
+Arnold
+Arnold's
+aroid
+aroint
+aroma
+aromas
+aromatic
+aromatically
+aromaticity
+aromaticness
+aromatization
+aromatize
+aromatized
+aromatizes
+aromatizing
+arose
+around
+arousal
+arouse
+aroused
+arouses
+arousing
+arp
+ARPA
+Arpanet
+arpanet
+arpeggio
+arpeggio's
+arpeggios
+arpent
+arquebus
+arrack
+Arragon
+arraign
+arraigned
+arraigning
+arraignment
+arraignment's
+arraignments
+arraigns
+arran
+arrange
+arrangeable
+arranged
+arrangement
+arrangement's
+arrangements
+arranger
+arrangers
+arranges
+arranging
+arrant
+arrantly
+arras
+Arrau
+array
+arrayed
+arrayer
+arraying
+arrays
+arrear
+arrearage
+arrears
+arrest
+arrestable
+arrestant
+arrested
+arrestee
+arrestee's
+arrestees
+arrester
+arresters
+arresting
+arrestingly
+arrestment
+arrestor
+arrestor's
+arrestors
+arrests
+arretium
+Arrhenius
+arrhythmia
+arrhythmic
+arrhythmical
+arrhythmically
+arris
+arrises
+arrival
+arrival's
+arrivals
+arrive
+arrived
+arriver
+arrives
+arriving
+arrivisme
+arriviste
+arroba
+arrogance
+arrogant
+arrogantly
+arrogate
+arrogated
+arrogates
+arrogating
+arrogation
+arrondissement
+arrow
+arrowed
+arrowhead
+arrowhead's
+arrowheads
+arrowing
+arrowroot
+arrows
+arrowwood
+arrowworm
+arrowy
+Arroyo
+arroyo
+arroyos
+arru
+arse
+arsenal
+arsenal's
+arsenals
+arsenate
+arsenic
+arsenical
+arsenicize
+arsenicizes
+arsenide
+arsenious
+arsenite
+arsenopyrite
+arsine
+arsines
+arsis
+arson
+arsonist
+arsonous
+arsphenamine
+art
+art's
+artaud
+artaxerxes
+arte
+artefact
+artefacts
+Artemia
+Artemis
+artemisia
+arterial
+arterialization
+arterialization's
+arterializations
+arterialize
+arterialized
+arterializes
+arterializing
+arterially
+arteries
+arteriogram
+arteriogram's
+arteriograms
+arteriographic
+arteriography
+arteriolar
+arteriole
+arteriole's
+arterioles
+arteriolosclerosis
+arteriosclerosis
+arteriovenous
+arteritis
+artery
+artery's
+artesian
+artful
+artfully
+artfulness
+arthralgia
+arthritic
+arthritically
+arthritis
+arthrogram
+arthrogram's
+arthrograms
+arthromere
+arthropathy
+arthropod
+arthropod's
+arthropods
+arthrosis
+arthrospore
+arthrosporic
+Arthur
+Arthurian
+artic
+artichoke
+artichoke's
+artichokes
+article
+article's
+articled
+articles
+articling
+articulable
+articular
+articulate
+articulated
+articulately
+articulateness
+articulates
+articulating
+articulation
+articulations
+articulative
+articulator
+articulators
+articulatory
+Artie
+Artie's
+artier
+artifact
+artifact's
+artifacts
+artifical
+artifically
+artifice
+artificer
+artifices
+artificial
+artificialities
+artificiality
+artificialize
+artificializes
+artificially
+artificialness
+artilleries
+artillerist
+artillery
+artilleryman
+artily
+artiness
+artiodactyl
+artisan
+artisan's
+artisans
+artist
+artist's
+artiste
+artistic
+artistical
+artistically
+artistry
+artists
+artless
+artlessly
+artmobile
+artois
+arts
+Arturo
+Arturo's
+artwork
+arty
+Aruba
+arum
+arunachal
+arundel
+arundinaceous
+aruspex
+aruwimi
+arvo
+Aryan
+Aryan's
+Aryanization
+Aryanize
+Aryanized
+Aryanizes
+Aryanizing
+Aryans
+aryl
+arytenoid
+as
+asafetida
+asantehene
+asap
+ASAP
+asarabacca
+Asarum
+asben
+asbestos
+asbestosis
+asbestus
+Ascanius
+ascariasis
+ascarid
+ascend
+ascendable
+ascendance
+ascendancy
+ascendant
+ascendantly
+ascended
+ascendence
+ascendency
+ascendent
+ascender
+ascenders
+ascendible
+ascending
+ascends
+ascension
+ascensional
+ascensions
+Ascensiontide
+ascensive
+ascent
+ascertain
+ascertainable
+ascertained
+ascertaining
+ascertainment
+ascertains
+ascesis
+ascetic
+ascetic's
+ascetical
+ascetically
+asceticism
+ascetics
+asch
+Aschaffenburg
+Ascham
+asci
+ascidian
+ascidium
+ASCII
+ascites
+ascitic
+asclepiadaceous
+Asclepiadean
+Asclepius
+ascocarp
+ascogonium
+ascoli
+ascomycete
+ascomycetes
+ascorbate
+ascorbic
+ascospore
+ascosporic
+ascosporous
+ascot
+ascribable
+ascribe
+ascribed
+ascribes
+ascribing
+ascription
+ascriptive
+ascus
+asdic
+aseity
+asepalous
+asepsis
+aseptic
+aseptically
+asepticize
+asepticizes
+asexual
+asexually
+asgard
+ash
+ashame
+ashamed
+ashamedly
+Ashanti
+ashcan
+ashcans
+ashcroft
+ashe
+ashen
+asher
+ashes
+ashet
+Asheville
+Ashford
+ashier
+Ashkenazi
+Ashkenazy
+ashkey
+Ashkhabad
+Ashland
+ashlar
+ashlared
+ashlaring
+ashlars
+ashless
+Ashley
+ashman
+ashmen
+Ashmolean
+Ashmore
+ashore
+ashplant
+ashram
+Ashton
+ashtoreth
+ashtray
+ashtray's
+ashtrays
+Ashur
+ashurbanipal
+ashy
+Asia
+Asia's
+Asian
+Asian's
+Asians
+Asiatic
+Asiatic's
+Asiaticization
+Asiaticization's
+Asiaticizations
+Asiaticize
+Asiaticizes
+Asiatics
+aside
+asides
+Asilomar
+Asilomar's
+Asimov
+asinine
+asininely
+asininity
+asir
+ask
+askance
+askant
+askari
+asked
+asker
+askers
+askesis
+askew
+askewness
+asking
+askja
+asks
+aslant
+asleep
+aslef
+aslope
+asmara
+asmodeus
+aso
+asocial
+asoka
+asp
+asparagine
+asparagus
+aspartate
+aspartic
+aspartokinase
+Aspasia
+aspect
+aspect's
+aspects
+aspectual
+aspen
+aspencade
+aspencades
+asper
+asperges
+aspergillosis
+aspergillus
+asperity
+asperse
+aspersed
+aspersing
+aspersion
+aspersion's
+aspersions
+asphalt
+asphalted
+asphaltic
+asphaltite
+asphaltum
+aspheric
+aspherical
+asphodel
+asphyxia
+asphyxiant
+asphyxiants
+asphyxiate
+asphyxiation
+asphyxiator
+aspiate
+aspic
+aspidistra
+aspinwall
+aspirant
+aspirant's
+aspirants
+aspirate
+aspirated
+aspirates
+aspirating
+aspiration
+aspiration's
+aspirations
+aspirator
+aspirators
+aspire
+aspired
+aspirer
+aspires
+aspirin
+aspiring
+aspirins
+asplenium
+asquint
+asquith
+ass
+ass's
+assad
+Assad
+assagai
+assai
+assail
+assailable
+assailant
+assailant's
+assailants
+assailed
+assailing
+assails
+Assam
+Assamese
+assassin
+assassin's
+assassinate
+assassinated
+assassinates
+assassinating
+assassination
+assassinations
+assassinator
+assassins
+assault
+assaulted
+assaulter
+assaulting
+assaultive
+assaultively
+assaultiveness
+assaults
+assay
+assayed
+assayer
+assayers
+assaying
+assegai
+assemblage
+assemblage's
+assemblages
+assemblagist
+assemble
+assembled
+assembler
+assemblers
+assembles
+assemblies
+assembling
+assembly
+assembly's
+assemblyman
+assemblywoman
+assen
+assent
+assentation
+assented
+assenter
+assentient
+assenting
+assentor
+assents
+assert
+asserted
+asserter
+asserters
+asserting
+assertion
+assertion's
+assertional
+assertions
+assertive
+assertively
+assertiveness
+asserts
+asses
+assess
+assessable
+assessed
+assesses
+assessing
+assessment
+assessment's
+assessments
+assessor
+assessor's
+assessors
+asset
+asset's
+assets
+asseverate
+asseveration
+asseverative
+asshole
+asshole's
+assholes
+asshur
+assibilate
+assiduity
+assiduous
+assiduously
+assiduousness
+assign
+assignability
+assignable
+assignat
+assignation
+assignational
+assignations
+assigned
+assignee
+assignee's
+assignees
+assigner
+assigners
+assigning
+assignment
+assignment's
+assignments
+assignor
+assigns
+assimilability
+assimilable
+assimilate
+assimilated
+assimilates
+assimilating
+assimilation
+assimilationism
+assimilationist
+assimilations
+assimilative
+assimilator
+assimilatory
+assiniboine
+Assisi
+assist
+assistance
+assistances
+assistant
+assistant's
+assistants
+assistantship
+assistantships
+assisted
+assistents
+assister
+assisting
+assists
+assiut
+assize
+assizer
+assizers
+assizes
+assn
+associable
+associate
+associated
+associates
+associateship
+associating
+association
+association's
+associational
+associationism
+associations
+associative
+associatively
+associativities
+associativity
+associator
+associator's
+associators
+assoil
+assoilment
+assonance
+assonant
+assort
+assortative
+assorted
+assorter
+assorting
+assortment
+assortment's
+assortments
+assorts
+assuage
+assuaged
+assuagement
+assuages
+assuaging
+assuan
+assuasive
+assumability
+assumable
+assumably
+assume
+assumed
+assumer
+assumes
+assuming
+assumpsit
+assumption
+assumption's
+assumptions
+assumptive
+assurance
+assurance's
+assurances
+assurbanipal
+assure
+assured
+assuredly
+assuredness
+assurer
+assurers
+assures
+assurgent
+assuring
+assuringly
+assuror
+Assyria
+Assyrian
+Assyrian's
+Assyrianize
+Assyrianizes
+Assyriology
+Assyriology's
+astable
+astaire
+Astaire
+astaires
+Astaires
+astarboard
+Astarte
+astatic
+astatically
+astaticism
+astatine
+aster
+aster's
+asteria
+asteriated
+asterisk
+asterisk's
+asteriskless
+asterisks
+asterism
+asterisms
+astern
+asternal
+asteroid
+asteroid's
+asteroidal
+asteroids
+asters
+asthenia
+asthenic
+asthenosphere
+asthma
+asthmatic
+asthmatically
+asti
+astigmat
+astigmatic
+astigmatically
+astigmatism
+astigmatizer
+astigmatizer's
+astigmatizers
+Astilbe
+astir
+ASTM
+astolat
+astomatous
+Aston
+Aston's
+astonied
+astonish
+astonished
+astonishes
+astonishing
+astonishingly
+astonishment
+Astor
+Astoria
+astound
+astounded
+astounding
+astoundingly
+astounds
+astrachan
+astraddle
+astragal
+astragalus
+astrakhan
+astral
+astrally
+astraphobia
+astray
+astrict
+astride
+astringency
+astringent
+astringently
+astrobiological
+astrobiologist
+astrobiology
+astrobotany
+astrocompass
+astrocyte
+astrocytic
+astrocytoma
+astrodome
+astrodynamics
+astrogeology
+astroid
+astrol
+astrolabe
+astrologer
+astrologer's
+astrologers
+astrological
+astrologically
+astrology
+astrometry
+astron
+astronaut
+astronaut's
+astronautic
+astronautical
+astronautically
+astronautics
+astronauts
+astronavigation
+astronomer
+astronomer's
+astronomers
+astronomic
+astronomical
+astronomically
+astronomy
+astrophotography
+astrophysical
+astrophysicist
+astrophysicist's
+astrophysicists
+astrophysics
+astrosphere
+asturias
+astute
+astutely
+astuteness
+astyanax
+Asuncion
+asunder
+asur
+aswan
+aswarm
+aswirl
+aswoon
+asyllabic
+asylum
+asylums
+asymmetric
+asymmetrical
+asymmetrically
+asymmetries
+asymmetry
+asymptomatic
+asymptomatically
+asymptote
+asymptote's
+asymptotes
+asymptotic
+asymptotical
+asymptotically
+asymptoticly
+asynapsis
+async
+asynchronism
+asynchronize
+asynchronized
+asynchronizes
+asynchronizing
+asynchronous
+asynchronously
+asynchrony
+asyndetic
+asyndetically
+asyndeton
+asyut
+at
+atacama
+atactic
+ataghan
+atahualpa
+ataman
+ataractic
+ataraxic
+Atari
+atari
+atavism
+atavist
+atavistic
+atavistically
+ataxia
+ataxic
+atbara
+Atchison
+Atchison's
+ate
+atelectasis
+atelier
+atemporal
+Aten
+Athabascan
+athabaska
+athamas
+Athanasian
+athanasius
+atheism
+atheist
+atheist's
+atheistic
+atheistical
+atheistically
+atheists
+athelstan
+athematic
+Athena
+Athena's
+athenaeum
+atheneum
+Athenian
+Athenian's
+Athenians
+Athens
+athermanous
+atheroma
+atherosclerosis
+Atherton
+athirst
+athlete
+athlete's
+athletes
+athletic
+athletically
+athleticism
+athletics
+athodyd
+athos
+athwart
+athwartship
+athwartships
+atilt
+atinate
+atingle
+Atkins
+Atkinson
+Atlanta
+Atlantean
+atlantes
+Atlantic
+Atlantic's
+Atlantica
+Atlantis
+Atlantov
+atlas
+atli
+ATM's
+atman
+atment
+atmolysis
+atmometer
+atmometer's
+atmometers
+atmosphere
+atmosphere's
+atmosphered
+atmospheres
+atmospheric
+atmospherically
+atmospherics
+atmospherium
+atoll
+atoll's
+atolls
+atom
+atom's
+atomic
+atomically
+atomicity
+atomics
+atomism
+atomist
+atomistic
+atomistically
+atomistics
+atomizability
+atomizable
+atomization
+atomization's
+atomizations
+atomize
+atomized
+atomizer
+atomizers
+atomizes
+atomizing
+atoms
+atomy
+atonal
+atonalism
+atonalist
+atonalistic
+atonality
+atonally
+atone
+atoned
+atonement
+atones
+atonic
+atonicity
+atoning
+atony
+atop
+atopic
+atopy
+atrabilious
+atremble
+atresia
+Atreus
+atrial
+atrioventricular
+atrip
+atrium
+atriums
+atrocious
+atrociously
+atrociousness
+atrocities
+atrocity
+atrocity's
+atrophic
+atrophied
+atrophies
+atrophy
+atrophying
+atropine
+Atropos
+attaboy
+attach
+attachable
+attache
+attached
+attacher
+attachers
+attaches
+attaching
+attachment
+attachment's
+attachments
+attack
+attackable
+attacked
+attacker
+attacker's
+attackers
+attacking
+attackman
+attacks
+attain
+attainability
+attainable
+attainableness
+attainably
+attainder
+attained
+attainer
+attainers
+attaining
+attainment
+attainment's
+attainments
+attains
+attaint
+attar
+attedance
+attemper
+attempt
+attemptable
+attempted
+attempter
+attempters
+attempting
+attempts
+Attenborough
+attend
+attendance
+attendance's
+attendances
+attendant
+attendant's
+attendants
+attended
+attendee
+attendee's
+attendees
+attender
+attenders
+attending
+attends
+attention
+attention's
+attentional
+attentionality
+attentions
+attentive
+attentively
+attentiveness
+attenuant
+attenuate
+attenuated
+attenuates
+attenuating
+attenuation
+attenuator
+attenuator's
+attenuators
+attercliffe
+attest
+attestation
+attested
+attester
+attesting
+attests
+attic
+attic's
+Attica
+atticism
+atticize
+atticizes
+attics
+Attila
+attire
+attired
+attires
+attiring
+attis
+attitude
+attitude's
+attitudes
+attitudinal
+attitudinally
+attitudinization
+attitudinize
+attitudinized
+attitudinizes
+attitudinizing
+Attlee
+attlee
+attorn
+attorney
+attorney's
+attorneys
+attorneyship
+attornment
+attract
+attractable
+attractant
+attracted
+attracting
+attraction
+attraction's
+attractions
+attractive
+attractively
+attractiveness
+attractivity
+attractor
+attractor's
+attractors
+attracts
+attributable
+attribute
+attributed
+attributer
+attributes
+attributing
+attribution
+attributional
+attributions
+attributive
+attributively
+attrited
+attrition
+attritional
+attu
+attune
+attuned
+attunement
+attunes
+attuning
+atune
+Atwater
+Atwater's
+atween
+atwitter
+Atwood
+Atwood's
+atypic
+atypical
+atypicality
+atypically
+aubade
+aube
+Auberge
+Auberge's
+Aubergine
+Aubervilliers
+Aubrey
+Aubrey's
+Aubrietia
+auburn
+Aubusson
+Auckland
+Auckland's
+auction
+auctioned
+auctioneer
+auctioneer's
+auctioneers
+auctioning
+auctorial
+aud
+audacious
+audaciously
+audaciousness
+audacity
+aude
+auden
+audibility
+audible
+audibly
+audience
+audience's
+audiences
+audient
+audile
+auding
+audio
+audiofrequencies
+audiofrequency
+audiogenic
+audiogram
+audiogram's
+audiograms
+audiological
+audiologist
+audiologist's
+audiologists
+audiology
+audiometer
+audiometer's
+audiometers
+audiometric
+audiometry
+audiophile
+audiotape
+audiotypist
+audiovisual
+audiovisuals
+audiphone
+audit
+auditable
+audited
+auditing
+audition
+audition's
+auditioned
+auditioning
+auditions
+auditive
+auditor
+auditor's
+auditorium
+auditoriums
+auditors
+auditory
+audits
+audivi
+Audrey
+Audrey's
+Audubon
+Audubon's
+auer
+Auerbach
+Auerbach's
+Aug
+Augean
+augend
+Auger
+auger
+auger's
+augers
+aught
+augite
+augitic
+augment
+augmentable
+augmentation
+augmentations
+augmentative
+augmented
+augmenter
+augmenting
+augmentor
+augments
+Augsburg
+augur
+augurs
+augury
+august
+Augusta
+Augusta's
+Augustan
+Augustine
+Augustinian
+augustly
+augustness
+Augusts
+Augustus
+auk
+auklet
+auld
+aulic
+aulis
+aunt
+aunt's
+aunthood
+auntie
+auntlike
+auntly
+aunts
+aura
+aura's
+aural
+aurally
+aurangzeb
+aurar
+auras
+aureate
+aurelian
+Aurelius
+aureola
+aureole
+aureomycin
+aureus
+auric
+auricle
+auricula
+auricular
+auriculate
+auriferous
+Auriga
+Aurignacian
+auriol
+aurist
+aurochs
+aurora
+aurorae
+auroral
+aurorean
+aurous
+aurum
+Auschwitz
+auscultate
+auscultated
+auscultates
+auscultating
+auscultation
+auscultations
+auscultatory
+ausforming
+auslander
+ausonius
+auspicate
+auspice
+auspices
+auspicious
+auspiciously
+auspiciousness
+Aussie
+austen
+austenite
+austenitic
+Auster
+austere
+austerely
+austereness
+austerity
+Austerlitz
+Austin
+Austin's
+austral
+Australasia
+Australia
+Australia's
+Australian
+Australian's
+Australiana
+Australianism
+Australianize
+Australianizes
+Australians
+Australis
+australite
+australites
+Australoid
+australopithecine
+Australorp
+Austrasia
+Austria
+Austria's
+Austrian
+Austrian's
+Austrianize
+Austrianizes
+Austronesia
+Austronesian
+autacoid
+autarchy
+autarky
+autecious
+autecology
+auteur
+authentic
+authentically
+authenticate
+authenticated
+authenticates
+authenticating
+authentication
+authentications
+authenticator
+authenticators
+authenticity
+author
+author's
+authored
+authoress
+authorial
+authoring
+authoritarian
+authoritarianism
+authoritative
+authoritatively
+authoritativeness
+authorities
+authority
+authority's
+authorization
+authorization's
+authorizations
+authorize
+authorized
+authorizer
+authorizers
+authorizes
+authorizing
+authors
+authorship
+autism
+autistic
+auto
+auto's
+autoantibody
+autobahn
+autobiographer
+autobiographic
+autobiographical
+autobiographically
+autobiographies
+autobiography
+autobiography's
+autobus
+autocade
+autocatalysis
+autocatalytic
+autocephalous
+autochanger
+autochthon
+autochthonous
+autoclave
+autoclaved
+autocode
+autocoder
+autocollimator
+autocorrelate
+autocorrelated
+autocorrelates
+autocorrelating
+autocorrelation
+autocorrelations
+autocracies
+autocracy
+autocrat
+autocrat's
+autocratic
+autocratical
+autocratically
+autocrats
+autocross
+autocue
+autocueing
+autocycle
+autodial
+autodialer
+autodidact
+autodidactic
+autodyne
+autoecious
+autoeciously
+autoecism
+autoerotic
+autoerotically
+autoeroticism
+autoerotism
+autofluorescence
+autogamous
+autogamy
+autogenesis
+autogenetic
+autogenetically
+autogenic
+autogenous
+autogenously
+autogiro
+autograft
+autograph
+autographed
+autographic
+autographically
+autographing
+autographs
+autography
+autogyro
+Autoharp
+autohypnosis
+autohypnotic
+autoicous
+autoimmune
+autoimmunity
+autoimmunization
+autoinfection
+autoinoculation
+autointoxication
+autoionization
+autokinetic
+autoload
+autoloaded
+autoloader
+autoloading
+autoloads
+autologous
+autolycus
+autolysate
+autolyse
+autolysin
+autolysis
+autolytic
+automaker
+automanipulation
+automanipulative
+automat
+automata
+automatable
+automate
+automated
+automates
+automatic
+automatically
+automaticity
+automatics
+automating
+automation
+automatism
+automatist
+automatization
+automatization's
+automatizations
+automatize
+automatizes
+automaton
+automatons
+automobil
+automobile
+automobile's
+automobiles
+automobilist
+automorphic
+automorphism
+automotive
+autonavigator
+autonavigator's
+autonavigators
+autonomic
+autonomically
+autonomist
+autonomous
+autonomously
+autonomy
+autoparagraph
+autophyte
+autophytic
+autophytically
+autopilot
+autopilot's
+autopilots
+autopista
+autoplastic
+autoplastically
+autoplasty
+autopsied
+autopsies
+autopsy
+autoput
+autoradiogram
+autoradiogram's
+autoradiograms
+autoradiograph
+autoradiographic
+autoradiographs
+autoradiography
+autoregressive
+autorepeat
+autorepeating
+autorepeats
+autorotate
+autorotation
+autorotational
+autoroute
+autos
+autosexing
+autosomal
+autosomally
+autosome
+autostability
+autostart
+autostrada
+autosuggest
+autosuggestibility
+autosuggestible
+autosuggestion
+autotable
+autotelic
+autotetraploid
+autotetraploidy
+autotimer
+autotomic
+autotomize
+autotomous
+autotomy
+autotoxaemia
+autotoxin
+autotransformer
+autotransplant
+autotransplantation
+autotroph
+autotrophic
+autotrophically
+autotrophy
+autotype
+autoxidation
+autumn
+autumn's
+autumnal
+autumnally
+autumns
+autunite
+auvergne
+aux
+auxanometer
+auxesis
+auxetic
+auxetically
+auxil
+auxiliaries
+auxiliary
+auxin
+auxinic
+auxinically
+auxochrome
+auxotroph
+auxotrophic
+auxotrophy
+avadavat
+avagadro
+avail
+availabilities
+availability
+available
+availableness
+availably
+availed
+availer
+availers
+availing
+avails
+avalanche
+avalanched
+avalanches
+avalanching
+avaliable
+avalon
+avant
+Avar
+avarice
+avaricious
+avariciously
+avariciousness
+avast
+avatar
+avaunt
+Ave
+avebury
+avec
+aveiro
+avellan
+avellane
+avellaneda
+avenge
+avenged
+avenger
+avenges
+avenging
+avens
+aventail
+aventine
+Aventine
+aventino
+Aventino
+aventurine
+avenue
+avenue's
+avenues
+aver
+average
+averaged
+averagely
+averageness
+averages
+averaging
+averment
+averno
+Avernus
+averred
+averrer
+averring
+Averroism
+avers
+averse
+aversely
+averseness
+aversion
+aversion's
+aversions
+aversive
+avert
+averted
+averting
+averts
+Avery
+Avery's
+avesta
+Avestan
+aveyron
+avian
+avianize
+aviaries
+aviarist
+aviary
+aviate
+aviation
+aviations
+aviator
+aviator's
+aviators
+aviatress
+aviatrix
+avicenna
+aviculture
+aviculturist
+avid
+avidin
+avidity
+avidly
+avidness
+aviemore
+avifauna
+avifaunal
+avifaunally
+avifaunistic
+avigation
+avignon
+Avignon
+avionic
+avionics
+avirulent
+Avis
+avitaminosis
+avitaminotic
+Aviv
+avizandum
+avlona
+avocado
+avocados
+avocate
+avocation
+avocation's
+avocational
+avocationally
+avocations
+avocet
+Avogadro
+avoid
+avoidable
+avoidably
+avoidance
+avoided
+avoider
+avoiders
+avoiding
+avoids
+avoirdupois
+Avon
+avouch
+avouchment
+avow
+avowal
+avowed
+avowedly
+avower
+avows
+avulse
+avulsing
+avulsion
+avuncular
+avunculate
+await
+awaited
+awaiting
+awaits
+awake
+awaked
+awaken
+awakened
+awakener
+awakening
+awakens
+awakes
+awaking
+award
+awardable
+awarded
+awardee
+awarder
+awarders
+awarding
+awards
+aware
+awareness
+awash
+away
+awayness
+awe
+aweary
+aweather
+awed
+aweigh
+aweless
+awesome
+awesomely
+awesomeness
+awestricken
+awestruck
+awful
+awfully
+awfulness
+awheel
+awhile
+awhiles
+awhirl
+awing
+awkward
+awkwardly
+awkwardness
+awl
+awl's
+awless
+awls
+awlwort
+awn
+awning
+awning's
+awninged
+awnings
+awnless
+awoke
+awoken
+awry
+ax
+axal
+axe
+axed
+axel
+axenic
+axenically
+axer
+axers
+axes
+axial
+axiality
+axially
+axil
+axile
+axilla
+axillar
+axillary
+axing
+axiological
+axiologically
+axiology
+axiom
+axiom's
+axiomatic
+axiomatically
+axiomatics
+axiomatization
+axiomatization's
+axiomatizations
+axiomatize
+axiomatized
+axiomatizes
+axiomatizing
+axioms
+axion
+axion's
+axions
+axis
+axisymmetric
+axisymmetrical
+axisymmetrically
+axisymmetry
+axle
+axle's
+axles
+axletree
+axman
+Axminster
+axolotl
+axolotl's
+axolotls
+axon
+axon's
+axons
+axseed
+axum
+ayacucho
+ayah
+ayahuasca
+aycliffe
+aydin
+aye
+ayer
+ayers
+ayes
+ayesha
+ayin
+Aylesbury
+Aymara
+ayr
+Ayrshire
+ayub
+ayurveda
+ayutthaya
+AZ
+azalea
+azalea's
+azaleas
+azan
+azathioprine
+azazel
+azbine
+azeotropic
+Azerbaijan
+Azerbaijan's
+Azerbaijani
+azide
+azido
+azikiwe
+Azilian
+azimuth
+azimuth's
+azimuthal
+azimuthally
+azimuths
+azine
+aznavour
+azo
+azobenzene
+azoic
+azole
+azonal
+Azores
+azote
+azotemia
+azoth
+azotic
+azotization
+azotize
+azotized
+azotizes
+azotizing
+Azotobacter
+Azov
+Azrael
+Aztec
+Aztecan
+azure
+azurite
+azusa
+baa
+Baal
+Baalbek
+baas
+Baaskap
+Bab
+baba
+babar
+babassu
+babbage
+babbitt
+babbitted
+babbitting
+babbitts
+babble
+babbled
+babblement
+babbler
+babbles
+babbling
+Babcock
+babe
+babe's
+Babel
+Babel's
+Babelize
+Babelizes
+babes
+babeuf
+Babi
+babiche
+babied
+babies
+babirusa
+Babism
+baboon
+baboonish
+babu
+babul
+babur
+babushka
+baby
+baby's
+babyhood
+babying
+babyish
+Babylon
+babylonia
+Babylonian
+Babylonians
+Babylonize
+Babylonizes
+babysat
+babysit
+babysits
+babysitter
+babysitters
+babysitting
+baccalaureate
+baccarat
+baccate
+Bacchae
+bacchanal
+bacchanalia
+bacchanalian
+bacchant
+bacchante
+bacchantes
+bacchantic
+bacchic
+bacchius
+Bacchus
+bacciferous
+bacciform
+baccivorous
+baccy
+Bach
+Bach's
+Bacharach
+bachelor
+bachelor's
+bachelorhood
+bachelorize
+bachelorizes
+bachelors
+baci
+bacillar
+bacillary
+bacilli
+bacillus
+bacitracin
+back
+backache
+backache's
+backaches
+backarrow
+backbench
+backbencher
+backbenchers
+backbite
+backbiter
+backblocks
+backboard
+backbone
+backbone's
+backbones
+backbreaker
+backbreaking
+backchaining
+backchat
+backcloth
+backcomb
+backcountry
+backcourt
+backcourtman
+backcross
+backdate
+backdated
+backdates
+backdating
+backdrop
+backdrop's
+backdrops
+backed
+backend
+backends
+backer
+backers
+backfield
+backfill
+backfilled
+backfilling
+backfills
+backfire
+backfired
+backfires
+backfiring
+backgammon
+backgammon's
+background
+background's
+backgrounds
+backhand
+backhanded
+backhandedly
+backhander
+backhaus
+backhoe
+backhouse
+backing
+backlash
+backlasher
+backless
+backlog
+backlog's
+backlogs
+backmost
+backorder
+backpack
+backpack's
+backpacker
+backpackers
+backpacks
+backpedal
+backplane
+backplane's
+backplanes
+backplate
+backplates
+backrest
+backs
+backsaw
+backscatter
+backscattered
+backscattering
+backscatters
+backscratcher
+backseat
+backset
+backsheesh
+backside
+backslap
+backslapper
+backslash
+backslashed
+backslashes
+backslashing
+backslide
+backslider
+backspace
+backspaced
+backspaces
+backspacing
+backspin
+backstabber
+backstabbing
+backstage
+backstairs
+backstay
+backstitch
+backstitched
+backstitches
+backstitching
+backstop
+backstreet
+backstretch
+backstroke
+backswept
+backswing
+backsword
+backtrack
+backtracked
+backtracker
+backtrackers
+backtracking
+backtracks
+backup
+backups
+backus
+backward
+backwardation
+backwardly
+backwardness
+backwards
+backwash
+backwater
+backwater's
+backwaters
+backwood
+backwoods
+backwoodsman
+backyard
+backyard's
+backyards
+baclava
+bacolod
+bacon
+baconer
+baconize
+baconizes
+Bacquier
+bacteraemia
+bacteria
+bacterial
+bacterially
+bactericidal
+bactericidally
+bactericide
+bacterin
+bacteriological
+bacteriology
+bacteriolysis
+bacteriophage
+bacteriostasis
+bacterium
+bacterize
+bacteroid
+bactria
+Bactrian
+baculiform
+baculum
+bad
+badajoz
+badalona
+badderlocks
+baddie
+bade
+baden
+Baden
+Baden's
+badge
+badged
+badger
+badger's
+badgered
+badgering
+badgers
+badges
+badging
+badinage
+badland
+badlands
+badly
+badman
+badmen
+badminton
+badness
+badoglio
+bads
+baeda
+Baedeker
+bael
+baeyer
+baez
+Baffin
+baffle
+baffled
+bafflement
+baffler
+bafflers
+baffles
+baffling
+bafflingly
+bag
+bag's
+Baganda
+bagasse
+bagatelle
+bagatelle's
+bagatelles
+Bagdad
+bagehot
+bagel
+bagel's
+bagels
+bagful
+baggage
+baggageman
+baggagemen
+bagged
+bagger
+bagger's
+baggers
+baggier
+baggies
+baggily
+bagginess
+bagging
+baggy
+bagh
+Baghdad
+baghlan
+bagie
+bagley
+bagman
+bagnio
+bagpipe
+bagpipe's
+bagpiper
+bagpipes
+Bagrodia
+Bagrodia's
+Bagrodias
+bags
+baguette
+baguio
+bagwash
+bagwig
+bagworm
+bah
+bahadur
+Bahai
+Bahaism
+Bahama
+Bahamas
+bahasa
+bahia
+Bahrain
+Bahrein
+Bahrein's
+baht
+bahuvrihi
+baikal
+bail
+bailable
+baile
+bailee
+baileefe
+bailer
+Bailey
+Baileys
+bailie
+bailiff
+bailiff's
+bailiffs
+bailiffship
+bailing
+bailiwick
+bailly
+bailment
+bailor
+bailsman
+baines
+bainite
+Bairam
+Baird
+Baird's
+bairn
+bairnsfather
+bait
+baited
+baiter
+baiting
+baits
+baize
+Baja
+baja
+bajan
+bake
+bakeapple
+baked
+bakehouse
+Bakelite
+Baker
+baker
+bakeries
+bakers
+Bakersfield
+bakery
+bakery's
+bakes
+bakeshop
+bakewell
+Bakhtiari
+baking
+bakings
+baklava
+bakra
+baksheesh
+bakst
+Baku
+bakunin
+Bala
+Balaam
+balaclava
+Balakirev
+Balaklava
+balalaika
+balalaika's
+balalaikas
+balance
+balanced
+balancedness
+balancer
+balancers
+balances
+balanchine
+balancing
+balas
+balata
+Balaton
+balbo
+Balboa
+balbriggan
+balconied
+balconies
+balcony
+balcony's
+bald
+balder
+balderdash
+baldhead
+baldheaded
+balding
+baldish
+baldly
+baldmoney
+baldness
+baldpate
+baldric
+Baldwin
+baldy
+bale
+Balearic
+baled
+baleen
+balefire
+baleful
+balefully
+balefulness
+balenciaga
+baler
+balers
+bales
+Balfour
+Bali
+balibuntal
+balikpapan
+Balinese
+baling
+baliol
+balk
+Balkan
+Balkan's
+balkanization
+Balkanization
+Balkanization's
+Balkanizations
+balkanize
+Balkanize
+balkanized
+Balkanizes
+balkanizing
+Balkans
+balked
+balker
+balkh
+balkhash
+balkier
+balkiness
+balking
+Balkis
+balkline
+balks
+balky
+ball
+ballad
+ballad's
+ballade
+balladeer
+balladic
+balladist
+balladize
+balladizes
+balladmonger
+balladry
+ballads
+ballance
+ballarat
+Ballard
+Ballards
+ballast
+ballast's
+ballasts
+ballcarrier
+balled
+baller
+ballerina
+ballerina's
+ballerinas
+ballers
+ballet
+ballet's
+balletic
+balletomane
+balletomania
+ballets
+ballfield
+ballfield's
+ballfields
+ballflower
+ballgown
+ballgown's
+balling
+balliol
+ballista
+ballistic
+ballistically
+ballistics
+ballocks
+ballonet
+balloon
+ballooned
+ballooner
+ballooners
+ballooning
+balloonist
+balloons
+ballot
+ballot's
+balloted
+balloter
+balloting
+ballots
+ballottement
+ballplayer
+ballplayer's
+ballplayers
+ballroom
+ballroom's
+ballrooms
+balls
+ballyhoo
+ballyhooey
+balm
+balm's
+Balmacaan
+balmain
+balmier
+balmily
+balminess
+Balmoral
+balms
+balmung
+balmy
+balneal
+balneology
+baloney
+balpa
+balsa
+balsam
+balsamic
+balsamiferous
+balsaminaceous
+balsamize
+balsamizes
+balsams
+Balt
+Balthazar
+Baltic
+Baltic's
+Baltimore
+Baltimorean
+Baltsa
+Baluchi
+Baluchistan
+baluster
+balustrade
+balustrade's
+balustrades
+Balzac
+bam
+Bamako
+Bambara
+Bamberg
+Bamberger
+Bambi
+bambino
+bamboo
+bamboos
+bamboozle
+bamboozled
+bamboozlement
+bamboozles
+bamboozling
+ban
+ban's
+Banach
+banal
+banality
+banally
+banana
+banana's
+bananas
+banaras
+banat
+banausic
+Banbury
+Banbury's
+banc
+Bancroft
+bancroft
+band
+Banda
+bandage
+bandaged
+bandager
+bandages
+bandaging
+bandaid
+bandana
+bandanna
+bandaranaike
+bandbox
+bandeau
+bandeaux
+banded
+bander
+banderilla
+banderillero
+bandgap
+bandh
+bandicoot
+bandied
+bandies
+banding
+bandit
+bandit's
+banditry
+bandits
+banditti
+bandjarmasin
+bandleader
+bandmaster
+bandobust
+bandoleer
+bandoleers
+bandolier
+bandoline
+bandore
+bandpass
+bands
+bandsaw
+bandsman
+bandspreading
+bandstand
+bandstand's
+bandstands
+bandstop
+bandung
+bandwagon
+bandwagon's
+bandwagons
+bandwidth
+bandwidths
+bandy
+bandying
+bane
+baneberry
+baneful
+banefully
+Banff
+bang
+bangalore
+banged
+banger
+banging
+bangish
+bangka
+bangkok
+Bangladesh
+Bangladesh's
+bangle
+bangle's
+bangles
+Bangor
+bangs
+bangtail
+Bangui
+bangweulu
+banian
+baning
+banish
+banished
+banisher
+banishes
+banishing
+banishment
+banister
+banister's
+banisters
+banja
+banjermasin
+banjo
+banjo's
+banjoes
+banjoist
+banjos
+banjul
+bank
+Bank
+banka
+bankable
+bankbook
+bankbooks
+banked
+banker
+bankers
+banket
+banking
+banknote
+banknotes
+bankroll
+bankroller
+bankrupt
+bankruptcies
+bankruptcy
+bankruptcy's
+bankrupted
+bankrupting
+bankrupts
+banks
+bankside
+banned
+banner
+banner's
+banneret
+bannerette
+bannerol
+banners
+banning
+bannister
+bannisters
+bannock
+Bannockburn
+banns
+banquet
+banqueted
+banqueter
+banqueting
+banquetings
+banquets
+banquette
+bans
+bansela
+banshee
+banshee's
+banshees
+banstead
+bant
+bantam
+bantamize
+bantamizes
+bantamweight
+banter
+bantered
+banterer
+bantering
+banteringly
+banters
+banting
+bantling
+Bantoid
+Bantu
+Bantu's
+Bantus
+Bantustan
+Banville
+banyan
+banzai
+baobab
+bap
+baptism
+baptism's
+baptismal
+baptismally
+baptisms
+baptist
+baptist's
+Baptiste
+baptistery
+baptistries
+baptistry
+baptistry's
+baptists
+baptizable
+baptizable's
+baptizables
+baptize
+baptized
+baptizement
+baptizement's
+baptizements
+baptizer
+baptizers
+baptizes
+baptizing
+bar
+bar's
+Barabbas
+baranof
+Barathea
+baraza
+barb
+Barbados
+Barbara
+barbarian
+barbarian's
+barbarianism
+barbarianize
+barbarianizes
+barbarians
+barbaric
+barbarically
+barbarism
+barbarities
+barbarity
+barbarization
+barbarize
+barbarized
+barbarizes
+barbarizing
+Barbarossa
+barbarous
+barbarously
+barbarousness
+Barbary
+barbate
+barbe
+barbecue
+barbecued
+barbecuer
+barbecues
+barbecuing
+barbed
+barbedness
+barbel
+barbell
+barbell's
+barbellate
+barbells
+barber
+Barber
+barbered
+barbering
+barberry
+barbers
+barbershop
+barbet
+barbette
+barbican
+barbicel
+Barbirolli
+barbital
+barbitone
+barbiturate
+barbiturates
+barbituric
+barbizon
+Barbour
+Barbour's
+barbs
+Barbuda
+barbudo
+barbudos
+barbule
+barbusse
+barbwire
+barca
+barcarole
+barce
+Barcelona
+barchart
+barcharts
+Barclay
+Barcoo
+bard
+bard's
+Bardolatry
+bardot
+bards
+bare
+bareback
+barebacked
+bared
+barefaced
+barefacedly
+barefacedness
+barefoot
+barefooted
+barehanded
+bareheaded
+bareheadedness
+bareilly
+bareknuckle
+bareknuckled
+barely
+Barenboim
+bareness
+barents
+barer
+bares
+baresark
+barest
+barflies
+barfly
+barfly's
+bargain
+bargained
+bargainer
+bargaining
+bargains
+barge
+bargeboard
+barged
+bargee
+bargeman
+bargepole
+barges
+barging
+Barhop
+Bari
+bariatrician
+bariatrics
+baric
+barilla
+baring
+barite
+baritonal
+baritone
+baritone's
+baritones
+barium
+bark
+barked
+barkeep
+barkeeper
+barkentine
+barker
+barkers
+barkhan
+barkier
+barking
+barkless
+barks
+barky
+barletta
+barley
+barleycorn
+Barlow
+Barlow's
+barm
+barmaid
+barman
+Barmecide
+barmier
+barmy
+barn
+barn's
+Barnabas
+barnacle
+barnacled
+Barnard
+barnardo
+barnaul
+Barnes
+Barnet
+Barnett
+Barnett's
+Barney
+barnful
+Barnhard
+Barnhard's
+barns
+barnsful
+barnsley
+barnstorm
+barnstormed
+barnstormer
+barnstorming
+barnstorms
+barnum
+Barnum
+barny
+barnyard
+barnyard's
+barnyards
+barocchio
+baroda
+barogram
+barogram's
+barograms
+barograph
+barographic
+baroja
+barometer
+barometer's
+barometers
+barometric
+barometrical
+barometrically
+barometry
+baron
+baron's
+baronage
+baroness
+baronet
+baronetage
+baronetcy
+barong
+baronial
+baronies
+baronize
+baronizes
+barons
+barony
+barony's
+baroque
+baroquely
+baroqueness
+baroscope
+barostat
+Barotse
+barouche
+barozzi
+barque
+barquentine
+barquisimeto
+Barr
+Barr's
+barrack
+barracker
+barracks
+barracoon
+barracouta
+barracuda
+barracuda's
+barracudas
+barrage
+barrage's
+barraged
+barrages
+barraging
+barramunda
+barramundi
+barranca
+barranco
+barranquilla
+barrater
+barrator
+barratry
+barrault
+barre
+barred
+barrel
+barrel's
+barreled
+barrelful
+barrelhouse
+barreling
+barrels
+barrelsful
+barren
+barrenness
+barrens
+barrenwort
+barret
+Barrett
+Barrett's
+barrette
+barrette's
+barrettes
+barricade
+barricade's
+barricades
+barrie
+barrier
+barrier's
+barriers
+barring
+barringer
+Barrington
+Barrington's
+barrio
+barrister
+barristers
+barron
+Barron
+barroom
+barrooms
+barros
+barrow
+barrows
+Barry
+Barry's
+Barrymore
+Barrymores
+bars
+Barsac
+barstool
+barstool's
+barstools
+Barstow
+Bart
+bartend
+bartender
+bartender's
+bartenders
+barter
+bartered
+barterer
+bartering
+barters
+Barth
+Bartholomew
+bartizan
+Bartlett
+Bartok
+Bartoletti
+bartolommeo
+Barton
+Barton's
+barware
+barycentre
+barycentric
+barye
+baryon
+baryon's
+baryonic
+baryons
+barysphere
+baryta
+barytes
+barytone
+bas
+basal
+basally
+basalt
+basaltic
+basaltware
+bascinet
+Bascom
+bascom
+bascule
+base
+baseball
+baseball's
+baseballs
+baseband
+baseboard
+baseboard's
+baseboards
+baseborn
+baseburner
+based
+Basel
+baseless
+baselevel
+baseline
+baseline's
+baselines
+basely
+baseman
+basemen
+basement
+basement's
+basementless
+basements
+baseness
+basenji
+baseplate
+basepoint
+baser
+baserunning
+bases
+basest
+bash
+bashan
+bashaw
+bashed
+basher
+bashes
+bashful
+bashfully
+bashfulness
+bashibazouk
+bashing
+Bashkir
+basic
+basically
+basicity
+basics
+basidial
+basidiomycete
+basidiomycetes
+basidiomycetous
+basidiospore
+basidiosporous
+basidium
+basie
+Basie
+basification
+basifixed
+basify
+basil
+basilan
+basilar
+basilary
+basildon
+basileis
+Basilian
+basilica
+basilican
+basilicata
+basilisk
+basin
+basin's
+basinal
+basined
+basinet
+basing
+Basingstoke
+basins
+basipetal
+basipetally
+basis
+bask
+basked
+Baskerville
+basket
+basket's
+basketball
+basketball's
+basketballs
+basketful
+basketlike
+basketry
+baskets
+basketwork
+basking
+basle
+basler
+baslot
+basophil
+basophile
+basophilia
+basophilic
+basotho
+Basque
+Basque's
+bass
+bass's
+Bassas
+bassein
+bassenthwaite
+basses
+basset
+basseterre
+Bassett
+bassi
+bassinet
+bassinet's
+bassinets
+bassis
+bassist
+basso
+bassoon
+bassoon's
+bassoonist
+bassoonist's
+bassoonists
+bassoons
+basswood
+bast
+bastard
+bastard's
+bastardization
+bastardization's
+bastardizations
+bastardize
+bastardized
+bastardizes
+bastardizing
+bastardly
+bastardry
+bastards
+bastardy
+baste
+basted
+baster
+bastes
+bastia
+Bastianini
+bastile
+bastille
+bastinado
+basting
+bastion
+bastion's
+bastioned
+bastions
+bastnaesite
+bastogne
+Basutoland
+bat
+bat's
+Bataan
+batangas
+batata
+Batavia
+batboy
+batch
+batched
+Batchelder
+Batchelder's
+batcher
+batches
+batching
+bate
+bateau
+bated
+bateleur
+Bateman
+Bateman's
+bater
+bates
+batesian
+batfish
+batfowl
+bath
+bathe
+bathed
+bather
+bathers
+bathes
+bathetic
+bathhouse
+bathhouses
+bathing
+batholith
+bathometer
+bathometer's
+bathometers
+Bathonian
+bathos
+bathrobe
+bathrobe's
+bathrobes
+bathroom
+bathroom's
+bathroomed
+bathrooms
+baths
+bathsheba
+bathtub
+bathtub's
+bathtubful
+bathtubs
+Bathurst
+Bathurst's
+bathwater
+bathyal
+bathymetry
+bathyscaph
+bathysphere
+batik
+bating
+batista
+Batista
+batiste
+batley
+batman
+baton
+baton's
+batons
+Bator
+batrachian
+batrachotoxin
+bats
+batsman
+batt
+battailous
+battalia
+battalion
+battalion's
+battalions
+batteau
+batted
+Battelle
+Battelle's
+battels
+battement
+batten
+Battenburg
+battened
+battening
+battens
+batter
+battered
+batteries
+battering
+batters
+battersea
+battery
+battery's
+battier
+battik
+battiness
+batting
+Battle
+battle
+battled
+battledore
+battlefield
+battlefield's
+battlefields
+battlefront
+battlefront's
+battlefronts
+battleground
+battleground's
+battlegrounds
+battlement
+battlement's
+battlemented
+battlements
+battlepiece
+battler
+battlers
+battles
+battleship
+battleship's
+battleships
+battlewagon
+battling
+battu
+battue
+batty
+batum
+batwing
+batwings
+batwoman
+baubee
+bauble
+bauble's
+baubles
+bauchi
+baucis
+baud
+Baudelaire
+Baudo
+baudouin
+baudrons
+bauds
+Bauer
+Bauhaus
+Bauhinia
+baulk
+baulked
+baulking
+baulks
+baum
+Bausch
+bautzen
+bauxite
+bauxitic
+Bavaria
+Bavarian
+bawbee
+bawcock
+bawd
+bawden
+bawdier
+bawdily
+bawdiness
+bawdry
+bawdy
+bawdyhouse
+bawdyhouses
+bawl
+bawled
+bawler
+bawling
+bawls
+Bax
+Baxter
+Baxter's
+bay
+bayadere
+bayaderka
+bayanihan
+Bayard
+bayberries
+bayberry
+Bayda
+bayed
+bayern
+Bayesian
+bayeux
+baying
+bayle
+Baylor
+bayly
+bayonet
+bayonet's
+bayoneted
+bayoneting
+bayonets
+Bayonne
+bayou
+bayou's
+bayous
+Bayport
+Bayport's
+Bayreuth
+bays
+baysian
+baywood
+bazaar
+bazaar's
+bazaars
+bazon
+bazoo
+bazooka
+bazookas
+BBC
+BCD
+BCPL
+bdellium
+be
+bea
+beach
+beachboy
+beachboys
+beachcomb
+beachcomber
+beachcombers
+beached
+beaches
+beachfront
+beachhead
+beachhead's
+beachheads
+beachie
+beaching
+beachside
+beachwear
+beachy
+beacon
+beacon's
+beaconed
+beaconing
+beacons
+Beaconsfield
+bead
+beaded
+beading
+beadle
+beadle's
+beadledom
+beadles
+beadroll
+beads
+beadsman
+beadwork
+beadworker
+beady
+beagle
+beagle's
+beagles
+beak
+beaked
+beaker
+beakers
+beaks
+beale
+beall
+beam
+beame
+beamed
+beamer
+beamers
+beaming
+beamish
+beamishly
+beams
+beamy
+bean
+beanbag
+beanbag's
+beanbags
+beanball
+beaned
+beaner
+beaners
+beanery
+beanfeast
+beanie
+beaning
+beano
+beanpole
+beans
+bear
+bearability
+bearable
+bearably
+bearbaiting
+bearberry
+beard
+bearded
+beardedness
+beardless
+beardown
+beards
+Beardsley
+Beardsley's
+bearer
+bearers
+bearing
+bearings
+bearish
+bearishly
+bearishness
+bears
+bearskin
+beast
+beastie
+beasties
+beastings
+beastlier
+beastliness
+beastly
+beasts
+beasty
+beat
+beatable
+beatably
+beaten
+beater
+beaters
+beatie
+beatific
+beatifically
+beatification
+beatify
+beating
+beatings
+beatitude
+beatitude's
+beatitudes
+beatles
+beatless
+beatnik
+beatnik's
+beatniks
+Beatrice
+beats
+beatty
+beau
+beau's
+beauchamps
+Beauchamps
+beauclerk
+Beaufort
+beauharnais
+Beaujolais
+beaumarchais
+Beaumont
+Beaune
+Beauregard
+beaus
+beaut
+beauteous
+beauteously
+beauteousness
+beautician
+beauticians
+beauties
+beautification
+beautifications
+beautified
+beautifier
+beautifiers
+beautifies
+beautiful
+beautifully
+beautifulness
+beautify
+beautifying
+beauty
+beauty's
+beauvais
+beauvoir
+beaux
+beaver
+beaver's
+beaverboard
+beaverbrook
+beaverize
+beaverizes
+beavers
+Beaverton
+beaverton
+bebeerine
+bebel
+Bebington
+bebop
+bebopper
+becalm
+becalmed
+becalming
+becalms
+became
+because
+beccafico
+bechance
+bechet
+Bechtel
+Bechuana
+Bechuanaland
+beck
+Beckenham
+becket
+beckett
+Beckford
+Beckman
+Beckman's
+Beckmann
+beckon
+beckoned
+beckoning
+beckons
+Becky
+beclamor
+beclamored
+beclamoring
+beclamors
+becloud
+become
+becomes
+becoming
+becomingly
+becquerel
+becudgeled
+becudgeling
+bed
+bed's
+bedabble
+bedaub
+bedaubing
+bedazzle
+bedazzled
+bedazzlement
+bedazzles
+bedazzling
+bedbug
+bedbug's
+bedbugs
+bedchamber
+bedclothes
+beddable
+bedded
+bedder
+bedder's
+bedders
+bedding
+bede
+bedeck
+bedesman
+bedevil
+bedeviled
+bedeviling
+bedevilment
+bedevils
+bedew
+bedfast
+bedfellow
+Bedford
+Bedfordshire
+bedight
+bedim
+bedimmed
+bedimming
+bedivere
+bedizen
+bedlam
+bedlamite
+bedlamize
+bedlamizes
+Bedlington
+bedmate
+bedmate's
+bedmates
+bedouin
+bedpan
+bedpan's
+bedpans
+bedplate
+bedpost
+bedpost's
+bedposts
+bedraggle
+bedraggled
+bedrail
+bedrid
+bedridden
+bedriveled
+bedriveling
+bedrock
+bedrock's
+bedroll
+bedroom
+bedroom's
+bedroomed
+bedrooms
+beds
+bedside
+bedsit
+bedsits
+bedsitter
+bedsore
+bedspaces
+bedspread
+bedspread's
+bedspreads
+bedspring
+bedspring's
+bedsprings
+bedstead
+bedstead's
+bedsteads
+bedstraw
+bedtime
+beduin
+beduins
+bedwarmer
+bedwetting
+bedworth
+bee
+beeb
+Beebe
+Beebe's
+beebread
+beech
+Beecham
+Beecham's
+beechen
+beecher
+beechnut
+beechwood
+beef
+beefburger
+beefcake
+beefeater
+beefed
+beefer
+beefers
+beefier
+beefing
+beefs
+beefsteak
+beefwood
+beefy
+beehive
+beehive's
+beehives
+beekeeper
+beekeeping
+beelike
+beeline
+Beelzebub
+Beelzebub's
+been
+beens
+beento
+beep
+beeped
+beeper
+beeping
+beeps
+beer
+beerbohm
+beerier
+beers
+beersheba
+beery
+bees
+beestings
+beeswax
+beeswing
+beet
+beet's
+beetfly
+Beethoven
+Beethoven's
+beetle
+beetle's
+beetled
+beetles
+beetling
+beetroot
+beetroots
+beets
+beeves
+beezer
+befall
+befallen
+befalling
+befalls
+befell
+befit
+befit's
+befits
+befitted
+befitting
+befittingly
+befog
+befogged
+befogging
+befogs
+befoh
+befool
+before
+beforehand
+beforehandedness
+beforeimage
+beforeimages
+beforetime
+befoul
+befouled
+befouling
+befouls
+befriend
+befriended
+befriending
+befriends
+befuddle
+befuddled
+befuddlement
+befuddles
+befuddling
+beg
+begad
+began
+begat
+beget
+begets
+begetter
+begetting
+beggar
+beggared
+beggaring
+beggarliness
+beggarly
+beggars
+beggarweed
+beggary
+begged
+begging
+Beghard
+begin
+beginner
+beginner's
+beginners
+beginning
+beginning's
+beginnings
+begins
+begird
+begone
+begonia
+begorra
+begot
+begotten
+begrime
+begrimed
+begriming
+begrudge
+begrudged
+begrudger
+begrudges
+begrudging
+begrudgingly
+begs
+beguile
+beguiled
+beguilement
+beguiler
+beguiles
+beguiling
+beguilingly
+Beguin
+beguine
+begum
+begun
+behalf
+behan
+behave
+behaved
+behaver
+behaves
+behaving
+behavior
+behavior's
+behavioral
+behaviorally
+behaviored
+behaviorism
+behaviorism's
+behaviorisms
+behaviorist
+behaviorist's
+behavioristic
+behavioristically
+behavioristics
+behaviorists
+behaviors
+behead
+beheading
+beheld
+behemoth
+behemothic
+behemoths
+behest
+behind
+behindhand
+behistun
+behold
+beholden
+beholder
+beholders
+beholding
+beholds
+behoof
+behoove
+behoove's
+behooved
+behooves
+behooving
+behooving's
+behoovingly
+behoovings
+Behrens
+beiderbecke
+beige
+beigel
+beigy
+Beijing
+being
+beings
+beira
+Beirut
+bejabers
+bejewel
+bejeweled
+bejeweling
+bel
+Bela
+Bela's
+belabor
+belabor's
+belabored
+belaboring
+belabors
+belah
+belate
+belated
+belatedly
+belatedness
+belaud
+belay
+belayed
+belaying
+belays
+belch
+belched
+belches
+belching
+beldam
+beldame
+beleaguer
+belemnite
+Belfast
+belfort
+belfries
+belfry
+belfry's
+belga
+Belgae
+belge
+Belgian
+Belgian's
+Belgians
+Belgium
+Belgium's
+Belgrade
+Belgravia
+Belial
+belie
+belied
+belief
+belief's
+beliefs
+belier
+belies
+believability
+believable
+believably
+believe
+believed
+believer
+believers
+believes
+believing
+belike
+Belisarius
+Belisha
+belittle
+belittled
+belittlement
+belittler
+belittles
+belittling
+belitung
+belive
+Belize
+bell
+bell's
+Bella
+belladonna
+Bellamy
+Bellamy's
+bellarmine
+Bellatrix
+bellay
+bellbird
+bellboy
+bellboy's
+bellboys
+belle
+belle's
+belleau
+Belleek
+Bellerophon
+belles
+belletrist
+Belleville
+bellflower
+bellhop
+bellhop's
+bellhops
+bellicose
+bellicosely
+bellicoseness
+bellicosity
+bellied
+bellies
+belligerence
+belligerency
+belligerent
+belligerent's
+belligerently
+belligerents
+Bellingham
+Bellingham's
+Bellingshausen
+Bellini
+Bellini's
+bellinzona
+bellman
+bellmen
+Bellmouth
+belloc
+Bellona
+Bellovin
+Bellovin's
+bellow
+bellowed
+bellowing
+bellows
+bellpull
+bells
+bellum
+bellwether
+bellwether's
+bellwethers
+Bellwood
+bellwood
+bellwort
+belly
+belly's
+bellyache
+bellyacher
+bellyaching
+bellyband
+bellybutton
+bellyful
+bellyfull
+bellying
+Belmondo
+Belmont
+belmopan
+Beloit
+belong
+belonged
+belonging
+belongingness
+belongings
+belongs
+Belorussia
+Belostok
+belove
+beloved
+belovo
+below
+belowground
+Belsen
+Belshazzar
+Belshazzar's
+belt
+Beltane
+belted
+belting
+beltless
+Belton
+belton
+belts
+Beltsville
+beltway
+beluga
+beluga's
+Belushi
+Belushi's
+belvedere
+bely
+belying
+BEMA
+bemadden
+bemaddening
+beman
+Bemba
+bemean
+bemedaled
+bemire
+bemoan
+bemoaned
+bemoaning
+bemoans
+bemock
+bemuse
+bemused
+bemusedly
+bemusement
+Ben
+Ben's
+Benackova
+benadryl
+Benares
+benares
+bench
+benched
+bencher
+benches
+benching
+benchmar
+benchmark
+benchmark's
+benchmarking
+benchmarks
+bend
+bendable
+benday
+bended
+bendel
+bender
+benders
+bendigo
+bending
+Bendix
+bends
+bendy
+beneath
+benedicite
+Benedict
+Benedict's
+Benedictine
+Benedictine's
+benediction
+benediction's
+benedictions
+benedictory
+Benedictus
+Benedikt
+benefaction
+benefactor
+benefactor's
+benefactors
+benefactress
+benefic
+benefice
+beneficence
+beneficences
+beneficent
+beneficently
+beneficial
+beneficially
+beneficialness
+beneficiaries
+beneficiary
+beneficiate
+beneficiation
+benefit
+benefited
+benefiter
+benefiters
+benefiting
+benefits
+benefitted
+benefitting
+Benelux
+Benelux's
+benempt
+benevento
+benevolence
+benevolent
+benevolently
+benevolentness
+benfleet
+Bengal
+Bengal's
+Bengali
+Bengali's
+bengaline
+benghazi
+benguela
+Beni
+benight
+benighted
+benightedly
+benightedness
+benign
+benignancy
+benignant
+benignantly
+benignity
+benignly
+Benin
+Benison
+Benjamin
+Benne
+Bennet
+Bennett
+Bennington
+Benny
+benoni
+Benson
+bent
+benthal
+Bentham
+benthic
+benthonic
+benthos
+bentinck
+Bentley
+Bentleys
+Benton
+Benton's
+bentonite
+bentonitic
+bents
+bentwood
+benue
+benumb
+Benz
+benzaldehyde
+Benzedrine
+Benzedrine's
+benzene
+benzidine
+benzine
+benzoate
+benzocaine
+benzofuran
+benzoic
+benzoin
+benzol
+benzophenone
+benzoquinone
+benzoyl
+benzyl
+Beograd
+Beowulf
+bepaint
+beplaster
+bequeath
+bequeathal
+bequeathed
+bequeathes
+bequeathing
+bequest
+bequest's
+bequests
+berar
+berate
+berated
+berates
+berating
+Berber
+berbera
+berberidaceous
+berberine
+Berberis
+berbice
+Berbie
+berceuse
+berceuses
+Berchtesgaden
+Berdichev
+Berdyayev
+Berea
+Berea's
+bereave
+bereaved
+bereavement
+bereavements
+bereaves
+bereaving
+bereft
+Berenices
+Berenson
+Beresford
+Beresford's
+beret
+beret's
+berets
+Berezina
+Berezniki
+Berg
+berg
+Bergama
+Bergamo
+bergamot
+Berganza
+bergdama
+Bergen
+bergen
+Bergen's
+Berger
+berger
+bergerac
+bergius
+Bergland
+Bergland's
+Berglund
+Berglund's
+Bergman
+Bergman's
+Bergonzi
+bergs
+Bergson
+Bergsonism
+Bergsten
+Bergsten's
+Bergstrom
+Bergstrom's
+beria
+beribbon
+beribboned
+beriberi
+bering
+Beringer
+beringer
+berio
+beriosova
+berk
+Berkeleian
+Berkeleianism
+Berkeley
+Berkeley's
+berkelium
+Berkowitz
+berks
+Berkshire
+Berkshires
+berley
+berlichingen
+Berlin
+Berlin's
+Berliner
+Berliners
+berlinguer
+Berlinize
+Berlinizes
+Berlioz
+Berlitz
+berm
+Berman
+Berman's
+bermejo
+bermondsey
+Bermuda
+Bermuda's
+Bern
+bernadette
+Bernadine
+bernadotte
+Bernard
+bernardine
+Bernardine
+Bernardino
+Bernardino's
+Bernardo
+Bernardo's
+berne
+Bernese
+Bernet
+Bernet's
+Bernhard
+bernhardt
+Bernice
+bernicle
+Bernie
+Berniece
+bernina
+Bernini
+Bernoulli
+Bernstein
+Berra
+berretta
+berried
+berries
+berry
+berry's
+berrying
+berrylike
+bersagliere
+berseem
+berserk
+berserker
+Bert
+berteros
+berth
+Bertha
+berthed
+berthing
+berthings
+berths
+Bertie
+bertillon
+berto
+bertolucci
+Bertram
+Bertram's
+Bertrand
+Berwick
+Berwick's
+beryl
+beryllium
+berzelius
+bes
+beseech
+beseeches
+beseeching
+beseechingly
+beseem
+beset
+besetment
+besets
+besetting
+beshrew
+beside
+besides
+besiege
+besieged
+besieger
+besiegers
+besieging
+besmear
+besmirch
+besmirched
+besmirches
+besmirching
+besom
+besot
+besotted
+besotter
+besotting
+besought
+bespangle
+bespatter
+bespeak
+bespeaks
+bespectacled
+bespoke
+bespoken
+bespread
+besprent
+besprinkle
+Bess
+Bessarabia
+Bessel
+Bessel's
+Bessemer
+Bessemerize
+Bessemerizes
+Bessie
+best
+bestead
+besteaded
+besteading
+bested
+bester
+bestial
+bestiality
+bestialize
+bestialized
+bestializes
+bestializing
+bestially
+bestiary
+besting
+bestir
+bestirring
+bestow
+bestowal
+bestowed
+bestrew
+bestride
+bestrides
+bestriding
+bestrode
+bests
+bestseller
+bestseller's
+bestsellerdom
+bestsellers
+bestselling
+bestubble
+bestubbled
+bet
+bet's
+beta
+betaine
+betake
+betas
+betatron
+betel
+Betelgeuse
+beth
+Bethany
+bethe
+bethel
+Bethesda
+bethink
+Bethlehem
+Bethmann
+bethought
+bethral
+bethralled
+bethralling
+bethrals
+bethsaida
+betide
+betimes
+betjeman
+betoken
+betokened
+betokening
+betony
+betook
+betray
+betrayal
+betrayed
+betrayer
+betraying
+betrays
+betroth
+betrothal
+betrothals
+betrothed
+bets
+Betsey
+Betsey's
+Betsy
+Betta
+Bette
+Bette's
+betted
+better
+bettered
+bettering
+betterment
+betterments
+betters
+betti
+Betties
+betting
+bettor
+Betty
+betulaceous
+between
+betweenbrain
+betweenness
+betweentimes
+betweenwhiles
+betwixt
+Beulah
+beuthen
+bevan
+bevanite
+bevanites
+bevatron
+bevel
+beveled
+beveler
+bevelers
+beveling
+bevelings
+bevels
+beverage
+beverage's
+beverages
+Beveridge
+Beverly
+Beverly's
+bevies
+bevin
+bevvy
+bevy
+bewail
+bewailed
+bewailing
+bewails
+beware
+bewhisker
+bewhiskered
+Bewick
+bewigged
+bewilder
+bewildered
+bewilderedly
+bewilderedness
+bewildering
+bewilderingly
+bewilderment
+bewilders
+bewitch
+bewitched
+bewitchery
+bewitches
+bewitching
+bewitchingly
+bewitchment
+bewray
+bexley
+bey
+beyond
+beyrouth
+bezel
+bezique
+bezoar
+bezonian
+bezwada
+bhagalpur
+Bhagavadgita
+bhai
+bhakti
+bhang
+bharal
+bharat
+bharatiya
+bhatpara
+bhavan
+bhavnagar
+bhindi
+bhishti
+bhopal
+bhubaneswar
+Bhutan
+bhutto
+biafra
+biak
+Bialystok
+biannual
+biannulate
+biarritz
+bias
+biased
+biases
+biasing
+biasness
+biassed
+biassin
+biassing
+biathlon
+biauriculate
+biaxial
+biaxially
+bib
+bib's
+bibb
+bibbed
+bibber
+bibbery
+bibbing
+bibcock
+bibelot
+bibelots
+bible
+bible's
+bibles
+bibless
+biblical
+biblically
+biblicism
+biblicist
+bibliographer
+bibliographic
+bibliographical
+bibliographically
+bibliographics
+bibliographies
+bibliography
+bibliography's
+bibliolater
+bibliolatrous
+bibliolatry
+bibliology
+bibliomancy
+bibliomania
+bibliomaniac
+bibliomaniacal
+bibliopegic
+bibliopegically
+bibliopegist
+bibliopegistic
+bibliopegy
+bibliophile
+bibliophiles
+bibliophilic
+bibliophilism
+bibliophilist
+bibliophily
+bibliopole
+bibliopolic
+bibliopolist
+bibliotheca
+bibliothecal
+bibliotic
+bibliotics
+bibliotist
+bibs
+bibulous
+bibulously
+bibulousness
+bicameral
+bicameralism
+bicapsular
+bicarb
+bicarbonate
+Bice
+bicentenary
+bicentennial
+bicentric
+bicentricity
+bicep
+bicephalous
+biceps
+bicester
+bichloride
+bichromate
+bichromated
+bichromatize
+bichromatizes
+bichrome
+bicipital
+bicker
+bickered
+bickerer
+bickering
+bickers
+bicollateral
+bicolor
+bicolored
+biconcave
+biconcavity
+biconditional
+biconnected
+biconvex
+biconvexity
+bicorn
+bicorne
+bicornuate
+bicultural
+biculturalism
+bicuspid
+bicuspidate
+bicycle
+bicycled
+bicycler
+bicyclers
+bicycles
+bicyclic
+bicycling
+bicyclist
+bid
+bid's
+bida
+bidarka
+biddability
+biddable
+biddably
+bidden
+bidder
+bidder's
+bidders
+biddies
+bidding
+biddle
+Biddle
+biddy
+bide
+bided
+bidentate
+bider
+bides
+bidet
+bidiagonal
+bidialectal
+bidialectalism
+biding
+bidirectional
+bidistill
+bidistilled
+bidistilling
+bidistills
+bids
+Biedermeier
+biel
+bield
+Bielefeld
+bienne
+biennial
+biennially
+biennium
+Bienville
+bier
+bierce
+Bierce
+bierkeller
+biestings
+bietnar
+bifacial
+bifarious
+biff
+biffin
+bifid
+bifidity
+bifidly
+bifilar
+bifilarly
+biflagellate
+bifocal
+bifocals
+bifoliate
+bifoliolate
+biforate
+biform
+bifrost
+bifurcate
+bifurcated
+bifurcately
+bifurcates
+bifurcating
+bifurcation
+bifurcations
+big
+bigamist
+bigamous
+bigamously
+bigamy
+bigarreau
+Bigelow
+bigeminal
+bigeminy
+bigener
+bigeneric
+bigeye
+bigger
+biggest
+biggety
+biggin
+bigging
+biggish
+biggity
+Biggs
+bighead
+bigheaded
+bighearted
+bigheartedly
+bigheartedness
+bighorn
+bighorn's
+bighorns
+bight
+bight's
+bights
+bigly
+bigmouth
+bigmouthed
+bigness
+bignonia
+bignoniaceous
+bigot
+bigot's
+bigoted
+bigotedly
+bigoting
+bigotry
+bigots
+biguanide
+bigwig
+bihar
+Bihari
+biharmonic
+Biisk
+bijapur
+bijection
+bijection's
+bijections
+bijective
+bijectively
+bijou
+bijouterie
+bijugate
+bikaner
+bike
+bike's
+biked
+biker
+biker's
+bikers
+bikes
+bikeway
+bikie
+bikila
+biking
+bikini
+bikini's
+bikinied
+bikinis
+bilabial
+bilabiate
+bilander
+bilateral
+bilateralism
+bilaterally
+bilateralness
+bilayer
+bilayers
+Bilbao
+bilbao
+bilberry
+bilbo
+Bilbo
+Bilbo's
+bilboa
+bilboes
+bile
+bilection
+bilestone
+bilge
+bilge's
+bilged
+bilges
+bilgier
+bilging
+bilgy
+Bilharzia
+bilharziasis
+biliary
+bilinear
+bilingual
+bilingualism
+bilingually
+bilinguals
+bilious
+biliously
+biliousness
+bilirubin
+biliverdin
+bilk
+bilked
+bilker
+bilking
+bilks
+bill
+billable
+billabong
+billboard
+billboard's
+billboards
+billed
+biller
+billers
+billet
+billeted
+billeting
+billets
+billfish
+billfold
+billfold's
+billfolds
+billhead
+billhook
+billiard
+billiards
+Billie
+billies
+Billiken
+Billikens
+billing
+Billingham
+billings
+Billingsgate
+billion
+billionaire
+billions
+billionth
+Billiton
+billon
+billow
+billowed
+billowing
+billows
+billowy
+billposter
+billposting
+bills
+billy
+billycock
+billyo
+bilobal
+bilobate
+bilobed
+bilocular
+biloculate
+Biltmore
+Biltmore's
+biltong
+Bim
+bimah
+bimanous
+bimanual
+bimanually
+bimbo
+bimester
+bimestrial
+bimetal
+bimetalist
+bimetalistic
+bimetallic
+bimetallism
+bimillenary
+bimillenial
+Bimini
+bimodal
+bimodality
+bimolecular
+bimolecularly
+bimonthlies
+bimonthly
+bimorph
+bimorphemic
+bin
+bin's
+binal
+binaries
+binary
+binate
+binational
+binaural
+binaurally
+bind
+binded
+binder
+binders
+bindery
+binding
+bindingly
+bindingness
+bindings
+bindle
+binds
+bindweed
+bine
+bing
+binge
+bingen
+binges
+bingey
+Bingham
+Binghamton
+binghi
+bingle
+bingo
+bingos
+binh
+Bini
+binnacle
+binned
+binning
+binocular
+binocularity
+binocularly
+binoculars
+binodal
+binomial
+binomially
+binominal
+bins
+bint
+binturong
+binuclear
+binucleate
+binucleated
+bio
+bioactive
+bioassay
+bioastronautical
+bioastronautics
+biocatalyst
+biocatalytic
+biocellate
+biocenology
+biocenosis
+biocenotic
+biochemic
+biochemical
+biochemically
+biochemist
+biochemistry
+biochemists
+Biochimica
+biochip
+biochips
+biocidal
+biocide
+bioclean
+bioclimatic
+bioclimatology
+biocoenosis
+biocoenotic
+biocycle
+biodegradability
+biodegradable
+biodegradation
+biodegrade
+biodynamics
+bioecological
+bioecologist
+bioecology
+bioelectric
+bioelectrical
+bioelectricity
+bioenergetics
+bioengineering
+bioenvironmental
+biofeedback
+bioflavonoid
+biog
+biogen
+biogenesis
+biogenetic
+biogenetically
+biogenic
+biogeochemical
+biogeochemistry
+biogeographic
+biogeographical
+biogeography
+biograph
+biographee
+biographer
+biographer's
+biographers
+biographic
+biographical
+biographically
+biographies
+biographize
+biographizes
+biography
+biography's
+bioherm
+bioinstrumentation
+biologic
+biological
+biologically
+biologicals
+biologism
+biologist
+biologist's
+biologistic
+biologists
+biologize
+biologizes
+biology
+bioluminescence
+bioluminescent
+biolysis
+biomacromolecule
+biomacromolecules
+biomass
+biomaterial
+biome
+biomedical
+biomedicine
+biometric
+biometrical
+biometrically
+biometrics
+Biometrika
+biometry
+biomolecular
+biomolecule
+biomolecules
+bionic
+bionics
+bionomic
+bionomical
+bionomically
+bionomics
+biophysic
+Biophysica
+biophysical
+biophysically
+biophysicist
+biophysicists
+biophysics
+bioplasm
+biopoiesis
+biopolymer
+biopolymers
+biopsies
+biopsy
+biosatellite
+bioscience
+biosciences
+bioscientific
+bioscientist
+bioscope
+bioscopy
+biosis
+biosphere
+biostatics
+biostatistic
+biostatistics
+biostrome
+biosynthesis
+biosynthesized
+biosynthetic
+biosynthetically
+biosystematic
+biosystematist
+biosystematy
+biota
+biotechnological
+biotechnology
+biotelemetric
+biotelemetry
+biotic
+biotin
+biotite
+biotitic
+biotope
+biotransformation
+biotron
+biotype
+biotypic
+biovular
+bipack
+biparental
+biparentally
+biparietal
+biparous
+bipartisan
+bipartisanism
+bipartisanship
+bipartite
+bipartitely
+bipartition
+biped
+bipedal
+bipeds
+bipetalous
+biphenyl
+bipinnate
+bipinnately
+biplane
+biplane's
+biplanes
+bipod
+bipolar
+bipolarity
+bipolarization
+bipolarize
+bipolarizes
+bipropellant
+bipyramidal
+biquadrate
+biquadratic
+biquarterly
+biracial
+biracialism
+biradial
+biramous
+birch
+birchbark
+birchen
+bircher
+birches
+bird
+bird's
+birdbath
+birdbath's
+birdbaths
+birdbrain
+birdbrained
+birdcage
+birdcage's
+birdcages
+birdcall
+birder
+birdhouse
+birdie
+birdieback
+birdied
+birdieing
+birdies
+birdlike
+birdlime
+birdman
+birds
+birdseed
+birdwatch
+birdyback
+birefringence
+birefringent
+bireme
+birendra
+biretta
+Birgit
+birgitta
+biriani
+birk
+Birkenhead
+birkhead
+birkie
+birl
+birler
+Birmingham
+Birminghamize
+Birminghamizes
+biro
+birobidzhan
+biros
+birr
+birse
+birth
+birth's
+birthday
+birthday's
+birthdays
+birthed
+birthmark
+birthplace
+birthplaces
+birthrate
+birthrate's
+birthrates
+birthright
+birthright's
+birthrights
+birthroot
+births
+birthstone
+birthweight
+birthweights
+birthwort
+birtwhistle
+BIS
+bis
+bisayas
+biscay
+biscayne
+Biscayne
+biscuit
+biscuit's
+biscuits
+bise
+bisect
+bisected
+bisecting
+bisection
+bisection's
+bisectional
+bisectionally
+bisections
+bisector
+bisector's
+bisectors
+bisectrix
+bisects
+biserial
+biserrate
+bisexual
+bisexual's
+bisexuality
+bisexually
+bisexuals
+bish
+bishop
+Bishop
+bishop's
+bishopbird
+bishopric
+bishops
+bisitun
+bisk
+biskra
+Bismarck
+Bismark
+Bismark's
+bismuth
+bismuthic
+bismuthinite
+bismuthous
+bison
+bison's
+bisons
+bisque
+bisques
+Bissau
+bissextile
+bist
+bistability
+bistable
+bistate
+bister
+bistered
+bistort
+bistro
+bistroic
+bistros
+bisulcate
+bisulfate
+bisulfide
+bisulfite
+bisulphate
+bisulphide
+bisulphite
+bisutun
+bisyllabic
+bisymmetric
+bit
+bit's
+bitartrate
+bitblt
+bitblts
+bitch
+bitch's
+bitchery
+bitches
+bitchier
+bitchily
+bitchiness
+bitchy
+bite
+biter
+biters
+bites
+bithynia
+biting
+bitingly
+bitmap
+bitmap's
+bitmaps
+BITNET
+bitolj
+bits
+bitser
+bitstock
+bitsy
+bitt
+bitted
+bitten
+bitter
+bitterer
+bitterest
+bitterish
+bitterling
+bitterly
+bittern
+bitterness
+bitternut
+bitterroot
+bitters
+bittersweet
+bittersweetly
+bittersweetness
+bitterweed
+bitterwood
+bitting
+bittock
+bitty
+bitumen
+bituminization
+bituminize
+bituminized
+bituminizes
+bituminizing
+bituminoid
+bituminous
+bitwise
+bivalent
+bivalve
+bivalve's
+bivalved
+bivalves
+bivariate
+bivouac
+bivouacs
+bivvy
+biweekly
+biyearly
+biz
+bizarre
+bizarrely
+bizarreness
+bizerte
+Bizet
+Bizet's
+blab
+blabbed
+blabber
+blabbered
+blabbering
+blabbermouth
+blabbermouths
+blabbing
+blabby
+blabs
+Blachut
+black
+blackamoor
+blackamoors
+blackball
+blackballed
+blackballing
+blackballs
+Blackbeard
+blackberries
+blackberry
+blackberry's
+blackbird
+blackbird's
+blackbirder
+blackbirds
+blackboard
+blackboard's
+blackboards
+blackbodies
+blackbody
+blackbuck
+Blackburn
+blackbutt
+blackcap
+blackcock
+blackcurrant
+blackdamp
+blacked
+blacken
+blackened
+blackener
+blackening
+blackens
+blacker
+blackest
+blackett
+blackface
+Blackfeet
+blackfin
+blackfish
+blackfly
+Blackfoot
+Blackfoot's
+Blackfoots
+blackguard
+blackguard's
+blackguardism
+blackguardly
+blackguards
+blackhander
+blackhead
+blackheart
+blacking
+blackish
+blackjack
+blackjack's
+blackjacks
+blackland
+blackleg
+blacklist
+blacklisted
+blacklister
+blacklisting
+blacklists
+blackly
+blackmail
+blackmailed
+blackmailer
+blackmailers
+blackmailing
+blackmails
+Blackman
+Blackmer
+blackmer
+blackmore
+blackness
+blackout
+blackout's
+blackouts
+blackpoll
+blackpool
+blacks
+blackshirt
+blacksmith
+blacksmith's
+blacksmithing
+blacksmiths
+blacksnake
+Blackstone
+blackstrap
+blacktail
+blackthorn
+blacktop
+blacktop's
+blacktops
+blackwall
+blackwash
+blackwater
+Blackwell
+Blackwells
+blackwood
+bladder
+bladder's
+bladderlike
+bladdernose
+bladdernut
+bladders
+bladderwort
+bladderwrack
+blade
+blade's
+bladed
+blades
+Blagoveshchensk
+blague
+blah
+blain
+Blaine
+Blaine's
+Blair
+Blake
+blakey
+Blakey
+blamable
+blamably
+blame
+blamed
+blameful
+blamefully
+blameless
+blamelessly
+blamelessness
+blamer
+blamers
+blames
+blameworthiness
+blameworthy
+blamey
+blaming
+blanc
+blanch
+Blanchard
+Blanchard's
+Blanche
+blanched
+blancher
+blanches
+blanching
+blancmange
+bland
+blandish
+blandisher
+blandishment
+blandishments
+blandly
+blandness
+blank
+blanked
+blanker
+blankest
+blanket
+blanketed
+blanketer
+blanketers
+blanketflower
+blanketing
+blanketlike
+blankets
+blanking
+blankly
+blankness
+blanks
+blanquette
+blanton
+Blanton
+Blanzat
+blare
+blared
+blares
+blaring
+blarney
+blasco
+blase
+blasingame
+blaspheme
+blasphemed
+blasphemer
+blasphemes
+blasphemies
+blaspheming
+blasphemous
+blasphemously
+blasphemousness
+blasphemy
+blast
+blasted
+blastema
+blastematic
+blastemic
+blaster
+blasters
+blastie
+blasting
+blastment
+blastocoel
+blastocyst
+blastoderm
+blastoff
+blastogenesis
+blastomere
+blastopore
+blasts
+blastula
+blastula's
+blastular
+blastulas
+blastulation
+blat
+blatancy
+blatant
+blatantly
+blatantness
+blate
+blather
+blathered
+blatherer
+blathering
+blatted
+blatter
+blatting
+Blatz
+blaubok
+Blavatsky
+blaydon
+blaze
+blazed
+blazer
+blazers
+blazes
+blazing
+blazingly
+blazon
+blazoned
+blazoner
+blazoning
+blazonry
+bldg
+bleach
+bleachable
+bleached
+bleacher
+bleachers
+bleaches
+bleaching
+bleak
+bleakish
+bleakly
+bleakness
+blear
+blearily
+bleariness
+bleary
+bleat
+bleater
+bleating
+bleats
+bleb
+Blech
+bled
+bleed
+bleeder
+bleeders
+bleeding
+bleedings
+bleeds
+Bleeker
+bleep
+bleeped
+bleeper
+bleeping
+bleeps
+Blegen
+blemish
+blemish's
+blemished
+blemishes
+blemishing
+blench
+blend
+blende
+blended
+blender
+blenders
+blending
+blends
+Blenheim
+blennioid
+blenny
+blent
+blepharitis
+bless
+blessed
+blessedly
+blessedness
+blesses
+blessing
+blessings
+blest
+blet
+blether
+blevins
+blew
+blewits
+Bley
+blida
+bligh
+blight
+blighted
+blighter
+blighty
+blimey
+blimp
+blimp's
+blimpishly
+blimpishness
+blimps
+blind
+blindage
+blinded
+blinder
+blinders
+blindfish
+blindfold
+blindfolded
+blindfolding
+blindfolds
+Blindheim
+blinding
+blindingly
+blindly
+blindness
+blinds
+blindside
+blindsided
+blindsides
+blindsiding
+blindstorey
+blindworm
+Blini
+blink
+blinked
+blinker
+blinkered
+blinkering
+blinkers
+blinking
+blinks
+Blinn
+Blinn's
+blintz
+blintze
+blip
+blip's
+blipping
+blips
+blique
+bliss
+Bliss
+blissful
+blissfully
+blissfulness
+blister
+blistered
+blistering
+blisteringly
+blisters
+blistery
+blithe
+blithely
+blither
+blithesome
+blithesomely
+blithest
+blitz
+blitz's
+blitzes
+blitzkrieg
+blizzard
+blizzard's
+blizzards
+blizzardy
+bloat
+bloated
+bloater
+bloaters
+bloating
+bloats
+blob
+blob's
+blobbing
+blobs
+bloc
+bloc's
+Bloch
+Bloch's
+block
+block's
+blockade
+blockaded
+blockader
+blockades
+blockading
+blockage
+blockage's
+blockages
+blockboard
+blockbuster
+blockbusters
+blockbusting
+blocked
+blocker
+blockers
+blockhead
+blockheads
+blockhouse
+blockhouses
+blockier
+blocking
+blockish
+blockishly
+blocks
+blocky
+blocs
+bloemfontein
+blois
+bloke
+bloke's
+blokes
+Blomberg
+Blomberg's
+Blomquist
+Blomquist's
+Blomstedt
+blond
+blond's
+blonde
+blonde's
+blondes
+blondish
+blonds
+blood
+bloodbath
+bloodbaths
+bloodcurdling
+bloodcurdlingly
+blooded
+bloodfin
+bloodguilt
+bloodguiltiness
+bloodguilty
+bloodhound
+bloodhound's
+bloodhounds
+bloodied
+bloodiest
+bloodily
+bloodiness
+bloodless
+bloodlessly
+bloodlessness
+bloodletting
+bloodline
+bloodline's
+bloodlines
+bloodmobile
+bloodred
+bloodroot
+bloods
+bloodshed
+bloodshot
+bloodsport
+bloodsports
+bloodstain
+bloodstain's
+bloodstained
+bloodstains
+bloodstock
+bloodstone
+bloodstream
+bloodsucker
+bloodsucking
+bloodthirstily
+bloodthirstiness
+bloodthirsty
+bloodworm
+bloodwort
+bloody
+bloodying
+bloom
+bloomed
+bloomer
+bloomers
+bloomery
+Bloomfield
+blooming
+Bloomington
+blooms
+Bloomsbury
+bloomy
+bloop
+blooper
+bloops
+blossom
+blossomed
+blossoms
+blossomy
+blot
+blot's
+blotch
+blotchily
+blotchy
+blots
+blotted
+blotter
+blotting
+blotto
+blotty
+blouse
+blouse's
+blouses
+blousing
+blouson
+blow
+blowback
+blowed
+blower
+blowers
+blowfish
+blowfly
+blowgun
+blowhard
+blowhole
+blowie
+blowing
+blowlamp
+blown
+blowout
+blowpipe
+blows
+blowsy
+blowtorch
+blowtube
+blowup
+blowy
+blowzy
+blub
+blubber
+blubbered
+blubbering
+blubbery
+blucher
+bludge
+bludgeon
+bludgeoned
+bludgeoning
+bludgeons
+blue
+blueback
+bluebeard
+bluebell
+blueberries
+blueberry
+blueberry's
+bluebill
+bluebird
+bluebird's
+bluebirds
+bluebonnet
+bluebonnet's
+bluebonnets
+bluebook
+bluebottle
+bluebush
+bluecoat
+blued
+bluefin
+bluefish
+bluegill
+bluegrass
+blueing
+bluejack
+bluejacket
+bluely
+blueness
+bluenose
+bluepoint
+blueprint
+blueprint's
+blueprinted
+blueprinting
+blueprints
+bluer
+blues
+bluesman
+bluest
+bluestem
+bluestocking
+bluestone
+bluesy
+bluet
+bluethroat
+bluetit
+bluetongue
+blueweed
+bluey
+bluff
+bluffed
+bluffer
+bluffing
+bluffly
+bluffness
+bluffs
+bluing
+bluish
+bluishness
+Blum
+blume
+Blumenthal
+Blumenthal's
+blundell
+blunder
+blunderbuss
+blundered
+blunderer
+blundering
+blunderingly
+blunderings
+blunders
+blunge
+blunger
+blunt
+blunted
+blunter
+bluntest
+blunting
+bluntly
+bluntness
+blunts
+blur
+blur's
+blurb
+blurred
+blurredly
+blurrier
+blurrily
+blurriness
+blurring
+blurringly
+blurry
+blurs
+blurt
+blurted
+blurter
+blurting
+blurts
+blush
+blushed
+blusher
+blushes
+blushful
+blushing
+blushingly
+bluster
+blustered
+blusterer
+blustering
+blusteringly
+blusterous
+blusters
+blustery
+blutwurst
+Blvd
+blyth
+Blythe
+Blythe's
+BMW
+BNF
+boa
+boabdil
+boadicea
+Boanerges
+boar
+board
+boarded
+boarder
+boarders
+boarding
+boardinghouse
+boardinghouse's
+boardinghouses
+boardlike
+boardman
+boardmanship
+boardroom
+boards
+boardsmanship
+boardwalk
+boarfish
+boarhound
+boarish
+Boarsh
+boart
+boas
+boast
+boasted
+boaster
+boasters
+boastful
+boastfully
+boastfulness
+boasting
+boastings
+boasts
+boat
+boatbill
+boated
+boatel
+boatels
+boater
+boaters
+boathook
+boathouse
+boathouse's
+boathouses
+boating
+boatload
+boatload's
+boatloads
+boatman
+boatmanship
+boatmen
+boats
+boatsmanship
+boatswain
+boatswain's
+boatswains
+Boatwright
+boatyard
+boatyard's
+boatyards
+boaz
+bob
+bob's
+bobbed
+bobber
+bobbery
+Bobbie
+bobbies
+bobbin
+bobbin's
+bobbinet
+bobbing
+bobbins
+bobble
+bobbled
+bobbles
+bobbling
+Bobbsey
+bobbsey
+bobby
+bobbysoxer
+bobcat
+bobeche
+bobfloat
+boblet
+bobol
+bobolink
+bobolink's
+bobolinks
+bobotie
+bobowler
+Bobrow
+bobrow
+bobs
+bobsled
+bobsledder
+bobsledding
+bobsleigh
+bobstay
+bobtail
+bobtailed
+bobwhite
+bobwhite's
+bobwhites
+Boca
+Boca's
+bocaccio
+bocage
+boccaccio
+boccherini
+bocci
+boccie
+boccioni
+Boche
+bochum
+bock
+bocklogged
+bockwurst
+bod
+bodacious
+bodaciously
+bode
+boded
+bodega
+bodement
+Bodenheim
+bodenheim
+bodensee
+bodes
+bodge
+bodger
+bodgie
+bodh
+bodhisattva
+bodice
+bodied
+bodies
+bodiless
+bodily
+boding
+bodkin
+Bodleian
+bodmin
+Bodoni
+body
+bodybuild
+bodybuilder
+bodybuilder's
+bodybuilders
+bodybuilding
+bodycheck
+bodyguard
+bodyguard's
+bodyguards
+bodying
+bodysurf
+bodysurfer
+bodyweight
+bodywork
+boehmer
+boehmite
+Boeing
+Boeotia
+Boeotian
+Boer
+boer
+boethius
+boeuf
+boff
+boffin
+boffo
+boffola
+boffos
+bofors
+bog
+bog's
+bogan
+bogarde
+bogart
+Bogart
+Bogartian
+bogartian
+Bogas
+bogbean
+bogey
+bogeyed
+bogeying
+bogeyman
+bogeyman's
+bogeymen
+bogeys
+bogged
+bogging
+boggle
+boggled
+boggles
+boggling
+boggs
+boggy
+bogie
+bogies
+bogle
+bognor
+bogong
+bogor
+Bogota
+bogs
+bogtrotter
+bogus
+bogwood
+bogy
+boh
+bohea
+Boheme
+boheme
+Bohemia
+Bohemian
+Bohemianism
+bohlen
+Bohm
+bohol
+Bohr
+bohunk
+boiardo
+boies
+boil
+Boildieu
+boileau
+boiled
+boiler
+boilermaker
+boilermaker's
+boilermakers
+boilerplate
+boilers
+boiling
+boilover
+boils
+Bois
+Boise
+boisterous
+boisterously
+boisterousness
+boite
+boites
+Boito
+bokassa
+Bokhara
+bokmakierie
+bola
+boland
+bolas
+bolases
+bold
+bolder
+boldest
+boldface
+boldfaced
+boldfaces
+boldfacing
+boldly
+boldness
+bole
+bolection
+bolero
+bolet
+boletus
+boleyn
+bolide
+bolingbroke
+boliou
+bolivar
+Bolivia
+Bolivia's
+boliviano
+boll
+bollard
+bollix
+bollocks
+bollworm
+bolo
+Bologna
+Bologna's
+bolometer
+bolometer's
+bolometers
+bolometric
+bolometrically
+boloney
+bolos
+Bolshevik
+Bolshevik's
+Bolsheviks
+Bolshevism
+Bolshevism's
+Bolshevist
+Bolshevistic
+bolshevize
+Bolshie
+Bolshoi
+Bolson
+bolster
+bolstered
+bolsterer
+bolstering
+bolsters
+bolt
+bolted
+bolter
+bolting
+Bolton
+Boltonia
+boltrope
+bolts
+Boltzmann
+bolus
+bolzano
+boma
+bomb
+bombacaceous
+bombard
+bombarded
+bombardier
+bombardiers
+bombarding
+bombardment
+bombardments
+bombardon
+bombards
+bombast
+bombaster
+bombastic
+bombastically
+Bombay
+Bombay's
+bombazine
+bombe
+bombed
+bomber
+bombers
+bombinate
+bombination
+bombing
+bombings
+bombora
+bombproof
+bombs
+bombshell
+bombsight
+bombus
+bombycid
+bomu
+bon
+bona
+bonaire
+bonanza
+bonanza's
+bonanzas
+Bonaparte
+Bonapartism
+bonaventura
+Bonaventure
+bonbon
+bonce
+bond
+bondable
+bondage
+bonded
+bonder
+bonderize
+bonders
+bondholder
+bonding
+bondmaid
+bondman
+bonds
+bondservant
+bondsman
+bondsmen
+bondstone
+bondwoman
+bone
+boneblack
+boned
+bonefish
+bonehead
+boneheaded
+boneless
+boner
+boners
+bones
+boneset
+bonesetter
+boneshaker
+boney
+boneyard
+bonfiglio
+bonfire
+bonfire's
+bonfires
+bong
+bongo
+bongoes
+bongoist
+Bonham
+bonham
+bonheur
+bonhoeffer
+bonhomie
+bonier
+Boniface
+bonin
+boning
+bonism
+bonito
+bonjour
+bonkers
+Bonn
+bonnard
+bonne
+bonner
+bonnet
+bonneted
+bonnets
+Bonneville
+Bonnie
+bonnier
+bonnily
+bonnor
+bonny
+bonsai
+bonsela
+bonspiel
+bontebok
+Bontempo
+bontempo
+bonus
+bonus's
+bonuses
+bony
+Bonynge
+bonze
+bonzer
+bonzes
+boo
+boob
+boobialla
+boobies
+boobify
+booboo
+boobook
+booby
+boodle
+booger
+boogerman
+boogeyman
+boogie
+boohoo
+book
+bookbind
+bookbinder
+bookbinders
+bookbindery
+bookbinding
+bookcase
+bookcase's
+bookcases
+booked
+bookeeper
+bookend
+bookends
+booker
+bookers
+bookful
+bookie
+bookie's
+bookies
+booking
+bookings
+bookish
+bookishly
+bookishness
+bookkeep
+bookkeeper
+bookkeeper's
+bookkeepers
+bookkeeping
+booklet
+booklet's
+booklets
+booklist
+booklouse
+bookmaker
+bookmakers
+bookmaking
+bookman
+bookmark
+bookmark's
+bookmarker
+bookmarkers
+bookmarks
+bookmobile
+bookmobiles
+bookplate
+bookplates
+books
+bookseller
+bookseller's
+booksellers
+bookselling
+bookshelf
+bookshelf's
+bookshelves
+bookstall
+bookstore
+bookstore's
+bookstores
+bookworm
+bookworm's
+bookworms
+booky
+boole
+boolean
+booleans
+boom
+boomed
+boomer
+boomerang
+boomerang's
+boomerangs
+boomier
+booming
+boomkin
+boomlet
+booms
+boomslang
+boomtown
+boomtowns
+boomy
+boon
+boondocks
+boondoggle
+boondoggler
+boondoggling
+Boone
+boong
+boonies
+Boonton
+boor
+boor's
+boorish
+boorishly
+boorishness
+boors
+boos
+boost
+boosted
+booster
+boosterism
+boosting
+boosts
+boot
+bootblack
+bootblacks
+booted
+bootee
+Bootes
+booth
+boothia
+boothroyd
+booths
+bootie
+booties
+booting
+bootjack
+bootlace
+Bootle
+bootle
+bootleg
+bootlegged
+bootlegger
+bootlegger's
+bootleggers
+bootlegging
+bootlegs
+bootless
+bootlessly
+bootlessness
+bootlick
+bootlicker
+bootloader
+bootprint
+boots
+bootstrap
+bootstrap's
+bootstrapped
+bootstrapping
+bootstraps
+booty
+booze
+boozer
+boozily
+boozing
+boozy
+bop
+bophuthatswana
+bopper
+bopping
+bora
+boracic
+boracite
+borage
+boraginaceous
+borak
+borane
+borate
+borated
+borates
+borax
+borazon
+borborygmus
+Bordeaux
+bordel
+Bordelaise
+bordello
+bordello's
+bordellos
+Borden
+border
+bordereau
+bordered
+borderer
+bordering
+borderings
+borderland
+borderland's
+borderlands
+borderline
+borders
+bordure
+bore
+boreal
+Borealis
+Boreas
+borecole
+bored
+boredom
+boree
+borehole
+boreholes
+borer
+borers
+bores
+boresight
+boresights
+Borg
+borgerhout
+borges
+Borghese
+borgholm
+borgia
+borglum
+boric
+boride
+boring
+boringly
+boringness
+Boris
+borize
+borizes
+borland
+born
+borne
+Borneo
+Borneo's
+borneol
+bornholm
+bornu
+Borodin
+borodino
+boron
+Boronia
+boronic
+borosilicate
+borough
+boroughs
+Borroughs
+borrow
+borrowable
+borrowed
+borrower
+borrowers
+borrowing
+borrowings
+borrows
+bors
+borstal
+bort
+borzoi
+Bosch
+boschbok
+boschvark
+Bose
+bosh
+bosk
+boskop
+Bosky
+Bosnia
+bosom
+bosom's
+bosoms
+bosomy
+boson
+bosonic
+bosphorus
+Bosporus
+bosque
+bosquet
+boss
+bossa
+bossboy
+bossdom
+bossed
+bosses
+bossier
+bossies
+bossiness
+bossism
+bossuet
+bossy
+bostitch
+Bostitch
+Boston
+Boston's
+Bostonian
+Bostonian's
+Bostonians
+bosun
+Boswell
+Boswellize
+Boswellizes
+bosworth
+bot
+botan
+botanic
+botanical
+botanically
+botanist
+botanist's
+botanists
+botanize
+botanized
+botanizes
+botanizing
+botany
+botargo
+botch
+botched
+botcher
+botchers
+botches
+botching
+botchwork
+botchy
+botel
+botfly
+both
+botha
+bother
+botheration
+bothered
+bothering
+bothers
+bothersome
+bothnia
+bothwell
+bothy
+botryoidal
+bots
+Botswana
+Botswana's
+bott
+botticelli
+bottle
+bottlebrush
+bottlecap
+bottlecap's
+bottlecaps
+bottled
+bottleful
+bottleneck
+bottleneck's
+bottlenecks
+bottlenose
+bottler
+bottlers
+bottles
+bottling
+bottom
+bottomed
+bottomer
+bottoming
+bottomland
+bottomless
+bottomlessly
+bottomlessness
+bottommost
+bottomost
+bottomry
+bottoms
+bottrop
+botulin
+botulinal
+botulinum
+botulinus
+botulism
+botvinnik
+Boucher
+boucicault
+boucle
+boudicca
+boudoir
+bouffant
+bouffe
+bougainvillaea
+Bougainville
+bougainvillea
+bough
+bough's
+boughed
+boughs
+bought
+boughten
+Boughton
+bougie
+bouillabaisse
+bouillon
+boulanger
+boulder
+boulder's
+bouldered
+boulders
+bouldery
+boule
+boulevard
+boulevard's
+boulevardier
+boulevardize
+boulevardizes
+boulevards
+bouleversement
+boulez
+Boulez
+boulle
+Boult
+bounce
+bounced
+bouncer
+bouncers
+bounces
+bouncier
+bouncily
+bouncing
+bouncingly
+bouncy
+bound
+boundaries
+boundary
+boundary's
+bounded
+bounden
+bounder
+bounderish
+bounderishly
+bounding
+boundless
+boundlessly
+boundlessness
+bounds
+bounteous
+bounteously
+bounteousness
+bountied
+bounties
+bountiful
+bountifully
+bountifulness
+bounty
+bounty's
+bouquet
+bouquet's
+bouquets
+Bourbaki
+bourbon
+bourbonism
+bourbonize
+bourbonizes
+bourbons
+bourdon
+bourg
+bourgeois
+bourgeoise
+bourgeoisie
+bourgeoisify
+bourgeon
+bourges
+bourgogne
+bourguiba
+bourn
+Bourne
+Bourne's
+Bournemouth
+bourse
+bouse
+bousing
+boustrophedon
+bout
+bout's
+boutique
+boutiques
+bouton
+boutonniere
+bouts
+bouvardier
+Bouvet
+Bouvier
+bouvier
+bouzouki
+bovid
+bovine
+bovinely
+bovines
+bovinity
+bovril
+bovver
+bow
+bowan
+bowden
+Bowditch
+Bowditch's
+bowdlerization
+bowdlerize
+bowdlerized
+bowdlerizer
+bowdlerizes
+bowdlerizing
+Bowdoin
+bowed
+bowel
+bowel's
+boweled
+boweling
+bowelless
+bowels
+bowen
+Bowen
+Bowen's
+bower
+bowerbird
+bowerbird's
+bowerbirds
+bowers
+bowery
+bowes
+Bowes
+bowfin
+bowfront
+bowhead
+bowie
+bowing
+bowknot
+bowl
+bowlder
+bowled
+bowleg
+bowlegged
+bowler
+bowlers
+bowlful
+bowline
+bowline's
+bowlines
+bowling
+bowls
+bowman
+bowmen
+bows
+bowsaw
+bowse
+bowser
+bowshot
+bowsprit
+bowstring
+bowstring's
+bowstrings
+bowwow
+bowyangs
+bowyer
+box
+boxboard
+boxcar
+boxcar's
+boxcars
+boxed
+boxer
+boxers
+boxes
+boxfish
+Boxford
+boxful
+boxhaul
+boxier
+boxiness
+boxing
+boxlike
+boxroom
+boxthorn
+boxwood
+boxy
+boy
+boy's
+boyar
+boyard
+boyars
+Boyce
+boycott
+boycotted
+boycotter
+boycotting
+boycotts
+Boyd
+Boyd's
+boyer
+boyfriend
+boyfriend's
+boyfriends
+boyhood
+boyish
+boyishly
+boyishness
+boyla
+Boyle
+Boyle's
+Boylston
+Boylston's
+boyne
+boyoma
+boys
+boysenberry
+boz
+Bozcaada
+bozen
+bozo
+bozos
+BP
+bpi
+bra
+bra's
+Braata
+brabant
+brabble
+brabbled
+brabbling
+brace
+braced
+bracelet
+bracelet's
+bracelets
+bracer
+braces
+brach
+brachia
+brachial
+brachiate
+brachiopod
+Brachiosaurus
+brachium
+brachycephalic
+brachydactylic
+brachylogy
+brachypterous
+brachyuran
+bracing
+bracken
+bracket
+bracketed
+bracketing
+brackets
+brackish
+brackishness
+bracknell
+bract
+bracteate
+bracteole
+brad
+bradawl
+Bradbury
+bradded
+bradding
+Bradford
+Bradley
+bradman
+Bradshaw
+Brady
+bradycardia
+bradykinin
+brae
+brae's
+braes
+brag
+braga
+Bragg
+braggadocio
+braggart
+bragged
+bragger
+braggest
+bragging
+braggy
+Bragi
+brags
+brahe
+brahma
+Brahman
+Brahmana
+Brahmani
+Brahmanism
+Brahmaputra
+Brahmin
+Brahms
+Brahmsian
+Brahui
+braid
+braided
+braider
+braiding
+braids
+brail
+braille
+Brailler
+Braillers
+braillewriter
+Braillewriters
+braillex
+braillink
+braillo
+brailtel
+brain
+Brainard
+Brainards
+braincase
+brainchild
+brainchild's
+brainchildren
+brained
+brainier
+braininess
+braining
+brainish
+brainless
+brainlessly
+brainlessness
+brainpan
+brainpower
+brains
+brainsick
+brainsickly
+brainstem
+brainstem's
+brainstems
+brainstorm
+brainstorm's
+brainstormer
+brainstorming
+brainstorms
+brainteaser
+brainwash
+brainwashed
+brainwasher
+brainwashes
+brainwashing
+brainy
+braise
+braised
+braiser
+braises
+braising
+brake
+braked
+brakeless
+brakeman
+brakemen
+brakemen's
+brakes
+brakesman
+braking
+brakpan
+braky
+bramante
+bramble
+bramble's
+brambles
+brambling
+brambly
+bramley
+bran
+branch
+branched
+branches
+branchia
+branchial
+branchiate
+branching
+branchings
+branchiopod
+branchless
+branchlet
+Branchville
+branchy
+brancusi
+brand
+branded
+Brandeis
+brandel
+Brandel
+Brandenburg
+brander
+brandied
+brandies
+brandin
+branding
+brandish
+brandishes
+brandishing
+brandling
+brando
+Brandon
+brands
+Brandt
+Brandt's
+brandy
+brandying
+brandywine
+Braniff
+brank
+branks
+branle
+Brannon
+brannon
+brant
+Brantford
+brants
+branum
+braque
+braques
+bras
+brasenose
+brash
+brashly
+brashness
+brashy
+brasier
+brasil
+brasilein
+Brasilia
+brasilin
+brass
+brassard
+brassbound
+brassed
+brasserie
+brasses
+brassica
+brassie
+brassier
+brassiere
+brassily
+brassiness
+Brasstown
+brassy
+brat
+brat's
+bratislava
+brats
+brattice
+brattiness
+brattish
+brattishing
+brattle
+brattled
+brattling
+bratty
+bratwurst
+Braun
+braunite
+braunschweig
+brava
+bravado
+bravais
+brave
+braved
+bravely
+braveness
+braver
+bravery
+braves
+bravest
+braving
+bravissimo
+bravo
+bravoed
+bravoes
+bravoing
+bravos
+bravura
+braw
+braweling
+brawl
+brawle
+brawled
+brawler
+brawlier
+brawling
+brawls
+brawly
+brawn
+brawnier
+brawnily
+brawniness
+brawny
+braxy
+bray
+brayed
+brayer
+braying
+brays
+braze
+brazed
+brazen
+brazened
+brazening
+brazenly
+brazenness
+brazer
+brazes
+brazier
+brazier's
+braziers
+Brazil
+Brazil's
+Brazilian
+Brazilian's
+brazils
+brazing
+brazos
+Brazzaville
+breach
+breached
+breacher
+breachers
+breaches
+breaching
+bread
+breadbasket
+breadbaskets
+breadboard
+breadboard's
+breadboards
+breaded
+breadfruit
+breadfruits
+breading
+breadline
+breadmaking
+breadnut
+breadnuts
+breadroot
+breads
+breadstuff
+breadth
+breadthways
+breadthwise
+breadwinner
+breadwinner's
+breadwinners
+breadwinning
+break
+breakable
+breakables
+breakage
+breakaway
+breakbone
+breakdown
+breakdown's
+breakdowns
+breaker
+breakers
+breakeven
+breakfast
+breakfasted
+breakfaster
+breakfasters
+breakfasting
+breakfasts
+breakfront
+breaking
+breakneck
+breakoff
+breakout
+breakpoint
+breakpoint's
+breakpointed
+breakpointing
+breakpoints
+breaks
+breakthrough
+breakthrough's
+breakthroughes
+breakthroughs
+breakup
+breakups
+breakwater
+breakwater's
+breakwaters
+bream
+breams
+breast
+breastbone
+breasted
+breastfed
+breastfeed
+breastfeeding
+breasting
+breastpin
+breastplate
+breasts
+breaststroke
+breaststroker
+breastwork
+breastwork's
+breastworks
+breath
+breathability
+breathable
+breathalyse
+breathalyzer
+breathe
+breathed
+breather
+breathers
+breathes
+breathier
+breathing
+breathless
+breathlessly
+breathlessness
+breaths
+breathtaking
+breathtakingly
+breathy
+breccia
+breccias
+brecciate
+brecciation
+brecht
+brecon
+Breconshire
+bred
+breda
+brede
+bree
+breech
+breech's
+breechblock
+breechcloth
+breechclout
+breeches
+breeching
+breechloader
+breed
+breeder
+breeding
+breeds
+breeks
+breenger
+breeze
+breeze's
+breezed
+breezeless
+breezes
+breezeway
+breezier
+breezily
+breeziness
+breezing
+breezy
+bregenz
+bregma
+bregmatic
+brekky
+Bremen
+Bremen's
+Bremerhaven
+bremsstrahlung
+Brenda
+Brendan
+Brendan's
+Brendel
+Brennan
+Brennan's
+Brenner
+Brenner's
+Brent
+Brentano
+Brentwood
+Brescia
+Bresenham
+Bresenham's
+Breslau
+Bresson
+Brest
+Brest's
+Bretagne
+brethren
+Breton
+Brett
+Brett's
+Bretton
+Breuer
+Breughel
+breve
+breves
+brevet
+breveted
+breveting
+brevets
+breviaries
+breviary
+brevier
+brevity
+brew
+brewage
+brewed
+brewer
+breweries
+brewers
+brewery
+brewery's
+brewing
+brewis
+brews
+Brewster
+Brewster's
+brey
+brezhnev
+Brian
+briand
+briar
+briar's
+briard
+Briareus
+briarroot
+briars
+bribable
+bribe
+bribed
+briber
+bribers
+bribery
+bribes
+bribing
+bricating
+Brice
+brick
+brickbat
+bricked
+bricker
+bricking
+bricklay
+bricklayer
+bricklayer's
+bricklayers
+bricklaying
+brickle
+brickmason
+brickmasons
+bricks
+bricktop
+brickwork
+brickyard
+bricole
+bridal
+bride
+bride's
+bridegroom
+brides
+bridesmaid
+bridesmaid's
+bridesmaids
+Bridewell
+bridewell
+bridge
+bridgeable
+bridgeboard
+bridged
+Bridgeford
+bridgehead
+bridgehead's
+bridgeheads
+bridgeless
+Bridgeman
+Bridgeport
+bridges
+Bridget
+Bridget's
+Bridgetown
+Bridgewater
+bridgework
+bridgework's
+bridging
+bridie
+bridle
+bridled
+bridles
+bridlewise
+bridling
+bridoon
+Brie
+brie
+brief
+briefcase
+briefcase's
+briefcases
+briefed
+briefer
+briefest
+briefing
+briefing's
+briefings
+briefless
+briefly
+briefness
+briefs
+Brien
+brien
+brier
+brierroot
+briery
+brig
+brig's
+brigade
+brigade's
+brigaded
+brigades
+brigadier
+brigadier's
+brigadiers
+brigading
+brigadoon
+Brigadoon
+brigalow
+brigand
+brigand's
+brigandage
+brigandine
+brigandism
+brigands
+brigantine
+Briggs
+Briggs's
+Brigham
+brighouse
+Bright
+bright
+brighten
+brightened
+brightener
+brighteners
+brightening
+brightens
+brighter
+brightest
+brighting
+brightly
+brightness
+brightnesses
+Brighton
+Brighton's
+brights
+brightside
+brightwork
+Brigid
+brigs
+brill
+brilliance
+brilliancy
+brilliant
+brilliantine
+brilliantly
+brilliantness
+Brillouin
+brim
+brimful
+brimless
+brimmed
+brimmer
+brimming
+brimstone
+brinded
+Brindisi
+brindle
+brindled
+brine
+brinell
+briner
+bring
+bringdown
+bringer
+bringers
+bringing
+brings
+brinier
+brininess
+brining
+brinjal
+brink
+Brinkley
+brinkley
+brinkmanship
+brinksmanship
+brinny
+briny
+brio
+brioche
+briolette
+briony
+briquet
+briquette
+brisance
+brisant
+Brisbane
+Brisbane's
+brisk
+brisker
+brisket
+briskly
+briskness
+brisling
+brist
+bristle
+bristlecone
+bristlecone's
+bristlecones
+bristled
+bristlelike
+bristles
+bristletail
+bristlier
+bristling
+bristly
+bristol
+bristols
+brit
+Britain
+Britain's
+Britannia
+Britannic
+Britannica
+britches
+Briticism
+British
+Britisher
+Britishism
+Britishly
+Briton
+Briton's
+Britons
+Brittany
+Britten
+Britten's
+brittle
+brittled
+brittlely
+brittleness
+brittler
+brittlest
+brittling
+brittonic
+britzka
+brix
+Brixton
+Brno
+broach
+broached
+broacher
+broaches
+broaching
+broad
+broadax
+broadband
+broadbill
+Broadbrim
+broadcast
+broadcasted
+broadcaster
+broadcasters
+broadcasting
+broadcastings
+broadcasts
+broadcloth
+broaden
+broadened
+broadener
+broadeners
+broadening
+broadenings
+broadens
+broader
+broadest
+broadleaf
+broadloom
+broadly
+broadminded
+broadmoor
+broadness
+broads
+broadsheet
+broadside
+broadsword
+broadtail
+Broadway
+broadwife
+broca
+brocade
+brocaded
+brocatelle
+broccoli
+broch
+brochette
+brochure
+brochure's
+brochures
+Brock
+brockage
+brocken
+brocket
+brockle
+brocoli
+broddle
+broderie
+broederbond
+brogan
+Broglie
+Broglie's
+brogue
+broider
+broidery
+broil
+broiled
+broiler
+broilers
+broiling
+broils
+broke
+broken
+brokenhearted
+brokenly
+brokenness
+broker
+brokerage
+brokers
+brolga
+brollies
+brolly
+bromal
+bromate
+bromated
+bromating
+Bromberg
+brome
+bromegrass
+bromeliad
+bromelin
+bromeosin
+Bromfield
+Bromfield's
+bromic
+bromide
+bromide's
+bromides
+bromidic
+brominate
+bromination
+bromine
+bromines
+brominize
+brominizes
+bromism
+Bromley
+Bromley's
+bromo
+bromoform
+bromos
+bromsgrove
+bronc
+bronchi
+bronchia
+bronchial
+bronchialy
+bronchiectasis
+bronchiolar
+bronchiole
+bronchiole's
+bronchioles
+bronchiolitis
+bronchitis
+bronchopneumonia
+bronchoscope
+bronchus
+bronco
+broncobuster
+broncos
+broncs
+brontosaur
+brontosaurus
+Bronx
+bronze
+bronzed
+bronzer
+bronzes
+bronzing
+bronzy
+brooch
+brooch's
+brooches
+brood
+brooder
+broodiness
+brooding
+broodingly
+broods
+broody
+brook
+Brookdale
+Brooke
+brooked
+Brookfield
+Brookhaven
+brookite
+brooklet
+brooklime
+Brookline
+Brookline's
+Brooklyn
+Brookmont
+brooks
+brookside
+brookweed
+broom
+broom's
+broomball
+broomballer
+broomcorn
+broome
+broomed
+broomgrove
+broomhill
+brooming
+broomrape
+brooms
+broomstick
+broomstick's
+broomsticks
+broonzy
+brose
+broth
+brothel
+brothel's
+brothels
+brother
+brother's
+brotherhood
+brotherliness
+brotherly
+brothers
+broths
+brougham
+broughams
+brought
+brouhaha
+broun
+brow
+brow's
+browband
+browbeat
+browbeaten
+browbeating
+browbeats
+brown
+Brown
+Browne
+browned
+Brownell
+browner
+brownest
+Brownian
+brownie
+brownie's
+brownies
+browning
+brownings
+brownish
+brownly
+brownness
+brownnose
+brownnoser
+brownout
+browns
+brownshirt
+brownstone
+brownstones
+browny
+brows
+browsability
+browse
+browsed
+browser
+browsers
+browses
+browsing
+broxodent
+broz
+brubeck
+Bruce
+brucellosis
+Bruch
+brucine
+Bruckner
+Bruckner's
+Bruegel
+Bruegel's
+bruges
+bruin
+bruise
+bruised
+bruiser
+bruisers
+bruises
+bruising
+bruit
+Brule
+brumal
+brumby
+brume
+Brumidi
+Brumidi's
+Brummagem
+brummell
+brummie
+brunch
+brunches
+brundisium
+Brunei
+brunel
+Brunelle
+brunelleschi
+brunet
+brunette
+brunettes
+brunhild
+Brunhilde
+Bruno
+Brunswick
+Brunswick's
+brunt
+brusa
+brush
+brushability
+brushback
+brushcut
+brushed
+brusher
+brushes
+brushfire
+brushfire's
+brushfires
+brushier
+brushing
+brushland
+brushless
+brushlike
+brushstroke
+brushstroke's
+brushstrokes
+brushup
+brushwood
+brushwork
+brushy
+brusk
+Bruson
+brusque
+brusquely
+brusqueness
+brusquerie
+Brussels
+brut
+brutal
+brutalities
+brutality
+brutalization
+brutalization's
+brutalizations
+brutalize
+brutalized
+brutalizes
+brutalizing
+brutally
+brute
+brute's
+brutes
+brutify
+brutish
+brutishly
+brutishness
+Brutus
+bruxelles
+Bruxelles
+bruxism
+Bryan
+Bryansk
+Bryant
+Bryce
+Bryn
+brynhild
+bryology
+bryony
+bryophyta
+bryophyte
+bryozoa
+bryozoan
+Brython
+Brythonic
+BS
+bs
+BSD
+btu
+BTW
+bub
+bubal
+bubaline
+bubble
+bubbled
+bubbler
+bubbles
+bubblier
+bubbling
+bubbly
+bubby
+buber
+Bubo
+bubonic
+bubonocele
+bucaramanga
+buccal
+buccaneer
+buccaneer's
+buccaneerish
+buccaneers
+buccinator
+bucentaur
+Bucephalus
+bucer
+buchan
+Buchanan
+Bucharest
+Buchenwald
+Buchenwald's
+Buchmanism
+buchner
+buchu
+Buchwald
+buck
+buckaroo
+buckaroos
+buckbean
+buckboard
+buckboard's
+buckboards
+bucked
+buckeen
+bucker
+buckeroo
+bucket
+bucket's
+bucketed
+bucketful
+bucketful's
+bucketfuls
+bucketing
+buckets
+bucketsful
+buckeye
+buckhead
+buckhorn
+buckhound
+bucking
+Buckingham
+Buckinghamshire
+buckish
+buckjumper
+buckle
+buckled
+buckler
+buckles
+Buckley
+Buckley's
+buckling
+buckman
+Bucknell
+Bucknell's
+bucko
+buckoes
+buckra
+buckram
+bucks
+bucksaw
+buckshee
+buckshot
+buckskin
+buckskins
+bucktail
+buckthorn
+bucktooth
+buckwheat
+bucky
+Bucky
+bucolic
+bucolically
+bucovina
+bud
+bud's
+Budapest
+Budd
+budded
+budder
+Buddha
+Buddhism
+Buddhist
+Buddhists
+buddies
+budding
+buddle
+Buddleia
+buddy
+buddy's
+budge
+budged
+budgerigar
+budges
+budget
+budgetary
+budgeted
+budgeteer
+budgeter
+budgeters
+budgeting
+budgets
+budgetted
+budgetting
+budgie
+budging
+budlong
+buds
+budweis
+Budweiser
+Budweisers
+Buehring
+Buehring's
+Buena
+Buenaventura
+Bueno
+Buenos
+buff
+buff's
+buffalo
+buffaloes
+buffer
+buffer's
+buffered
+bufferer
+bufferer's
+bufferers
+buffering
+bufferred
+buffers
+buffet
+buffeted
+buffeting
+buffetings
+buffets
+buffi
+buffing
+bufflehead
+buffo
+buffon
+buffoon
+buffoon's
+buffoonery
+buffoonish
+buffoons
+buffos
+buffs
+bug
+bug's
+bugaboo
+buganda
+Bugatti
+bugatti
+bugbane
+bugbear
+bugbears
+bugeye
+bugeyed
+bugged
+bugger
+bugger's
+buggered
+buggering
+buggers
+buggery
+buggies
+bugging
+buggy
+buggy's
+bughouse
+bugle
+bugled
+bugler
+bugles
+bugleweed
+bugling
+bugloss
+bugong
+bugs
+bugseed
+buhl
+buibui
+Buick
+build
+builded
+builder
+builders
+building
+building's
+buildings
+builds
+buildup
+buildup's
+buildups
+built
+builtin
+buitenzorg
+Bujumbura
+bukavu
+bukhara
+bukharin
+bukovina
+bul
+bulawayo
+bulb
+bulb's
+bulba
+Bulba
+bulbaceous
+bulbar
+bulbed
+bulbiferous
+bulbil
+bulblet
+bulbous
+bulbously
+bulbs
+bulbul
+bulganin
+Bulgar
+Bulgaria
+Bulgarian
+bulge
+bulged
+bulges
+bulginess
+bulging
+bulgur
+bulgy
+bulimia
+bulk
+bulked
+bulkhead
+bulkhead's
+bulkheaded
+bulkheads
+bulkier
+bulkily
+bulkiness
+bulks
+bulky
+bull
+bulla
+bullace
+bullae
+bullbaiting
+bullbat
+bulldog
+bulldog's
+bulldogger
+bulldogs
+bulldoze
+bulldozed
+bulldozer
+bulldozers
+bulldozes
+bulldozing
+bulle
+bulled
+bullet
+bullet's
+bulletin
+bulletin's
+bulletins
+bulletproof
+bulletproofed
+bulletproofing
+bulletproofs
+bullets
+bullfight
+bullfighter
+bullfighting
+bullfinch
+bullfrog
+bullhead
+bullheaded
+bullheadedly
+bullheadedness
+bullhide
+bullhorn
+bullied
+bullies
+bulling
+bullion
+bullish
+bullishly
+bullishness
+bullnecked
+bulloch
+bullock
+bullocky
+bullous
+bullpen
+bullpout
+bullring
+bullroarer
+bullrush
+bullrush's
+bullrushes
+bulls
+bullseye
+bullshit
+bullterrier
+bullwhack
+bullwhackers
+bullwhip
+bully
+bullyboy
+bullyboys
+bullying
+bullyrag
+bulnbuln
+bulrush
+bulwark
+bum
+bum's
+bumbailiff
+bumbershoot
+bumble
+bumblebee
+bumblebee's
+bumblebees
+bumbled
+Bumbledom
+bumbler
+bumblers
+bumbles
+bumbling
+bumblingly
+bumboat
+bumbry
+Bumbry
+bumf
+bumkin
+bummaree
+bummed
+bummer
+bummers
+bumming
+bump
+bumped
+bumper
+bumpers
+bumph
+bumpier
+bumpily
+bumpiness
+bumping
+bumpkin
+bumpkin's
+bumpkinish
+bumpkinly
+bumpkins
+bumps
+bumptious
+bumptiously
+bumptiousness
+bumpy
+bums
+bumsucking
+bun
+bun's
+Buna
+bunch
+bunche
+bunched
+bunches
+bunchily
+bunching
+bunchy
+bunco
+buncombe
+bund
+Bundaberg
+bundelkhand
+bundesrat
+Bundestag
+bundh
+bundist
+bundle
+bundled
+bundler
+bundles
+bundling
+bundobust
+Bundoora
+bundoora
+Bundu
+bundy
+Bundy
+bung
+bungalow
+bungalow's
+bungalows
+bunger
+bunghole
+bungle
+bungled
+bungler
+bunglers
+bungles
+bunglesome
+bungling
+bunglingly
+bunin
+bunion
+bunion's
+bunions
+bunk
+bunked
+bunker
+bunker's
+bunkered
+bunkering
+bunkers
+bunkhouse
+bunkhouse's
+bunkhouses
+bunking
+bunkmate
+bunkmate's
+bunkmates
+bunko
+bunkos
+bunks
+bunkum
+bunnies
+bunny
+bunny's
+bunraku
+buns
+Bunsen
+Bunsen's
+Bunsens
+bunt
+buntal
+bunted
+bunter
+bunters
+bunting
+buntline
+bunts
+Bunyan
+Bunyan's
+bunyip
+buonaparte
+buonarroti
+buoy
+buoyage
+buoyance
+buoyancy
+buoyant
+buoyantly
+buoyed
+buoying
+buoys
+buprestid
+bur
+buran
+buraydah
+burbage
+burbank
+Burbank
+Burbank's
+Burberry
+burble
+burbled
+burbler
+burbles
+burbling
+burbly
+burbot
+Burch
+burden
+burden's
+burdened
+burdening
+burdens
+burdensome
+burdensomely
+burdensomeness
+burdock
+bureau
+bureau's
+bureaucracies
+bureaucracy
+bureaucracy's
+bureaucrat
+bureaucrat's
+bureaucratic
+bureaucratically
+bureaucratization
+bureaucratization's
+bureaucratizations
+bureaucratize
+bureaucratized
+bureaucratizes
+bureaucrats
+bureaus
+bureaux
+buret
+burette
+burettes
+burg
+burgage
+burgas
+burgee
+burgeon
+burgeoned
+burgeoning
+burgeons
+burger
+burgers
+burgess
+burgess's
+burgesses
+burgher
+burgher's
+burghers
+burghley
+burglar
+burglar's
+burglaries
+burglarious
+burglariously
+burglarize
+burglarized
+burglarizes
+burglarizing
+burglarproof
+burglarproofed
+burglarproofing
+burglarproofs
+burglars
+burglary
+burglary's
+burgle
+burgled
+burgles
+burgling
+burgomaster
+burgomasters
+burgonet
+burgoo
+burgoos
+Burgos
+Burgoyne
+burgrave
+Burgundian
+Burgundies
+Burgundy
+burhel
+burial
+buried
+burier
+buries
+burin
+burk
+burka
+Burke
+Burkes
+Burkina
+burking
+burl
+burladero
+burlap
+burle
+burled
+burleigh
+burler
+burlesque
+burlesqued
+burlesquely
+burlesquer
+burlesques
+burlesquing
+burley
+burlier
+burlily
+burliness
+burlingame
+Burlingame
+Burlington
+Burlington's
+burly
+Burma
+Burmese
+burn
+burnable
+burne
+Burne
+burned
+burner
+burners
+burnes
+Burnes
+burnet
+Burnett
+burney
+Burnham
+burning
+burningly
+burnings
+burnish
+burnished
+burnisher
+burnishes
+burnishing
+burnley
+burnoose
+burnous
+burnout
+burns
+Burnside
+Burnsides
+burnt
+burntly
+burntness
+buroo
+burp
+burped
+burping
+burps
+burr
+burr's
+burrawang
+burred
+burrer
+burrier
+burro
+burro's
+burros
+Burroughs
+burrow
+burrowed
+burrower
+burrowing
+burrows
+burrs
+burrstone
+burry
+bursa
+bursae
+bursal
+bursar
+bursarial
+bursary
+bursas
+burse
+burseed
+Burseraceous
+bursiform
+bursitis
+burst
+bursted
+burster
+bursting
+burstone
+bursts
+bursty
+Burt
+burthen
+Burton
+Burtt
+Burtt's
+Burundi
+burweed
+bury
+buryat
+burying
+bus
+busbar
+busbies
+busboy
+busboy's
+busboys
+busby
+Busch
+bused
+busera
+buses
+bush
+bushbaby
+bushbuck
+bushbucks
+bushcraft
+bushed
+bushel
+bushel's
+bushelage
+busheled
+busheler
+bushelers
+busheling
+bushelings
+bushelman
+bushels
+bushes
+bushfire
+bushhammer
+bushido
+bushie
+bushier
+bushily
+bushiness
+bushing
+bushings
+Bushire
+bushland
+bushland's
+bushman
+bushmaster
+Bushnell
+bushpig
+bushranger
+bushtit
+bushveld
+bushwhack
+bushwhacked
+bushwhacker
+bushwhacking
+bushwhacks
+bushwheel
+bushy
+busied
+busier
+busies
+busiest
+busily
+business
+business's
+businesses
+businesslike
+businessman
+businessmen
+businesswoman
+businesswoman's
+businesswomen
+busing
+busk
+busker
+buskin
+busload
+busload's
+busloads
+busoni
+busra
+buss
+bussed
+busses
+bussing
+bust
+bustard
+bustard's
+bustards
+busted
+bustee
+buster
+busting
+bustle
+bustled
+bustling
+bustlingly
+busts
+busty
+busuuti
+busy
+busybody
+busying
+busyness
+busywork
+but
+butadiene
+butane
+butanol
+butanone
+butat
+butch
+butcher
+butcher's
+butcherbird
+butchered
+butcherer
+butchering
+butcherly
+butchers
+butchery
+Bute
+butene
+butenedioic
+buteo
+butler
+butler's
+butlers
+butskellism
+butskellite
+butt
+butt's
+butte
+butted
+butter
+butterball
+butterbur
+buttercup
+buttered
+butterer
+butterers
+butterfat
+Butterfield
+butterfingered
+butterfingers
+butterfish
+butterflies
+butterfly
+butterfly's
+butterflyer
+butterine
+buttering
+butterless
+Buttermere
+buttermilk
+butternut
+butters
+butterscotch
+butterweed
+butterwort
+Butterworth
+buttery
+buttes
+butties
+butting
+buttinski
+buttinsky
+buttock
+buttock's
+buttocks
+button
+buttonball
+buttonbush
+buttoned
+buttoner
+buttonhole
+buttonhole's
+buttonholer
+buttonholes
+buttonhook
+buttoning
+buttonless
+buttonmould
+buttons
+buttonweed
+buttonwood
+buttony
+buttress
+buttressed
+buttresses
+buttressing
+Buttrick
+butts
+buttstock
+butty
+butung
+butut
+butyl
+butylate
+butylation
+butylene
+butyraceous
+butyral
+butyraldehyde
+butyrate
+butyric
+butyrin
+buxom
+buxomly
+buxomness
+Buxtehude
+Buxtehude's
+Buxton
+buy
+buyer
+buyer's
+buyers
+buying
+buys
+buzz
+buzzard
+buzzard's
+buzzards
+buzzed
+buzzer
+buzzes
+buzzing
+buzzsaw
+buzzword
+buzzword's
+buzzwords
+buzzy
+bwana
+by
+Bydgoszcz
+bye
+byelaw
+byelaws
+Byelorussian
+Byelostok
+byelovo
+byers
+byes
+bygone
+bygones
+byinge
+bylaw
+bylaw's
+bylaws
+byline
+byline's
+byliner
+bylines
+bylot
+byname
+byng
+bypass
+bypassed
+bypasses
+bypassing
+bypast
+bypath
+byplay
+byproduct
+byproduct's
+byproducts
+Byrd
+byre
+Byrne
+byrnie
+byroad
+Byron
+Byron's
+Byronic
+Byronism
+Byronize
+Byronizes
+byssinosis
+byssus
+bystander
+bystander's
+bystanders
+bystreet
+byte
+byte's
+bytes
+bytom
+byway
+byways
+byword
+byword's
+bywords
+Byzantine
+Byzantinize
+Byzantinizes
+Byzantium
+CA
+cab
+cab's
+cabal
+cabala
+cabalism
+cabalist
+cabalistic
+Caballe
+caballed
+caballero
+caballing
+cabals
+cabana
+cabanas
+cabanatuan
+cabaret
+cabarets
+cabbage
+cabbage's
+cabbaged
+cabbages
+cabbageworm
+cabbaging
+cabbala
+cabbie
+cabbies
+cabby
+cabdriver
+cabdrivers
+caber
+cabezon
+cabimas
+cabin
+cabin's
+Cabinda
+cabinet
+cabinet's
+cabinetmaker
+cabinetmaker's
+cabinetmakers
+cabinetmaking
+cabinetry
+cabinets
+cabinetwork
+cabins
+cable
+cabled
+cablegram
+cablegram's
+cablegrams
+cables
+cablet
+cableway
+cabling
+cabman
+cabob
+cabochon
+caboodle
+caboose
+cabora
+Cabot
+Cabot's
+cabotage
+cabral
+cabretta
+cabrilla
+cabriole
+cabriolet
+cabs
+cabstand
+cacao
+cacciatore
+cachalot
+cache
+cache's
+cachectic
+cached
+cachepot
+cacher
+caches
+cachet
+cachexia
+caching
+cachinnate
+cachou
+cachucha
+cacique
+caciquism
+cackle
+cackled
+cackler
+cackles
+cackling
+cackly
+CACM
+cacodemon
+cacodemonic
+cacodyl
+cacoepy
+cacoethes
+cacogenesis
+cacogenic
+cacogenics
+cacographical
+cacography
+cacology
+cacomistle
+cacophonist
+cacophonous
+cacophonously
+cacophony
+cacti
+cactus
+cactuses
+cacuminal
+cad
+cadaster
+cadastral
+cadastrally
+cadastre
+cadaver
+cadaveric
+cadaverine
+cadaverize
+cadaverizes
+cadaverous
+cadaverously
+caddie
+caddies
+caddis
+caddish
+caddishly
+caddishness
+Caddoan
+caddy
+cade
+cadelle
+cadence
+cadenced
+cadences
+cadencing
+cadency
+cadent
+cadential
+cadenza
+cadet
+cadetship
+cadge
+cadged
+cadger
+cadges
+cadging
+cadi
+Cadillac
+Cadillacs
+Cadmean
+cadmium
+cadmiumize
+cadmiumizes
+Cadmus
+cadre
+caducean
+caduceus
+caducity
+caducous
+Cady
+caecilian
+caecum
+Caelian
+Caelum
+caen
+caenozoic
+caeoma
+caerleon
+caernarfon
+Caernarvonshire
+Caerphilly
+caesalpiniaceous
+Caesar
+caesaraugusta
+caesarea
+Caesarean
+Caesarian
+Caesarian's
+Caesarism
+Caesarize
+Caesarizes
+caesium
+caespitose
+caesura
+caetano
+cafard
+cafe
+cafe's
+cafes
+cafeteria
+cafeteria's
+cafeterias
+caff
+caffeine
+caffeine's
+caffeinic
+caftan
+cage
+caged
+cageling
+cager
+cagers
+cages
+cagey
+cageyness
+cagier
+cagily
+caginess
+caging
+cagliari
+cagliostro
+cagmag
+cagney
+cagoule
+cagoules
+cagy
+cahier
+Cahill
+Cahokia
+cahoot
+cahoots
+caiaphas
+Caicos
+caiman
+Cain
+Caine
+cainogenesis
+cainozoic
+caird
+cairn
+cairned
+cairngorm
+cairns
+Cairo
+caisson
+caithness
+caitiff
+caius
+cajeput
+cajole
+cajoled
+cajolement
+cajoler
+cajolery
+cajoles
+cajoling
+Cajun
+Cajun's
+Cajuns
+cajuput
+cake
+caked
+cakes
+cakewalk
+cakewalker
+caking
+Cal
+Calabar
+calabash
+calaboose
+calabria
+Caladium
+Calais
+calalu
+calamanco
+calamine
+calamint
+calamite
+calamities
+calamitous
+calamitously
+calamitousness
+calamity
+calamity's
+calamondin
+calamus
+calandria
+calash
+calathus
+calaverite
+calcaneal
+calcaneum
+calcaneus
+calcar
+calcareous
+calcareously
+calcareousness
+calcariferous
+calceiform
+calces
+calchas
+calcic
+calcicole
+calciferol
+Calciferous
+calcific
+calcification
+calcified
+calcifuge
+calcifugous
+calcify
+calcimine
+calcination
+calcine
+calcined
+calcining
+calcinosis
+calcite
+calcitic
+calcitonin
+calcium
+CalComp
+calcomp
+calcsinter
+calculability
+calculable
+calculableness
+calculably
+calculate
+calculated
+calculatedly
+calculatedness
+calculates
+calculating
+calculatingly
+calculation
+calculational
+calculations
+calculative
+calculator
+calculator's
+calculators
+calculi
+calculous
+calculus
+Calcutta
+Calcutta's
+caldarium
+Calder
+caldera
+caldron
+Caldwell
+Caldwell's
+Caleb
+Caleb's
+caleche
+Caledonia
+Caledonian
+calefacient
+calefactory
+calendar
+calendar's
+calendared
+calendaring
+calendars
+calender
+calenderer
+calendric
+calendrical
+calends
+calendula
+calenture
+calf
+calflike
+calfs
+calfskin
+Calgary
+Calhoun
+Calhoun's
+cali
+Caliban
+caliber
+calibers
+calibrate
+calibrated
+calibrater
+calibrates
+calibrating
+calibration
+calibrations
+calibrator
+calibrators
+calices
+caliche
+calicle
+calico
+Calicut
+calif
+Calif
+califate
+California
+California's
+Californian
+Californian's
+Californians
+californium
+caliginous
+Caligula
+caligula
+calimere
+calipash
+calipee
+caliper
+calipers
+caliph
+caliphal
+caliphate
+caliphs
+calisaya
+calisthenic
+calisthenics
+calix
+calk
+calker
+Calkins
+call
+calla
+callable
+Callaghan
+Callaghan's
+Callahan
+Callahan's
+callais
+Callan
+Callan's
+callant
+callao
+Callas
+callback
+callboy
+called
+callee
+callee's
+caller
+caller's
+callers
+callicrates
+calligraph
+calligrapher
+calligraphers
+calligraphic
+calligraphically
+calligraphist
+calligraphy
+callimachus
+calling
+calliope
+Calliopsis
+callipash
+callipygian
+callisthenics
+Callisto
+callose
+callosity
+callous
+calloused
+callously
+callousness
+callow
+callowness
+calls
+callus
+calluses
+calm
+calmative
+calmed
+calmer
+calmest
+calming
+calmingly
+calmly
+calmness
+calms
+calomel
+calor
+caloric
+calorically
+calorie
+calorie's
+calories
+calorific
+calorimeter
+calorimeter's
+calorimeters
+calorimetric
+calorimetrically
+calorimetry
+calory
+calotte
+caloyer
+calpe
+calque
+caltanissetta
+Caltech
+caltech
+calthrop
+caltrop
+caltrops
+Calumet
+calumniate
+calumniated
+calumniation
+calumniator
+calumnious
+calumniously
+calumny
+calutron
+Calvados
+calvaria
+calvary
+calve
+Calvert
+Calvert's
+calves
+Calvin
+Calvin's
+calving
+Calvinism
+Calvinist
+Calvinize
+Calvinizes
+calvities
+calx
+calyces
+calycine
+calycle
+Calydonian
+calypso
+calypsonian
+calyptra
+calyptrogen
+calyx
+cam
+camail
+camaraderie
+camarilla
+camass
+cambay
+camber
+cambered
+cambering
+camberwell
+cambial
+cambist
+cambium
+Cambodia
+camboose
+cambrai
+cambrel
+cambria
+Cambrian
+cambric
+Cambridge
+Cambridge's
+Cambridgeshire
+cambyses
+Camden
+Camden's
+came
+camel
+camel's
+camelback
+cameleer
+camelia
+camellia
+camellias
+camelopard
+Camelopardus
+Camelot
+camels
+Camembert
+Camenae
+cameo
+cameos
+camera
+camera's
+cameral
+cameralism
+cameralist
+cameraman
+cameramen
+cameras
+camerlengo
+Cameron
+Cameron's
+Cameroon
+Cameroun
+Cameroun's
+camiknickers
+Camilla
+Camille
+Camino
+camion
+camisado
+camise
+camisole
+caml
+camlet
+camomile
+camoodi
+camorra
+camorrista
+camouflage
+camouflageable
+camouflaged
+camouflages
+camouflagic
+camouflaging
+camp
+campagna
+campaign
+campaigned
+campaigner
+campaigners
+campaigning
+campaigns
+campania
+campanile
+campanologist
+campanology
+campanula
+campanulaceous
+campanulate
+Campbell
+Campbellsport
+campcraft
+campeche
+camped
+camper
+campers
+campership
+campesinos
+campestral
+campfire
+campground
+campgrounds
+camphene
+camphine
+camphor
+camphoraceous
+camphorate
+camphorated
+camphoric
+campily
+campina
+campinas
+campiness
+camping
+campion
+campo
+campobello
+camporee
+campos
+camps
+campsite
+campsites
+campstool
+campus
+campus's
+campuses
+campy
+cams
+camshaft
+camshafts
+camus
+camwood
+can
+can's
+can't
+Cana
+Canaan
+Canaan's
+Canaanite
+Canaanitic
+Canada
+Canada's
+Canadian
+Canadianism
+Canadianization
+Canadianization's
+Canadianizations
+Canadianize
+Canadianizes
+Canadians
+canaigre
+canakin
+canal
+canal's
+canalboat
+canaled
+canaler
+canalers
+canaletto
+canaliculate
+canaliculus
+canaling
+canalization
+canalization's
+canalizations
+canalize
+canalized
+canalizes
+canalizing
+canals
+canara
+canard
+canarese
+canaries
+canary
+canary's
+canasta
+canaster
+Canaveral
+Canberra
+cancan
+cancel
+cancelable
+cancelate
+cancelated
+canceled
+canceler
+canceling
+cancellation
+cancellation's
+cancellations
+cancelous
+cancels
+cancer
+cancer's
+cancerous
+cancerously
+cancers
+cancroid
+Candace
+candela
+candelabra
+candelabrum
+candent
+candescence
+candescent
+candia
+candid
+candida
+candidacy
+candidate
+candidate's
+candidates
+candidature
+Candide
+candidly
+candidness
+candied
+candies
+Candiot
+candle
+candleberry
+candled
+candlefish
+candleholder
+candlelight
+candlelighter
+candlelit
+Candlemas
+candlenut
+candlepin
+candlepins
+candlepower
+candlepowers
+candler
+candles
+candlesnuffer
+candlestick
+candlestick's
+candlesticks
+candlewick
+Candlewick
+candlewood
+candling
+candor
+candor's
+candors
+candy
+candyfloss
+candying
+candytuft
+cane
+canea
+canebrake
+caned
+canella
+caner
+canes
+canescent
+caneware
+Canfield
+Canfield's
+canful
+cangue
+Canicula
+canicular
+canikin
+canine
+canines
+caning
+Canis
+canister
+canisters
+canker
+cankered
+cankering
+cankerous
+cankerworm
+canna
+cannabin
+cannabis
+cannae
+canned
+cannel
+cannelloni
+cannelure
+canner
+canner's
+canneries
+canners
+cannery
+cannes
+cannibal
+cannibal's
+cannibalic
+cannibalism
+cannibalism's
+cannibalistic
+cannibalization
+cannibalization's
+cannibalizations
+cannibalize
+cannibalized
+cannibalizes
+cannibalizing
+cannibals
+cannier
+cannily
+canniness
+canning
+cannister
+cannister's
+cannisters
+cannock
+cannon
+cannon's
+cannonade
+cannonball
+cannoned
+cannoneer
+cannoning
+cannonry
+cannons
+cannot
+cannula
+cannulate
+canny
+canoe
+canoe's
+canoed
+canoeing
+canoeist
+canoeist's
+canoeists
+canoes
+canoewood
+Canoga
+canon
+canon's
+canoness
+canonic
+canonical
+canonicalization
+canonicalize
+canonicalized
+canonicalizes
+canonicalizing
+canonically
+canonicals
+canonicate
+canonicity
+canonist
+canonization
+canonization's
+canonizations
+canonize
+canonized
+canonizer
+canonizers
+canonizes
+canonizing
+canonry
+canons
+canoodle
+Canopic
+Canopus
+canopy
+canorous
+canorously
+canorousness
+Canossa
+canova
+cans
+canso
+canst
+cant
+cantabile
+Cantabrian
+Cantabrigian
+cantal
+cantala
+cantaloupe
+cantaloupe's
+cantaloupes
+cantankerous
+cantankerously
+cantankerousness
+cantata
+cantatas
+cantatrice
+canted
+canteen
+canteens
+canter
+Canterbury
+cantered
+canterelle
+cantharides
+canthi
+canthus
+canticle
+cantilena
+cantilever
+cantilevers
+cantillate
+cantillation
+cantina
+canting
+cantle
+cantles
+canto
+canton
+canton's
+cantonal
+Cantonese
+cantonment
+cantons
+cantor
+cantor's
+cantorial
+cantoris
+cantors
+cantos
+cantrip
+cantus
+canty
+Canuck
+canula
+Canute
+canute
+canvas
+canvas's
+canvasback
+canvaser
+canvases
+canvaslike
+canvass
+canvassed
+canvasser
+canvassers
+canvasses
+canvassing
+canyon
+canyon's
+canyons
+canzona
+canzone
+canzonet
+cap
+cap's
+capabilites
+capabilities
+capability
+capability's
+Capablanca
+capable
+capableness
+capably
+capacious
+capaciously
+capaciousness
+capacitance
+capacitances
+capacitate
+capacitative
+capacities
+capacitive
+capacitively
+capacitor
+capacitor's
+capacitors
+capacity
+caparison
+Cape
+cape
+capelet
+capelin
+capella
+caper
+capercaillie
+capered
+capering
+Capernaum
+capers
+capes
+capeskin
+capet
+Capet
+Capetian
+Capetown
+capework
+capful
+capias
+capillaceous
+capillarity
+capillary
+Capistrano
+capita
+capital
+capitalism
+capitalist
+capitalist's
+capitalistic
+capitalistically
+capitalists
+capitalizable
+capitalizable's
+capitalizables
+capitalization
+capitalization's
+capitalizations
+capitalize
+capitalized
+capitalizer
+capitalizers
+capitalizes
+capitalizing
+capitally
+capitals
+Capitan
+capitan
+capitate
+capitates
+capitation
+capitol
+capitol's
+Capitoline
+capitols
+capitular
+capitulary
+capitulate
+capitulated
+capitulates
+capitulation
+capitulum
+caplin
+capo
+capon
+Capone
+Caponization
+caponize
+caponized
+caponizes
+caponizing
+caporal
+caporetto
+capote
+cappadocia
+capparidaceous
+capped
+capper
+cappers
+cappie
+capping
+Cappuccilli
+cappuccino
+Cappy
+cappy
+capreolate
+Capri
+capric
+capriccio
+capriccioso
+caprice
+capricious
+capriciously
+capriciousness
+Capricorn
+Capricornus
+caprification
+caprifig
+caprifoliaceous
+caprine
+capriole
+caproic
+caps
+capsaicin
+Capsian
+capsid
+capsize
+capsized
+capsizes
+capsizing
+capstan
+capstans
+capstone
+capsular
+capsulate
+capsulated
+capsule
+capsuled
+capsules
+capsuling
+capsulization
+capsulize
+capsulized
+capsulizes
+capsulizing
+Capt
+capt
+captain
+captaincy
+captained
+captaining
+captains
+captainship
+captan
+caption
+caption's
+captioned
+captioner
+captioning
+captionless
+captions
+captious
+captiously
+captiousness
+captivate
+captivated
+captivates
+captivating
+captivation
+captivator
+captive
+captive's
+captives
+captivity
+captor
+captor's
+captors
+capture
+captured
+capturer
+capturers
+captures
+capturing
+capua
+capuche
+capuchin
+caput
+Caputo
+capybara
+car
+car's
+carabao
+carabid
+carabineer
+carabiner
+carabinero
+carabinier
+carabiniere
+caracal
+caracalla
+caracara
+Caracas
+caracole
+caracoled
+caracoling
+caracul
+carafe
+carageen
+caramba
+caramel
+caramelization
+caramelization's
+caramelizations
+caramelize
+caramelized
+caramelizes
+caramelizing
+carangid
+carapace
+carapace's
+carapaces
+carat
+caratacus
+Caravaggio
+caravan
+caravan's
+caravaner
+caravanner
+caravans
+caravansary
+caravanserai
+caravel
+caraway
+carbamate
+carbamic
+carbamidine
+carbanion
+carbarn
+carbaryl
+carbazole
+carbene
+carbide
+carbine
+carbineer
+carbines
+carbohydrate
+carbohydrate's
+carbohydrates
+carbolated
+carbolic
+carboline
+carbolization
+carbolize
+carbolized
+carbolizes
+carbolizing
+Carboloy
+carbon
+carbon's
+carbonaceous
+carbonade
+carbonado
+Carbonari
+carbonate
+carbonated
+carbonates
+carbonation
+carbonatization
+carbonatization's
+carbonatizations
+Carbondale
+Carbone
+Carbones
+carbonic
+carboniferous
+carbonium
+carbonizable
+carbonizable's
+carbonizables
+carbonization
+carbonization's
+carbonizations
+carbonize
+carbonized
+carbonizer
+carbonizers
+carbonizes
+carbonizing
+carbonless
+carbonous
+carbons
+carbonyl
+carbonylic
+carborundum
+carboxy
+carboxyl
+carboxylase
+carboxylate
+carboxylation
+carboxylic
+carboy
+carbuncle
+carbuncled
+carbuncular
+carburation
+carburet
+carburetion
+carburetor
+carburetors
+carburetted
+carburetter
+carburization
+carburize
+carburized
+carburizes
+carburizing
+carby
+carbylamine
+carcajou
+carcanet
+carcase
+carcass
+carcass's
+carcasses
+carcassonne
+carchemish
+carcinogen
+carcinogenesis
+carcinogenic
+carcinogenicity
+carcinogens
+carcinoid
+carcinoma
+carcinomatosis
+card
+card's
+cardamom
+cardboard
+cardboards
+carded
+carder
+cardiac
+cardialgia
+Cardiff
+Cardiff's
+cardigan
+cardigan's
+cardigans
+Cardiganshire
+cardin
+cardinal
+cardinalate
+cardinalities
+cardinality
+cardinality's
+cardinally
+cardinals
+cardinalship
+carding
+cardiod
+cardiogram
+cardiogram's
+cardiograms
+cardiograph
+cardiographer
+cardiographic
+cardiographs
+cardiography
+cardioid
+cardioid's
+cardioids
+cardiological
+cardiologist
+cardiology
+cardiomegaly
+cardiopathy
+cardiopulmonary
+cardiorespiratory
+cardiotonic
+cardiovascular
+cardiovasculatory
+carditis
+cardoon
+cardplayer
+cards
+cardsharp
+cardsharper
+carduaceous
+carducci
+care
+cared
+careen
+careened
+careening
+career
+career's
+careered
+careering
+careerism
+careerist
+careerists
+careers
+carefree
+careful
+carefuller
+carefullest
+carefully
+carefulness
+careless
+carelessly
+carelessness
+carer
+carers
+cares
+caress
+caressed
+caresser
+caresses
+caressing
+caressingly
+caressive
+caressively
+caret
+caretaker
+caretakers
+caretaking
+carets
+carew
+careworn
+Carey
+Carey's
+carfare
+carfax
+carfuffle
+carful
+Cargill
+Cargill's
+cargo
+cargoes
+cargos
+carhop
+caria
+Carib
+Caribbean
+Caribbee
+caribbees
+caribe
+cariboo
+caribou
+caribous
+caricatural
+caricature
+caricatured
+caricatures
+caricaturist
+caries
+carifta
+carillon
+carillonneur
+carina
+carinate
+caring
+carinthia
+carioca
+cariocan
+cariogenic
+cariole
+carious
+Carl
+Carl's
+Carla
+carle
+Carleton
+Carletonian
+Carlin
+Carlin's
+carline
+carling
+Carlisle
+Carlisle's
+Carlist
+Carlo
+carload
+carloading
+carloads
+Carlos
+carlota
+Carlovingian
+carlow
+Carlsbad
+carlsbad
+Carlsbad's
+Carlsbads
+Carlson
+Carlton
+Carlyle
+carmagnole
+carmaker
+Carman
+carmarthen
+Carmarthenshire
+Carmel
+Carmela
+Carmelite
+Carmen
+Carmen's
+Carmichael
+carminative
+carmine
+carnage
+carnal
+carnality
+carnalize
+carnalizes
+carnallite
+carnally
+carnarvon
+carnassial
+carnatic
+carnation
+carnations
+carnauba
+carne
+Carnegie
+carnelian
+carnet
+carney
+carnify
+carniola
+carnival
+carnival's
+carnivals
+carnivore
+carnivorous
+carnivorously
+carnivorousness
+carnot
+carnotite
+carny
+carob
+caroche
+carol
+carol's
+caroled
+caroler
+carolers
+Carolina
+Carolina's
+Carolinas
+Caroline
+Caroline's
+caroling
+Carolingian
+Carolinian
+Carolinians
+carols
+carolus
+Carolyn
+carom
+carotene
+carotenoid
+carotid
+carousal
+carouse
+caroused
+carousel
+carousel's
+carousels
+carouser
+carousing
+carp
+carpal
+Carpathia
+Carpathian
+Carpathians
+carped
+carpel
+carpellary
+carpentaria
+carpenter
+carpenter's
+carpentered
+carpentering
+carpenters
+carpentier
+carpentry
+carper
+carpet
+carpetbag
+carpetbag's
+carpetbagged
+carpetbagger
+carpetbagger's
+carpetbaggers
+carpetbaggery
+carpetbagging
+carpetbags
+carpeted
+carpeting
+carpets
+carpi
+carping
+carpingly
+carpogonium
+carpology
+carpometacarpus
+carpophagous
+carpophore
+carport
+carpospore
+carposporic
+carps
+carpus
+Carr
+Carr's
+carrack
+carrageen
+Carrara
+carrefour
+carrel
+carrels
+Carreras
+carriage
+carriage's
+carriages
+carriageway
+carriageways
+Carrick
+Carrie
+carried
+carrier
+carriers
+carries
+carriole
+carrion
+Carroll
+Carroll's
+carronade
+carrot
+carrot's
+carrots
+carroty
+carrousel
+Carruthers
+carry
+carryall
+carrycot
+carrying
+carryng
+carryon
+carryout
+carryover
+carryovers
+cars
+carse
+carsick
+Carson
+carstensz
+cart
+cartage
+cartagena
+carte
+carted
+cartel
+cartelization
+cartelization's
+cartelizations
+cartelize
+cartelizes
+cartels
+carter
+carteret
+Carteri
+carters
+Cartesian
+cartful
+Carthage
+Carthaginian
+carthorse
+Carthusian
+Cartier
+cartilage
+cartilaginous
+carting
+cartload
+cartloads
+cartogram
+cartogram's
+cartograms
+cartographer
+cartographers
+cartographic
+cartographical
+cartography
+cartomancy
+carton
+carton's
+cartons
+cartoon
+cartoon's
+cartoonist
+cartoonists
+cartoons
+cartop
+cartouche
+cartridge
+cartridge's
+cartridges
+carts
+cartulary
+cartwheel
+cartwheeler
+cartwheels
+cartwright
+Carty
+carty
+caruncle
+caruncular
+carunculate
+carunculated
+Caruso
+carve
+carved
+carvel
+carven
+carver
+carvers
+carves
+carving
+carvings
+cary
+caryatid
+caryophyllaceous
+caryopsis
+carzey
+casa
+casaba
+casaba's
+casabas
+casablanca
+casals
+Casanova
+Casanova's
+casaubon
+casbah
+cascabel
+cascade
+cascaded
+cascades
+cascading
+cascara
+cascarilla
+case
+casease
+caseate
+caseation
+casebearer
+casebook
+casebooks
+casebound
+cased
+casefy
+casein
+caseload
+caseloads
+casemate
+casement
+casement's
+casements
+caseose
+caseous
+casern
+caserne
+caserta
+cases
+casework
+caseworker
+caseworkers
+caseworm
+Casey
+cash
+cashable
+cashbook
+cashed
+casher
+cashers
+cashes
+cashew
+cashews
+cashier
+cashier's
+cashiers
+cashing
+cashless
+cashmere
+casimere
+casing
+casings
+casino
+casinos
+cask
+cask's
+casket
+casket's
+caskets
+casks
+Caslon
+Caspar
+Casparian
+Caspian
+casque
+cassaba
+Cassandra
+cassareep
+cassata
+cassation
+cassatt
+cassava
+Cassegrainian
+cassel
+casserole
+casserole's
+casseroles
+cassette
+cassettes
+Cassia
+cassimere
+cassini
+cassino
+cassiodorus
+Cassiopeia
+cassirer
+Cassite
+cassite
+cassiterite
+Cassius
+cassock
+cassocked
+cassoulet
+cassowary
+cast
+cast's
+Castalia
+castanet
+castanets
+castaway
+caste
+caste's
+casted
+casteism
+castellammare
+castellan
+castellany
+castellated
+caster
+casters
+castes
+casteth
+castigate
+castigated
+castigates
+castigation
+castigator
+castigators
+castiglione
+castile
+Castilian
+Castilla
+Castillo
+Castillo's
+casting
+castings
+castle
+castled
+Castleford
+Castlereagh
+castles
+castling
+castoff
+castoffs
+castor
+castorized
+castorized's
+castorizeds
+castrate
+castrated
+castrater
+castraters
+castrates
+castrating
+castration
+castrato
+castrator
+castrators
+castratory
+castries
+Castro
+Castroism
+casts
+casual
+casually
+casualness
+casuals
+casualties
+casualty
+casualty's
+Casuarina
+casuist
+casuistic
+casuistical
+casuistry
+cat
+cat's
+catabasis
+catabolic
+catabolically
+catabolism
+catabolite
+catabolize
+catacaustic
+catachresis
+catachresti
+catachrestic
+catachrestical
+cataclasis
+cataclinal
+cataclysm
+cataclysmal
+cataclysmic
+catacomb
+catacombic
+catadromous
+catafalque
+Catalan
+catalase
+catalatic
+catalectic
+catalepsy
+cataleptic
+cataleptically
+Catalina
+catalo
+catalog
+catalog's
+cataloged
+cataloger
+cataloging
+catalogs
+cataloguers
+cataloguize
+cataloguizes
+Catalonia
+catalonia
+catalpa
+catalysis
+catalyst
+catalyst's
+catalysts
+catalytic
+catalytically
+catalyze
+catalyzed
+catalyzer
+catalyzer's
+catalyzers
+catalyzes
+catamaran
+catamenia
+catamite
+catamount
+catania
+catanzaro
+cataphoresis
+cataphyll
+cataplasia
+cataplasm
+cataplastic
+cataplexy
+catapult
+catapulted
+catapulting
+catapults
+cataract
+cataractal
+cataracts
+catarrh
+catarrhal
+catarrhally
+catarrhine
+catastasis
+catastrophe
+catastrophe's
+catastrophes
+catastrophic
+catastrophically
+catastrophism
+catatonia
+catatonic
+catawba
+Catawba
+catbird
+catboat
+catcall
+catch
+catchable
+catchall
+catchee
+catcher
+catcher's
+catchers
+catches
+catchfly
+catchier
+catching
+catchment
+catchpenny
+catchpole
+catchpoll
+catchup
+catchweight
+catchword
+catchwords
+catchy
+cate
+catechesis
+catechetical
+catechin
+catechism
+catechismal
+catechist
+catechistic
+catechizable
+catechizable's
+catechizables
+catechization
+catechization's
+catechizations
+catechize
+catechized
+catechizer
+catechizers
+catechizes
+catechizing
+catechol
+catecholamine
+catecholamines
+catechu
+catechumen
+categoric
+categorical
+categorically
+categories
+categorization
+categorization's
+categorizations
+categorize
+categorized
+categorizer
+categorizers
+categorizes
+categorizing
+category
+category's
+catena
+catenane
+catenary
+catenate
+catenation
+catenoid
+catenulate
+cater
+cateran
+catercorner
+catered
+caterer
+cateress
+catering
+caterpillar
+caterpillar's
+caterpillars
+caters
+caterwaul
+cates
+catface
+catfacing
+catfall
+catfish
+catgut
+cathar
+catharses
+catharsis
+cathartic
+Cathay
+cathead
+cathect
+cathectic
+cathedra
+cathedral
+cathedral's
+cathedrals
+cathepsin
+Catherine
+Catherwood
+Catherwood's
+catheter
+catheterization
+catheterization's
+catheterizations
+catheterize
+catheterizes
+catheters
+catheti
+catheti's
+cathetis
+cathexes
+cathexis
+cathode
+cathode's
+cathodes
+cathodic
+cathodically
+catholic
+catholic's
+catholically
+catholicate
+catholicism
+catholicity
+Catholicization
+catholicize
+Catholicized
+catholicizer
+catholicizers
+catholicizes
+Catholicizing
+catholicon
+catholics
+cathouse
+Cathy
+catiline
+cation
+cationic
+cationically
+cations
+catkin
+catlike
+catling
+catmint
+catnap
+catnaps
+catnip
+cato
+catoptric
+catoptrically
+catoptrics
+cats
+Catskill
+Catskills
+catsup
+cattail
+cattalo
+catted
+cattegat
+cattermole
+cattery
+cattier
+catties
+cattily
+cattiness
+catting
+cattle
+cattleman
+cattlemen
+Cattleya
+catty
+catullus
+CATV
+catwalk
+catwalk's
+catwalks
+cauca
+caucasia
+Caucasian
+Caucasians
+Caucasoid
+Caucasus
+Cauchy
+caucus
+caucuses
+caucusing
+caudad
+caudal
+caudally
+caudate
+caudated
+caudation
+caudex
+caudillo
+caudine
+caudle
+caught
+caul
+cauldron
+cauldrons
+caulescent
+caulicle
+caulicles
+cauliflower
+cauliflowers
+cauline
+caulis
+caulk
+caulker
+caulks
+causal
+causalgia
+causality
+causally
+causate
+causation
+causation's
+causations
+causative
+causatively
+cause
+caused
+causeless
+causer
+causerie
+causes
+causeway
+causeway's
+causeways
+causey
+causeys
+causing
+caustic
+caustically
+causticity
+causticization
+causticization's
+causticizations
+causticize
+causticizer
+causticizers
+causticizes
+causticly
+caustics
+cauterant
+cauterization
+cauterization's
+cauterizations
+cauterize
+cauterized
+cauterizes
+cauterizing
+cautery
+caution
+cautionary
+cautioned
+cautioner
+cautioners
+cautioning
+cautionings
+cautions
+cautious
+cautiously
+cautiousness
+cauvery
+cavafy
+cavalcade
+cavalcades
+cavalier
+cavalierism
+cavalierly
+cavalierness
+cavalla
+cavalry
+cavalryman
+cavalrymen
+cavan
+cavatina
+cave
+caveat
+caveat's
+caveator
+caveats
+caved
+cavefish
+Cavell
+caveman
+cavemen
+Cavendish
+caver
+cavern
+cavern's
+cavernicolous
+cavernous
+cavernously
+caverns
+caves
+Cavesson
+Cavetto
+caviar
+caviare
+cavicorn
+cavie
+cavies
+cavil
+cavilation
+caviled
+caviler
+cavilers
+caviling
+cavilings
+Caviness
+caving
+cavitary
+cavitate
+cavitation
+cavite
+cavities
+cavity
+cavity's
+cavort
+cavorted
+cavorting
+Cavour
+cavy
+caw
+Cawdrey
+cawed
+cawing
+Cawley
+Cawnpore
+caws
+Caxton
+cay
+cayenne
+Cayes
+Cayley
+Cayley's
+Cayman
+cayman
+Cayuga
+Cayuga's
+Cayuse
+CB
+CBS
+cc
+CCNY
+CDC
+CDC's
+CDR
+CDT
+Ceanothus
+cease
+ceased
+ceasefire
+ceasefire's
+ceaseless
+ceaselessly
+ceaselessness
+ceases
+ceasing
+Cecil
+Cecilia
+cecity
+Cecropia
+Cecrops
+cecum
+cedar
+cedarn
+cedarwood
+cede
+ceded
+ceder
+cedi
+cedilla
+ceding
+Cedric
+ceefax
+Ceiba
+ceil
+ceilidh
+ceiling
+ceiling's
+ceilinged
+ceilings
+ceilometer
+ceilometer's
+ceilometers
+ceinture
+Celadon
+Celaeno
+celandine
+Celanese
+celaya
+Celebes
+celebrant
+celebrants
+celebrate
+celebrated
+celebratedness
+celebrates
+celebrating
+celebration
+celebrations
+celebrator
+celebrators
+celebratory
+celebrities
+celebrity
+celebrity's
+celeriac
+celerity
+celery
+celesta
+Celeste
+celestial
+celestialize
+celestializes
+celestially
+celestite
+Celia
+Celia's
+celiac
+celibacy
+celibate
+celibates
+cell
+cella
+cellar
+cellar's
+cellarage
+cellarages
+cellared
+cellarer
+cellaret
+cellarets
+cellarette
+cellarettes
+cellaring
+cellars
+celle
+celled
+cellini
+cellist
+cellist's
+cellists
+cello
+cellobiose
+celloidin
+cellophane
+cellos
+cells
+cellular
+cellularity
+cellularly
+cellulase
+cellule
+cellulitis
+celluloid
+celluloid's
+cellulose
+celluloses
+cellulosic
+cellulous
+celom
+Celsius
+Celt
+Celtiberian
+Celtic
+Celticize
+Celticizes
+cembalo
+cement
+cementation
+cemented
+cementer
+cementing
+cementite
+cementitious
+cements
+cementum
+cemeteries
+cemetery
+cemetery's
+cenacle
+cenesthesia
+cenis
+cenobite
+cenobitic
+cenobitical
+cenogenesis
+cenogenetic
+cenogenetically
+cenospecies
+cenotaph
+cenote
+Cenozoic
+cense
+censer
+censing
+censor
+censored
+censorial
+censoring
+censorious
+censoriously
+censoriousness
+censors
+censorship
+censurable
+censure
+censured
+censurer
+censures
+censuring
+census
+census's
+censuses
+cent
+cental
+centare
+centaur
+centaurea
+centaurs
+Centaurus
+centaury
+centavo
+centenarian
+centenary
+centennial
+centennially
+center
+center's
+centerable
+centerable's
+centerables
+centerboard
+centered
+centerer
+centerers
+centering
+centerings
+centerless
+centerline
+centerlines
+centerpiece
+centerpiece's
+centerpieces
+centers
+centesimal
+centesimo
+centiare
+centigrade
+centigrades
+centigram
+centigram's
+centigrams
+centiliter
+centillion
+centime
+centimeter
+centimeter's
+centimeters
+centimetric
+centimo
+centipede
+centipede's
+centipedes
+centipoise
+centisecond
+centiseconds
+centner
+cento
+centones
+centra
+central
+Central
+centrale
+Centralia
+centralism
+centralist
+centralistic
+centralists
+centrality
+centralization
+centralization's
+centralizations
+centralize
+centralized
+centralizer
+centralizers
+centralizes
+centralizing
+centrally
+centrals
+centrefold
+centreing
+Centrex
+centric
+centrically
+centricity
+centrifugal
+centrifugalization
+centrifugalization's
+centrifugalizations
+centrifugalize
+centrifugalizes
+centrifugally
+centrifugals
+centrifugate
+centrifugation
+centrifuge
+centrifuge's
+centrifuged
+centrifuges
+centrifuging
+centriole
+centripetal
+centripetally
+centrism
+centrist
+centrobaric
+centroclinal
+centroid
+centroidal
+centroids
+centromere
+centromeric
+centrosome
+centrosomic
+centrosphere
+centrosymmetric
+centrum
+cents
+centum
+centurial
+centuries
+centurion
+century
+century's
+CEO
+ceorl
+cep
+cephalad
+cephalalgia
+cephalic
+cephalically
+cephalin
+cephalization
+cephalochordate
+cephalometer
+cephalometric
+cephalometry
+cephalonia
+cephalopod
+cephalothorax
+Cepheid
+Cepheus
+cepstrum
+CEQ
+ceraceous
+ceram
+ceramal
+ceramic
+ceramicist
+ceramics
+ceramist
+ceramium
+cerargyrite
+cerastes
+cerate
+cerated
+Ceratodus
+ceratoid
+Cerberus
+cercaria
+Cercis
+cercopithecoid
+cercus
+cere
+cereal
+cereal's
+cereals
+cerebellar
+cerebellum
+cerebral
+cerebralization
+cerebralization's
+cerebralizations
+cerebralize
+cerebralizes
+cerebrally
+cerebrate
+cerebrated
+cerebrates
+cerebrating
+cerebration
+cerebrations
+cerebroside
+cerebrosides
+cerebrospinal
+cerebrovascular
+cerebrum
+cerecloth
+cerement
+ceremonial
+ceremonialism
+ceremonialist
+ceremonialists
+ceremonialize
+ceremonializes
+ceremonially
+ceremonialness
+ceremonies
+ceremonious
+ceremoniously
+ceremoniousness
+ceremony
+ceremony's
+Cerenkov
+ceres
+Ceres
+ceresin
+cereus
+ceria
+ceric
+cering
+cerise
+cerium
+cermet
+CERN
+cernuous
+cero
+cerography
+ceroplastic
+ceroplastics
+cerotic
+cerotype
+cerous
+cerro
+cert
+certain
+certainly
+certainties
+certainty
+certes
+certifiable
+certifiably
+certificate
+certificated
+certificates
+certificating
+certification
+certifications
+certificatory
+certified
+certifier
+certifiers
+certifies
+certify
+certifying
+certiorari
+certitude
+certitudes
+cerulean
+cerumen
+ceruminous
+ceruse
+cerussite
+Cervantes
+cervelat
+cervical
+cervices
+cervicitis
+cervid
+cervin
+cervine
+cervix
+cervixes
+Cesare
+Cesare's
+cesarean
+cesarian
+cesena
+cesium
+cespitose
+cess
+cessation
+cessation's
+cessations
+cesser
+cession
+cessionary
+Cessna
+cesspit
+cesspool
+cesta
+cesti
+cestode
+cestoid
+cestus
+cesura
+cetacean
+cetacean's
+cetaceans
+cetane
+cetatea
+Cete
+cetera
+ceteras
+ceteris
+cetinje
+cetology
+Cetus
+ceuta
+Ceylon
+Cezanne
+Cezannes
+cf
+CGS
+chabazite
+Chablis
+Chablises
+chabrol
+chacma
+Chaco
+chaconne
+Chad
+Chadderton
+chadic
+Chadwick
+Chadwick's
+chaeronea
+chaeta
+chaetognath
+chaetopod
+chafe
+chafer
+chaff
+chaffer
+chaffered
+chafferer
+chaffering
+Chaffey
+chaffey
+chaffinch
+chaffing
+chaffy
+chafing
+chagall
+chagres
+chagrin
+chagrined
+chagrining
+chagrins
+Chailly
+chain
+chained
+chaining
+chainlike
+chainman
+chainomatic
+chainplate
+chains
+chair
+chairborne
+chaired
+chairing
+chairlady
+chairman
+chairmanship
+chairmanships
+chairmen
+chairperson
+chairperson's
+chairpersons
+chairs
+chairwoman
+chairwomen
+chaise
+chalaza
+chalcanthite
+chalcedonic
+chalcedony
+chalcid
+chalcidice
+Chalcis
+chalcocite
+chalcography
+chalcolithic
+chalcopyrite
+chaldea
+Chaldean
+Chaldee
+chaldron
+chalet
+chaliapin
+chalice
+chalice's
+chaliced
+chalices
+chalicothere
+chalk
+chalkboard
+chalked
+chalking
+chalkline
+chalkpit
+chalks
+chalkstone
+chalky
+challah
+challenge
+challenged
+challenger
+challengers
+challenges
+challenging
+challengingly
+challis
+Chalmers
+chalone
+chalybeate
+Cham
+chamade
+Chamaeleon
+chamaephyte
+chamber
+chambered
+chamberer
+chamberers
+chambering
+chamberlain
+chamberlain's
+chamberlains
+chambermaid
+chambermaids
+chambers
+Chambertin
+chambord
+chambray
+chambrays
+chameleon
+chameleonic
+chameleonize
+chameleonizes
+chameleons
+chamfer
+chamfered
+chamfering
+chamfers
+chamfron
+chamfrons
+chammy
+chamois
+chamoix
+chamomile
+chamonix
+champ
+champac
+champagne
+champaign
+champak
+champers
+champertous
+champerty
+champignon
+champion
+championed
+championing
+championize
+championizes
+champions
+championship
+championship's
+championships
+Champlain
+champlainian
+champollion
+champs
+chance
+chanced
+chanceful
+chancel
+chancellery
+chancellor
+chancellors
+chancellorship
+chancellorships
+Chancellorsville
+chancellory
+chancels
+chanceries
+chancery
+chances
+chancier
+chanciness
+chancing
+chancre
+chancres
+chancroid
+chancroidal
+chancrous
+chancy
+chandelier
+chandelier's
+chandeliers
+chandelle
+chandernagore
+chandigarh
+Chandigarh
+chandler
+chandlery
+chandragupta
+Chandy
+Chandy's
+chanel
+Chang
+changan
+changchiakow
+changchow
+changchun
+change
+changeability
+changeable
+changeableness
+changeably
+changed
+changeful
+changefully
+changefulness
+changeless
+changelessly
+changelessness
+changeling
+changeover
+changeover's
+changeovers
+changer
+changers
+changes
+changing
+changsha
+changteh
+channel
+channeled
+channeler
+channeler's
+channelers
+channeling
+channelization
+channelization's
+channelizations
+channelize
+channelizes
+channels
+channing
+Channing
+chanson
+chant
+chanted
+chanter
+chanterelle
+chanteuse
+chanteuses
+chantey
+chanticleer
+chanticleer's
+chanticleers
+chantier
+chanties
+Chantilly
+chanting
+chantries
+chantry
+chants
+chanty
+chanukah
+Chao
+Chao's
+chaoan
+chaochow
+chaos
+chaotic
+chaotically
+chap
+chap's
+chaparejos
+chaparral
+chapati
+chapatti
+chapbook
+chape
+chapeau
+chapeaus
+chapeaux
+chapel
+chapel's
+chapelles
+chapels
+chaperon
+chaperonage
+chaperone
+chaperoned
+chaperones
+chapfallen
+chapiter
+chaplain
+chaplain's
+chaplaincies
+chaplaincy
+chaplains
+chaplet
+chapleted
+chaplets
+Chaplin
+chaplinesque
+Chapman
+chappal
+chappie
+chapping
+chaps
+chapstick
+chapter
+chapter's
+chaptered
+chapterhouse
+chaptering
+chapters
+char
+charabanc
+characin
+character
+character's
+charactered
+characterful
+charactering
+characteristic
+characteristic's
+characteristically
+characteristics
+characterizable
+characterizable's
+characterizables
+characterization
+characterization's
+characterizations
+characterize
+characterized
+characterizer
+characterizers
+characterizes
+characterizing
+characterless
+characterological
+characterologically
+characters
+charactery
+charade
+charades
+charas
+charcoal
+charcoaled
+charcoals
+charcot
+charcuterie
+chard
+chardin
+chare
+charente
+charge
+chargeable
+chargeableness
+charged
+charger
+chargers
+charges
+charging
+charier
+charily
+chariness
+charing
+chariot
+chariot's
+charioteer
+charioteers
+chariots
+charism
+charisma
+charismata
+charismatic
+charisms
+charitable
+charitableness
+charitably
+charities
+charity
+charity's
+charivari
+charkha
+charladies
+charlady
+charlatan
+charlatanism
+charlatanry
+charlatans
+Charlemagne
+Charlemagne's
+Charlemagnes
+charleroi
+Charles
+Charleston
+Charley
+Charlie
+charlock
+Charlotte
+Charlottenburg
+Charlottesville
+Charlottetown
+Charlton
+charm
+charmed
+charmer
+charmers
+Charmeuse
+charminar
+charming
+charmingly
+charmless
+charms
+charnel
+charnock
+charollais
+Charon
+Charon's
+Charpentier
+charpoy
+charqui
+charr
+charred
+charring
+chars
+chart
+Charta
+chartable
+charted
+charter
+charterage
+chartered
+charterer
+charterers
+charterhouse
+chartering
+charters
+charting
+chartings
+Chartism
+chartist
+chartists
+chartless
+chartography
+Chartres
+chartreuse
+chartroom
+chartrooms
+charts
+chartularies
+chartulary
+charwoman
+charwomen
+chary
+Charybdis
+chase
+chased
+chaser
+chasers
+chases
+Chasidim
+chasing
+chasm
+chasm's
+chasms
+chassepot
+chasseur
+chassis
+chaste
+chastely
+chasten
+chastened
+chastener
+chasteness
+chastening
+chaster
+chastest
+chastise
+chastised
+chastisement
+chastisements
+chastiser
+chastisers
+chastises
+chastising
+chastity
+chasuble
+chat
+chateau
+chateau's
+chateaubriand
+chateaus
+chateaux
+chatelain
+chatelaine
+chatelaines
+chatelains
+Chatham
+Chatham's
+chatoyance
+chatoyancy
+chatoyant
+chats
+Chatsworth
+Chatsworth's
+chattahoochee
+Chattahoochee
+Chattanooga
+chatted
+chattel
+chattelization
+chattelization's
+chattelizations
+chattelize
+chattelizes
+chattels
+chatter
+chatterbox
+chatterboxes
+chattered
+chatterer
+chatterers
+chattering
+chatterly
+chatters
+Chatterton
+chattier
+chattily
+chattiness
+chatting
+chatty
+Chaucer
+Chaucerian
+chauffer
+chauffers
+chauffeur
+chauffeured
+chauffeuring
+chauffeurs
+chaulmoogra
+Chauncey
+Chauncey's
+chaunt
+chausses
+chaussure
+chaussures
+Chautauqua
+chauvinism
+chauvinism's
+chauvinist
+chauvinist's
+chauvinistic
+chauvinistically
+chauvinists
+chavannes
+chaw
+chayote
+cheap
+cheapen
+cheapened
+cheapening
+cheapens
+cheaper
+cheapest
+cheapie
+cheapish
+cheapishly
+cheaply
+cheapness
+cheapskate
+cheapskates
+cheat
+cheated
+cheater
+cheaters
+cheating
+cheats
+cheb
+cheboksary
+Chechen
+check
+checkable
+checkbits
+checkbook
+checkbook's
+checkbooks
+checked
+checker
+checkerberry
+checkerbloom
+checkerboard
+checkerboards
+checkered
+checkering
+checkers
+checking
+checkless
+checklist
+checklists
+checkmark
+checkmarks
+checkmate
+checkmated
+checkmates
+checkmating
+checkoff
+checkout
+checkouts
+checkpoint
+checkpoint's
+checkpoints
+checkrein
+checkroom
+checkrooms
+checkrow
+checks
+checksum
+checksum's
+checksummed
+checksumming
+checksums
+checkup
+checkups
+checky
+cheddar
+cheddite
+cheek
+Cheek
+cheek's
+cheekbone
+cheekbones
+cheekful
+cheekier
+cheekily
+cheekiness
+cheekpiece
+cheeks
+cheeky
+cheep
+cheeps
+cheer
+cheered
+cheerer
+cheerers
+cheerful
+cheerfulize
+cheerfulizes
+cheerfully
+cheerfulness
+cheerier
+cheerily
+cheeriness
+cheering
+cheerio
+cheerlead
+cheerleader
+cheerleaders
+cheerless
+cheerlessly
+cheerlessness
+cheerly
+cheers
+cheery
+cheese
+cheese's
+cheeseboard
+cheeseburger
+cheeseburgers
+cheesecake
+cheesecake's
+cheesecakes
+cheesecloth
+cheesecloths
+cheesed
+cheesemaker
+cheesemakers
+cheesemaking
+cheesemonger
+cheeseparer
+cheeseparing
+cheeseparings
+cheeses
+cheesewood
+cheesier
+cheesiness
+cheesing
+cheesy
+cheetah
+cheetahs
+chef
+chef's
+chefdom
+chefoo
+chefs
+cheiron
+cheju
+Chekhov
+chekhov
+chekiang
+chela
+chelatable
+chelate
+chelated
+chelating
+chelation
+chelations
+chelicera
+chelicerate
+cheliform
+Chellean
+Chelmsford
+cheloid
+chelonian
+chelp
+Chelsea
+Chelsea's
+Cheltenham
+Chelyabinsk
+Chelyuskin
+chemic
+chemical
+chemicalization
+chemicalization's
+chemicalizations
+chemicalize
+chemicalizes
+chemically
+chemicals
+chemiluminescence
+chemiluminescent
+chemin
+chemische
+chemise
+chemises
+chemisette
+chemism
+chemisorb
+chemisorption
+chemist
+chemist's
+chemistries
+chemistry
+chemists
+chemmy
+chemnitz
+chemoautotrophic
+chemoautotrophically
+chemoautotrophy
+chemometrics
+chemoprophylaxis
+chemoreception
+chemoreceptive
+chemoreceptivity
+chemoreceptor
+chemoreceptors
+chemosmosis
+chemosphere
+chemostat
+chemosynthesis
+chemotaxis
+chemotherapy
+chemotherapy's
+chemotropism
+chempaduk
+chemulpo
+chemurgy
+Chen
+chenab
+Cheney
+Cheney's
+cheng
+Cheng
+Chengchow
+Chengteh
+Chengtu
+chenille
+chenopod
+Cheongsam
+Cheops
+Cherbourg
+Cheremiss
+Cheremkhovo
+Cherenkov
+cheribon
+cherish
+cherishable
+cherished
+cherisher
+cherishes
+cherishing
+Cheriton
+Cheriton's
+Chernovtsy
+Chernozem
+Cherokee
+Cherokees
+cheroot
+cherries
+cherry
+cherry's
+cherrylike
+cherrystone
+chersonese
+chert
+Chertsey
+cherub
+cherub's
+cherubic
+cherubically
+cherubim
+Cherubini
+cherublike
+cherubs
+chervil
+chervils
+chervonets
+Cheryl
+Cheryl's
+Chesapeake
+Cheshire
+cheshunt
+chess
+chessboard
+chessboards
+Chessel
+chessman
+chessmen
+chest
+chester
+Chesterfield
+Chesterfieldian
+Chesterton
+chestful
+chestier
+chestnut
+chestnut's
+chestnuts
+chests
+chesty
+chetah
+Chetnik
+Cheval
+chevalier
+cheveron
+chevet
+cheviot
+chevrette
+Chevrolet
+chevron
+chevroned
+chevrotain
+Chevy
+chew
+chewa
+chewable
+chewed
+chewer
+chewers
+chewie
+chewing
+chews
+chewy
+Cheyenne
+Cheyennes
+chi
+chiack
+Chian
+Chiang
+Chiang's
+chianti
+chiapas
+chiaroscurist
+chiaroscuro
+chiasma
+chiasmatic
+chiasmus
+chiastic
+chiastolite
+chiat
+chiaus
+chiba
+Chibchan
+chibouk
+chic
+Chicago
+Chicago's
+Chicagoan
+Chicagoans
+chicalote
+Chicana
+Chicana's
+Chicanas
+chicane
+chicanery
+chicaning
+Chicano
+Chicano's
+Chicanos
+chiccory
+chichagof
+chichen
+chichester
+chichewa
+chichi
+chichihaerh
+chick
+chickabiddy
+chickadee
+chickadee's
+chickadees
+Chickasaw
+chickasaws
+Chickasaws
+chicken
+chickened
+chickenhearted
+chickening
+chickenpox
+chickens
+chickpea
+chickpea's
+chickpeas
+chicks
+chickweed
+chickweeds
+chiclayo
+chicle
+chicly
+chicness
+chicory
+chicos
+chidden
+chide
+chided
+chides
+chiding
+chief
+chief's
+chiefdom
+chiefdoms
+chiefly
+chiefs
+chieftain
+chieftain's
+chieftaincies
+chieftaincy
+chieftains
+chieftainship
+chiffchaff
+chiffon
+chiffonier
+chifley
+chigetai
+chigger
+chiggers
+chignon
+chigwell
+chihli
+Chihuahua
+chilblain
+chilblains
+child
+child's
+childbear
+childbearing
+childbed
+childbirth
+childbirths
+childcare
+Childermas
+childhood
+childhoods
+childish
+childishly
+childishness
+childless
+childlessness
+childlike
+childlikeness
+childly
+childminder
+childminders
+childminding
+childrearing
+children
+children's
+Chile
+Chilean
+Chiles
+chili
+chiliad
+chiliasm
+chilies
+chilkoot
+chill
+chilled
+chiller
+chillers
+chilli
+chillier
+chillies
+chillily
+chilliness
+chilling
+chillingly
+chillness
+chillon
+chills
+chillum
+chilly
+chilopod
+chilpancingo
+Chiltern
+Chilton
+chilung
+chimaera
+chimb
+chimborazo
+chimbote
+chime
+chime's
+chimed
+chimer
+chimera
+chimere
+chimeric
+chimerical
+chimerically
+chimerism
+chimes
+chiming
+Chimique
+Chimiques
+chimkent
+chimney
+chimney's
+chimneyed
+chimneypiece
+chimneypot
+chimneys
+chimp
+chimpanzee
+chimpanzees
+chimps
+chin
+chin's
+China
+china
+chinaberry
+chinagraph
+Chinaman
+Chinamen
+chinan
+Chinatown
+Chinatown's
+chinaware
+chinbone
+chincapin
+chinch
+chincherinchee
+chinchilla
+chindit
+chindwin
+chine
+Chinee
+chines
+Chinese
+Chinese's
+Ching
+ching
+chinghai
+chingtao
+chink
+chinkapin
+chinked
+chinkiang
+chinks
+chinless
+chinned
+chinner
+chinners
+chinning
+chino
+chinoiserie
+Chinook
+Chinookan
+chinos
+chinquapin
+chins
+chintz
+chintzier
+chintzy
+chinwag
+Chionodoxa
+chios
+chip
+chip's
+chipboard
+chipmunk
+chipmunk's
+chipmunks
+chipolata
+chipped
+Chippendale
+chipper
+chippewa
+Chippewa
+chipping
+chippy
+chips
+chirac
+chirau
+chirico
+chirm
+chirographer
+chirographic
+chirographical
+chirography
+chiromancer
+chiromancy
+Chiron
+chiropodist
+chiropodists
+chiropody
+chiropractic
+chiropractor
+chiropractors
+chiropter
+chiropteran
+chirp
+chirped
+chirpily
+chirping
+chirps
+chirpy
+chirrup
+chirruped
+chirruping
+chirrups
+chirurgeon
+chisel
+chiseled
+chiseler
+chiselers
+chiseling
+chiselings
+chisels
+chishima
+Chisholm
+chisimaio
+chit
+Chita
+chital
+chitarrone
+chitchat
+chitin
+chitinous
+chitlings
+chiton
+chits
+chittagong
+chitter
+chittered
+chittering
+chitterlings
+chitters
+chiv
+chivalric
+chivalrous
+chivalrously
+chivalrousness
+chivalry
+chivaree
+chive
+chives
+chivied
+chivvied
+chivvy
+chivvying
+chivy
+chivying
+Chkalov
+chlamydate
+chlamydeous
+chlamydospore
+chlodwig
+Chloe
+chloracne
+chloral
+chlorambucil
+chloramine
+chloramphenicol
+chlorate
+chlordane
+Chlorella
+chlorenchyma
+chloric
+chloride
+chlorides
+chloridize
+chloridizes
+chlorinate
+chlorinated
+chlorinates
+chlorination
+chlorine
+chlorinity
+chlorinize
+chlorinizes
+chlorite
+chloritic
+chloroacetic
+chlorobenzene
+chloroform
+chloroformization
+chloroformization's
+chloroformizations
+chloroformize
+chloroformizes
+chlorohydrin
+Chloromycetin
+chlorophyll
+chlorophyllose
+chlorophyllous
+chloropicrin
+chloroplast
+chloroplast's
+chloroplasts
+chloroplatinate
+chloroprene
+chloroquine
+chlorosis
+chlorothiazide
+chlorotic
+chlorous
+chlorpromazine
+chlorpropamide
+chlortetracycline
+choanocyte
+Chocho
+chock
+chock's
+chockablock
+chocked
+chocker
+chocking
+chocks
+Choco
+chocolate
+chocolate's
+chocolates
+chocolaty
+Choctaw
+Choctaws
+chogyal
+choice
+choicely
+choiceness
+choicer
+choices
+choicest
+choir
+choir's
+choirboy
+choirmaster
+choirs
+choiseul
+choke
+chokeberry
+chokebore
+chokecherry
+choked
+chokedamp
+choker
+chokers
+chokes
+choking
+chokingly
+choko
+choky
+cholecalciferol
+cholecyst
+cholecystectomy
+choler
+cholera
+choleraic
+choleric
+cholesterol
+choli
+cholic
+choline
+cholinergic
+cholinesterase
+cholla
+chollers
+cholon
+cholula
+chomp
+Chomsky
+Chomsky's
+chon
+chondrify
+chondriosome
+chondrite
+chondroma
+chondrule
+choof
+chook
+choom
+choose
+chooser
+choosers
+chooses
+choosey
+choosier
+choosing
+choosy
+chop
+chopfallen
+chophouse
+Chopin
+chopine
+choplogic
+chopped
+chopper
+chopper's
+choppers
+choppier
+choppily
+choppiness
+chopping
+choppy
+chops
+chopstick
+chopsticks
+choragus
+choral
+chorale
+chorales
+chorally
+chord
+chord's
+chordal
+chordata
+chordate
+chorded
+chording
+chordophone
+chords
+chore
+chorea
+choreman
+choreodrama
+choreograph
+choreographed
+choreographer
+choreographers
+choreographic
+choreographically
+choreography
+chores
+choriamb
+choric
+chorically
+chorine
+chorines
+choring
+chorion
+chorister
+chorization
+chorization's
+chorizations
+chorizo
+chorley
+chorographic
+chorography
+choroid
+chorology
+chortle
+chortled
+chortles
+chortling
+chorus
+chorused
+choruses
+chorusmaster
+choryza
+chose
+chosen
+chota
+chott
+Chou
+Chou's
+chough
+choux
+chow
+chowder
+chowderhead
+chowderheaded
+chowders
+chowhound
+chowtime
+chrematistic
+chresard
+chrestomathy
+Chris
+chrism
+chrismatory
+chrisom
+chrissake
+Chrissie
+Christ
+Christadelphian
+Christchurch
+christen
+Christendom
+christened
+christening
+christens
+Christensen
+Christensen's
+Christenson
+Christhood
+Christian
+Christian's
+Christiana
+Christiana's
+Christianity
+Christianization
+Christianization's
+Christianizations
+Christianize
+Christianizer
+Christianizers
+Christianizes
+Christianizing
+Christians
+Christiansen
+Christianson
+Christianson's
+Christie
+Christina
+Christina's
+Christine
+Christlike
+Christmas
+Christmastide
+Christmastime
+Christoff
+Christoffel
+Christology
+Christoph
+Christoph's
+Christophe
+Christopher
+Christopher's
+christsake
+Christy
+chromate
+chromatic
+chromatically
+chromaticism
+chromaticity
+chromaticness
+chromatics
+chromatid
+chromatin
+chromatize
+chromatizes
+chromatogram
+chromatogram's
+chromatograms
+chromatograph
+chromatographic
+chromatographically
+chromatography
+chromatology
+chromatolysis
+chromatolytic
+chromatophore
+chrome
+chromed
+chromes
+chromic
+chromicize
+chromicizes
+chromide
+chrominance
+chroming
+chromite
+chromium
+chromize
+chromized
+chromizes
+chromizing
+chromo
+chromogen
+chromogenic
+chromolithograph
+chromolithography
+chromomere
+chromonema
+chromophore
+chromoplast
+chromoprotein
+chromosomal
+chromosome
+chromosome's
+chromosomes
+chromosomic
+chromosphere
+chromospheric
+chromous
+chromyl
+chronaxie
+chronic
+chronical
+chronically
+chronicity
+chronicle
+chronicled
+chronicler
+chroniclers
+chronicles
+chronobiology
+chronogram
+chronogram's
+chronogrammatic
+chronogrammatical
+chronograms
+chronograph
+chronographic
+chronographs
+chronography
+chronologer
+chronologers
+chronologic
+chronological
+chronologically
+chronologies
+chronologist
+chronologists
+chronologize
+chronologizes
+chronology
+chronology's
+chronometer
+chronometer's
+chronometers
+chronometric
+chronometrical
+chronometrically
+chronometry
+chronon
+chronoscope
+chronoscopes
+chrysalid
+chrysalis
+chrysanthemum
+chrysanthemum's
+chrysanthemums
+chrysarobin
+chryselephantine
+Chrysler
+chrysoberyl
+chrysolite
+chrysoprase
+chrysostom
+chrysotile
+chthonian
+chub
+chubb
+chubbier
+chubbiest
+chubbily
+chubbiness
+chubby
+chubbyness
+chubs
+chuck
+chuck's
+chucked
+chuckhole
+chucking
+chuckle
+chuckled
+chucklehead
+chuckleheaded
+chuckleheads
+chuckles
+chucklesome
+chuckling
+chucklingly
+chucks
+chuckwalla
+chudskoye
+chufa
+chuff
+chuffed
+chuffier
+chuffing
+chuffy
+chug
+chugalug
+chugger
+chugging
+chugs
+chukar
+Chukchi
+chukka
+chukker
+chum
+chummier
+chummily
+chumminess
+chumming
+chummy
+chump
+chump's
+chumping
+chumps
+chums
+chumship
+chunder
+chunderous
+Chung
+Chungking
+chunk
+chunk's
+chunkier
+chunkily
+chunks
+chunky
+chunnel
+chunter
+chupatti
+chupattis
+chuppah
+chur
+church
+churched
+churches
+churchgo
+churchgoer
+churchgoers
+churchgoing
+churchianity
+Churchill
+Churchillian
+churching
+churchless
+churchliness
+churchly
+churchman
+churchmanship
+churchmen
+churchwarden
+churchwardens
+churchwoman
+churchwomen
+churchy
+churchyard
+churchyard's
+churchyards
+churidars
+churinga
+churl
+churlish
+churlishly
+churlishness
+churls
+churn
+churned
+churner
+churners
+churning
+churns
+churr
+Churrigueresque
+chute
+chute's
+chuted
+chutes
+chuting
+chutist
+chutists
+chutney
+chutneys
+chuttie
+chutzpa
+chutzpah
+Chuvash
+chyack
+chyle
+chyme
+chymosin
+chymotrypsin
+chymotrypsinogen
+CIA
+ciao
+cibber
+ciborium
+cic
+cicada
+cicadas
+cicala
+cicatricle
+cicatrix
+Ciccolini
+Cicely
+Cicero
+cicerone
+Ciceronian
+Ciceronianize
+Ciceronianizes
+cichlid
+cichlids
+Cid
+cider
+ciders
+cienfuegos
+cig
+cigar
+cigar's
+cigarette
+cigarette's
+cigarettes
+cigarillo
+cigarillos
+cigars
+cii
+cil
+cilia
+ciliary
+ciliate
+ciliated
+ciliately
+ciliates
+cilice
+cilicia
+Cilician
+ciliolate
+cilium
+cimabue
+Cimbri
+cimex
+Cimmerian
+cimon
+cinch
+cinches
+Cinchona
+cinchonidine
+cinchonine
+cinchonism
+cinchonize
+Cincinnati
+Cincinnatus
+cincture
+cinder
+cinder's
+Cinderella
+cinders
+cindery
+Cindy
+Cindy's
+cine
+cineaste
+cinema
+cinemagoer
+cinemagoers
+cinemas
+Cinemascope
+cinematheque
+cinematic
+cinematically
+cinematize
+cinematograph
+cinematographer
+cinematographic
+cinematographical
+cinematographically
+cinematographs
+cinematography
+cineol
+Cinerama
+Cineraria
+cinerarium
+cinereous
+cinerin
+cingulum
+cinna
+cinnabar
+cinnamic
+cinnamon
+cinquain
+cinque
+cinquecento
+cinquefoil
+cinzano
+Cipango
+cipher
+cipher's
+ciphered
+ciphering
+ciphers
+ciphertext
+ciphony
+cipolin
+circa
+circadian
+circassia
+Circassian
+Circe
+circinate
+circinately
+Circinus
+circle
+circled
+circler
+circles
+circlet
+circling
+circlorama
+circuit
+circuit's
+circuital
+circuited
+circuiting
+circuitous
+circuitously
+circuitousness
+circuitry
+circuits
+circuity
+circulant
+circular
+circular's
+circularities
+circularity
+circularization
+circularization's
+circularizations
+circularize
+circularized
+circularizer
+circularizers
+circularizes
+circularizing
+circularly
+circularness
+circulars
+circulatable
+circulate
+circulated
+circulates
+circulating
+circulation
+circulations
+circulative
+circulator
+circulators
+circulatory
+circumambient
+circumambiently
+circumambulate
+circumambulates
+circumbendibus
+circumcircle
+circumcise
+circumcised
+circumciser
+circumcises
+circumcising
+circumcision
+circumcisions
+circumference
+circumferences
+circumferential
+circumferentially
+circumflex
+circumflexes
+circumfluent
+circumfluous
+circumfuse
+circumfused
+circumfuses
+circumfusing
+circumfusion
+circumfusions
+circumjacent
+circumlocution
+circumlocution's
+circumlocutions
+circumlocutory
+circumlunar
+circummartian
+circumnavigate
+circumnavigated
+circumnavigates
+circumnavigating
+circumnavigation
+circumnavigations
+circumnavigator
+circumnavigators
+circumnutate
+circumpolar
+circumscissile
+circumscribe
+circumscribed
+circumscribes
+circumscribing
+circumscription
+circumscriptions
+circumsolar
+circumspect
+circumspection
+circumspections
+circumspectly
+circumsphere
+circumstance
+circumstance's
+circumstanced
+circumstances
+circumstancing
+circumstantial
+circumstantiality
+circumstantially
+circumstantiate
+circumstantiated
+circumstantiates
+circumstantiating
+circumvallate
+circumvallated
+circumvallates
+circumvallating
+circumvallation
+circumvallations
+circumvent
+circumventable
+circumvented
+circumventing
+circumvention
+circumventions
+circumvents
+circumvolution
+circumvolutions
+circus
+circus's
+circuses
+circusy
+cirenaica
+cirencester
+cirque
+cirques
+cirrate
+cirrhoses
+cirrhosis
+cirrhotic
+cirri
+cirripede
+cirrocumulus
+cirrose
+cirrostratus
+cirrous
+cirrus
+cirsoid
+Cisalpine
+ciscaucasia
+cisco
+ciskei
+cislunar
+cispadane
+cissoid
+cist
+cistaceous
+Cistercian
+cistern
+cistern's
+cisterna
+cisterns
+cistron
+Cistus
+cit
+citable
+citadel
+citadel's
+citadels
+citation
+citation's
+citational
+citations
+cite
+cited
+cites
+cithara
+cither
+citied
+cities
+citified
+citify
+citing
+citizen
+citizen's
+citizeness
+citizenize
+citizenizes
+citizenly
+citizenry
+citizens
+citizenship
+citole
+citral
+citrate
+citrated
+citreous
+citric
+citriculture
+citrin
+citrine
+Citroen
+citron
+citronella
+citrulline
+citrus
+citruses
+cittern
+citterns
+City
+city
+city's
+cityscape
+cityscapes
+citywide
+ciudad
+civ
+civet
+civic
+civically
+civics
+civie
+civies
+civil
+civilian
+civilian's
+civilianization
+civilianizations
+civilianize
+civilianized
+civilianizes
+civilianizing
+civilians
+civilists
+civilities
+civility
+civilizable
+civilizable's
+civilizables
+civilization
+civilization's
+civilizational
+civilizational's
+civilizationals
+civilizations
+civilize
+civilized
+civilizedness
+civilizer
+civilizers
+civilizes
+civilizing
+civilly
+civism
+civvy
+clabber
+clachan
+clack
+clacker
+clackers
+clackmannan
+clacks
+Clacton
+clactonian
+clad
+cladded
+cladding
+cladoceran
+cladode
+cladophora
+cladophyll
+clads
+claim
+claimable
+claimant
+claimant's
+claimants
+claimed
+claimer
+claiming
+claims
+clairaudience
+Claire
+clairvoyance
+clairvoyant
+clairvoyantly
+clairvoyants
+clam
+clam's
+clamant
+clamantly
+clambake
+clambakes
+clamber
+clambered
+clamberer
+clambering
+clambers
+clammier
+clammily
+clamminess
+clamming
+clammy
+clamor
+clamored
+clamorer
+clamorer's
+clamorers
+clamoring
+clamorist
+clamorist's
+clamorists
+clamorous
+clamorously
+clamorousness
+clamors
+clamp
+clampdown
+clamped
+clamper
+clamping
+clamps
+clams
+clamshell
+clamshells
+clamworm
+clamworms
+clan
+clandestine
+clandestinely
+clandestineness
+clang
+clanged
+clanger
+clangers
+clanging
+clangor
+clangor's
+clangored
+clangoring
+clangorous
+clangorously
+clangors
+clangs
+clank
+clanked
+clanking
+clankingly
+clannish
+clannishly
+clannishness
+clans
+clansman
+clansmen
+clap
+clapboard
+clapboards
+Clapeyron
+Clapham
+clapped
+clapper
+clapperboard
+clapperboards
+clapperclaw
+clappers
+clapping
+claps
+Clapton
+claptrap
+claque
+claques
+Clara
+Clarabella
+Clare
+Claremont
+Clarence
+Clarenceux
+Clarendon
+Clarendon's
+claret
+clarets
+clarification
+clarifications
+clarified
+clarifier
+clarifies
+clarify
+clarifying
+clarinet
+clarinetist
+clarinets
+clarinettist
+clarino
+clarion
+clarity
+Clark
+Clarke
+Clarkia
+claro
+clarridge
+Clarridge
+clarts
+clary
+clash
+clashed
+clasher
+clashes
+clashing
+clasp
+clasped
+clasper
+clasping
+clasps
+class
+classed
+classer
+classes
+classic
+classical
+classicalism
+classicalist
+classicality
+classicalize
+classicalizes
+classically
+classicism
+classicist
+classicistic
+classicization
+classicize
+classicized
+classicizes
+classicizing
+classics
+classier
+classiest
+classifiable
+classification
+classifications
+classificatorily
+classificatory
+classified
+classifieds
+classifier
+classifiers
+classifies
+classify
+classifying
+classiness
+classing
+classis
+classless
+classlessness
+classmate
+classmate's
+classmates
+classroom
+classroom's
+classrooms
+classwork
+classy
+clastic
+clathrate
+clatter
+clattered
+clatterer
+clattering
+clatteringly
+clatters
+clattery
+Claude
+Claudel
+Claudia
+claudication
+Claudio
+Claudius
+Claus
+clausal
+clause
+clause's
+Clausen
+clauses
+Clausewitz
+Clausius
+claustral
+claustrophobia
+claustrophobic
+clavate
+clave
+claver
+clavicembalo
+clavichord
+clavichordist
+clavicle
+clavicle's
+clavicles
+clavicorn
+clavicular
+clavier
+clavierist
+clavieristic
+claviform
+clavius
+claw
+clawed
+clawer
+clawing
+claws
+clay
+clay's
+claybank
+clayed
+clayey
+claying
+clayish
+claymore
+claypan
+clays
+claystone
+Clayton
+Clayton's
+Claytonia
+clayware
+clean
+cleanable
+cleaned
+cleaner
+cleaner's
+cleaners
+cleanest
+cleanhanded
+cleaning
+cleanlier
+cleanliness
+cleanly
+cleanness
+cleans
+cleanse
+cleansed
+cleanser
+cleansers
+cleanses
+cleansing
+cleanskin
+cleanthes
+cleanup
+cleanup's
+cleanups
+clear
+clearable
+clearance
+clearance's
+clearances
+clearcole
+clearcut
+cleared
+clearer
+clearest
+clearheaded
+clearheadedly
+clearheadedness
+clearing
+clearing's
+clearinghouse
+clearings
+clearly
+clearness
+clears
+clearstory
+Clearwater
+clearway
+clearways
+clearwing
+cleat
+cleated
+cleating
+cleats
+cleavage
+cleavages
+cleave
+cleaved
+cleaver
+cleavers
+cleaves
+cleaving
+cleck
+cleek
+cleethorpes
+clef
+clef's
+clefs
+cleft
+cleft's
+clefts
+cleg
+cleidoic
+cleisthenes
+cleistogamy
+clem
+Clematis
+clemence
+clemenceau
+clemency
+clemens
+Clemens
+clement
+clemente
+Clemente
+Clementine
+clemently
+clements
+Clemmons
+Clemson
+clench
+clenched
+clenches
+clenching
+Cleome
+cleon
+Cleopatra
+clepe
+cleped
+clepes
+cleping
+clepsydra
+cleptomania
+clerestory
+clergy
+clergyman
+clergymen
+cleric
+clerical
+clericalism
+clericalist
+clericalize
+clericalizes
+clerically
+clericals
+clerics
+clerihew
+clerk
+clerk's
+clerked
+clerkess
+clerking
+clerkly
+clerks
+clerkship
+cleruchy
+Cleve
+cleveite
+Cleveland
+Clevenger
+clever
+cleverer
+cleverest
+cleverish
+cleverly
+cleverness
+clevis
+clianthus
+Cliburn
+cliche
+cliche's
+cliches
+clichy
+click
+clicked
+clicker
+clickers
+clicking
+clicks
+client
+client's
+clientage
+cliental
+clientele
+clients
+cliff
+cliff's
+cliffhang
+cliffhanger
+cliffhanging
+Clifford
+cliffs
+cliffy
+Clifton
+Clifton's
+clii
+climacteric
+climactic
+climactically
+climate
+climate's
+climates
+climatic
+climatically
+climatize
+climatizes
+climatological
+climatologically
+climatologist
+climatologists
+climatology
+climax
+climaxed
+climaxes
+climaxing
+climb
+climbable
+climbed
+climber
+climbers
+climbing
+climbs
+clime
+clime's
+climes
+clinandrium
+clinch
+clinched
+clincher
+clinches
+clinching
+clinchingly
+cline
+clines
+cling
+clingfish
+clinging
+clings
+clingy
+clinic
+clinic's
+clinical
+clinically
+clinician
+clinicians
+clinics
+clink
+clinked
+clinker
+clinkered
+clinkering
+clinkers
+clinkstone
+clinometer
+clinometer's
+clinometers
+clinometric
+clinometry
+clinostat
+clinquant
+Clint
+Clinton
+Clinton's
+Clintonia
+Clio
+clip
+clip's
+clipboard
+clipboards
+clipped
+clipper
+clipper's
+clippers
+Clipperton
+clippie
+clipping
+clipping's
+clippings
+clips
+clipsheet
+clique
+clique's
+cliques
+cliquey
+cliquish
+cliquishly
+cliquishness
+clishmaclaver
+clisthenes
+clitellum
+clitic
+clitoral
+clitoric
+clitoris
+cliv
+Clive
+clix
+cloaca
+cloacal
+cloak
+cloak's
+cloaked
+cloaking
+cloakroom
+cloakrooms
+cloaks
+clobber
+clobbered
+clobbering
+clobbers
+cloche
+clock
+clocked
+clocker
+clockers
+clocking
+clockings
+clocklike
+clockmaker
+clocks
+clockwatcher
+clockwise
+clockwork
+clod
+clod's
+cloddish
+cloddishness
+cloddy
+clodhopper
+clodhopper's
+clodhoppers
+clodhopping
+clods
+clog
+clog's
+clogged
+clogging
+clogs
+cloister
+cloister's
+cloistered
+cloistering
+cloisters
+cloistral
+cloistress
+clomb
+clomp
+clomped
+clomping
+clomps
+clonal
+clonally
+clone
+cloned
+cloner
+cloners
+clones
+clonic
+clonicity
+cloning
+clonk
+clonked
+clonking
+clonks
+clonus
+clop
+clopped
+clopping
+clops
+closable
+close
+closeable
+closed
+closedown
+closefisted
+closely
+closemouthed
+closeness
+closenesses
+closeout
+closer
+closers
+closes
+closest
+closet
+closeted
+closetful
+closets
+closeup
+closeups
+closing
+closings
+Clostridium
+closure
+closure's
+closured
+closures
+closuring
+clot
+cloth
+clothbound
+clothe
+clothed
+clothes
+clothesbrush
+clotheshorse
+clothesline
+clotheslines
+clothesman
+clothesmen
+clothespin
+clothespress
+clothier
+clothing
+Clotho
+cloths
+clotted
+clotting
+cloture
+clotured
+clotures
+cloturing
+cloud
+cloudberry
+cloudburst
+cloudbursts
+clouded
+cloudier
+cloudiest
+cloudily
+cloudiness
+clouding
+cloudland
+cloudless
+cloudlessly
+cloudlessness
+cloudlet
+cloudlets
+clouds
+cloudscape
+cloudy
+clouet
+clough
+clout
+clove
+cloven
+clover
+cloverleaf
+cloverleaves
+cloves
+clovis
+clown
+clownery
+clowning
+clownish
+clownishly
+clownishness
+clowns
+cloy
+cloying
+cloyingly
+club
+club's
+clubable
+clubbable
+clubbed
+clubber
+clubbier
+clubbiness
+clubbing
+clubby
+clubfoot
+clubfooted
+clubhaul
+clubhouse
+clubland
+clubman
+clubroom
+clubrooms
+clubs
+cluck
+clucked
+clucking
+clucks
+clucky
+clue
+clue's
+clueing
+clueless
+clues
+cluing
+Cluj
+clumber
+clump
+clumped
+clumping
+clumps
+clumpy
+clumsier
+clumsiest
+clumsily
+clumsiness
+clumsy
+clung
+clunk
+clunked
+clunker
+clunkiness
+clunking
+clunks
+clunky
+clunkyly
+cluny
+clupeid
+clupeoid
+clustan
+cluster
+clusterability
+clusterable
+clustered
+clustering
+clusterings
+clusters
+clustery
+clutch
+clutched
+clutches
+clutching
+clutchy
+clutter
+cluttered
+cluttering
+clutters
+Cluytens
+clvi
+clvii
+clwyd
+clxi
+clxii
+clxiv
+clxix
+clxvi
+clxvii
+Clyde
+clydebank
+Clydesdale
+clype
+clypeus
+clyster
+Clytemnestra
+cm
+CMOS
+cnidarian
+cnidoblast
+cnidus
+cnossus
+cnut
+Co
+CO
+coacervate
+coach
+coach's
+coached
+coacher
+coaches
+coaching
+coachman
+coachmen
+coachwood
+coachwork
+coact
+coaction
+coactive
+coadapted
+coadjutant
+coadjutor
+coadjutrices
+coadjutrix
+coadunate
+coadunated
+coadunates
+coadunating
+coadunation
+coagulability
+coagulable
+coagulant
+coagulants
+coagulase
+coagulate
+coagulated
+coagulates
+coagulating
+coagulation
+coagulum
+coahuila
+coal
+coaled
+coaler
+coalesce
+coalesced
+coalescence
+coalescent
+coalesces
+coalescing
+coalface
+coalfield
+coalfields
+coalfish
+coalification
+coalify
+coaling
+coalition
+coalitionist
+coalize
+coalizer
+coalizers
+coalizes
+coalmine
+coalmines
+coalport
+coals
+coaming
+coapt
+coaptation
+coaptation's
+coapted
+coapting
+coapts
+coarctate
+coarctation
+coarse
+coarsely
+coarsen
+coarsened
+coarseness
+coarsening
+coarser
+coarsest
+coarticulation
+coarticulatory
+coast
+Coast
+coastal
+coasted
+coaster
+coasters
+coastguard
+coastguardman
+coastguardsman
+coasting
+coastland
+coastline
+coasts
+coastward
+coastwards
+coastwise
+coat
+Coatbridge
+coated
+coatee
+coater
+coaters
+Coates
+coati
+coating
+coatings
+coatrack
+coatroom
+coats
+coattail
+coattails
+coauthor
+coax
+coaxed
+coaxer
+coaxes
+coaxial
+coaxially
+coaxing
+cob
+cob's
+cobalt
+cobaltic
+cobaltite
+cobaltous
+Cobb
+Cobb's
+cobber
+Cobbett
+cobble
+cobbled
+cobbler
+cobbler's
+cobblers
+cobbles
+cobblestone
+cobblestoned
+cobblestones
+cobbling
+cobby
+cobden
+cobelligerent
+Cobham
+cobia
+coble
+cobnut
+Cobol
+Cobol's
+cobra
+cobs
+coburg
+cobweb
+cobweb's
+cobwebbed
+cobwebby
+cobwebs
+coca
+cocaine
+cocainism
+cocainization
+cocainization's
+cocainizations
+cocainize
+cocainizes
+cocci
+coccid
+coccidioidomycosis
+coccidiosis
+cocciferous
+coccolith
+coccyx
+cochabamba
+cochairman
+cochairmen
+Cochin
+cochineal
+cochise
+Cochise
+cochlea
+cochleate
+Cochran
+Cochran's
+Cochrane
+Cochrane's
+cock
+cockade
+cockaded
+Cockaigne
+cockalorum
+cockamamie
+cockatiel
+cockatoo
+cockatrice
+cockayne
+cockboat
+cockchafer
+cockcroft
+cockcrow
+cocked
+cocker
+cockerel
+cockeye
+cockeyed
+cockeyedly
+cockeyedness
+cockfight
+cockfight's
+cockfighting
+cockfights
+cockhorse
+cockier
+cockily
+cockiness
+cocking
+cockle
+cockleboat
+cocklebur
+cockleshell
+cockloft
+cockney
+cockneyfy
+cockneyish
+cockneyism
+cockneys
+cockpit
+cockpits
+cockroach
+cockroaches
+cocks
+cockscomb
+cocksfoot
+cockshy
+cockspur
+cocksure
+cockswain
+cocktail
+cocktail's
+cocktails
+cockup
+cocky
+coco
+cocoa
+coconscious
+coconsciousness
+coconspirator
+coconspirators
+coconut
+coconut's
+coconuts
+cocoon
+cocoon's
+cocoons
+cocopan
+cocos
+Cocos
+cocotte
+cocoyam
+cocteau
+cocurricular
+cod
+coda
+codable
+codasyl
+codder
+Coddington
+Coddington's
+coddle
+coddled
+coddler
+coddles
+coddling
+code
+codebook
+codebooks
+codebreak
+codeclination
+coded
+codefendant
+codeine
+codeless
+codeposit
+coder
+coder's
+coders
+codes
+codetermination
+codetermine
+codetermines
+codeword
+codeword's
+codewords
+codex
+codfish
+codger
+codices
+codicil
+codicillary
+codicology
+codifiability
+codification
+codification's
+codifications
+codified
+codifier
+codifier's
+codifiers
+codifies
+codify
+codifying
+coding
+codings
+codling
+codomain
+codominant
+codominate
+codominated
+codominates
+codominating
+codon
+codpiece
+codpieces
+cods
+codswallop
+Cody
+Cody's
+coed
+coedit
+coedited
+coediting
+coeditor
+coeditor's
+coeditors
+coedits
+coeds
+coeducation
+coeducational
+coeducationalize
+coeducationalizes
+coeducationally
+coefficient
+coefficient's
+coefficiently
+coefficients
+coelacanth
+coelenterate
+coelenteron
+coeliac
+coelom
+coelostat
+coenacle
+coenamor
+coenamored
+coenamoring
+coenamors
+coenobite
+coenocyte
+coenurus
+coenzyme
+coequal
+coequality
+coequalize
+coequalizes
+coequally
+coerce
+coerced
+coerces
+coercibility
+coercible
+coercing
+coercion
+coercions
+coercive
+coercively
+coerciveness
+coercivity
+coessential
+coetaneous
+coeternal
+coeternally
+coeternity
+coeur
+coeval
+coevality
+coevolution
+coexecutor
+coexist
+coexisted
+coexistence
+coexistent
+coexisting
+coexists
+coextend
+coextensive
+coextensively
+cofactor
+cofactors
+cofeature
+coff
+coffee
+coffee's
+coffeecup
+coffeehouse
+coffeepot
+coffees
+coffer
+coffer's
+cofferdam
+coffers
+Coffey
+Coffey's
+coffin
+coffin's
+coffins
+coffle
+coffles
+Coffman
+cofunction
+cog
+cogency
+cogent
+cogently
+coggan
+cogged
+cogging
+cogitable
+cogitate
+cogitated
+cogitates
+cogitating
+cogitation
+cogitative
+cogito
+coglike
+cognac
+cognate
+cognately
+cognates
+cognation
+cognations
+cognition
+cognitional
+cognitions
+cognitive
+cognitively
+cognitives
+cognitivity
+cognizable
+cognizably
+cognizance
+cognizant
+cognize
+cognized
+cognizer
+cognizers
+cognizes
+cognizing
+cognomen
+cognoscenti
+cogon
+cogs
+cogwheel
+cogwheels
+cohabit
+cohabitant
+cohabitants
+cohabitation
+cohabitational
+cohabitations
+cohabited
+cohabitee
+cohabitees
+cohabiting
+cohabits
+coheir
+coheiress
+Cohen
+cohere
+cohered
+coherence
+coherency
+coherent
+coherently
+coherer
+coheres
+cohering
+cohesion
+cohesional
+cohesionless
+cohesive
+cohesively
+cohesiveness
+Cohn
+coho
+cohobate
+cohomology
+cohort
+cohort's
+cohorts
+cohosh
+cohune
+coidentity
+coif
+coiffeur
+coiffeuse
+coiffing
+coiffure
+coiffured
+coign
+coil
+coilability
+coiled
+coiling
+coils
+coimbatore
+coimbra
+coin
+coinage
+coincide
+coincided
+coincidence
+coincidence's
+coincidences
+coincident
+coincidental
+coincidentally
+coincidently
+coincides
+coinciding
+coined
+coiner
+coining
+coins
+coinsurance
+coinsure
+coinsurer
+Cointreau
+coir
+coire
+coit
+coital
+coitally
+coition
+coitional
+coitus
+coke
+cokes
+coking
+cokuloris
+col
+cola
+colander
+colanders
+colasanto
+colatitude
+colatitudes
+colbert
+Colby
+colcannon
+colchester
+colchicine
+Colchicum
+Colchis
+colcothar
+cold
+coldblood
+colder
+coldest
+coldhearted
+coldheartedly
+coldheartedness
+coldish
+coldly
+coldness
+colds
+Cole
+Cole's
+colectomy
+Coleman
+Coleman's
+colemanite
+coleopteran
+coleoptile
+coleorhiza
+Coleridge
+coles
+coleslaw
+colet
+Colette
+Colette's
+coleus
+colewort
+coley
+Colgate
+coli
+colic
+colicky
+colicroot
+colicweed
+coliform
+coligny
+Colima
+coliseum
+colitis
+coll
+collaborate
+collaborated
+collaborates
+collaborating
+collaboration
+collaborationism
+collaborationist
+collaborationists
+collaborations
+collaborative
+collaboratively
+collaborator
+collaborator's
+collaborators
+collage
+collagen
+collages
+collagist
+collagists
+collapsar
+collapse
+collapsed
+collapses
+collapsibility
+collapsible
+collapsing
+collar
+collarbone
+collard
+collared
+collarette
+collaring
+collarless
+collars
+collate
+collated
+collateral
+collaterality
+collateralize
+collaterally
+collates
+collating
+collation
+collations
+collative
+collator
+collators
+colleague
+colleague's
+colleagues
+colleagueship
+colleaguesmanship
+collect
+collectable
+collectanea
+collected
+collectedly
+collectedness
+collectible
+collecting
+collection
+collection's
+collections
+collective
+collectively
+collectives
+collectivism
+collectivist
+collectivistic
+collectivistically
+collectivists
+collectivities
+collectivity
+collectivization
+collectivization's
+collectivizations
+collectivize
+collectivized
+collectivizes
+collector
+collector's
+collectorate
+collectorates
+collectors
+collectorship
+collects
+Colleen
+college
+college's
+colleges
+collegial
+collegiality
+collegially
+collegian
+collegians
+collegiate
+collegiately
+collegium
+collembolan
+collenchyma
+collet
+collide
+collided
+collides
+colliding
+collie
+collied
+collier
+Collier
+collieries
+colliery
+collies
+colligate
+colligation
+colligative
+collimate
+collimated
+collimates
+collimating
+collimation
+collimator
+collinear
+collinearity
+Collins
+Collinsia
+collision
+collision's
+collisional
+collisionally
+collisionless
+collisions
+collocate
+collocates
+collocation
+collocational
+collocutor
+collodion
+collogue
+collogued
+colloguing
+colloid
+colloidal
+colloidally
+collop
+colloq
+Colloq
+colloquia
+colloquial
+colloquialism
+colloquialism's
+colloquialisms
+colloquiality
+colloquialize
+colloquializes
+colloquially
+colloquist
+colloquium
+colloquoy
+colloquy
+collotype
+collude
+colluded
+colludes
+colluding
+collusion
+collusions
+collusive
+collusively
+colluvial
+colluvium
+colly
+collywobbles
+colmar
+Colobus
+colocynth
+colog
+cologarithm
+Cologne
+cologne
+cologned
+colombes
+Colombia
+Colombian
+Colombians
+Colombo
+Colombo's
+colon
+colon's
+colonel
+colonel's
+colonelcy
+colonels
+colonial
+colonialism
+colonialist
+colonialistic
+colonialize
+colonializes
+colonially
+colonialness
+colonials
+colonic
+colonies
+colonist
+colonist's
+colonists
+colonitis
+colonizabilities
+colonizability
+colonizability's
+colonizable
+colonizable's
+colonizables
+colonization
+colonization's
+colonizationist
+colonizationist's
+colonizationists
+colonizations
+colonize
+colonized
+colonizer
+colonizers
+colonizes
+colonizing
+colonnade
+colonnaded
+colonnades
+colons
+colonsay
+colony
+colony's
+colophon
+colophony
+coloquintida
+color
+color's
+colorabilities
+colorability
+colorability's
+colorable
+colorable's
+colorableness
+colorables
+colorablies
+colorably
+Colorado
+Colorado's
+colorama
+colorant
+colorants
+colorate
+coloration
+coloratura
+colorcast
+colorcaster
+colorcasters
+colored
+coloreds
+colorer
+colorer's
+colorers
+colorfast
+colorfastness
+colorful
+colorfully
+colorfulness
+colorific
+colorimeter
+colorimeter's
+colorimeters
+colorimetric
+colorimetrically
+colorimetry
+coloring
+colorings
+colorism
+colorisms
+colorist
+colorist's
+coloristic
+coloristically
+coloristics
+colorists
+colorization
+colorization's
+colorizations
+colorize
+colorizes
+colorless
+colorlessly
+colorlessness
+colorman
+colormap
+colormap's
+colormaps
+colormen
+colors
+colossae
+colossal
+colossally
+Colosseum
+colossi
+Colossian
+colossians
+colossus
+colossuses
+colostomy
+colostral
+colostrum
+colotomy
+colpitis
+colporteur
+colquhoun
+colt
+colt's
+colter
+coltish
+coltishly
+coltishness
+Coltrane
+colts
+coltsfoot
+colubrid
+colubrine
+colugo
+colum
+Columba
+columbarium
+Columbia
+Columbian
+columbic
+columbine
+columbines
+columbite
+columbium
+columbous
+Columbus
+columella
+column
+column's
+columnar
+columned
+columniation
+columnist
+columnistic
+columnists
+columnization
+columnization's
+columnizations
+columnize
+columnized
+columnizes
+columnizing
+columns
+columnwise
+colure
+Colwyn
+coly
+colza
+com
+coma
+comae
+comaker
+Comanche
+Comanchean
+comaneci
+comas
+comate
+comatose
+comatulid
+comb
+combat
+combatant
+combatant's
+combatants
+combated
+combating
+combative
+combatively
+combativeness
+combats
+combatted
+combe
+combed
+comber
+combers
+combinability
+combinable
+combinate
+combination
+combination's
+combinational
+combinations
+combinative
+combinator
+combinator's
+combinatorial
+combinatorially
+combinatoric
+combinatorics
+combinators
+combinatory
+combine
+combined
+combiner
+combiners
+combines
+combing
+combings
+combining
+comblike
+combo
+combos
+combs
+combust
+combuster
+combustibility
+combustible
+combustibles
+combustibly
+combusting
+combustion
+combustions
+combustive
+combustor
+combustors
+Comdex
+Comdex's
+come
+comeback
+comecon
+comedian
+comedian's
+comedians
+comedic
+comedie
+comedienne
+comediennes
+comedies
+comedo
+comedown
+comedy
+comedy's
+comelier
+comeliness
+comely
+comenius
+comer
+comers
+comes
+comest
+comestible
+comestibles
+comet
+comet's
+cometary
+cometh
+cometic
+comets
+comeuppance
+comfier
+comfit
+comfits
+comfort
+comfortabilities
+comfortability
+comfortable
+comfortableness
+comfortably
+comforted
+comforter
+comforters
+comforting
+comfortingly
+comfortless
+comforts
+comfrey
+comfy
+comic
+comic's
+comical
+comicality
+comically
+comics
+comines
+Cominform
+coming
+comings
+Comintern
+comique
+comitia
+comity
+comma
+comma's
+Command
+command
+command's
+commandable
+commandant
+commandant's
+commandants
+commanded
+commandeer
+commandeered
+commandeering
+commandeers
+commander
+commanders
+commandership
+commandery
+commanding
+commandingly
+commandment
+commandment's
+commandments
+commando
+commandos
+commands
+commas
+commeasure
+commedia
+commemorate
+commemorated
+commemorates
+commemorating
+commemoration
+commemorations
+commemorative
+commemoratively
+commemoratives
+commemorator
+commemorators
+commence
+commenced
+commencement
+commencement's
+commencements
+commencer
+commences
+commencing
+commend
+commendable
+commendably
+commendam
+commendation
+commendation's
+commendations
+commendatory
+commended
+commender
+commending
+commends
+commensal
+commensalism
+commensally
+commensurability
+commensurable
+commensurably
+commensurate
+commensurately
+commensurates
+commensuration
+commensurations
+comment
+comment's
+commentaries
+commentary
+commentary's
+commentate
+commentates
+commentator
+commentator's
+commentators
+commented
+commenter
+commenting
+comments
+commerce
+commerced
+commercial
+commercialism
+commercialist
+commercialistic
+commercialization
+commercialization's
+commercializations
+commercialize
+commercialized
+commercializes
+commercializing
+commercially
+commercialness
+commercials
+commercing
+Commie
+commie
+commies
+commination
+comminatory
+commines
+commingle
+commingled
+comminute
+comminuted
+comminution
+commis
+commiserate
+commiserated
+commiserates
+commiserating
+commiseration
+commiserative
+commissar
+commissariat
+commissary
+commission
+commissionaire
+commissioned
+commissioner
+commissioners
+commissionership
+commissioning
+commissions
+commissural
+commissure
+commit
+commitment
+commitment's
+commitments
+commits
+committable
+committal
+committed
+committee
+committee's
+committeeman
+committeemen
+committees
+committeewoman
+committeewomen
+committing
+commix
+commixture
+commo
+commode
+commodes
+commodious
+commodiously
+commodiousness
+commodities
+commodity
+commodity's
+commodore
+commodore's
+commodores
+commodus
+common
+commonable
+commonage
+commonalities
+commonality
+commonalty
+commoner
+commoner's
+commoners
+commonest
+commonize
+commonizes
+commonly
+commonness
+commonplace
+commonplaceness
+commonplaces
+commons
+commonsense
+commonsensible
+commonsensibly
+commonsensical
+commonweal
+commonwealth
+commonwealths
+commotion
+commotions
+commove
+commoved
+commoves
+commoving
+communal
+communalism
+communalist
+communalists
+communalities
+communality
+communalization
+communalization's
+communalizations
+communalize
+communalized
+communalizer
+communalizers
+communalizes
+communalizing
+communally
+communard
+communards
+commune
+communed
+communes
+communese
+communicability
+communicable
+communicableness
+communicably
+communicant
+communicant's
+communicants
+communicate
+communicated
+communicatee
+communicates
+communicatie
+communicating
+communication
+communicational
+communications
+communicative
+communicatively
+communicativeness
+communicator
+communicator's
+communicators
+communicatory
+communing
+communion
+communique
+communiques
+communism
+communist
+communist's
+communistic
+communistically
+communists
+communitarian
+communitarianism
+communities
+community
+community's
+communization
+communization's
+communizations
+communize
+communized
+communizes
+communizing
+commutable
+commutate
+commutated
+commutates
+commutating
+commutation
+commutations
+commutative
+commutatively
+commutativity
+commutator
+commutators
+commute
+commuted
+commuter
+commuters
+commutes
+commuting
+comnenus
+como
+comorin
+comoro
+Comoros
+comoving
+comp
+compact
+compacted
+compacter
+compacters
+compactest
+compactible
+compactify
+compacting
+compaction
+compactly
+compactness
+compactor
+compactor's
+compactors
+compacts
+compadre
+Compagnie
+compander
+companders
+companies
+companion
+companion's
+companionable
+companionableness
+companionably
+companionate
+companionize
+companionizes
+companions
+companionship
+companionway
+companionways
+company
+company's
+comparability
+comparable
+comparableness
+comparably
+comparatist
+comparative
+comparatively
+comparativeness
+comparatives
+comparativist
+comparator
+comparator's
+comparators
+compare
+compared
+comparer
+compares
+comparing
+comparison
+comparison's
+comparisons
+compart
+compartment
+compartmental
+compartmentalization
+compartmentalization's
+compartmentalizations
+compartmentalize
+compartmentalized
+compartmentalizes
+compartmentalizing
+compartmentation
+compartmentations
+compartmented
+compartmenting
+compartmentize
+compartmentizes
+compartments
+compass
+compassable
+compassed
+compasses
+compassing
+compassion
+compassionate
+compassionately
+compassionateness
+compassionless
+compatability
+compatibilities
+compatibility
+compatibility's
+compatible
+compatibleness
+compatibles
+compatibly
+compatriot
+compatriotic
+compatriots
+compeer
+compel
+compellable
+compellation
+compelled
+compeller
+compelling
+compellingly
+compels
+compend
+compendia
+compendious
+compendiously
+compendiousness
+compendium
+compensability
+compensable
+compensate
+compensated
+compensates
+compensating
+compensation
+compensational
+compensations
+compensative
+compensator
+compensators
+compensatory
+compere
+compered
+compering
+compete
+competed
+competence
+competences
+competencies
+competency
+competent
+competently
+competes
+competing
+competition
+competition's
+competitions
+competitive
+competitively
+competitiveness
+competitor
+competitor's
+competitors
+competitory
+compilability
+compilable
+compilation
+compilation's
+compilations
+compile
+compiled
+compiler
+compiler's
+compilers
+compiles
+compiling
+complacence
+complacency
+complacent
+complain
+complainant
+complainants
+complained
+complainer
+complainers
+complaining
+complainingly
+complains
+complaint
+complaint's
+complaints
+complaisance
+complaisant
+complaisantly
+compleat
+complect
+complected
+complement
+complemental
+complementarily
+complementariness
+complementarity
+complementary
+complementation
+complemented
+complementer
+complementers
+complementing
+complementizer
+complements
+comples
+complete
+completed
+completely
+completeness
+completer
+completes
+completing
+completion
+completions
+completive
+complex
+complexation
+complexes
+complexion
+complexional
+complexioned
+complexities
+complexity
+complexly
+complexness
+complexometric
+complexometry
+compliance
+compliances
+compliancy
+compliant
+compliantly
+complicacy
+complicate
+complicated
+complicatedly
+complicatedness
+complicates
+complicating
+complication
+complications
+complicator
+complicator's
+complicators
+complice
+complicity
+complied
+complier
+compliers
+complies
+compliment
+complimentarily
+complimentary
+complimented
+complimenter
+complimenters
+complimenting
+compliments
+compline
+complot
+comply
+complying
+compo
+component
+component's
+componential
+componentry
+components
+compony
+comport
+comported
+comportment
+compos
+compose
+composed
+composedly
+composedness
+composer
+composer's
+composers
+composes
+composing
+Compositae
+composite
+compositely
+composites
+composition
+compositional
+compositionally
+compositions
+compositor
+compositors
+compossible
+compost
+compostela
+composure
+compotation
+compote
+compound
+compoundable
+compounded
+compounder
+compounding
+compounds
+comprador
+comprehend
+comprehended
+comprehendible
+comprehending
+comprehends
+comprehensibility
+comprehensible
+comprehensibleness
+comprehensibly
+comprehension
+comprehensive
+comprehensively
+comprehensiveness
+compress
+compressed
+compressedly
+compresses
+compressibility
+compressible
+compressing
+compression
+compressional
+compressions
+compressive
+compressively
+compressor
+compressors
+comprisable
+comprisal
+comprisals
+comprise
+comprised
+comprises
+comprising
+compromise
+compromised
+compromiser
+compromisers
+compromises
+compromising
+compromisingly
+Comptometer
+Compton
+Compton's
+comptroller
+comptroller's
+comptrollers
+comptrollership
+compulsion
+compulsion's
+compulsions
+compulsive
+compulsively
+compulsiveness
+compulsives
+compulsivity
+compulsorily
+compulsory
+compunction
+compunctions
+compunctious
+compurgation
+compurgations
+compurgator
+Compuserve
+Compuserve's
+computability
+computable
+computation
+computation's
+computational
+computationally
+computations
+compute
+computed
+computer
+computer's
+computerese
+computerite
+computerizable
+computerization
+computerize
+computerized
+computerizes
+computerizing
+computerlike
+computernik
+computers
+computes
+computing
+comrade
+comradeliness
+comradely
+comradery
+comrades
+comradeship
+comsat
+comstockery
+comsummatively
+comte
+Comus
+con
+Conakry
+conan
+Conant
+Conant's
+conation
+conative
+conatus
+concatenate
+concatenated
+concatenates
+concatenating
+concatenation
+concatenations
+concave
+concavity
+conceal
+concealable
+concealed
+concealer
+concealers
+concealing
+concealingly
+concealment
+conceals
+concede
+conceded
+concededly
+conceder
+concedes
+conceding
+conceit
+conceited
+conceitedly
+conceitedness
+conceits
+conceivability
+conceivable
+conceivableness
+conceivably
+conceive
+conceived
+conceiver
+conceives
+conceiving
+concelebrate
+concensus
+concent
+concenter
+concentrate
+concentrated
+concentrates
+concentrating
+concentration
+concentrations
+concentrative
+concentrator
+concentrators
+concentric
+concentrically
+concentricity
+concept
+concept's
+conceptacle
+conception
+conception's
+conceptional
+conceptions
+conceptive
+concepts
+conceptual
+conceptualism
+conceptualist
+conceptualistic
+conceptualistically
+conceptuality
+conceptualization
+conceptualization's
+conceptualizations
+conceptualize
+conceptualized
+conceptualizer
+conceptualizes
+conceptualizing
+conceptually
+conceptus
+concern
+concerned
+concernedly
+concerning
+concernment
+concerns
+concert
+concertante
+concerted
+concertedly
+concertedness
+concertgoer
+concerti
+concertina
+concertino
+concertize
+concertizer
+concertizers
+concertizes
+concertmaster
+concertmeister
+concerto
+concertos
+concerts
+concession
+concession's
+concessionaire
+concessionaires
+concessional
+concessionary
+concessioner
+concessions
+concessive
+concessively
+conch
+concha
+conches
+conchie
+conchiferous
+conchiolin
+conchobar
+conchoid
+conchoidal
+conchology
+concierge
+concierges
+conciliar
+conciliarly
+conciliate
+conciliated
+conciliates
+conciliation
+conciliations
+conciliative
+conciliator
+conciliatory
+concinnity
+concise
+concisely
+conciseness
+concision
+concisions
+conclave
+conclaves
+conclude
+concluded
+concluder
+concludes
+concluding
+conclusion
+conclusion's
+conclusions
+conclusive
+conclusively
+conclusiveness
+concoct
+concocted
+concocter
+concoction
+concoctive
+concocts
+concomitance
+concomitant
+concomitantly
+concomitants
+concord
+concordance
+concordant
+concordantly
+concordat
+Concorde
+concorde
+Concordia
+concourse
+concourses
+concrescence
+concrescences
+concrescent
+concrete
+concreted
+concretely
+concreteness
+concretes
+concreting
+concretion
+concretionary
+concretism
+concretist
+concretistic
+concretization
+concretizations
+concretize
+concretized
+concretizes
+concretizing
+concubinage
+concubine
+concubines
+concupiscence
+concupiscent
+concupiscible
+concur
+concurred
+concurrence
+concurrencies
+concurrency
+concurrent
+concurrently
+concurring
+concurs
+concuss
+concussed
+concusses
+concussing
+concussion
+concussions
+concussive
+concussively
+condemn
+condemnable
+condemnate
+condemnation
+condemnations
+condemnatory
+condemned
+condemner
+condemners
+condemning
+condemnor
+condemns
+condensable
+condensate
+condensates
+condensation
+condensational
+condensations
+condense
+condensed
+condenser
+condensers
+condenses
+condensible
+condensing
+condescend
+condescendence
+condescending
+condescendingly
+condescends
+condescension
+condign
+condignly
+condillac
+condiment
+condimental
+condiments
+condition
+conditionable
+conditional
+conditionality
+conditionalize
+conditionalizes
+conditionally
+conditionals
+conditioned
+conditioner
+conditioners
+conditioning
+conditions
+condo
+condo's
+condolatory
+condole
+condoled
+condolence
+condolences
+condoling
+condom
+condominial
+condominium
+condominium's
+condominiums
+condoms
+condonable
+condonation
+condone
+condoned
+condoner
+condones
+condoning
+condor
+condos
+condottiere
+conduce
+conduced
+conduces
+conducing
+conducive
+conduciveness
+conduct
+conductance
+conductances
+conducted
+conductibility
+conductible
+conductimetric
+conducting
+conduction
+conductive
+conductively
+conductivities
+conductivity
+conductometric
+conductor
+conductor's
+conductorial
+conductors
+conductress
+conducts
+conduit
+conduits
+conduplicate
+conduplication
+condyle
+condyloid
+condyloma
+cone
+cone's
+coned
+coneflower
+cones
+Conestoga
+coney
+confab
+confabbed
+confabbing
+confabulate
+confabulated
+confabulates
+confabulation
+confabulations
+confabulator
+confabulatory
+confect
+confection
+confectionary
+confectioner
+confectioners
+confectionery
+confections
+confects
+confederacy
+confederal
+confederalist
+confederalists
+confederate
+confederates
+confederation
+confederations
+confederative
+confederatize
+confederatizes
+confer
+conferee
+conferees
+conference
+conference's
+conferences
+conferencing
+conferential
+conferment
+conferments
+conferrable
+conferral
+conferrals
+conferred
+conferrer
+conferrer's
+conferrers
+conferring
+confers
+Conferva
+confess
+confessable
+confessant
+confessed
+confessedly
+confesses
+confessing
+confession
+confession's
+confessional
+confessionalism
+confessionalist
+confessionally
+confessionals
+confessions
+confessor
+confessor's
+confessors
+confetti
+confidant
+confidant's
+confidante
+confidantes
+confidants
+confide
+confided
+confidence
+confidences
+confident
+confidential
+confidentiality
+confidentially
+confidentialness
+confidently
+confider
+confides
+confiding
+confidingly
+confidingness
+configurable
+configural
+configurate
+configurated
+configurates
+configurating
+configuration
+configuration's
+configurational
+configurationally
+configurationism
+configurations
+configurative
+configure
+configured
+configures
+configuring
+confine
+confined
+confinement
+confinement's
+confinements
+confiner
+confines
+confining
+confirm
+confirmability
+confirmable
+confirmand
+confirmation
+confirmation's
+confirmational
+confirmations
+confirmatory
+confirmed
+confirmedly
+confirmedness
+confirming
+confirms
+confiscable
+confiscatable
+confiscate
+confiscated
+confiscates
+confiscating
+confiscation
+confiscations
+confiscator
+confiscators
+confiscatory
+confiteor
+confiture
+conflagrant
+conflagrate
+conflagrated
+conflagrates
+conflagration
+conflagrations
+conflagrator
+conflagrators
+conflagratory
+conflate
+conflated
+conflates
+conflating
+conflation
+conflations
+conflatrate
+conflatrating
+conflict
+conflicted
+conflictful
+conflicting
+conflictingly
+confliction
+conflictions
+conflictive
+conflictless
+conflicts
+conflictual
+confluence
+confluences
+confluent
+confluents
+conflux
+confluxes
+confocal
+conform
+conformability
+conformable
+conformably
+conformal
+conformance
+conformation
+conformation's
+conformational
+conformationally
+conformations
+conformed
+conformer
+conformers
+conforming
+conformism
+conformist
+conformists
+conformity
+conforms
+confound
+confounded
+confoundedly
+confounder
+confounding
+confounds
+confraternities
+confraternity
+confrere
+confreres
+confront
+confrontal
+confrontation
+confrontation's
+confrontational
+confrontationism
+confrontationist
+confrontations
+confronted
+confronter
+confronters
+confronting
+confronts
+Confucian
+Confucianism
+Confucius
+confuse
+confused
+confusedly
+confusedness
+confuser
+confusers
+confuses
+confusing
+confusingly
+confusion
+confusional
+confusions
+confutation
+confutations
+confutative
+confutator
+confutators
+confute
+confuted
+confuter
+confutes
+confuting
+cong
+conga
+congeal
+congealed
+congealing
+congealment
+congeals
+congelation
+congelations
+congener
+congeneric
+congenial
+congeniality
+congenialize
+congenializes
+congenially
+congenital
+congenitally
+conger
+congeries
+congest
+congested
+congesting
+congestion
+congestive
+congests
+congius
+conglobate
+conglomerate
+conglomerated
+conglomerates
+conglomeratic
+conglomeration
+conglomerations
+conglomerative
+conglomerator
+conglutinant
+conglutinate
+conglutinated
+conglutinates
+conglutinating
+conglutination
+Congo
+Congolese
+congou
+congrats
+congratulate
+congratulated
+congratulates
+congratulation
+congratulations
+congratulator
+congratulatory
+congregant
+congregate
+congregated
+congregates
+congregating
+congregation
+congregational
+congregationalism
+congregationalist
+congregationalists
+congregationalize
+congregationalizes
+congregations
+congregator
+congress
+congress's
+congressed
+congresses
+congressing
+congressional
+congressionally
+congressman
+congressmen
+congresswoman
+congresswomen
+congretants
+Congreve
+congruence
+congruency
+congruent
+congruential
+congruentially
+congruently
+congruity
+congruous
+congruously
+congruousness
+conic
+conical
+conically
+conicalness
+conicity
+conics
+conidiophore
+conidium
+conifer
+coniferous
+conifers
+coniine
+coning
+coniology
+Coniston
+Conium
+conjectural
+conjecturally
+conjecture
+conjectured
+conjecturer
+conjectures
+conjecturing
+conjoin
+conjoined
+conjoining
+conjoins
+conjoint
+conjointly
+conjuction
+conjugacy
+conjugal
+conjugality
+conjugally
+conjugant
+conjugants
+conjugate
+conjugated
+conjugately
+conjugateness
+conjugates
+conjugating
+conjugation
+conjugational
+conjugationally
+conjugations
+conjugative
+conjunct
+conjuncted
+conjunction
+conjunction's
+conjunctional
+conjunctionally
+conjunctions
+conjunctiva
+conjunctival
+conjunctive
+conjunctively
+conjunctivitis
+conjuncts
+conjuncture
+conjunctures
+conjuration
+conjurations
+conjure
+conjured
+conjurer
+conjurers
+conjures
+conjuring
+conjuror
+conk
+conked
+conker
+conkers
+conking
+Conklin
+Conklin's
+conks
+Conley
+Conley's
+conn
+connacht
+Connally
+Connally's
+connate
+connately
+connatural
+connaturality
+connaturally
+connaught
+connect
+connectable
+connected
+connectedly
+connectedness
+connecter
+connecters
+connectible
+Connecticut
+connecting
+connection
+connection's
+connectional
+connections
+connective
+connective's
+connectively
+connectives
+connectivities
+connectivity
+connector
+connector's
+connectors
+connects
+conned
+connelly
+Connelly
+connemara
+conner
+connexions
+Connie
+conning
+conniption
+connivance
+connive
+connived
+connivent
+conniver
+connivery
+connives
+conniving
+connoisseur
+connoisseur's
+connoisseurs
+connoisseurship
+Connors
+connotation
+connotational
+connotations
+connotative
+connotatively
+connote
+connoted
+connotes
+connoting
+connubial
+connubialism
+connubiality
+connubially
+conodont
+conoid
+conoscenti
+conquer
+conquerable
+conquered
+conquerer
+conquerers
+conquering
+conqueror
+conqueror's
+conquerors
+conquers
+conquest
+conquest's
+conquests
+conquian
+conquistador
+conquistadores
+conquistadors
+Conrad
+Conrad's
+Conrail
+Conrail's
+cons
+consanguine
+consanguineous
+consanguineously
+consanguinity
+conscience
+conscience's
+conscienceless
+consciences
+conscientious
+conscientiously
+conscientiousness
+conscionable
+conscionably
+conscious
+consciouses
+consciously
+consciousness
+conscribe
+conscribed
+conscribes
+conscribing
+conscript
+conscripted
+conscripting
+conscription
+conscriptions
+conscripts
+consecrate
+consecrated
+consecrates
+consecrating
+consecration
+consecrations
+consecrative
+consecrator
+consecratory
+consecution
+consecutive
+consecutively
+consecutiveness
+consensual
+consensually
+consensus
+consent
+consentaneous
+consentaneously
+consented
+consenter
+consenters
+consentient
+consenting
+consentingly
+consents
+consequence
+consequence's
+consequences
+consequent
+consequential
+consequentialities
+consequentiality
+consequentially
+consequentialness
+consequently
+consequentness
+consequents
+conservancy
+conservation
+conservation's
+conservational
+conservationist
+conservationist's
+conservationists
+conservations
+conservatism
+conservative
+conservatively
+conservativeness
+conservatives
+conservatize
+conservatized
+conservatizes
+conservatizing
+conservatoire
+conservator
+conservatorial
+conservatorium
+conservatory
+conserve
+conserved
+conserver
+conserves
+conserving
+consett
+consider
+considerable
+considerably
+considerate
+considerately
+considerateness
+consideration
+considerations
+considered
+considerer
+considering
+considers
+consign
+consignable
+consignation
+consigned
+consignee
+consigning
+consignment
+consignor
+consigns
+consist
+consisted
+consistence
+consistencies
+consistency
+consistent
+consistently
+consisting
+consistorial
+consistory
+consists
+consociate
+consociation
+consociational
+consocies
+consol
+consolable
+consolation
+consolation's
+consolations
+consolatory
+console
+consoled
+consoler
+consolers
+consoles
+consolette
+consolidate
+consolidated
+consolidates
+consolidating
+consolidation
+consolidations
+consolidator
+consolidators
+consoling
+consolingly
+consols
+consolute
+consonance
+consonancy
+consonant
+consonant's
+consonantal
+consonantize
+consonantizes
+consonantly
+consonants
+consort
+consorted
+consorting
+consortium
+consorts
+conspecific
+conspectus
+conspectuses
+conspicuity
+conspicuous
+conspicuously
+conspicuousness
+conspiracies
+conspiracy
+conspiracy's
+conspiration
+conspirational
+conspirations
+conspirator
+conspirator's
+conspiratorial
+conspiratorially
+conspirators
+conspire
+conspired
+conspires
+conspiring
+constable
+constable's
+constables
+constabulary
+constance
+constancy
+constant
+constantan
+Constantine
+Constantine's
+Constantinople
+constantly
+constants
+constatation
+constellate
+constellation
+constellation's
+constellations
+constellatory
+consternate
+consternated
+consternates
+consternating
+consternation
+constipate
+constipated
+constipates
+constipating
+constipation
+constituencies
+constituency
+constituency's
+constituent
+constituent's
+constituently
+constituents
+constitute
+constituted
+constitutes
+constituting
+constitution
+constitutional
+constitutionalism
+constitutionalist
+constitutionality
+constitutionalization
+constitutionalization's
+constitutionalizations
+constitutionalize
+constitutionalizes
+constitutionally
+constitutionless
+constitutions
+constitutive
+constitutively
+constrain
+constrained
+constrainedly
+constraining
+constrains
+constraint
+constraint's
+constraints
+constrict
+constricted
+constricting
+constriction
+constrictions
+constrictive
+constrictor
+constrictors
+constricts
+constringe
+constringed
+constringent
+constringes
+constringing
+construable
+construal
+construct
+constructed
+constructibility
+constructible
+constructing
+construction
+construction's
+constructional
+constructionally
+constructionist
+constructions
+constructive
+constructively
+constructiveness
+constructivism
+constructivist
+constructor
+constructor's
+constructors
+constructs
+construe
+construed
+construes
+construing
+consubstantial
+consubstantiate
+consubstantiation
+consuetude
+consuetudinary
+consul
+consul's
+consular
+consulate
+consulate's
+consulates
+consuls
+consulship
+consult
+consultancies
+consultancy
+consultant
+consultant's
+consultants
+consultantship
+consultation
+consultation's
+consultations
+consultative
+consulted
+consulter
+consulting
+consultive
+consultor
+consults
+consumable
+consumables
+consume
+consumed
+consumedly
+consumer
+consumer's
+consumerism
+consumerist
+consumers
+consumership
+consumes
+consuming
+consumingly
+consummate
+consummated
+consummately
+consummates
+consummating
+consummation
+consummations
+consummative
+consummator
+consummatory
+consumption
+consumption's
+consumptions
+consumptive
+consumptively
+cont'd
+contact
+contacted
+contacting
+contactor
+contacts
+contagion
+contagious
+contagiously
+contagiousness
+contagium
+contain
+containable
+contained
+container
+containerboard
+containerization
+containerize
+containerized
+containerizes
+containerizing
+containers
+containing
+containment
+containment's
+containments
+contains
+contaminant
+contaminants
+contaminate
+contaminated
+contaminates
+contaminating
+contamination
+contaminations
+contaminative
+contaminator
+contango
+contemn
+contemplate
+contemplated
+contemplates
+contemplating
+contemplation
+contemplations
+contemplative
+contemplatively
+contemplativeness
+contemplator
+contemporaneity
+contemporaneous
+contemporaneously
+contemporaneousness
+contemporaries
+contemporarily
+contemporariness
+contemporary
+contemporization
+contemporize
+contemporized
+contemporizes
+contemporizing
+contempt
+contemptible
+contemptibleness
+contemptibly
+contemptuous
+contemptuously
+contemptuousness
+contend
+contended
+contender
+contendere
+contenders
+contending
+contends
+content
+contented
+contentedly
+contentedness
+contenting
+contention
+contention's
+contentions
+contentious
+contentiously
+contentiousness
+contently
+contentment
+contents
+conterminous
+conterminously
+contest
+contestable
+contestant
+contestants
+contestation
+contested
+contester
+contesters
+contesting
+contests
+context
+context's
+contexts
+contextual
+contextually
+contexture
+contiguity
+contiguous
+contiguously
+contiguousness
+continence
+continent
+continent's
+continental
+Continentalize
+Continentalizes
+continentally
+continently
+continents
+contingence
+contingencies
+contingency
+contingency's
+contingent
+contingent's
+contingently
+contingents
+continously
+continua
+continual
+continually
+continuance
+continuance's
+continuances
+continuant
+continuate
+continuated
+continuates
+continuating
+continuation
+continuation's
+continuations
+continuative
+continuatively
+continuator
+continue
+continued
+continuer
+continues
+continuing
+continuities
+continuity
+continuo
+continuous
+continuously
+continuousness
+continuum
+conto
+contort
+contorted
+contorting
+contortion
+contortionist
+contortionistic
+contortionists
+contortions
+contortive
+contorts
+contour
+contour's
+contoured
+contouring
+contours
+contraband
+contrabandist
+contrabass
+contrabassist
+contrabassoon
+contraception
+contraceptive
+contraceptives
+contract
+contracted
+contractibility
+contractible
+contractile
+contractility
+contracting
+contraction
+contraction's
+contractional
+contractions
+contractive
+contractor
+contractor's
+contractors
+contracts
+contractual
+contractually
+contracture
+contradance
+contradict
+contradictable
+contradicted
+contradicting
+contradiction
+contradiction's
+contradictions
+contradictious
+contradictor
+contradictorily
+contradictoriness
+contradictory
+contradicts
+contradistinct
+contradistinction
+contradistinctions
+contradistinctive
+contradistinctively
+contradistinguish
+contrail
+contraindicate
+contraindicated
+contraindicates
+contraindicating
+contraindication
+contraindication's
+contraindications
+contraindicative
+contralateral
+contralto
+contraoctave
+contraposition
+contrapositive
+contrapositives
+contraption
+contraption's
+contraptions
+contrapuntal
+contrapuntally
+contrapuntist
+contrarieties
+contrariety
+contrarily
+contrariness
+contrarious
+contrariwise
+contrary
+contrast
+contrastable
+contrasted
+contraster
+contrasters
+contrasting
+contrastingly
+contrastive
+contrastively
+contrasts
+contrasty
+contrasuggestible
+contrate
+contravallation
+contravariant
+contravene
+contravened
+contravener
+contravenes
+contravening
+contravention
+contrayerva
+contredanse
+contretemps
+contribute
+contributed
+contributer
+contributers
+contributes
+contributing
+contribution
+contributions
+contributive
+contributively
+contributor
+contributor's
+contributorily
+contributors
+contributory
+contrite
+contritely
+contriteness
+contrition
+contrivance
+contrivance's
+contrivances
+contrive
+contrived
+contriver
+contrives
+contriving
+control
+control's
+controllability
+controllable
+controllably
+controlled
+controllee
+controllees
+controller
+controller's
+controllers
+controllership
+controllerships
+controlling
+controlment
+controlments
+controls
+controversial
+controversialism
+controversialist
+controversialists
+controversialize
+controversializes
+controversially
+controversies
+controversy
+controversy's
+controvert
+controverted
+controverter
+controvertible
+controverting
+controverts
+contumacious
+contumaciously
+contumacy
+contumelious
+contumeliously
+contumely
+contuse
+contused
+contuses
+contusing
+contusion
+contusions
+conundrum
+conundrum's
+conundrumize
+conundrumizes
+conundrums
+conurbation
+conurbations
+conure
+Convair
+Convair's
+convalesce
+convalescence
+convalescent
+convalescing
+convect
+convected
+convecting
+convection
+convectional
+convections
+convective
+convector
+convectors
+convects
+convene
+convened
+convener
+conveners
+convenes
+convenience
+convenience's
+conveniences
+conveniency
+convenient
+conveniently
+convening
+convent
+convent's
+conventicle
+conventicler
+convention
+convention's
+conventional
+conventionalism
+conventionalist
+conventionality
+conventionalization
+conventionalization's
+conventionalizations
+conventionalize
+conventionalized
+conventionalizes
+conventionalizing
+conventionally
+conventioneer
+conventionize
+conventionizes
+conventions
+convents
+conventual
+conventually
+converge
+converged
+convergence
+convergences
+convergency
+convergent
+converges
+converging
+conversable
+conversance
+conversancy
+conversant
+conversantly
+conversation
+conversation's
+conversational
+conversationalist
+conversationally
+conversationize
+conversationizes
+conversations
+converse
+conversed
+conversely
+converses
+conversing
+conversion
+conversional
+conversioning
+conversions
+convert
+converted
+converter
+converters
+convertibility
+convertible
+convertibleness
+convertibly
+converting
+convertiplane
+convertite
+convertor
+converts
+convex
+convexity
+convey
+conveyance
+conveyance's
+conveyanced
+conveyancer
+conveyancers
+conveyances
+conveyancing
+conveyed
+conveyer
+conveyers
+conveying
+conveyor
+conveyorize
+conveyorized
+conveyorizes
+conveyorizing
+conveyors
+conveys
+convict
+convicted
+convicting
+conviction
+conviction's
+convictions
+convictive
+convicts
+convince
+convinced
+convincer
+convincers
+convinces
+convincing
+convincingly
+convincingness
+convivial
+conviviality
+convivialize
+convivializes
+convivially
+convocate
+convocation
+convocational
+convocations
+convoke
+convoked
+convokes
+convoking
+convolute
+convoluted
+convolutely
+convolution
+convolutional
+convolutions
+convolve
+convolved
+convolves
+convolving
+convolvulaceous
+Convolvulus
+convoy
+convoyed
+convoying
+convoys
+convulsant
+convulse
+convulsed
+convulses
+convulsing
+convulsion
+convulsion's
+convulsionary
+convulsions
+convulsive
+convulsively
+convulsiveness
+Conway
+Conway's
+cony
+coo
+cooch
+cooee
+cooing
+Cook
+cook
+cook's
+cookbook
+cookbooks
+Cooke
+Cooke's
+cooked
+cooker
+cookers
+cookery
+cookhouse
+cookie
+cookie's
+cookies
+cooking
+cookout
+cookouts
+cooks
+cookshack
+cookshop
+cookware
+cooky
+cool
+coolabah
+coolant
+coolants
+cooled
+cooler
+cooler's
+coolers
+coolest
+Cooley
+Cooley's
+coolgardie
+coolheaded
+Coolidge
+coolie
+coolie's
+coolies
+cooling
+coolings
+coolish
+coolly
+coolness
+coolnesses
+cools
+coom
+coomb
+coombs
+coon
+coon's
+cooncan
+coons
+coonskin
+coontie
+coop
+cooped
+cooper
+cooperage
+cooperate
+cooperated
+cooperates
+cooperating
+cooperation
+cooperationist
+cooperations
+cooperative
+cooperatively
+cooperativeness
+cooperatives
+cooperativity
+cooperator
+cooperator's
+cooperators
+coopered
+coopering
+coopers
+coops
+coopt
+coordinal
+coordinate
+coordinated
+coordinately
+coordinateness
+coordinates
+coordinating
+coordination
+coordinations
+coordinative
+coordinator
+coordinator's
+coordinators
+Coors
+coot
+cootch
+cootie
+cop
+cop's
+copacetic
+copaiba
+copal
+copalm
+coparcenary
+coparcener
+copartner
+copartnership
+cope
+copeck
+coped
+Copeland
+copemate
+Copenhagen
+copepod
+coper
+Copernican
+Copernicus
+copes
+copesetic
+copesmate
+copestone
+copied
+copier
+copiers
+copies
+copilot
+coping
+copings
+copious
+copiously
+copiousness
+copita
+coplanar
+coplanarity
+Copland
+copley
+copliots
+copolymer
+copolymerization
+copolymerization's
+copolymerizations
+copolymerize
+copolymerized
+copolymerizes
+copolymerizing
+copolymers
+copper
+copper's
+copperas
+coppered
+Copperfield
+copperhead
+coppering
+copperization
+copperization's
+copperizations
+copperize
+copperizes
+copperplate
+coppers
+coppersmith
+coppersmiths
+coppery
+coppice
+copping
+copra
+coprinus
+coprocessor
+coprocessor's
+coprocessors
+coproduct
+coproduct's
+coproducts
+coprolalia
+coprolite
+coprolitic
+coprology
+coprophagous
+coprophilia
+coprophilous
+Coprosma
+cops
+copse
+copses
+Copt
+copter
+copters
+Coptic
+copula
+copulas
+copulate
+copulated
+copulates
+copulating
+copulation
+copulative
+copulatively
+copulatory
+copy
+copybook
+copybooks
+copyboy
+copycat
+copycats
+copycatted
+copycatting
+copydesk
+copygraph
+copyhold
+copyholder
+copying
+copyist
+copyread
+copyreader
+copyright
+copyright's
+copyrighted
+copyrighter
+copyrighters
+copyrighting
+copyrights
+copywriter
+coquelicot
+coquet
+coquetry
+coquette
+coquetted
+coquetting
+coquettish
+coquettishly
+coquettishness
+coquilla
+Coquille
+coquina
+coquito
+coraciiform
+coracle
+coracoid
+coral
+Coral
+coralberry
+coraled
+coralline
+corallite
+coralloid
+coralroot
+Corantijn
+coranto
+corban
+corbeil
+corbel
+corbeled
+corbeling
+corbelings
+Corbett
+Corbett's
+corbicula
+corbie
+corbusier
+corby
+Corcoran
+Corcoran's
+corcyra
+cord
+cordage
+cordate
+cordately
+corday
+corded
+Cordelier
+cordeliers
+corder
+cordial
+cordiality
+cordialize
+cordializes
+cordially
+cordialness
+cordierite
+cordiform
+cordillera
+cordilleras
+cording
+cordite
+cordless
+cordoba
+cordon
+cordova
+Cordovan
+cords
+corduroy
+corduroys
+cordwain
+cordwainer
+cordwainery
+cordwood
+core
+corecipient
+cored
+corelate
+corelation
+coreligionist
+corella
+corelli
+Coreopsis
+corequisite
+corer
+corers
+cores
+corespondent
+Corey
+Corey's
+corf
+corfam
+corfu
+corgi
+coriaceous
+coriander
+coring
+Corinth
+Corinthian
+Corinthianize
+Corinthianizes
+corinthians
+Corinthians
+Coriolanus
+coriolis
+corium
+cork
+corkage
+corkboard
+corkboards
+corked
+corker
+corkers
+corkier
+corking
+corks
+corkscrew
+corkscrews
+corkwood
+corky
+cormel
+cormophyte
+cormorant
+cormorants
+corn
+cornball
+cornbread
+corncob
+corncockle
+corncrake
+corncrib
+cornea
+corneal
+corned
+corneille
+cornel
+Cornelia
+Cornelia's
+cornelian
+Cornelian
+Cornelius
+Cornell
+Cornell's
+corneous
+corner
+cornered
+cornering
+cornerman
+corners
+cornerstone
+cornerstone's
+cornerstones
+cornerways
+cornerwise
+cornet
+cornetcy
+cornetist
+cornett
+cornettist
+cornfield
+cornfield's
+cornfields
+cornflakes
+cornflour
+cornflower
+cornhusk
+cornhusking
+cornice
+corniced
+cornices
+corniche
+cornicing
+corniculate
+cornier
+corniest
+cornification
+cornily
+corniness
+corning
+Cornish
+cornmeal
+cornmonger
+corno
+corns
+cornstalk
+cornstarch
+cornstone
+cornu
+cornucopia
+cornucopian
+cornute
+Cornwall
+cornwallis
+Cornwallis
+corny
+corody
+corolla
+corollaceous
+corollaries
+corollary
+corollary's
+corollate
+coromandel
+corona
+coronach
+Coronado
+coronagraph
+coronal
+coronaries
+coronary
+coronate
+coronation
+coroner
+coroners
+coronet
+coronet's
+coroneted
+coronets
+coronograph
+corot
+coroutine
+coroutine's
+coroutines
+corozo
+Corp
+corpocracies
+corpocracy
+corpora
+corporal
+corporal's
+corporality
+corporally
+corporals
+corporate
+corporately
+corporation
+corporation's
+corporations
+corporatism
+corporatist
+corporative
+corporativism
+corporator
+corporeal
+corporeality
+corporealization
+corporealization's
+corporealizations
+corporealize
+corporealizes
+corporeally
+corporealness
+corporeity
+corporis
+corposant
+corps
+corpse
+corpse's
+corpses
+corpsman
+corpsmen
+corpulence
+corpulences
+corpulencies
+corpulency
+corpulent
+corpulently
+corpulentness
+corpulentnesses
+corpus
+corpuscle
+corpuscle's
+corpuscles
+corpuscular
+corpusculated
+corpuscule
+corpuscules
+corrade
+corraded
+corrading
+corral
+corralled
+corralling
+corrals
+corrasion
+corrasions
+corrasive
+correct
+correctable
+corrected
+correcting
+correction
+correctional
+corrections
+correctitude
+corrective
+correctively
+correctiveness
+correctives
+correctly
+correctness
+corrector
+corrects
+correggio
+corregidor
+correlatable
+correlate
+correlated
+correlates
+correlating
+correlation
+correlational
+correlations
+correlative
+correlatively
+correlator
+correspond
+corresponded
+correspondence
+correspondence's
+correspondences
+correspondency
+correspondent
+correspondent's
+correspondents
+corresponding
+correspondingly
+corresponds
+corresponsive
+corrida
+corridor
+corridor's
+corridors
+Corriedale
+corrientes
+corrigenda
+corrigendum
+corrigibility
+corrigible
+corrigibly
+corrival
+corroborant
+corroborate
+corroborated
+corroborates
+corroborating
+corroboration
+corroborations
+corroborative
+corroboratively
+corroborator
+corroborators
+corroboratory
+corroboree
+corrode
+corroded
+corrodent
+corrodes
+corrodible
+corroding
+corrody
+corrosion
+corrosions
+corrosive
+corrosively
+corrosiveness
+corrosives
+corrugate
+corrugated
+corrugates
+corrugating
+corrugation
+corrugations
+corrugator
+corrupt
+corrupted
+corrupter
+corruptibility
+corruptible
+corruptibly
+corrupting
+corruption
+corruptionist
+corruptive
+corruptively
+corruptly
+corrupts
+corsac
+corsage
+corsages
+corsair
+corse
+corselet
+corset
+corsetry
+corsets
+corsica
+Corsica
+Corsica's
+Corsican
+corsican
+cortege
+corteges
+Cortes
+cortex
+cortexes
+Cortez
+cortical
+cortically
+corticate
+corticated
+cortices
+corticoid
+corticosteroid
+corticosteroids
+corticosterone
+corticotrophin
+cortisol
+cortisone
+Cortland
+cortot
+corundum
+corunna
+coruscate
+coruscated
+coruscates
+coruscating
+coruscation
+coruscations
+Corvallis
+corvallis
+corves
+corvette
+corvine
+Corvus
+Corybant
+Corydalis
+Corydon
+Corydoras
+corymb
+coryphaeus
+coryza
+cos
+cosa
+cosec
+cosecant
+cosech
+coseismal
+cosenza
+coset
+cosgrave
+Cosgrove
+Cosgrove's
+cosh
+cosher
+cosignatory
+cosigner
+cosily
+cosine
+cosines
+cosmetic
+cosmetician
+cosmeticians
+cosmetics
+cosmetologist
+cosmetologists
+cosmetology
+cosmic
+cosmical
+cosmically
+cosmine
+cosmo
+cosmochemical
+cosmochemistry
+cosmodrome
+cosmogenic
+cosmogonic
+cosmogonical
+cosmogonist
+cosmogony
+cosmographer
+cosmographic
+cosmographical
+cosmographically
+cosmography
+cosmoid
+cosmologic
+cosmological
+cosmologically
+cosmologist
+cosmologist's
+cosmologists
+cosmology
+cosmonaut
+cosmopolis
+cosmopolitan
+cosmopolitanism
+cosmopolitanization
+cosmopolitanization's
+cosmopolitanizations
+cosmopolitanize
+cosmopolitanizes
+cosmopolite
+cosmopolitism
+cosmos
+cosmoses
+cosmotron
+cospar
+cosponsor
+cosponsored
+cosponsors
+cosponsorship
+coss
+cossack
+cossacks
+cosset
+cosseted
+cosseting
+cossets
+cossie
+cost
+Costa
+costa
+costal
+costard
+costate
+costed
+Costello
+Costermansville
+costermonger
+costing
+costive
+costively
+costiveness
+costless
+costlessly
+costlier
+costliness
+costly
+costmary
+costotomy
+costrel
+costs
+costume
+costumed
+costumer
+costumers
+costumery
+costumes
+costumey
+costumier
+costuming
+cosy
+cot
+cot's
+cotan
+cotangent
+cote
+cotemporary
+cotenant
+coterie
+coteries
+coterminosity
+coterminous
+coterminously
+coth
+cothurnus
+cotidal
+cotillion
+cotillon
+Cotinga
+cotman
+cotoneaster
+cotonou
+cotopaxi
+cotquean
+Cotrubas
+cots
+cotswold
+cotswolds
+cotta
+cottage
+cottager
+cottagers
+cottages
+cottagey
+cottbus
+cotter
+cotters
+cottian
+cotton
+cottonade
+cottoned
+cottoning
+cottonization
+cottonization's
+cottonizations
+cottonize
+cottonizes
+cottonmouth
+cottons
+cottonseed
+cottontail
+cottontail's
+cottontails
+cottonweed
+cottonwood
+cottony
+Cottrell
+Cottrell's
+cotty
+cotyledon
+cotyledon's
+cotyledons
+cotyloid
+coucal
+couch
+couchant
+couched
+couches
+couchette
+couching
+cougar
+cougars
+cough
+coughed
+cougher
+coughing
+coughs
+could
+could've
+couldest
+couldn't
+couldst
+coulee
+coulibiaca
+couloir
+coulomb
+coulometer
+coulometers
+Coulter
+Coulter's
+coumarin
+coumarone
+council
+council's
+councillor
+councillor's
+councillors
+councilman
+councilmanic
+councilmen
+councilorship
+councils
+councilwoman
+councilwomen
+counsel
+counsel's
+counseled
+counselee
+counseling
+counselor
+counselor's
+counselors
+counselorship
+counsels
+count
+countability
+countable
+countably
+countdown
+countdown's
+countdowns
+counted
+countenance
+countenancer
+counter
+counteract
+counteracted
+counteracting
+counteraction
+counteractive
+counteracts
+counterargument
+counterarguments
+counterattack
+counterattacker
+counterattraction
+counterbalance
+counterbalanced
+counterbalances
+counterbalancing
+counterblast
+counterblow
+counterchallenge
+counterchange
+countercharge
+countercheck
+counterclaim
+counterclockwise
+counterculture
+countercurrent
+countercurrently
+countercyclical
+countered
+counterespionage
+counterexample
+counterexamples
+counterfactual
+counterfeit
+counterfeited
+counterfeiter
+counterfeiting
+counterfeits
+counterflow
+counterfoil
+counterforce
+counterglow
+countering
+counterinsurgency
+counterintelligence
+counterintuitive
+counterirritant
+counterman
+countermand
+countermanded
+countermanding
+countermands
+countermarch
+countermeasure
+countermeasure's
+countermeasures
+countermen
+countermove
+countermovement
+counteroffensive
+counteroffer
+counterpane
+counterpart
+counterpart's
+counterparts
+counterplan
+counterplea
+counterplot
+counterpoint
+counterpointing
+counterpoise
+counterpose
+counterposed
+counterposes
+counterposing
+counterposition
+counterproductive
+counterproof
+counterproposal
+counterpunch
+counterpuncher
+counterreformation
+counterrevolution
+counterrevolutionaries
+counterrevolutionary
+counterrevolutionary's
+counterrevolutionist
+counters
+countershade
+countershaded
+countershades
+countershading
+countershaft
+countershafts
+countersign
+countersignature
+countersink
+countersinking
+countersinks
+counterspy
+counterstatement
+countersubject
+countersunk
+countertenor
+countertenors
+counterterrorism
+counterterrorist
+counterthreat
+counterthreat's
+counterthreats
+countertrend
+countertype
+countervail
+countervailed
+countervailing
+countervails
+counterview
+counterweigh
+counterweight
+counterweight's
+counterweighted
+counterweighting
+counterweights
+counterword
+counterwork
+countess
+counties
+counting
+countless
+countlessly
+countries
+countrified
+countrify
+country
+country's
+countryfied
+countryish
+countryman
+countrymen
+countryseat
+countryside
+countrywide
+countrywoman
+counts
+county
+county's
+countywide
+coup
+coupal
+coupe
+Couperin
+couple
+couple's
+coupled
+couplement
+coupler
+couplers
+couples
+couplet
+couplet's
+couplets
+coupling
+couplings
+coupon
+coupon's
+coupons
+coups
+courage
+courageous
+courageously
+courageousness
+courante
+courantyne
+courbet
+courbevoie
+coureur
+courgette
+courier
+courier's
+couriers
+courlan
+Courland
+course
+coursed
+courser
+courses
+coursework
+coursing
+court
+courted
+courtelle
+courteous
+courteously
+courteousness
+courter
+courters
+courtesan
+courtesies
+courtesy
+courtesy's
+courthouse
+courthouse's
+courthouses
+courtier
+courtier's
+courtiers
+courting
+courtliness
+courtly
+courtmartial
+Courtney
+Courtney's
+courtrai
+courtroom
+courtroom's
+courtrooms
+courts
+courtship
+courtyard
+courtyard's
+courtyards
+couscous
+cousin
+cousin's
+cousinage
+cousinhood
+cousins
+cousinship
+Cousteau
+couth
+couthie
+couture
+couturier
+couturiere
+couvade
+covalence
+covalency
+covalent
+covalently
+covariance
+covariances
+covariant
+covariants
+covariate
+covariates
+covariation
+covary
+cove
+coven
+covenant
+covenant's
+covenantal
+covenanted
+covenantee
+covenanter
+covenanting
+covenantor
+covenants
+Covent
+covent
+coventry
+Coventry
+cover
+coverable
+coverage
+coverall
+coveralled
+coveralls
+coverdale
+covered
+coverer
+covering
+coverings
+coverless
+coverlet
+coverlet's
+coverlets
+coverley
+covers
+coversed
+covert
+covertly
+covertness
+coverture
+covertures
+coves
+covet
+covetable
+coveted
+coveter
+coveting
+covetingly
+covetous
+covetously
+covetousness
+covets
+covey
+coveys
+covin
+coving
+covington
+cow
+cowage
+Cowan
+Cowan's
+coward
+cowardice
+cowardliness
+cowardly
+cowards
+cowbane
+cowbell
+cowberry
+cowbind
+cowbird
+cowbirds
+cowboy
+cowboy's
+cowboys
+cowcatcher
+cowed
+cowedly
+Cowell
+cower
+cowered
+cowerer
+cowerers
+cowering
+coweringly
+cowers
+cowes
+cowfish
+cowgirl
+cowgirl's
+cowgirls
+cowhand
+cowhands
+cowherb
+cowherd
+cowhide
+cowhided
+cowhiding
+Cowichan
+cowing
+cowitch
+cowk
+cowl
+cowled
+cowley
+cowlick
+cowling
+cowls
+cowman
+cowmen
+coworker
+coworker's
+coworkers
+cowpat
+cowpea
+cowper
+cowpoke
+cowpony
+cowpox
+cowpunch
+cowpuncher
+cowry
+cows
+cowskin
+cowslip
+cowslip's
+cowslips
+cox
+coxa
+coxalgia
+coxcomb
+coxcombry
+coxcombs
+coxsackie
+coxswain
+coy
+coyly
+coyness
+coyote
+coyote's
+coyotes
+coyotillo
+coypu
+coz
+cozen
+cozier
+cozies
+cozily
+coziness
+cozy
+CPA
+CPR
+cpr
+CPU
+CPU's
+CPUs
+Craal
+crab
+crab's
+crabapple
+crabbe
+crabbed
+crabbedly
+crabbedness
+crabber
+crabbier
+crabbing
+crabby
+crabmeat
+crabs
+crabstick
+crabwise
+crack
+crackajack
+crackbrain
+crackbrained
+crackdown
+cracked
+cracker
+crackerjack
+crackers
+cracket
+cracking
+crackjaw
+crackle
+crackled
+crackles
+crackling
+crackly
+cracknel
+crackpot
+crackpots
+cracks
+cracksman
+cracow
+craddock
+cradle
+cradled
+cradler
+cradles
+cradlesong
+cradling
+craft
+crafted
+crafter
+craftier
+craftily
+craftiness
+crafting
+crafts
+craftsman
+craftsmanlike
+craftsmanship
+craftsmen
+craftspeople
+craftsperson
+craftswoman
+craftswomen
+crafty
+crag
+crag's
+cragged
+craggier
+craggily
+cragginess
+craggy
+crags
+cragsman
+Craig
+craigie
+craiova
+crake
+cram
+crambo
+Cramer
+crammed
+crammer
+cramming
+cramoisy
+cramp
+cramp's
+cramped
+cramper
+crampon
+crampon's
+crampons
+cramps
+crams
+cran
+cranach
+cranage
+cranberries
+cranberry
+cranberry's
+Crandall
+crane
+crane's
+craned
+cranelike
+craneman
+cranemen
+cranes
+cranesbill
+Cranfield
+Cranford
+crania
+cranial
+cranially
+craniate
+craning
+craniology
+craniometer
+craniometry
+craniotomy
+cranium
+crank
+crankcase
+cranked
+crankier
+crankiest
+crankily
+crankiness
+cranking
+cranko
+crankpin
+cranks
+crankshaft
+cranky
+cranmer
+crannied
+crannies
+crannog
+cranny
+Cranston
+cranwell
+crap
+crapaud
+crape
+craping
+crapper
+crappie
+crappier
+crapping
+crappy
+craps
+crapshooter
+crapulent
+crapulous
+craquelure
+crash
+crashable
+crashaw
+crashed
+crasher
+crashers
+crashes
+crashing
+crashworthiness
+crashworthy
+crasis
+crass
+crassest
+crassitude
+crassly
+crassness
+crassulaceous
+crassus
+cratch
+crate
+crater
+cratered
+craterlet
+craters
+crates
+crating
+craunch
+cravat
+cravat's
+cravats
+crave
+craved
+craven
+cravenly
+cravenness
+craver
+craves
+craving
+craw
+Crawford
+crawl
+crawled
+crawler
+crawlerize
+crawlerizes
+crawlers
+crawley
+crawling
+crawls
+crawlspace
+crawlway
+crawly
+Cray
+cray
+Cray's
+crayfish
+crayon
+crayonist
+crayons
+Crays
+craze
+crazed
+crazes
+crazier
+craziest
+crazily
+craziness
+crazing
+crazy
+creak
+creaked
+creakier
+creakily
+creaking
+creaks
+creaky
+cream
+creamcups
+creamed
+creamer
+creamers
+creamery
+creamily
+creaminess
+creaming
+creamlaid
+creams
+creamy
+crease
+creased
+creaseless
+creaser
+creases
+creasing
+create
+created
+creates
+creatine
+creating
+creatinine
+creation
+creationism
+creationism's
+creations
+creative
+creatively
+creativeness
+creativity
+creator
+creator's
+creators
+creatural
+creature
+creature's
+creaturehood
+creatureliness
+creaturely
+creatures
+creaturize
+creaturizes
+creche
+creches
+credence
+credendum
+credent
+credential
+credentials
+credenza
+credibility
+credible
+credibly
+credit
+creditability
+creditable
+creditableness
+creditably
+credited
+crediting
+creditor
+creditor's
+creditors
+credits
+credo
+credos
+credulity
+credulous
+credulously
+credulousness
+Cree
+cree
+creed
+creed's
+creedal
+creeds
+creek
+creek's
+creeks
+creekside
+creel
+creels
+creep
+creepage
+creeper
+creepers
+creepie
+creepier
+creepiness
+creeping
+creeps
+creepy
+creese
+Creighton
+creighton
+cremate
+cremated
+cremates
+cremating
+cremation
+cremations
+cremator
+crematorium
+crematory
+cremona
+crenate
+crenated
+crenately
+crenation
+crenel
+crenelate
+crenelated
+crenelates
+crenelation
+creneled
+creneling
+crenelle
+crenulate
+crenulated
+crenulation
+creodont
+Creole
+Creolization
+Creolize
+Creolized
+Creolizes
+Creolizing
+Creon
+creophagous
+creosol
+creosote
+crepe
+crepey
+crepitant
+crepitate
+crepitation
+crepitus
+crept
+crepuscle
+crepuscular
+crepuscule
+crepy
+crescendo
+crescent
+crescent's
+crescentic
+crescents
+crescive
+crescively
+cresol
+cress
+cresset
+Cressida
+cressy
+crest
+crestal
+crested
+crestfallen
+crestfallenly
+crestfallenness
+cresting
+crestless
+Creston
+crests
+Crestview
+cresylic
+Cretaceous
+Cretaceously
+Cretan
+Crete
+Cretic
+cretin
+cretinism
+cretinization
+cretinization's
+cretinizations
+cretinize
+cretinizes
+cretinous
+cretins
+cretonne
+creuse
+crevasse
+crevice
+crevice's
+crevices
+crew
+crewcut
+crewe
+crewed
+crewel
+crewelwork
+crewing
+crewless
+crewman
+crewmember
+crewmembers
+crewmen
+crews
+crib
+crib's
+cribbage
+cribbage's
+cribber
+cribbing
+cribellum
+cribriform
+cribs
+Crichton
+crick
+cricket
+cricket's
+cricketer
+cricketing
+crickets
+cricoid
+cried
+crier
+criers
+cries
+crikey
+crim
+crime
+crime's
+Crimea
+Crimean
+crimes
+criminal
+criminality
+criminalization
+criminalization's
+criminalize
+criminally
+criminals
+criminate
+criminating
+crimination
+criminological
+criminologically
+criminologist
+criminology
+criminous
+crimmer
+crimp
+crimped
+crimper
+crimpier
+crimping
+crimple
+crimplene
+crimps
+crimpy
+crimson
+crimsoning
+cringe
+cringed
+cringer
+cringes
+cringing
+cringle
+crinite
+crinkle
+crinkled
+crinkleroot
+crinkles
+crinkling
+crinkly
+crinoid
+crinoline
+Crinum
+criollo
+cripes
+crippen
+cripple
+crippled
+crippler
+cripples
+crippling
+cripps
+crises
+criseyde
+crisis
+crisp
+crispate
+crispation
+crispbread
+crisper
+crispi
+crispier
+Crispin
+Crispin's
+crispiness
+crisply
+crispness
+crisps
+crispy
+criss
+crisscross
+crisscrossed
+crisscrosses
+crissum
+crista
+cristate
+cristobalite
+criteria
+criterion
+critic
+critic's
+critical
+criticality
+critically
+criticalness
+criticaster
+criticism
+criticism's
+criticisms
+criticizable
+criticizable's
+criticizables
+criticize
+criticized
+criticizer
+criticizers
+criticizes
+criticizing
+criticizinglies
+criticizingly
+critics
+critique
+critiqued
+critiques
+critiquing
+critter
+critter's
+critters
+croak
+croaked
+croaker
+croakers
+croaking
+croaks
+croaky
+Croat
+Croatia
+croatian
+Croatian
+croce
+crocein
+crochet
+crocheted
+crocheter
+crocheting
+crochets
+crocidolite
+crock
+crocked
+crocker
+crockery
+crocket
+crocketed
+Crockett
+Crockford
+crocks
+crocodile
+crocodiles
+crocodilian
+crocoite
+crocus
+crocuses
+croesus
+croft
+crofter
+crofterization
+crofterization's
+crofterizations
+crofterize
+crofterizes
+crofters
+croissant
+croissants
+Croix
+crombec
+cromlech
+Crompton
+Cromwell
+Cromwellian
+crone
+crones
+cronies
+Cronin
+cronk
+cronus
+crony
+cronyism
+crook
+crookback
+crookbacked
+crooked
+crookedly
+crookedness
+Crookes
+Crookesmoor
+crooks
+croon
+crooned
+crooner
+crooners
+crooning
+croons
+crop
+crop's
+cropland
+cropland's
+croplands
+cropped
+cropper
+cropper's
+croppers
+cropping
+crops
+croquet
+croquette
+crore
+Crosby
+crosier
+cross
+crossability
+crossable
+crossarm
+crossbar
+crossbar's
+crossbars
+crossbeam
+crossbearer
+crossbill
+crossbones
+crossbow
+crossbowman
+crossbred
+crossbreed
+crosscheck
+crosscurrent
+crosscurrents
+crosscut
+crosse
+crossed
+crosser
+crossers
+crosses
+crossfire
+crosshatch
+crosshatched
+crosshatches
+crosshatching
+crosshead
+crossing
+crossings
+crossjack
+crosslet
+Crossley
+crosslink
+crosslink's
+crosslinks
+crossly
+crossopterygian
+crossover
+crossover's
+crossovers
+crosspatch
+crosspiece
+crosspoint
+crosspool
+crossproduct
+crossproducts
+crossroad
+crossroading
+crossroads
+crossruff
+crosstabulate
+crosstabulation
+crosstalk
+crosstie
+crossties
+crosstown
+crosstree
+crosswalk
+crossway
+crossways
+crosswind
+crosswise
+crossword
+crossword's
+crosswords
+crotch
+crotched
+crotches
+crotchet
+crotcheted
+crotchetiness
+crotcheting
+crotchets
+crotchety
+croton
+crotone
+crotonic
+crouch
+crouched
+crouches
+crouching
+croup
+croupier
+croupous
+croupy
+crouse
+croute
+crouton
+croutons
+crow
+crowbait
+crowbar
+crowbar's
+crowbars
+crowberry
+crowboot
+crowd
+crowded
+crowdedness
+crowder
+crowding
+crowds
+crowed
+crowfeet
+crowfoot
+crowfoots
+crowing
+crowkeeper
+Crowley
+crown
+crowned
+crowner
+crownet
+crowning
+Crownland
+crownpiece
+crowns
+crownwork
+crows
+Croydon
+Croydon's
+croze
+crozier
+CRT
+cru
+cruces
+crucial
+crucially
+crucian
+cruciate
+cruciately
+crucible
+crucifer
+cruciferous
+crucification
+crucified
+crucifies
+crucifix
+crucifixion
+cruciform
+cruciformly
+crucify
+crucifying
+cruck
+crud
+crudded
+crudding
+cruddy
+crude
+crudely
+crudeness
+cruder
+crudest
+crudities
+crudity
+cruel
+crueler
+cruelest
+cruelize
+cruelizes
+crueller
+cruellest
+cruelly
+cruelness
+cruelty
+cruet
+cruft
+crufty
+Cruickshank
+Cruickshank's
+cruise
+cruised
+cruiser
+cruisers
+cruiserweight
+cruises
+cruiseway
+cruising
+cruller
+crumb
+crumbier
+crumble
+crumbled
+crumbles
+crumblier
+crumbliness
+crumbling
+crumblings
+crumbly
+crumbs
+crumby
+crumhorn
+crummier
+crummies
+crummock
+crummy
+crump
+crumpet
+crumple
+crumpled
+crumples
+crumpling
+crunch
+crunched
+cruncher
+crunchers
+crunches
+crunchier
+crunchiest
+crunchiness
+crunching
+crunchy
+crunode
+crupper
+crura
+crural
+crus
+crusade
+crusaded
+crusader
+crusaders
+crusades
+crusading
+crusado
+cruse
+crush
+crushable
+crushed
+crusher
+crushers
+crushes
+crushing
+crushingly
+crushproof
+Crusoe
+crust
+crust's
+crustacea
+crustacean
+crustacean's
+crustaceans
+crustaceous
+crustal
+crusted
+crustier
+crustification
+crustily
+crustiness
+crusting
+crustose
+crusts
+crusty
+crutch
+crutch's
+crutched
+crutches
+crux
+crux's
+cruxes
+cruyff
+Cruz
+cruzado
+cruzeiro
+crwth
+cry
+crybaby
+cryer
+crying
+crymotherapy
+cryobiological
+cryobiologically
+cryobiologist
+cryobiologists
+cryobiology
+cryocable
+cryogen
+cryogenic
+cryogenically
+cryogenics
+cryogeny
+cryohydrate
+cryolite
+cryometer
+cryonic
+cryonics
+cryophilic
+cryophyte
+cryoplankton
+cryoscope
+cryoscopic
+cryoscopy
+cryostat
+cryosurgery
+cryotherapy
+cryotron
+crypt
+cryptaesthesia
+cryptal
+cryptanalysis
+cryptanalyst
+cryptanalytic
+cryptanalyze
+cryptic
+cryptical
+cryptically
+crypto
+cryptoclastic
+cryptocrystalline
+cryptogam
+cryptogenic
+cryptogram
+cryptogram's
+cryptogrammic
+cryptograms
+cryptograph
+cryptographer
+cryptographic
+cryptographically
+cryptography
+cryptologic
+cryptological
+cryptologist
+cryptology
+Cryptomeria
+cryptos
+cryptozoic
+cryptozoite
+crypts
+cryst
+crystal
+crystal's
+crystalline
+crystallite
+crystallites
+crystallizabilities
+crystallizability
+crystallizability's
+crystallizable
+crystallizable's
+crystallizables
+crystallization
+crystallization's
+crystallizations
+crystallize
+crystallized
+crystallizer
+crystallizers
+crystallizes
+crystallizing
+crystallographer
+crystallographers
+crystallographic
+crystallographica
+crystallography
+crystals
+CSNET
+CST
+CT
+ctenidium
+ctenoid
+ctenophore
+ctesiphon
+cub
+cub's
+Cuba
+cubage
+Cuban
+cubane
+Cubanize
+Cubanizes
+Cubans
+cubature
+cubbies
+cubby
+cubbyhole
+cube
+cubeb
+cubed
+cuber
+Cuberli
+cubes
+cubic
+cubical
+cubically
+cubicle
+cubicles
+cubicly
+cubics
+cubiculum
+cubiform
+cubing
+cubism
+cubist
+cubistic
+cubists
+cubit
+cubital
+cuboid
+cuboidal
+cubs
+cucking
+cuckold
+cuckoldry
+cuckoo
+cuckoo's
+cuckooflower
+cuckoopint
+cuckoos
+cuculiform
+cucullate
+cucullated
+cucullates
+cucumber
+cucumber's
+cucumbers
+cucurbit
+cud
+cudbear
+cuddle
+cuddleback
+cuddled
+cuddles
+cuddlesome
+cuddlier
+cuddling
+cuddly
+cuddy
+cudgel
+cudgel's
+cudgeled
+cudgeler
+cudgelers
+cudgeling
+cudgelings
+cudgels
+cudgerie
+cudweed
+cue
+cued
+cueing
+cuenca
+cuernavaca
+cues
+cuesta
+cuff
+cuff's
+cuffed
+cuffing
+cuffless
+cufflink
+cufflinks
+cuffs
+cufic
+cuing
+cuirass
+cuirassier
+cuisine
+cuisse
+cuke
+culation
+Culbertson
+Culbertson's
+culch
+culebra
+culet
+Culex
+culicid
+culinary
+cull
+culled
+cullender
+culler
+cullet
+culling
+cullis
+culloden
+culls
+cully
+culm
+culmiferous
+culminant
+culminate
+culminated
+culminates
+culminating
+culmination
+culotte
+culottes
+culpa
+culpability
+culpable
+culpableness
+culpably
+culpas
+culprit
+culprit's
+culprits
+cult
+cult's
+cultch
+cultic
+cultigen
+cultism
+cultist
+cultists
+cultivability
+cultivable
+cultivar
+cultivars
+cultivatable
+cultivate
+cultivated
+cultivates
+cultivating
+cultivation
+cultivations
+cultivator
+cultivator's
+cultivators
+cultrate
+cults
+cultural
+culturally
+culture
+cultured
+cultures
+culturing
+culturization
+culturization's
+culturizations
+culturize
+culturizes
+Culver
+culverin
+Culvers
+culvert
+cum
+cumae
+cumber
+Cumberland
+cumbernauld
+cumbersome
+cumbersomely
+cumbersomeness
+cumbria
+Cumbrian
+cumbrous
+cumbrously
+cumbrousness
+cumin
+cummerbund
+Cummings
+Cummins
+cumquat
+cumshaw
+cumulate
+cumulated
+cumulates
+cumulating
+cumulation
+cumulations
+cumulative
+cumulatively
+cumulet
+cumuliform
+cumulonimbus
+cumulostratus
+cumulous
+cumulus
+Cunard
+cunaxa
+cunctation
+cunctative
+Cundick
+cuneal
+cuneate
+cuneately
+cuneiform
+cuneo
+cunjevoi
+cunner
+cunnilinctus
+cunnilingus
+cunning
+Cunningham
+cunningly
+cunningness
+cunt
+CUNY
+cup
+cup's
+cupbearer
+cupboard
+cupboard's
+cupboards
+cupcake
+cupcakes
+cupel
+cupelation
+cupeled
+cupeler
+cupelers
+cupeling
+Cupertino
+Cupertino's
+cupful
+cupfuls
+Cupid
+cupidity
+cuplike
+cupola
+cuppa
+cupped
+cuppier
+cupping
+cuppy
+cupreous
+cupric
+cupriferous
+cuprite
+cuprous
+cuprum
+cups
+cupsful
+cupular
+cupulate
+cupule
+cur
+curability
+curable
+curableness
+curably
+curacy
+curare
+curarine
+curarize
+curarized
+curarizes
+curarizing
+curassow
+curate
+curative
+curatively
+curatize
+curatizes
+curator
+curatorial
+curators
+curatorship
+curb
+curbed
+curbing
+curbs
+curbside
+curbstone
+curch
+Curculio
+Curcuma
+curd
+curdle
+curdled
+curdles
+curdling
+curds
+cure
+cured
+cureless
+curer
+cures
+curet
+curettage
+curette
+curetted
+curettement
+curetting
+curfew
+curfew's
+curfews
+curia
+curiae
+curie
+curing
+curio
+curios
+curiosa
+curiosities
+curiosity
+curiosity's
+curious
+curiouser
+curiousest
+curiously
+curiousness
+curite
+curitiba
+curium
+curl
+curled
+curler
+curlers
+curlew
+curlicue
+curlier
+curliness
+curling
+curlpaper
+curls
+curly
+curmudgeon
+curmudgeonly
+currajong
+Curran
+Curran's
+currant
+currant's
+currants
+currawong
+currencies
+currency
+currency's
+current
+currently
+currentness
+currents
+curricle
+curricula
+curricular
+curricularization
+curricularization's
+curricularizations
+curricularize
+curricularizes
+curriculum
+curriculum's
+curriculums
+currie
+curried
+currier
+curriery
+curries
+currish
+currishly
+curry
+currycomb
+currying
+curs
+curse
+cursed
+cursedly
+cursedness
+curses
+cursing
+cursive
+cursively
+cursiveness
+cursor
+cursor's
+cursorial
+cursorily
+cursoriness
+cursors
+cursory
+curst
+curt
+curtail
+curtailed
+curtailer
+curtailing
+curtailment
+curtails
+curtain
+curtained
+curtaining
+curtains
+curtal
+Curtana
+curtesy
+curtilage
+curtin
+Curtis
+curtly
+curtness
+curtsey
+curtseyed
+curtseying
+curtseys
+curtsied
+curtsies
+curtsy
+curtsy's
+curtsying
+curule
+curvaceous
+curvaceously
+curvacious
+curvature
+curvatures
+curve
+curveball
+curved
+curves
+CURVET
+Curvet
+curvilineal
+curvilinear
+curvilinearity
+curvilinearly
+curving
+curvy
+curzon
+cusco
+Cuscus
+cusec
+cush
+cushat
+cushiest
+cushily
+Cushing
+Cushing's
+cushion
+cushioned
+cushioning
+cushionless
+cushions
+cushiony
+Cushitic
+Cushman
+cushy
+cusk
+cuso
+cusp
+cusp's
+cuspate
+cuspated
+cuspid
+cuspidate
+cuspidated
+cuspidation
+cuspidor
+cusps
+cuss
+cussed
+cussedly
+cussedness
+cusser
+cusses
+cussword
+cusswords
+custard
+Custer
+Custer's
+custodial
+custodian
+custodian's
+custodians
+custodianship
+custodianships
+custodies
+custody
+custom
+customable
+customarily
+customariness
+customary
+customer
+customer's
+customers
+customhouse
+customhouses
+customizable
+customization
+customization's
+customizations
+customize
+customized
+customizer
+customizers
+customizes
+customizing
+customs
+customshouse
+custos
+custumal
+cut
+cut's
+cutability
+cutaneous
+cutaneously
+cutaround
+cutaway
+cutback
+cutbacks
+cutch
+cutcherry
+cute
+cutely
+cuteness
+cuter
+cutes
+cutest
+cutesy
+cutey
+cuteys
+Cuthbert
+cuticle
+cuticles
+cuticula
+cuticular
+cutie
+cutin
+cutinize
+cutinized
+cutinizes
+cutinizing
+cutis
+cutization
+cutization's
+cutizations
+cutlass
+cutler
+cutlery
+cutlet
+cutlets
+cutline
+cutoff
+cutoffs
+cutout
+cutouts
+cutover
+cutpurse
+cuts
+cutset
+cuttable
+cuttack
+cutter
+cutter's
+cutters
+cutthroat
+cutting
+cuttingly
+cuttings
+cuttle
+cuttlebone
+cuttlebones
+cuttlefish
+cuttlefishes
+cutty
+cutup
+cutups
+cutwater
+cutwork
+cutworm
+cuvette
+Cuvier
+cuxhaven
+cuyp
+cuzco
+Cuzco
+cwmbran
+cyan
+Cyanamid
+cyanamide
+cyanate
+cyanic
+cyanide
+cyanine
+cyanite
+cyanocobalamin
+cyanogen
+cyanohydrin
+cyanosis
+cyanotype
+cybele
+cyber
+cybernate
+cybernated
+cybernation
+cybernetic
+cybernetical
+cybernetically
+cybernetician
+cyberneticist
+cybernetics
+cyborg
+cycad
+Cyclades
+cyclamate
+cyclamen
+cycle
+cycled
+cycler
+cycles
+cyclic
+cyclical
+cyclically
+cyclicity
+cyclicly
+cycling
+cyclist
+cyclists
+cyclitol
+cyclization
+cyclization's
+cyclizations
+cyclize
+cyclized
+cyclizes
+cyclizing
+cyclo
+cycloaddition
+cycloalkane
+cyclograph
+cycloheptatrienyl
+cyclohexane
+cyclohexanol
+cyclohexyl
+cycloid
+cycloid's
+cycloidal
+cycloids
+cyclometer
+cyclometer's
+cyclometers
+cyclone
+cyclone's
+cyclones
+cyclonic
+cyclonically
+cyclonite
+cycloparaffin
+cyclopean
+cyclopedia
+cyclopentadienyl
+cyclopentane
+cycloplegia
+cyclopropane
+cyclops
+cyclorama
+cyclos
+cyclosis
+cyclostome
+cyclostyle
+cyclothymia
+cyclotomic
+cyclotomy
+cyclotron
+cyder
+cydnus
+cygnet
+cygnet's
+cygnets
+Cygnus
+cylinder
+cylinder's
+cylindered
+cylindering
+cylinders
+cylindric
+cylindrical
+cylindrically
+cylindroid
+cylix
+cyma
+cymar
+cymatium
+cymbal
+cymbal's
+cymbalist
+cymbalists
+cymbalo
+cymbals
+cyme
+cymene
+cymogene
+cymograph
+cymoid
+cymophane
+cymose
+Cymric
+cymru
+cynghanedd
+cynic
+cynical
+cynically
+cynicism
+cynics
+cynosure
+Cynthia
+cyperaceous
+cypher
+cyphers
+cypress
+Cyprian
+cyprinid
+cyprinodont
+cyprinoid
+Cypriot
+Cypripedium
+Cyprus
+cypsela
+Cyrano
+Cyrenaic
+cyrenaica
+cyrene
+Cyril
+Cyrillic
+Cyrus
+cyst
+cystamine
+cystectomy
+cysteine
+cystic
+cysticercoid
+cystine
+cystitis
+cystocarp
+cystocele
+cystoid
+cystolith
+cystoscope
+cystotomy
+cysts
+cytaster
+cythera
+Cytherea
+cytidine
+cytochemical
+cytochemically
+cytochemistry
+cytochrome
+cytogenesis
+cytogenetics
+cytokinesis
+cytokinin
+cytologic
+cytological
+cytologically
+cytologist
+cytology
+cytolysin
+cytolysis
+cytolytic
+cyton
+cytopathogenicity
+cytophilic
+cytoplasm
+cytoplasmic
+cytoplasmically
+cytoplast
+cytosine
+cytostatic
+cytostatically
+cytotaxonomy
+cytotoxicity
+cytotoxin
+cytotropic
+cyzicus
+CZ
+czar
+czardas
+czarevitch
+czarevna
+czarina
+czarism
+czarist
+czarship
+Czech
+Czechization
+Czechization's
+Czechizations
+Czechoslovak
+Czechoslovakia
+Czechoslovakian
+Czerniak
+Czerniak's
+Czernowitz
+Czerny
+d'art
+d'etat
+d'etre
+d'oeuvre
+d's
+DA's
+dab
+dabbed
+dabber
+dabbers
+dabbing
+dabble
+dabbled
+dabbler
+dabblers
+dabbles
+dabbling
+dabchick
+dabs
+dabster
+Dacca
+Dacca's
+dace
+dacha
+dachau
+dachshund
+dachshunde
+dachsund
+dacia
+dacoit
+dacoity
+dacron
+Dacron
+dactyl
+dactylic
+dactylogram
+dactylography
+dactylology
+dactyls
+dactylus
+dad
+dad's
+Dada
+Dadaism
+Dadaist
+Dadaistic
+daddies
+daddy
+Dade
+dado
+dadra
+dads
+daedal
+Daedalus
+daemon
+daemon's
+daemons
+daff
+daffier
+daffodil
+daffodil's
+daffodils
+daffy
+daft
+dafter
+daftest
+daftly
+daftness
+DAG
+dagan
+Dagenham
+Dagestan
+dagga
+dagger
+daggerboard
+daggerman
+daggers
+Dago
+dagoba
+dagon
+daguerre
+daguerreotype
+daguerreotype's
+daguerreotypes
+daguerreotypic
+daguerreotypy
+Dahl
+Dahl's
+dahlia
+dahlias
+dahna
+Dahomey
+Dahomey's
+Dailey
+Dailey's
+dailies
+daily
+Daimler
+daimon
+daimones
+daimonic
+daimons
+daimyo
+daintier
+dainties
+daintily
+daintiness
+dainty
+daiquiri
+daiquiris
+dairen
+dairies
+dairy
+dairying
+dairyland
+Dairylea
+dairymaid
+dairyman
+dairymen
+dais
+daises
+daishiki
+daisies
+daisy
+daisy's
+daisycutter
+dak
+Dakar
+Dakota
+dal
+daladier
+dalai
+dalasi
+dale
+dale's
+dales
+dalesman
+daleth
+Daley
+Daley's
+Dalhousie
+dalhousie
+dali
+Dali
+dallapiccola
+Dallas
+dalliance
+dallied
+dallier
+dalloway
+dally
+dallyes
+dallying
+dalmatia
+dalmatian
+dalmatians
+dalmatic
+Dalton
+Daltonism
+Daly
+Dalzell
+Dalzell's
+dam
+dam's
+damage
+damaged
+damager
+damagers
+damages
+damaging
+damagingly
+Damara
+Damaraland
+Damascene
+Damascus
+damask
+dame
+damed
+Damien
+damietta
+dammed
+damming
+dammit
+damn
+damnable
+damnableness
+damnably
+damnation
+damnatory
+damndest
+damned
+damneder
+damnedest
+damnify
+damning
+damningly
+damns
+Damocles
+damodar
+Damon
+Damon's
+damp
+dampcourse
+damped
+dampen
+dampened
+dampener
+dampening
+dampens
+damper
+dampers
+dampier
+damping
+dampish
+damply
+dampness
+damps
+dams
+damsel
+damsel's
+damselfish
+damselflies
+damselfly
+damsels
+Damson
+Dan
+Dan's
+Dana
+Dana's
+Danaides
+Danbury
+dance
+danceability
+danceable
+danced
+dancelike
+dancer
+dancers
+dances
+dancing
+dandelion
+dandelion's
+dandelions
+dander
+dandiacal
+dandiacally
+dandie
+dandier
+dandies
+dandification
+dandify
+dandily
+dandiprat
+dandle
+dandled
+dandling
+dandruff
+dandruffy
+dandy
+dandyish
+dandyishly
+dandyism
+dandyize
+dandyizes
+dandys
+Dane
+Danegeld
+Danelaw
+Danes
+dang
+danged
+danger
+danger's
+dangerous
+dangerously
+dangerousness
+dangers
+dangle
+dangled
+dangler
+dangler's
+danglers
+dangles
+dangling
+danglingly
+Daniel
+Daniels
+Danielson
+Danio
+Danish
+Danization
+Danization's
+Danizations
+Danize
+Danizes
+dank
+dankly
+dankness
+Danny
+Danny's
+danseur
+Dante
+Danton
+Danube
+Danubian
+Danville
+Danzig
+Daphne
+daphnia
+Daphnis
+dapper
+dapperly
+dapperness
+dapple
+dappled
+dapples
+dappling
+Dapsang
+daraf
+darbies
+Darby
+Darcy
+Darcy's
+Dard
+Dardan
+dardanelles
+dardanus
+Dardic
+dare
+dared
+daredevil
+daredevilry
+daredevils
+daredeviltry
+dareful
+darer
+darers
+dares
+daresay
+daresbury
+darfur
+darg
+dargah
+daric
+Darien
+daring
+daringly
+daringness
+dario
+dariole
+Darius
+Darjeeling
+dark
+darken
+darkend
+darkened
+darkener
+darkeners
+darkening
+darker
+darkest
+darkish
+darkle
+darkly
+darkness
+darkroom
+darkrooms
+darks
+darksome
+darlan
+Darlene
+darling
+darling's
+darlingly
+darlingness
+darlings
+Darlington
+darlington
+darmstadt
+darn
+darned
+darnel
+darner
+darning
+darnley
+darns
+darogha
+DARPA
+DARPA's
+Darrell
+Darrow
+darrow
+Darry
+darry
+dart
+dartboard
+darted
+darter
+Dartford
+darting
+Dartmoor
+Dartmouth
+darts
+Darwin
+Darwinian
+Darwinism
+Darwinistic
+Darwinize
+Darwinizes
+Daryl
+Daryl's
+dash
+dashboard
+dashboards
+dashed
+dasheen
+dasher
+dashers
+dashes
+dashiki
+dashing
+dashingly
+dashpot
+dassie
+dastard
+dastardize
+dastardizes
+dastardliness
+dastardly
+dasyure
+data
+databank
+databanks
+database
+database's
+databases
+datable
+datafile
+datagram
+datagram's
+datagrams
+Datamation
+Datamedia
+datamedia
+datary
+dataset
+datasets
+dataswitch
+dataswitches
+datatype
+datcap
+datcha
+date
+dateable
+dated
+datedly
+datedness
+dateless
+dateline
+datelined
+datelines
+dater
+dates
+datetime
+dating
+dative
+dato
+datolite
+Datsun
+datuk
+datum
+datums
+datura
+daub
+daube
+daubed
+dauber
+daubery
+daubigny
+daubs
+daudet
+daugava
+daugavpils
+Daugherty
+Daugherty's
+daughter
+daughter's
+daughterless
+daughterly
+daughters
+daumier
+daunt
+daunted
+daunting
+dauntless
+dauntlessly
+dauntlessness
+daunts
+dauphin
+dauphine
+davao
+Dave
+Dave's
+davenport
+David
+David's
+Davidovich
+Davidson
+Davie
+Davies
+Davinich
+Davis
+Davison
+Davison's
+davit
+davits
+Davy
+daw
+dawdle
+dawdled
+dawdler
+dawdlers
+dawdles
+dawdling
+dawes
+dawn
+dawned
+dawning
+dawns
+Dawson
+day
+day's
+dayak
+dayan
+daybed
+daybook
+dayboy
+daybreak
+daybreaks
+daydream
+daydreamed
+daydreamer
+daydreamers
+daydreaming
+daydreamlike
+daydreams
+dayfile
+dayflower
+dayfly
+daylight
+daylight's
+daylights
+daylong
+daymare
+dayroom
+dayrooms
+days
+dayspring
+daystar
+daytime
+daytimes
+Dayton
+Daytona
+Daytona's
+daze
+dazed
+dazedness
+dazes
+dazing
+dazzle
+dazzled
+dazzler
+dazzlers
+dazzles
+dazzling
+dazzlingly
+db
+DB
+DC
+de
+deacidification
+deacidify
+deacon
+deacon's
+deaconess
+deaconize
+deaconizes
+deaconry
+deacons
+deactivate
+deactivated
+deactivates
+deactivating
+deactivation
+deactivator
+dead
+deadbeat
+deaden
+deadened
+deadener
+deadening
+deadeningly
+deadens
+deadeye
+deadfall
+deadhead
+deadheads
+deadlier
+deadliest
+deadlight
+deadline
+deadline's
+deadlines
+deadliness
+deadlock
+deadlocked
+deadlocking
+deadlocks
+deadly
+deadness
+deadpan
+deadpanner
+deadstarting
+deadweight
+deadwood
+deaerate
+deaerates
+deaeration
+deaf
+deafen
+deafened
+deafening
+deafeningly
+deafens
+deafer
+deafest
+deafly
+deafness
+deakin
+deal
+dealate
+dealated
+dealates
+dealation
+dealer
+dealers
+dealership
+dealerships
+dealfish
+dealing
+dealings
+deallocate
+deallocated
+deallocates
+deallocating
+deallocation
+deallocation's
+deallocations
+deallocator
+deals
+dealt
+deaminate
+deamination
+deaminize
+dean
+dean's
+Deane
+Deane's
+deanery
+Deanna
+Deanna's
+deans
+deanship
+dear
+Dearborn
+dearchive
+dearchived
+dearchives
+dearchiving
+dearer
+dearest
+dearie
+dearly
+dearness
+dears
+dearth
+dearths
+deary
+deassign
+deassignment
+deassigns
+death
+deathbed
+deathblow
+deathless
+deathlessly
+deathlessness
+deathly
+deaths
+deathsman
+deathtrap
+deathward
+deathwatch
+Deauville
+Deb
+debacle
+debacles
+debag
+debar
+debark
+debarkation
+debarks
+debarment
+debarred
+debarring
+debars
+debase
+debased
+debasement
+debaser
+debases
+debasing
+debatable
+debate
+debated
+debatement
+debater
+debaters
+debates
+debating
+debator
+debators
+debauch
+debauched
+debauchedly
+debauchedness
+debauchee
+debaucher
+debauchery
+debauches
+Debbie
+Debbie's
+Debby
+debe
+debenture
+debentures
+debilitate
+debilitated
+debilitates
+debilitating
+debilitation
+debility
+debit
+debited
+debiting
+debits
+debonair
+debonairly
+debonairness
+debone
+deboner
+debones
+deboning
+Deborah
+debouch
+debouchment
+debouchure
+Debra
+debrecen
+debrief
+debriefed
+debriefing
+debriefs
+debris
+debs
+debt
+debt's
+debtless
+debtor
+debtors
+debts
+debug
+debugged
+debugger
+debugger's
+debuggers
+debugging
+debugs
+debunk
+debunker
+debunking
+debunks
+debus
+Debussy
+debut
+debutant
+debutante
+debutante's
+debutantes
+debuting
+debuts
+debye
+Dec
+decade
+decade's
+decadence
+decadency
+decadent
+decadently
+decades
+decaffeinate
+decaffeinated
+decaffeinates
+decaffeinating
+decagon
+decagram
+decahedron
+decal
+decalcification
+decalcify
+decalcomania
+decalescence
+decaliter
+decaliters
+decalogue
+decalogues
+decameter
+decameter's
+decameters
+decametric
+decamp
+decampment
+decamps
+decanal
+decane
+decanedioic
+decani
+decanoic
+decanol
+decant
+decantation
+decanted
+decanter
+decanters
+decanting
+decants
+decapitate
+decapitated
+decapitates
+decapitating
+decapitation
+decapitator
+decapod
+decapod's
+decapods
+decapolis
+decarbonate
+decarbonated
+decarbonates
+decarbonating
+decarbonation
+decarbonator
+decarbonization
+decarbonize
+decarbonized
+decarbonizer
+decarbonizes
+decarbonizing
+decarboxylation
+decarburization
+decarburize
+decarburized
+decarburizes
+decarburizing
+decastyle
+decasualization
+decasyllabic
+decasyllable
+decathlon
+decathlons
+Decatur
+Decatur's
+decay
+decayed
+decayer
+decaying
+decays
+Decca
+deccan
+decease
+deceased
+deceases
+deceasing
+decedent
+deceit
+deceitful
+deceitfully
+deceitfulness
+deceivable
+deceivableness
+deceive
+deceived
+deceiver
+deceivers
+deceives
+deceiving
+deceivingly
+decelerate
+decelerated
+decelerates
+decelerating
+deceleration
+decelerations
+decelerator
+decelerometer
+December
+December's
+Decembers
+Decembrist
+decemvirate
+decenary
+decencies
+decency
+decency's
+decennial
+decennially
+decennium
+decent
+decently
+decentralist
+decentralization
+decentralization's
+decentralizationist
+decentralizations
+decentralize
+decentralized
+decentralizes
+decentralizing
+deception
+deception's
+deceptional
+deceptions
+deceptive
+deceptively
+deceptiveness
+decerebrate
+decerebrated
+decerebrates
+decerebrating
+decerebration
+decern
+decertification
+decertify
+dechlorinate
+dechlorinated
+dechlorinates
+dechlorination
+deciare
+decibel
+decibels
+decidability
+decidable
+decide
+decided
+decidedly
+decidedness
+decider
+decides
+deciding
+decidua
+decidual
+deciduate
+deciduous
+deciduously
+deciduousness
+decigram
+decigram's
+decigrams
+decile
+deciliter
+deciliters
+decillion
+decimal
+decimalization
+decimalization's
+decimalizations
+decimalize
+decimalized
+decimalizes
+decimalizing
+decimally
+decimals
+decimate
+decimated
+decimates
+decimating
+decimation
+decimeter
+decimeter's
+decimeters
+decimetric
+decipher
+decipherable
+deciphered
+decipherer
+decipherers
+deciphering
+decipherment
+deciphers
+decision
+decision's
+decisional
+decisionmaker
+decisions
+decisive
+decisively
+decisiveness
+decistere
+deck
+decked
+decker
+deckhand
+deckhouse
+decking
+deckings
+deckle
+decks
+declaim
+declaimed
+declaimer
+declaiming
+declaims
+declamation
+declamations
+declamatory
+declarable
+declarant
+declaration
+declaration's
+declarations
+declarative
+declaratively
+declaratives
+declarator
+declarators
+declaratory
+declare
+declared
+declarer
+declarers
+declares
+declaring
+declass
+declasse
+declassification
+declassifications
+declassify
+declension
+declensional
+declensionally
+declensions
+declinable
+declinate
+declination
+declination's
+declinational
+declinations
+decline
+declined
+decliner
+decliners
+declines
+declining
+declinometer
+declivitous
+declivity
+declog
+declogged
+declogging
+declogs
+decluster
+declustered
+declustering
+declusters
+declutch
+declutched
+declutches
+declutching
+DECNET
+decoct
+decocted
+decocting
+decoction
+decoctions
+decocts
+decode
+decoded
+decoder
+decoders
+decodes
+decoding
+decodings
+decoke
+decollate
+decollated
+decollates
+decollating
+decollation
+decollations
+decolletage
+decolletages
+decollimate
+decolonise
+decolonization
+decolonize
+decolonized
+decolonizes
+decolonizing
+decolor
+decolorant
+decolorants
+decolorate
+decolorated
+decolorates
+decolored
+decoloring
+decolorise
+decolorised
+decolorises
+decolorization
+decolorize
+decolorized
+decolorizer
+decolorizes
+decolors
+decommission
+decompensate
+decompensation
+decompensatory
+decompile
+decompiled
+decompiler
+decompilers
+decompiles
+decompiling
+decomposability
+decomposable
+decompose
+decomposed
+decomposer
+decomposes
+decomposing
+decomposition
+decomposition's
+decompositions
+decompound
+decompress
+decompressed
+decompresser
+decompresses
+decompressing
+decompression
+deconcentrate
+deconcentrator
+decondition
+decongest
+decongestant
+decongestion
+decongestive
+deconsecrate
+deconsecration
+deconstruct
+decontaminate
+decontaminated
+decontaminates
+decontaminating
+decontamination
+decontaminations
+decontrol
+decontrolled
+decontrolling
+deconvolution
+deconvolve
+decor
+decorate
+decorated
+decorates
+decorating
+decoration
+decorations
+decorative
+decoratively
+decorativeness
+decorator
+decorators
+decorous
+decorously
+decorousness
+decorticate
+decorticated
+decorticates
+decorticating
+decortication
+decorticator
+decorticators
+decorum
+decorums
+decoupage
+decoupages
+decouple
+decoupled
+decoupler
+decouples
+decoupling
+decoy
+decoy's
+decoys
+decrease
+decreased
+decreases
+decreasing
+decreasingly
+decree
+decreed
+decreeing
+decreer
+decrees
+decreet
+decrement
+decremental
+decremented
+decrementing
+decrements
+decrepid
+decrepit
+decrepitate
+decrepitation
+decrepitly
+decrepitude
+decrescendo
+decrescent
+decretal
+decretals
+decretive
+decretory
+decrial
+decrials
+decried
+decrier
+decries
+decriminalization
+decriminalization's
+decriminalize
+decry
+decrying
+decrypt
+decrypted
+decrypting
+decryption
+decryptograph
+decrypts
+DECsystem
+decsystem
+dectape
+DECtape
+decubitus
+decumbent
+decuple
+decurion
+decurrent
+decurved
+decury
+decussate
+decussately
+decussation
+decwriter
+dedal
+dedicate
+dedicated
+dedicatedly
+dedicates
+dedicating
+dedication
+dedications
+dedicative
+dedicator
+dedicatory
+dedifferentiate
+dedifferentiated
+dedifferentiation
+deduce
+deduced
+deducer
+deduces
+deducible
+deducing
+deduct
+deducted
+deductibility
+deductible
+deductibles
+deducting
+deduction
+deduction's
+deductions
+deductive
+deductively
+deducts
+Dee
+Dee's
+deed
+deeded
+deeding
+deedless
+deeds
+deejay
+deek
+deem
+deemed
+deeming
+deemphasis
+deemphasization
+deemphasization's
+deemphasize
+deemphasized
+deemphasizer
+deemphasizers
+deemphasizes
+deemphasizing
+deems
+deemster
+deenergize
+deenergized
+deenergizer
+deenergizes
+deenergizing
+deep
+deepen
+deepened
+deepening
+deepens
+deeper
+deepest
+Deepfreeze
+deeply
+deepness
+deeps
+deer
+Deere
+deergrass
+deerhound
+deers
+deerskin
+deerskins
+deerstalker
+deface
+defacement
+defacer
+defaces
+defacing
+defalcate
+defalcation
+defalcator
+defamation
+defamatory
+defame
+defamed
+defamer
+defames
+defaming
+defat
+default
+defaulted
+defaulter
+defaulting
+defaults
+defeasance
+defeasibility
+defeasible
+defeat
+defeated
+defeating
+defeatism
+defeatist
+defeatists
+defeats
+defeature
+defeatured
+defeatures
+defeaturing
+defecate
+defecated
+defecates
+defecating
+defecation
+defecations
+defect
+defected
+defecting
+defection
+defection's
+defections
+defective
+defectively
+defectiveness
+defectives
+defector
+defector's
+defectors
+defects
+defeminize
+defeminized
+defeminizes
+defeminizing
+defend
+defendable
+defendant
+defendant's
+defendants
+defended
+defender
+defenders
+defending
+defends
+defenestrate
+defenestrated
+defenestrates
+defenestrating
+defenestration
+defenestrations
+defense
+defense's
+defensed
+defenseless
+defenselessly
+defenselessness
+defenseman
+defenses
+defensibility
+defensible
+defensibly
+defensing
+defensive
+defensively
+defensiveness
+defer
+deferable
+deference
+deferent
+deferential
+deferentially
+deferents
+deferment
+deferment's
+deferments
+deferrable
+deferral
+deferred
+deferrer
+deferrer's
+deferrers
+deferring
+defers
+defervescence
+defervescences
+defervescent
+defial
+defiance
+defiances
+defiant
+defiantly
+defibrillation
+defibrillator
+deficiencies
+deficiency
+deficient
+deficiently
+deficit
+deficit's
+deficits
+defied
+defier
+defies
+defilade
+defile
+defiled
+defilement
+defiler
+defiles
+defiling
+definable
+definably
+define
+defined
+definement
+definer
+definers
+defines
+definiendum
+definiens
+defining
+definite
+definitely
+definiteness
+definition
+definition's
+definitional
+definitions
+definitive
+definitively
+definitiveness
+definitization
+definitization's
+definitizations
+definitize
+definitized
+definitizes
+definitizing
+definitude
+deflagrate
+deflagrated
+deflagrates
+deflagrating
+deflagration
+deflate
+deflated
+deflater
+deflates
+deflating
+deflation
+deflationary
+deflator
+deflect
+deflected
+deflecting
+deflection
+deflectionization
+deflectionization's
+deflectionizations
+deflectionize
+deflectionizes
+deflections
+deflective
+deflector
+deflects
+deflexed
+deflocculate
+defloration
+deflorations
+deflower
+defoamer
+defoamers
+defocus
+defocusing
+defoe
+Defoe
+defoliant
+defoliate
+defoliated
+defoliates
+defoliating
+defoliation
+defoliator
+deforce
+deforcement
+deforciant
+deforest
+deforestation
+deforester
+deform
+deformalize
+deformation
+deformation's
+deformational
+deformations
+deformative
+deformed
+deforming
+deformities
+deformity
+deformity's
+deforms
+defraud
+defraudation
+defrauded
+defrauder
+defrauding
+defrauds
+defray
+defrayable
+defrayal
+defrayals
+defrayed
+defraying
+defrays
+defrock
+defrost
+defrosted
+defroster
+defrosting
+defrosts
+deft
+defter
+deftest
+deftly
+deftness
+defunct
+defunctionalization
+defunctionalization's
+defunctionalizations
+defunctionalize
+defunctionalizes
+defuse
+defused
+defusing
+defy
+defyed
+defying
+defyingly
+defys
+degas
+degassed
+degasses
+degassing
+degauss
+degaussed
+degausses
+degaussing
+degeneracy
+degenerate
+degenerated
+degenerately
+degenerateness
+degenerates
+degenerating
+degeneration
+degenerative
+deglutinate
+deglutition
+deglycerolized
+degradable
+degradation
+degradation's
+degradations
+degrade
+degraded
+degradedly
+degradedness
+degrader
+degrades
+degrading
+degradingly
+degranulation
+degrease
+degree
+degree's
+degreed
+degrees
+degression
+degressive
+degressively
+degum
+degumming
+degust
+dehisce
+dehiscent
+dehorn
+dehra
+dehumanization
+dehumanization's
+dehumanizations
+dehumanize
+dehumanized
+dehumanizes
+dehumanizing
+dehumidification
+dehumidifications
+dehumidified
+dehumidifier
+dehumidify
+dehydrase
+dehydrate
+dehydrated
+dehydrates
+dehydrating
+dehydration
+dehydrator
+dehydrogenase
+dehydrogenate
+dehydroretinol
+dehypnotization
+dehypnotize
+dehypnotized
+dehypnotizes
+dehypnotizing
+deianira
+deicide
+deictic
+deific
+deification
+deiform
+deify
+deign
+deigned
+deigning
+deigns
+deil
+Deimos
+deindustrialization
+deindustrialize
+deionization
+deionize
+deionizes
+deipnosophist
+Deirdre
+Deirdre's
+Deirdres
+deism
+deist
+deistic
+deistical
+deistically
+deities
+deity
+deity's
+deixis
+deja
+deject
+dejecta
+dejected
+dejectedly
+dejectedness
+dejection
+dejeuner
+dejeuners
+dekagram
+dekagram's
+dekagrams
+DeKalb
+dekaliter
+dekameter
+dekameter's
+dekameters
+DeKastere
+dekker
+dekko
+Del
+delacroix
+delagoa
+delaine
+delaminate
+delamination
+Delaney
+Delaney's
+Delano
+Delano's
+delate
+delated
+delates
+delating
+delation
+delator
+delaunay
+Delaware
+Delaware's
+delay
+delayed
+delayer
+delayers
+delaying
+delays
+dele
+delectability
+delectable
+delectableness
+delectably
+delectate
+delectation
+deledda
+delegable
+delegacy
+delegate
+delegated
+delegates
+delegating
+delegation
+delegations
+delegatory
+delete
+deleted
+deleter
+deleterious
+deleteriously
+deleteriousness
+deletes
+deleting
+deletion
+deletions
+delft
+delgado
+Delhi
+Delhi's
+deli
+deli's
+Delia
+Delia's
+Delian
+deliberate
+deliberated
+deliberately
+deliberateness
+deliberates
+deliberating
+deliberation
+deliberations
+deliberative
+deliberatively
+deliberativeness
+deliberator
+deliberator's
+deliberators
+Delibes
+delicacies
+delicacy
+delicacy's
+delicate
+delicately
+delicateness
+delicates
+delicatessen
+delicious
+deliciouses
+deliciously
+deliciousness
+delict
+delicti
+delight
+delighted
+delightedly
+delightedness
+delighter
+delightful
+delightfully
+delightfulness
+delighting
+delights
+delightsome
+delightsomely
+Delilah
+delimeter
+delimeters
+delimit
+delimitate
+delimitation
+delimitative
+delimited
+delimiter
+delimiters
+delimiting
+delimitize
+delimitizes
+delimits
+delineament
+delineaments
+delineate
+delineated
+delineates
+delineating
+delineation
+delineations
+delineative
+delineator
+delinquency
+delinquent
+delinquent's
+delinquently
+delinquents
+deliquesce
+deliquescence
+deliquescent
+delirious
+deliriously
+deliriousness
+delirium
+deliriums
+delis
+delist
+delitescence
+Delius
+deliver
+deliverability
+deliverable
+deliverables
+deliverance
+delivered
+deliverer
+deliverers
+deliveries
+delivering
+delivers
+delivery
+delivery's
+deliveryman
+deliveryman's
+deliverymen
+deliverymen's
+dell
+dell's
+Della
+Della's
+Deller
+dells
+dellwood
+Dellwood
+Delmarva
+delocalization
+delocalize
+Delorme
+Delos
+delouse
+deloused
+delouses
+delousing
+Delphi
+Delphic
+Delphically
+delphine
+delphinium
+Delphinus
+Delsarte
+delta
+delta's
+deltaic
+deltas
+deltiology
+deltoid
+deltoids
+delude
+deluded
+deluder
+deludes
+deluding
+deludingly
+deluge
+deluged
+deluges
+deluging
+delusion
+delusion's
+delusional
+delusionary
+delusions
+delusive
+delusively
+delusiveness
+delusory
+deluster
+deluxe
+delve
+delved
+delver
+delves
+delving
+demagnetizable
+demagnetizable's
+demagnetizables
+demagnetization
+demagnetization's
+demagnetizations
+demagnetize
+demagnetized
+demagnetizer
+demagnetizers
+demagnetizes
+demagnetizing
+demagnification
+demagnify
+demagog
+demagogic
+demagogical
+demagogically
+demagogism
+demagogue
+demagoguery
+demagogues
+demagogy
+demand
+demandable
+demandant
+demanded
+demander
+demanding
+demandingly
+demands
+demantoid
+demarcate
+demarcated
+demarcates
+demarcating
+demarcation
+demark
+demarkation
+dematerialization
+dematerialize
+dematerialized
+dematerializes
+dematerializing
+demavend
+deme
+demean
+demeaned
+demeaning
+demeanor
+demeanor's
+demeanors
+demeans
+dement
+demented
+dementedly
+dementedness
+dementia
+demential
+demerara
+demerit
+demerits
+demesne
+demeter
+Demeter
+demi
+demibastion
+demicanton
+demigod
+demigoddess
+demijohn
+demilitarization
+demilitarize
+demilitarized
+demilitarizes
+demilitarizing
+demilune
+demimondaine
+demimonde
+demineralization
+demineralization's
+demineralizations
+demineralize
+demineralized
+demineralizer
+demineralizes
+demineralizing
+demirel
+demirelief
+demirep
+demiscible
+demise
+demised
+demisemiquaver
+demises
+demising
+demission
+demist
+demit
+demitasse
+demitted
+demitting
+demiurge
+demivierge
+demivolt
+demo
+demob
+demobilization
+demobilize
+demobilized
+demobilizes
+demobilizing
+democracies
+democracy
+democracy's
+democrat
+democrat's
+democratic
+democratically
+democratique
+democratization
+democratization's
+democratizations
+democratize
+democratized
+democratizer
+democratizes
+democratizing
+democrats
+democritus
+demodulate
+demodulated
+demodulates
+demodulating
+demodulation
+demodulation's
+demodulations
+demodulator
+demodulator's
+demodulators
+Demogorgon
+demographer
+demographer's
+demographers
+demographic
+demographical
+demographically
+demographics
+demographiques
+demography
+demoiselle
+demolish
+demolished
+demolisher
+demolishes
+demolishing
+demolishment
+demolition
+demolitionist
+demolitions
+demon
+demon's
+demoness
+demonetization
+demonetize
+demonetized
+demonetizes
+demonetizing
+demoniac
+demoniacal
+demoniacally
+demonian
+demonic
+demonical
+demonically
+demonism
+demonization
+demonize
+demonized
+demonizes
+demonizing
+demonolater
+demonolatry
+demonology
+demons
+demonstrability
+demonstrable
+demonstrableness
+demonstrably
+demonstrate
+demonstrated
+demonstrates
+demonstrating
+demonstration
+demonstrational
+demonstrationist
+demonstrations
+demonstrative
+demonstratively
+demonstrativeness
+demonstrator
+demonstrator's
+demonstrators
+demoralization
+demoralization's
+demoralizations
+demoralize
+demoralized
+demoralizer
+demoralizers
+demoralizes
+demoralizing
+demoralizingly
+DeMorgan
+DeMorgan's
+demos
+Demosthenes
+demote
+demoted
+demotes
+demotic
+demoting
+demotion
+demould
+demoulded
+demoulding
+demoulds
+demount
+demountable
+demounted
+demounting
+demounts
+Dempsey
+dempster
+demulcent
+demulsify
+demultiplex
+demur
+demure
+demurely
+demureness
+demurrage
+demurral
+demurred
+demurrer
+demurring
+demurs
+demy
+demystified
+demystifies
+demystify
+demystifying
+demythologization
+demythologize
+demythologized
+demythologizer
+demythologizes
+demythologizing
+den
+den's
+denarius
+denary
+denationalization
+denationalize
+denationalized
+denationalizes
+denationalizing
+denaturalization
+denaturalize
+denaturalized
+denaturalizes
+denaturalizing
+denaturant
+denaturation
+denaturational
+denature
+denatured
+denatures
+denaturing
+denaturization
+denaturization's
+denaturizations
+denaturize
+denaturizer
+denaturizers
+denaturizes
+denazification
+denazify
+Denbighshire
+dendral
+dendriform
+dendrite
+dendrite's
+dendrites
+dendritic
+dendrochronologist
+dendrochronologists
+dendrochronology
+dendrogram
+dendrograms
+dendroid
+dendrologic
+dendrological
+dendrologist
+dendrology
+Dene
+Deneb
+Deneb's
+Denebola
+deneen
+Deneen
+denegation
+denervate
+denervated
+denervates
+denervating
+denervation
+dengue
+deniable
+denial
+denial's
+denials
+denicotinize
+denied
+denier
+denies
+denigrate
+denigrated
+denigrates
+denigrating
+denigration
+denigrative
+denigrator
+denigratory
+denim
+denims
+Denis
+denitrate
+denitrification
+denitrify
+deniz
+denizen
+denizenize
+denizenizes
+denizens
+Denmark
+Denmark's
+denning
+Dennis
+Denny
+denominate
+denominated
+denomination
+denomination's
+denominational
+denominationalism
+denominationalist
+denominationalize
+denominationalizes
+denominationally
+denominations
+denominative
+denominator
+denominator's
+denominators
+denormalize
+denotable
+denotation
+denotation's
+denotational
+denotationally
+denotations
+denotative
+denote
+denoted
+denotement
+denotes
+denoting
+denouement
+denounce
+denounced
+denouncement
+denouncer
+denouncers
+denounces
+denouncing
+dens
+dense
+densely
+denseness
+denser
+densest
+densification
+densify
+densimeter
+densimeter's
+densimeters
+densimetric
+densities
+densitometer
+densitometer's
+densitometers
+densitometric
+densitometry
+density
+density's
+dent
+dental
+Dentalium
+dentalization
+dentalization's
+dentalizations
+dentalize
+dentalizes
+dentally
+dentals
+dentate
+dentated
+dentately
+dentation
+dented
+dentex
+denticle
+denticulate
+denticulated
+denticulately
+denticulation
+dentiform
+dentifrice
+dentigerous
+dentil
+dentilabial
+dentilingual
+dentin
+dentinal
+dentine
+denting
+dentist
+dentist's
+dentistry
+dentists
+dentition
+dentoid
+Denton
+Denton's
+dents
+dentulous
+denture
+dentures
+denuclearization
+denuclearize
+denuclearized
+denuclearizes
+denuclearizing
+denudate
+denudation
+denudational
+denude
+denuded
+denudement
+denuder
+denudes
+denuding
+denumerable
+denumerably
+denunciate
+denunciated
+denunciates
+denunciating
+denunciation
+denunciations
+denunciative
+denunciatory
+Denver
+deny
+denying
+denyingly
+denys
+deodand
+deodar
+deodorant
+deodorant's
+deodorants
+deodorize
+deodorized
+deodorizes
+deodorizing
+deontic
+deontological
+deontologist
+deontology
+deoxidation
+deoxidizer
+deoxycholate
+deoxygenate
+deoxygenation
+deoxyribonucleic
+deoxyribose
+depart
+departed
+departing
+department
+department's
+departmental
+departmentalism
+departmentalization
+departmentalization's
+departmentalizations
+departmentalize
+departmentalizes
+departmentally
+departmentization
+departmentization's
+departmentizations
+departmentize
+departmentizes
+departments
+departs
+departure
+departure's
+departures
+depasture
+depend
+dependability
+dependable
+dependableness
+dependably
+Dependance
+Dependant
+dependant
+dependants
+Dependants
+depended
+dependence
+dependences
+dependencies
+dependency
+dependent
+dependently
+dependents
+depending
+depends
+depersonalization
+depersonalization's
+depersonalizations
+depersonalize
+depersonalized
+depersonalizes
+depersonalizing
+depict
+depicted
+depicter
+depicting
+depiction
+depictions
+depicts
+depicture
+depigmentation
+depilate
+depilated
+depilates
+depilating
+depilation
+depilatory
+deplane
+deplaned
+deplanes
+deplaning
+depletable
+deplete
+depleted
+depletes
+depleting
+depletion
+depletions
+depletive
+deplorable
+deplorableness
+deplorably
+deplore
+deplored
+deplorer
+deplores
+deploring
+deploringly
+deploy
+deployable
+deployed
+deploying
+deployment
+deployment's
+deployments
+deploys
+deplume
+depolarization
+depolarization's
+depolarizations
+depolarize
+depolarized
+depolarizer
+depolarizers
+depolarizes
+depolarizing
+depoliticization
+depoliticize
+depoliticized
+depoliticizes
+depoliticizing
+depolymerization
+depolymerize
+depolymerized
+depolymerizes
+depolymerizing
+depone
+deponed
+deponent
+depones
+deponing
+depopulate
+depopulation
+depopulator
+deport
+deportable
+deportation
+deported
+deportee
+deportee's
+deportees
+deporting
+deportment
+deports
+depose
+deposed
+deposes
+deposing
+deposit
+depositary
+deposited
+depositing
+deposition
+deposition's
+depositional
+depositions
+depositor
+depositor's
+depositors
+depository
+deposits
+depot
+depot's
+depots
+depravation
+depravations
+deprave
+depraved
+depravedly
+depravedness
+depravement
+depraver
+depraves
+depraving
+depravities
+depravity
+Depraz
+deprecate
+deprecated
+deprecates
+deprecating
+deprecatingly
+deprecation
+deprecations
+deprecatorily
+deprecatory
+depreciable
+depreciate
+depreciated
+depreciates
+depreciating
+depreciatingly
+depreciation
+depreciations
+depreciative
+depreciatively
+depreciator
+depreciators
+depreciatory
+depredate
+depredated
+depredates
+depredating
+depredation
+depredations
+depredator
+depredators
+depredatory
+depress
+depressant
+depressants
+depressed
+depresses
+depressible
+depressily
+depressing
+depressingly
+depression
+depression's
+depressions
+depressive
+depressively
+depressomotor
+depressor
+depressors
+depressurization
+depressurize
+depressurized
+depressurizes
+depressurizing
+deprivation
+deprivation's
+deprivations
+deprive
+deprived
+deprives
+depriving
+depside
+Dept
+depth
+depthless
+depths
+depurative
+deputation
+deputationize
+deputationizes
+deputations
+depute
+deputed
+deputes
+deputies
+deputing
+deputization
+deputize
+deputized
+deputizes
+deputizing
+deputy
+deputy's
+dequeue
+dequeued
+dequeues
+dequeuing
+deraign
+derail
+derailed
+derailing
+derailleur
+derailment
+derails
+derain
+derange
+deranged
+derangement
+deranges
+deranging
+derate
+derating
+deration
+derationalization
+derationalization's
+derationalizations
+derationalize
+derationalizes
+deratization
+deratization's
+deratizations
+derbent
+derbies
+derby
+Derbyshire
+derealization
+dereference
+dereferenced
+dereferencer
+dereferencers
+dereferences
+dereferencing
+deregister
+deregulate
+deregulationize
+deregulationizes
+deregulatory
+Derek
+Derek's
+derelict
+dereliction
+derelicts
+derestrict
+deride
+derided
+derider
+derides
+deriding
+deridingly
+derisible
+derision
+derisive
+derisively
+derisiveness
+derisory
+derivable
+derivate
+derivation
+derivation's
+derivational
+derivations
+derivative
+derivative's
+derivatively
+derivativeness
+derivatives
+derive
+derived
+deriver
+derives
+deriving
+derma
+dermal
+dermatitis
+dermatogen
+dermatoglyphics
+dermatoid
+dermatologic
+dermatological
+dermatologist
+dermatology
+dermatome
+dermatophyte
+dermatophytosis
+dermatoplasty
+dermatosis
+dermis
+dermoid
+Dernesch
+dero
+derogate
+derogated
+derogates
+derogating
+derogation
+derogative
+derogatorily
+derogatory
+derrick
+derricked
+derricking
+derrickman
+derrickmen
+derricks
+derriere
+derringer
+Derris
+derry
+derv
+dervish
+dervishes
+derwent
+derwentwater
+desai
+desalinate
+desalination
+desalinization
+desalinize
+desalting
+descant
+Descartes
+descend
+descendant
+descendant's
+descendants
+descended
+descendent
+descendent's
+descendents
+descender
+descenders
+descendible
+descending
+descends
+descension
+descent
+descent's
+descents
+deschamps
+deschool
+descrating
+describable
+describe
+described
+describer
+describers
+describes
+describing
+descried
+description
+description's
+descriptional
+descriptions
+descriptive
+descriptively
+descriptiveness
+descriptives
+descriptivism
+descriptor
+descriptor's
+descriptors
+descry
+descrying
+desecrate
+desecrated
+desecrater
+desecrates
+desecration
+desecrator
+desegregate
+desegregated
+desegregates
+desegregating
+desegregation
+deselect
+deselected
+deselecting
+deselection
+deselections
+deselects
+desensitization
+desensitization's
+desensitizations
+desensitize
+desensitized
+desensitizer
+desensitizers
+desensitizes
+desensitizing
+desert
+deserted
+deserter
+deserters
+desertic
+deserting
+desertion
+desertions
+deserts
+deserve
+deserved
+deservedly
+deservedness
+deserver
+deserves
+deserving
+deservingly
+deservings
+desex
+desexualization
+desexualize
+desexualized
+desexualizes
+desexualizing
+deshabille
+desicate
+desiccant
+desiccate
+desiccated
+desiccates
+desiccation
+desiccative
+desiccator
+desiderata
+desiderate
+desideration
+desiderative
+desideratum
+design
+designate
+designated
+designates
+designating
+designation
+designational
+designations
+designative
+designator
+designator's
+designators
+designatory
+designed
+designedly
+designee
+designer
+designer's
+designers
+designing
+designment
+designs
+desinence
+desirability
+desirable
+desirableness
+desirably
+desire
+desired
+desirer
+desires
+desiring
+desirous
+desirously
+desirousness
+desist
+desistance
+desk
+desk's
+deskill
+deskilled
+deskilling
+deskman
+desks
+desktop
+desman
+desmid
+desmoid
+Desmond
+desmoulins
+desolate
+desolated
+desolately
+desolateness
+desolater
+desolates
+desolating
+desolatingly
+desolation
+desolations
+desolator
+desorb
+desorbable
+desorbed
+desorption
+despair
+despaired
+despairer
+despairing
+despairingly
+despairs
+despatch
+despatched
+despenser
+desperado
+desperadoes
+desperate
+desperately
+desperateness
+desperation
+despicable
+despicableness
+despicably
+despiritualization
+despiritualize
+despise
+despised
+despisement
+despiser
+despises
+despising
+despite
+despited
+despiteful
+despitefully
+despitefulness
+despiteous
+despiteously
+despoil
+despoilation
+despoiled
+despoiler
+despoilers
+despoiling
+despoilment
+despoils
+despoliation
+despond
+despondence
+despondences
+despondency
+despondent
+despondently
+despot
+despot's
+despotic
+despotically
+despotism
+despotize
+despotizes
+despots
+despumate
+desquamate
+dessalines
+dessau
+dessert
+dessert's
+desserts
+dessertspoon
+dessiatine
+dessicate
+dessicator
+dessicators
+destabilization
+destabilize
+destabilized
+destabilizes
+destabilizing
+destalinize
+destalinized
+destalinizes
+destalinizing
+desterilize
+destigmatization
+destinate
+destination
+destination's
+destinations
+destine
+destined
+destinies
+destining
+destiny
+destiny's
+destitute
+destituteness
+destitution
+destroy
+destroyed
+destroyer
+destroyer's
+destroyers
+destroying
+destroys
+destruct
+destructibility
+destructible
+destruction
+destruction's
+destructionist
+destructions
+destructive
+destructively
+destructiveness
+destructivity
+destructor
+destructs
+desuetude
+desulfurization
+desulfurize
+desulphurization
+desulphurize
+desulphurized
+desulphurizes
+desulphurizing
+desultorily
+desultoriness
+desultory
+desynchronization
+desynchronize
+desynchronized
+desynchronizes
+desynchronizing
+detab
+detach
+detachability
+detachable
+detachably
+detached
+detachedly
+detachedness
+detacher
+detaches
+detaching
+detachment
+detachment's
+detachments
+detail
+detailed
+detailedly
+detailedness
+detailer
+detailing
+details
+detain
+detained
+detainee
+detainer
+detaining
+detainment
+detains
+detect
+detectability
+detectable
+detectably
+detectaphone
+detected
+detecting
+detection
+detection's
+detections
+detective
+detectives
+detector
+detector's
+detectors
+detects
+detent
+detente
+detention
+detentions
+deter
+deterge
+detergency
+detergent
+detergents
+deteriorate
+deteriorated
+deteriorates
+deteriorating
+deterioration
+deteriorative
+determent
+determents
+determinability
+determinable
+determinableness
+determinably
+determinacy
+determinant
+determinant's
+determinantal
+determinants
+determinate
+determinately
+determinateness
+determination
+determinations
+determinative
+determinatively
+determinativeness
+determinator
+determine
+determined
+determinedly
+determinedness
+determiner
+determiners
+determines
+determining
+determinism
+determinist
+deterministic
+deterministically
+deterred
+deterrence
+deterrent
+deterrently
+deterrents
+deterrer
+deterring
+deters
+detersive
+detersives
+detest
+detestable
+detestableness
+detestably
+detestation
+detestations
+detested
+detesting
+detests
+dethrone
+dethronement
+detinue
+detmold
+detonabilities
+detonability
+detonable
+detonatable
+detonate
+detonated
+detonates
+detonating
+detonation
+detonational
+detonative
+detonator
+detonator's
+detonators
+detour
+detoured
+detouring
+detours
+detoxicant
+detoxicants
+detoxicate
+detoxicated
+detoxicates
+detoxicating
+detoxication
+detoxicator
+detoxification
+detoxified
+detoxifies
+detoxify
+detoxifying
+detract
+detracted
+detracting
+detraction
+detractions
+detractive
+detractively
+detractor
+detractor's
+detractors
+detracts
+detrain
+detrained
+detraining
+detrainment
+detrains
+detrend
+detrended
+detrending
+detrends
+detribalization
+detribalization's
+detribalizations
+detribalize
+detribalized
+detribalizes
+detribalizing
+detriment
+detrimental
+detrimentally
+detriments
+detrition
+detritus
+Detroit
+detrude
+detruncate
+detumescence
+detumescences
+detumescent
+detune
+detuned
+detunes
+detuning
+deuce
+deuced
+deucedly
+deuces
+deucing
+deurne
+deus
+deuteragonist
+deuteranope
+deuterate
+deuterated
+deuterates
+deuterating
+deuteration
+deuterations
+deuteride
+deuterium
+deuteriums
+deuterogamy
+deuteron
+deuteron's
+Deuteronomist
+Deuteronomistic
+Deuteronomy
+deutoplasm
+deutsch
+Deutsch
+Deutschland
+Deutzia
+deva
+devaluate
+devaluation
+devaluations
+devalue
+devalued
+devalues
+devaluing
+devanagari
+devastate
+devastated
+devastates
+devastating
+devastatingly
+devastation
+devastations
+devastative
+devastator
+devastators
+develed
+develing
+develop
+developable
+developed
+developer
+developer's
+developers
+developing
+development
+development's
+developmental
+developmentally
+developments
+develops
+deventer
+deverbative
+Devereux
+devest
+devi
+deviance
+deviances
+deviancies
+deviancy
+deviant
+deviant's
+deviantly
+deviants
+deviate
+deviated
+deviates
+deviating
+deviation
+deviationism
+deviationist
+deviations
+deviator
+deviators
+device
+device's
+devices
+devil
+devil's
+deviled
+devilfish
+deviling
+devilish
+devilishly
+devilishness
+devilize
+devilizes
+devilkin
+devilment
+devilments
+devilry
+devils
+deviltry
+devious
+deviously
+deviousness
+devisability
+devisable
+devisal
+devise
+devised
+devisee
+deviser
+devises
+devising
+devisings
+devision
+devisions
+devisor
+devitalization
+devitalize
+devitalized
+devitalizes
+devitalizing
+devitrification
+devitrify
+devocalize
+devoice
+devoiced
+devoices
+devoicing
+devoid
+devoir
+devoirs
+devolatilization
+devolatilize
+devolatilized
+devolatilizes
+devolatilizing
+devolution
+devolutionary
+devolutionist
+devolve
+devolved
+devolves
+devolving
+Devon
+Devonian
+Devonshire
+devote
+devoted
+devotedly
+devotee
+devotee's
+devotees
+devotement
+devotes
+devoting
+devotion
+devotional
+devotionally
+devotions
+devour
+devoured
+devourer
+devouring
+devours
+devout
+devoutly
+devoutness
+dew
+dewan
+dewar
+dewars
+dewater
+dewatered
+dewaterer
+dewatering
+dewaters
+dewberry
+dewclaw
+dewdrop
+dewdrop's
+dewdrops
+dewed
+Dewey
+dewier
+dewily
+dewiness
+dewing
+Dewitt
+deworm
+dews
+dewsbury
+dewy
+Dexedrine
+dexedrine
+dexter
+dexterity
+dexterous
+dexterously
+dexterousness
+dextral
+dextrality
+dextrally
+dextran
+dextrin
+dextrine
+dextro
+dextroamphetamine
+dextroglucose
+dextrogyrate
+dextrorotation
+dextrorse
+dextrose
+dextrose's
+dextrous
+dey
+dezhnev
+DFL
+Dhabi
+dhahran
+dhak
+dharma
+dharna
+dhaulagiri
+dhobi
+dhole
+dhoti
+dhow
+diabase
+diabetes
+diabetic
+diabetics
+diablerie
+Diablo
+diabolic
+diabolical
+diabolically
+diabolicalness
+diabolism
+diabolist
+diabolization
+diabolize
+diabolized
+diabolizes
+diabolizing
+diabolo
+diacaustic
+diacetylmorphine
+diachronic
+diachronically
+diachronicness
+diachrony
+diacid
+diacidic
+diaconal
+diaconate
+diacritic
+diacritic's
+diacritical
+diacritically
+diacriticals
+diacritics
+diactinic
+diadelphous
+diadem
+diadic
+diadromous
+diaeresis
+diagenesis
+diageotropism
+diaghilev
+diagnometer
+diagnometer's
+diagnometers
+diagnosable
+diagnose
+diagnoseable
+diagnosed
+diagnoses
+diagnosing
+diagnosis
+diagnostic
+diagnostic's
+diagnostical
+diagnostically
+diagnostician
+diagnosticians
+diagnostics
+diagonal
+diagonalizable
+diagonalization
+diagonalize
+diagonalizes
+diagonally
+diagonals
+diagram
+diagram's
+diagramed
+diagraming
+diagrammable
+diagrammatic
+diagrammatical
+diagrammaticality
+diagrammatically
+diagrammed
+diagrammer
+diagrammer's
+diagrammers
+diagramming
+diagrams
+diagraph
+diakinesis
+diakinetic
+dial
+dial's
+dialect
+dialect's
+dialectal
+dialectally
+dialectic
+dialectical
+dialectically
+dialectician
+dialecticians
+dialecticize
+dialecticizes
+dialectics
+dialectological
+dialectologically
+dialectologist
+dialectology
+dialects
+dialed
+dialer
+dialers
+dialing
+dialings
+dialist
+dialists
+diallage
+dialog
+dialog's
+dialogic
+dialogical
+dialogically
+dialogism
+dialogist
+dialogistic
+dialogs
+dialogue
+dialogue's
+dialogues
+dials
+dialup
+dialup's
+dialups
+dialysis
+dialytic
+dialyzabilities
+dialyzability
+dialyzability's
+dialyzable
+dialyzable's
+dialyzables
+dialyze
+dialyzed
+dialyzer
+dialyzer's
+dialyzers
+dialyzes
+diamagnet
+diamagnetic
+diamagnetism
+diamagnets
+diamantine
+diamegnetism
+diameter
+diameter's
+diameters
+diametral
+diametric
+diametrical
+diametrically
+diamine
+diamond
+Diamond
+diamond's
+diamondback
+diamondize
+diamondizes
+diamonds
+Diana
+diandrous
+Diane
+dianetics
+Dianne
+dianne
+dianoetic
+dianoia
+diapason
+diapause
+diapausing
+diapedesis
+diapente
+diaper
+diaper's
+diapered
+diapering
+diapers
+diaphaneity
+diaphanous
+diaphanously
+diaphanousness
+diaphone
+diaphoresis
+diaphoretic
+diaphototropism
+diaphragm
+diaphragm's
+diaphragmatic
+diaphragmatically
+diaphragmic
+diaphragms
+diaphysis
+diapir
+diapositive
+diarch
+diarchy
+diaries
+diarist
+diarrhea
+diarrhea's
+diarrheal
+diarrheas
+diarrheic
+diarrhetic
+diary
+diary's
+dias
+diascope
+diaspora
+diaspore
+diastalsis
+diastase
+diastasis
+diastema
+diastole
+diastolic
+diastrophic
+diastrophically
+diastrophism
+diastyle
+diatessaron
+diathermancy
+diathermic
+diathermy
+diathesis
+diathetic
+diation
+diatom
+diatomaceous
+diatomic
+diatomite
+diatoms
+diatonic
+diatonically
+diatribe
+diatribe's
+diatribes
+diatropic
+diatropism
+diatropisms
+diazine
+diazo
+diazole
+diazomethane
+diazonium
+dibasic
+dibble
+dibbuk
+dibranchiate
+dibromide
+dibs
+dicarbonyl
+dicarboxylic
+dicast
+dice
+dicephalous
+dicer
+dices
+dicey
+dichasium
+dichlamydeous
+dichloride
+dichloroethanol
+dichondra
+dichotic
+dichotically
+dichotomies
+dichotomist
+dichotomization
+dichotomize
+dichotomized
+dichotomizes
+dichotomizing
+dichotomous
+dichotomously
+dichotomousness
+dichotomy
+dichroic
+dichroism
+dichroitic
+dichromat
+dichromate
+dichromatic
+dichromaticism
+dichromatism
+dichromats
+dichromic
+dichroscope
+dicier
+dicing
+dick
+Dick's
+dickcissel
+dickens
+dicker
+dickered
+dickering
+dickers
+Dickerson
+Dickerson's
+dickey
+Dickinson
+dicks
+Dickson
+dicky
+diclinous
+dicotyledon
+dicta
+Dictaphone
+dictate
+dictated
+dictates
+dictating
+dictation
+dictations
+dictator
+dictator's
+dictatorial
+dictatorially
+dictatorialness
+dictators
+dictatorship
+dictatorships
+diction
+dictionally
+dictionaries
+dictionary
+dictionary's
+dictions
+Dictograph
+dictum
+dictum's
+dictums
+dicuss
+dicyclic
+dicynodont
+did
+Didache
+didact
+didactic
+didactical
+didactically
+didacticism
+didactics
+diddle
+diddled
+diddler
+diddling
+diderot
+didgeridoo
+didn't
+Dido
+Dido's
+didymium
+didymous
+didynamous
+die
+dieback
+Diebold
+Diebold's
+diecious
+died
+diefenbaker
+Diego
+diehard
+diehards
+dieing
+diel
+dieldrin
+dielectric
+dielectric's
+dielectrics
+diem
+dien
+diencephalon
+dieppe
+dieresis
+dies
+diesel
+dieselization
+dieselization's
+dieselizations
+dieselize
+dieselizes
+diesels
+diesis
+Dieskau
+diestock
+diestrus
+diet
+dietaries
+dietarily
+dietary
+dieter
+dieters
+dietetic
+dietetically
+dietetics
+diethylaminoethyl
+diethylstilbestrol
+dietician
+dieticians
+dietitian
+dietitian's
+dietitians
+Dietrich
+diets
+diety
+Dietz
+dieu
+dieux
+diffeomorphic
+diffeomorphism
+differ
+differed
+difference
+difference's
+differenced
+differences
+differencing
+different
+differentia
+differentiability
+differentiable
+differential
+differential's
+differentialize
+differentializes
+differentially
+differentials
+differentiate
+differentiated
+differentiates
+differentiating
+differentiation
+differentiations
+differentiator
+differentiators
+differently
+differentness
+differer
+differers
+differing
+differs
+difficile
+difficult
+difficulties
+difficultly
+difficulty
+difficulty's
+diffidence
+diffident
+diffidently
+diffract
+diffracted
+diffracting
+diffraction
+diffractions
+diffractometer
+diffractometer's
+diffractometers
+diffracts
+diffuse
+diffused
+diffusely
+diffuseness
+diffuser
+diffusers
+diffuses
+diffusible
+diffusing
+diffusion
+diffusional
+diffusions
+diffusive
+diffusively
+diffusiveness
+diffusivity
+difluoride
+dig
+digamma
+digamy
+digenesis
+digenetic
+digest
+digestant
+digested
+digester
+digestibility
+digestible
+digesting
+digestion
+digestions
+digestive
+digestively
+digestiveness
+digests
+digged
+digger
+digger's
+diggers
+digging
+diggings
+dight
+digit
+digit's
+digital
+digitalin
+digitalis
+digitalism
+digitalization
+digitalization's
+digitalizations
+digitalize
+digitalized
+digitalizes
+digitalizing
+digitally
+digitate
+digitated
+digitately
+digitation
+digitiform
+digitigrade
+digitization
+digitize
+digitized
+digitizer
+digitizer's
+digitizers
+digitizes
+digitizing
+digitonin
+digitoxin
+digitron
+digits
+dignified
+dignify
+dignitaries
+dignitary
+dignities
+dignity
+digram
+digress
+digressed
+digresses
+digressing
+digression
+digression's
+digressional
+digressionary
+digressions
+digressive
+digressively
+digressiveness
+digs
+dihedral
+dihybrid
+dihydric
+dihydrofolate
+dihydroxy
+Dijkstra
+Dijkstra's
+Dijon
+dijon
+dike
+dike's
+diker
+dikes
+diking
+dikkop
+diktat
+dilapidate
+dilapidated
+dilapidates
+dilapidating
+dilapidation
+dilapidator
+dilatability
+dilatable
+dilatancy
+dilatant
+dilatation
+dilatational
+dilate
+dilated
+dilatedly
+dilatedness
+dilates
+dilating
+dilation
+dilative
+dilatometer
+dilatometer's
+dilatometers
+dilatometric
+dilatometry
+dilator
+dilatorily
+dilatoriness
+dilatory
+dildo
+dildos
+dilemma
+dilemma's
+dilemmas
+dilemmatic
+dilemmatical
+dilettante
+dilettantes
+dilettanti
+dilettantish
+dilettantism
+dilettantist
+diligence
+diligences
+diligent
+diligently
+diligentness
+dilithium
+dill
+dillinger
+Dillon
+dilly
+dillydally
+dilogarithm
+diluent
+dilute
+diluted
+dilutely
+diluteness
+diluter
+dilutes
+diluting
+dilution
+dilutions
+dilutive
+dilutor
+diluvial
+dim
+dimaggio
+DiMaggio
+dimashq
+dime
+dime's
+dimenhydrinate
+dimension
+dimensional
+dimensionality
+dimensionalization
+dimensionalize
+dimensionalized
+dimensionalizes
+dimensionalizing
+dimensionally
+dimensioned
+dimensioning
+dimensionless
+dimensions
+dimer
+dimercaprol
+dimeric
+dimerism
+dimerization
+dimerization's
+dimerizations
+dimerize
+dimerized
+dimerizes
+dimerizing
+dimerous
+dimers
+dimes
+dimeter
+dimeter's
+dimeters
+dimethoxymethane
+dimethyl
+dimethylformamide
+dimethylglyoxime
+dimethylpropane
+dimethylsulphoxide
+dimetric
+diminish
+diminishable
+diminished
+diminishes
+diminishing
+diminishment
+diminuendo
+diminuendo's
+diminuendos
+diminution
+diminutional
+diminutive
+diminutively
+diminutiveness
+diminutivize
+diminutivizes
+dimissory
+Dimitrovo
+dimity
+dimly
+dimmable
+dimmed
+dimmer
+dimmer's
+dimmers
+dimmest
+dimming
+dimness
+dimorph
+dimorphic
+dimorphism
+dimorphous
+dimout
+dimple
+dimpled
+dimples
+dimpling
+dimply
+dims
+dimwit
+dimwits
+dimyristoyl
+din
+Dinah
+dinar
+Dinaric
+dine
+dined
+diner
+dineric
+diners
+dines
+Dinesen
+dinette
+ding
+Dingaan
+dingbat
+dingbats
+dingdong
+dinge
+dinghies
+dinghy
+dingier
+dingily
+dinginess
+dingle
+dingo
+dingy
+dining
+dinitrobenzene
+dinitrogen
+dink
+Dinka
+dinkey
+dinkum
+dinky
+dinner
+dinner's
+dinnerless
+dinners
+dinnertime
+dinnerware
+dinning
+Dinnington
+Dinoceras
+dinoflagellate
+dinosaur
+dinosaurian
+dinosauric
+dinosaurs
+dinothere
+dint
+dio
+diocesan
+diocese
+Diocletian
+diode
+diode's
+diodes
+diodorus
+dioestrus
+diogenes
+Diogenes
+diol
+diomede
+diomedes
+dion
+Dion
+Dione
+Dionysia
+Dionysiac
+Dionysian
+dionysius
+Dionysus
+Diophantine
+diophantus
+diopside
+dioptase
+diopter
+dioptometer
+dioptometer's
+dioptometers
+dioptometry
+dioptric
+dioptrics
+dior
+diorama
+dioramas
+dioramic
+diorite
+Dioscuri
+dioxalate
+dioxan
+dioxide
+dioxides
+dip
+dipeptide
+dipetalous
+diphase
+diphasic
+diphenyl
+diphenylamine
+diphenylhydantoin
+diphosgene
+diphtheria
+diphtherial
+diphtherian
+diphtheritic
+diphtheroid
+diphthong
+diphthongal
+diphthongization
+diphthongization's
+diphthongizations
+diphthongize
+diphthongizes
+diphthongs
+diphyletic
+diphyllous
+diphyodont
+diplegia
+diplex
+diploblastic
+diplocardiac
+diplococcus
+Diplodocus
+diploid
+diploid's
+diploids
+diploidy
+diploma
+diploma's
+diplomacy
+diplomas
+diplomat
+diplomat's
+diplomate
+diplomatic
+diplomatically
+diplomatics
+diplomatist
+diplomatize
+diplomatizes
+diplomats
+diplont
+diplopia
+diplopod
+diplosis
+diplostemonous
+dipnoan
+dipod
+dipodic
+dipody
+dipolar
+dipole
+dipole's
+dipoles
+dipped
+dipper
+dipper's
+dipperful
+dippers
+dipping
+dippings
+dippy
+dipropellant
+diprotodont
+dips
+dipsomania
+dipsomaniac
+dipsomaniacal
+dipstick
+dipteral
+dipteran
+dipterocarpaceous
+dipterous
+diptych
+Dirac
+dire
+direct
+directed
+directing
+direction
+direction's
+directional
+directionality
+directionally
+directionless
+directions
+directive
+directive's
+directives
+directivity
+directly
+directness
+director
+director's
+directorate
+directorial
+directories
+directors
+directorship
+directory
+directory's
+directrices
+directrix
+directs
+direful
+direfully
+direly
+direness
+direr
+direst
+dirge
+dirge's
+dirged
+dirges
+dirging
+Dirham
+Dirichlet
+dirigible
+dirigibles
+diriment
+dirk
+dirndl
+dirt
+dirt's
+dirtied
+dirtier
+dirties
+dirtiest
+dirtily
+dirtiness
+dirts
+dirty
+dirtying
+disabilities
+disability
+disability's
+disable
+disabled
+disablement
+disabler
+disablers
+disables
+disabling
+disabuse
+disaccharide
+disaccharides
+disaccord
+disaccredit
+disaccustom
+disadvantage
+disadvantage's
+disadvantaged
+disadvantagedness
+disadvantageous
+disadvantageously
+disadvantageousness
+disadvantages
+disadvantaging
+disaffect
+disaffected
+disaffectedly
+disaffectedness
+disaffection
+disaffiliate
+disaffiliated
+disaffiliates
+disaffiliating
+disaffiliation
+disaffirm
+disaffirmance
+disaffirmation
+disafforest
+disaggregate
+disaggregated
+disaggregating
+disaggregation
+disaggregative
+disagree
+disagreeability
+disagreeable
+disagreeableness
+disagreeably
+disagreed
+disagreeing
+disagreement
+disagreement's
+disagreements
+disagrees
+disallow
+disallowance
+disallowed
+disallowing
+disallows
+disambiguate
+disambiguated
+disambiguates
+disambiguating
+disambiguation
+disambiguations
+disangularize
+disangularizes
+disannul
+disappear
+disappearance
+disappearance's
+disappearances
+disappeared
+disappearing
+disappears
+disappoint
+disappointed
+disappointedly
+disappointing
+disappointingly
+disappointment
+disappointment's
+disappointments
+disappoints
+disapprobation
+disapproval
+disapprovative
+disapprove
+disapproved
+disapprover
+disapproves
+disapproving
+disapprovingly
+disarm
+disarmament
+disarmed
+disarmer
+disarmers
+disarming
+disarmingly
+disarms
+disarrange
+disarranged
+disarrangement
+disarranges
+disarray
+disarrays
+disarticulate
+disarticulated
+disarticulation
+disassemble
+disassembled
+disassembler
+disassembler's
+disassemblers
+disassembles
+disassembling
+disassembly
+disassociate
+disassociated
+disassociates
+disassociating
+disassociation
+disaster
+disaster's
+disasters
+disastrous
+disastrously
+disauthorize
+disauthorizes
+disavow
+disavowable
+disavowal
+disavowals
+disavowed
+disavowing
+disavows
+disband
+disbanded
+disbanding
+disbandment
+disbands
+disbar
+disbarment
+disbars
+disbelief
+disbelieve
+disbelieved
+disbeliever
+disbelievers
+disbelieves
+disbelieving
+disboweled
+disboweling
+disbranch
+disbud
+disburden
+disburdenment
+disburse
+disbursed
+disbursement
+disbursement's
+disbursements
+disburser
+disburses
+disbursing
+disc
+disc's
+discalced
+discanonization
+discanonization's
+discanonizations
+discanonize
+discanonizes
+discard
+discardable
+discarded
+discarder
+discarding
+discards
+discern
+discernable
+discerned
+discerner
+discernibility
+discernible
+discernibly
+discerning
+discerningly
+discernment
+discerns
+discharge
+dischargeable
+discharged
+dischargee
+discharger
+discharges
+discharging
+disciform
+disciple
+disciple's
+disciples
+discipleship
+disciplinable
+disciplinal
+disciplinant
+disciplinarian
+disciplinarianism
+disciplinarily
+disciplinarity
+disciplinary
+discipline
+disciplined
+discipliner
+disciplines
+disciplining
+disclaim
+disclaimed
+disclaimer
+disclaimers
+disclaiming
+disclaims
+disclamation
+disclimax
+disclose
+disclosed
+discloser
+discloses
+disclosing
+disclosure
+disclosure's
+disclosures
+disco
+disco's
+discobolus
+discographer
+discographic
+discographical
+discographically
+discography
+discoid
+discoidal
+discoidin
+discolor
+discolor's
+discoloration
+discolored
+discolored's
+discoloredness
+discoloreds
+discoloring
+discolorization
+discolorization's
+discolorizations
+discolorment
+discolorment's
+discolorments
+discolors
+discombobulate
+discomfit
+discomfited
+discomfiting
+discomfits
+discomfiture
+discomfitures
+discomfort
+discomfortable
+discomfortably
+discomforting
+discomfortingly
+discommend
+discommendable
+discommendation
+discommode
+discommodes
+discommoding
+discommodity
+discommon
+discompose
+discomposed
+discomposedly
+discomposure
+disconcert
+disconcerted
+disconcerting
+disconcertingly
+disconcerts
+disconfirm
+disconfirmation
+disconform
+disconformable
+disconformity
+disconnect
+disconnected
+disconnectedly
+disconnectedness
+disconnecter
+disconnecting
+disconnection
+disconnections
+disconnects
+disconsider
+disconsolate
+disconsolately
+disconsolateness
+disconsolation
+discontent
+discontented
+discontentedly
+discontentment
+discontinuance
+discontinuation
+discontinue
+discontinued
+discontinues
+discontinuing
+discontinuities
+discontinuity
+discontinuity's
+discontinuous
+discontinuously
+discophile
+discord
+discordance
+discordances
+discordancy
+discordant
+discordantly
+discords
+discorporate
+discorporated
+discos
+discotheque
+discount
+discounted
+discountenance
+discounter
+discounting
+discounts
+discourage
+discourageable
+discouraged
+discouragement
+discourager
+discourages
+discouraging
+discouragingly
+discourse
+discourse's
+discoursed
+discourser
+discourses
+discoursing
+discourteous
+discourteously
+discourteousness
+discourtesy
+discover
+discoverable
+discovered
+discoverer
+discoverers
+discoveries
+discovering
+discovers
+discovert
+discovery
+discovery's
+discredit
+discreditable
+discreditably
+discredited
+discrediting
+discredits
+discreet
+discreetly
+discreetness
+discrepancies
+discrepancy
+discrepancy's
+discrepant
+discrepantly
+discrete
+discretely
+discreteness
+discretion
+discretionary
+discretions
+discretization
+discretize
+discriminability
+discriminable
+discriminably
+discriminant
+discriminate
+discriminated
+discriminates
+discriminating
+discriminatingly
+discrimination
+discriminational
+discriminations
+discriminative
+discriminator
+discriminatorily
+discriminators
+discriminatory
+discs
+discursive
+discursively
+discursiveness
+discus
+discuses
+discuss
+discussable
+discussant
+discussants
+discussed
+discusser
+discusses
+discussible
+discussing
+discussion
+discussion's
+discussions
+disdain
+disdainful
+disdainfully
+disdainfulness
+disdaining
+disdains
+disdenominationalize
+disdenominationalizes
+disdiplomatize
+disdiplomatizes
+disease
+diseased
+diseases
+diseasing
+disembark
+disembarkation
+disembarrass
+disembodied
+disembodiment
+disembody
+disembogue
+disembowel
+disemboweled
+disemboweling
+disembowelment
+disembowels
+disembroil
+disenable
+disenamor
+disenamor's
+disenamors
+disenchant
+disenchanter
+disenchanting
+disenchantingly
+disenchantment
+disencumber
+disencumbrance
+disendow
+disendower
+disendowment
+disenfranchise
+disenfranchised
+disenfranchisement
+disenfranchisement's
+disenfranchisements
+disenfranchiser
+disenfranchises
+disenfranchising
+disengage
+disengaged
+disengagement
+disengages
+disengaging
+disentail
+disentangle
+disentangled
+disentanglement
+disentangler
+disentangles
+disentangling
+disenthrall
+disenthralled
+disenthralling
+disenthralls
+disentitle
+disentomb
+disentwine
+disepalous
+disequilibrate
+disequilibration
+disequilibrium
+disestablish
+disestablished
+disestablishment
+disestablishmentarian
+disesteem
+disestimation
+disfavor
+disfavored
+disfavorer
+disfavorer's
+disfavorers
+disfavoring
+disfavors
+disfeature
+disfeaturement
+disfigure
+disfigured
+disfigurement
+disfigurements
+disfigures
+disfiguring
+disforest
+disfranchise
+disfranchised
+disfranchisement
+disfranchises
+disfranchising
+disfrock
+disfunction
+disfurnish
+disfurnishment
+disgorge
+disgorgement
+disgorger
+disgrace
+disgraced
+disgraceful
+disgracefully
+disgracefulness
+disgracer
+disgraces
+disgracing
+disgruntle
+disgruntled
+disgruntlement
+disgruntles
+disgruntling
+disguise
+disguised
+disguisedly
+disguisement
+disguiser
+disguises
+disguising
+disgust
+disgusted
+disgustedly
+disgustful
+disgustfully
+disgusting
+disgustingly
+disgusts
+dish
+dishabille
+disharmonic
+disharmonious
+disharmonize
+disharmonizes
+disharmony
+dishcloth
+dishearten
+disheartening
+dishearteningly
+disheartenment
+disheartenments
+dished
+dishes
+dishevel
+disheveled
+disheveler
+disheveling
+dishevels
+dishing
+dishonest
+dishonestly
+dishonesty
+dishonor
+dishonorable
+dishonorable's
+dishonorableness
+dishonorables
+dishonorablies
+dishonorably
+dishonored
+dishonorer
+dishonorer's
+dishonorers
+dishonoring
+dishonors
+dishpan
+dishrack
+dishracks
+dishtowel
+dishumanize
+dishumanizes
+dishumor
+dishumored
+dishumors
+dishwasher
+dishwashers
+dishwater
+dishy
+disillusion
+disillusioned
+disillusioning
+disillusionize
+disillusionizer
+disillusionizers
+disillusionizes
+disillusionment
+disillusionment's
+disillusionments
+disincentive
+disincentives
+disinclination
+disincline
+disinclined
+disinclines
+disinclining
+disincorporated
+disindividualize
+disindividualizes
+disinfect
+disinfectant
+disinfectants
+disinfected
+disinfecting
+disinfection
+disinfects
+disinfest
+disinfestant
+disinfestation
+disinfested
+disinfesting
+disinfests
+disinflation
+disinflationary
+disingenuous
+disingenuously
+disingenuousness
+disinherit
+disinheritance
+disinherited
+disinheriting
+disinherits
+disinhibition
+disinhibitory
+disinsectization
+disintegrate
+disintegrated
+disintegrates
+disintegrating
+disintegration
+disintegrations
+disintegrative
+disintegrator
+disintegrators
+disinter
+disintered
+disinterest
+disinterested
+disinterestedly
+disinterestedness
+disintering
+disinterment
+disinterred
+disinters
+disintoxication
+disinvest
+disinvestment
+disject
+disjoin
+disjoint
+disjointed
+disjointedly
+disjointedness
+disjointly
+disjointness
+disjunct
+disjunction
+disjunctions
+disjunctive
+disjunctively
+disjunctor
+disjunctors
+disjuncts
+disjuncture
+disk
+disk's
+disked
+diskette
+diskettes
+disking
+disklike
+disks
+dislicense
+dislicensed
+dislicenser
+dislicenses
+dislicensing
+dislikable
+dislikably
+dislike
+dislikeable
+disliked
+disliker
+dislikes
+disliking
+dislimn
+dislocate
+dislocated
+dislocates
+dislocating
+dislocation
+dislocations
+dislodge
+dislodged
+dislodgement
+dislodges
+dislodging
+disloyal
+disloyally
+disloyalty
+dismal
+dismalize
+dismalizes
+dismally
+dismalness
+dismantle
+dismantled
+dismantlement
+dismantles
+dismantling
+dismast
+dismay
+dismayed
+dismaying
+dismayingly
+dismays
+dismember
+dismembered
+dismembering
+dismemberment
+dismiss
+dismissal
+dismissal's
+dismissals
+dismissed
+dismisser
+dismissers
+dismisses
+dismissing
+dismission
+dismissive
+dismount
+dismounted
+dismounting
+dismounts
+disnaturalization
+disnaturalization's
+disnaturalizations
+disnaturalize
+disnaturalizes
+Disney
+Disneyland
+disobedience
+disobedient
+disobediently
+disobey
+disobeyed
+disobeyer
+disobeying
+disobeys
+disoblige
+disobliger
+disoblingingly
+disoperation
+disorder
+disordered
+disorderedly
+disorderedness
+disorderliness
+disorderly
+disorders
+disorganization
+disorganization's
+disorganizations
+disorganize
+disorganized
+disorganizer
+disorganizers
+disorganizes
+disorganizing
+disorient
+disorientation
+disoriented
+disown
+disowned
+disowning
+disownment
+disowns
+disozonize
+disozonizes
+dispapalize
+dispapalizes
+disparage
+disparaged
+disparagement
+disparager
+disparages
+disparaging
+disparagingly
+disparate
+disparately
+disparateness
+disparities
+disparity
+disparity's
+dispart
+dispassion
+dispassionate
+dispassionately
+dispassionateness
+dispatch
+dispatched
+dispatcher
+dispatchers
+dispatches
+dispatching
+dispauperize
+dispauperizes
+dispel
+dispelled
+dispelling
+dispels
+dispend
+dispensability
+dispensable
+dispensary
+dispensate
+dispensation
+dispensational
+dispensatory
+dispense
+dispensed
+dispenser
+dispensers
+dispenses
+dispensing
+dispeople
+dispermous
+dispersability
+dispersable
+dispersal
+dispersant
+disperse
+dispersed
+dispersedly
+dispersement
+disperser
+disperses
+dispersible
+dispersing
+dispersion
+dispersions
+dispersity
+dispersive
+dispersively
+dispersiveness
+dispersoid
+dispersonalize
+dispersonalizes
+dispirit
+dispirited
+dispiritedly
+dispiritedness
+dispiriting
+dispirits
+dispiteous
+displace
+displaceable
+displaced
+displacement
+displacement's
+displacements
+displacer
+displaces
+displacing
+displant
+display
+displayable
+displayed
+displayer
+displaying
+displays
+displease
+displeased
+displeasedly
+displeases
+displeasing
+displeasure
+displode
+disploded
+displodes
+disploding
+displosion
+dispopularize
+dispopularizes
+disport
+disportment
+disporves
+disposability
+disposable
+disposal
+disposal's
+disposals
+dispose
+disposed
+disposer
+disposes
+disposing
+disposition
+disposition's
+dispositional
+dispositions
+dispositive
+dispossess
+dispossessed
+dispossesses
+dispossessing
+dispossession
+dispossessor
+disposure
+disposures
+dispraise
+dispraiser
+dispraisingly
+dispread
+disprize
+disproof
+disproportion
+disproportional
+disproportionate
+disproportionately
+disproportionation
+disprovable
+disprove
+disproved
+disproven
+disproves
+disproving
+disputable
+disputant
+disputation
+disputatious
+disputatiously
+disputatiousness
+dispute
+disputed
+disputer
+disputers
+disputes
+disputing
+disqualification
+disqualified
+disqualifies
+disqualify
+disqualifying
+disquantity
+disquiet
+disquieting
+disquietingly
+disquietly
+disquietude
+disquisition
+Disraeli
+disraeli
+disrate
+disrealize
+disrealizes
+disregard
+disregarded
+disregardful
+disregarding
+disregards
+disrelate
+disrelated
+disrelation
+disrelish
+disremember
+disremembrance
+disrepair
+disreputability
+disreputable
+disreputableness
+disreputably
+disrepute
+disrespect
+disrespectability
+disrespectable
+disrespectful
+disrespectfully
+disrespectfulness
+disrobe
+disrupt
+disrupted
+disrupter
+disrupting
+disruption
+disruption's
+disruptions
+disruptive
+disruptively
+disruptiveness
+disrupts
+dissappear
+dissatisfaction
+dissatisfaction's
+dissatisfactions
+dissatisfactory
+dissatisfied
+dissatisfies
+dissatisfy
+dissatisfying
+disscepter
+disscepter's
+disscepters
+dissect
+dissected
+dissecting
+dissection
+dissector
+dissects
+disseize
+disseized
+disseizes
+disseizin
+disseizing
+disseizins
+disseizor
+disseizors
+dissemble
+dissembled
+dissembler
+dissembling
+disseminate
+disseminated
+disseminates
+disseminating
+dissemination
+disseminator
+disseminators
+disseminule
+dissension
+dissension's
+dissensions
+dissensualize
+dissensualizes
+dissent
+dissented
+dissenter
+dissenters
+dissentient
+dissenting
+dissention
+dissentious
+dissents
+dissepiment
+dissert
+dissertate
+dissertation
+dissertation's
+dissertations
+dissertator
+disserve
+disservice
+dissever
+disseverance
+disseverment
+dissidence
+dissident
+dissident's
+dissidents
+dissimilar
+dissimilarities
+dissimilarity
+dissimilarity's
+dissimilarly
+dissimilate
+dissimilated
+dissimilates
+dissimilating
+dissimilation
+dissimilative
+dissimilatory
+dissimilitude
+dissimulate
+dissimulation
+dissimulator
+dissipate
+dissipated
+dissipatedly
+dissipatedness
+dissipater
+dissipates
+dissipating
+dissipation
+dissipations
+dissipative
+dissociability
+dissociable
+dissocial
+dissocialize
+dissociant
+dissociate
+dissociated
+dissociates
+dissociating
+dissociation
+dissociative
+dissolubility
+dissoluble
+dissolute
+dissolutely
+dissoluteness
+dissolution
+dissolution's
+dissolutions
+dissolvable
+dissolve
+dissolved
+dissolvent
+dissolver
+dissolves
+dissolving
+dissonance
+dissonance's
+dissonances
+dissonant
+dissonantly
+dissuade
+dissuaded
+dissuader
+dissuades
+dissuading
+dissuasion
+dissuasive
+dissuasively
+dissuasiveness
+dissyllable
+dissymmetric
+dissymmetry
+dissympathize
+dissympathizes
+distaff
+distaffs
+distal
+distally
+distance
+distanced
+distances
+distancing
+distant
+distantly
+distantness
+distaste
+distasteful
+distastefully
+distastefulness
+distastes
+distemper
+distemperate
+distemperature
+distend
+distended
+distensibility
+distensible
+distension
+distent
+distention
+distich
+distichous
+distill
+distillate
+distillates
+distillation
+distillations
+distilled
+distiller
+distilleries
+distillers
+distillery
+distilling
+distills
+distinct
+distinction
+distinction's
+distinctions
+distinctive
+distinctively
+distinctiveness
+distinctly
+distinctness
+distinguish
+distinguishability
+distinguishable
+distinguishably
+distinguished
+distinguisher
+distinguishes
+distinguishing
+distort
+distortable
+distorted
+distorter
+distorting
+distortion
+distortion's
+distortional
+distortions
+distorts
+distract
+distracted
+distractedly
+distractibility
+distractible
+distracting
+distractingly
+distraction
+distraction's
+distractions
+distractive
+distracts
+distrain
+distrainable
+distrainee
+distrainer
+distrainor
+distraint
+distrait
+distraught
+distraughtly
+distress
+distressed
+distresses
+distressful
+distressfully
+distressfulness
+distressing
+distressingly
+distributary
+distribute
+distributed
+distributee
+distributer
+distributes
+distributing
+distribution
+distribution's
+distributional
+distributions
+distributive
+distributively
+distributiveness
+distributivity
+distributor
+distributor's
+distributors
+distributorship
+district
+district's
+districted
+districting
+districts
+distringas
+distrito
+distrubuted
+distrust
+distrusted
+distrustful
+distrustfully
+distrustfulness
+distrusts
+disturb
+disturbance
+disturbance's
+disturbances
+disturbed
+disturber
+disturbing
+disturbingly
+disturbs
+disubstituted
+disulfide
+disulfiram
+disulphate
+disulphide
+disulphuric
+disunion
+disunionist
+disunite
+disunited
+disunity
+disuse
+disused
+disutility
+disutilize
+disutilizes
+disvalue
+disvalues
+disyllabic
+disyllable
+dita
+ditch
+ditch's
+ditched
+ditcher
+ditches
+ditching
+ditheism
+dither
+dithered
+ditherer
+dithering
+dithery
+dithionite
+dithionous
+dithyramb
+dithyrambic
+dittander
+dittany
+ditties
+ditto
+dittography
+dittos
+ditty
+Ditzel
+diu
+diuresis
+diuretic
+diurnal
+div
+diva
+divagate
+divagation
+divalent
+divan
+divan's
+divans
+divaricate
+divarication
+divaricator
+dive
+dived
+diver
+diverge
+diverged
+divergence
+divergence's
+divergences
+divergencies
+divergency
+divergent
+divergently
+diverges
+diverging
+divers
+diverse
+diversely
+diverseness
+diversification
+diversified
+diversifier
+diversifies
+diversiform
+diversify
+diversifying
+diversion
+diversionary
+diversionist
+diversions
+diversities
+diversity
+divert
+diverted
+diverticulitis
+diverticulosis
+diverticulum
+divertimento
+diverting
+divertissement
+divertissements
+diverts
+dives
+divest
+divested
+divesting
+divestiture
+divestment
+divests
+divi
+dividable
+divide
+divided
+dividend
+dividend's
+dividends
+divider
+dividers
+divides
+dividing
+divination
+divinatory
+divine
+divined
+divinely
+diviner
+divines
+diving
+divining
+divinities
+divinity
+divinity's
+divinization
+divinization's
+divinizations
+divinize
+divinized
+divinizes
+divinizing
+divinylbenzene
+divisibility
+divisible
+divisibly
+division
+division's
+divisional
+divisionism
+divisionist
+divisions
+divisive
+divisively
+divisiveness
+divisor
+divisor's
+divisors
+divorce
+divorced
+divorcee
+divorcees
+divorcement
+divorces
+divorcing
+divot
+divulgate
+divulge
+divulged
+divulgence
+divulges
+divulging
+divulsion
+divvied
+divvies
+divvy
+divvying
+Dixie
+Dixiecrats
+dixiecrats
+Dixieland
+Dixon
+Dixon's
+diyarbakir
+dizen
+dizequalise
+dizequalise's
+dizequaliser
+dizequalisers
+dizequalises
+dizorganisation
+dizorganise
+dizzied
+dizzier
+dizzily
+dizziness
+dizzy
+dizzying
+dizzyingly
+djailolo
+djaja
+djajapura
+Djakarta
+djambi
+djebel
+djerba
+Djibouti
+djinni
+djokjakarta
+DMA
+DMF
+Dmitri
+DNA
+Dneprodzerzhinsk
+Dnepropetrovsk
+Dnieper
+Dnieper's
+Dniester
+do
+doab
+doable
+dobbin
+Dobbs
+dobby
+doberman
+Doberman
+dobla
+dobro
+dobruja
+dobson
+dobsonfly
+doc
+Doc
+docent
+docetic
+Docetism
+docile
+docilely
+docility
+dock
+dockage
+docked
+docker
+docket
+docketed
+docketing
+dockets
+dockhand
+docking
+dockization
+dockization's
+dockizations
+dockize
+dockizes
+dockland
+docklands
+docks
+dockside
+dockworker
+dockyard
+doctor
+doctor's
+doctoral
+doctorate
+doctorate's
+doctorates
+doctored
+doctoring
+doctorization
+doctorization's
+doctorizations
+doctorize
+doctorizes
+doctorless
+doctors
+doctorship
+doctrinaire
+doctrinairism
+doctrinal
+doctrinally
+doctrine
+doctrine's
+doctrines
+doctrinization
+doctrinization's
+doctrinizations
+doctrinize
+doctrinizes
+document
+document's
+documental
+documentale
+documentalist
+documentarian
+documentaries
+documentarily
+documentarist
+documentary
+documentary's
+documentation
+documentation's
+documentational
+documentations
+documented
+documenter
+documenters
+documenting
+documentize
+documentizes
+documents
+DOD
+Dodd
+Dodd's
+dodder
+doddered
+dodderer
+doddering
+dodders
+doddery
+doddle
+dodecagon
+dodecahedra
+dodecahedral
+dodecahedron
+dodecanese
+dodecanoic
+dodecaphonic
+dodecasyllable
+dodecyl
+dodge
+dodged
+dodgem
+dodger
+dodgers
+dodgery
+dodges
+dodging
+Dodgson
+dodgy
+Dodington
+dodington
+dodo
+dodo's
+dodoma
+Dodona
+dodos
+Dodson
+Dodson's
+doe
+doek
+doenitz
+doer
+doers
+does
+Doese
+doeskin
+doesn't
+doff
+doffing
+doffs
+dog
+dog's
+dogbane
+dogberry
+dogcart
+dogcatcher
+doge
+dogface
+dogfight
+dogfights
+dogfish
+dogfishs
+dogged
+doggedly
+doggedness
+dogger
+doggerel
+doggery
+doggie
+doggier
+doggies
+dogging
+doggish
+doggishly
+doggishness
+doggo
+doggone
+doggoned
+doggoning
+doggy
+doghouse
+dogleg
+doglike
+dogma
+dogma's
+dogman
+dogmas
+dogmatic
+dogmatical
+dogmatically
+dogmaticalness
+dogmatics
+dogmatism
+dogmatist
+dogmatist's
+dogmatists
+dogmatization
+dogmatize
+dogmatizer
+dognaped
+dognaping
+dogs
+dogsbody
+dogtooth
+Dogtown
+dogtrot
+dogvane
+dogwatch
+dogwood
+dogy
+doh
+doha
+Doherty
+Doherty's
+Dohnanyi
+doilies
+doily
+doing
+doings
+doit
+doited
+dojo
+Dol
+dolabriform
+Dolan
+Dolan's
+dolby
+dolce
+doldrum
+doldrums
+dole
+doled
+doleful
+dolefully
+dolefulness
+dolerite
+doles
+dolesome
+dolichocephalic
+Dolichosaurus
+doline
+doling
+doll
+doll's
+dollar
+dollarbird
+dollarfish
+dollars
+dollfuss
+dollhouse
+dollied
+dollies
+dollish
+dollishly
+dollishness
+dollop
+dollop's
+dolloped
+dolloping
+dollops
+dolls
+dolly
+dolly's
+dollying
+dolman
+dolmas
+dolmen
+dolmetsch
+dolomite
+dolomites
+dolomitic
+dolomitization
+dolomitization's
+dolomitizations
+dolomitize
+dolomitizes
+dolor
+Dolores
+dolorimetry
+doloroso
+dolorous
+dolorously
+dolorousness
+dolphin
+dolphin's
+dolphins
+dolt
+doltish
+doltishly
+doltishness
+dom
+domain
+domain's
+domains
+dome
+domed
+Domenico
+Domenico's
+domes
+Domesday
+domestic
+domestically
+domesticate
+domesticated
+domesticates
+domesticating
+domestication
+domesticity
+domesticize
+domesticizes
+domett
+domical
+domicil
+domicile
+domiciled
+domiciliary
+domiciliate
+domiciliation
+dominance
+dominant
+dominantly
+dominate
+dominated
+dominates
+dominating
+domination
+dominations
+dominative
+dominator
+dominee
+domineer
+domineering
+domineeringly
+domineeringness
+doming
+Domingo
+Dominic
+Dominica
+dominical
+Dominican
+Dominicans
+Dominick
+Dominick's
+dominie
+dominion
+dominions
+Dominique
+Dominique's
+dominium
+domino
+dominoes
+Domitian
+don
+don't
+dona
+Donahue
+Donald
+Donald's
+Donaldson
+Donar
+donate
+donated
+donatello
+donates
+Donath
+donating
+donation
+donations
+Donatist
+donative
+donator
+donatus
+donau
+donbass
+Doncaster
+done
+Doneck
+Doneck's
+donee
+Donegal
+doneness
+Donetsk
+dong
+donga
+Dongola
+Donizetti
+donjon
+donkey
+donkey's
+donkeys
+Donna
+donne
+donned
+Donnelly
+donner
+donnert
+donning
+donnish
+donnishly
+donnishness
+donny
+donnybrook
+donor
+donors
+Donovan
+dons
+donut
+donuts
+doodad
+doodah
+doodle
+doodlebug
+doodled
+doodler
+doodles
+doodling
+doohickey
+Dooley
+Dooley's
+Doolittle
+doom
+doomed
+doomful
+doomfully
+dooming
+dooms
+doomsayer
+doomsday
+doomster
+door
+door's
+doorbell
+doorframe
+doorjamb
+doorkeep
+doorkeeper
+doorkeepers
+doorknob
+doorknobs
+doorless
+doorman
+doormat
+doormen
+doorn
+doornail
+doornik
+doorplate
+doorpost
+doors
+doorsill
+doorstep
+doorstep's
+doorsteps
+doorstop
+doorway
+doorway's
+doorways
+dooryard
+dopa
+dopant
+dope
+doped
+doper
+dopers
+dopes
+dopester
+dopey
+dopier
+dopiness
+doping
+doppelganger
+Dopper
+Doppler
+dopy
+Dor
+Dora
+Dora's
+Dorado
+Dorati
+Dorcas
+Dorchester
+dordogne
+dordrecht
+Doreen
+Doreen's
+Doria
+Doria's
+Dorian
+Doric
+Doric's
+Doricize
+Doricizes
+Doris
+Dorking
+dorm
+dormancy
+dormant
+dormer
+dormice
+dormie
+dormitories
+dormitory
+dormitory's
+dormobile
+dormouse
+dormouse's
+Dormoy
+dormy
+dornbirn
+dornick
+Doronicum
+Dorothea
+Dorothea's
+Dorothy
+dorp
+dorpat
+dorsad
+dorsal
+dorsally
+Dorset
+Dorset's
+dorsiferous
+dorsigrade
+dorsiventral
+dorsoventral
+dorsum
+dort
+Dortmund
+Dortmund's
+dorty
+dory
+DOS
+dosage
+dosages
+dose
+dosed
+doses
+dosimeter
+dosimeter's
+dosimeters
+dosimetric
+dosimetry
+dosing
+doss
+dossal
+dosser
+dosshouse
+dossier
+dossiers
+dost
+Dostoevsky
+dot
+dot's
+dotage
+dotal
+dotard
+dotation
+dote
+doted
+doter
+dotes
+doth
+doting
+dotingly
+dots
+dotted
+dotter
+dotterel
+dottier
+dottily
+dottiness
+dotting
+dottle
+dotty
+douai
+douala
+douay
+double
+doubled
+Doubleday
+doubleheader
+doubleness
+doubler
+doublers
+doubles
+doublespeak
+doublet
+doublet's
+doublethink
+doubleton
+doubletree
+doublets
+doubling
+doubloon
+doublure
+doubly
+doubs
+doubt
+doubtable
+doubted
+doubter
+doubters
+doubtful
+doubtfully
+doubtfulness
+doubting
+doubtingly
+doubtless
+doubtlessly
+doubtlessness
+doubts
+douc
+douce
+douceur
+douche
+Doug
+dough
+doughboy
+Dougherty
+doughface
+doughier
+doughlike
+doughnut
+doughnut's
+doughnuts
+doughnuttery
+doughtier
+doughtily
+doughtiness
+doughty
+doughy
+Douglas
+Douglass
+doukhobors
+doum
+dour
+doura
+dourine
+dourly
+dourness
+douro
+douroucouli
+douse
+doused
+douser
+douses
+dousing
+dovap
+dove
+dovecot
+dovecote
+dovekie
+dover
+doves
+dovetail
+dovish
+dovishness
+Dow
+dowable
+dowager
+dowagers
+dowdier
+dowdies
+dowdily
+dowdiness
+dowding
+dowdy
+dowdyish
+dowel
+doweled
+doweler
+doweling
+dower
+dowery
+dowitcher
+Dowland
+Dowling
+Dowling's
+down
+downbeat
+downcast
+downcome
+downcomer
+downcourt
+downdraft
+downed
+downer
+downers
+Downey
+downfall
+downfallen
+downgrade
+downgraded
+downgrades
+downgrading
+downhaul
+downhearted
+downheartedly
+downheartedness
+downhill
+downhole
+downier
+downing
+download
+downloaded
+downloading
+downloads
+downpatrick
+downpipe
+downplay
+downplayed
+downplaying
+downplays
+downpour
+downrange
+downright
+downrightly
+downrightness
+downriver
+downs
+downshift
+downside
+downslope
+downspout
+downstage
+downstairs
+downstate
+downstater
+downstream
+downstroke
+downswing
+downswings
+downthrow
+downtime
+downtown
+downtowner
+downtowns
+downtrend
+downtrodden
+downturn
+downturns
+downward
+downwardly
+downwardness
+downwards
+downwash
+downweight
+downweighted
+downweighting
+downwell
+downwind
+downy
+dowries
+dowry
+dowsabel
+dowse
+dowser
+dowses
+dowsing
+Dowson
+doxastic
+doxographer
+doxology
+doxy
+doyen
+Doyle
+doyley
+doze
+dozed
+dozen
+dozens
+dozenth
+dozer
+dozes
+dozier
+doziness
+dozing
+dozy
+DPP
+Dr
+drab
+drabber
+drabbest
+drabbet
+drabbing
+drabble
+drabbled
+drabbling
+drably
+drabness
+drabs
+Dracaena
+Draco
+Draco's
+Draconian
+Draconic
+draff
+draft
+draft's
+draftable
+draftboard
+drafted
+draftee
+draftees
+drafter
+drafters
+draftier
+draftily
+draftiness
+drafting
+drafts
+draftsman
+draftsmanship
+draftsmen
+draftsperson
+drafty
+drag
+dragged
+dragger
+draggier
+dragging
+draggingly
+draggle
+draggled
+draggletailed
+draggling
+draggy
+draghound
+dragline
+dragnet
+dragoman
+dragon
+dragon's
+dragonet
+dragonfly
+dragonhead
+dragonish
+dragonize
+dragonizes
+dragonnade
+dragonroot
+dragons
+dragoon
+dragooned
+dragoons
+dragrope
+drags
+dragster
+drail
+drain
+drainage
+drainages
+drained
+drainer
+drainers
+draining
+drainpipe
+drainpipes
+drains
+drake
+Drakensberg
+dram
+drama
+drama's
+dramalogue
+Dramamine
+dramamine
+dramas
+dramatic
+dramatical
+dramatically
+dramatics
+dramatis
+dramatist
+dramatist's
+dramatists
+dramatizable
+dramatizable's
+dramatizables
+dramatization
+dramatization's
+dramatizations
+dramatize
+dramatized
+dramatizer
+dramatizers
+dramatizes
+dramatizing
+dramaturge
+dramaturgic
+dramaturgical
+dramaturgically
+dramaturgy
+drammen
+dramshop
+drancy
+drank
+drapability
+drapable
+drape
+drapeability
+drapeable
+draped
+draper
+draperies
+drapers
+drapery
+drapery's
+drapes
+draping
+drastic
+drastically
+drat
+dratted
+dratting
+drava
+Dravidian
+draw
+drawable
+drawback
+drawback's
+drawbacks
+drawbar
+drawbridge
+drawbridge's
+drawbridges
+drawdown
+drawee
+drawer
+drawerful
+drawers
+drawing
+drawings
+drawknife
+drawl
+drawled
+drawler
+drawling
+drawlingly
+drawls
+drawly
+drawn
+drawnly
+drawnness
+drawnwork
+drawplate
+draws
+drawstring
+drawstring's
+drawstrings
+drawtube
+dray
+drayage
+drayhorse
+drayman
+drayman's
+draymen
+draymen's
+Drayton
+dread
+dreaded
+dreadful
+dreadfully
+dreadfulness
+dreading
+dreadnought
+dreads
+dream
+dreamboat
+dreamed
+dreamer
+dreamers
+dreamful
+dreamfully
+dreamfulness
+dreamier
+dreamily
+dreaminess
+dreaming
+dreamingly
+dreamland
+dreamless
+dreamlessly
+dreamlessness
+dreamlike
+dreams
+dreamt
+dreamworld
+dreamy
+drear
+drearier
+drearily
+dreariness
+dreary
+dreck
+dredge
+dredge's
+dredged
+dredger
+dredgers
+dredges
+dredging
+dree
+dreg
+dreggy
+dregs
+dreich
+dreiser
+drench
+drenched
+drencher
+drenches
+drenching
+drenthe
+dresden
+dress
+dressage
+dressed
+Dressen
+dresser
+dressers
+dresses
+dressier
+dressiness
+dressing
+dressings
+dressmake
+dressmaker
+dressmaker's
+dressmakers
+dressmaking
+dressy
+drew
+Drexel
+Dreyfuss
+drib
+dribble
+dribbled
+dribbler
+dribbles
+dribbling
+driblet
+dribs
+dried
+drier
+drier's
+driers
+dries
+driest
+drift
+driftage
+drifted
+drifter
+drifters
+driftier
+drifting
+driftingly
+drifts
+driftweed
+driftwood
+driftwood's
+drifty
+drill
+drillability
+drillable
+drilled
+driller
+drilling
+drillmaster
+drills
+drillstock
+drily
+drin
+drink
+drinkability
+drinkable
+drinker
+drinkers
+drinking
+drinks
+drinkwater
+drip
+drip's
+dripless
+dripped
+dripper
+drippier
+dripping
+drippy
+drips
+dripstone
+Driscoll
+Driscoll's
+drivable
+drive
+driveable
+drivel
+driveled
+driveler
+drivelers
+driveline
+driveling
+driven
+drivenness
+driver
+driver's
+driverless
+drivers
+drives
+driveway
+driveway's
+driveways
+driving
+drizzle
+drizzled
+drizzles
+drizzling
+drizzlingly
+drizzly
+drogheda
+drogue
+droit
+droll
+drolleries
+drollery
+drollness
+drolly
+dromedary
+dromond
+drone
+drone's
+droner
+drones
+Dronfield
+drongo
+drongos
+droning
+droningly
+droob
+drool
+drooled
+drooler
+drooling
+drools
+droop
+drooped
+droopier
+drooping
+droopingly
+droops
+droopy
+drop
+drop's
+drophead
+dropkick
+dropkicker
+droplet
+droplets
+droplight
+dropout
+dropouts
+droppage
+dropped
+dropper
+dropper's
+dropperful
+droppers
+dropping
+dropping's
+droppings
+drops
+dropshot
+dropsonde
+dropsy
+droshky
+drosophila
+dross
+drossy
+drought
+drought's
+droughtiness
+droughts
+droughty
+drouth
+drove
+drover
+drovers
+droves
+drown
+drownd
+drownded
+drownding
+drowned
+drowner
+drowning
+drownings
+drowns
+drowse
+drowsed
+drowses
+drowsier
+drowsiest
+drowsily
+drowsiness
+drowsing
+drowsy
+drub
+drubber
+drubbing
+drudge
+drudger
+drudgery
+drudges
+drudging
+drudgingly
+druffen
+drug
+drug's
+drugged
+drugget
+drugging
+druggist
+druggist's
+druggists
+drugless
+drugmaker
+drugs
+drugstore
+drugstores
+druid
+druidess
+druidic
+druidical
+druidism
+drum
+drum's
+drumbeat
+drumbeater
+drumbeating
+drumfire
+drumhead
+drumlike
+drumlin
+drummed
+drummer
+drummer's
+drummers
+drumming
+Drummond
+Drummond's
+drumroll
+drums
+drumstick
+drumsticks
+drunk
+drunk's
+drunkard
+drunkard's
+drunkards
+drunken
+drunkeness
+drunkenly
+drunkenness
+drunker
+drunkly
+drunkometer
+drunkometer's
+drunkometers
+drunks
+drupe
+drupelet
+Drury
+Druse
+dry
+dryable
+dryad
+dryasdust
+Dryden
+dryer
+dryers
+drying
+drylot
+dryly
+dryness
+dryopithecine
+drypoint
+drys
+drysalter
+drysaltery
+drysdale
+drystone
+drywall
+du
+dual
+Duala
+dualism
+dualist
+dualistic
+dualistically
+dualities
+duality
+duality's
+dualization
+dualization's
+dualizations
+dualize
+dualizes
+dually
+duals
+Duane
+dub
+dubai
+dubbed
+dubber
+dubbin
+dubbing
+Dubhe
+Dubhe's
+dubiety
+dubiosity
+dubious
+dubiously
+dubiousness
+dubitable
+dubitation
+Dublin
+Dubonnet
+dubrovnik
+dubs
+dubuffet
+Dubuque
+dubuque
+ducal
+ducally
+ducat
+duccio
+duce
+duces
+duchamp
+duchess
+duchess's
+duchesses
+duchies
+duchy
+duck
+duckbill
+duckbilled
+duckboard
+ducked
+ducker
+duckfooted
+duckier
+ducking
+duckling
+duckpin
+ducks
+duckweed
+duckweed's
+duckweeds
+ducky
+duclos
+duct
+ducted
+ductile
+ductility
+ductilize
+ductilizes
+ducting
+ductless
+ducts
+ductule
+ductwork
+dud
+dude
+dudeen
+dudgeon
+dudish
+dudishly
+Dudley
+Dudley's
+duds
+due
+duel
+dueled
+dueler
+duelers
+dueling
+duelings
+duelist
+duelists
+duello
+duels
+duende
+dueness
+duenna
+duennaship
+duero
+dues
+duet
+duets
+duetted
+duetting
+duff
+duffel
+duffer
+duffers
+duffle
+Duffy
+dufy
+dug
+Dugan
+Dugan's
+dugong
+dugout
+duhamel
+duiker
+Duisburg
+duka
+Dukas
+duke
+duke's
+dukedom
+dukes
+dukhobors
+dulcet
+dulcetly
+dulciana
+dulcify
+dulcimer
+dulcimore
+Dulcinea
+dulgence
+dulia
+dull
+dullard
+dulled
+duller
+Dulles
+dulles
+dullest
+dulling
+dullish
+dullishly
+dullness
+dulls
+dullsville
+dully
+dulness
+dulosis
+dulse
+Duluth
+duly
+Duma
+Duma's
+dumas
+Dumas
+dumb
+Dumbarton
+dumbbell
+dumbbell's
+dumbbells
+dumbell
+dumbells
+dumber
+dumbest
+dumbfound
+dumbfounded
+dumbfounder
+dumbfounds
+dumbly
+dumbness
+dumbstruck
+dumbwaiter
+dumbwaiters
+dumdum
+dumfries
+dumka
+dummied
+dummies
+dummy
+dummy's
+dummying
+Dumont
+dumortierite
+dump
+dumped
+dumper
+dumpers
+dumpier
+dumpily
+dumpiness
+dumping
+dumpish
+dumpling
+dumpling's
+dumplings
+dumpo
+dumps
+dumpster
+dumpster's
+dumpsters
+Dumpty
+dumpy
+dumyat
+dun
+duna
+dunaj
+dunant
+Dunbar
+Dunbar's
+Dunbarton
+Duncan
+dunce
+dunce's
+dunces
+dundalk
+dundee
+Dundee
+Dundee's
+dunderhead
+dunderheaded
+dune
+dune's
+Dunedin
+Dunedin's
+duneland
+dunelike
+dunes
+dunfermline
+dung
+dungaree
+dungas
+dungeness
+dungeon
+dungeon's
+dungeons
+dunghill
+dungy
+Dunham
+dunite
+duniwassal
+dunk
+dunkel
+Dunker
+dunker
+dunkerque
+Dunkirk
+Dunlap
+dunlin
+Dunlop
+Dunlop's
+Dunn
+Dunn's
+dunnage
+dunnakin
+dunne
+Dunne
+dunnite
+dunno
+dunnock
+dunny
+dunois
+dunoon
+dunsany
+dunsinane
+dunstable
+dunstan
+dunt
+duntroon
+dunwoody
+duo
+duodecimal
+duodecimo
+duodenal
+duodenary
+duodenitis
+duodenum
+duologue
+duomo
+duomos
+duopolist
+duopolistic
+duopoly
+duos
+duotone
+dup
+duparc
+dupatta
+dupe
+duped
+duper
+dupery
+dupes
+duping
+dupion
+duple
+dupleix
+duplet
+duplex
+duplexer
+duplicable
+duplicate
+duplicated
+duplicates
+duplicating
+duplication
+duplications
+duplicative
+duplicator
+duplicator's
+duplicators
+duplicitous
+duplicitously
+duplicity
+dupondius
+DuPont
+Dupont
+dupont
+DuPonts
+Duponts
+duponts
+duppy
+Dupre
+duque
+Duquesne
+durabilities
+durability
+durable
+durableness
+durables
+durably
+Duralumin
+duramen
+durance
+Durango
+Durango's
+duration
+duration's
+durational
+durations
+durative
+durazzo
+Durban
+durbar
+Durer
+duress
+durex
+durgah
+Durham
+durian
+during
+Durkee
+Durkheim
+Durkin
+Durkin's
+durmast
+duro
+Duroc
+durometer
+durometer's
+durometers
+duros
+durra
+Durrell
+Durrell's
+durst
+Durufle
+durum
+Durward
+Durward's
+durzi
+Dusenberg
+Dusenbury
+Dusenbury's
+dushanbe
+dusk
+duskier
+duskily
+duskiness
+dusky
+Dusseldorf
+dust
+dustability
+dustable
+dustbin
+dustbins
+dustcart
+dustcarts
+dustcover
+dusted
+duster
+dusters
+dustheap
+dustier
+dustiest
+dustily
+Dustin
+dustin
+dustiness
+dusting
+dustless
+dustlike
+dustman
+dustmen
+dustpan
+dustpans
+dusts
+dustsheet
+dustsheets
+dustup
+dusty
+Dutch
+dutchess
+Dutchman
+Dutchmen
+duteous
+dutiable
+duties
+dutiful
+dutifully
+dutifulness
+Dutoit
+Dutton
+Dutton's
+duty
+duty's
+duumvir
+duumvirate
+duvalier
+duverger
+duvet
+dux
+Duyker
+Dvandva
+Dvina
+Dvinsk
+Dvorak
+Dvorsky
+dwale
+dwarf
+dwarfed
+dwarfishly
+dwarfishness
+dwarfism
+dwarflike
+dwarfness
+dwarfs
+dwarves
+dwell
+dwelled
+dweller
+dwellers
+dwelling
+dwellings
+dwells
+dwelt
+Dwight
+dwindle
+dwindled
+dwindles
+dwindling
+DWT
+Dwyer
+Dwyer's
+dyad
+dyadic
+dyadically
+dyads
+Dyak
+dyarchy
+dybbuk
+dye
+dyeability
+dyeable
+dyed
+dyeing
+dyer
+dyerear
+dyers
+dyes
+dyestuff
+dyewood
+dyfed
+dying
+Dyke
+dykes
+Dylan
+Dylan's
+dynameter
+dynamic
+dynamical
+dynamically
+dynamicism
+dynamics
+dynamism
+dynamist
+dynamistic
+dynamite
+dynamited
+dynamiter
+dynamites
+dynamitic
+dynamiting
+dynamized
+dynamo
+dynamoelectric
+dynamometer
+dynamometer's
+dynamometers
+dynamometric
+dynamometry
+dynamos
+dynamotor
+dynapolis
+dynast
+dynastic
+dynastically
+dynasties
+dynasts
+dynasty
+dynasty's
+dynatron
+dyne
+dynode
+dynodes
+Dyonisian
+dyscrasia
+dysenteric
+dysentery
+dysfunction
+dysfunctional
+dysgenesis
+dysgenic
+dysgenics
+dysgraphia
+dyslexia
+dyslexic
+dyslogistic
+dyslogistically
+dysmenorrhoea
+dyspepsia
+dyspeptic
+dyspeptically
+dysphagia
+dysphagic
+dysphasia
+dysphasic
+dysphemism
+dysphonia
+dysphonic
+dysphoria
+dysphoric
+dysplasia
+dysplastic
+dyspnoea
+dysprosium
+dysteleology
+dysthymia
+dystopia
+dystrophic
+dystrophy
+dysuria
+dytiscid
+dyula
+Dzaudzhikau
+Dzerzhinsk
+Dzhambul
+Dziggetai
+Dzongka
+Dzungaria
+e'er
+e's
+each
+Eagan
+Eagan's
+eager
+eagerly
+eagerness
+eagle
+eagle's
+eagles
+Eaglestone
+eaglet
+Eaglewood
+eagre
+ealdorman
+ealing
+eanes
+ear
+earache
+earbash
+eardrop
+eardrops
+eardrum
+eardrums
+eared
+earflap
+earful
+earhart
+earing
+earl
+earl's
+earlap
+earldom
+earless
+earlier
+earliest
+earliness
+earlobe
+earlock
+earls
+early
+earmark
+earmarked
+earmarking
+earmarkings
+earmarks
+earmuff
+earmuffs
+earn
+earned
+earner
+earner's
+earners
+earnest
+earnestly
+earnestness
+earning
+earnings
+earns
+earom
+Earp
+earp
+earphone
+earphones
+earpiece
+earplug
+earring
+earring's
+earrings
+ears
+earshot
+earsplitting
+earth
+earth's
+earthborn
+earthbound
+earthed
+earthen
+earthenware
+earthier
+earthily
+earthiness
+earthlight
+earthlike
+earthliness
+earthling
+earthly
+Earthman
+earthman
+Earthman's
+Earthmen
+earthmen
+Earthmen's
+earthmove
+earthmover
+earthmoving
+earthnut
+earthquake
+earthquake's
+earthquakes
+earthrise
+earths
+earthshaker
+earthshaking
+earthshakingly
+earthshine
+earthstar
+earthward
+earthwards
+earthwork
+earthworks
+earthworm
+earthworm's
+earthworms
+earthy
+earwax
+earwig
+earwigged
+earwigging
+earwitness
+ease
+eased
+easeful
+easefully
+easel
+easement
+easement's
+easements
+easer
+eases
+easier
+easiest
+easily
+easiness
+easing
+east
+eastbound
+Eastbourne
+easter
+easterly
+eastern
+easterner
+easterners
+easternize
+easternmost
+Eastertide
+Easthampton
+easthampton
+easting
+Eastland
+Eastleigh
+Eastman
+eastmost
+easts
+eastward
+eastwards
+eastwick
+Eastwick
+Eastwood
+easure
+easy
+easygoing
+easygoingness
+eat
+eatable
+eatables
+eatage
+eaten
+eater
+eaters
+eatery
+eating
+eatings
+Eaton
+Eaton's
+eats
+eave
+eaves
+eavesdrop
+eavesdropped
+eavesdropper
+eavesdropper's
+eavesdroppers
+eavesdropping
+eavesdrops
+ebb
+ebbed
+ebbing
+ebbs
+EBCDIC
+Eben
+Eben's
+Ebert
+eblis
+ebon
+ebonite
+ebonization
+ebonize
+ebonized
+ebonizes
+ebonizing
+ebony
+ebracteate
+ebullience
+ebulliency
+ebullient
+ebulliently
+ebullioscopy
+ebullition
+eburnation
+ECAD
+ecbatana
+ecbolic
+ecce
+eccentric
+eccentric's
+eccentrically
+eccentricities
+eccentricity
+eccentrics
+ecchymosis
+Eccles
+ecclesall
+ecclesia
+ecclesial
+Ecclesiastes
+ecclesiastic
+ecclesiastical
+ecclesiastically
+ecclesiasticism
+ecclesiasticize
+ecclesiasticizes
+Ecclesiasticus
+ecclesiolatry
+ecclesiological
+ecclesiology
+eccrinology
+ecdysiast
+ecdysis
+ecdysone
+ecesis
+ecevit
+ECG
+ech
+echard
+echelon
+echelons
+Echeveria
+echidna
+echinate
+echinococcus
+echinoderm
+echinoid
+echinulate
+echinulation
+echinus
+echo
+echoed
+echoes
+echoey
+echoic
+echoing
+echoism
+echoize
+echoizes
+echolalia
+echolocation
+echopraxia
+echos
+echovirus
+eck
+eckhart
+eclampsia
+eclat
+eclectic
+eclectically
+eclecticism
+eclecticize
+eclecticizes
+eclipse
+eclipsed
+eclipses
+eclipsing
+eclipsis
+ecliptic
+eclogite
+eclogue
+eclosion
+ecocide
+ecol
+Ecole
+ecologic
+ecological
+ecologically
+ecologist
+ecologists
+ecology
+econometric
+Econometrica
+econometrically
+econometrician
+econometricians
+econometrics
+econometrist
+economic
+economical
+economically
+economics
+economies
+economist
+economist's
+economists
+economization
+economization's
+economizations
+economize
+economized
+economizer
+economizers
+economizes
+economizing
+economy
+economy's
+ecophysiological
+ecophysiology
+ecospecies
+ecospecific
+ecosphere
+ecosystem
+ecosystems
+ecotone
+ecotype
+ecotypic
+ecotypically
+ecowas
+ecru
+ecstacy
+ecstasy
+ecstatic
+ecstatically
+ecstaticize
+ecstaticizes
+ecstatics
+ecthyma
+ectoblast
+ectoblastic
+ectocrine
+ectoderm
+ectodermal
+ectodermic
+ectoenzyme
+ectogenic
+ectogenous
+ectomere
+ectomeric
+ectomorph
+ectomorphic
+ectoparasite
+ectoparasitic
+ectophyte
+ectopia
+ectopic
+ectoplasm
+ectoplasmic
+ectoproct
+ectosarc
+ectotherm
+ectothermic
+ectotrophic
+ectotropic
+ectype
+Ecuador
+ecumenic
+ecumenic's
+ecumenical
+ecumenicalism
+ecumenically
+ecumenicism
+ecumenicist
+ecumenicist's
+ecumenicists
+ecumenicity
+ecumenics
+ecumenism
+ecumenist
+ecumenist's
+ecumenists
+eczema
+eczematous
+ed
+edacious
+edacity
+edale
+edam
+edaphic
+edaphically
+Edda
+Eddie
+eddied
+eddies
+Eddington
+eddo
+eddy
+eddy's
+eddying
+eddystone
+ede
+edelweiss
+edema
+edema's
+edemas
+edematous
+eden
+Edenization
+Edenization's
+Edenizations
+Edenize
+Edenizes
+edentate
+edentulous
+edessa
+Edgar
+edge
+edged
+edgehill
+edgeless
+edger
+Edgerton
+edges
+Edgewater
+edgewater
+edgeways
+edgewise
+edgewood
+Edgewood
+edgeworth
+edgier
+edgily
+edginess
+edging
+edgy
+edibility
+edible
+edibleness
+edibles
+edict
+edict's
+edictal
+edicts
+edification
+edificatory
+edifice
+edifice's
+edifices
+edified
+edifies
+edify
+edifying
+edile
+Edinburgh
+edirne
+Edison
+edit
+editable
+edited
+Edith
+editing
+edition
+edition's
+editions
+editor
+editor's
+editorial
+editorialist
+editorialization
+editorialize
+editorialized
+editorializer
+editorializes
+editorializing
+editorially
+editorials
+editors
+editorship
+editress
+edits
+Edmonds
+Edmondson
+Edmondson's
+Edmonton
+Edmonton's
+Edmund
+Edna
+Edo
+edom
+Edomite
+EDP
+Edsger
+Edsger's
+EDT
+Eduard
+eduard
+Eduardo
+Eduardo's
+educability
+educable
+educate
+educated
+educatedly
+educatedness
+educates
+educating
+education
+education's
+educational
+educationalist
+educationalists
+educationally
+educationist
+educations
+educative
+educator
+educator's
+educators
+educatory
+educe
+educible
+educing
+educt
+eduction
+eductor
+eductors
+edulcorate
+Edward
+Edwardian
+edwardine
+Edwardine
+Edwards
+Edwin
+Edwina
+eeg
+EEG
+eel
+eel's
+eelgrass
+eellike
+eelpout
+eels
+eelworm
+eely
+EEOC
+eerie
+eerier
+eerily
+eeriness
+eery
+eff
+effable
+efface
+effaceable
+effaced
+effacement
+effacer
+effaces
+effacing
+effect
+effected
+effecting
+effective
+effectively
+effectiveness
+effectives
+effectivity
+effector
+effector's
+effectors
+effects
+effectual
+effectuality
+effectualize
+effectualizes
+effectually
+effectualness
+effectuate
+effectuated
+effectuates
+effectuating
+effectuation
+effeminacy
+effeminate
+effeminatize
+effeminatizes
+effendi
+efferent
+efferently
+effervesce
+effervescence
+effervescent
+effervescently
+effete
+effetely
+effeteness
+efficacious
+efficaciously
+efficaciousness
+efficacity
+efficacy
+efficency
+efficiencies
+efficiency
+efficient
+efficiently
+Effie
+Effie's
+effigy
+effloresce
+efflorescence
+efflorescent
+efflrescent
+effluence
+effluent
+effluents
+effluvia
+effluvium
+efflux
+effluxion
+effort
+effort's
+effortful
+effortfully
+effortless
+effortlessly
+effortlessness
+efforts
+effrontery
+effulgence
+effulgent
+effuse
+effused
+effuses
+effusing
+effusiometer
+effusion
+effusive
+effusively
+effusiveness
+Efik
+eft
+efta
+eftsoons
+EGA
+EGA's
+egad
+egads
+egalitarian
+egalitarianism
+Egan
+Egan's
+Egbert
+Egeria
+Egerton
+egerton
+egest
+egesta
+egestion
+egestive
+egg
+eggbeater
+eggcup
+egged
+egger
+egghead
+eggheaded
+eggheadedness
+egging
+eggnog
+eggplant
+eggs
+eggshell
+Egham
+egis
+eglantine
+Egmont
+ego
+egocentric
+egocentrically
+egocentricity
+egocentrism
+egoism
+egoist
+egoistic
+egoistical
+egoistically
+egoists
+egoize
+egoizer
+egoizers
+egoizes
+egomania
+egomaniac
+egomaniacal
+egomaniacally
+egomaniacs
+egos
+egotism
+egotist
+egotistic
+egotistical
+egotistically
+egotists
+egregious
+egregiously
+egregiousness
+egress
+egression
+egret
+egrets
+Egypt
+Egyptian
+Egyptianization
+Egyptianization's
+Egyptianizations
+Egyptianize
+Egyptianizes
+Egyptians
+Egyptize
+Egyptizes
+Egyptology
+egyptus
+eh
+Ehrenburg
+Ehrlich
+Ehrlich's
+Eichendorff
+eichmann
+Eichmann
+eider
+eiderdown
+eidetic
+eidetically
+eidolon
+Eiffel
+eigenfrequencies
+eigenfrequency
+eigenfunction
+eigenfunctions
+eigenspace
+eigenstate
+eigenstates
+eigenstructure
+eigensystem
+eigensystems
+eigenvalue
+eigenvalue's
+eigenvalues
+eigenvector
+eigenvectors
+eiger
+eight
+eighteen
+eighteens
+eighteenth
+eightfold
+eighth
+eighth's
+eighthes
+eighths
+eighties
+eightieth
+eights
+eightsome
+eighty
+eightyfold
+Eijkman
+Eikon
+Eilat
+Eileen
+ein
+Eindhoven
+eine
+Einkorn
+Einstein
+Einsteinian
+einsteinium
+Eire
+Eire's
+eirenic
+eirenicon
+eisegesis
+Eisenach
+Eisenhower
+Eisenstadt
+Eisenstein
+eisk
+Eisner
+Eisner's
+Eisteddfod
+either
+ejaculate
+ejaculated
+ejaculates
+ejaculating
+ejaculation
+ejaculations
+ejaculatory
+eject
+ejecta
+ejectable
+ejected
+ejecting
+ejection
+ejective
+ejectment
+ejector
+ejectors
+ejects
+Ekaterinburg
+Ekaterinodar
+Ekaterinoslav
+Ekberg
+eke
+eked
+ekes
+eking
+ekistic
+ekistics
+Ekstrom
+Ekstrom's
+Ektachrome
+el
+elaborate
+elaborated
+elaborately
+elaborateness
+elaborates
+elaborating
+elaboration
+elaborations
+elaborative
+elaborators
+elaeoptene
+elagabalus
+Elaine
+elam
+Elamite
+elan
+eland
+elapid
+elapse
+elapsed
+elapses
+elapsing
+elasmobranch
+elasmosaur
+elastance
+elastase
+elastic
+elastically
+elasticate
+elasticated
+elasticates
+elasticating
+elasticities
+elasticity
+elasticization
+elasticize
+elasticized
+elasticizer
+elasticizers
+elasticizes
+elasticizing
+elastics
+elastin
+elastomer
+elastomeric
+elastoplast
+elat
+elate
+elated
+elatedly
+elatedness
+elater
+elaterid
+elaterin
+elaterite
+elaterium
+elates
+elating
+elation
+Elba
+elbe
+Elbert
+elbow
+elbowed
+elbowing
+elbowroom
+elbows
+elbrus
+elburz
+eld
+elder
+elderberry
+elderliness
+elderly
+elders
+eldership
+eldest
+eldo
+Eldon
+Eldon's
+eldritch
+elea
+Eleanor
+Eleatic
+Eleazar
+Eleazar's
+elecampane
+elecroencephalographic
+elect
+electability
+electable
+elected
+electing
+election
+election's
+electioneer
+electioneerer
+elections
+elective
+electively
+electiveness
+electives
+elector
+elector's
+electoral
+electorally
+electorate
+electors
+Electra
+electress
+electret
+electric
+electrical
+electricalize
+electricalizes
+electrically
+electricalness
+electrician
+electricians
+electricities
+electricity
+electricize
+electricizes
+electrics
+electrification
+electrified
+electrify
+electrifying
+electriques
+electro
+electroacoustic
+electroacoustically
+electroacoustics
+electroanalysis
+electroanalytic
+electroanalytical
+electroanesthesia
+electroanesthesia's
+electroanesthesias
+electrocardiogram
+electrocardiogram's
+electrocardiograms
+electrocardiograph
+electrocardiographic
+electrocardiographically
+electrocardiography
+electrocauterization
+electrocauterization's
+electrocauterizations
+electrochemical
+electrochemically
+electrochemist
+electrochemistry
+electrochemists
+electroconvulsive
+electrocorticogram
+electrocorticogram's
+electrocorticograms
+electrocute
+electrocuted
+electrocutes
+electrocuting
+electrocution
+electrocutions
+electrode
+electrode's
+electrodeposit
+electrodeposition
+electrodes
+electrodialysis
+electrodialytic
+electrodialyze
+electrodialyzer
+electrodialyzer's
+electrodialyzers
+electrodialyzes
+electrodynamic
+electrodynamicly
+electrodynamics
+electrodynamometer
+electrodynamometer's
+electrodynamometers
+electroencephalogram
+electroencephalogram's
+electroencephalograms
+electroencephalograph
+electroencephalography
+electroform
+electrogalvanize
+electrogalvanizes
+electrogenesis
+electrogenic
+electrogram
+electrogram's
+electrograms
+electrograph
+electrohomeopathies
+electrohomeopathy
+electrohomeopathy's
+electrohydraulic
+electrohydraulically
+electrojet
+electrokinetic
+electrokinetics
+electroless
+electrologist
+electroluminescence
+electroluminescent
+electrolysis
+electrolyte
+electrolyte's
+electrolytes
+electrolytic
+electrolytically
+electrolyze
+electrolyzed
+electrolyzes
+electrolyzing
+electromagnet
+electromagnetic
+electromagnetically
+electromagnetism
+electromagnetisms
+electromagnetizable
+electromagnets
+electromechanical
+electromechanically
+electromerism
+electrometallurgy
+electrometer
+electrometer's
+electrometers
+electromotive
+electromyogram
+electromyogram's
+electromyograms
+electromyograph
+electromyographic
+electromyographical
+electromyographically
+electromyography
+electron
+electron's
+electronegative
+electronegativity
+electronic
+electronically
+electronics
+electronography
+electrons
+electronvolt
+electrooculogram
+electrooculogram's
+electrooculograms
+electrophilic
+electrophone
+electrophoresis
+electrophoretic
+electrophoretically
+electrophoretogram
+electrophoretogram's
+electrophoretograms
+electrophorus
+electrophotographic
+electrophotography
+electrophysiologic
+electrophysiological
+electrophysiologically
+electrophysiologist
+electrophysiology
+electroplate
+electroplater
+electropositive
+electroretinogram
+electroretinogram's
+electroretinograms
+electroretinograph
+electroretinographic
+electroretinography
+electroscope
+electroshock
+electroshocks
+electrostatic
+electrostatically
+electrostatics
+electrostriction
+electrosurgery
+electrosurgical
+electrotechnology
+electrotherapist
+electrothermal
+electrothermally
+electrothermic
+electrotonic
+electrotonically
+electrotonize
+electrotonizes
+electrotonus
+electrotype
+electrotyper
+electrotypers
+electrovalence
+electrovalency
+electrovalent
+electroviscous
+electroweak
+electrowinning
+electrum
+elects
+electuary
+eleemosynary
+elegance
+elegances
+elegancy
+elegant
+elegantly
+elegiac
+elegiacal
+elegiacally
+elegies
+elegit
+elegize
+elegized
+elegizes
+elegizing
+elegy
+eleia
+element
+element's
+elemental
+elementalize
+elementalizes
+elementally
+elementals
+elementarily
+elementariness
+elementary
+elements
+elemi
+Elena
+Elena's
+elenchus
+eleoptene
+elephant
+elephant's
+elephantiasis
+elephantine
+elephants
+Eleusinian
+eleusis
+elevate
+elevated
+elevates
+elevating
+elevation
+elevations
+elevator
+elevator's
+elevators
+eleven
+elevenfold
+elevens
+elevenses
+eleventh
+elevon
+elf
+elfin
+elfish
+elfishly
+Elfland
+elflock
+Elgar
+Elgin
+Elgin's
+elgon
+Eli
+Elia
+Elias
+elicit
+elicitation
+elicited
+eliciting
+elicitor
+elicits
+elide
+elided
+elides
+elidible
+eliding
+eligibilities
+eligibility
+eligible
+eligibles
+eligibly
+Elijah
+eliminable
+eliminate
+eliminated
+eliminately
+eliminates
+eliminating
+elimination
+eliminations
+eliminative
+eliminator
+eliminators
+Elinor
+Elinor's
+Eliot
+elis
+Elisabeth
+Elisabethville
+Elisavetgrad
+Elisavetpol
+Elise
+Elise's
+Elisha
+Elisha's
+elision
+elisions
+elisp
+elite
+eliteness
+elites
+elitism
+elitist
+elitists
+elixir
+Elizabeth
+Elizabethan
+Elizabethanize
+Elizabethanizes
+Elizabethans
+elk
+elk's
+Elkhart
+elkhound
+elks
+ell
+Ella
+elle
+Ellen
+Ellen's
+Ellesmere
+Ellice
+Ellie
+ellie
+Ellington
+Elliot
+elliot
+Elliott
+ellipse
+ellipse's
+ellipses
+ellipsis
+ellipsoid
+ellipsoid's
+ellipsoidal
+ellipsoids
+ellipsometer
+ellipsometer's
+ellipsometers
+ellipsometry
+elliptic
+elliptical
+elliptically
+ellipticity
+Ellis
+Ellison
+Ellsworth
+Ellwood
+Ellwood's
+elm
+elmer
+Elmhurst
+Elmira
+elms
+Elmsford
+elocution
+elocutionary
+elocutionist
+elocutionists
+Elohim
+Elohist
+eloign
+Eloise
+elongate
+elongated
+elongates
+elongating
+elongation
+elope
+eloped
+elopement
+eloper
+elopes
+eloping
+eloquence
+eloquent
+eloquently
+elroy
+Elroy
+els
+elsan
+Elsass
+else
+else's
+Elsevier
+Elsevier's
+elsewhere
+Elsie
+Elsinore
+Elton
+Elton's
+eluant
+eluate
+eluates
+elucidate
+elucidated
+elucidates
+elucidating
+elucidation
+elucidative
+elucidator
+elucubrate
+elucubrated
+elucubrates
+elucubrating
+elucubration
+elude
+eluded
+eludes
+eluding
+eluent
+elusion
+elusive
+elusively
+elusiveness
+elute
+eluted
+eluting
+elution
+elutriate
+elutriator
+eluvial
+eluviate
+eluviation
+eluvium
+elver
+elves
+Elvira
+elvis
+Elvis
+Elvis's
+elvish
+Elwood
+Elwood's
+Ely
+Ely's
+elyot
+Elysee
+Elysee's
+Elysees
+elysian
+Elysium
+elysium
+elytron
+elytrum
+em
+emaciate
+emaciated
+emaciates
+emaciating
+emaciation
+emacs
+emacs's
+email
+email's
+emanate
+emanated
+emanates
+emanating
+emanation
+emanational
+emanations
+emanative
+emancipate
+emancipated
+emancipates
+emancipating
+emancipation
+emancipationist
+emancipator
+Emanuel
+emarginate
+emarginated
+emargination
+emasculate
+emasculated
+emasculates
+emasculating
+emasculation
+emasculator
+embalm
+embalmer
+embalmers
+embalming
+embalmment
+embalms
+embank
+embanked
+embanking
+embankment
+embankments
+embanks
+embarcadero
+embargo
+embargoed
+embargoes
+embargoing
+embark
+embarkation
+embarked
+embarking
+embarkment
+embarks
+embarrass
+embarrassable
+embarrassed
+embarrassedly
+embarrasses
+embarrassing
+embarrassingly
+embarrassment
+embassage
+embassies
+embassy
+embassy's
+embattle
+embattled
+embattlement
+embattles
+embattling
+embay
+embayment
+embed
+embeddable
+embedded
+embedder
+embedding
+embedment
+embeds
+embellish
+embellished
+embellisher
+embellishes
+embellishing
+embellishment
+embellishment's
+embellishments
+ember
+embers
+embezzle
+embezzled
+embezzlement
+embezzler
+embezzler's
+embezzlers
+embezzles
+embezzling
+embitter
+embittered
+embitterment
+embitters
+emblaze
+emblazed
+emblazes
+emblazing
+emblazon
+emblazoned
+emblazoner
+emblazoning
+emblazonment
+emblazonry
+emblazons
+emblem
+emblematic
+emblematical
+emblematically
+emblematicize
+emblematicizes
+emblematization
+emblematize
+emblematized
+emblematizes
+emblematizing
+emblements
+emblemize
+emblemizes
+emblems
+embodied
+embodier
+embodies
+embodiment
+embodiment's
+embodiments
+embody
+embodying
+embolden
+emboldened
+emboldens
+embolectomy
+embolic
+embolism
+embolismic
+embolization
+embolus
+embosom
+emboss
+embossable
+embossed
+embosser
+embossers
+embosses
+embossing
+embossment
+embouchure
+embow
+embowed
+embowel
+emboweled
+emboweling
+embower
+embrace
+embraceable
+embraced
+embracement
+embraceor
+embracer
+embracery
+embraces
+embracing
+embracingly
+embracive
+embranchment
+embrangle
+embranglement
+embrasure
+embrectomy
+embrittle
+embrittlement
+embrocate
+embrocated
+embrocates
+embrocating
+embrocation
+embroglio
+embroider
+embroidered
+embroiderer
+embroideries
+embroiders
+embroidery
+embroil
+embroiled
+embroiling
+embroilment
+embroils
+embrown
+embrue
+embryectomy
+embryo
+embryo's
+embryogenesis
+embryogenetic
+embryogenic
+embryogeny
+embryol
+embryologic
+embryological
+embryologically
+embryologist
+embryology
+embryonal
+embryonally
+embryonated
+embryonic
+embryonically
+embryos
+embryotic
+embus
+emcee
+emceed
+emceeing
+emden
+emend
+emendable
+emendate
+emendation
+emendator
+emendatory
+emender
+emerald
+emerald's
+emeralds
+emerge
+emerged
+emergence
+emergencies
+emergency
+emergency's
+emergent
+emerges
+emerging
+emeries
+emeriti
+emeritus
+emersed
+emerses
+emersion
+Emerson
+emery
+emesis
+emetic
+emetically
+emetine
+emf
+emigrant
+emigrant's
+emigrants
+emigrate
+emigrated
+emigrates
+emigrating
+emigration
+emigre
+emigre's
+emigree
+Emil
+Emil's
+Emile
+Emile's
+Emilio
+Emilio's
+Emily
+eminence
+eminency
+eminent
+eminently
+emir
+emirate
+Emirates
+emiscan
+emissaries
+emissary
+emission
+emission's
+emissions
+emissive
+emissivities
+emissivity
+emit
+emits
+emittance
+emitted
+emitter
+emitters
+emitting
+Emma
+Emmanuel
+emmen
+emmenagogue
+Emmenthal
+emmer
+Emmet
+emmetropia
+Emmett
+Emmett's
+Emmy
+emollient
+emollients
+emolument
+emoluments
+Emory
+emote
+emoted
+emotes
+emoting
+emotion
+emotion's
+emotional
+emotionalism
+emotionalist
+emotionalistic
+emotionality
+emotionalization
+emotionalization's
+emotionalizations
+emotionalize
+emotionalized
+emotionalizes
+emotionalizing
+emotionally
+emotionize
+emotionizes
+emotionless
+emotionlessness
+emotions
+emotive
+emotively
+emotivism
+emotivity
+empale
+empanel
+empaneled
+empaneling
+empanels
+empassion
+empath
+empathetic
+empathetically
+empathic
+empathize
+empathized
+empathizes
+empathizing
+empathy
+empedocles
+empennage
+emperies
+emperor
+emperor's
+emperors
+emperorship
+empery
+emphases
+emphasing
+emphasis
+emphasization
+emphasization's
+emphasize
+emphasized
+emphasizer
+emphasizers
+emphasizes
+emphasizing
+emphatic
+emphatically
+emphysema
+emphysematous
+empire
+empire's
+empires
+empiric
+empirical
+empirically
+empiricism
+empiricist
+empiricist's
+empiricists
+emplace
+emplacement
+emplane
+employ
+employability
+employable
+employed
+employee
+employee's
+employees
+employer
+employer's
+employers
+employing
+employment
+employment's
+employments
+employs
+empoison
+empoisonment
+empolder
+emporium
+emporiums
+empower
+empowered
+empowering
+empowerment
+empowers
+empress
+empressement
+emprise
+Empson
+emptied
+emptier
+empties
+emptiest
+emptily
+emptiness
+empty
+emptyhanded
+emptying
+empurple
+empurpled
+empurpling
+empyema
+empyrean
+empyreuma
+ems
+emu
+emulate
+emulated
+emulates
+emulating
+emulation
+emulations
+emulative
+emulatively
+emulator
+emulator's
+emulators
+emulous
+emulously
+emulousness
+emulsible
+emulsifiable
+emulsification
+emulsified
+emulsifier
+emulsifies
+emulsify
+emulsion
+emulsionize
+emulsionizes
+emulsions
+emulsive
+emulsoid
+emunctory
+en
+enable
+enabled
+enabler
+enablers
+enables
+enabling
+enact
+enacted
+enacting
+enactment
+enactments
+enactor
+enacts
+enamel
+enameled
+enameler
+enamelers
+enameling
+enamelings
+enamelist
+enamelists
+enamels
+enamelware
+enamine
+enamor
+enamor's
+enamored
+enamored's
+enamoredness
+enamoreds
+enamoring
+enamorment
+enamorment's
+enamorments
+enamors
+enantiomorph
+enarbor
+enarbor's
+enarbors
+enarthrosis
+enate
+encaenia
+encage
+encamp
+encamped
+encamping
+encampment
+encamps
+encapsulate
+encapsulated
+encapsulates
+encapsulating
+encapsulation
+encapsule
+encapsules
+encarnalization
+encarnalize
+encarnalized
+encarnalizes
+encarnalizing
+encase
+encased
+encasement
+encash
+encashment
+encaustic
+enceinte
+enceladus
+encephalic
+encephalin
+encephalitic
+encephalitis
+encephalitogenic
+encephalogram
+encephalogram's
+encephalograms
+encephalograph
+encephalographic
+encephalography
+encephaloma
+encephalomyelitis
+encephalon
+enchain
+enchained
+enchainment
+enchant
+enchanted
+enchanter
+enchanting
+enchantingly
+enchantment
+enchantress
+enchants
+enchase
+enchased
+enchasing
+enchilada
+enchiladas
+enchiridion
+enchondroma
+enchorial
+encipher
+enciphered
+encipherer
+enciphering
+encipherment
+enciphers
+encircle
+encircled
+encirclement
+encircles
+encircling
+enclasp
+enclave
+enclaves
+enclitic
+enclose
+enclosed
+encloses
+enclosing
+enclosure
+enclosure's
+enclosures
+encode
+encoded
+encoder
+encoders
+encodes
+encoding
+encodings
+encolor
+encolor's
+encolored
+encoloring
+encolors
+encomia
+encomiast
+encomium
+encomiums
+encompass
+encompassed
+encompasses
+encompassing
+encompassment
+encore
+encored
+encores
+encoring
+encounter
+encountered
+encountering
+encounters
+encourage
+encouraged
+encouragement
+encouragements
+encourager
+encourages
+encouraging
+encouragingly
+encrimson
+encrinite
+encroach
+encroached
+encroacher
+encroaches
+encroaching
+encroachment
+encrust
+encrustation
+encrusted
+encrusting
+encrusts
+encrypt
+encrypted
+encrypting
+encryption
+encryption's
+encryptions
+encrypts
+enculturation
+encumber
+encumbered
+encumbering
+encumbers
+encumbrance
+encumbrancer
+encumbrances
+encyclical
+encyclopedia
+encyclopedia's
+encyclopedias
+encyclopedic
+encyst
+encystation
+encystment
+end
+endamage
+Endamoeba
+endanger
+endangered
+endangering
+endangerment
+endangers
+endarch
+endarchy
+endbrain
+endear
+endeared
+endearing
+endearingly
+endearment
+endearments
+endears
+endeavor
+endeavor's
+endeavored
+endeavorer
+endeavorer's
+endeavorers
+endeavoring
+endeavors
+ended
+endemic
+endemically
+endemicity
+ender
+enderby
+endergonic
+endermic
+endermically
+enders
+endexine
+endgame
+Endicott
+ending
+endings
+endite
+endive
+endleaf
+endless
+endlessly
+endlessness
+endlong
+endmost
+endnote
+endnote's
+endnotes
+endo
+endobiotic
+endoblast
+endoblastic
+endocardial
+endocarditis
+endocardium
+endocarp
+endocentric
+endochondral
+endocranium
+endocrine
+endocrinologic
+endocrinological
+endocrinologist
+endocrinology
+endocytic
+endocytosis
+endocytotic
+endoderm
+endodermal
+endodermis
+endodontia
+endodontic
+endodontically
+endodontics
+endodontist
+endoenzyme
+endoergic
+endoerythrocytic
+endogamic
+endogamous
+endogamy
+endogen
+endogenic
+endogenous
+endogenously
+endogeny
+endolymph
+endolymphatic
+endometrial
+endometriosis
+endometrium
+endomitosis
+endomorph
+endomorphic
+endomorphism
+endomorphy
+endoneurium
+endonuclease
+endoparasite
+endoparasitism
+endopeptidase
+endophyte
+endophytic
+endoplasm
+endoplasmic
+endorsable
+endorse
+endorsed
+endorsee
+endorsement
+endorsement's
+endorsements
+endorser
+endorses
+endorsing
+endoscope
+endoscopic
+endoscopically
+endoscopy
+endoskeletal
+endoskeleton
+endosmosis
+endosmotic
+endosmotically
+endosome
+endosperm
+endospermic
+endospermous
+endospore
+endosporic
+endosporous
+endosteal
+endosteally
+endosternite
+endosteum
+endostosis
+endostyle
+endosymbiosis
+endothecium
+endothelial
+endothelioma
+endothelium
+endotherm
+endothermal
+endothermic
+endotoxic
+endotoxin
+endotracheal
+endotrophic
+endotropic
+endover
+endow
+endowed
+endowing
+endowment
+endowment's
+endowments
+endows
+endozoic
+endpaper
+endplate
+endplay
+endpoint
+endpoints
+Endrich
+ends
+endue
+endued
+enduing
+endurable
+endurably
+endurance
+endure
+endured
+endures
+enduring
+enduringly
+enduringness
+endways
+endwise
+Endymion
+enema
+enema's
+enemas
+enemata
+enemies
+enemy
+enemy's
+energetic
+energetically
+energetics
+energid
+energies
+energization
+energize
+energized
+energizer
+energizers
+energizes
+energizing
+energumen
+energy
+enervate
+enervated
+enervates
+enervating
+enervation
+enervative
+Enesco
+enface
+enfant
+enfants
+enfeeble
+enfeebled
+enfeeblement
+enfeebles
+enfeebling
+enfeoff
+enfetter
+enfever
+enfilade
+enflame
+enflamed
+enflames
+enflaming
+enfold
+enforcable
+enforce
+enforceability
+enforceable
+enforced
+enforcedly
+enforcement
+enforcer
+enforcers
+enforces
+enforcible
+enforcing
+enfranchise
+enfranchised
+enfranchisement
+enfranchiser
+enfranchises
+enfranchising
+engadine
+engage
+engaged
+engagement
+engagement's
+engagements
+engages
+engaging
+engagingly
+Engel
+Engels
+engender
+engendered
+engendering
+engenders
+engild
+engine
+engine's
+engined
+engineer
+engineer's
+engineered
+engineering
+engineeringly
+engineerings
+engineers
+engineroom
+enginerooms
+enginery
+engines
+engining
+engird
+engirdle
+englacial
+england
+englander
+englanders
+Engle
+Engle's
+Englewood
+English
+English's
+Englishism
+Englishize
+Englishizes
+Englishman
+Englishmen
+Englishry
+englut
+englutted
+engluttin
+engorge
+engorged
+engorgement
+engorges
+engorging
+engr
+engraft
+engrail
+engrailed
+engrain
+engram
+engram's
+engrammic
+engrams
+engrandize
+engrandizement
+engrandizement's
+engrandizements
+engrandizes
+engrave
+engraved
+engraver
+engravers
+engraves
+engraving
+engravings
+engross
+engrossed
+engrossedly
+engrosser
+engrossing
+engrossingly
+engrossment
+engulf
+engulfed
+engulfing
+engulfment
+engulfs
+enhalo
+enhance
+enhanced
+enhancement
+enhancement's
+enhancements
+enhances
+enhancing
+enharmonic
+enharmonically
+enhypostatize
+enhypostatizes
+Enid
+Enid's
+enigma
+enigmatic
+enigmatical
+enigmatically
+enisle
+eniwetok
+enjambement
+enjambment
+enjoin
+enjoinder
+enjoined
+enjoining
+enjoins
+enjoy
+enjoyable
+enjoyableness
+enjoyably
+enjoyed
+enjoying
+enjoyment
+enjoys
+enkindle
+enlace
+enlacement
+enlarge
+enlargeable
+enlarged
+enlargement
+enlargement's
+enlargements
+enlarger
+enlargers
+enlarges
+enlarging
+enlighten
+enlightened
+enlightening
+enlightenment
+enlightens
+enlist
+enlisted
+enlistee
+enlister
+enlisting
+enlistment
+enlistments
+enlists
+enliven
+enlivened
+enlivening
+enlivens
+enmesh
+enmeshed
+enmeshment
+enmities
+enmity
+ennage
+ennead
+enneagon
+enneahedron
+ennerdale
+ennervation
+ennis
+enniskillen
+ennius
+ennoble
+ennobled
+ennoblement
+ennobler
+ennobles
+ennobling
+ennui
+Enoch
+enol
+enolase
+enolic
+enolization
+enolization's
+enolizations
+enolize
+enolizes
+enologist
+enology
+enormities
+enormity
+enormous
+enormously
+enormousness
+Enos
+enosis
+enough
+enounce
+enow
+enphytotic
+enplane
+enqueue
+enqueued
+enqueues
+enquire
+enquired
+enquirer
+enquirers
+enquires
+enquiries
+enquiring
+enquiry
+enrage
+enraged
+enrages
+enraging
+enrapt
+enrapture
+enraptured
+enraptures
+enrapturing
+enregister
+enrich
+enriched
+enricher
+enriches
+enriching
+enrichment
+Enrico
+enrobe
+enroll
+enrolled
+enrollee
+enrollees
+enrolling
+enrollment
+enrollment's
+enrollments
+enrolls
+enroot
+ens
+ensample
+ensanguine
+enschede
+ensconce
+ensconced
+ensconces
+ensconcing
+enscroll
+ensemble
+ensemble's
+ensembles
+ensepulcher
+ensepulcher's
+ensepulchers
+enserf
+enserfment
+ensheathe
+enshrine
+enshrined
+enshrinement
+enshrines
+enshroud
+ensiform
+ensign
+ensign's
+ensigns
+ensilage
+ensile
+ensiled
+ensiling
+ensional
+enslave
+enslaved
+enslavement
+enslaver
+enslavers
+enslaves
+enslaving
+ensnare
+ensnared
+ensnares
+ensnaring
+ensnarl
+Ensolite
+ensolite
+ensor
+ensorceled
+ensorcels
+ensoul
+ensphere
+ensue
+ensued
+ensues
+ensuing
+ensure
+ensured
+ensurer
+ensurers
+ensures
+ensuring
+enswathe
+entablature
+entablement
+entablements
+entail
+entailed
+entailer
+entailing
+entailment
+entails
+Entamoeba
+entangle
+entangled
+entanglement
+entangler
+entangles
+entangling
+entasis
+ente
+entebbe
+entelechy
+entellus
+entendre
+entente
+enter
+enterable
+enteral
+enterally
+entered
+enterer
+enteric
+entering
+enteritis
+enterogastrone
+enterokinase
+enteron
+enterostomy
+enterotomy
+enterovirus
+enterprise
+enterpriser
+enterprises
+enterprising
+enterprisingly
+enters
+entertain
+entertained
+entertainer
+entertainers
+entertaining
+entertainingly
+entertainment
+entertainment's
+entertainments
+entertains
+enthalpy
+enthetic
+enthrall
+enthralled
+enthralling
+enthrallment
+enthrallment's
+enthrallments
+enthralls
+enthrone
+enthroned
+enthronement
+enthrones
+enthroning
+enthronization
+enthronization's
+enthronizations
+enthronize
+enthronizes
+enthuse
+enthused
+enthuses
+enthusiasm
+enthusiasms
+enthusiast
+enthusiast's
+enthusiastic
+enthusiastically
+enthusiasts
+enthusing
+enthymeme
+entice
+enticed
+enticement
+enticements
+enticer
+enticers
+entices
+enticing
+entire
+entirely
+entireties
+entirety
+entities
+entitle
+entitled
+entitlement
+entitlements
+entitles
+entitling
+entity
+entity's
+entoblast
+entoderm
+entodermal
+entodermic
+entoil
+entoiled
+entomb
+entombed
+entombment
+entomic
+entomological
+entomologist
+entomologize
+entomologized
+entomologizes
+entomologizing
+entomology
+entomophagous
+entomophilous
+entomophily
+entomostracan
+entophyte
+entopic
+entourage
+entourages
+entozoic
+entozoon
+entrail
+entrails
+entrain
+entrained
+entrainer
+entraining
+entrainment
+entrains
+entrammel
+entrance
+entranced
+entrancement
+entrances
+entranceway
+entrancing
+entrant
+entrants
+entrap
+entrapment
+entrapments
+entrapped
+entrappingly
+entraps
+entreat
+entreated
+entreaties
+entreating
+entreatingly
+entreatment
+entreats
+entreaty
+entrechat
+entree
+entrees
+entremets
+entrench
+entrenched
+entrenches
+entrenching
+entrenchment
+entrenchments
+entrepreneur
+entrepreneur's
+entrepreneurial
+entrepreneurs
+entrepreneurship
+entresol
+entries
+entropies
+entropy
+entrust
+entrusted
+entrusting
+entrustment
+entrusts
+entry
+entry's
+entryism
+entryist
+entryists
+entryname
+entrynames
+entrypoint
+entrypoints
+entryway
+entwine
+entwined
+entwinement
+entwines
+entwining
+entwist
+enucleate
+enucleated
+enucleating
+enucleation
+enugu
+enumerable
+enumerate
+enumerated
+enumerates
+enumerating
+enumeration
+enumerations
+enumerative
+enumerator
+enumerator's
+enumerators
+enunciable
+enunciate
+enunciated
+enunciates
+enunciating
+enunciation
+enunciator
+enunciators
+enure
+enuresis
+envapor
+envapor's
+envapors
+envelop
+envelope
+enveloped
+enveloper
+envelopes
+enveloping
+envelopment
+envelopments
+envelops
+envenom
+envenomed
+envenoming
+envenomization
+envenoms
+enver
+enviable
+enviableness
+enviably
+envied
+envier
+envies
+envious
+enviously
+enviousness
+environ
+environed
+environing
+environment
+environment's
+environmental
+environmentalism
+environmentalist
+environmentalists
+environmentally
+environments
+environs
+envisage
+envisaged
+envisages
+envisaging
+envision
+envisioned
+envisionin
+envisioning
+envisions
+envoi
+envois
+envoy
+envoy's
+envoys
+envy
+envying
+envyingly
+enwheel
+enwind
+enwinding
+enwomb
+enwrap
+enwreath
+enwreathe
+enzed
+enzootic
+enzymatic
+enzymatically
+enzyme
+enzymes
+enzymic
+enzymically
+enzymologist
+enzymology
+enzymolysis
+eobiont
+Eocene
+eogene
+eohippus
+eolian
+eolic
+eolipile
+eolith
+eolithic
+eon
+eon's
+eonian
+eonism
+eonism's
+eonisms
+eons
+eos
+eosin
+eosine
+eosinophil
+Eozoic
+EPA
+epact
+epaminondas
+eparch
+eparchy
+epaulet
+epaulet's
+epaulets
+epaulette
+epencephalon
+epenthesis
+epergne
+epexegesis
+ephah
+ephebe
+Ephedra
+Ephemera
+ephemeral
+ephemerality
+ephemerally
+ephemerals
+ephemerides
+ephemeris
+ephemeron
+Ephesian
+ephesians
+Ephesians
+Ephesus
+ephod
+ephor
+Ephraim
+Ephraimite
+epiblast
+epiboly
+epic
+epic's
+epical
+epically
+epicalyx
+epicanthus
+epicardial
+epicardium
+epicarp
+epicedium
+epicene
+epicenism
+epicenter
+epicenter's
+epicenters
+epicentral
+epiclesis
+epicontinental
+epicotyl
+epicrisis
+epicritic
+epics
+epictetus
+epicure
+epicurean
+epicureanism
+epicurism
+Epicurize
+Epicurizes
+epicurus
+Epicurus
+epicycle
+epicycles
+epicyclic
+epicyclical
+epicyclically
+epicycloidal
+epidaurus
+epideictic
+epidemic
+epidemic's
+epidemical
+epidemically
+epidemicity
+epidemics
+epidemiologic
+epidemiological
+epidemiologically
+epidemiologist
+epidemiology
+epidermal
+epidermic
+epidermis
+epidiascope
+epididymis
+epidote
+epidural
+epifocal
+epigastrium
+epigeal
+epigene
+epigenetic
+epigenous
+epigeous
+epiglottis
+epigone
+Epigoni
+epigram
+epigrammatic
+epigrammatical
+epigrammatically
+epigrammatism
+epigrammatist
+epigrammatization
+epigrammatize
+epigrammatized
+epigrammatizer
+epigrammatizes
+epigrammatizing
+epigrams
+epigraph
+epigrapher
+epigraphic
+epigraphical
+epigraphically
+epigraphist
+epigraphy
+epigynous
+epilate
+epilepsy
+epileptic
+epileptically
+epileptics
+epileptoid
+epilimnion
+epilogue
+epilogues
+epimere
+epimerism
+epimorphism
+epimorphosis
+epimysium
+epinasty
+epinephrine
+epineurium
+epiphanous
+epiphany
+epiphenomena
+epiphenomenal
+epiphenomenalism
+epiphenomenally
+epiphenomenon
+epiphragm
+epiphyseal
+epiphysis
+epiphyte
+epiphytic
+epiphytotic
+epirogeny
+epirus
+episcopacy
+episcopal
+Episcopalian
+Episcopalianize
+Episcopalianizes
+Episcopalism
+episcopally
+episcopate
+episcope
+episematic
+episiotomy
+episode
+episode's
+episodes
+episodic
+episodical
+episodically
+episomal
+episomally
+episome
+epispastic
+epistasis
+epistasy
+epistatic
+epistaxis
+epistemic
+epistemically
+epistemological
+epistemologically
+epistemologist
+epistemology
+episternum
+epistle
+epistle's
+epistler
+epistles
+epistolary
+epistolatory
+epistoler
+epistrophe
+epitaph
+epitaphed
+epitaphial
+epitaphic
+epitaphing
+epitaphize
+epitaphizes
+epitaphs
+epitaxial
+epitaxially
+epitaxy
+epithalamium
+epithelial
+epithelioma
+epithelium
+epithet
+epithet's
+epithetic
+epithetical
+epithetize
+epithetizes
+epithets
+epitome
+epitomes
+epitomization
+epitomization's
+epitomizations
+epitomize
+epitomized
+epitomizer
+epitomizers
+epitomizes
+epitomizing
+epizoic
+epizoon
+epizootic
+epoch
+epochal
+epochally
+epoches
+epochs
+epode
+epodes
+eponym
+eponymous
+eponymy
+epos
+epoxide
+epoxy
+epping
+eprom
+eproms
+epsilon
+epsilons
+Epsom
+Epstein
+epyllion
+equability
+equable
+equableness
+equably
+equal
+equaled
+equaling
+equalitarian
+equalitarianism
+equalities
+equality
+equality's
+equalization
+equalization's
+equalizations
+equalize
+equalized
+equalizer
+equalizer's
+equalizers
+equalizes
+equalizing
+equalizings
+equally
+equals
+equanimities
+equanimity
+equate
+equated
+equates
+equating
+equation
+equational
+equationally
+equations
+equator
+equator's
+equatorial
+Equatorial
+equators
+equatorward
+equerries
+equerry
+equestrian
+equestrianize
+equestrianizes
+equestrians
+equestrienne
+equiangular
+equiangularity
+equicaloric
+equidistant
+equidistantly
+equifrequent
+equifrequently
+equilateral
+equilaterals
+equilibrant
+equilibrate
+equilibrated
+equilibrates
+equilibrating
+equilibration
+equilibrator
+equilibrators
+equilibratory
+equilibria
+equilibrist
+equilibristic
+equilibrium
+equilibriums
+equimolal
+equimolar
+equimolecular
+equine
+equines
+equinoctial
+equinox
+equip
+equipage
+equipartition
+equipment
+equipments
+equipoise
+equipollence
+equipollent
+equipollently
+equiponderant
+equiponderate
+equipotent
+equipotential
+equipped
+equipping
+equiprobable
+equiproportional
+equiproportionality
+equiproportionate
+equips
+Equisetum
+equitability
+equitable
+equitableness
+equitably
+equitant
+equitation
+equites
+equities
+equity
+equivalence
+equivalenced
+equivalences
+equivalencing
+equivalency
+equivalent
+equivalently
+equivalents
+equivocal
+equivocality
+equivocally
+equivocalness
+equivocate
+equivocated
+equivocates
+equivocating
+equivocation
+equivocator
+equivoke
+equivoque
+equuleus
+era
+era's
+eradiate
+eradicable
+eradicably
+eradicate
+eradicated
+eradicates
+eradicating
+eradication
+eradicative
+eradicator
+eradicators
+eradictions
+eras
+erasabilities
+erasability
+erasable
+erase
+erased
+eraser
+erasers
+erases
+erasing
+erasion
+Erasmus
+Erastianism
+Erastus
+erasure
+Erato
+Erato's
+Eratosthenes
+erbium
+erciyas
+ERDA
+ere
+erebus
+Erechtheum
+Erechtheus
+erect
+erectable
+erected
+erectile
+erectility
+erecting
+erection
+erection's
+erections
+erectly
+erectness
+erector
+erector's
+erectors
+erects
+erelong
+eremite
+Erenburg
+erenow
+erepsin
+erethism
+erevan
+erewhile
+erewhiles
+erfurt
+erg
+ergastoplasm
+ergative
+ergatocracy
+ergo
+ergodic
+ergodicity
+ergograph
+ergometer
+ergometer's
+ergometers
+ergometric
+ergonomic
+ergonomics
+ergonomist
+ergonovine
+ergosterol
+ergot
+ergotamine
+ergotic
+ergotism
+ergotized
+ergotizes
+ergotropic
+erhard
+Eric
+Erica
+ericaceous
+Erich
+Erickson
+Ericson
+Ericsson
+eridanus
+Erie
+Erik
+Erik's
+Erika
+Erika's
+Erikson
+Erin
+erinaceous
+eringo
+erinyes
+eris
+eristic
+erith
+Eritrea
+erivan
+erk
+Erlang
+erlang
+Erlang's
+erlangen
+erlanger
+Erlenmeyer
+Erlenmeyer's
+erlking
+Ermanaric
+ermine
+ermine's
+ermined
+ermines
+Ermler
+erne
+Ernest
+Ernestine
+Ernie
+Ernst
+erode
+eroded
+erodes
+erodibility
+erodible
+eroding
+erogenic
+erogenous
+Eros
+erose
+erosely
+erosible
+erosion
+erosional
+erosionally
+erosive
+erosiveness
+erosivity
+erotema
+erotic
+erotica
+erotical
+erotically
+eroticism
+eroticist
+eroticization
+eroticize
+eroticized
+eroticizes
+eroticizing
+erotism
+erotogenic
+erotology
+erotomania
+err
+errancies
+errancy
+errand
+errands
+errant
+errantly
+errantry
+errants
+errata
+erratas
+erratic
+erratical
+erratically
+erraticism
+erratum
+erred
+errhine
+erring
+erringly
+Errol
+erroneous
+erroneously
+erroneousness
+error
+error's
+errorless
+errors
+errs
+errupt
+erruptive
+ersatz
+Erse
+Erskine
+Erskine's
+erst
+erstwhile
+erubescence
+eruct
+erudite
+eruditely
+erudition
+erumpent
+erupt
+erupted
+eruptible
+erupting
+eruption
+eruptions
+eruptive
+eruptively
+erupts
+Ervin
+Erwin
+Erymanthian
+erymanthus
+eryngo
+erysipelas
+erysipeloid
+erythema
+erythrism
+erythrite
+erythritol
+erythroblast
+erythroblastosis
+erythrocyte
+erythrocytometer
+erythromycin
+erythropoiesis
+erzgebirge
+erzurum
+esaki
+esau
+esbjerg
+ESC
+escadrille
+escalade
+escalader
+escalades
+escalate
+escalated
+escalates
+escalating
+escalation
+escalator
+escalators
+escalatory
+Escallonia
+escallop
+escallops
+escalope
+escapable
+escapade
+escapade's
+escapades
+escape
+escaped
+escapee
+escapee's
+escapees
+escapement
+escapements
+escaper
+escapes
+escaping
+escapism
+escapist
+escapologist
+escapology
+escargot
+escarp
+escarpment
+escarpment's
+escarpments
+escaut
+eschalot
+escharotic
+eschatology
+escheat
+escherichia
+Escherichia
+eschew
+eschewal
+eschewed
+eschewing
+eschews
+escoffier
+escolar
+Escorial
+escort
+escorted
+escorting
+escorts
+escot
+escribe
+escritoire
+escrow
+escuage
+escudo
+esculent
+escurial
+escutcheon
+escutcheons
+esdraelon
+Esdras
+esemplastic
+eserine
+esher
+esker
+Eskilstuna
+Eskimo
+Eskimoized
+Eskimoized's
+Eskimoizeds
+Eskimos
+esky
+Esmark
+Esmark's
+esophageal
+esophagi
+esophagus
+esoteric
+esoterica
+esoterically
+esotericism
+Esp
+esp
+espadrille
+espagnol
+Espagnol
+espalier
+espanol
+esparto
+especial
+especially
+esperance
+Esperanto
+espial
+espied
+espies
+espionage
+esplanade
+espoo
+Esposito
+Esposito's
+espousal
+espousals
+espouse
+espoused
+espouser
+espouses
+espousing
+espresso
+espressos
+esprit
+esprits
+espy
+espying
+Esquiline
+esquimau
+esquire
+esquires
+esro
+essaouira
+essay
+essayed
+essayer
+essayist
+essayistic
+essayists
+essays
+Essen
+Essen's
+essence
+essence's
+essences
+Essene
+Essenize
+Essenizes
+essential
+essentialism
+essentialist
+essentiality
+essentialize
+essentializes
+essentially
+essentialness
+essentials
+essequibo
+Essex
+essonite
+essonne
+EST
+establish
+establishable
+established
+establisher
+establishes
+establishing
+establishment
+establishment's
+establishmentarian
+establishmentarianism
+establishments
+estancia
+estate
+estate's
+estates
+este
+esteem
+esteemable
+esteemed
+esteeming
+esteems
+Estella
+Estella's
+ester
+esterase
+esterify
+esterization
+esterization's
+esterizations
+esterize
+esterizes
+esters
+Estes
+Esther
+esthesia
+esthesiometer
+esthesiometer's
+esthesiometers
+esthesis
+esthete
+esthetes
+esthetic
+esthetic's
+esthetically
+esthetics
+esthonia
+estienne
+estimable
+estimableness
+estimate
+estimated
+estimates
+estimating
+estimation
+estimations
+estimative
+estimator
+estimators
+estipulate
+estival
+estivate
+estivation
+Estonia
+Estonia's
+Estonian
+estop
+estoppal
+estopped
+estoppel
+estopping
+estovers
+estrade
+estradiol
+estragon
+estral
+estrange
+estranged
+estrangement
+estranger
+estranges
+estranging
+estray
+estreat
+estremadura
+estrin
+estriol
+estrogen
+estrogenic
+estrogenically
+estrone
+estrous
+estrum
+estrus
+estuarial
+estuaries
+estuarine
+estuary
+esurience
+esuriency
+esurient
+esuriently
+et
+eta
+etaerio
+etagere
+etalon
+etamine
+etaoin
+etas
+etatism
+etatist
+etc
+etcetera
+etceteras
+etch
+etchant
+etched
+etcher
+etches
+etching
+eteocles
+eternal
+eternalization
+eternalization's
+eternalizations
+eternalize
+eternalized
+eternalizes
+eternalizing
+eternally
+eternalness
+eterne
+eternities
+eternity
+eternize
+eternized
+eternizes
+eternizing
+etesian
+Eth
+Ethan
+ethane
+ethanol
+Ethel
+Ethelbert
+Ethelred
+ethene
+ether
+ether's
+ethereal
+ethereality
+etherealization
+etherealization's
+etherealizations
+etherealize
+etherealized
+etherealizes
+etherealizing
+ethereally
+etherealness
+etherege
+etheric
+etherify
+etherish
+etherization
+etherization's
+etherizations
+etherize
+etherized
+etherizer
+etherizers
+etherizes
+etherizing
+etherlike
+Ethernet
+Ethernet's
+Ethernets
+ethers
+ethic
+ethical
+ethicality
+ethically
+ethicalness
+ethician
+ethicians
+ethicist
+ethicists
+ethicization
+ethicize
+ethicized
+ethicizes
+ethicizing
+ethics
+Ethiopia
+Ethiopian
+Ethiopians
+ethmoid
+ethnarch
+ethnic
+ethnical
+ethnically
+ethnicities
+ethnicity
+ethnicize
+ethnicizes
+ethnobiological
+ethnobiology
+ethnobotany
+ethnocentric
+ethnocentrically
+ethnocentricity
+ethnocentrism
+ethnogeny
+ethnographer
+ethnographers
+ethnographic
+ethnographical
+ethnographically
+ethnography
+ethnol
+ethnologic
+ethnological
+ethnologically
+ethnologist
+ethnology
+ethnomethodology
+ethnomusicology
+ethological
+ethologist
+ethology
+ethonone
+ethos
+ethoxide
+ethoxy
+ethoxyethane
+ethyl
+ethylate
+ethylation
+ethylbenzene
+ethylene
+ethylenic
+ethylenically
+ethylic
+ethyne
+ethynyl
+etiolate
+etiologies
+etiology
+etiology's
+etiquette
+Etna
+etna
+Eton
+Etruria
+Etruscan
+etude
+etudes
+etui
+etymological
+etymologically
+etymologies
+etymologist
+etymologists
+etymologization
+etymologize
+etymologized
+etymologizes
+etymologizing
+etymology
+etymon
+etzel
+eubacteria
+euboea
+eucaine
+eucalyptol
+eucalyptus
+eucaryotic
+Eucharis
+Eucharist
+eucharistic
+euchlorine
+euchre
+euchromatin
+eucken
+Euclid
+Euclidean
+euclidian
+eucre
+eudemon
+eudemonia
+eudemonics
+eudiometer
+eudoxus
+Eugene
+Eugenia
+eugenic
+eugenically
+eugenicist
+eugenics
+eugenol
+euglena
+euhemerism
+euhemerist
+euhemeristic
+euhemeristically
+euhemerize
+eukaryote
+eukaryotic
+eulachon
+Euler
+Eulerian
+eulogia
+eulogies
+eulogist
+eulogistic
+eulogistically
+eulogium
+eulogization
+eulogization's
+eulogizations
+eulogize
+eulogized
+eulogizer
+eulogizers
+eulogizes
+eulogizing
+eulogy
+Eumenides
+eumorphic
+Eunice
+eunuch
+eunuchism
+eunuchs
+Euonymus
+Eupatorium
+eupatrid
+eupen
+eupepsia
+euphausiid
+euphemism
+euphemism's
+euphemisms
+euphemist
+euphemistic
+euphemistically
+euphemize
+euphemized
+euphemizer
+euphemizes
+euphemizing
+euphonic
+euphonically
+euphonious
+euphoniously
+euphoniousness
+euphonium
+euphonization
+euphonize
+euphonized
+euphonizes
+euphonizing
+euphony
+euphorbia
+euphorbiaceous
+euphoria
+euphoriant
+euphoric
+euphorically
+euphotic
+euphrasy
+Euphrates
+euphroe
+Euphrosyne
+euphuism
+euphuist
+euphuistic
+euphuistically
+euplastic
+euploid
+eupnoea
+Eurasia
+Eurasian
+euratom
+eure
+eureka
+eurhythmic
+eurhythmics
+eurhythmy
+Euridyce
+Euridyce's
+Euripides
+euripus
+Euroclydon
+Eurocommunism
+Eurocrat
+Eurodollar
+Euromarket
+Europa
+Europe
+Europe's
+European
+European's
+europeanish
+Europeanization
+Europeanization's
+Europeanizations
+Europeanize
+Europeanized
+Europeanizes
+Europeanizing
+Europeans
+europium
+Eurovision
+Eurus
+Euryale
+Eurydice
+eurypterid
+Eurystheus
+eurythermal
+eurythmic
+eurythmics
+eurythmy
+eurytopic
+eurytopicity
+eurytropic
+eusebius
+eusporangiate
+Eustachian
+eustatic
+eutectic
+eutectoid
+Euterpe
+Euterpe's
+euthanasia
+euthanasic
+euthenics
+euthenist
+eutherian
+euthyroid
+eutrophic
+eutrophication
+eutrophy
+eux
+euxenite
+Euxine
+eV
+Eva
+evacuant
+evacuate
+evacuated
+evacuates
+evacuating
+evacuation
+evacuations
+evacuative
+evacuator
+evacuee
+evacuees
+evadable
+evade
+evaded
+evader
+evades
+evading
+evaginate
+evagination
+evaluable
+evaluate
+evaluated
+evaluates
+evaluating
+evaluation
+evaluations
+evaluative
+evaluator
+evaluator's
+evaluators
+evanesce
+evanesced
+evanescence
+evanescent
+evanesces
+evanescing
+evangel
+evangelic
+evangelical
+evangelicalism
+evangelically
+Evangeline
+evangeline
+evangelism
+evangelist
+evangelistic
+evangelistically
+evangelists
+evangelization
+evangelization's
+evangelizations
+evangelize
+evangelized
+evangelizer
+evangelizers
+evangelizes
+evangelizing
+evanish
+evanishment
+Evans
+Evanston
+Evansville
+evaporable
+evaporate
+evaporated
+evaporates
+evaporating
+evaporation
+evaporations
+evaporative
+evaporatively
+evaporativity
+evaporator
+evaporators
+evaporimeter
+evaporimeters
+evaporite
+evaporitic
+evapotranspiration
+evasion
+evasions
+evasive
+evasively
+evasiveness
+eve
+evection
+Evelyn
+even
+evened
+evener
+evenfall
+evenhanded
+evenhandedly
+evenhandedness
+evening
+evening's
+evenings
+evenly
+evenness
+evens
+Evensen
+evensong
+event
+event's
+eventful
+eventfully
+eventfulness
+eventide
+eventides
+eventless
+events
+eventual
+eventualities
+eventuality
+eventualize
+eventualizes
+eventually
+eventuate
+eventuated
+eventuates
+eventuating
+ever
+everblooming
+Eveready
+everest
+Everett
+Everglade
+Everglades
+evergreen
+Everhart
+Everhart's
+everlasting
+everlastingly
+everlastingness
+evermore
+eversible
+eversion
+eversions
+evert
+Everton
+Evertor
+every
+everybody
+everybody's
+everyday
+everydayness
+everyman
+everyone
+everyone's
+everyones
+everyplace
+everything
+everywhere
+eves
+Evesham
+evict
+evicted
+evictee
+evictees
+evicting
+eviction
+eviction's
+evictions
+evictor
+evictors
+evicts
+evidence
+evidenced
+evidences
+evidencing
+evident
+evidential
+evidentially
+evidentiary
+evidently
+evil
+evildoer
+evildoers
+evildoing
+eviler
+evilest
+evilly
+evilness
+evils
+evince
+evinced
+evinces
+evincible
+evincing
+eviscerate
+eviscerated
+eviscerates
+eviscerating
+evisceration
+evitable
+evite
+evocable
+evocate
+evocation
+evocations
+evocative
+evocatively
+evocativeness
+evocator
+evocators
+evoke
+evoked
+evokes
+evoking
+evolute
+evolute's
+evolutes
+evolution
+evolution's
+evolutionarily
+evolutionary
+evolutionism
+evolutionist
+evolutionists
+evolutionize
+evolutionizes
+evolutions
+evolvable
+evolve
+evolved
+evolvement
+evolves
+evolving
+Evonymus
+evulsion
+evulsions
+evzone
+ewe
+ewe's
+Ewen
+ewen
+ewer
+ewes
+Ewing
+ex
+exacerbate
+exacerbated
+exacerbates
+exacerbating
+exacerbation
+exacerbations
+exact
+exacta
+exactable
+exacted
+exacter
+exacting
+exactingly
+exactingness
+exaction
+exaction's
+exactions
+exactitude
+exactly
+exactness
+exactor
+exactors
+exacts
+exaggerate
+exaggerated
+exaggeratedly
+exaggeratedness
+exaggerates
+exaggerating
+exaggeration
+exaggerations
+exaggerative
+exaggeratively
+exaggerator
+exaggerators
+exagitates
+exalt
+exaltation
+exaltations
+exalted
+exaltedly
+exalter
+exalters
+exalting
+exalts
+exam
+exam's
+examen
+examinable
+examinant
+examinants
+examination
+examination's
+examinational
+examinations
+examinatorial
+examine
+examined
+examinee
+examinees
+examiner
+examiners
+examines
+examining
+example
+example's
+exampled
+examples
+exampling
+exams
+exanimate
+exanimated
+exanimates
+exanimating
+exanthema
+exarate
+exarch
+exarchate
+exasperate
+exasperated
+exasperatedly
+exasperates
+exasperating
+exasperatingly
+exasperation
+exasperations
+Excalibur
+excaudate
+excavate
+excavated
+excavates
+excavating
+excavation
+excavational
+excavations
+excavator
+excavators
+exceed
+exceeded
+exceeder
+exceeding
+exceedingly
+exceeds
+excel
+excelled
+excellence
+excellences
+excellency
+excellent
+excellently
+excelling
+excels
+excelsior
+except
+excepted
+excepting
+exception
+exception's
+exceptionability
+exceptionable
+exceptionably
+exceptional
+exceptionality
+exceptionally
+exceptionalness
+exceptions
+exceptive
+excepts
+excerpt
+excerpted
+excerpter
+excerption
+excerptions
+excerptor
+excerptors
+excerpts
+excess
+excesses
+excessive
+excessively
+excessiveness
+exchange
+exchangeability
+exchangeable
+exchanged
+exchangee
+exchangees
+exchanger
+exchangers
+exchanges
+exchanging
+exchequer
+exchequer's
+exchequers
+excide
+excided
+excides
+exciding
+excipient
+excisable
+excise
+excised
+exciseman
+excises
+excising
+excision
+excisions
+excitability
+excitable
+excitableness
+excitant
+excitants
+excitation
+excitation's
+excitations
+excitative
+excitatory
+excite
+excited
+excitedly
+excitement
+exciter
+excites
+exciting
+excitingly
+exciton
+excitor
+exclaim
+exclaimed
+exclaimer
+exclaimers
+exclaiming
+exclaims
+exclamation
+exclamation's
+exclamations
+exclamatory
+exclaustration
+exclave
+exclaves
+exclosure
+exclosures
+excludability
+excludable
+exclude
+excluded
+excluder
+excludes
+excludible
+excluding
+exclusion
+exclusionary
+exclusioner
+exclusioners
+exclusionist
+exclusionists
+exclusions
+exclusive
+exclusively
+exclusiveness
+exclusivity
+excogitate
+excogitation
+excogitative
+excommunicate
+excommunicated
+excommunicates
+excommunicating
+excommunication
+excommunicative
+excommunicator
+excoriate
+excoriated
+excoriates
+excoriating
+excoriation
+excoriations
+excrement
+excrement's
+excremental
+excrementitious
+excrements
+excrescence
+excrescences
+excrescency
+excrescent
+excrescently
+excreta
+excretal
+excrete
+excreted
+excreter
+excretes
+excreting
+excretion
+excretions
+excretory
+excruciate
+excruciated
+excruciates
+excruciating
+excruciatingly
+excruciation
+exculpate
+exculpated
+exculpates
+exculpating
+exculpation
+exculpations
+exculpatory
+excurrent
+excursion
+excursion's
+excursionist
+excursionists
+excursionize
+excursionizes
+excursions
+excursive
+excursively
+excursiveness
+excursus
+excursuses
+excusable
+excusableness
+excusably
+excusatory
+excuse
+excused
+excuser
+excuses
+excusing
+exeat
+exec
+execrable
+execrableness
+execrably
+execrate
+execrated
+execrates
+execrating
+execration
+execrative
+execrator
+execrators
+executability
+executable
+executable's
+executables
+executant
+execute
+executed
+executer
+executers
+executes
+executing
+execution
+executional
+executioner
+executions
+executive
+executive's
+executives
+executor
+executor's
+executorial
+executors
+executory
+executrices
+executrix
+executrixes
+exedra
+exegesis
+exegete
+exegetic
+exegetical
+exegetically
+exegetics
+exegetist
+exemplar
+exemplarily
+exemplariness
+exemplarity
+exemplars
+exemplary
+exemplification
+exemplified
+exemplifier
+exemplifiers
+exemplifies
+exemplify
+exemplifying
+exemplum
+exempt
+exempted
+exempting
+exemption
+exemptions
+exempts
+exenterate
+exenterated
+exenterates
+exenterating
+exenteration
+exenterations
+exequatur
+exequies
+exercisable
+exercise
+exercised
+exerciser
+exercisers
+exercises
+exercising
+exercitation
+exergonic
+exergue
+exert
+exerted
+exerting
+exertion
+exertion's
+exertions
+exerts
+Exeter
+exeunt
+exfoliate
+exfoliated
+exfoliates
+exfoliating
+exfoliation
+exfoliative
+exhalant
+exhalants
+exhalation
+exhalations
+exhale
+exhaled
+exhalent
+exhalents
+exhales
+exhaling
+exhaust
+exhausted
+exhaustedly
+exhauster
+exhaustibility
+exhaustible
+exhausting
+exhaustingly
+exhaustion
+exhaustive
+exhaustively
+exhaustiveness
+exhaustivity
+exhaustless
+exhaustlessly
+exhaustlessness
+exhausts
+exhibit
+exhibited
+exhibiting
+exhibition
+exhibition's
+exhibitioner
+exhibitionism
+exhibitionist
+exhibitionistic
+exhibitionize
+exhibitionizes
+exhibitions
+exhibitive
+exhibitor
+exhibitor's
+exhibitors
+exhibitory
+exhibits
+exhilarant
+exhilarate
+exhilarated
+exhilarates
+exhilarating
+exhilaratingly
+exhilaration
+exhilarative
+exhort
+exhortation
+exhortation's
+exhortations
+exhortative
+exhortatory
+exhorted
+exhorter
+exhorting
+exhorts
+exhumation
+exhumations
+exhume
+exhumed
+exhumer
+exhumes
+exhuming
+exigence
+exigencies
+exigency
+exigent
+exigently
+exigible
+exiguity
+exiguous
+exiguously
+exiguousness
+exile
+exiled
+exiles
+exilic
+exiling
+eximious
+exine
+exist
+existed
+existence
+existences
+existent
+existential
+existentialism
+existentialist
+existentialist's
+existentialistic
+existentialistically
+existentialists
+existentialize
+existentializes
+existentially
+existing
+exists
+exit
+exitance
+exited
+exiting
+exits
+Exmoor
+exo
+exobiological
+exobiologist
+exobiology
+exocarp
+exocentric
+exocrine
+exocyclic
+exoderm
+exodermis
+exodontia
+exodontics
+exodontist
+exodus
+exoergic
+exogamic
+exogamous
+exogamy
+exogenous
+exogenously
+Exon
+exonerate
+exonerated
+exonerates
+exonerating
+exoneration
+exonerative
+exonuclease
+exonym
+exopeptidase
+exophthalmic
+exophthalmos
+exoplasm
+exorable
+exorbitance
+exorbitances
+exorbitant
+exorbitantly
+exorciser
+exorcism
+exorcist
+exorcistic
+exorcistical
+exorcize
+exorcized
+exorcizes
+exorcizing
+exordial
+exordium
+exoskeleta
+exoskeletal
+exoskeleton
+exoskeletons
+exosmosis
+exosmotic
+exosphere
+exospheric
+exospore
+exostosis
+exosystem
+exosystems
+exoteric
+exotericaly
+exothermal
+exothermic
+exothermically
+exotic
+exotica
+exotically
+exoticism
+exoticness
+exotism
+exotoxin
+expand
+expandable
+expanded
+expander
+expander's
+expanders
+expanding
+expands
+expanse
+expansed
+expanses
+expansibility
+expansible
+expansile
+expansing
+expansion
+expansional
+expansionary
+expansionism
+expansionist
+expansionistic
+expansions
+expansive
+expansively
+expansiveness
+expansivity
+expatiate
+expatiated
+expatiates
+expatiating
+expatiation
+expatriate
+expatriated
+expatriates
+expatriating
+expatriation
+expecially
+expect
+expectable
+expectably
+expectance
+expectancies
+expectancy
+expectant
+expectantly
+expectation
+expectation's
+expectations
+expectative
+expected
+expectedly
+expectedness
+expecting
+expectingly
+expectorant
+expectorate
+expectoration
+expects
+expedience
+expediency
+expedient
+expediential
+expediently
+expedite
+expedited
+expediter
+expedites
+expediting
+expedition
+expedition's
+expeditionary
+expeditions
+expeditious
+expeditiously
+expeditiousness
+expeditor
+expel
+expellable
+expellant
+expelled
+expellee
+expeller
+expellers
+expelling
+expels
+expend
+expendability
+expendable
+expended
+expender
+expending
+expenditure
+expenditure's
+expenditures
+expends
+expense
+expensed
+expenses
+expensing
+expensive
+expensively
+expensiveness
+experience
+experienced
+experiences
+experiencing
+experiential
+experientialism
+experientially
+experiment
+experimental
+experimentalism
+experimentalist
+experimentalist's
+experimentalists
+experimentalize
+experimentalizes
+experimentally
+experimentation
+experimentation's
+experimentations
+experimented
+experimenter
+experimenters
+experimenting
+experimentize
+experimentizes
+experiments
+expert
+expertise
+expertism
+expertly
+expertness
+experts
+expiable
+expiate
+expiated
+expiates
+expiating
+expiation
+expiator
+expiatory
+expiration
+expiration's
+expirations
+expiratory
+expire
+expired
+expires
+expiring
+expiry
+explain
+explainable
+explained
+explainer
+explainers
+explaining
+explains
+explanation
+explanation's
+explanations
+explanative
+explanatively
+explanatorily
+explanatory
+explant
+explantation
+explants
+expletive
+expletives
+expletory
+explicable
+explicably
+explicate
+explicated
+explicates
+explicating
+explication
+explicative
+explicatively
+explicator
+explicatory
+explicit
+explicite
+explicitely
+explicitly
+explicitness
+explicity
+explictly
+explode
+exploded
+explodent
+exploder
+explodes
+exploding
+exploit
+exploitable
+exploitation
+exploitation's
+exploitations
+exploitative
+exploitatively
+exploited
+exploiter
+exploiters
+exploiting
+exploitive
+exploits
+exploration
+exploration's
+explorational
+explorations
+explorative
+exploratively
+exploratory
+explore
+explored
+explorer
+explorers
+explores
+exploring
+explosibility
+explosible
+explosion
+explosion's
+explosions
+explosive
+explosively
+explosiveness
+explosives
+expo
+exponent
+exponent's
+exponential
+exponentially
+exponentials
+exponentiate
+exponentiated
+exponentiates
+exponentiating
+exponentiation
+exponentiation's
+exponentiations
+exponents
+exponible
+export
+exportability
+exportable
+exportation
+exported
+exporter
+exporters
+exporting
+exports
+expos
+expose
+exposed
+exposer
+exposers
+exposes
+exposing
+exposit
+exposited
+exposition
+exposition's
+expositional
+expositions
+expositor
+expository
+expostulate
+expostulation
+expostulatory
+exposure
+exposure's
+exposures
+expound
+expounded
+expounder
+expounding
+expounds
+express
+expressage
+expressed
+expresser
+expresses
+expressibility
+expressible
+expressibly
+expressing
+expression
+expression's
+expressional
+expressionism
+expressionist
+expressionistic
+expressionistically
+expressionists
+expressionless
+expressionlessly
+expressionlessness
+expressions
+expressive
+expressively
+expressiveness
+expressivity
+expressly
+expresso
+expressway
+expressways
+expropriate
+expropriated
+expropriates
+expropriating
+expropriation
+expropriations
+expropriator
+expropriators
+expulsion
+expulsive
+expunction
+expunge
+expunged
+expunger
+expunges
+expunging
+expurgate
+expurgated
+expurgates
+expurgating
+expurgation
+expurgator
+expurgatorial
+expurgatory
+exquisite
+exquisitely
+exquisiteness
+exsanguinate
+exsanguination
+exsanguine
+exscind
+exsect
+exsert
+exserted
+exsertile
+exsertion
+exsertions
+exsiccate
+exsiccation
+exstipulate
+exstrophy
+ext
+extant
+extemporal
+extemporally
+extemporaneity
+extemporaneous
+extemporaneously
+extemporaneousness
+extemporarily
+extemporary
+extempore
+extemporization
+extemporization's
+extemporizations
+extemporize
+extemporized
+extemporizer
+extemporizers
+extemporizes
+extemporizing
+extend
+extendable
+extended
+extendedly
+extendedness
+extender
+extendibility
+extendible
+extendibles
+extending
+extends
+extensibility
+extensible
+extensile
+extension
+extension's
+extensional
+extensionality
+extensionally
+extensions
+extensity
+extensive
+extensively
+extensiveness
+extensometer
+extensometer's
+extensometers
+extensor
+extent
+extent's
+extention
+extentions
+extents
+extenuate
+extenuated
+extenuating
+extenuation
+extenuator
+extenuatory
+exterior
+exterior's
+exteriority
+exteriorization
+exteriorization's
+exteriorizations
+exteriorize
+exteriorized
+exteriorizes
+exteriorizing
+exteriorly
+exteriors
+exterminate
+exterminated
+exterminates
+exterminating
+extermination
+exterminations
+exterminator
+exterminator's
+exterminators
+exterminatory
+extermine
+extern
+external
+externalism
+externalities
+externality
+externalization
+externalization's
+externalizations
+externalize
+externalized
+externalizes
+externalizing
+externally
+externals
+externship
+exteroceptive
+exteroceptor
+exterritorial
+exterritoriality
+extinct
+extinction
+extinctive
+extine
+extinguish
+extinguishable
+extinguishant
+extinguished
+extinguisher
+extinguishers
+extinguishes
+extinguishing
+extinguishment
+extirpate
+extirpated
+extirpating
+extirpation
+extirpative
+extol
+extoll
+extolled
+extoller
+extolling
+extolment
+extols
+extort
+extorted
+extorter
+extorting
+extortion
+extortionary
+extortionate
+extortionately
+extortioner
+extortionist
+extortionist's
+extortionists
+extortive
+extorts
+extra
+extracanonical
+extracellular
+extracellularly
+extrachromosomal
+extracorporeal
+extracorporeally
+extracranial
+extract
+extractability
+extractable
+extracted
+extractible
+extracting
+extraction
+extraction's
+extractions
+extractive
+extractively
+extractor
+extractor's
+extractors
+extracts
+extracurricular
+extraditable
+extradite
+extradites
+extradition
+extrados
+extradoses
+extragalactic
+extrajudicial
+extrajudicially
+extralegal
+extralegally
+extralimital
+extralinguistic
+extralinguistically
+extrality
+extramarital
+extramundane
+extramural
+extramurally
+extraneous
+extraneously
+extraneousness
+extranuclear
+extraordinarily
+extraordinariness
+extraordinary
+extrapolate
+extrapolated
+extrapolates
+extrapolating
+extrapolation
+extrapolations
+extrapolative
+extrapolator
+extraposition
+extras
+extrasensory
+extrasystole
+extrasystolic
+extraterrestrial
+extraterritorial
+extraterritoriality
+extrauterine
+extravagance
+extravagancy
+extravagant
+extravagantly
+extravaganza
+extravaganzas
+extravagate
+extravasate
+extravasation
+extravascular
+extravehicular
+extraversion
+extraversive
+extravert
+extraverted
+extrema
+extremadura
+extremal
+extreme
+extremed
+extremely
+extremeness
+extremer
+extremes
+extremest
+extremis
+extremism
+extremist
+extremist's
+extremists
+extremities
+extremity
+extremity's
+extremum
+extricable
+extricate
+extricated
+extricates
+extricating
+extrication
+extrinsic
+extrinsically
+extrorse
+extrorsely
+extroversion
+extrovert
+extroverted
+extroverts
+extrudability
+extrudable
+extrude
+extruded
+extruder
+extrudes
+extruding
+extrusion
+extrusive
+exuberance
+exuberant
+exuberantly
+exuberate
+exudate
+exudation
+exudative
+exude
+exuded
+exudes
+exuding
+exult
+exultance
+exultancy
+exultant
+exultantly
+exultation
+exulted
+exulting
+exultingly
+exults
+exurban
+exurbanite
+exurbia
+exuviae
+exuviate
+exuviation
+Exxon
+eyas
+eye
+eyeball
+eyeballs
+eyebath
+eyeblack
+eyebolt
+eyebright
+eyebrow
+eyebrow's
+eyebrows
+eyecup
+eyed
+eyedness
+eyedropper
+eyedropperful
+eyeful
+eyeglass
+eyeglasses
+eyehole
+eyehook
+eyeing
+eyelash
+eyelashes
+eyeless
+eyelet
+eyeleteer
+eyelets
+eyelid
+eyelid's
+eyelids
+eyelike
+eyeliner
+eyepatch
+eyepiece
+eyepiece's
+eyepieces
+eyepoint
+eyepopper
+eyer
+eyers
+eyes
+eyeshade
+eyeshot
+eyesight
+eyesore
+eyesore's
+eyesores
+eyespot
+eyestalk
+eyestrain
+eyestrings
+eyeteeth
+eyetie
+eyetooth
+eyewash
+eyewink
+eyewitness
+eyewitness's
+eyewitnesses
+eying
+eyot
+eyots
+eyra
+eyre
+eyrie
+eyrir
+eysenck
+Ezekiel
+Ezra
+f's
+FAA
+fab
+fabaceous
+Faber
+Faber's
+Fabian
+Fabian's
+Fabianism
+fabians
+fabius
+fable
+fabled
+fabler
+fables
+fabliau
+fabling
+fabre
+fabric
+fabric's
+fabricant
+fabricate
+fabricated
+fabricates
+fabricating
+fabrication
+fabrications
+fabricator
+fabricators
+fabrics
+Fabrikoid
+fabular
+fabulist
+fabulous
+fabulously
+fabulousness
+facade
+facaded
+facades
+facading
+face
+facebar
+faced
+facedown
+faceless
+facelessness
+facement
+facepiece
+facepieces
+faceplate
+facer
+faces
+facet
+faceted
+facetiae
+faceting
+facetious
+facetiously
+facetiousness
+facets
+facetted
+faceup
+facia
+facial
+facially
+facies
+facile
+facilely
+facileness
+facilitate
+facilitated
+facilitates
+facilitating
+facilitation
+facilitative
+facilitator
+facilitators
+facilitatory
+facilities
+facility
+facility's
+facilties
+facing
+facings
+facsimile
+facsimile's
+facsimiled
+facsimiles
+facsimiling
+facsimilize
+facsimilizes
+fact
+fact's
+Factice
+facticity
+faction
+faction's
+factional
+factionalism
+factionally
+factions
+factious
+factiously
+factiousness
+factitious
+factitiously
+factitiousness
+factitive
+factitively
+facto
+factor
+factorable
+factorage
+factored
+factorial
+factories
+factoring
+factorings
+factorization
+factorization's
+factorizations
+factorize
+factorized
+factorizes
+factorizing
+factors
+factorship
+factory
+factory's
+factotum
+facts
+factual
+factualism
+factualist
+factualists
+factuality
+factually
+factualness
+facture
+factures
+facula
+faculae
+facultative
+facultatively
+faculties
+faculty
+faculty's
+fad
+fadden
+faddish
+faddishness
+faddism
+faddist
+faddists
+fade
+fadeaway
+faded
+fadedly
+fadeless
+fadelessly
+fadeout
+fader
+faders
+fades
+fadge
+fading
+fads
+faecal
+faeces
+faenza
+faerie
+faeroes
+faeroese
+faery
+faff
+Fafnir
+Fafnir's
+fag
+fagaceous
+fagging
+faggot
+faggoting
+faggots
+Fagin
+fags
+Fahey
+Fahey's
+fahlband
+Fahrenheit
+Fahrenheits
+faial
+faience
+fail
+failed
+failing
+failingly
+failings
+faille
+fails
+failsafe
+failsoft
+failure
+failure's
+failures
+fain
+faint
+fainted
+fainter
+faintest
+fainthearted
+faintheartedly
+faintheartedness
+fainting
+faintish
+faintishness
+faintly
+faintness
+faints
+fair
+fairbanks
+Fairbanks
+Fairchild
+faired
+fairer
+fairest
+Fairfax
+Fairfield
+fairgoer
+fairgoers
+fairground
+fairgrounds
+fairies
+fairing
+fairish
+fairishly
+fairlead
+fairleader
+fairless
+fairly
+Fairmont
+fairness
+Fairport
+fairs
+Fairview
+fairview
+fairway
+fairways
+fairweather
+fairy
+fairy's
+fairyfloss
+fairyland
+fairylike
+Faisal
+faith
+faithful
+faithfully
+faithfulness
+faithfuls
+faithless
+faithlessly
+faithlessness
+faiths
+faitour
+faiyum
+Faizabad
+fake
+faked
+faker
+fakery
+fakes
+faking
+fakir
+falafel
+Falange
+falbala
+falcate
+falcated
+falchion
+falciform
+falcon
+falconer
+falconet
+falconiform
+falconine
+falconry
+falcons
+falderal
+faldstool
+falerii
+Faliscan
+falk
+Falk
+Falkirk
+Falkland
+Falklands
+Falkner
+fall
+Falla
+fallacies
+fallacious
+fallaciously
+fallaciousness
+fallacy
+fallacy's
+fallal
+fallback
+fallen
+faller
+fallfish
+fallibility
+fallible
+fallibly
+falling
+falloff
+Fallopian
+fallout
+fallouts
+fallow
+fallowness
+falls
+Falmouth
+Falmouth's
+false
+falsehood
+falsehood's
+falsehoods
+falsely
+falseness
+falser
+falsest
+falseties
+falsetto
+falsettos
+falsety
+falsework
+falsies
+falsification
+falsified
+falsifier
+falsifies
+falsify
+falsifying
+falsity
+Falstaff
+Falstaffian
+falster
+faltboat
+falter
+faltered
+falterer
+faltering
+falteringly
+falters
+falun
+famagusta
+fame
+famed
+fames
+familial
+familiar
+familiarities
+familiarity
+familiarization
+familiarization's
+familiarizations
+familiarize
+familiarized
+familiarizer
+familiarizers
+familiarizes
+familiarizing
+familiarizingly
+familiarly
+familiarness
+familiars
+families
+familism
+familist
+family
+family's
+famine
+famine's
+famines
+faming
+famish
+famished
+famishes
+famishing
+famishment
+famous
+famously
+famousness
+famulus
+fan
+fan's
+fanagalo
+fanatic
+fanatic's
+fanatical
+fanatically
+fanaticalness
+fanaticism
+fanaticize
+fanaticized
+fanaticizes
+fanaticizing
+fanatics
+fancied
+fancier
+fancier's
+fanciers
+fancies
+fanciest
+fanciful
+fancifully
+fancifulness
+fancily
+fanciness
+fancy
+fancying
+fancywork
+fandangle
+fandango
+fane
+fanfani
+fanfare
+fanfaronade
+fanfold
+fang
+fang's
+fanged
+fangio
+fangled
+fango
+fangs
+fanion
+fankle
+fanlight
+fanlike
+fanned
+fanner
+Fannies
+fanning
+Fanny
+fanon
+fanout
+fans
+fantail
+fantasia
+fantasied
+fantasies
+fantasist
+fantasize
+fantasized
+fantasizer
+fantasizes
+fantasizing
+fantasm
+fantast
+fantastic
+fantastical
+fantasticality
+fantastically
+fantasticalness
+fantasticate
+fantasticated
+fantasticates
+fantasticating
+fantastication
+fantasy
+fantasy's
+Fanti
+fantoccini
+fantod
+fantom
+fanwise
+FAQ
+FAQ's
+FAQ'S
+faqir
+FAQs
+far
+farad
+Faraday
+faradic
+faradism
+faradization
+faradization's
+faradizations
+faradize
+faradized
+faradizer
+faradizers
+faradizes
+faradizing
+farandole
+faraway
+Farber
+farce
+farce's
+farces
+farceur
+farci
+farcical
+farcicality
+farcically
+farcing
+farcy
+fard
+fardel
+fare
+fared
+Fareham
+farer
+fares
+farewell
+farewells
+farfetched
+farfetchedness
+Fargo
+farina
+farinaceous
+faring
+farinose
+Farkas
+farl
+Farley
+farm
+farmed
+farmer
+farmer's
+farmers
+farmhand
+farmhands
+farmhouse
+farmhouse's
+farmhouses
+farming
+Farmington
+farmland
+farmlands
+farms
+farmstead
+farmsteading
+farmworker
+farmworkers
+farmyard
+farmyard's
+farmyards
+Farnborough
+Farnese
+Farnesol
+Farnham
+Farnsworth
+Farnsworth's
+faro
+Faroe
+Faroes
+Farouk
+Farquhar
+Farrago
+Farrell
+farrier
+farriery
+farrow
+farseeing
+farside
+farsighted
+farsightedly
+farsightedness
+fart
+farther
+farthermost
+farthest
+farthing
+Farthingale
+Fartlek
+Faruk
+fasces
+fascia
+fascial
+fasciate
+fasciated
+fasciation
+fascicle
+fascicled
+fascicles
+fascicular
+fascicularly
+fasciculate
+fasciculated
+fasciculation
+fasciculations
+fascicule
+fasciculus
+fascinate
+fascinated
+fascinates
+fascinating
+fascinatingly
+fascination
+fascinations
+fascinator
+fascinators
+fascine
+fascism
+fascist
+fascistic
+fascistically
+fascisticization
+fascisticization's
+fascisticizations
+fascisticize
+fascisticizes
+fascistization
+fascistization's
+fascistizations
+fascistize
+fascistized
+fascistizes
+fascistizing
+fascists
+fash
+fashion
+fashionabilities
+fashionability
+fashionable
+fashionableness
+fashionably
+fashioned
+fashioner
+fashioners
+fashioning
+fashionize
+fashionizes
+fashionmonger
+fashions
+fashoda
+Fassbaender
+Fassbinder
+fast
+fastback
+fastball
+fastball's
+fastballs
+fasted
+fasten
+fastened
+fastener
+fasteners
+fastening
+fastenings
+fastens
+faster
+fastest
+fastidious
+fastidiously
+fastidiousness
+fastigiate
+fasting
+fastness
+fasts
+fastuous
+fastuously
+fat
+fatah
+fatal
+fatalism
+fatalist
+fatalistic
+fatalistically
+fatalists
+fatalities
+fatality
+fatality's
+fatalize
+fatalizes
+fatally
+fatals
+fatback
+fate
+fated
+fateful
+fatefully
+fatefulness
+fates
+fathead
+fatheaded
+fatheadedness
+father
+father's
+fathered
+fatherhood
+fathering
+fatherland
+fatherless
+fatherlike
+fatherliness
+fatherly
+fathers
+fathom
+fathomable
+fathomed
+Fathometer
+fathoming
+fathomless
+fathomlessly
+fathomlessness
+fathoms
+fatidic
+fatigability
+fatigable
+fatigue
+fatigued
+fatigues
+fatiguing
+fatiguingly
+Fatima
+Fatimid
+fating
+fatling
+fatly
+fatness
+fats
+Fatshan
+fatso
+fatted
+fatten
+fattened
+fattener
+fatteners
+fattening
+fattens
+fatter
+fattest
+fattier
+fatties
+fattiness
+fatting
+fattish
+fatty
+fatuity
+fatuous
+fatuously
+fatuousness
+Faubourg
+faucal
+fauces
+faucet
+faucets
+faugh
+Faulkner
+Faulknerian
+faulknerian
+fault
+faulted
+faultfinder
+faultfinding
+faultier
+faultily
+faultiness
+faulting
+faultless
+faultlessly
+faultlessness
+faults
+faulty
+faun
+fauna
+faunal
+faunally
+faunistic
+faunistically
+fauntleroy
+Fauntleroy
+faunus
+Faure
+Faust
+Faustian
+Faustus
+fauteuil
+fauve
+fauvism
+fauvist
+faux
+faveolate
+favonian
+favor
+favor's
+favorable
+favorable's
+favorableness
+favorables
+favorably
+favored
+favored's
+favoredly
+favoredness
+favoreds
+favorer
+favorer's
+favorers
+favoring
+favoring's
+favoringly
+favorings
+favorite
+favorite's
+favorites
+favoritism
+favoritism's
+favoritisms
+favorless
+favorlesses
+favors
+favrile
+favus
+fawkes
+Fawkes
+fawn
+fawned
+fawner
+fawning
+fawningly
+fawns
+fawny
+fax
+fax's
+faxes
+fay
+Fayal
+fayalite
+Fayette
+Fayette's
+Fayetteville
+fayum
+faze
+fazed
+fazes
+fazing
+FBI
+FCC
+FDA
+feal
+fealty
+fear
+feared
+fearer
+fearful
+fearfully
+fearfulness
+fearing
+fearless
+fearlessly
+fearlessness
+fearnought
+fears
+fearsome
+fearsomely
+fearsomeness
+feasibility
+feasible
+feasibleness
+feasibly
+feast
+feasted
+feaster
+feasting
+feasts
+feat
+feat's
+feather
+featherbed
+featherbedding
+featherbrain
+featherbrained
+feathered
+featheredge
+featherer
+featherers
+featherhead
+featherheaded
+feathering
+featherless
+featherman
+Featherman
+feathers
+featherstitch
+feathertop
+featherweight
+feathery
+feating
+featly
+feats
+feature
+featured
+featureless
+features
+featuring
+feaze
+Feb
+febricity
+febrifacient
+febrific
+febrifuge
+febrile
+Februaries
+February
+February's
+fecal
+feces
+fechner
+feck
+feckless
+fecklessly
+fecklessness
+feckly
+fecula
+feculence
+feculent
+fecund
+fecundability
+fecundate
+fecundated
+fecundates
+fecundating
+fecundation
+fecundations
+fecundity
+fecundize
+fecundizes
+fed
+fedayee
+federal
+federalism
+federalist
+federalists
+federalization
+federalization's
+federalizations
+federalize
+federalized
+federalizes
+federalizing
+federally
+federals
+federate
+federated
+federates
+federating
+federation
+federations
+federative
+federatively
+fedora
+Fedoseyev
+feds
+fee
+feeble
+feebleminded
+feeblemindedly
+feeblemindedness
+feebleness
+feebler
+feeblest
+feebly
+feed
+feedback
+feedbacks
+feedbag
+feeder
+feeders
+feeding
+feedings
+feedlot
+feeds
+feedstock
+feedstuff
+feeing
+feel
+feeler
+feelers
+feeling
+feelingly
+feelingness
+feelings
+feels
+Feeney
+Feeney's
+fees
+feet
+feetfirst
+feeze
+Feigin
+feign
+feigned
+feigner
+feigning
+feigns
+feininger
+feint
+feinted
+feinting
+feints
+Feisal
+feist
+feistier
+feisty
+felafel
+Felder
+Feldman
+feldspar
+feldspathic
+Felice
+Felicia
+felicific
+felicitate
+felicitated
+felicitates
+felicitating
+felicitation
+felicitator
+felicities
+felicitous
+felicitously
+felicitousness
+felicity
+feline
+felinely
+felines
+felinity
+Felix
+fell
+fella
+fellable
+fellah
+fellas
+fellatio
+fellation
+fellations
+felled
+feller
+fellers
+felling
+fellini
+Fellini
+fellmonger
+fellness
+felloe
+fellow
+fellow's
+fellowly
+fellowman
+fellows
+fellowship
+fellowship's
+fellowships
+fells
+felo
+felon
+felones
+felonious
+feloniously
+feloniousness
+felonry
+felons
+felony
+felsite
+felsitic
+felspar
+felt
+felted
+felting
+felts
+felucca
+female
+female's
+femaleness
+females
+femalize
+femalizes
+Feme
+feminine
+femininely
+feminineness
+femininity
+feminism
+feminist
+feminist's
+feministic
+feminists
+feminity
+feminization
+feminizations
+feminize
+feminized
+feminizes
+feminizing
+femme
+femmes
+femoral
+femur
+femur's
+femurs
+fen
+fence
+fenced
+fenceless
+fencelessness
+fencepost
+fencer
+fencers
+fences
+fencible
+fencing
+fend
+fender
+fenders
+fenestella
+fenestra
+fenestral
+fenestrate
+fenestrated
+fenestrates
+fenestration
+Fenian
+Fenice
+fennec
+fennel
+fennelflower
+fenny
+Fenrir
+Fenton
+Fenton's
+fenugreek
+Fenwick
+feoff
+feoffee
+feoffment
+feral
+ferbam
+Ferber
+Ferber's
+Ferdinand
+ferdinando
+Ferdinando
+fere
+feretory
+fergana
+Fergus
+Ferguson
+Ferguson's
+feria
+ferial
+ferine
+fering
+ferity
+fermanagh
+Fermat
+Fermat's
+ferment
+fermentable
+fermentation
+fermentation's
+fermentations
+fermentative
+fermented
+fermenter
+fermenting
+ferments
+Fermi
+fermion
+fermion's
+fermions
+fermium
+fern
+fern's
+fernandel
+Fernandi
+Fernando
+fernery
+fernlike
+ferns
+ferny
+ferocious
+ferociously
+ferociousness
+ferocity
+Ferrara
+ferrari
+ferrate
+Ferreira
+ferreled
+ferreling
+ferreous
+Ferrer
+Ferrer's
+ferret
+ferreted
+ferreter
+ferreting
+ferrets
+ferrety
+ferriage
+ferric
+ferricyanic
+ferricyanide
+ferried
+ferries
+ferriferous
+ferrimagnet
+ferrimagnetic
+ferrimagnetically
+ferrimagnetism
+ferris
+ferrite
+ferritic
+ferritin
+ferritization
+ferritization's
+ferritizations
+ferro
+ferrocene
+ferrochromium
+ferroconcrete
+ferrocyanic
+ferrocyanide
+ferroelectric
+ferrofluid
+ferrol
+ferromagnesian
+ferromagnet
+ferromagnetic
+ferromagnetism
+ferromanganese
+ferrosilicon
+ferrotype
+ferrous
+ferruginous
+ferrule
+ferry
+ferryboat
+ferrying
+ferryman
+fertile
+fertilely
+fertileness
+fertilities
+fertility
+fertilizable
+fertilizable's
+fertilizables
+fertilization
+fertilization's
+fertilizational
+fertilizational's
+fertilizationals
+fertilizations
+fertilize
+fertilized
+fertilizer
+fertilizers
+fertilizes
+fertilizing
+ferula
+ferule
+fervency
+fervent
+fervently
+fervid
+fervidly
+fervidness
+fervor
+fervor's
+fervorless
+fervorlesses
+fervors
+Fescennine
+fescue
+Fess
+fess
+fesse
+fest
+festal
+fester
+festered
+festering
+festers
+festinate
+festinately
+festination
+festival
+festival's
+festivals
+festive
+festively
+festiveness
+festivities
+festivity
+festoon
+festoonery
+festoons
+festschrift
+feta
+fetal
+fetalization
+fetalization's
+fetalizations
+fetation
+fetch
+fetched
+fetcher
+fetches
+fetching
+fetchingly
+fete
+feted
+feterita
+fetes
+fetial
+feticide
+fetid
+fetidly
+fetidness
+fetiparous
+fetish
+fetishes
+fetishism
+fetishist
+fetishistic
+fetishization
+fetishization's
+fetishizations
+fetishize
+fetishized
+fetishizes
+fetishizing
+fetlock
+fetlocks
+fetologist
+fetology
+fetor
+fetter
+fettered
+fettering
+fetterlock
+fetters
+fettle
+fettled
+fettles
+fettling
+fettuccine
+fetus
+fetus's
+fetuses
+Feuchtwanger
+feud
+feud's
+feudal
+feudalism
+feudalist
+feudalistic
+feudality
+feudalizable
+feudalizable's
+feudalizables
+feudalization
+feudalization's
+feudalizations
+feudalize
+feudalized
+feudalizes
+feudalizing
+feudally
+feudatory
+feudist
+feuds
+Feuerbach
+Feuilleton
+fever
+fevered
+feverfew
+fevering
+feverish
+feverishly
+feverishness
+feverous
+feverously
+fevers
+feverwort
+few
+fewer
+fewest
+fewness
+fews
+fey
+feydeau
+feyness
+fez
+fezes
+Fezzan
+fezzes
+fiacre
+fiance
+fiancee
+Fianna
+fiasco
+fiat
+fiats
+fib
+fibber
+fibbing
+fiber
+fiber's
+fiberboard
+fibered
+Fiberglas
+fiberglass
+fiberization
+fiberize
+fiberized
+fiberizer
+fiberizer's
+fiberizers
+fiberizes
+fiberizing
+fiberless
+fiberlesses
+fibers
+Fibonacci
+fibration
+fibrefill
+fibriallating
+fibriform
+fibril
+fibrillar
+fibrillate
+fibrillated
+fibrillates
+fibrillation
+fibrilliform
+fibrillose
+fibrils
+fibrin
+fibrinogen
+fibrinolysin
+fibrinolysis
+fibrinous
+fibrize
+fibrizer
+fibrizers
+fibrizes
+fibro
+fibroblast
+fibrocement
+fibroid
+fibroin
+fibroma
+fibronectin
+fibrosis
+fibrositis
+fibrous
+fibrously
+fibrousness
+fibrovascular
+fibula
+fibular
+fiche
+fichte
+fichu
+ficino
+fickle
+fickleness
+ficticious
+fictile
+fiction
+fiction's
+fictional
+fictionalization
+fictionalize
+fictionalized
+fictionalizes
+fictionalizing
+fictionally
+fictioneer
+fictioneering
+fictionist
+fictionization
+fictionization's
+fictionizations
+fictionize
+fictionizes
+fictions
+fictitious
+fictitiously
+fictitiousness
+fictive
+fictively
+ficus
+fid
+fiddle
+fiddleback
+fiddled
+fiddlehead
+fiddler
+fiddles
+fiddlestick
+fiddlesticks
+fiddlewood
+fiddling
+fide
+fideicommissary
+fideicommissum
+fideism
+fideist
+fideistic
+fidel
+Fidel
+fidelism
+fidelity
+fidge
+fidget
+fidgeted
+fidgetiness
+fidgeting
+fidgets
+fidgety
+fidging
+fiducial
+fiducially
+fiduciary
+fidus
+fie
+fief
+fiefdom
+field
+fielded
+fielder
+fielders
+fieldfare
+fielding
+fieldmouse
+fieldpiece
+fields
+fieldsman
+fieldstone
+fieldstrip
+fieldwork
+fieldworker
+fieldworkers
+fiend
+fiendish
+fiendishly
+fiendishness
+fiends
+fierce
+fiercely
+fierceness
+fiercer
+fiercest
+fieri
+fierily
+fieriness
+fiery
+fiesole
+fiesta
+fifa
+fife
+FIFO
+fifteen
+fifteens
+fifteenth
+fifth
+fifthly
+fifths
+fifties
+fiftieth
+fifty
+fiftyfold
+fig
+fig's
+figaro
+Figaro
+fight
+fighter
+fighters
+fighting
+fights
+figment
+figs
+figuline
+figurable
+figural
+figurant
+figurate
+figuration
+figurations
+figurative
+figuratively
+figurativeness
+figure
+figured
+figurehead
+figurer
+figurers
+figures
+figurine
+figurines
+figuring
+figurings
+figurize
+figurizes
+figwort
+Fiji
+Fiji's
+Fijian
+Fijian's
+Fijians
+filable
+filament
+filament's
+filamentary
+filamentous
+filaments
+filar
+filaria
+filarial
+filariasis
+filature
+filbert
+filberts
+filch
+filched
+filches
+file
+file's
+filecard
+filed
+filefish
+filename
+filename's
+filenames
+filer
+filers
+files
+filespace
+filestore
+filet
+filets
+filial
+filially
+filiate
+filiation
+filibuster
+filibustered
+filibusterer
+filibustering
+filibusters
+filicide
+filiform
+filigree
+filigreed
+filigreeing
+filing
+filings
+Filipino
+Filipinos
+filippo
+Filippo
+fill
+fillable
+fillagree
+fille
+filled
+filler
+fillers
+filles
+fillet
+filleted
+filleting
+fillets
+fillies
+filling
+fillings
+fillip
+fillips
+fillment
+Fillmore
+fillmore
+fills
+filly
+film
+filmcard
+filmdom
+filmed
+filmic
+filmically
+filmier
+filmily
+filminess
+filming
+filmize
+filmizes
+filmmake
+filmmaker
+filmmakers
+filmmaking
+filmography
+films
+filmset
+filmsetting
+filmstrip
+filmstrips
+filmy
+filoplume
+filose
+filoselle
+fils
+filter
+filter's
+filterability
+filterable
+filtered
+filterer
+filtering
+filters
+filth
+filthier
+filthiest
+filthily
+filthiness
+filthy
+filtrable
+filtrate
+filtrated
+filtrates
+filtrating
+filtration
+filtration's
+filum
+fimble
+fimbria
+fimbrial
+fimbriate
+fimbriated
+fimbriates
+fimbriation
+fin
+fin's
+finable
+finagle
+finagled
+finagler
+finagles
+finagling
+final
+finale
+finale's
+finales
+finalism
+finalist
+finalists
+finality
+finalization
+finalizations
+finalize
+finalized
+finalizes
+finalizing
+finally
+finals
+finance
+financed
+finances
+financial
+financially
+financier
+financier's
+financiers
+financing
+finback
+finch
+finchley
+find
+findable
+finder
+finders
+finding
+findings
+finds
+fine
+fineable
+fined
+finely
+fineness
+finer
+finery
+fines
+finespun
+finesse
+finessed
+finessing
+finest
+finfoot
+finger
+fingerboard
+fingerbreadth
+fingered
+fingerer
+fingering
+fingerings
+fingerlike
+fingerling
+fingermark
+fingermarked
+fingermarking
+fingermarks
+fingernail
+fingernails
+fingerpost
+fingerprint
+fingerprinted
+fingerprinting
+fingerprints
+fingers
+fingerstall
+fingerstalls
+fingertip
+fingertips
+fingo
+finial
+finical
+finically
+finicalness
+finickiness
+finicking
+finicky
+fining
+finis
+finish
+finished
+finisher
+finishers
+finishes
+finishing
+finishings
+finisterre
+finitary
+finite
+finitely
+finiteness
+finites
+finitude
+fink
+Finland
+Finley
+Finley's
+finlike
+Finn
+finnan
+finned
+Finnegan
+finner
+finney
+Finnic
+finning
+Finnish
+finnmark
+Finns
+finny
+fino
+finochio
+fins
+Finsen
+Finsteraarhorn
+fiord
+Fiorello
+fiori
+Fiori
+fiorin
+fipple
+fir
+Firbank
+firdausi
+fire
+firearm
+firearm's
+firearms
+fireback
+fireball
+fireballs
+firebird
+fireboat
+firebomb
+firebox
+firebrand
+firebrat
+firebreak
+firebreaks
+firebrick
+firebug
+fireclay
+firecracker
+firecrackers
+firecrest
+fired
+firedamp
+firedog
+firedrake
+firefight
+firefighters
+firefighting
+firefights
+fireflies
+firefly
+firefly's
+fireguard
+firehouse
+firehouses
+fireless
+firelight
+firelighting
+firelock
+fireman
+firemen
+firenze
+firepan
+fireplace
+fireplace's
+fireplaces
+fireplug
+fireplugs
+firepower
+fireproof
+firer
+fireroom
+firers
+fires
+fireside
+Firestone
+firestorm
+firethorn
+firetrap
+firewall
+firewarden
+firewater
+firewood
+firework
+fireworks
+firing
+firings
+firkin
+firm
+firm's
+firma
+firmament
+firmamental
+firmed
+firmer
+firmest
+firming
+firmly
+firmness
+firms
+firmware
+firmwares
+firry
+first
+firstborn
+firstfruits
+firsthand
+firstling
+firstlings
+firstly
+firsts
+firth
+fisc
+fiscal
+fiscalization
+fiscalization's
+fiscalizations
+fiscalize
+fiscalizes
+fiscally
+fiscals
+Fischbein
+Fischbein's
+Fischer
+fish
+fishability
+fishable
+fishbolt
+fishbowl
+fished
+fisher
+fisheries
+fisherman
+fisherman's
+fishermen
+fishermen's
+fishers
+fishery
+fishes
+fishfinger
+fishgig
+fishhook
+fishier
+fishing
+Fishkill
+fishkill
+fishmeal
+fishmonger
+fishmongers
+fishnet
+fishplate
+fishplates
+fishpond
+fishskin
+fishtail
+fishway
+fishwife
+fishy
+fishyback
+Fisk
+Fiske
+Fiske's
+fissile
+fissility
+fission
+fissionability
+fissionable
+fissional
+fissioned
+fissioning
+fissions
+fissipalmate
+fissiparous
+fissiparously
+fissiparousness
+fissiped
+fissirostral
+fissure
+fissured
+fissures
+fissuring
+fist
+fisted
+fistfight
+fistful
+fistic
+fisticuff
+fisticuffs
+fistmele
+fistnote
+fists
+fistula
+fistulous
+fit
+Fitch
+Fitchburg
+fitchew
+fitful
+fitfully
+fitfulness
+fitly
+fitment
+fitness
+fits
+fitted
+fitter
+fitter's
+fitters
+fittest
+fitting
+fittingly
+fittingness
+fittings
+fittipaldi
+Fitzgerald
+Fitzpatrick
+Fitzroy
+fitzsimmons
+fiume
+five
+fivefold
+fivepenny
+fivepins
+fiver
+fives
+fix
+fixable
+fixate
+fixated
+fixates
+fixating
+fixation
+fixations
+fixative
+fixed
+fixedly
+fixedness
+fixer
+fixers
+fixes
+fixing
+fixings
+fixity
+fixture
+fixture's
+fixtures
+fixups
+Fizeau
+Fizeau's
+fizgig
+fizz
+fizzer
+fizzle
+fizzled
+fizzles
+fizzling
+fizzy
+fjord
+fjords
+FL
+flab
+flabbergast
+flabbergasted
+flabbergasting
+flabbergastingly
+flabbergasts
+flabbier
+flabbily
+flabbiness
+flabby
+flabellate
+flabellum
+flaccid
+flaccidity
+flaccidly
+flack
+flacon
+flag
+flag's
+flagellant
+flagellantism
+flagellants
+flagellar
+flagellate
+flagellated
+flagellates
+flagellating
+flagellation
+flagelliform
+flagellum
+flageolet
+flagged
+flagger
+flagging
+flaggingly
+flaggy
+flagitious
+flagitiously
+flagitiousness
+Flagler
+Flagler's
+flagman
+flagon
+flagpole
+flagpoles
+flagrance
+flagrancies
+flagrancy
+flagrant
+flagrante
+flagrantly
+flags
+flagship
+flagship's
+flagships
+flagstad
+flagstaff
+flagstone
+flail
+flailed
+flailing
+flails
+flair
+flak
+flake
+flaked
+flaker
+flakes
+flakier
+flakiness
+flaking
+flaky
+flam
+flamb
+flambeau
+flamborough
+flamboyance
+flamboyancy
+flamboyant
+flamboyantize
+flamboyantizes
+flamboyantly
+flame
+flamed
+flamelet
+flamelets
+flamen
+flamenco
+flameout
+flameproof
+flamer
+flamers
+flames
+flamethrower
+Flamig
+flaming
+flamingly
+flamingo
+flamingoes
+Flaminian
+flamininus
+flaminius
+flammability
+flammable
+flammables
+flamsteed
+flan
+flan's
+Flanagan
+flanch
+Flanders
+flange
+flanged
+flanges
+flank
+flanked
+flanker
+flankers
+flanking
+flanks
+flannel
+flannel's
+flanneled
+flannelette
+flanneling
+flannels
+flap
+flap's
+flapdoodle
+flapjack
+flapped
+flapper
+flappers
+flapping
+flappy
+flaps
+flare
+flareback
+flared
+flares
+flaring
+flaringly
+flash
+flashback
+flashbacks
+flashboard
+flashbulb
+flashbulbs
+flashcube
+flashcubes
+flashed
+flasher
+flashers
+flashes
+flashgun
+flashguns
+flashier
+flashily
+flashiness
+flashing
+flashlight
+flashlight's
+flashlights
+flashover
+flashovers
+flashtube
+flashy
+flask
+flasket
+flat
+flatbed
+flatboat
+flatcap
+flatcar
+flatette
+flatfeet
+flatfish
+flatfishes
+flatfoot
+flatfooted
+flatfoots
+flathead
+flatiron
+flatirons
+flatland
+flatlander
+flatlands
+flatlet
+flatlets
+flatling
+flatly
+flatmate
+flatmates
+flatness
+flatnesses
+flats
+flatted
+flatten
+flattened
+flattener
+flattening
+flattens
+flatter
+flattered
+flatterer
+flattering
+flatteringly
+flatters
+flattery
+flattest
+flatting
+flattish
+flattop
+flatulence
+flatulency
+flatulent
+flatulently
+flatus
+flatware
+flatways
+flatwise
+flatwork
+flatworm
+flaubert
+flaunch
+flaunt
+flaunted
+flaunting
+flauntingly
+flaunts
+flaunty
+flautist
+flavescent
+flavin
+flavine
+flavone
+flavoprotein
+flavopurpurin
+flavor
+flavor's
+flavored
+flavorer
+flavorer's
+flavorers
+flavorful
+flavorfully
+flavoring
+flavorings
+flavorless
+flavorlesses
+flavorous
+flavors
+flavorsome
+flavory
+flaw
+flawed
+flawing
+flawless
+flawlessly
+flawlessness
+flaws
+flax
+flaxen
+flaxier
+flaxman
+flaxseed
+flaxy
+flay
+flea
+flea's
+fleabag
+fleabane
+fleabite
+fleabites
+fleam
+fleapit
+fleapits
+fleas
+fleawort
+fleck
+flecked
+flecker
+flecking
+flecks
+flection
+flective
+fled
+Fledermaus
+fledermaus
+fledge
+fledged
+fledges
+fledging
+fledgling
+fledgling's
+fledglings
+fledgy
+flee
+fleece
+fleece's
+fleeced
+fleeces
+fleecier
+fleecy
+fleeing
+fleer
+fleeringly
+flees
+fleet
+fleetest
+fleeting
+fleetingly
+fleetingness
+fleetly
+fleetness
+fleets
+Fleetwood
+Fleischman
+fleischman
+Fleisher
+fleisher
+Fleming
+Flemings
+Flemish
+Flemished
+Flemishes
+Flemishing
+Flensburg
+flense
+flesh
+fleshed
+flesher
+fleshes
+fleshier
+fleshiness
+fleshing
+fleshings
+fleshly
+fleshment
+fleshpot
+fleshpots
+fleshy
+fletch
+fletched
+Fletcher
+fletcher
+Fletcherism
+Fletcherize
+Fletcherizes
+fletches
+fletching
+fletching's
+fletchings
+fleurette
+fleury
+flew
+flews
+flex
+flexed
+flexibilities
+flexibility
+flexible
+flexibly
+flexile
+flexing
+flexion
+flexitime
+flexo
+flexographic
+flexographically
+flexography
+flexor
+flexuous
+flexuously
+flexural
+flexure
+fley
+fleysome
+flibbertigibbet
+flibbertigibbety
+flick
+flicked
+flicker
+flickered
+flickering
+flickeringly
+flickery
+flicking
+flicks
+flier
+fliers
+flies
+flight
+flight's
+flightier
+flightily
+flightiness
+flightless
+flights
+flighty
+flimflam
+flimflammed
+flimflammer
+flimflamming
+flimsier
+flimsies
+flimsily
+flimsiness
+flimsy
+flinch
+flinched
+flincher
+flinches
+flinching
+flinders
+fling
+fling's
+flinger
+flinging
+flings
+flint
+flintier
+flintily
+flintiness
+flintless
+flintlike
+flintlock
+flints
+Flintshire
+flinty
+flip
+flipflop
+flippancy
+flippant
+flippantly
+flipped
+flipper
+flippers
+flipping
+flips
+flirt
+flirtation
+flirtations
+flirtatious
+flirtatiously
+flirtatiousness
+flirted
+flirter
+flirting
+flirts
+flirty
+flit
+flitch
+flite
+flits
+flitted
+flitter
+flitting
+flivver
+Flo
+Flo's
+float
+floatage
+floatation
+floated
+floater
+floaters
+floating
+floatplane
+floats
+floaty
+floc
+floccose
+flocculant
+flocculants
+flocculate
+flocculated
+flocculates
+flocculating
+flocculation
+flocculent
+flocculus
+floccus
+flock
+flocked
+flocking
+flocks
+flodden
+floe
+floes
+flog
+flogged
+flogger
+flogging
+flogs
+flong
+flood
+flooded
+flooder
+floodgate
+flooding
+floodlight
+floodlit
+floodplain
+floods
+floodwall
+floodwater
+floodwater's
+floodwaters
+floodway
+flooey
+floor
+floorage
+floorboard
+floorboards
+floored
+floorer
+flooring
+floorings
+floors
+floorwalker
+floozie
+floozies
+floozy
+flop
+flop's
+flophouse
+flophouses
+flopover
+flopovers
+flopped
+flopper
+floppers
+floppier
+floppies
+floppily
+floppiness
+flopping
+floppy
+floppy's
+flops
+flora
+floral
+floralize
+floralizes
+florally
+floreated
+Florence
+Florentine
+flores
+florescence
+florescent
+floret
+florey
+floriate
+floriated
+floriation
+floriations
+floribunda
+florican
+floricultural
+floriculturally
+floriculture
+floriculturist
+florid
+Florida
+Florida's
+Floridian
+Floridians
+floridity
+floridly
+floridness
+floriferous
+floriferously
+floriferousness
+florigen
+florigenic
+florilegium
+florin
+florio
+florist
+floristic
+floristically
+floristics
+floristry
+florists
+floruit
+flory
+flos
+floss
+flossed
+flosses
+flossier
+flossing
+flossy
+flotage
+flotation
+flotations
+flotilla
+flotillas
+flotow
+flotsam
+flounce
+flounced
+flounces
+flouncing
+flouncy
+flounder
+floundered
+floundering
+flounders
+flour
+floured
+flourish
+flourished
+flourisher
+flourishes
+flourishing
+flourishingly
+flours
+floury
+flout
+flouted
+flouter
+flouting
+flouts
+flow
+flowability
+flowage
+flowchart
+flowcharting
+flowcharts
+flowed
+flower
+flowerage
+flowerbed
+flowered
+flowerer
+floweret
+floweriness
+flowering
+flowerless
+flowerlike
+flowerpot
+flowers
+flowery
+flowing
+flowingly
+flown
+flows
+flowstone
+Floyd
+flu
+flub
+flubbed
+flubbing
+flubs
+fluctuant
+fluctuate
+fluctuated
+fluctuates
+fluctuating
+fluctuation
+fluctuations
+flue
+fluegelhorn
+fluency
+fluent
+fluently
+fluff
+fluffier
+fluffiest
+fluffiness
+fluffs
+fluffy
+Flugelhorn
+fluid
+fluidal
+fluidally
+fluidextract
+fluidic
+fluidics
+fluidity
+fluidization
+fluidization's
+fluidizations
+fluidize
+fluidized
+fluidizer
+fluidizes
+fluidizing
+fluidly
+fluidness
+fluidounce
+fluidram
+fluids
+fluke
+flukey
+flukier
+fluky
+flume
+flumed
+flumes
+fluming
+flummery
+flummox
+flump
+flumped
+flumping
+flumps
+flung
+flunk
+flunked
+flunker
+flunkeys
+flunking
+flunks
+flunky
+fluor
+fluorene
+fluoresce
+fluorescein
+fluorescence
+fluorescent
+fluorescer
+fluoresces
+fluoric
+fluoridate
+fluoridated
+fluoridates
+fluoridating
+fluoridation
+fluoridations
+fluoride
+fluorides
+fluoridization
+fluoridization's
+fluoridizations
+fluoridize
+fluoridizes
+fluorimeter
+fluorimeter's
+fluorimeters
+fluorimetric
+fluorimetry
+fluorinate
+fluorinated
+fluorinates
+fluorinating
+fluorination
+fluorinations
+fluorine
+fluorite
+fluorocarbon
+fluorometer
+fluorophore
+fluoroscope
+fluoroscopic
+fluoroscopy
+fluorosis
+fluorosulphuric
+fluorspar
+flurried
+flurries
+flurry
+flurrying
+flush
+flushable
+flushed
+flushes
+flushing
+flushness
+fluster
+flustered
+flustering
+flusters
+flute
+flute's
+fluted
+flutelike
+fluter
+flutes
+fluting
+flutist
+flutter
+flutterboard
+fluttered
+flutterer
+fluttering
+flutters
+fluttery
+fluvial
+fluviatile
+fluviomarine
+flux
+fluxed
+fluxes
+fluxion
+fluxional
+fluxmeter
+fluxmeters
+fly
+flyable
+flyaway
+flyback
+flyblow
+flyblown
+flyboat
+flyboats
+flybook
+flyby
+flybys
+flycatcher
+flycatchers
+flyer
+flyer's
+flyers
+flying
+flyleaf
+flyleaves
+flyman
+Flynn
+flyover
+flyovers
+flypaper
+flypast
+flypasts
+Flysch
+flyspeck
+flyswatter
+flyte
+flytier
+flyting
+flytrap
+flytraps
+flyway
+flyweight
+flywheel
+flywheels
+FM
+FMC
+foal
+foals
+foam
+foamed
+foamer
+foamflower
+foamier
+foaminess
+foaming
+foamless
+foams
+foamy
+fob
+fobbing
+focal
+focalization
+focalization's
+focalizations
+focalize
+focalized
+focalizes
+focalizing
+focally
+foch
+foci
+fock
+focus
+focusable
+focused
+focuser
+focuses
+focusing
+focusless
+fodder
+fodgel
+foe
+foe's
+foehn
+foeman
+foes
+foetal
+foetation
+foeticide
+foetor
+fog
+fog's
+Fogarty
+fogbound
+fogbow
+fogbows
+fogdog
+fogey
+fogeys
+fogged
+fogger
+foggest
+foggia
+foggier
+foggiest
+foggily
+fogginess
+fogging
+foggy
+foghorn
+foghorns
+fogies
+fogless
+fogs
+fogy
+fogyish
+fogyism
+foible
+foibles
+foie
+foil
+foiled
+foiling
+foils
+foilsman
+foin
+Foism
+Foison
+foist
+foisted
+foisting
+foists
+Fokine
+Fokker
+folacin
+fold
+foldable
+foldaway
+foldboat
+foldboater
+foldboating
+folded
+folder
+folderol
+folders
+folding
+foldings
+foldout
+foldouts
+folds
+Foley
+Foley's
+folia
+foliaceous
+foliage
+foliaged
+foliages
+foliar
+foliate
+foliated
+foliates
+foliating
+foliation
+foliations
+folic
+folie
+folio
+foliolate
+folios
+foliose
+foliot
+foliots
+folium
+folk
+folk's
+folkestone
+folketing
+folkish
+folkishness
+folklike
+folklore
+folkloric
+folklorish
+folklorist
+folkloristic
+folkmoot
+folks
+folksier
+folksily
+folksiness
+folksinger
+folksinger's
+folksingers
+folksinging
+folksong
+folksongs
+folksy
+folktale
+folktale's
+folktales
+folkway
+folkways
+follicle
+follicles
+follicular
+folliculate
+folliculated
+folliculin
+follies
+follow
+followed
+follower
+followers
+followership
+followeth
+following
+followings
+follows
+followup
+followup's
+followups
+folly
+folsom
+Folsom
+Fomalhaut
+Fomalhaut's
+foment
+fomentation
+fomentations
+fomented
+fomenter
+fomenting
+foments
+fond
+fonda
+fondant
+fondants
+fonder
+fondest
+fondle
+fondled
+fondler
+fondles
+fondling
+fondly
+fondness
+fonds
+fondue
+fondues
+fonseca
+font
+font's
+Fontaine
+Fontaine's
+Fontainebleau
+fontal
+fontana
+Fontana
+fontanelle
+fonteyn
+fonts
+Foochow
+food
+food's
+foodless
+foodlessness
+foods
+foodstuff
+foodstuff's
+foodstuffs
+fool
+fooled
+foolery
+foolhardily
+foolhardiness
+foolhardy
+fooling
+foolish
+foolishly
+foolishness
+foolproof
+fools
+foolscap
+foolscap's
+foot
+footage
+footages
+football
+football's
+footballed
+footballer
+footballers
+footballs
+footboard
+footboards
+footboy
+footboys
+footbridge
+footbridges
+footcandle
+footcloth
+Foote
+footed
+footer
+footers
+footfall
+footfalls
+footgear
+foothill
+foothills
+foothold
+footholds
+footing
+footings
+footle
+footled
+footler
+footles
+footless
+footlessly
+footlessness
+footlight
+footlights
+footlike
+footling
+footlocker
+footloose
+footman
+footmark
+footmen
+footnote
+footnote's
+footnotes
+footpace
+footpad
+footpads
+footpath
+footpaths
+footplate
+footplates
+footprint
+footprint's
+footprints
+footrace
+footrest
+footrests
+footrope
+footropes
+foots
+footsie
+footslog
+footslogged
+footslogger
+footslogging
+footslogs
+footsore
+footsoreness
+footstalk
+footstall
+footstep
+footsteps
+footstock
+footstool
+footstools
+footwall
+footway
+footways
+footwear
+footwork
+footworn
+footy
+foozle
+foozled
+fop
+foppery
+fopping
+foppish
+foppishly
+foppishness
+fops
+for
+fora
+forage
+foraged
+forager
+forages
+foraging
+foramen
+foraminifer
+foraminifera
+forasmuch
+foray
+foray's
+forayer
+forays
+forbade
+forbear
+forbear's
+forbearance
+forbearer
+forbearing
+forbears
+Forbes
+forbid
+forbiddance
+forbidden
+forbidder
+forbidding
+forbiddingly
+forbiddingness
+forbids
+forbode
+forbore
+forborne
+forby
+forbye
+force
+force's
+forced
+forcedly
+forcefield
+forcefield's
+forcefields
+forceful
+forcefully
+forcefulness
+forceless
+forcemeat
+forceps
+forcepslike
+forcer
+forces
+forcible
+forcibleness
+forcibly
+forcing
+ford
+fordable
+Fordham
+fordo
+fordone
+fords
+fore
+forearm
+forearm's
+forearmed
+forearms
+forebear
+forebears
+forebode
+foreboded
+foreboder
+forebodes
+foreboding
+forebodingly
+forebodingness
+forebodings
+forebrain
+forecast
+forecasted
+forecaster
+forecasters
+forecasting
+forecastle
+forecastles
+forecasts
+foreclose
+foreclosed
+forecloses
+foreclosing
+foreclosure
+forecourse
+forecourt
+forecourts
+foredeck
+foredo
+foredoom
+foredoomed
+forefather
+forefather's
+forefathers
+forefeel
+forefeet
+forefend
+forefinger
+forefinger's
+forefingers
+forefoot
+forefront
+foregather
+forego
+foregoer
+foregoes
+foregoing
+foregone
+foreground
+foregrounds
+foregut
+forehand
+forehanded
+forehandedly
+forehandedness
+forehead
+forehead's
+foreheads
+forehock
+foreign
+foreigner
+foreigners
+foreignism
+foreignization
+foreignization's
+foreignizations
+foreignize
+foreignizes
+foreignly
+foreignness
+foreigns
+forejudge
+forejudgment
+forejudgment's
+forejudgments
+foreknow
+foreknowledge
+foreknown
+forelady
+foreland
+foreleg
+forelimb
+forelock
+foreman
+foremanship
+foremast
+foremasts
+foremen
+foremost
+foremother
+forename
+forenamed
+forenames
+forenoon
+forensic
+forensical
+forensically
+forensics
+foreordain
+foreordained
+foreordaining
+foreordains
+foreordination
+forepart
+forepassed
+forepast
+forepaw
+forepaws
+forepeak
+foreplay
+forequarter
+forequarters
+forereach
+forerun
+forerunner
+forerunners
+foresaid
+foresail
+foresaw
+foresee
+foreseeable
+foreseeing
+foreseen
+foreseer
+foresees
+foreshadow
+foreshadowed
+foreshadower
+foreshadowing
+foreshadows
+foreshank
+foresheet
+foreshock
+foreshore
+foreshorten
+foreshortened
+foreshortening
+foreshortens
+foreshow
+foreside
+foresight
+foresighted
+foresightedly
+foresightedness
+foresightful
+foreskin
+forespeak
+forespent
+forest
+forestage
+forestal
+forestall
+forestalled
+forestaller
+forestalling
+forestallment
+forestalls
+forestation
+forestay
+forestaysail
+forested
+forester
+foresters
+forestial
+forestry
+forests
+foreswear
+foresworn
+foretaste
+foretell
+foretellable
+foreteller
+foretelling
+foretells
+forethought
+forethought's
+forethoughtfully
+forethoughtfulness
+forethougtful
+foretime
+foretoken
+foretold
+foretooth
+foretop
+foretriangle
+forever
+forevermore
+foreverness
+forewarn
+forewarned
+forewarner
+forewarning
+forewarnings
+forewarns
+forewent
+forewind
+forewing
+forewoman
+foreword
+foreworn
+foreyard
+forfar
+forfeit
+forfeitable
+forfeited
+forfeiter
+forfeiters
+forfeiting
+forfeits
+forfeiture
+forfeitures
+forfend
+forfended
+forfending
+forfends
+forficate
+forgat
+forgather
+forgave
+forge
+forgeability
+forgeable
+forged
+forger
+forgeries
+forgers
+forgery
+forgery's
+forges
+forget
+forgetful
+forgetfully
+forgetfulness
+forgetive
+forgets
+forgettable
+forgettably
+forgetter
+forgetting
+forging
+forgivable
+forgivably
+forgive
+forgiveable
+forgiveably
+forgiven
+forgiveness
+forgiver
+forgives
+forgiving
+forgivingly
+forgivingness
+forgo
+forgoer
+forgoes
+forgoing
+forgone
+forgot
+forgotten
+forint
+forjudge
+fork
+forked
+forker
+forkful
+forkier
+forking
+forklift
+forklike
+forks
+forky
+forlorn
+forlornly
+forlornness
+form
+forma
+formability
+formable
+formal
+formaldehyde
+formalin
+formalism
+formalism's
+formalisms
+formalist
+formalistic
+formalistically
+formalities
+formality
+formalizable
+formalization
+formalization's
+formalizations
+formalize
+formalized
+formalizer
+formalizers
+formalizes
+formalizing
+formally
+formalness
+formals
+formant
+formants
+format
+formate
+formated
+formates
+formating
+formation
+formation's
+formational
+formations
+formative
+formatively
+formativeness
+formats
+formatted
+formatter
+formatter's
+formatters
+formatting
+forme
+formed
+former
+formerly
+formers
+formfeed
+formfeeds
+formfitting
+formful
+formic
+Formica
+formicary
+formicate
+formication
+formidability
+formidable
+formidableness
+formidably
+forming
+formless
+formlessly
+formlessness
+Formosa
+Formosan
+forms
+formula
+formula's
+formulae
+formulaic
+formulaically
+formularization
+formularizations
+formularize
+formularized
+formularizer
+formularizes
+formularizing
+formulary
+formulas
+formulate
+formulated
+formulates
+formulating
+formulation
+formulations
+formulator
+formulator's
+formulators
+formulism
+formulization
+formulizations
+formulize
+formulized
+formulizes
+formulizing
+formwork
+formyl
+Fornax
+fornenst
+fornicate
+fornicated
+fornicates
+fornicating
+fornication
+fornications
+fornicator
+fornicators
+fornix
+forrader
+forrarder
+Forrester
+forsake
+forsaken
+forsakes
+forsaking
+forsee
+forseen
+forsook
+forsooth
+forspeak
+forspent
+forster
+forsterite
+forswear
+forswears
+forswore
+forsworn
+Forsythe
+Forsythe's
+Forsythia
+fort
+fort's
+fortaleza
+fortalice
+forte
+fortepiano
+fortes
+Fortescue
+Fortescue's
+forth
+forthcome
+forthcoming
+forthright
+forthrightly
+forthrightness
+forthwith
+fortier
+forties
+fortieth
+fortification
+fortifications
+fortified
+fortifier
+fortifies
+fortify
+fortifying
+fortin
+fortiori
+fortis
+fortissimo
+fortitude
+fortman
+fortnight
+fortnightly
+Fortran
+Fortran's
+fortress
+fortress's
+fortresses
+forts
+fortuitism
+fortuitous
+fortuitously
+fortuitousness
+fortuity
+fortuna
+fortunate
+fortunately
+fortunateness
+fortunates
+fortune
+fortune's
+fortuned
+fortunes
+fortuning
+forty
+fortyfold
+forum
+forum's
+forumize
+forumizes
+forums
+forward
+forwarded
+forwarder
+forwarders
+forwarding
+forwardly
+forwardness
+forwards
+forwent
+forwhy
+forworn
+forzando
+fosbury
+Foss
+fossa
+fossate
+fosse
+fossette
+fossick
+fossil
+fossiled
+fossiliferous
+fossilizable
+fossilizable's
+fossilizables
+fossilization
+fossilization's
+fossilizations
+fossilize
+fossilized
+fossilizes
+fossilizing
+fossils
+fossorial
+foster
+fosterage
+fostered
+fosterer
+fostering
+fosterite
+fosterling
+fosterlings
+fosters
+fotheringhay
+fou
+foucault
+foucquet
+foudroyant
+fought
+foul
+foulard
+fouled
+fouler
+foulest
+fouling
+foully
+foulmouth
+foulmouthed
+foulness
+fouls
+found
+foundation
+foundation's
+foundational
+foundationally
+foundationless
+foundations
+founded
+founder
+foundered
+foundering
+founderous
+founders
+founding
+foundling
+foundlings
+foundress
+foundries
+foundrous
+foundry
+foundry's
+founds
+fount
+fount's
+fountain
+fountain's
+fountainhead
+fountains
+founts
+Fouquet
+four
+fourdrinier
+fourfold
+Fourier
+Fourier's
+Fourierism
+Fournet
+Fournier
+fourpence
+fourpenny
+fours
+fourscore
+foursome
+foursomes
+foursquare
+fourteen
+fourteener
+fourteens
+fourteenth
+fourth
+fourthly
+fourths
+fovea
+foveola
+fowey
+fowl
+fowler
+fowliang
+fowling
+fowls
+fox
+fox's
+foxed
+foxes
+foxfire
+foxglove
+Foxhall
+foxhole
+foxholes
+foxhound
+foxier
+foxily
+foxiness
+foxing
+foxtail
+foxtrot
+foxtrot's
+foxtrots
+foxy
+foyboat
+foyer
+FPC
+FPS
+fracas
+fracases
+fractal
+fractal's
+fractals
+fracted
+fraction
+fraction's
+fractional
+fractionalization
+fractionalize
+fractionalized
+fractionalizes
+fractionalizing
+fractionally
+fractionate
+fractionated
+fractionates
+fractionating
+fractionation
+fractionations
+fractionator
+fractionators
+fractioned
+fractioning
+fractionization
+fractionization's
+fractionizations
+fractionize
+fractionizes
+fractions
+fractious
+fractiously
+fractiousness
+fractocumulus
+fractostratus
+fracture
+fractured
+fractures
+fracturing
+frae
+fraenum
+frag
+fragged
+fragging
+fragile
+fragilely
+fragility
+fragment
+fragmental
+fragmentally
+fragmentarily
+fragmentariness
+fragmentary
+fragmentate
+fragmentated
+fragmentates
+fragmentating
+fragmentation
+fragmentations
+fragmented
+fragmenting
+fragmentize
+fragmentized
+fragmentizer
+fragmentizes
+fragmentizing
+fragments
+fragonard
+fragrance
+fragrance's
+fragrances
+fragrancy
+fragrant
+fragrantly
+frags
+frail
+frailer
+frailest
+frailly
+frailness
+frailties
+frailty
+fraise
+fraktur
+framable
+frambesia
+framboesia
+frame
+frame's
+frameable
+framed
+framer
+framers
+frames
+framework
+framework's
+frameworks
+framing
+framings
+Fran
+Fran's
+franc
+franca
+francaise
+Francaise
+France
+France's
+Frances
+Francesca
+francesca
+Francescatti
+Francesco
+francesco
+franchise
+franchise's
+franchised
+franchisee
+franchiser
+franchises
+franchising
+franchisor
+Francie
+francie
+Francine
+Francine's
+Francis
+Franciscan
+Franciscans
+Francisco
+francium
+Francize
+Francizes
+Franck
+Franco
+Francois
+francois
+Francoise
+Francoise's
+francolin
+Franconia
+Franconian
+Francophile
+Francophobe
+Francophone
+francs
+franger
+frangibility
+frangible
+frangipane
+frangipani
+Franglais
+frank
+frankalmoign
+franked
+Frankel
+Frankel's
+Frankenstein
+franker
+frankest
+Frankford
+Frankfort
+Frankfurt
+frankfurter
+frankfurters
+Frankie
+frankincense
+franking
+Frankish
+franklin
+Franklinization
+Franklinization's
+Franklinizations
+frankly
+frankness
+frankpledge
+franks
+franny
+Franny
+frantic
+frantically
+franticly
+franticness
+Franz
+frap
+frappe
+frapping
+Fraser
+Fraser's
+frass
+frat
+fratchy
+frater
+fraternal
+fraternalism
+fraternally
+fraternities
+fraternity
+fraternity's
+fraternization
+fraternization's
+fraternizations
+fraternize
+fraternized
+fraternizer
+fraternizers
+fraternizes
+fraternizing
+fratricidal
+fratricide
+Frau
+fraud
+fraud's
+frauds
+fraudulence
+fraudulent
+fraudulently
+fraudulentness
+Frauenfeld
+fraught
+fraughted
+fraughting
+fraughts
+Fraunhofer
+fraxinella
+fray
+frayed
+fraying
+Frayne
+frayne
+frays
+Frazer
+Frazier
+Frazil
+frazzle
+frazzled
+frazzles
+frazzling
+freak
+freak's
+freakier
+freakish
+freakishly
+freakishness
+freaks
+freaky
+Freccia
+freckle
+freckled
+freckles
+freckling
+freckly
+Fred
+Freda
+Freddie
+Freddy
+Freddy's
+Frederic
+Fredericia
+Frederick
+Fredericks
+Fredericksburg
+Fredericksburg's
+Frederico
+Fredericton
+Fredericton's
+Frederiksberg
+Fredholm
+Fredholm's
+Fredrick
+fredrick
+Fredrickson
+Fredrikstad
+free
+freebie
+freeboard
+freeboot
+freebooter
+freebooters
+freeborn
+freed
+freedman
+freedmen
+freedom
+freedom's
+freedomites
+freedoms
+freedwoman
+freehand
+freehanded
+freehandedly
+freehearted
+freeheartedly
+freehold
+freeholder
+freeholders
+freeing
+freeings
+freelance
+freeload
+freeloader
+freely
+freeman
+freemartin
+freemason
+Freemason
+freemasonry
+freemen
+freeness
+Freeport
+freer
+frees
+freesheet
+freesheets
+Freesia
+freest
+freestanding
+freestone
+freestyle
+freethink
+freethinker
+freethinkers
+freethinking
+Freetown
+Freetown's
+freeway
+freeway's
+freeways
+freewheel
+freewheeled
+freewheeler
+freewheelers
+freewheeling
+freewheelingness
+freewheels
+freewill
+freeze
+freezer
+freezers
+freezes
+freezing
+Freiburg
+Freida
+freida
+freight
+freightage
+freighted
+freighter
+freighters
+freighting
+freightliner
+freights
+fremantle
+fremitus
+French
+French's
+frenchification
+frenchify
+Frenchize
+Frenchizes
+Frenchman
+Frenchmen
+Frenchy
+frenetic
+frenetically
+Freni
+frenulum
+frenum
+frenzied
+frenziedly
+frenzies
+frenzy
+frenzying
+freon
+frequence
+frequencies
+frequency
+frequent
+frequentation
+frequentations
+frequentative
+frequentatives
+frequented
+frequenter
+frequenters
+frequenting
+frequently
+frequentness
+frequents
+fresco
+Frescobaldi
+frescoed
+frescoes
+frescoing
+frescos
+fresh
+freshen
+freshened
+freshener
+fresheners
+freshening
+freshens
+fresher
+freshers
+freshest
+freshet
+freshly
+freshman
+freshmen
+freshness
+freshwater
+Fresnel
+Fresno
+fret
+fretful
+fretfully
+fretfulness
+frets
+fretted
+fretting
+fretwork
+Freud
+Freudian
+Frey
+Freya
+Freya's
+Freytag
+Fri
+friability
+friable
+friableness
+friar
+friar's
+friarbird
+friarly
+friars
+friary
+fribble
+fribbled
+fribbles
+fribbling
+Fribourg
+Fricandeau
+fricasee
+fricassee
+frication
+fricative
+fricatives
+Frick
+friction
+friction's
+frictional
+frictionally
+frictionize
+frictionizes
+frictionless
+frictionlessly
+frictions
+Friday
+Friday's
+Fridays
+fridge
+fridge's
+fridges
+fried
+Friedman
+Friedrich
+Friedrich's
+friend
+friend's
+friendless
+friendlessness
+friendlier
+friendlies
+friendliest
+friendlily
+friendliness
+friendly
+friends
+friendship
+friendship's
+friendships
+frier
+fries
+Friesian
+Friesland
+Friesland's
+frieze
+frieze's
+friezes
+frig
+frigate
+frigate's
+frigates
+Frigg
+Frigga
+frigging
+fright
+frighten
+frightened
+frightening
+frighteningly
+frightens
+frightful
+frightfully
+frightfulness
+frigid
+Frigidaire
+frigidity
+frigidly
+frigidness
+frigorific
+Frijol
+frill
+frill's
+frilled
+frillery
+frills
+frilly
+fringe
+fringed
+fringes
+fringier
+fringilline
+fringing
+fringy
+frippery
+frippet
+Frisbee
+Frisch
+Frisco
+Frisian
+frisk
+frisked
+frisker
+frisket
+friskier
+friskily
+friskiness
+frisking
+frisks
+frisky
+frisson
+frissons
+frit
+fritillary
+frito
+Frito
+fritted
+fritter
+fritterer
+fritters
+fritting
+Fritz
+Friuli
+Friulian
+frivol
+frivoled
+frivoler
+frivoling
+frivolity
+frivolous
+frivolously
+frivolousness
+Frizette
+frizz
+frizzier
+frizzily
+frizziness
+frizzle
+frizzled
+frizzles
+frizzlier
+frizzling
+frizzly
+frizzy
+fro
+Frobisher
+frock
+frock's
+frocked
+frocking
+frocks
+froe
+froebel
+frog
+frog's
+frogfish
+frogged
+frogging
+froghopper
+frogman
+frogmarch
+frogmen
+frogmouth
+frogs
+frogspawn
+froissart
+frolic
+frolick
+frolicked
+frolicking
+frolicks
+frolics
+frolicsome
+frolicsomely
+frolicsomeness
+from
+frome
+Froment
+fromenty
+fromm
+frond
+frond's
+fronde
+fronded
+frondescence
+frondeur
+frondose
+frondosely
+fronds
+frons
+front
+frontage
+frontal
+frontality
+frontally
+fronted
+frontenac
+frontier
+frontier's
+frontiers
+frontiersman
+frontiersmen
+fronting
+frontispiece
+frontispieces
+frontless
+frontlet
+frontogenesis
+frontolysis
+fronton
+frontrunner
+fronts
+frontwards
+frore
+frost
+Frostbelt
+Frostbelt's
+frostbite
+frostbiting
+frostbitten
+frosted
+frostier
+frostily
+frostiness
+frosting
+frosts
+frostwork
+frosty
+froth
+frothier
+frothily
+frothiness
+frothing
+froths
+frothy
+frottage
+froude
+froufrou
+frow
+froward
+frowardly
+frowardness
+frown
+frowned
+frowner
+frowning
+frowningly
+frowns
+frowsier
+frowst
+frowstier
+frowsty
+frowsy
+frowzier
+frowzy
+froze
+frozen
+frozenly
+frozenness
+fructiferous
+fructification
+fructifications
+fructify
+fructose
+fructose's
+fructoses
+fructuous
+fructuously
+Fruehauf
+Fruehauf's
+frugal
+frugality
+frugally
+frugivorous
+fruit
+fruit's
+fruitage
+fruitarian
+fruitcake
+fruited
+fruiter
+fruiterer
+fruitful
+fruitfully
+fruitfulness
+fruitier
+fruition
+fruitless
+fruitlessly
+fruitlessness
+fruitlet
+fruits
+fruity
+frumentaceous
+frumenty
+frump
+frumpier
+frumpish
+frumps
+frumpy
+frunze
+frustrate
+frustrated
+frustrater
+frustrates
+frustrating
+frustratingly
+frustration
+frustrations
+frustule
+frustum
+frutescent
+fry
+Frye
+Frye's
+fryer
+frying
+FSF
+FSF'S
+Ft
+ft
+FTC
+ftp
+FTP
+ftper
+ftpers
+ftping
+ftpings
+ftps
+fuad
+fubsy
+Fuchs
+fuchsia
+fuchsin
+fuck
+fuck's
+fucked
+fucker
+fucker's
+fuckers
+fucking
+fucks
+fuckwit
+fucoid
+fucose
+fucus
+fuddle
+fuddled
+fuddles
+fuddling
+fudge
+fudged
+fudges
+fudging
+Fuegian
+fuel
+fueled
+fueler
+fuelers
+fueling
+fuelizer
+fuelizer's
+fuelizers
+fuels
+fugacious
+fugacity
+fugal
+fugally
+fugard
+fugato
+fugger
+fugio
+fugitive
+fugitive's
+fugitively
+fugitiveness
+fugitives
+fugue
+fuguist
+Fuji
+Fujitsu
+Fujitsu's
+fukien
+fukuda
+fukuoka
+fukushima
+fula
+fulani
+Fulbright
+fulbright
+Fulbright's
+Fulbrights
+fulcra
+fulcrum
+fulfill
+fulfilled
+fulfiller
+fulfilling
+fulfillment
+fulfillment's
+fulfillments
+fulfills
+fulgent
+fulgently
+fulgurant
+fulgurate
+fulgurated
+fulgurates
+fulgurating
+fulguration
+fulgurations
+fulgurite
+fulgurous
+Fulham
+fuliginous
+fuliginously
+full
+fullback
+fullbacking
+fuller
+Fullerton
+fullest
+fullmouthed
+fullness
+fullword
+fullword's
+fullwords
+fully
+fulmar
+fulminant
+fulminate
+fulminated
+fulminates
+fulminating
+fulmination
+fulminations
+fulminator
+fulminators
+fulminic
+fulminous
+fulness
+fulsome
+fulsomely
+fulsomeness
+Fulton
+Fulton's
+fulvous
+fum
+fumarate
+fumaric
+fumarole
+fumatorium
+fumatory
+fumble
+fumbled
+fumbler
+fumbles
+fumbling
+fumblingly
+fume
+fumed
+fumes
+fumigant
+fumigate
+fumigated
+fumigates
+fumigation
+fumigations
+fumigator
+fumigators
+fuming
+fumitory
+fumy
+fun
+funambulist
+funchal
+function
+function's
+functional
+functionalism
+functionalist
+functionalistic
+functionalists
+functionalities
+functionality
+functionalize
+functionalizes
+functionally
+functionals
+functionary
+functioned
+functioning
+functionize
+functionizes
+functionless
+functions
+functor
+functor's
+functorial
+functors
+fund
+fundament
+fundamental
+fundamentalism
+fundamentalist
+fundamentalist's
+fundamentalistic
+fundamentalists
+fundamentally
+fundamentals
+funded
+funder
+funders
+fundi
+funding
+fundraiser
+fundraiser's
+fundraisers
+fundraising
+funds
+fundus
+fundy
+funeral
+funeral's
+funeralize
+funeralizes
+funerals
+funerary
+funereal
+funereally
+funfair
+fungal
+fungi
+fungibility
+fungible
+fungicidal
+fungicidally
+fungicide
+fungicides
+fungiform
+fungistat
+fungo
+fungoes
+fungoid
+fungous
+fungus
+funguses
+funicle
+funicular
+funiculus
+funigating
+funk
+funkier
+funkiness
+funky
+funnel
+funneled
+funneler
+funnelform
+funneling
+funnels
+funnier
+funnies
+funniest
+funnily
+funniness
+funning
+funny
+funnyman
+fur
+fur's
+furan
+furbearer
+furbelow
+furbish
+furbisher
+furbishes
+furbishing
+furcate
+furcated
+furcately
+furcates
+furcating
+furcation
+furcations
+furcula
+furcular
+furfur
+furfuraceous
+furfural
+furfuraldehyde
+furfuran
+furies
+furioso
+furious
+furiouser
+furiously
+furiousness
+furl
+furled
+furless
+furlong
+furlongs
+furlough
+furloughed
+furloughs
+Furman
+Furman's
+furmenty
+furmity
+furnace
+furnace's
+furnaced
+furnaces
+furnacing
+furness
+furnish
+furnished
+furnisher
+furnishers
+furnishes
+furnishing
+furnishings
+furniture
+furnivall
+furor
+furor's
+furors
+furphy
+furred
+furrier
+furriers
+furriery
+furring
+furrow
+furrowed
+furrowing
+furrows
+furry
+furs
+further
+furtherance
+furthered
+furtherer
+furtherest
+furthering
+furthermore
+furthermost
+furthers
+furthest
+furtive
+furtively
+furtiveness
+furuncle
+furuncular
+furunculosis
+furunculous
+fury
+fury's
+furze
+fusain
+fuscous
+fuse
+fused
+fusee
+fusee's
+fusees
+fuselage
+fuselages
+fuses
+fushih
+fushun
+fusibility
+fusible
+fusiform
+fusil
+fusile
+fusileer
+fusilier
+fusillade
+fusillades
+fusing
+fusion
+fusionism
+fusionist
+fusions
+fuss
+fussbudget
+fussbudgety
+fusser
+fussier
+fussily
+fussiness
+fussing
+fusspot
+fussy
+fustanella
+fustian
+fustians
+fustic
+fustigate
+fustigated
+fustigates
+fustigating
+fustigation
+fustigations
+fustily
+fustiness
+fusty
+futile
+futilely
+futileness
+futilitarian
+futilitarianism
+futility
+futilize
+futilizes
+futtock
+Futuna
+future
+future's
+futureless
+futures
+futurism
+futurist
+futuristic
+futuristically
+futurists
+futurity
+futurize
+futurizes
+futurology
+fuzz
+fuzzed
+fuzzier
+fuzziest
+fuzzily
+fuzziness
+fuzzy
+fyke
+fylde
+fylfot
+fyn
+fyrd
+Fyzabad
+g's
+GA
+gab
+gabar
+gabardine
+gabardines
+gabber
+gabbier
+gabbing
+gabble
+gabbled
+gabbler
+gabbles
+gabbling
+gabbro
+gabby
+gabelle
+gaberdine
+gaberlunzie
+Gaberones
+gabfest
+gabfests
+gabion
+gabionade
+gable
+gabled
+gabler
+gables
+gablet
+gabo
+Gabon
+Gabon's
+gabor
+gaborone
+Gabriel
+Gabrielle
+gaby
+gad
+gadabout
+gadabouts
+Gadarene
+gaddafi
+gadded
+gadder
+gadding
+gadfly
+gadget
+gadget's
+gadgeteer
+gadgeteers
+gadgetry
+gadgets
+gadgety
+gadhelic
+gadid
+gadoid
+gadolinite
+gadolinium
+gadroon
+gadsden
+gadwall
+gadzooks
+gaea
+gaekwar
+Gael
+Gaelic
+Gaelicization
+Gaelicization's
+Gaelicizations
+Gaelicize
+Gaelicizes
+Gaeltacht
+gaff
+gaffe
+gaffer
+gaffes
+gaffs
+gaffsail
+gag
+gaga
+Gagarin
+gagauzi
+gage
+gaged
+gager
+gages
+gagged
+gagger
+gagging
+gaggle
+gaging
+gagman
+gagmen
+gags
+gagster
+gagsters
+gagwriter
+gagwriters
+gahnite
+Gaia
+gaieties
+gaiety
+gaikwar
+Gail
+gaillard
+gaillardia
+gaily
+gain
+gained
+gainer
+gainers
+Gaines
+Gainesville
+gainful
+gainfully
+gainfulness
+gaingiving
+gaining
+gainings
+gainless
+gainlessness
+gainly
+gains
+gainsay
+gainsayer
+Gainsborough
+gaiseric
+gait
+gaited
+gaiter
+gaiters
+Gaithersburg
+gaits
+gaitskell
+gaius
+gal
+gala
+galactagogue
+galactic
+galactometer
+galactopoietic
+galactopyranose
+galactopyranoside
+galactopyranosides
+galactopyranosyl
+galactose
+Galago
+galah
+Galahad
+galahad
+galangal
+galantine
+galanty
+Galapagos
+galashiels
+galata
+Galatea
+Galatia
+Galatia's
+galatians
+galavant
+galaxies
+galaxy
+galaxy's
+galba
+galbanum
+galbraith
+Galbreath
+gale
+galea
+Galen
+galen
+Galen's
+galena
+Galenic
+Galenical
+Galenism
+galenite
+gales
+Galibi
+Galician
+Galilean
+Galilee
+Galileo
+galileo
+Galileo's
+galimatias
+galingale
+galiot
+galipot
+gall
+Galla
+Gallagher
+Gallagher's
+gallant
+gallantize
+gallantizes
+gallantly
+gallantry
+gallants
+gallberry
+gallbladder
+galle
+galleass
+galled
+galleon
+galleons
+galleried
+galleries
+gallery
+gallet
+galley
+galley's
+galleys
+gallfly
+gallia
+galliambic
+galliard
+Gallic
+Gallican
+Gallicanism
+gallice
+Gallicism
+Gallicization
+Gallicize
+Gallicized
+Gallicizes
+Gallicizing
+gallied
+galligaskins
+gallimaufry
+gallinacean
+gallinaceous
+gallinas
+galling
+gallingly
+gallinule
+galliot
+gallipoli
+gallipot
+gallium
+gallivant
+gallivanted
+gallivanting
+gallivants
+galliwasp
+gallnut
+galloglass
+gallon
+gallon's
+gallonage
+gallons
+galloon
+galloot
+gallop
+gallopade
+galloped
+galloper
+gallopers
+galloping
+gallops
+gallous
+gallow
+Galloway
+gallows
+gallowses
+galls
+gallstone
+gallstones
+Gallup
+gallus
+galluses
+Galois
+galoot
+galop
+galore
+galosh
+galoshed
+galoshes
+galoshing
+gals
+galsworthy
+Galt
+Galt's
+Galton
+galumph
+galvani
+galvanic
+galvanically
+galvanism
+galvanization
+galvanization's
+galvanizations
+galvanize
+galvanized
+galvanizer
+galvanizers
+galvanizes
+galvanizing
+galvanometer
+galvanometer's
+galvanometers
+galvanometric
+galvanoscope
+galvanostat
+galvanotropism
+Galveston
+Galvin
+Galvin's
+galvo
+Galway
+Galway's
+Galwegian
+galyak
+gam
+gama
+gamba
+gambado
+Gambeson
+Gambetta
+Gambia
+Gambia's
+Gambier
+gambit
+gambits
+gamble
+gambled
+gambler
+gamblers
+gambles
+gambling
+Gamboge
+gambol
+gamboled
+gamboling
+gambols
+gambrel
+gambrinus
+game
+gamecock
+gamed
+gamekeeper
+gamekeepers
+gamelan
+gamely
+gameness
+games
+gamesman
+gamesmanship
+gamesome
+gamesomely
+gamesomeness
+gamester
+gametangium
+gamete
+gamete's
+gametes
+gametic
+gametically
+gametocyte
+gametogenesis
+gametophore
+gametophyte
+gamey
+gamic
+gamier
+gamily
+gamin
+gamine
+gaminess
+gaming
+gamma
+gammadion
+gammas
+gammer
+gamming
+gammon
+gamogenesis
+gamopetalous
+gamophyllous
+gamosepalous
+gamp
+gamut
+gamy
+gan
+gance
+gand
+Ganda
+gandalf
+gander
+gandhi
+Gandhi
+Gandhi's
+Gandhian
+Gandhiism
+gandy
+gandzha
+ganesa
+gang
+gang's
+Ganga
+gangbang
+ganger
+Ganges
+gangland
+ganglier
+gangling
+ganglion
+ganglioside
+gangliosides
+gangly
+gangplank
+gangplow
+gangrel
+gangrene
+gangrened
+gangrenes
+gangrening
+gangrenous
+gangs
+gangster
+gangster's
+gangsterism
+gangsters
+gangtok
+gangue
+gangway
+gangways
+ganister
+ganja
+gannet
+Gannett
+Gannett's
+ganof
+ganoid
+gansey
+gantlet
+gantries
+gantry
+Ganymede
+GAO
+gap
+gap's
+gape
+gaped
+gaper
+gapes
+gapeworm
+gaping
+gapingly
+gapped
+gapping
+gappy
+gaps
+gar
+garage
+garaged
+garageman
+garagemen
+garages
+garaging
+garam
+Garamond
+garand
+garb
+garbage
+garbage's
+garbaged
+garbages
+garbaging
+garbanzo
+garbed
+garble
+garbled
+garbler
+garbles
+garbling
+garbo
+garboard
+garboil
+Garcia
+gard
+garda
+gardant
+garde
+garden
+gardened
+gardener
+gardeners
+gardenful
+gardenia
+gardenias
+gardening
+gardenize
+gardenizes
+gardens
+garderobe
+gardiner
+Gardner
+Garfield
+garfish
+Garfunkel
+garganey
+Gargantua
+gargantuan
+garget
+gargle
+gargled
+gargles
+gargling
+gargoyle
+gargoyled
+gargoyles
+Garibaldi
+garish
+garishly
+garishness
+garland
+garlanded
+garlands
+garlic
+garlicky
+garlics
+garment
+garment's
+garmented
+garmenting
+garments
+garner
+garnered
+garnering
+garners
+garnet
+garnett
+Garnett
+garnierite
+garnish
+garnishable
+garnished
+garnishee
+garnishees
+garnishes
+garnishment
+garnishments
+garniture
+garnitures
+garonne
+garotte
+garpike
+garret
+garrets
+Garrett
+garrick
+garrison
+garrisoned
+Garrisonian
+garrisoning
+garrisons
+garrote
+garroted
+garroter
+garrotes
+garroting
+garrots
+garrulity
+garrulous
+garrulously
+garrulousness
+Garry
+Garrya
+garter
+garter's
+gartered
+gartering
+garters
+Garth
+garth
+Garth's
+Garvey
+Gary
+Gary's
+gas
+gas's
+gasbag
+Gascon
+gasconade
+Gascony
+gaselier
+gaseous
+gaseously
+gaseousness
+gases
+gash
+gash's
+gashed
+gashes
+gashing
+gasholder
+gashouse
+gasification
+gasifications
+gasified
+gasifier
+gasifiers
+gasifies
+gasiform
+gasify
+gasifying
+gaskell
+gasket
+gaskets
+gaskin
+gaslight
+gaslighted
+gaslights
+gaslit
+gasman
+gasogene
+gasohol
+gasolene
+gasolier
+gasoline
+gasolines
+gasolinic
+gasometer
+gasometer's
+gasometers
+gasometry
+gasp
+Gaspar
+gasped
+Gaspee
+Gaspee's
+gasper
+gaspers
+gasping
+gaspingly
+gasps
+gassed
+gasser
+gassers
+gasses
+Gasset
+gasset
+gassiness
+gassing
+gassings
+gassy
+gast
+gasteropod
+gastight
+gastightness
+gastness
+Gaston
+gastral
+gastralgia
+gastrectomy
+gastric
+gastrin
+gastritis
+gastroenteric
+gastroenteritis
+gastroenterology
+gastroenterostomy
+gastrogenic
+gastrogenous
+gastrointestinal
+gastrolith
+gastrology
+gastronome
+gastronomes
+gastronomic
+gastronomical
+gastronomically
+gastronomist
+gastronomy
+gastropod
+gastroscope
+gastrostomy
+gastrotomy
+gastrotrich
+gastrovascular
+gastrula
+gastrulate
+gastrulation
+gasworker
+gasworks
+gat
+gate
+gated
+gatefold
+gatehouse
+gatekeep
+gatekeeper
+gatekeeper's
+gatekeepers
+gatepost
+gates
+Gates
+gateshead
+gateway
+gateway's
+gateways
+gath
+Gatha
+gather
+gathered
+gatherer
+gatherers
+gathering
+gatherings
+gathers
+gating
+Gatlinburg
+gatling
+gator
+Gatsby
+gatsby
+gatt
+gauche
+gauchely
+gaucheness
+gaucherie
+gaucheries
+Gaucho
+gaud
+gauded
+gaudery
+gaudier
+gaudies
+gaudily
+gaudiness
+gauding
+gauds
+gaudy
+gauffer
+gauge
+gaugeable
+gaugeably
+gauged
+gaugeing
+gauger
+gauges
+gauging
+Gauguin
+gauhati
+Gaul
+Gaulish
+Gaulle
+Gaulle's
+Gaullism
+Gaullist
+Gaultheria
+gaum
+gaumless
+gaums
+gaunt
+gauntlet
+gauntleted
+Gauntley
+gauntley
+gauntly
+gauntness
+gauntry
+gaup
+gaur
+gauss
+gausses
+Gaussian
+gaussmeter
+Gautama
+gautama
+gautier
+gauze
+gauzed
+gauzelike
+gauzes
+gauzily
+gauziness
+gauzing
+gauzy
+gavage
+gave
+gavel
+gaveled
+gaveler
+gaveling
+gavial
+Gavin
+gavotte
+gavottes
+gawk
+gawker
+gawkier
+gawkily
+gawkish
+gawkishly
+gawkishness
+gawks
+gawky
+gawp
+gay
+gaya
+gayer
+gayest
+gayety
+Gaylor
+Gaylord
+gayly
+gayness
+Gaynor
+gayomart
+Gaza
+gazankulu
+gaze
+gazebo
+gazebo's
+gazebos
+gazed
+gazehound
+gazelle
+gazelles
+gazer
+gazers
+gazes
+gazette
+gazetted
+gazetteer
+gazetteers
+gazettes
+gazetting
+gaziantep
+gazing
+gazpacho
+gazpacho's
+gazump
+GCD
+gdynia
+GE
+gean
+geanticline
+gear
+gearbox
+geared
+gearing
+gearless
+gears
+gearshift
+gearwheel
+Geary
+geary
+geber
+gec
+gecko
+gedact
+gedanken
+Gedda
+gee
+geegaw
+geek
+geek's
+geeks
+geelong
+geese
+geest
+geezer
+gefilte
+Gegenschein
+Gehenna
+gehlenite
+Gehrig
+gehrig
+Geiger
+Geigy
+Geigy's
+Geisel
+geisha
+geishas
+Geissler
+gel
+gel's
+gelable
+gelada
+gelant
+gelate
+gelated
+gelates
+gelatin
+gelatine
+gelating
+gelatinizabilities
+gelatinizability
+gelatinizability's
+gelatinizable
+gelatinizable's
+gelatinizables
+gelatinization
+gelatinization's
+gelatinizations
+gelatinize
+gelatinized
+gelatinizer
+gelatinizers
+gelatinizes
+gelatinizing
+gelatinoid
+gelatinous
+gelatinously
+gelatinousness
+gelation
+geld
+Gelderland
+gelding
+geldings
+gelibolu
+gelid
+gelidity
+gelidly
+gelin
+gell
+gelled
+gelligaer
+gelling
+gels
+Gelsemium
+Gelsenkirchen
+gelt
+gem
+gem's
+Gemara
+gemeinschaft
+geminal
+geminally
+geminate
+geminately
+gemination
+Gemini
+Geminid
+gemlike
+Gemma
+gemmate
+gemmated
+gemmates
+gemmating
+gemmation
+gemming
+gemmiparous
+gemmulation
+gemmule
+gemology
+gemot
+gems
+gemsbok
+gemstone
+gemstone's
+gemstones
+gen
+genappe
+Gencer
+gendarme
+gendarmerie
+gender
+gender's
+gendered
+gendering
+genders
+Gendron
+gene
+gene's
+genealogical
+genealogically
+genealogies
+genealogist
+genealogists
+genealogy
+genera
+generable
+general
+general's
+generale
+generalism
+generalissimo
+generalist
+generalist's
+generalists
+generalities
+generality
+generalizability
+generalizable
+generalizable's
+generalizables
+generalization
+generalization's
+generalizational
+generalizations
+generalize
+generalized
+generalizer
+generalizers
+generalizes
+generalizing
+generally
+generalness
+generals
+generalship
+generalships
+generate
+generated
+generates
+generating
+generation
+generational
+generations
+generative
+generatively
+generator
+generator's
+generators
+generatrix
+generic
+generically
+genericness
+generosities
+generosity
+generosity's
+generous
+generously
+generousness
+genes
+Genesco
+genesis
+genet
+genetic
+genetical
+genetically
+geneticist
+geneticist's
+geneticists
+genetics
+Geneva
+Geneva's
+Genevan
+Genevieve
+Genevieve's
+Genf
+Genfersee
+Genghis
+genial
+geniality
+genialize
+genializes
+genially
+genialness
+genic
+genically
+geniculate
+geniculated
+geniculately
+genie
+genie's
+genies
+genii
+genip
+genipap
+genital
+genital's
+genitalia
+genitalic
+genitally
+genitals
+genitive
+genitive's
+genitives
+genitor
+genitourinary
+genius
+genius's
+geniuses
+genizah
+genk
+Genoa
+Genoa's
+genocidal
+genocide
+genocides
+Genoese
+genome
+genome's
+genomes
+genotype
+genotype's
+genotypes
+genotypic
+genotypical
+genotypically
+genotypicity
+Genova
+genre
+genre's
+genres
+genro
+gens
+genseric
+genstat
+gent
+genteel
+genteeler
+genteelest
+genteelism
+genteelize
+genteelizes
+genteelly
+genteelness
+gentian
+gentianaceous
+gentianella
+gentians
+gentile
+gentiles
+gentilesse
+gentility
+gentilization
+gentilization's
+gentilizations
+gentilize
+gentilizes
+gentle
+gentled
+gentlefolk
+gentlefolks
+gentleman
+gentlemanize
+gentlemanizes
+gentlemanlike
+gentlemanlikeness
+gentlemanliness
+gentlemanly
+gentlemen
+gentleness
+gentler
+gentlest
+gentlewoman
+gentlewomen
+gentlewomen's
+gentling
+gently
+Gentoo
+gentrice
+gentries
+gentrification
+gentry
+gents
+genu
+genuflect
+genuflected
+genuflecting
+genuflection
+genuflectory
+genuflects
+genuine
+genuinely
+genuineness
+genus
+geocentric
+geocentrically
+geocentricism
+geochemical
+geochemically
+geochemist
+geochemistry
+geochronologic
+geochronological
+geochronologically
+geochronologist
+geochronology
+geochronometric
+geochronometry
+geode
+geode's
+geodes
+geodesic
+geodesics
+geodesist
+geodesy
+geodetic
+geodetical
+geodetically
+geoduck
+geodynamics
+Geoff
+Geoff's
+Geoffrey
+Geoffrey's
+geognosy
+geographer
+geographer's
+geographers
+geographic
+geographical
+geographically
+geographies
+geography
+geohydrologic
+geohydrology
+geoid
+geologic
+geological
+geologist
+geologist's
+geologists
+geologize
+geologized
+geologizes
+geologizing
+geology
+geomagnetic
+geomagnetically
+geomagnetism
+geomancy
+geomantic
+geomechanics
+geometer
+geometer's
+geometers
+geometric
+geometrical
+geometrically
+geometrician
+geometricize
+geometricizes
+geometrid
+geometries
+geometrize
+geometrized
+geometrizes
+geometrizing
+geometry
+geomorphic
+geomorphological
+geomorphology
+geophagy
+geophysical
+geophysically
+geophysicist
+geophysicists
+geophysics
+geophyte
+geopolitic
+geopolitical
+geopolitically
+geopolitician
+geopolitics
+geoponic
+geoponics
+Geordie
+George
+George's
+Georges
+Georgetown
+Georgette
+Georgia
+Georgian
+Georgians
+georgic
+geoscience
+geosphere
+geostatic
+geostatics
+geostrategic
+geostrategist
+geostrategy
+geostrophic
+geostrophically
+geosynchronous
+geosyncline
+geotaxis
+geotectonic
+geothermal
+geothermally
+geothermic
+geotropic
+geotropically
+geotropism
+gera
+gerah
+Gerald
+Geraldine
+geraniaceous
+geranial
+geraniol
+geranium
+Gerard
+geratology
+Gerber
+gerbil
+gerent
+gerenuk
+gerfalcon
+Gerhard
+Gerhardt
+geriatric
+geriatrician
+geriatricians
+geriatrics
+geriatrist
+gerlachovka
+germ
+germ's
+German
+German's
+germander
+germane
+Germania
+germania
+Germanic
+germanicus
+Germanism
+germanium
+germanization
+germanization's
+germanizations
+germanize
+germanized
+germanizer
+germanizers
+germanizes
+germanizing
+Germanophile
+Germanophobe
+germanous
+Germans
+Germantown
+Germany
+Germany's
+germen
+germfree
+germicidal
+germicide
+germicides
+germier
+germinability
+germinal
+germinally
+germinant
+germinate
+germinated
+germinates
+germinating
+germination
+germinations
+germinative
+germinatively
+germiston
+germproof
+germs
+germy
+gerome
+Gerome
+gerona
+geronimo
+gerontic
+gerontocracy
+gerontological
+gerontologist
+gerontologists
+gerontology
+Gerry
+Gerry's
+gerrymander
+gerrymandered
+gerrymandering
+gers
+Gershwin
+Gershwins
+Gertrude
+gerund
+gerundial
+gerundive
+geryon
+gesellschaft
+gesso
+gest
+gestalt
+gestapo
+gestate
+gestated
+gestates
+gestating
+gestation
+gestation's
+gestational
+gestations
+gestatorial
+gesticulate
+gesticulated
+gesticulates
+gesticulating
+gesticulation
+gesticulations
+gesticulative
+gesticulatively
+gesticulator
+gesticulators
+gesticulatory
+gestural
+gesture
+gestured
+gestures
+gesturing
+gesualdo
+get
+getatable
+getaway
+getaways
+Gethsemane
+gets
+getter
+getter's
+gettered
+getters
+getting
+Getty
+Gettysburg
+getup
+getups
+Geum
+gewgaw
+gey
+geyser
+geysered
+geysering
+geyserite
+geysers
+gezira
+Ghana
+Ghanian
+Gharial
+Gharry
+ghastful
+ghastfully
+ghastlier
+ghastliness
+ghastly
+ghat
+ghats
+Ghaut
+ghazal
+ghazals
+Ghazi
+Ghazzah
+Gheber
+ghee
+Ghent
+Gherao
+gherkin
+gherkins
+ghetto
+ghettoization
+ghettoization's
+ghettoizations
+ghettoize
+ghettoized
+ghettoizes
+ghettoizing
+ghettos
+Ghiaurov
+Ghiberti
+Ghibli
+Ghillie
+Ghirlandaio
+Ghitalla
+ghost
+ghosted
+ghosting
+ghostlier
+ghostlike
+ghostliness
+ghostlinesses
+ghostly
+ghosts
+ghostwrite
+ghostwriter
+ghosty
+ghoul
+ghoulish
+ghoulishly
+ghoulishness
+ghouls
+Giacometti
+Giacomo
+giant
+giant's
+giantess
+gianthood
+gianthoods
+giantism
+giantisms
+giantize
+giantizes
+giantlike
+giants
+gib
+gibber
+gibbered
+gibberellic
+gibberellin
+gibbering
+gibberish
+gibbers
+gibbet
+gibbeted
+gibbeting
+gibbets
+gibbing
+gibbon
+gibbons
+gibbosity
+gibbous
+gibbously
+gibbousness
+Gibbs
+gibbsite
+Gibby
+gibby
+gibe
+gibeon
+Gibeonite
+giber
+gibes
+gibing
+giblet
+giblets
+gibli
+Gibraltar
+gibran
+Gibson
+Gibson's
+gid
+giddap
+giddied
+giddier
+giddily
+giddiness
+giddings
+Giddings
+giddy
+giddying
+gide
+Gideon
+gidgee
+gie
+Gielgud
+Gierek
+Giessen
+Gifford
+gift
+gifted
+giftedly
+giftedness
+gifts
+giftwrap
+gifu
+gig
+gig's
+gigabit
+gigabyte
+gigabytes
+gigacycle
+gigacycles
+gigahertz
+gigaherz
+gigantesque
+gigantic
+gigantically
+giganticness
+gigantism
+gigantisms
+gigantomachy
+gigavolt
+gigawatt
+gigging
+giggle
+giggled
+giggler
+giggles
+giggling
+gigglingly
+giggly
+gigli
+gigolo
+gigot
+gigots
+Gigout
+gigs
+gigue
+Gil
+Gil's
+gila
+gilbert
+Gilbertian
+Gilbertson
+Gilchrist
+Gilchrist's
+gild
+Gilda
+Gilda's
+gildas
+gilded
+gilder
+gilding
+gilds
+Gilead
+Gilead's
+Gileadite
+Gilels
+Giles
+gilet
+gilgai
+gilgamesh
+Gilkson
+gill
+gill's
+gilled
+giller
+Gillespie
+Gillette
+gillies
+Gilligan
+Gillingham
+gillion
+gillray
+gills
+gillyflower
+Gilmore
+Gilmore's
+gilolo
+gilsonite
+gilt
+gilthead
+gimbal
+gimbaled
+gimbaling
+gimbals
+Gimbel
+gimcrack
+gimcrackery
+gimel
+gimlet
+gimlet's
+gimlets
+gimmal
+gimme
+gimmick
+gimmick's
+gimmickry
+gimmicks
+gimmicky
+gimp
+gimpy
+gin
+gin's
+Gina
+Gina's
+ginger
+gingerbread
+gingered
+gingering
+gingerliness
+gingerly
+gingersnap
+gingery
+gingham
+ginghams
+gingiva
+gingivitis
+gingko
+gink
+ginkgo
+ginmill
+ginnel
+ginning
+Gino
+Gino's
+gins
+Ginsberg
+Ginsberg's
+Ginsburg
+Ginsburg's
+ginseng
+Gioconda
+gioconda
+Giorgio
+giorgione
+giotto
+Giovanni
+gip
+gipon
+Gippsland
+Gippy
+Gipsies
+Gipsy
+Gipsy's
+giraffe
+giraffe's
+giraffes
+giraffish
+giraldus
+girandole
+Giraud
+Giraudoux
+gird
+girded
+girder
+girder's
+girders
+girding
+girdle
+girdlecake
+girdled
+girdler
+girdles
+girdling
+girds
+girgenti
+girl
+girl's
+girlfriend
+girlfriend's
+girlfriends
+girlhood
+girlhoods
+girlie
+girlish
+girlishly
+girlishness
+girls
+girly
+girn
+giro
+gironde
+gironny
+girosol
+girt
+girth
+gisarme
+Gisborne
+Giscard
+gish
+gismo
+gismos
+gissing
+gist
+git
+gittern
+Giuliano
+Giuliano's
+Giulini
+Giulio
+Giuseppe
+Giuseppe's
+giusto
+givable
+give
+giveaway
+giveaways
+given
+givenness
+givens
+giver
+givers
+gives
+giveth
+giving
+givingly
+gizmo
+gizmo's
+gizmos
+gizzard
+gizzard's
+gizzards
+glabella
+glabrous
+glacial
+glacialist
+glacialize
+glacializes
+glacially
+glaciate
+glaciated
+glaciates
+glaciating
+glaciation
+glacier
+glacier's
+glaciers
+glaciologic
+glaciological
+glaciologist
+glaciology
+glacis
+glad
+gladbeck
+gladded
+gladden
+gladdened
+gladdening
+gladdens
+gladder
+gladdest
+gladding
+gladdon
+gladdy
+glade
+glades
+gladiate
+gladiator
+gladiatorial
+gladiators
+gladiola
+gladiolus
+gladly
+gladness
+gladrags
+gladsome
+gladsomely
+gladsomeness
+Gladstone
+glady
+Gladys
+Glagolitic
+glaikit
+glair
+glaive
+glamorgan
+glamorization
+glamorizations
+glamorize
+glamorized
+glamorizer
+glamorizers
+glamorizes
+glamorizing
+glamorless
+glamorous
+glamorously
+glamorousness
+glamour
+glamoured
+glamouring
+glamours
+glance
+glanced
+glances
+glancing
+glancingly
+gland
+gland's
+glandered
+glanders
+glandless
+glands
+glandular
+glandularly
+glandule
+glans
+glare
+glared
+glares
+glarier
+glaring
+glaringly
+glaringness
+glarus
+glary
+glaser
+Glasgow
+glass
+glassblower
+glassblowing
+glassed
+glasses
+glassful
+glasshouse
+glassier
+glassies
+glassily
+glassine
+glassiness
+glassless
+glassmaker
+glassmaking
+glassman
+glassware
+glasswork
+glassworker
+glassworks
+glasswort
+glassy
+glastonbury
+Glaswegian
+glauce
+glaucoma
+glauconite
+glaucous
+glaze
+glazed
+glazer
+glazers
+glazes
+glazier
+glaziers
+glaziery
+glazing
+Glazunov
+gleam
+gleamed
+gleaming
+gleams
+gleamy
+glean
+gleanable
+gleaned
+gleaner
+gleaning
+gleanings
+gleans
+Gleason
+glebe
+glee
+gleed
+gleeful
+gleefully
+gleefulness
+gleeman
+glees
+gleesome
+gleet
+gleiwitz
+glen
+glen's
+glencoe
+Glenda
+Glendale
+glendower
+Glengarry
+Glenn
+glenoid
+glenrothes
+glens
+gley
+glia
+gliadin
+glib
+glibber
+glibbest
+glibly
+glibness
+Glickman
+Glidden
+Glidden's
+glide
+glided
+glider
+gliders
+glides
+gliding
+glim
+glimmer
+glimmered
+glimmering
+glimmers
+glimpse
+glimpsed
+glimpser
+glimpsers
+glimpses
+glimpsing
+Glinka
+glint
+glinted
+glinting
+glints
+glioma
+glissade
+glissando
+glisten
+glistened
+glistening
+glistens
+glister
+glitch
+glitch's
+glitches
+glitter
+glittered
+glittering
+glitteringly
+glitters
+glittery
+gliwice
+gloam
+gloamed
+gloaming
+gloams
+gloat
+gloated
+gloater
+gloats
+glob
+global
+globalism
+globalist
+globalists
+globalization
+globalizations
+globalize
+globalized
+globalizes
+globalizing
+globally
+globals
+globate
+globe
+globe's
+globeflower
+globes
+globetrotter
+Globigerina
+globin
+globing
+globoid
+globose
+globular
+globularity
+globularly
+globularness
+globule
+globuliferous
+globulin
+globulins
+glochidium
+glockenspiel
+glogg
+glom
+glomerate
+glomeration
+glomerular
+glomerulate
+glomerule
+glomerulus
+glomma
+glommed
+glomming
+gloms
+gloom
+gloomier
+gloomily
+gloominess
+glooms
+gloomy
+Gloria
+Gloriana
+Gloriana's
+gloried
+glories
+glorification
+glorifications
+glorified
+glorifier
+glorifiers
+glorifies
+glorify
+Glorioso
+glorious
+gloriously
+gloriousness
+glory
+glorying
+gloss
+glossa
+glossarial
+glossaries
+glossarist
+glossary
+glossary's
+glossator
+glossectomy
+glossed
+glosseme
+glosses
+glossier
+glossies
+glossily
+glossiness
+glossing
+glossitis
+glossographer
+glossography
+glossolalia
+glossology
+glossopharyngeal
+glossy
+glottal
+glottalization
+glottalize
+glottalizes
+glottic
+glottis
+glottochronology
+Gloucester
+Gloucestershire
+glove
+gloved
+gloveless
+glover
+glovers
+gloves
+gloving
+glow
+glowed
+glower
+glowered
+glowering
+glowers
+glowing
+glowingly
+glows
+Gloxinia
+gloze
+glucagon
+glucinum
+Gluck
+glucocorticord
+gluconeogenesis
+gluconyl
+glucoprotein
+glucopyranosyl
+glucosamine
+glucose
+glucoside
+glucosuria
+glue
+glued
+glueing
+gluer
+gluers
+glues
+gluey
+gluily
+gluing
+glum
+glumaceous
+glume
+glumly
+glummer
+glummest
+glumness
+gluon
+glut
+glutamate
+glutamic
+glutamine
+glutathione
+gluteal
+glutelin
+gluten
+gluteus
+glutinous
+glutinously
+glutinousness
+gluts
+glutted
+glutting
+glutton
+glutton's
+gluttonize
+gluttonizes
+gluttonous
+gluttonously
+gluttonousness
+gluttons
+gluttony
+glyceric
+glyceride
+glycerin
+glycerinate
+glycerinated
+glycerine
+glycerinize
+glycerinizes
+glycerol
+glycerolize
+glycerolized
+glycerolizes
+glycerophosphate
+glyceryl
+glycine
+glycocholate
+glycocholates
+glycoconjugate
+glycoconjugates
+glycodeoxycholate
+glycodeoxycholates
+glycogen
+glycogenesis
+glycogenize
+glycogenizes
+glycol
+glycolic
+glycolipid
+glycolipids
+glycols
+glycolysis
+glyconeogenesis
+glycopeptide
+glycopeptides
+glycoprotein
+glycoproteins
+glycosidase
+glycosidases
+glycoside
+glycosidic
+glycosphingolipid
+glycosphingolipids
+glycosuria
+glycosyl
+glycosylate
+glycosylated
+glycosylates
+glycosylation
+glynn
+Glynn
+glyoxaline
+glyph
+glyphography
+glyptal
+glyptic
+glyptics
+glyptodont
+glyptography
+GM
+GMT
+gnarl
+gnarled
+gnarls
+gnarly
+gnash
+gnashes
+gnashing
+gnat
+gnat's
+gnatcatcher
+gnathic
+gnathion
+gnathite
+gnathonic
+gnats
+gnatty
+gnaw
+gnawed
+gnawer
+gnawing
+gnaws
+gneiss
+gneissic
+gnocchi
+gnome
+gnomelike
+gnomes
+gnomic
+gnomish
+gnomon
+gnomonic
+gnosis
+gnostic
+gnosticism
+gnosticize
+gnosticizer
+gnosticizers
+gnosticizes
+gnotobiotics
+GNP
+gnu
+gnus
+go
+goad
+goaded
+goading
+goads
+goal
+goal's
+goalie
+goalkeeper
+goalmouth
+goalpost
+goals
+goaltender
+goaltending
+goanna
+goat
+goat's
+goatee
+goatee's
+goatees
+goatfish
+goatherd
+goatish
+goatlike
+goats
+goatsbeard
+goatskin
+goatsucker
+gob
+gobbet
+Gobbi
+gobble
+gobbled
+gobbledegook
+gobbledygook
+gobbler
+gobblers
+gobbles
+gobbling
+Gobelin
+Gobi
+gobi
+Gobi's
+gobioid
+goblet
+goblet's
+goblets
+goblin
+goblin's
+goblins
+gobo
+gobstopper
+goby
+god
+god's
+godard
+godavari
+godchild
+goddamn
+goddamned
+Goddard
+Goddard's
+goddaughter
+godded
+goddess
+goddess's
+goddesses
+godding
+goddize
+goddizes
+godefroy
+goderich
+Godesberg
+Godetia
+godfather
+godforsaken
+Godfrey
+Godfrey's
+godhead
+godhood
+Godiva
+godkin
+godless
+godlessness
+godlier
+godlike
+godlikeness
+godliness
+godling
+godly
+godmother
+godmother's
+godmothers
+Godolphin
+godot
+Godot
+godown
+godparent
+godroon
+gods
+godsend
+godsends
+godson
+Godspeed
+Godthaab
+Godunov
+Godwin
+Godwin's
+godwit
+Godzilla
+Godzilla's
+Goebbels
+goer
+goering
+goes
+Goethe
+goethite
+Goff
+Goff's
+gog
+gogga
+goggle
+gogglebox
+goggled
+goggler
+gogglers
+goggles
+goggling
+goggly
+Gogh
+goglet
+gogo
+gogol
+gogra
+Goidel
+going
+goings
+goiter
+goiters
+goitrogen
+goitrogenic
+Golconda
+gold
+Golda
+golda
+goldarn
+goldbeater
+goldbeating
+Goldberg
+goldbrick
+goldbug
+goldcrest
+golden
+goldeneye
+goldenly
+goldenness
+goldenrod
+goldenseal
+goldeye
+Goldfield
+goldfinch
+goldfish
+goldilocks
+golding
+Goldman
+Goldmark
+goldoni
+golds
+goldschmidt
+goldsmith
+goldsmiths
+Goldstein
+Goldstein's
+Goldstine
+Goldstine's
+goldthread
+Goldwater
+golem
+Goleta
+Goleta's
+golf
+golfer
+golfers
+golfing
+golfs
+Golgi
+Golgotha
+goliard
+goliardery
+Goliath
+golliwog
+gollop
+golly
+goloshes
+Gomberg
+gombroon
+gomel
+gomez
+Gomez
+gomorrah
+gompers
+gomphosis
+gomulka
+gomuti
+gonad
+gonad's
+gonadal
+gonadotropic
+gonadotropin
+gonads
+goncourt
+Gond
+gondar
+Gondi
+gondola
+gondolas
+gondolier
+gondoliers
+Gondwanaland
+gone
+goner
+gonfalon
+gonfalonier
+gong
+gong's
+gongola
+Gongorism
+gongs
+gonidium
+goniometer
+gonion
+gonk
+gonna
+gonococcus
+gonocyte
+gonof
+gonophore
+gonopore
+gonorrhea
+gonorrheal
+Gonzales
+Gonzalez
+goo
+goober
+good
+goodbye
+goodbye's
+goodbyes
+Goode
+Goode's
+goodie
+goodie's
+goodies
+goodish
+goodly
+Goodman
+goodness
+goodnight
+Goodrich
+goods
+goodwife
+goodwill
+Goodwin
+goody
+goody's
+Goodyear
+gooey
+goof
+goofball
+goofed
+goofier
+goofily
+goofiness
+goofing
+goofs
+goofy
+googly
+googol
+googolplex
+gook
+goole
+goon
+gooney
+Goop
+goosander
+goose
+gooseberry
+gooseflesh
+goosefoot
+goosegog
+goosegrass
+gooseneck
+goosenecked
+gooses
+goosey
+goosing
+goosy
+GOP
+gopak
+gopher
+gophers
+gorakhpur
+goral
+gorbals
+gorblimey
+Gorcock
+Gordian
+Gordon
+gore
+gored
+Goren
+Goren's
+goreng
+gores
+gorge
+gorgeous
+gorgeously
+gorgeousness
+gorger
+gorgerin
+gorges
+gorget
+gorgias
+gorging
+gorgon
+gorgoneion
+gorgonian
+gorgonize
+gorgonized
+gorgonizes
+gorgonizing
+Gorgonzola
+gorgously
+Gorham
+gorica
+gorier
+gorilla
+gorilla's
+gorillas
+goring
+gorizia
+Gorki
+Gorky
+Gorlovka
+gormandize
+gormandized
+gormandizer
+gormandizes
+gormandizing
+gormless
+gorse
+gorsedd
+Gorton
+Gorton's
+gory
+gosh
+goshawk
+Goshen
+gosling
+gospel
+gospeler
+gospelers
+gospelize
+gospelizes
+gospels
+Gosplan
+gosport
+gossamer
+gossamery
+gosse
+gossip
+gossiped
+gossiper
+gossipers
+gossiping
+gossipmonger
+gossipmongers
+gossipry
+gossips
+gossipy
+gossoon
+goster
+got
+gotama
+gotcha
+gotcha's
+gotchas
+goth
+Goth
+Gotha
+Gotham
+Gothenburg
+Gothic
+Gothically
+Gothicism
+Gothicize
+Gothicized
+Gothicizer
+Gothicizers
+Gothicizes
+Gothicizing
+Gotland
+goto
+gotta
+gotten
+Gottfried
+Gottfried's
+gouache
+goucher
+Goucher
+gouda
+Gouda's
+gouge
+gouged
+gouger
+gouges
+gouging
+goulash
+Gould
+Gould's
+Gounod
+gourami
+gourd
+gourde
+gourmand
+gourmand's
+gourmandism
+gourmandize
+gourmandized
+gourmandizes
+gourmandizing
+gourmands
+gourmet
+gourmets
+gourmont
+gout
+goutweed
+gouty
+govern
+governable
+governance
+governed
+governess
+governesses
+governessy
+governing
+government
+government's
+governmental
+governmentalism
+governmentalist
+governmentalize
+governmentalized
+governmentalizes
+governmentalizing
+governmentally
+governments
+governor
+governor's
+governorate
+governorates
+governors
+governorship
+governs
+gowan
+gower
+gowk
+gown
+gowned
+gowns
+gowon
+goy
+Goya
+goyish
+goys
+GPO
+GPSS
+Graafian
+grab
+grabbed
+grabber
+grabber's
+grabbers
+grabbier
+grabbing
+grabbings
+grabble
+grabbled
+grabbler
+grabbles
+grabbling
+grabby
+Graben
+grabs
+Gracchus
+grace
+graced
+graceful
+gracefully
+gracefulness
+graceless
+gracelessly
+gracelessness
+graces
+gracie
+Gracie
+gracile
+gracileness
+gracility
+gracing
+gracioso
+gracious
+graciously
+graciousness
+grackle
+grad
+gradable
+gradate
+gradated
+gradates
+gradating
+gradation
+gradation's
+gradational
+gradationally
+gradations
+grade
+graded
+gradeless
+gradely
+grader
+graders
+grades
+gradient
+gradient's
+gradients
+grading
+gradings
+gradiometer
+gradiometer's
+gradiometers
+grads
+gradual
+gradualism
+gradualist
+gradualists
+gradually
+gradualness
+graduand
+graduate
+graduated
+graduates
+graduating
+graduation
+graduations
+graduator
+gradus
+Grady
+Graeae
+graecism
+Graff
+Graff's
+graffiti
+graffito
+Graffman
+graft
+graftage
+grafted
+grafter
+grafting
+grafton
+Grafton
+grafts
+graham
+graham's
+grahame
+grahams
+graiae
+Graian
+grail
+grails
+grain
+grained
+grainer
+grainger
+grainier
+graininess
+graining
+grains
+grainy
+grallatorial
+gram
+gram's
+grama
+gramarye
+gramercy
+gramicidin
+gramineous
+graminivorous
+grammar
+grammar's
+grammarian
+grammarians
+grammars
+grammatic
+grammatical
+grammaticality
+grammatically
+grammaticalness
+grammaticize
+grammaticizes
+grammatology
+gramophone
+gramophone's
+gramophones
+grampian
+gramps
+grampus
+grams
+granada
+granadilla
+granados
+granaries
+granary
+granary's
+grand
+grandad
+grandaddy
+grandam
+grandame
+grandaunt
+grandchild
+grandchildren
+granddad
+granddaughter
+granddaughters
+grande
+grandee
+grander
+grandest
+grandeur
+grandfather
+grandfather's
+grandfatherly
+grandfathers
+grandiloquence
+grandiloquent
+grandiloquently
+grandiose
+grandiosely
+grandioseness
+grandiosity
+grandioso
+grandkid
+grandkid's
+grandkids
+grandly
+grandma
+grandma's
+grandmaster
+grandmasters
+grandmother
+grandmother's
+grandmotherly
+grandmothers
+grandnephew
+grandnephews
+grandness
+grandniece
+grandnieces
+grandpa
+grandpa's
+grandparent
+grandparental
+grandparenthood
+grandparents
+grandpas
+grands
+grandsire
+grandsires
+grandson
+grandson's
+grandsons
+grandstand
+grandstanded
+grandstander
+grandstanding
+grandstands
+granduncle
+granduncles
+grange
+grangemouth
+granger
+grangerism
+grangerize
+grangerized
+grangerizer
+grangerizes
+grangerizing
+granges
+granicus
+granite
+graniteware
+granitic
+granitite
+granitization
+granitization's
+granitizations
+granitize
+granitizes
+granivorous
+grannies
+granny
+granodiorite
+granola
+granolith
+granophyre
+grant
+grant's
+granta
+grantable
+granted
+grantee
+granter
+Granth
+granting
+grantor
+grants
+grantsman
+grantsmanship
+granular
+granularity
+granularly
+granulate
+granulated
+granulates
+granulating
+granulation
+granulations
+granulative
+granulator
+granule
+granules
+granulite
+granulitic
+granulize
+granulizes
+granulocyte
+granulocytes
+granulocytic
+granuloma
+granulose
+Granville
+grape
+grape's
+grapefruit
+grapes
+grapeshot
+grapevine
+grapevine's
+grapevines
+graph
+graph's
+graphed
+grapheme
+graphemic
+graphemically
+graphemics
+graphic
+graphical
+graphically
+graphicness
+graphics
+graphing
+graphite
+graphitic
+graphitizable
+graphitization
+graphitization's
+graphitizations
+graphitize
+graphitizes
+graphological
+graphologist
+graphology
+graphomotor
+graphophone
+graphs
+grapier
+grapnel
+grappa
+grappelli
+grapple
+grappled
+grappler
+grapples
+grappling
+graptolite
+grapy
+gras
+grasmere
+grasp
+graspable
+grasped
+grasper
+grasping
+graspingly
+graspingness
+grasps
+grass
+grassed
+grassers
+grasses
+grassfinch
+grasshook
+grasshopper
+grasshopper's
+grasshoppers
+grassier
+grassiest
+grassing
+grassland
+grasslands
+grasslike
+grassquit
+grassroot
+grassroots
+grassy
+grata
+grate
+grated
+grateful
+gratefully
+gratefulness
+grater
+grates
+gratian
+graticule
+gratification
+gratifications
+gratified
+gratify
+gratifying
+gratifyingly
+gratin
+grating
+gratingly
+gratings
+gratis
+gratitude
+grattan
+gratuities
+gratuitous
+gratuitously
+gratuitousness
+gratuity
+gratuity's
+gratulate
+gratulating
+graupel
+grav
+gravamen
+grave
+gravel
+graveled
+graveless
+graveling
+gravelly
+gravels
+gravely
+graven
+graveness
+gravenhage
+graver
+gravers
+graves
+gravesend
+gravest
+gravestone
+gravestones
+gravettian
+graveyard
+graveyards
+gravid
+gravidity
+gravidly
+gravidness
+gravies
+gravimeter
+gravimeter's
+gravimeters
+gravimetric
+gravimetrical
+gravimetrically
+gravimetry
+graving
+gravitate
+gravitated
+gravitates
+gravitating
+gravitation
+gravitational
+gravitationally
+gravitations
+gravitative
+gravities
+gravitometer
+gravitometer's
+gravitometers
+graviton
+graviton's
+gravitons
+gravity
+gravure
+gravy
+gray
+graybeard
+graybeards
+grayed
+grayer
+grayest
+graying
+grayish
+grayling
+graylings
+grayly
+grayness
+grays
+Grayson
+graywacke
+graz
+grazable
+graze
+grazeable
+grazed
+grazer
+grazes
+grazier
+graziers
+grazing
+grease
+greased
+greaseless
+greasepaint
+greasepaints
+greaseproof
+greaser
+greasers
+greases
+greasewood
+greasier
+greasily
+greasiness
+greasing
+greasy
+great
+greatcoat
+greatcoated
+greatcoats
+greaten
+greatened
+greatening
+greater
+greatest
+greathearted
+greatheartedly
+greatheartedness
+greatly
+greatness
+greats
+greave
+greaves
+grebe
+Grecian
+Grecianize
+Grecianizes
+Grecism
+grecize
+grecized
+grecizing
+gree
+Greece
+greed
+greedier
+greedily
+greediness
+greedy
+greegree
+Greek
+Greek's
+Greekize
+Greekizes
+Greeks
+greeley
+green
+Green
+greenaway
+greenback
+greenbacker
+greenbackism
+greenbelt
+Greenberg
+Greenblatt
+greenbottle
+Greenbriar
+greenbrier
+Greene
+Greene's
+greened
+greener
+greenery
+greenest
+Greenfeld
+Greenfield
+greenfinch
+greenfly
+greengage
+greengrocer
+greengrocery
+Greenham
+greenhead
+greenheart
+greenhorn
+greenhouse
+greenhouse's
+greenhouses
+greening
+greenish
+greenishness
+Greenland
+greenlet
+greenling
+greenly
+greenness
+greenock
+greenockite
+Greenpeace
+Greenpeace's
+greenroom
+greens
+greensand
+Greensboro
+greenshank
+greensickness
+greenstick
+greenstone
+greenstuff
+Greensville
+greensward
+Greentree
+greentree
+Greenville
+greenware
+Greenwich
+greenwood
+greeny
+Greer
+Greer's
+greet
+greeted
+greeter
+greeting
+greetings
+greets
+Greg
+Greg's
+gregarine
+gregarinian
+gregarious
+gregariously
+gregariousness
+Gregg
+Gregorian
+Gregory
+greige
+Greisen
+gremial
+gremlin
+gremlin's
+gremlins
+gremmie
+gremmies
+gremmy
+Grenada
+grenade
+grenade's
+grenades
+grenadier
+grenadine
+Grenadines
+Grendel
+grenier
+Grenier
+Grenoble
+Grenville
+grep
+Gresham
+Gresham's
+gressorial
+Greta
+Gretchen
+Gretel
+Gretel's
+Gretna
+greuze
+grew
+grewsome
+grey
+greyback
+greybeard
+greyest
+greyhen
+greyhound
+greying
+greylag
+greystones
+greywacke
+gribble
+grid
+grid's
+griddle
+griddlecake
+gridfile
+gridfiles
+gridiron
+gridlock
+gridlock's
+grids
+grief
+grief's
+griefless
+griefs
+Grieg
+Grierson
+grievance
+grievance's
+grievances
+grievant
+grieve
+grieved
+griever
+grievers
+grieves
+grieving
+grievingly
+grievous
+grievously
+grievousness
+Griffe
+griffin
+Griffith
+Griffiths
+Griffon
+Grig
+Grigioni
+Grignard
+Grikwa
+grill
+grillage
+grille
+grilled
+griller
+grilling
+grillparzer
+grillroom
+grills
+grillwork
+grilse
+grim
+grimace
+grimaced
+grimacer
+grimaces
+grimacing
+Grimaldi
+Grimaldi's
+grimalkin
+grime
+grimed
+grimes
+grimier
+grimines
+griming
+grimly
+Grimm
+grimmer
+grimmest
+grimness
+grimsby
+grimy
+grin
+Grinch
+Grinch's
+grind
+Grindelia
+grindelwald
+grinder
+grinders
+grindery
+grinding
+grindingly
+grindings
+grinds
+grindstone
+grindstone's
+grindstones
+gringo
+gringos
+grinned
+grinner
+grinning
+grinningly
+grins
+grip
+gripe
+griped
+griper
+gripes
+griping
+grippe
+gripped
+gripper
+gripper's
+grippers
+gripping
+grippingly
+grippy
+grips
+Griqua
+Griqualand
+Gris
+gris
+grisaille
+griseofulvin
+griseous
+grisette
+grishun
+griskin
+grisliness
+grisly
+Grison
+grisons
+grist
+gristle
+gristlier
+gristliness
+gristly
+gristmill
+Griswold
+Griswold's
+grit
+grit's
+grith
+grits
+gritted
+grittier
+grittily
+grittiness
+gritting
+gritty
+grivation
+grivet
+grizzle
+grizzled
+grizzles
+grizzlier
+grizzling
+grizzly
+groan
+groaned
+groaner
+groaners
+groaning
+groans
+groat
+groats
+grocer
+grocer's
+groceries
+grocers
+grocery
+grockle
+grodno
+grog
+groggier
+groggily
+grogginess
+groggy
+grogram
+grogshop
+groin
+grok
+grokked
+grokking
+groks
+Grolier
+grommet
+gromyko
+groningen
+groom
+groom's
+groomed
+groomer
+grooming
+grooms
+groomsman
+groomsmen
+Groot
+groot
+groove
+grooved
+groover
+grooves
+groovier
+grooving
+groovy
+grope
+groped
+groper
+gropes
+groping
+gropius
+gros
+grosbeak
+groschen
+grosgrain
+gross
+grosse
+grossed
+grosser
+grosses
+grossest
+Grosset
+grosseteste
+grossing
+grossly
+Grossman
+grossness
+grossular
+grossularite
+grosswardein
+Grosvenor
+grosz
+grot
+grote
+grotesque
+grotesquely
+grotesqueness
+grotesquerie
+grotesquery
+grotius
+Groton
+grotto
+grotto's
+grottoes
+grottos
+grouch
+grouch's
+grouched
+grouches
+grouchier
+grouchily
+grouchiness
+grouching
+grouchy
+ground
+groundage
+grounded
+grounder
+grounders
+groundhog
+groundhog's
+groundhogs
+grounding
+groundless
+groundlessly
+groundlessness
+groundling
+groundmass
+groundnut
+groundout
+grounds
+groundsel
+groundsheet
+groundsill
+groundskeep
+groundskeepers
+groundsman
+groundspeed
+groundswell
+groundwater
+groundwork
+group
+group's
+groupable
+grouped
+grouper
+groupie
+groupie's
+groupies
+grouping
+groupings
+groupoid
+groups
+groupwork
+grouse
+groused
+grouser
+grouses
+grousing
+grout
+grouted
+grouter
+grouting
+grouts
+grouty
+grove
+grovel
+groveled
+groveler
+grovelers
+grovelike
+groveling
+grovelingly
+grovels
+grover
+grovers
+groves
+grovet
+grow
+grower
+growers
+growing
+growingly
+growl
+growled
+growler
+growlier
+growliness
+growling
+growlingly
+growls
+growly
+grown
+grownup
+grownup's
+grownups
+grows
+growth
+growths
+groyne
+grozing
+grozny
+grub
+grub's
+grubber
+grubbier
+grubbily
+grubbiness
+grubbing
+grubby
+grubs
+grubstake
+grubstaker
+grudge
+grudge's
+grudged
+grudger
+grudges
+grudging
+grudgingly
+gruel
+grueled
+grueler
+gruelers
+grueling
+gruelingly
+gruesome
+gruesomely
+gruesomeness
+gruff
+gruffly
+gruffness
+grugru
+grumble
+grumbled
+grumbler
+grumbles
+grumbling
+grumblingly
+grumbly
+Grumman
+grummet
+grumous
+grump
+grumped
+grumpier
+grumpily
+grumpiness
+grumping
+grumps
+grumpy
+Grundheber
+grundy
+grunion
+grunt
+grunted
+grunter
+grunting
+gruntle
+gruntled
+gruntles
+gruntling
+grunts
+Grus
+grusky
+Grusky
+Gruyere
+gryphon
+grysbok
+GSA
+gtad
+GU
+guacamole
+guacharo
+guaco
+guadalajara
+guadalcanal
+guadalquivir
+guadalupe
+Guadalupe
+Guadeloupe
+guadiana
+guaiacum
+Guam
+guan
+guanabara
+guanaco
+guanajuato
+guanase
+guanidine
+guanine
+guano
+guanosine
+Guarani
+guarantee
+guaranteed
+guaranteeing
+guaranteer
+guaranteers
+guarantees
+guarantor
+guaranty
+guard
+guardafui
+guardant
+guarded
+guardedly
+guardedness
+guarder
+guardhouse
+Guardia
+guardian
+guardian's
+guardians
+guardianship
+guarding
+guardrail
+guardroom
+guards
+guardsman
+guarneri
+Guatemala
+Guatemalan
+guava
+guayaquil
+guayule
+gubbins
+gubernatorial
+guck
+gudeance
+gudgeon
+gudrun
+guelders
+Guelph
+guenon
+Guenther
+Guenther's
+guerdon
+guerilla
+Guerin
+Guernica
+Guernsey
+guernsey
+guernseys
+Guerrero
+guerrilla
+guerrilla's
+guerrillas
+guess
+guessed
+guesser
+guesses
+guessing
+guesstimate
+guesswork
+guest
+guest's
+guested
+guesthouse
+guesting
+guests
+Guevara
+guff
+guffaw
+guffaws
+Guggenheim
+guggle
+guggled
+guggles
+guggling
+Guhleman
+guhleman
+Guiana
+guidable
+guidance
+guidances
+guide
+guidebook
+guidebook's
+guidebooks
+guided
+guideline
+guideline's
+guidelines
+guidepost
+guideposts
+guider
+guides
+guideway
+guiding
+Guido
+guidon
+guienne
+guignol
+guild
+guilder
+Guildford
+guildhall
+guildship
+guildsman
+guile
+guileful
+guilefully
+guilefulness
+guileless
+guilelessly
+guilelessness
+Guilford
+Guilford's
+Guillaume
+guillemot
+guilloche
+guillotine
+guillotine's
+guillotined
+guillotines
+guillotining
+Guillou
+guilt
+guiltier
+guiltiest
+guiltily
+guiltiness
+guiltless
+guiltlessly
+guiltlessness
+guilts
+guilty
+guimet
+guimpe
+Guinea
+guinea
+guineas
+Guinevere
+Guinevere's
+Guinness
+guipure
+guisard
+guiscard
+guise
+guise's
+guised
+guises
+guising
+guitar
+guitar's
+guitarfish
+guitarist
+guitarists
+guitars
+guizot
+Gujarat
+Gujarati
+gujranwala
+gul
+gulag
+gulags
+gular
+gulbenkian
+gulch
+gulch's
+gulches
+gulden
+gules
+gulf
+gulf's
+gulfs
+gulfweed
+gull
+gullable
+Gullah
+gulled
+gullet
+gullets
+gullibility
+gullible
+gullibly
+gullied
+gullies
+gulling
+gulls
+gully
+gully's
+gullying
+gulosity
+gulp
+gulped
+gulper
+gulps
+gum
+gum's
+gumbo
+gumboil
+gumdrop
+gumdrop's
+gumdrops
+gumma
+gummatous
+gummed
+gummer
+gummier
+gumminess
+gumming
+gummite
+gummosis
+gummous
+gummy
+gumption
+gums
+gumshield
+gumshoe
+gumtree
+gun
+gun's
+gunboat
+guncotton
+Gunderson
+gundog
+gunfight
+gunfighter
+gunfights
+gunfire
+gunfires
+gunflint
+gunge
+gunk
+gunky
+gunlock
+gunman
+gunmen
+gunmetal
+gunnar
+Gunnar
+gunned
+gunnel
+gunner
+gunner's
+gunners
+gunnery
+gunning
+gunny
+gunnysack
+gunpaper
+gunplay
+gunpoint
+gunpowder
+gunpowders
+gunpowdery
+gunrunner
+gunrunning
+guns
+gunsel
+gunship
+gunshot
+gunsling
+gunslinger
+gunslinging
+gunsmith
+gunstock
+gunter
+Gunther
+Gunther's
+guntur
+gunwale
+gunyah
+guppies
+guppy
+gur
+gurdwara
+gurgitation
+gurgle
+gurgled
+gurgles
+gurglet
+gurgling
+gurjun
+Gurkha
+Gurkha's
+gurkhali
+Gurmukhi
+gurnard
+gurney
+gurneys
+guru
+guru's
+gurus
+Gurzenich
+Gus
+gush
+gushed
+gusher
+gushes
+gushier
+gushily
+gushiness
+gushing
+gushy
+gusset
+gussets
+gust
+gust's
+Gustafson
+Gustafson's
+gustation
+gustative
+gustativeness
+gustatorial
+gustatorially
+gustatorily
+gustatory
+Gustav
+Gustav's
+Gustave
+Gustave's
+gustavo
+Gustavus
+gustily
+gustiness
+gusto
+gustoes
+gusts
+gusty
+gut
+gutbucket
+Gutenberg
+Guthrie
+guthrun
+gutless
+gutlessness
+guts
+gutser
+gutsier
+gutsiness
+gutsy
+gutta
+guttate
+guttation
+gutted
+gutter
+guttered
+guttering
+gutters
+guttersnipe
+guttersnipish
+guttier
+gutting
+guttural
+gutturalism
+gutturalization
+gutturalization's
+gutturalizations
+gutturalize
+gutturalized
+gutturalizes
+gutturalizing
+gutturalness
+gutty
+guv
+guy
+guy's
+Guyana
+guyed
+guyenne
+guyer
+guyers
+guying
+guyot
+guys
+guzzle
+guzzled
+guzzler
+guzzles
+guzzling
+gwalior
+gwelo
+Gwen
+gwent
+Gwyn
+Gwyn's
+gwynedd
+gwyniad
+gyani
+gybe
+gym
+gymkhana
+gymnasiarch
+gymnasiast
+gymnasium
+gymnasium's
+gymnasiums
+gymnast
+gymnast's
+gymnastic
+gymnastically
+gymnastics
+gymnasts
+gymnosophist
+gymnosperm
+gyms
+gymslip
+gynaeceum
+gynaecocracy
+gynaecoid
+gynaecomastia
+gynandrous
+gynarchy
+gynecium
+gynecocrat
+gynecocratic
+gynecologic
+gynecological
+gynecological's
+gynecologicals
+gynecologics
+gynecologies
+gynecologist
+gynecologist's
+gynecologists
+gynecology
+gynecology's
+gyniatrics
+gynophore
+gyp
+gypping
+gypseous
+gypsied
+gypsies
+gypsite
+Gypsophila
+gypsum
+gypsy
+gypsy's
+gypsying
+gyral
+gyrate
+gyrated
+gyrates
+gyrating
+gyration
+gyrational
+gyrations
+gyrator
+gyrators
+gyratory
+gyre
+gyrene
+gyrfalcon
+gyro
+gyrocompass
+gyrofrequency
+gyromagnetic
+gyron
+gyronny
+gyroplane
+gyros
+gyroscope
+gyroscope's
+gyroscopes
+gyroscopic
+gyroscopically
+gyrose
+gyrostabilizer
+gyrostat
+gyrostatic
+gyrostatics
+gyve
+h's
+ha
+Haag
+Haag's
+Haas
+habeas
+haberdasher
+haberdasheries
+haberdashery
+Haberman
+Haberman's
+Habib
+Habib's
+habiles
+habiliment
+habilitate
+habilitated
+habilitates
+habilitating
+habilitation
+habilitations
+habit
+habit's
+habitability
+habitable
+habitableness
+habitably
+habitant
+habitants
+habitat
+habitat's
+habitation
+habitation's
+habitations
+habitats
+habits
+habitual
+habitualize
+habitualizes
+habitually
+habitualness
+habituate
+habituated
+habituates
+habituating
+habituation
+habitude
+habitudes
+habitus
+Habsburg
+habu
+hac
+hachure
+hacienda
+haciendas
+hack
+hackamore
+hackberry
+hackbut
+hacked
+hacker
+hacker's
+hackers
+Hackett
+hacking
+hackle
+hackled
+hackler
+hackles
+hackling
+hackmatack
+hackney
+hackneyed
+hackneying
+hackneys
+hacks
+hacksaw
+hacksaws
+hackstaff
+hackwork
+had
+hadal
+Hadamard
+hadaway
+Haddad
+Haddad's
+Haddington
+haddix
+haddock
+haddocks
+hade
+hades
+Hades
+hadhramaut
+Hadith
+hadj
+hadji
+Hadley
+Hadley's
+hadn't
+Hadrian
+hadron
+hadrosaur
+hadst
+hae
+haecceity
+haeckel
+haem
+haemachrome
+haemacytometer
+haemagglutinate
+haemagglutinin
+haemagogue
+haemal
+haematein
+haematemesis
+haematic
+haematin
+haematinic
+haematite
+haematoblast
+haematocele
+haematocrit
+haematocryal
+haematogenesis
+haematogenous
+haematoid
+haematological
+haematology
+haematolysis
+haematoma
+haematopoiesis
+haematosis
+haematothermal
+haematoxylin
+Haematoxylon
+haematozoon
+haematuria
+haemic
+haemin
+haemochrome
+haemocoel
+haemocyanin
+haemocyte
+haemocytometer
+haemodialysis
+haemoflagellate
+haemoglobin
+haemoglobinuria
+haemoid
+haemolysin
+haemolysis
+haemophile
+haemophilia
+haemophiliac
+haemophilic
+haemopoiesis
+haemoptysis
+haemorrhage
+haemorrhagic
+haemorrhoidectomy
+haemorrhoids
+haemostasis
+haemostat
+haemostatic
+haeres
+hafiz
+Hafiz
+hafnium
+haft
+haftarah
+hag
+hagar
+hagbut
+Hagegard
+Hagen
+hagen
+Hagen's
+Hager
+Hager's
+hagfish
+haggadah
+haggadic
+haggadist
+haggadistic
+haggai
+haggard
+haggardly
+haggardness
+haggis
+haggish
+haggle
+haggled
+haggler
+haggles
+haggling
+hagiarchy
+hagiocracy
+Hagiographa
+hagiographer
+hagiographies
+hagiography
+hagiography's
+hagiolatry
+hagiology
+hagioscope
+Hagstrom
+Hagstrom's
+Hague
+hah
+Hahn
+Hahn's
+hahnemann
+Haida
+haidar
+Haifa
+haig
+haik
+haiku
+hail
+haile
+hailed
+hailer
+hailing
+hails
+hailstone
+hailstorm
+Hainan
+hainaut
+Haines
+haiphong
+hair
+hair's
+hairball
+hairbreadth
+hairbrush
+haircloth
+haircut
+haircut's
+haircuts
+haircutter
+haircutting
+hairdo
+hairdos
+hairdresser
+hairdresser's
+hairdressers
+hairdressing
+haired
+hairgrip
+hairier
+hairif
+hairiness
+hairless
+hairlessness
+hairlike
+hairline
+hairnet
+hairpiece
+hairpin
+hairs
+hairsbreadth
+hairsplitter
+hairsplitting
+hairspring
+hairspring's
+hairsprings
+hairstreak
+hairstyle
+hairstyle's
+hairstyles
+hairstyling
+hairstylist
+hairtail
+hairweaving
+hairworm
+hairy
+Haiti
+Haitian
+Haitink
+hajj
+hake
+Hakea
+hakim
+hakluyt
+hakodate
+Hal
+halafian
+halakah
+halal
+halation
+halberd
+halberdier
+halcyon
+halcyone
+haldane
+hale
+haleakala
+haler
+halesowen
+Haley
+Haley's
+half
+halfback
+halfbacks
+halfbeak
+halfhearted
+halfheartedly
+halfheartedness
+halfness
+halfpennies
+halfpenny
+halftime
+halftone
+halfway
+halfwit
+halfword
+halfword's
+halfwords
+halibut
+halibuts
+halicarnassus
+halide
+halides
+halidom
+Halifax
+haling
+halite
+halitosis
+hall
+hall's
+hallah
+hallam
+Hallamshire
+Halle
+hallel
+hallelujah
+hallelujahs
+haller
+Halley
+Halley's
+halliard
+halliards
+hallinan
+Hallinan
+hallmark
+hallmark's
+hallmarked
+hallmarking
+hallmarks
+hallo
+halloo
+halloos
+hallow
+hallowed
+Halloween
+hallowing
+Hallowmas
+hallows
+halls
+Hallstatt
+halluces
+hallucinate
+hallucinated
+hallucinates
+hallucinating
+hallucination
+hallucinational
+hallucinations
+hallucinative
+hallucinatory
+hallucinogen
+hallucinogenic
+hallucinogens
+hallucinosis
+hallux
+hallway
+hallway's
+hallways
+halm
+halma
+halmahera
+halmstad
+halo
+halobiont
+halocarbon
+halocline
+haloes
+halogen
+halogenate
+halogenation
+halogenous
+halogens
+haloid
+halomorphic
+halomorphism
+halophyte
+halos
+halothane
+Halpern
+halpern
+hals
+Halsey
+Halsey's
+Halstead
+Halstead's
+halt
+halted
+haltemprice
+halter
+haltere
+haltered
+haltering
+halters
+halting
+haltingly
+halts
+halvah
+halve
+halved
+halvers
+Halverson
+Halverson's
+halves
+halving
+halyard
+ham
+ham's
+hama
+hamadryad
+hamadryas
+Hamal
+Hamal's
+hamamatsu
+hamamelidaceous
+hamate
+hambletonian
+Hamburg
+hamburger
+hamburger's
+hamburgers
+hame
+hamelin
+hameln
+hamersley
+hamey
+Hamey
+hamhung
+hamilcar
+Hamilton
+Hamiltonian
+Hamiltonians
+Hamite
+Hamitic
+hamlet
+hamlet's
+hamletization
+hamletization's
+hamletizations
+hamletize
+hamletizes
+hamlets
+Hamlin
+Hamlin's
+hamm
+hammer
+hammered
+hammerer
+hammerfest
+hammerhead
+hammering
+hammerless
+hammerlock
+hammers
+hammersmith
+hammerstein
+hammertoe
+hammett
+Hammett
+hammier
+hammily
+hamminess
+hamming
+hammock
+hammock's
+hammocks
+Hammond
+hammurabi
+hammy
+hampden
+hamper
+hampered
+hampering
+hampers
+Hampshire
+hampstead
+Hampton
+hams
+hamshackle
+hamster
+hamsters
+hamstring
+hamstrung
+hamsun
+hamulus
+hamza
+hanaper
+hanau
+Hancock
+hand
+handbag
+handbag's
+handbags
+handball
+handbarrow
+handbell
+handbill
+handbook
+handbook's
+handbooks
+handbrake
+handbreadth
+handcar
+handcart
+handclasp
+handcraft
+handcraftman
+handcraftsman
+handcrank
+handcranks
+handcuff
+handcuffed
+handcuffing
+handcuffs
+handed
+handedly
+handedness
+Handel
+Handel's
+hander
+handers
+handfast
+handfasting
+handfeed
+handful
+handfuls
+handgrip
+handgun
+handguns
+handhold
+handicap
+handicap's
+handicapped
+handicapper
+handicapping
+handicaps
+handicraft
+handicrafter
+handicrafts
+handicraftsman
+handicraftsmen
+handier
+handiest
+handily
+handiness
+handing
+handiwork
+handkerchief
+handkerchief's
+handkerchiefs
+handle
+handleability
+handleable
+handlebar
+handlebars
+handled
+handleless
+handler
+handlers
+handles
+handless
+Handley
+handline
+handling
+handlist
+handmade
+handmaid
+handmaiden
+handout
+handouts
+handpick
+handpicked
+handpress
+handprint
+handprint's
+handprints
+handrail
+hands
+handsaw
+handsbreadth
+handseled
+handseling
+handset
+handsets
+handsful
+handshake
+handshake's
+handshaker
+handshakes
+handshaking
+handshook
+handsome
+handsomely
+handsomeness
+handsomer
+handsomest
+handspike
+handspikes
+handspring
+handsprings
+handstand
+handstands
+handstroke
+handwaving
+handwheel
+handwheels
+handwork
+handworker
+handwoven
+handwrite
+handwrites
+handwriting
+handwritings
+handwritten
+handwrought
+handy
+handyman
+handymen
+Haney
+Haney's
+Hanford
+Hanford's
+hang
+hangable
+hangar
+hangar's
+hangars
+hangbird
+hangchow
+hangdog
+hanged
+hanger
+hangers
+hanging
+hangman
+hangman's
+hangmen
+hangnail
+hangnail's
+hangnails
+hangout
+hangouts
+hangover
+hangover's
+hangovers
+hangs
+hangtag
+hangup
+hank
+Hankel
+Hankel's
+hanker
+hankerchief
+hankered
+hankerer
+hankering
+hankers
+hankie
+hankies
+hankow
+hanky
+Hanley
+Hanley's
+Hanlon
+Hanlon's
+Hanna
+Hanna's
+Hannah
+Hannibal
+hannover
+Hanoi
+Hanover
+Hanoverian
+Hanoverianize
+Hanoverianizes
+Hanoverize
+Hanoverizes
+hanratty
+Hans
+Hansard
+Hanseatic
+Hansel
+hanseled
+hanseling
+Hansen
+hansom
+Hanson
+hant
+hanter
+Hanukkah
+Hanuman
+Hanyang
+haole
+hap
+hapax
+hapchance
+hapgood
+Hapgood
+haphazard
+haphazardly
+haphazardness
+haphazardry
+haphtarah
+hapless
+haplessly
+haplessness
+haplite
+haplography
+haploid
+haploidy
+haplology
+haplosis
+haply
+happen
+happenchance
+happened
+happening
+happenings
+happens
+happenstance
+happier
+happiest
+happily
+happiness
+happing
+happy
+Hapsburg
+Hapsburg's
+hapten
+hapteron
+haptic
+hapto
+haptotropism
+harakiri
+harald
+harambee
+harangue
+harangued
+haranguer
+harangues
+haranguing
+harappa
+harar
+harass
+harassed
+harasser
+harasses
+harassing
+harassment
+harassments
+Harbin
+Harbin's
+harbinger
+harbingers
+harbor
+harbor's
+harborage
+harborages
+harbored
+harborer
+harborer's
+harborers
+harborful
+harboring
+harborless
+harborlesses
+harbors
+Harcourt
+hard
+hardback
+hardbake
+hardball
+hardboard
+hardboiled
+hardboot
+hardbound
+hardcase
+hardcopies
+hardcopy
+hardcover
+hardcovers
+hardecanute
+harden
+Hardenberg
+hardened
+hardener
+hardening
+hardens
+harder
+hardest
+hardfisted
+hardfistedness
+hardhack
+hardhanded
+hardhandedness
+hardhat
+hardhead
+hardheaded
+hardheadedly
+hardheadedness
+hardhearted
+hardheartedly
+hardheartedness
+hardicanute
+hardie
+hardier
+hardihood
+hardily
+hardiment
+Hardin
+hardiness
+harding
+hardings
+hardly
+hardmouthed
+hardness
+hardnesses
+hardpan
+hards
+hardscrabble
+hardshell
+hardship
+hardship's
+hardships
+hardstand
+hardstanding
+hardtack
+hardtop
+hardtops
+hardware
+hardwares
+hardwire
+hardwired
+hardwires
+hardwiring
+hardwood
+hardwoods
+hardworking
+Hardy
+hardy
+hare
+hare's
+harebell
+harebrain
+harebrained
+harelip
+harelipped
+harelips
+harem
+hares
+hargeisa
+Hargreaves
+haricot
+harijan
+harikari
+Haringey
+hark
+harked
+harken
+harking
+harks
+Harl
+Harlan
+Harlan's
+Harlem
+harlequin
+harlequinade
+Harley
+Harley's
+harlot
+harlot's
+harlotry
+harlots
+Harlow
+harm
+harmattan
+harmed
+harmer
+harmful
+harmfully
+harmfulness
+harming
+harmless
+harmlessly
+harmlessness
+Harmon
+Harmon's
+harmonic
+harmonica
+harmonica's
+harmonical
+harmonically
+harmonicalness
+harmonicas
+harmonics
+harmonies
+harmonious
+harmoniously
+harmoniousness
+Harmonist
+harmonist
+Harmonistic
+Harmonistically
+harmonium
+harmonizable
+harmonizable's
+harmonizables
+harmonization
+harmonization's
+harmonizations
+harmonize
+harmonized
+harmonizer
+harmonizers
+harmonizes
+harmonizing
+harmonograph
+harmonographs
+harmony
+harmotome
+harms
+Harmsworth
+harness
+harnessed
+harnesser
+harnesses
+harnessing
+harney
+Harold
+harp
+harped
+harpenden
+Harper
+harper
+harpers
+harpies
+harping
+harpings
+harpist
+harpoon
+harpoon's
+harpooned
+harpooner
+harpooning
+harpoons
+harps
+harpsichord
+harpsichordist
+harpsichords
+harpy
+harpy's
+harquebus
+harquebusier
+harrar
+harridan
+harried
+harrier
+Harriet
+Harrild
+Harriman
+Harriman's
+Harrington
+Harrington's
+Harris
+Harrisburg
+Harrison
+Harrisonburg
+harrogate
+Harrovian
+harrow
+harrowed
+harrower
+harrowing
+harrows
+harrumph
+harrumphed
+harrumphes
+harrumphing
+harrumphs
+harry
+Harry's
+harrying
+harsh
+harshen
+harshened
+harshening
+harsher
+harshest
+harshly
+harshness
+harslet
+hart
+hartal
+harte
+hartebeest
+Hartford
+harthacanute
+hartlepool
+Hartley
+Hartman
+hartnell
+hartree
+hartshead
+harun
+haruspex
+Harvard
+Harvardize
+Harvardizes
+harvest
+harvestable
+harvested
+harvester
+harvesters
+harvesting
+harvestman
+harvestmen
+harvests
+harvesttime
+Harvey
+Harveyize
+Harveyizes
+Harveys
+harwell
+harwich
+haryana
+harz
+has
+hasa
+hasdrubal
+hash
+hashed
+hashemite
+hasher
+hashes
+hashing
+hashish
+hask
+haskell
+Haskell
+haskins
+Haskins
+haslet
+hasn't
+hasp
+hasps
+hassan
+hasselt
+hassle
+hassled
+hassler
+hassles
+hassling
+hassock
+hassocks
+hast
+hastate
+hastately
+haste
+hasted
+hasten
+hastened
+hastener
+hastening
+hastens
+hastes
+hastier
+hastiest
+hastily
+hastiness
+hasting
+hastings
+hasty
+hat
+hat's
+hatband
+hatbox
+hatch
+hatchability
+hatchable
+hatchback
+hatcheck
+hatched
+hatcheled
+hatcheling
+hatcher
+hatcheries
+hatchery
+hatchery's
+hatches
+hatchet
+hatchet's
+hatchets
+hatching
+hatchling
+hatchment
+hatchments
+Hatchure
+hatchure
+hatchway
+hate
+hated
+hateful
+hatefully
+hatefulness
+hater
+hates
+Hatfield
+hath
+Hathaway
+Hathaway's
+Hathor
+hating
+hatless
+hatpin
+hatred
+hats
+hatshepsut
+hatted
+hatter
+Hatteras
+hatters
+Hattie
+Hattiesburg
+Hattiesburg's
+hatting
+Hattize
+Hattizes
+haubergeon
+hauberk
+Haugen
+Haugen's
+haugh
+haughtier
+haughtily
+haughtiness
+haughty
+haul
+haulage
+haulageway
+haulaway
+hauled
+hauler
+haulers
+haulier
+hauling
+haulm
+hauls
+haunch
+haunch's
+haunches
+haunt
+haunted
+haunter
+haunting
+hauntingly
+haunts
+Hauptmann
+hauraki
+Hausa
+Hausa's
+Hausdorff
+Hausdorff's
+hauser
+Hauser
+hausfrau
+haustellum
+haustorium
+hautboy
+hautboys
+haute
+hauteur
+Havana
+havant
+have
+havel
+havelock
+haven
+haven's
+haven't
+havens
+haver
+havering
+havers
+haversack
+haversack's
+haversacks
+Haversian
+haves
+havildar
+Havilland
+Havilland's
+having
+havoc
+havocked
+havocking
+havocs
+havre
+haw
+Hawaii
+Hawaiian
+hawes
+hawfinch
+hawhaw
+Hawick
+hawing
+hawk
+hawkbill
+hawked
+hawker
+hawkers
+hawking
+Hawkins
+hawkish
+hawkishly
+hawkishness
+hawks
+hawksbill
+hawkweed
+Hawley
+haworth
+hawse
+hawsehole
+hawsepipe
+hawser
+hawthorn
+Hawthorne
+hay
+haybox
+haycock
+Hayden
+Hayden's
+Haydn
+hayer
+Hayes
+hayfield
+hayfields
+hayfork
+haying
+hayloft
+hayloft's
+haylofts
+haymaker
+haymaking
+haymow
+Haynes
+hayrack
+hayrick
+hayride
+hays
+hayseed
+hayseeds
+haystack
+haystacks
+Hayward
+haywire
+haywood
+Haywood
+hazard
+hazard's
+hazarded
+hazarding
+hazardize
+hazardizes
+hazardous
+hazardously
+hazardousness
+hazards
+haze
+haze's
+hazed
+hazel
+hazelhen
+hazelnut
+hazelnuts
+hazer
+hazes
+hazier
+haziest
+hazily
+haziness
+hazing
+hazlitt
+hazy
+HDL
+he
+he'd
+he'll
+he's
+head
+head's
+headache
+headache's
+headaches
+headachy
+headband
+headboard
+headboards
+headcount
+headdress
+headed
+header
+headers
+headfirst
+headforemost
+headgear
+headgroup
+headgroup's
+headgroups
+headhunter
+headier
+headily
+headiness
+heading
+heading's
+headings
+headlamp
+headland
+headland's
+headlands
+headless
+headlessness
+headlight
+headlights
+headline
+headlined
+headliner
+headlines
+headlining
+headlock
+headlong
+headman
+headman's
+headmaster
+headmastership
+headmen
+headmen's
+headmistress
+headmost
+headnote
+headphone
+headphone's
+headphones
+headpiece
+headpin
+headquarter
+headquartered
+headquarters
+headrace
+headrail
+headreach
+headrest
+headroom
+heads
+headsail
+headscarf
+headset
+headsets
+headship
+headshrinker
+headsman
+headsmen
+headspring
+headsquare
+headstall
+headstand
+headstands
+headstock
+headstone
+headstones
+headstream
+headstrong
+headwaiter
+headwall
+headwalls
+headward
+headwards
+headwater
+headwaters
+headway
+headwind
+headwind's
+headwinds
+headword
+headwork
+heady
+heal
+heald
+healds
+healed
+healer
+healers
+Healey
+Healey's
+healing
+heals
+health
+healthful
+healthfully
+healthfulness
+healthier
+healthiest
+healthily
+healthiness
+healths
+healthy
+Healy
+Healy's
+heap
+heaped
+heaping
+heaps
+hear
+heard
+Heard
+hearer
+hearers
+hearest
+hearing
+hearings
+hearken
+hearkened
+hearkening
+hears
+hearsay
+hearse
+hearses
+hearsing
+Hearst
+heart
+heart's
+heartache
+heartache's
+heartaches
+heartbeat
+heartbeats
+heartbreak
+heartbreaking
+heartbreakingly
+heartbroken
+heartburn
+heartburning
+hearted
+heartedly
+hearten
+heartened
+heartening
+hearteningly
+heartens
+heartfelt
+hearth
+hearths
+hearthstone
+heartier
+hearties
+heartiest
+heartily
+heartiness
+heartland
+heartland's
+heartless
+heartlessly
+heartlessness
+heartrending
+heartrendingly
+hearts
+heartsease
+heartsick
+heartsickness
+heartsome
+heartsomely
+heartsore
+heartstring
+heartstrings
+heartthrob
+heartthrob's
+heartthrobs
+heartwarming
+heartwood
+Heartwood
+heartworm
+hearty
+heat
+heatable
+heated
+heatedly
+heater
+heaters
+heath
+heathberry
+heathen
+heathendom
+heathenish
+heathenishly
+heathenism
+heathenization
+heathenize
+heathenized
+heathenizes
+heathenizing
+heathenry
+heather
+heathery
+heathfowl
+Heathkit
+heathless
+heathlike
+heathman
+Heathman
+heating
+heatless
+heats
+heatstroke
+heaume
+heave
+heaved
+heaven
+heaven's
+heavenize
+heavenizes
+heavenliness
+heavenly
+heavens
+heavenward
+heavenwards
+heaver
+heavers
+heaves
+heavier
+heavies
+heaviest
+heavily
+heaviness
+heaving
+Heaviside
+heavy
+heavyhearted
+heavyheartedly
+heavyheartedness
+heavyset
+heavyweight
+hebbel
+hebdomad
+hebdomadal
+hebdomadally
+Hebe
+hebephrenia
+hebephrenic
+hebetate
+hebetation
+hebetic
+hebetude
+hebetudinous
+Hebraic
+Hebraicize
+Hebraicizes
+Hebraism
+Hebraist
+hebraization
+hebraizations
+hebraize
+hebraized
+hebraizes
+hebraizing
+Hebrew
+Hebrews
+Hebrides
+Hebrides's
+Hebron
+Hecate
+Hecate's
+hecatomb
+heck
+heckelphone
+heckle
+heckled
+heckler
+hecklers
+heckles
+heckling
+Heckman
+Heckman's
+hectare
+hectares
+hectic
+hectically
+hectocotylus
+hectogram
+hectogram's
+hectograms
+hectograph
+hectographic
+hectoliter
+hectometer
+hectometer's
+hectometers
+hector
+Hecuba
+hedda
+Hedda
+heddle
+heddler
+hedge
+hedged
+hedgehog
+hedgehog's
+hedgehogs
+hedgehop
+hedgehopper
+hedgepig
+hedger
+hedgerow
+hedges
+hedging
+hedgingly
+hedjaz
+hedonic
+hedonically
+hedonics
+hedonism
+hedonist
+hedonistic
+hedonistically
+hedonists
+hee
+heed
+heeded
+heedful
+heedfully
+heedfulness
+heeding
+heedless
+heedlessly
+heedlessness
+heeds
+heehaw
+heel
+heelball
+heeled
+heeler
+heelers
+heeling
+heelless
+heelpiece
+heelpost
+heels
+heeltap
+heenan
+heerlen
+heffer
+heft
+hefted
+heftier
+heftily
+heftiness
+hefts
+hefty
+Hegel
+hegel
+Hegelian
+Hegelianize
+Hegelianizes
+hegemonic
+hegemonies
+hegemony
+hegira
+hegumen
+heh
+Heidegger
+heidegger
+Heidegger's
+Heidelberg
+Heidi
+Heidi's
+heiduc
+heifer
+Heifetz
+heigh
+height
+heighten
+heightened
+heightening
+heightens
+heights
+heilbronn
+heilungkiang
+Heine
+Heine's
+Heinlein
+Heinlein's
+heinous
+heinously
+heinousness
+Heinrich
+Heinrich's
+Heinz
+Heinze
+heinze
+heir
+heir's
+heirdom
+heiress
+heiress's
+heiresses
+heirless
+heirloom
+heirs
+heirship
+Heisenberg
+Heiser
+heiser
+heist
+heist's
+heisted
+heister
+heisting
+heists
+heitiki
+heitler
+hejira
+hekate
+hekla
+hel
+held
+heldentenor
+Helen
+Helena
+Helene
+Helga
+Helga's
+Helgoland
+heliacal
+heliacally
+Helianthus
+helical
+helically
+helices
+helichrysum
+helicline
+helicograph
+helicoid
+helicoidal
+helicon
+helicopt
+helicopted
+helicopter
+helicopters
+helicopting
+Heligoland
+heliocentric
+heliochrome
+Heliogabalus
+heliogram
+heliogram's
+heliograms
+heliograph
+heliographer
+heliographic
+heliography
+heliogravure
+heliolatrous
+heliolatry
+heliolithic
+heliometer
+heliometer's
+heliometers
+heliometric
+heliometrically
+heliophyte
+Heliopolis
+heliopolis
+Helios
+heliostat
+heliotaxis
+heliotherapy
+heliotrope
+heliotropic
+heliotropically
+heliotropin
+heliotropism
+heliotype
+heliozoan
+heliozoic
+helipad
+heliport
+helistop
+helium
+helix
+helixes
+hell
+hell's
+Helladic
+Hellas
+hellbender
+hellbent
+hellbox
+hellbroth
+hellcat
+Helldiver
+helle
+hellebore
+Helleborine
+Hellenic
+Hellenism
+Hellenist
+Hellenistic
+Hellenization
+Hellenizations
+Hellenize
+Hellenized
+Hellenizes
+Hellenizing
+heller
+hellery
+helles
+Hellespont
+hellfire
+hellgrammite
+hellhole
+hellhound
+hellion
+hellish
+hellishly
+hellishness
+hello
+hellos
+hells
+helluva
+helm
+helmand
+helmet
+helmet's
+helmeted
+helmetlike
+helmets
+Helmholtz
+helminth
+helminthiasis
+helminthic
+helminthology
+helmont
+helmsman
+helmsmanship
+helmsmen
+Helmut
+helot
+helotism
+helotry
+help
+helped
+helper
+helpers
+helpful
+helpfully
+helpfulness
+helping
+helpless
+helplessly
+helplessness
+helpmann
+helpmate
+helpmeet
+helps
+helsingborg
+Helsinki
+helve
+helved
+helvellyn
+helves
+Helvetia
+Helvetian
+Helvetic
+Helvetica
+Helvetii
+helving
+hem
+hem's
+hemacytometer
+hemacytometer's
+hemacytometers
+hemal
+hematic
+hematin
+hematinic
+hematite
+hematoblast
+hematoblastic
+hematocrit
+hematogenous
+hematologic
+hematological
+hematologist
+hematology
+hematoma
+hematophagous
+hemel
+hemelytron
+hemeralopia
+hemialgia
+hemianopsia
+hemicellulose
+hemichordate
+hemicycle
+hemidemisemiquaver
+hemielytron
+hemihedral
+hemihedrally
+hemihydrate
+hemihydrated
+hemimetabolic
+hemimetabolism
+hemimetabolous
+hemimorphic
+hemimorphism
+hemimorphite
+Hemingway
+hemiola
+hemiparasite
+hemiparasitic
+hemiplegia
+hemiplegic
+hemipode
+hemipteran
+hemipterous
+hemispheral
+hemisphere
+hemisphere's
+hemisphered
+hemispheres
+hemispheric
+hemispherical
+hemispheroid
+hemistich
+hemiterpene
+hemline
+hemlock
+hemlock's
+hemlocks
+hemmed
+hemmer
+hemming
+Hemmings
+hemoblast
+hemodynamically
+hemodynamics
+hemoflagellate
+hemoglobin
+hemoglobinic
+hemoglobinopathy
+hemoglobinous
+hemolymph
+hemolysin
+hemolytic
+hemophilia
+hemophiliac
+hemophilic
+hemoprotein
+hemoptysis
+hemorrhage
+hemorrhaged
+hemorrhages
+hemorrhagic
+hemorrhaging
+hemorrhoid
+hemorrhoidal
+hemorrhoids
+hemosiderin
+hemostasis
+hemostat
+hemostatic
+hemostats
+hemp
+hempel
+hempen
+Hempstead
+Hempstead's
+hems
+hemstitch
+hemus
+hen
+hen's
+henae
+henbane
+henbit
+hence
+henceforth
+henceforward
+henchman
+henchmen
+hencoop
+hendecagon
+hendecahedron
+hendecasyllabic
+hendecasyllable
+Henderson
+hendiadys
+Hendrick
+Hendricks
+Hendrickson
+Hendrix
+hendrix
+henequen
+henge
+hengelo
+hengist
+henhouse
+Henie
+Henley
+Henley's
+henna
+hennery
+Hennessey
+Hennessey's
+Hennessy
+henning
+henotheism
+henotheist
+henotheistic
+henpeck
+henpecked
+Henri
+Henri's
+Henrietta
+henry
+Henryson
+hens
+Henslowe
+hent
+Henze
+hep
+heparin
+heparinize
+hepatic
+hepatica
+hepatitis
+hepatize
+hepatized
+hepatizes
+hepatizing
+hepatocellular
+hepatocyte
+hepatocyte's
+hepatocytes
+hepatoma
+Hepburn
+hepcat
+Hephaestus
+hepplewhite
+hepta
+heptad
+heptadecanoic
+heptagon
+heptagonal
+heptahedron
+heptamerous
+heptameter
+heptameter's
+heptameters
+heptane
+heptangular
+heptarchy
+heptastich
+Heptateuch
+heptatriene
+heptavalent
+heptose
+hepworth
+her
+Hera
+heraclea
+heracles
+Heraclid
+Heraclitus
+herakleion
+herald
+heralded
+heraldic
+heraldically
+heralding
+heraldize
+heraldizes
+heraldry
+heralds
+Herat
+herb
+herb's
+herbaceous
+herbage
+herbal
+herbalist
+herbarium
+Herbert
+herbicidal
+herbicidally
+herbicide
+herbicide's
+herbicides
+herbivore
+herbivorous
+herbivorously
+herblike
+herbs
+herby
+hercegovina
+herculaneum
+Herculean
+Hercules
+Hercynian
+herd
+herded
+herder
+herdic
+herding
+herdlike
+herds
+herdsman
+herdsmen
+here
+here's
+hereabout
+hereabouts
+hereafter
+hereat
+hereaway
+hereaways
+hereby
+heredes
+hereditable
+hereditament
+hereditarian
+hereditarianism
+hereditarily
+hereditary
+hereditist
+heredity
+Hereford
+Herefordshire
+herein
+hereinabove
+hereinafter
+hereinbefore
+hereinbelow
+hereinto
+hereof
+hereon
+Herero
+heres
+heresiarch
+heresy
+heretic
+heretic's
+heretical
+heretically
+hereticalness
+hereticize
+hereticizes
+heretics
+hereto
+heretofore
+hereunder
+hereunto
+hereupon
+hereward
+herewith
+heriot
+herisau
+heritability
+heritable
+heritage
+heritages
+heritor
+herl
+herm
+Herman
+Hermann
+Hermann's
+hermannstadt
+hermaphrodite
+hermaphrodite's
+hermaphrodites
+hermaphroditic
+hermaphroditically
+hermaphroditism
+Hermaphroditus
+hermatypic
+hermeneutic
+hermeneutical
+hermeneutically
+hermeneutics
+Hermes
+hermetic
+hermetical
+hermetically
+hermeticism
+hermetism
+hermetist
+hermit
+hermit's
+hermitage
+hermitage's
+hermitages
+Hermite
+hermitian
+hermitism
+hermits
+hermon
+Hermosa
+hermosillo
+hermoupolis
+hern
+Hernandez
+hernandez
+Hernandez's
+herne
+hernia
+hernia's
+hernial
+hernias
+herniate
+herniated
+herniates
+herniating
+herniation
+herniations
+herniorrhaphy
+hero
+hero's
+herod
+herodias
+Herodotus
+heroes
+heroic
+heroical
+heroically
+heroicomic
+heroicomical
+heroics
+heroin
+heroine
+heroine's
+heroines
+heroinism
+heroinize
+heroinizes
+heroism
+heroization
+heroization's
+heroizations
+heroize
+heroized
+heroizes
+heroizing
+heron
+heron's
+heronry
+herons
+herophilus
+heros
+herpes
+herpesvirus
+herpetic
+herpetologic
+herpetological
+herpetologically
+herpetologist
+herpetologists
+herpetology
+Herr
+herrick
+herring
+herring's
+herringbone
+herrings
+Herrington
+herrington
+herriot
+hers
+Herschel
+herself
+hersey
+Hersey
+Hershel
+Hershey
+herstmonceux
+Hertford
+Hertfordshire
+herty
+hertz
+hertzes
+Hertzian
+Hertzog
+Hertzog's
+Herzegovina
+Herzl
+Herzog
+hesiod
+hesiometer
+hesiometer's
+hesiometers
+Hesione
+hesitance
+hesitancy
+hesitant
+hesitantly
+hesitate
+hesitated
+hesitater
+hesitates
+hesitating
+hesitatingly
+hesitation
+hesitations
+Hesperia
+Hesperian
+Hesperides
+hesperidin
+hesperidium
+Hesperus
+Hess
+Hesse
+Hesse's
+Hessian
+Hessians
+hest
+Hester
+Hester's
+hestia
+Hesychast
+Het
+hetaera
+hetaerism
+heterarchy
+heterecious
+hetero
+heteroatom
+heteroautotrophic
+heterocercal
+heterochromatic
+heterochromatin
+heterochromatins
+heterochromosome
+heterochromous
+heteroclite
+heterocycle
+heterocyclic
+heterocyst
+heterodactyl
+heterodont
+heterodox
+heterodoxy
+heterodyne
+heteroecious
+heteroecism
+heterogamete
+heterogametic
+heterogamous
+heterogamy
+heterogeneity
+heterogeneous
+heterogeneously
+heterogeneousness
+heterogenesis
+heterogenetic
+heterogenous
+heterogeny
+heterogonic
+heterogony
+heterograft
+heterography
+heterogynous
+heterolecithal
+heterologous
+heterologously
+heterology
+heterolysis
+heterolytic
+heteromerous
+heteromorphic
+heteromorphism
+heteromorphous
+heteronomous
+heteronomously
+heteronomy
+heteronym
+Heteroousian
+heterophil
+heterophile
+heterophony
+heterophyllous
+heterophylly
+heterophyte
+heterophytic
+heteroplasty
+heteroploid
+heteroploidy
+heteropolar
+heteropolarity
+heteropterous
+heteroscedasticity
+heterosexual
+heterosexuality
+heterosexually
+heterosexuals
+heterosis
+heterosporous
+heterostructure
+heterostyly
+heterotaxis
+heterothallic
+heterotic
+heterotopia
+heterotopic
+heterotroph
+heterotrophic
+heterotrophically
+heterotypic
+heterotypical
+heterozygosis
+heterozygosity
+heterozygote
+heterozygous
+heth
+Hetman
+Hetman's
+Hettie
+Hettie's
+Hetty
+Hetty's
+Heublein
+heuristic
+heuristic's
+heuristically
+heuristics
+Heusen
+Heusen's
+Heuser
+Heuser's
+hevelius
+hevesy
+hew
+hewed
+hewer
+Hewett
+Hewett's
+hewing
+Hewitt
+Hewitt's
+Hewlett
+Hewlett's
+hewn
+hews
+hex
+hexachloride
+hexachloroethane
+hexachlorophene
+hexachord
+hexacosanoic
+hexad
+hexade
+hexadecane
+hexadecimal
+hexadecimally
+hexadecimals
+hexadic
+hexaemeron
+hexafluoride
+hexagon
+hexagonal
+hexagonally
+hexagons
+hexagram
+hexahedron
+hexahydrate
+hexahydrated
+hexahydrite
+hexamerous
+hexameter
+hexamethonium
+hexane
+hexangular
+hexanoic
+hexapla
+hexaploid
+hexaploidy
+hexapod
+hexapody
+hexastich
+hexastyle
+Hexateuch
+hexavalent
+hexene
+hexer
+hexone
+hexosan
+hexose
+hexyl
+hexylresorcinol
+hey
+heyday
+heyduck
+heyerdahl
+Heynis
+Heysham
+heywood
+Heywood
+Hezekiah
+hi
+Hialeah
+Hiatt
+Hiatt's
+hiatus
+hiatuses
+Hiawatha
+hibachi
+Hibbard
+Hibbard's
+hibernaculum
+hibernal
+hibernate
+hibernated
+hibernates
+hibernating
+hibernation
+hibernator
+Hibernia
+Hibernicism
+hibiscus
+hic
+hiccup
+hiccuped
+hiccuping
+hiccups
+hick
+Hickey
+Hickeys
+Hickman
+Hickman's
+hickok
+Hickok
+hickories
+hickory
+Hickox
+hicks
+hid
+hidalgo
+hidden
+hiddenite
+hide
+hideaway
+hidebound
+hided
+hideous
+hideously
+hideousness
+hideout
+hideout's
+hideouts
+hider
+hides
+Hideyoshi
+hiding
+hidrosis
+hidrotic
+hie
+hieing
+Hieland
+hiemal
+hieracosphinx
+hierarch
+hierarchal
+hierarchic
+hierarchical
+hierarchically
+hierarchies
+hierarchy
+hierarchy's
+hieratic
+hieratically
+hierocracy
+hierodule
+hieroglyph
+hieroglyphic
+hieroglyphical
+hieroglyphically
+hieroglyphics
+hierogram
+hierology
+Hieronymus
+hierophant
+hifalutin
+Higgins
+higgle
+higgled
+higgler
+higgles
+higgling
+high
+highball
+highbinder
+highborn
+highboy
+highbred
+highbrow
+highbrowed
+highbrowism
+highchair
+higher
+highest
+highfalutin
+Highfield
+highhanded
+highjack
+highland
+highlander
+highlands
+highlife
+highlight
+highlighted
+highlighting
+highlights
+highline
+highlines
+highly
+highness
+highness's
+highnesses
+highroad
+highs
+hight
+hightail
+highveld
+highway
+highway's
+highwayman
+highwaymen
+highways
+hijack
+hijacked
+hijacker
+hijackers
+hijacking
+hijacks
+hijaz
+hijinks
+hike
+hiked
+hiker
+hikers
+hikes
+hiking
+hilarious
+hilariously
+hilariousness
+hilarity
+Hilary
+Hilbert
+Hildebrand
+Hildebrand's
+Hildesheim
+hilding
+hill
+hill's
+hilla
+hillary
+Hillary
+hillbilly
+Hillcrest
+hilled
+Hillel
+hiller
+hillery
+hillfort
+hilliard
+hillier
+hilling
+hillingdon
+hillman
+hillmen
+hillock
+hillocks
+hillocky
+hills
+Hillsboro
+Hillsdale
+hillside
+hilltop
+hilltop's
+hilltops
+hilly
+hillyer
+hilt
+hilt's
+Hilton
+hilts
+hilum
+hilus
+hilversum
+him
+himachal
+Himalaya
+Himalaya's
+himalayas
+Himalayas
+himation
+himeji
+himmler
+Himmler
+hims
+himself
+Himyarite
+Himyaritic
+hin
+Hinayana
+hinckley
+hind
+hindbrain
+Hindemith
+Hindenburg
+hinder
+hindered
+hinderer
+hindering
+hinders
+hindgut
+Hindi
+hindmost
+hindoo
+hindquarter
+hindquarters
+hindrance
+hindrances
+hinds
+hindsight
+Hindu
+Hindu's
+Hinduism
+Hindus
+hindustan
+Hindustan
+Hindustan's
+Hines
+hinge
+hinged
+hinger
+hinges
+hinging
+hingism
+Hinkle
+hinkle
+Hinman
+Hinman's
+hinny
+Hinsdale
+hinshelwood
+hint
+hinted
+hinter
+hinterland
+hinterlands
+hinting
+hints
+hip
+hip's
+hipbone
+hipness
+hipparch
+hipparchus
+Hippeastrum
+hipped
+hipper
+hippest
+hippie
+hippies
+hipping
+hippo
+hippocampal
+hippocampus
+hippocras
+Hippocrates
+Hippocratic
+Hippocrene
+hippodrome
+hippogriff
+hippolyta
+Hippolytus
+Hippomenes
+hippopotamus
+hippos
+hippy
+hips
+hipster
+hipsterism
+hipsters
+hiragana
+Hiram
+hircine
+hire
+hired
+hireling
+hirelings
+hirer
+hirers
+hires
+Hirey
+hirey
+hiri
+hiring
+hirings
+hirohito
+Hiroshi
+Hiroshi's
+hiroshige
+Hiroshima
+Hirsch
+hirseled
+hirseling
+hirsute
+hirsuteness
+hirsutism
+hirsutulous
+Hirudin
+hirundine
+his
+Hispania
+Hispanic
+Hispanic's
+Hispanicism
+Hispanicization
+Hispanicize
+Hispanicized
+Hispanicizes
+Hispanicizing
+Hispanics
+Hispaniola
+hispid
+hiss
+hissed
+hisser
+hisses
+hissing
+hist
+histaminase
+histamine
+histaminergic
+histaminic
+histidine
+histiocyte
+histochemic
+histochemical
+histochemistry
+histogen
+histogenesis
+histogram
+histogram's
+histograms
+histoid
+histologic
+histological
+histologically
+histologist
+histology
+histolysis
+histolytic
+histone
+histopathologic
+histopathological
+histopathologically
+histopathologist
+histopathology
+histophysiologic
+histophysiological
+histophysiology
+histoplasmosis
+historian
+historian's
+historians
+historiated
+historic
+historical
+historically
+historicalness
+historicism
+historicist
+historicity
+historicize
+historicized
+historicizes
+historicizing
+histories
+historiographer
+historiographic
+historiographical
+historiographically
+historiography
+history
+history's
+histrionic
+histrionically
+histrionics
+hit
+hit's
+Hitachi
+hitch
+Hitchcock
+hitched
+hitcher
+hitches
+hitchhike
+hitchhiked
+hitchhiker
+hitchhikers
+hitchhikes
+hitchhiking
+hitching
+hither
+hithermost
+hitherto
+hitherward
+Hitler
+Hitlerian
+Hitlerism
+Hitlerite
+Hitlerites
+hitless
+hitparade
+hits
+hitter
+hitter's
+hitters
+hitting
+Hittite
+hive
+hiveless
+hives
+hiving
+hmm
+hmso
+ho
+hoactzin
+hoad
+hoagie
+hoagies
+Hoagland
+Hoagland's
+hoagy
+hoar
+hoard
+hoarded
+hoarder
+hoarding
+hoards
+hoarfrost
+hoarhound
+hoarier
+hoariness
+hoarse
+hoarsely
+hoarsen
+hoarsened
+hoarseness
+hoarsening
+hoarser
+hoarsest
+hoary
+hoatching
+hoatzin
+hoax
+hoax's
+hoaxed
+hoaxer
+hoaxes
+hoaxing
+hob
+Hobart
+Hobart's
+hobbema
+Hobbes
+hobbies
+hobbing
+Hobbism
+hobble
+hobbled
+hobbledehoy
+hobbler
+hobbles
+hobbling
+Hobbs
+hobby
+hobby's
+hobbyhorse
+hobbyist
+hobbyist's
+hobbyists
+hobday
+Hobday
+hobgoblin
+hobnail
+hobnailed
+hobnob
+hobnobbed
+hobnobber
+hobnobbing
+hobnobs
+hobo
+Hoboken
+hobos
+hoc
+Hochheimer
+hochhuth
+hock
+hockaday
+hocker
+hockey
+hocking
+hockney
+hocks
+Hocktide
+hocus
+hocused
+hocusing
+hocussed
+hocussing
+hod
+hodad
+hodaddy
+hodden
+hodeida
+Hodge
+hodge
+Hodge's
+hodgepodge
+hodges
+Hodgkin
+Hodgkin's
+Hodgson
+hodman
+hodometer
+hodoscope
+hoe
+hoe's
+hoecake
+hoedown
+hoeing
+hoek
+Hoene
+hoer
+hoes
+hofei
+Hoff
+Hoff's
+Hoffman
+Hofmann
+hofmannsthal
+hofuf
+hog
+hog's
+Hogan
+hogan
+Hogan's
+hogarth
+hogback
+hogg
+hogged
+hogging
+hoggish
+hoggishly
+hoggishness
+hogmanay
+hognosed
+hogs
+hogshead
+hogtie
+hogue
+hogwash
+hogweed
+hohenlinden
+hohenlohe
+hohenstaufen
+Hohenzollern
+hoi
+hoick
+hoicks
+hoiden
+hoising
+hoist
+hoisted
+hoister
+hoisting
+hoistman
+hoistmen
+hoists
+hokan
+hoke
+hokey
+hokeyer
+hokeyest
+hokeyness
+hokeypokey
+hoking
+hokkaido
+hokku
+hokum
+hokusai
+holabird
+holandric
+holandry
+holarctic
+holbein
+Holbrook
+Holcomb
+Holcomb's
+hold
+holdall
+holdalls
+holdback
+holden
+holder
+holders
+holdfast
+holding
+holdings
+holdout
+holdouts
+holdover
+holdovers
+holds
+holdup
+holdups
+hole
+hole's
+holeable
+holed
+holes
+holey
+holiday
+holiday's
+holidayer
+holidaymaker
+holidays
+holier
+holies
+holily
+holiness
+holing
+holinshed
+holism
+holistic
+holistically
+holkar
+Holland
+Holland's
+hollandaise
+Hollander
+Hollanders
+Hollandia
+Hollands
+hollas
+holler
+hollered
+hollering
+Hollerith
+hollers
+Holliday
+hollies
+Holliger
+Hollingsworth
+Hollingsworth's
+Hollister
+hollo
+holloa
+hollow
+holloware
+Holloway
+Holloway's
+hollowed
+hollower
+hollowest
+hollowing
+hollowly
+hollowness
+hollows
+hollowware
+holly
+hollyhock
+hollyhocks
+Hollywood
+Hollywood's
+Hollywoodize
+Hollywoodizes
+Holm
+Holm's
+Holman
+Holman's
+Holmdel
+Holmdel's
+Holmes
+holmic
+holmium
+holoblastic
+holoblastically
+holocaine
+holocaust
+Holocene
+holoenzyme
+holofernes
+hologamous
+hologamy
+hologram
+hologram's
+holograms
+holograph
+holographic
+holographically
+holography
+hologynic
+hologyny
+holohedral
+holometabolism
+holometabolous
+holomyarian
+holophrastic
+holophytic
+holoplankton
+holothurian
+holotype
+holotypic
+holozoic
+holp
+holpen
+hols
+Holst
+Holstein
+holster
+holstered
+holstering
+holsters
+holt
+holy
+holyhead
+holyoake
+Holyoke
+holystone
+holystones
+holytide
+holzman
+Holzman
+Hom
+homage
+homaged
+homager
+homages
+homaging
+hombre
+homburg
+home
+homebody
+homebound
+homebred
+homebuild
+homebuilder
+homebuilders
+homebuilding
+homebuilt
+homecome
+homecoming
+homecomings
+homecraft
+homed
+homegrown
+homeland
+homeless
+homelessness
+homelier
+homelike
+homeliness
+homely
+homemade
+homemake
+homemaker
+homemaker's
+homemakers
+homemaking
+homeobox
+homeomorph
+homeomorphic
+homeomorphism
+homeomorphism's
+homeomorphisms
+homeopath
+homeopathic
+homeopathically
+homeopathies
+homeopaths
+homeopathy
+homeopathy's
+homeostasis
+homeostatic
+homeotypic
+homeown
+homeowner
+homeowners
+homeownership
+homer
+Homeric
+homerists
+homeroom
+homers
+homes
+homesick
+homesickness
+homesite
+homespun
+homestead
+homesteader
+homesteaders
+homesteads
+homestretch
+hometown
+homeward
+homewards
+homework
+homeworker
+homeworkers
+homey
+homeyness
+homicidal
+homicidally
+homicide
+homicides
+homier
+homiletic
+homiletical
+homiletically
+homiletics
+homily
+hominess
+homing
+hominid
+hominization
+hominized
+hominoid
+hominy
+homo
+homocentric
+homocercal
+homochromatic
+homochromous
+homocyclic
+homodont
+homoerotic
+homoeroticism
+homogametic
+homogamic
+homogamous
+homogamy
+homogenate
+homogenates
+homogeneities
+homogeneity
+homogeneity's
+homogeneous
+homogeneously
+homogeneousness
+homogenization
+homogenization's
+homogenizations
+homogenize
+homogenized
+homogenizer
+homogenizers
+homogenizes
+homogenizing
+homogenous
+homogeny
+homograft
+homograph
+homographic
+homoiotherm
+homoiothermal
+homoiothermic
+Homoiousian
+homolog
+homologate
+homologation
+homological
+homologically
+homologization
+homologize
+homologized
+homologizer
+homologizes
+homologizing
+homologous
+homolographic
+homologue
+homology
+homolysis
+homolytic
+homomorphic
+homomorphism
+homomorphism's
+homomorphisms
+homomorphy
+homonuclear
+homonym
+homonym's
+homonymic
+homonymous
+homonymously
+homonyms
+homonymy
+homoousian
+homophile
+homophobe
+homophobes
+homophobia
+homophone
+homophonic
+homophonous
+homophony
+homophyly
+homoplastic
+homoplastically
+homoplasy
+homopolar
+homopolymer
+homopolymers
+homopteran
+homopterous
+homorganic
+homos
+homoscedastic
+homoscedasticity
+homosexual
+homosexuality
+homosexually
+homosexuals
+homosporous
+homospory
+homotaxis
+homothallic
+homothallism
+homothermal
+homotopy
+homotransplant
+homotransplantation
+homozygosis
+homozygosity
+homozygote
+homozygotic
+homozygous
+homozygously
+homunculi
+homunculus
+homy
+hon
+honan
+honcho
+honchos
+Honda
+Honda's
+hondo
+Hondo
+Honduras
+hone
+honecker
+honed
+honegger
+honer
+hones
+honest
+honestly
+honesty
+honewort
+honey
+honeybee
+honeybees
+honeybunch
+honeycomb
+honeycombed
+honeydew
+honeyed
+honeying
+honeymoon
+honeymooned
+honeymooner
+honeymooners
+honeymooning
+honeymoons
+honeys
+honeysucker
+honeysuckle
+Honeywell
+Hong
+hong
+honiara
+honied
+honing
+Honiton
+honk
+honked
+honker
+honkers
+honkeys
+honkie
+honkies
+honking
+honks
+honky
+honky's
+Honolulu
+honor
+honorabilities
+honorability
+honorability's
+honorable
+honorable's
+honorableness
+honorables
+honorableship
+honorableship's
+honorableships
+honorablies
+honorably
+honoraria
+honorarily
+honorarium
+honorary
+honored
+honoree
+honorer
+honorer's
+honorers
+honorific
+honorific's
+honorifically
+honorifics
+honoring
+honorless
+honorlesses
+honors
+Honshu
+Honshu's
+hoo
+hooch
+hood
+hood's
+hooded
+hoodedness
+hooding
+hoodlike
+hoodlum
+hoodlumish
+hoodlumism
+hoodlumize
+hoodlumizes
+hoodlums
+hoodoo
+hoodooism
+hoodoos
+hoods
+hoodwink
+hoodwinked
+hoodwinker
+hoodwinking
+hoodwinks
+hooey
+hoof
+hoof's
+hoofbeat
+hoofbound
+hoofed
+hoofer
+hoofmark
+hoofmarks
+hoofprint
+hoofprint's
+hoofprints
+hoofs
+hoogh
+hooghly
+hook
+hookah
+hooke
+hooked
+hookedness
+hooker
+hookers
+hookey
+hookeys
+hooking
+hooklet
+hooknose
+hooks
+hookup
+hookups
+hookworm
+hooky
+hooligan
+hooliganism
+hooliganize
+hooliganizes
+hooligans
+hoop
+hooped
+hooper
+hooping
+hoopla
+hoopoe
+hoopoes
+hoops
+hooray
+hooray's
+hoorays
+hoosegow
+hoosegows
+Hoosier
+Hoosierize
+Hoosierizes
+hoot
+hootch
+hooted
+hootenanny
+hooter
+hooters
+hooting
+hoots
+Hoover
+Hoover's
+hoovered
+hoovering
+Hooverize
+Hooverizes
+hoovers
+hooves
+hop
+hope
+hoped
+hopeful
+hopefully
+hopefulness
+hopefuls
+hopeh
+hopeless
+hopelessly
+hopelessness
+hoper
+hopes
+hophead
+hopi
+Hopi
+Hopi's
+hoping
+Hopkins
+Hopkinsian
+hoplite
+hoplology
+hopped
+hopper
+hopper's
+hoppers
+hopping
+hopple
+hoppled
+hopples
+hoppus
+hops
+hopsack
+hopscotch
+hora
+Horace
+horae
+horal
+horary
+Horatian
+Horatio
+Horatius
+hord
+horde
+horde's
+hordein
+hordes
+horeb
+horehound
+Horenstein
+horizon
+horizon's
+horizonal
+horizons
+horizontal
+horizontalization
+horizontalization's
+horizontalizations
+horizontalize
+horizontalizes
+horizontally
+horme
+hormonal
+hormonally
+hormone
+hormone's
+hormonelike
+hormones
+hormonize
+hormonizes
+hormuz
+horn
+hornbeam
+hornbeams
+hornbill
+hornbills
+hornblende
+Hornblower
+hornbook
+hornby
+Horne
+horned
+hornedness
+hornet
+hornet's
+hornets
+hornfels
+hornier
+horniness
+hornless
+hornlessness
+hornlike
+hornmouth
+hornpipe
+hornpipe's
+hornpipes
+horns
+hornstone
+hornswoggle
+hornswoggled
+hornswoggles
+hornswoggling
+horntail
+hornwort
+horny
+horologe
+horologer
+horologic
+horological
+horologist
+horologists
+horologium
+horology
+horoscope
+horoscopes
+horoscopy
+Horowitz
+horrendous
+horrendously
+horrent
+horrible
+horribleness
+horribly
+horrid
+horridly
+horridness
+horrific
+horrifically
+horrified
+horrifies
+horrify
+horrifying
+horrifyingly
+horripilation
+horror
+horror's
+horrorize
+horrorizes
+horrors
+hors
+horsa
+horse
+horse's
+horseback
+horsebox
+horseboxs
+horsecar
+horsedom
+horseflesh
+horseflies
+horsefly
+horsehair
+horsehide
+horselaugh
+horseleech
+horseleeches
+horselike
+horsely
+horseman
+horsemanship
+horsemen
+horsemint
+horsens
+horseplay
+horseplayer
+horsepower
+horsepowers
+horseradish
+horseradishes
+horseriding
+horses
+horseshit
+horseshoe
+horseshoer
+horseshoes
+horsetail
+horsewhip
+horsewoman
+horsewomen
+horsey
+horsier
+horsily
+horsiness
+horsing
+horst
+horsy
+horta
+hortative
+hortatively
+hortatory
+Hortense
+horthy
+horticultural
+horticulturalist
+horticulturally
+horticulture
+horticulturist
+Horton
+hortus
+Horus
+hosanna
+hose
+hose's
+hosea
+hosed
+hoses
+hosier
+hosiery
+hosing
+hospice
+hospices
+hospitable
+hospitably
+hospital
+hospital's
+hospitalet
+hospitality
+hospitalization
+hospitalization's
+hospitalizations
+hospitalize
+hospitalized
+hospitalizes
+hospitalizing
+hospitaller
+hospitals
+hospodar
+host
+host's
+Hosta
+hostage
+hostage's
+hostages
+hosted
+hostel
+hosteler
+hosteller
+hostelling
+hostelries
+hostelry
+hostels
+hostess
+hostess's
+hostesses
+hostie
+hostile
+hostilely
+hostilities
+hostility
+hostilize
+hostilizes
+hosting
+hostler
+hostly
+hosts
+hot
+hotbed
+hotblood
+hotbox
+hotchpot
+hotchpotch
+hotdogs
+hotel
+hotel's
+hotelier
+hotelization
+hotelization's
+hotelizations
+hotelize
+hotelizes
+hotelman
+hotels
+hotfeet
+hotfoot
+hotfoot's
+hotfoots
+hothead
+hotheaded
+hotheadedly
+hotheadedness
+hothouse
+hotien
+hotly
+hotness
+hotplate
+hotpot
+hotrod
+hotshot
+hotspur
+Hottentot
+Hottentot's
+hotter
+hottest
+hottie
+hottish
+Houdaille
+Houdaille's
+Houdan
+Houdini
+houdon
+hough
+Houghton
+Houghton's
+houmous
+hound
+hounded
+hounder
+hounding
+hounds
+hounslow
+hour
+hour's
+hourglass
+houri
+hourly
+hours
+house
+house's
+houseboat
+houseboats
+housebound
+houseboy
+houseboys
+housebreak
+housebreaker
+housebreakers
+housebreaking
+housebroken
+housebuilding
+housecarl
+houseclean
+housecleaner
+housecleaning
+housecoat
+housed
+housedress
+housefather
+housefathers
+houseflies
+housefly
+housefly's
+housefront
+houseful
+houseguest
+household
+household's
+householder
+householders
+households
+housekeep
+housekeeper
+housekeeper's
+housekeepers
+housekeeping
+housel
+houseled
+houseleek
+houseleeks
+houseless
+houselessness
+houselights
+houseline
+houseling
+houselings
+housemaid
+housemaids
+houseman
+housemaster
+housemasters
+housemate
+housemate's
+housemates
+housemother
+housemothers
+houseplant
+houser
+houseroom
+houses
+housetop
+housetop's
+housetops
+houseward
+housewares
+housewarming
+housewife
+housewife's
+housewifeliness
+housewifely
+housewifery
+housewives
+housework
+houseworker
+houseworkers
+housing
+housings
+housman
+Houston
+Houstonia
+houting
+hove
+hovel
+hovel's
+hoveled
+hoveler
+hovelers
+hoveling
+hovels
+hover
+hovercraft
+hovered
+hoverer
+hovering
+hoverport
+hovers
+hovertrain
+hovertrains
+how
+how's
+Howard
+howbeit
+howdah
+howdy
+Howe
+Howell
+however
+howitzer
+howl
+Howland
+howled
+howler
+howlet
+howling
+howls
+howrah
+hows
+howsoever
+howsomever
+howtowdie
+hoxha
+hoy
+Hoya
+hoyden
+hoydenish
+hoylake
+hoyle
+Hoyt
+Hoyt's
+HP
+hradec
+Hrothgar
+Hrothgar's
+hrs
+hrvatska
+hsi
+hsian
+hsiang
+hsining
+hsinking
+hua
+huambo
+huang
+hub
+hub's
+hubba
+Hubbard
+Hubbard's
+Hubbell
+Hubbell's
+hubbies
+hubble
+Hubble
+Hubble's
+hubbub
+hubby
+hubcap
+hubcap's
+hubcaps
+Huber
+Huber's
+Hubert
+hubli
+hubris
+hubristic
+hubristically
+hubs
+huck
+Huck
+huckaback
+huckel
+huckle
+huckleberry
+hucklebone
+huckster
+huckstered
+huckstering
+hucksterism
+hucksterize
+hucksterizes
+hucksters
+hud
+Huddersfield
+huddle
+huddled
+huddler
+huddles
+Huddleston
+huddling
+Hudibrastic
+Hudson
+hue
+hue's
+hued
+huelva
+hues
+huesca
+huey
+Huey
+huff
+huffier
+huffiness
+huffish
+Huffman
+Huffman's
+huffy
+hufuf
+hug
+huge
+hugely
+hugeness
+hugeous
+hugeously
+huger
+hugest
+huggable
+hugged
+hugger
+huggermugger
+huggers
+hugging
+huggings
+Huggins
+Hugh
+Hughes
+hughie
+Hugo
+hugs
+Huguenot
+huh
+huhehot
+hula
+hulk
+hulked
+hulking
+hulks
+hull
+hull's
+hullabaloo
+hullabalooed
+hullabalooing
+hullabaloos
+hulled
+huller
+hulling
+hullo
+hulls
+hulme
+hum
+human
+humane
+humanely
+humaneness
+humanism
+humanist
+humanistic
+humanistically
+humanists
+humanitarian
+humanitarianism
+humanitarianize
+humanitarianizes
+humanitarians
+humanities
+humanity
+humanity's
+humanization
+humanization's
+humanizations
+humanize
+humanized
+humanizer
+humanizers
+humanizes
+humanizing
+humankind
+humanlike
+humanly
+humanness
+humanoid
+humans
+humber
+humberside
+humble
+humblebee
+humbled
+humbleness
+humbler
+humbles
+humblest
+humbling
+humbly
+Humboldt
+humbug
+humbugged
+humbuggery
+humbugging
+humdinger
+humdrum
+Hume
+humectant
+humeral
+humeri
+humerus
+humic
+humid
+humidification
+humidifications
+humidified
+humidifier
+humidifiers
+humidifies
+humidify
+humidifying
+humidistat
+humidities
+humidity
+humidly
+humidor
+humification
+humifications
+humified
+humiliate
+humiliated
+humiliates
+humiliating
+humiliatingly
+humiliation
+humiliations
+humility
+hummable
+hummed
+Hummel
+Hummel's
+hummer
+humming
+hummingbird
+hummingbirds
+hummock
+hummocks
+hummocky
+humor
+humor's
+humoral
+humored
+humorer
+humorers
+humoresque
+humoring
+humorism
+humorism's
+humorisms
+humorist
+humorist's
+humoristic
+humoristical
+humoristical's
+humoristicals
+humoristics
+humorists
+humorize
+humorizes
+humorless
+humorlesses
+humorlessness
+humorous
+humorously
+humorousness
+humors
+humorsome
+hump
+humpback
+humpbacked
+humpbacks
+humped
+Humperdinck
+humph
+Humphrey
+Humphreys
+humpier
+humping
+humps
+humpty
+Humpty
+humpy
+hums
+humus
+Hun
+hunan
+hunch
+hunchback
+hunchback's
+hunchbacked
+hunchbacks
+hunched
+hunches
+hundred
+hundredfold
+hundreds
+hundredth
+hundredweight
+hundredweights
+hung
+Hungarian
+Hungary
+hunger
+hungered
+hungering
+hungers
+hungnam
+hungrier
+hungriest
+hungrily
+hungriness
+hungry
+hunk
+hunk's
+hunker
+hunkered
+hunkering
+hunkers
+hunks
+Hunnish
+huns
+hunt
+hunted
+hunter
+hunters
+hunting
+huntingdon
+Huntingdonshire
+Huntington
+Huntington's
+Huntley
+Huntley's
+huntress
+hunts
+huntsman
+Huntsville
+hunyadi
+huon
+hup
+hupeh
+huppah
+Hurd
+Hurd's
+Hurdies
+hurdle
+hurdled
+hurdler
+hurdles
+hurdling
+hurds
+hurl
+hurled
+hurler
+hurlers
+hurley
+hurling
+hurly
+Huron
+hurrah
+hurray
+hurrays
+hurricane
+hurricane's
+hurricanes
+hurricanize
+hurricanizes
+hurried
+hurriedly
+hurriedness
+hurrier
+hurries
+hurry
+hurrying
+Hurst
+hurstmonceux
+hurt
+hurter
+hurtful
+hurtfully
+hurtfulness
+hurting
+hurtingly
+hurtle
+hurtled
+hurtles
+hurtless
+hurtling
+hurts
+hurty
+Hurwitz
+hus
+husain
+husband
+husband's
+husbander
+husbandly
+husbandman
+husbandmen
+husbandry
+husbands
+husein
+hush
+hushaby
+hushed
+hushes
+hushing
+husk
+husked
+husker
+huskier
+huskies
+huskily
+huskiness
+husking
+husks
+husky
+huss
+hussar
+hussein
+husserl
+hussies
+Hussite
+hussy
+hustings
+hustle
+hustled
+hustler
+hustlers
+hustles
+hustling
+Huston
+Huston's
+hut
+hut's
+hutch
+hutchie
+Hutchins
+Hutchinson
+Hutchison
+hutment
+huts
+hutu
+hutzpah
+Huxley
+Huxtable
+Huxtable's
+Huybrechts
+huygens
+huysmans
+huzzah
+huzzahs
+hwang
+hwyl
+hyacinth
+hyacinthine
+hyacinths
+Hyacinthus
+Hyades
+hyaena
+hyaenas
+hyalin
+hyaline
+hyalinization
+hyalinization's
+hyalinizations
+hyalinize
+hyalinizes
+hyalite
+hyaloid
+hyaloplasm
+hyaluronic
+Hyannis
+hybrid
+hybridism
+hybridity
+hybridizable
+hybridizable's
+hybridizables
+hybridization
+hybridization's
+hybridizations
+hybridize
+hybridized
+hybridizer
+hybridizers
+hybridizes
+hybridizing
+hybrids
+hybris
+hydantoin
+hydathode
+hydatid
+Hyde
+Hyde's
+hyderabad
+hydnocarpate
+hydnocarpic
+hydra
+hydracid
+hydrangea
+hydrant
+hydranth
+hydrants
+hydrastinine
+Hydrastis
+hydrate
+hydrated
+hydrates
+hydrating
+hydration
+hydrations
+hydrator
+hydraulic
+hydraulical
+hydraulically
+hydraulics
+hydrazide
+hydrazine
+hydrazoic
+hydria
+hydric
+hydrically
+hydride
+hydrides
+hydriodic
+hydro
+hydrobiological
+hydrobiologist
+hydrobiology
+hydrobromic
+hydrocarbon
+hydrocarbonaceous
+hydrocarbonic
+hydrocarbonous
+hydrocarbons
+hydrocaryaceous
+hydrocaryaceouses
+hydrocele
+hydrocellulose
+hydrocephalic
+hydrocephalus
+hydrocephaly
+hydrochemistry
+hydrochloric
+hydrochloride
+hydrocoral
+hydrocortisone
+hydrocyanic
+hydrodynamic
+hydrodynamical
+hydrodynamically
+hydrodynamicist
+hydrodynamics
+hydroelectric
+hydroelectrically
+hydroelectricity
+hydrofluoric
+hydrofoil
+hydroformer
+hydroforming
+hydrogen
+hydrogen's
+hydrogenate
+hydrogenation
+hydrogenization
+hydrogenization's
+hydrogenizations
+hydrogenize
+hydrogenized
+hydrogenizes
+hydrogenizing
+hydrogenolysis
+hydrogenous
+hydrogens
+hydrograph
+hydrographer
+hydrographic
+hydrographically
+hydrography
+hydroid
+hydrokinetic
+hydrokinetics
+hydrolase
+hydrologic
+hydrological
+hydrologically
+hydrologist
+hydrology
+hydrolysate
+hydrolysis
+hydrolyte
+hydrolytic
+hydrolytically
+hydrolyzable
+hydrolyzable's
+hydrolyzables
+hydrolyze
+hydrolyze's
+hydrolyzed
+hydrolyzes
+hydromagnetic
+hydromagnetics
+hydromancy
+hydromechanical
+hydromechanics
+hydromedusa
+hydromel
+hydrometallurgy
+hydrometeor
+hydrometer
+hydrometer's
+hydrometers
+hydrometric
+hydrometrical
+hydrometry
+hydromorphic
+hydronaut
+hydronic
+hydronically
+hydronium
+hydropathic
+hydropathically
+hydropathy
+hydroperoxide
+hydrophane
+hydrophile
+hydrophilic
+hydrophilous
+hydrophobia
+hydrophobic
+hydrophobicity
+hydrophone
+hydrophyte
+hydrophytic
+hydroplane
+hydroplaner
+hydroponic
+hydroponically
+hydroponics
+hydropower
+hydroquinone
+hydros
+hydroscope
+hydrosere
+Hydroski
+hydrosol
+hydrosolic
+hydrospace
+hydrosphere
+hydrospheric
+hydrostat
+hydrostatic
+hydrostatical
+hydrostatically
+hydrostatics
+hydrosulfide
+hydrosulfite
+hydrosulphate
+hydrosulphide
+hydrosulphurous
+hydrotactic
+hydrotaxis
+hydrotherapeutics
+hydrotherapy
+hydrothermal
+hydrothermally
+hydrothorax
+hydrotropic
+hydrotropically
+hydrotropism
+hydrous
+hydroxide
+hydroxides
+hydroxonium
+hydroxy
+hydroxyl
+hydroxyl's
+hydroxylamine
+hydroxylate
+hydroxylation
+hydroxylic
+hydroxylization
+hydroxylization's
+hydroxylizations
+hydroxylize
+hydroxylizes
+hydroxyls
+hydroxyproline
+hydroxyzine
+hydrozoan
+Hydrus
+hyena
+hyenic
+hyenoid
+hyetograph
+hyetography
+Hygeia
+hygiene
+hygienic
+hygienically
+hygienics
+hygienist
+hygienists
+hygienization
+hygienization's
+hygienizations
+hygienize
+hygienizes
+hygristor
+hygrograph
+hygrometer
+hygrometer's
+hygrometers
+hygrometric
+hygrometry
+hygrophilous
+hygrophyte
+hygrophytic
+hygroscope
+hygroscopic
+hygroscopically
+hygroscopicity
+hygrostat
+hying
+hyksos
+hyla
+hylomorphism
+hylophagous
+hylotheism
+hylozoism
+Hyman
+hymen
+hymenal
+hymeneal
+hymeneally
+hymenial
+hymenium
+hymenopteran
+hymenopterous
+hymens
+hymettus
+hymn
+hymn's
+hymnal
+hymnary
+hymnbook
+hymning
+hymnist
+hymnody
+hymnology
+hymns
+Hynninen
+hyoid
+hyoscyamine
+Hyoscyamus
+hypabyssal
+hypaesthesia
+hypaethral
+hypallage
+hypanthium
+hype
+hype's
+hyped
+hyper
+hyperacid
+hyperacidity
+hyperactive
+hyperactivity
+hyperaemia
+hyperbaric
+hyperbarically
+hyperbaton
+hyperbola
+hyperbole
+hyperbolic
+hyperbolical
+hyperbolically
+hyperbolist
+hyperbolize
+hyperbolized
+hyperbolizes
+hyperbolizing
+hyperboloid
+hyperboloidal
+hyperborean
+hypercatalectic
+hypercatharsises
+hypercellularity
+hypercharge
+hypercivilization
+hypercivilization's
+hypercivilizations
+hypercivilized
+hypercivilized's
+hypercivilizeds
+hypercorrect
+hypercorrection
+hypercritic
+hypercritical
+hypercritically
+hypercriticism
+hypercriticize
+hypercriticizes
+hypercube
+hypercube's
+hypercubes
+hyperdulia
+hyperemia
+hyperemic
+hyperemphasize
+hyperemphasizes
+hyperesthesia
+hyperesthetic
+hypereutectic
+hyperextension
+hyperfine
+hyperfocal
+hypergamous
+hypergamously
+hypergamy
+hyperglycaemia
+hyperglycemia
+hyperglycemic
+hyperimmunization
+hyperimmunization's
+hyperimmunizations
+hyperimmunize
+hyperimmunizes
+hyperinsulinism
+hyperinsulinization
+hyperinsulinization's
+hyperinsulinizations
+hyperinsulinize
+hyperinsulinizes
+hyperion
+hyperirritability
+hyperirritable
+hyperkeratosis
+hyperkeratotic
+hyperkinesia
+hyperkinesis
+hyperkinetic
+hypermarket
+hypermeter
+hypermeter's
+hypermeters
+hypermetric
+hypermetrical
+hypermetropia
+hypermetropic
+hypermetropical
+hypermetropy
+hypermnesia
+hypermnesic
+hypermorph
+hypermorphic
+hypermorphism
+hyperon
+hyperope
+hyperopia
+hyperopic
+hyperostosis
+hyperostotic
+hyperoxygenize
+hyperoxygenizes
+hyperparasite
+hyperparasitic
+hyperparasitism
+hyperparasitize
+hyperparasitizes
+hyperphagia
+hyperphysical
+hyperphysically
+hyperpituitarism
+hyperpituitary
+hyperplane
+hyperplanes
+hyperplasia
+hyperplastic
+hyperploid
+hyperploidy
+hyperpnoea
+hyperpyrexia
+hyperrealize
+hyperrealizes
+hypersensitive
+hypersensitiveness
+hypersensitivity
+hypersensitization
+hypersensitization's
+hypersensitizations
+hypersensitize
+hypersensitized
+hypersensitizes
+hypersensitizing
+hypersonic
+hypersonically
+hyperspace
+hyperspiritualizing
+hyperspiritualizing's
+hyperspiritualizings
+hyperstability
+hyperstable
+hypersthene
+hypersurface
+hypertension
+hypertensive
+hyperterm
+hyperterms
+hypertext
+hypertext's
+hyperthermia
+hyperthermic
+hyperthyroid
+hyperthyroidism
+hyperthyroidization
+hyperthyroidization's
+hyperthyroidizations
+hyperthyroidize
+hyperthyroidizes
+hypertonic
+hypertonicity
+hypertrophic
+hypertrophied
+hypertrophy
+hypervelocity
+hyperventilation
+hypervitalization
+hypervitalization's
+hypervitalizations
+hypervitalize
+hypervitalizes
+hypervitaminosis
+hypes
+hypesthesia
+hypethral
+hypha
+hyphae
+hyphal
+hyphen
+hyphen's
+hyphenate
+hyphenated
+hyphenates
+hyphenating
+hyphenation
+hyphenations
+hyphened
+hyphening
+hyphenization
+hyphenization's
+hyphenizations
+hyphenize
+hyphenizes
+hyphenless
+hyphens
+hypnagogic
+hypnoanalysis
+hypnogenesis
+hypnogenetic
+hypnogenetically
+hypnogogic
+hypnoid
+hypnoidal
+hypnology
+hypnopaedia
+hypnopompic
+Hypnos
+hypnoses
+hypnosis
+hypnotherapy
+hypnotic
+hypnotically
+hypnotics
+hypnotism
+hypnotist
+hypnotists
+hypnotizabilities
+hypnotizability
+hypnotizability's
+hypnotizable
+hypnotizable's
+hypnotizables
+hypnotization
+hypnotization's
+hypnotizations
+hypnotize
+hypnotized
+hypnotizer
+hypnotizers
+hypnotizes
+hypnotizing
+hypo
+hypoacidity
+hypoactive
+hypoblast
+hypocaust
+hypocellularity
+hypocenter
+hypocentral
+hypochlorite
+hypochlorous
+hypochondria
+hypochondriac
+hypochondriacal
+hypochondriacally
+hypochondrium
+hypocoristic
+hypocoristical
+hypocoristically
+hypocotyl
+hypocrisies
+hypocrisy
+hypocrite
+hypocrite's
+hypocrites
+hypocritic
+hypocritical
+hypocritically
+hypocycloid
+hypoderm
+hypodermic
+hypodermically
+hypodermics
+hypodermis
+hypoeutectic
+hypogastrium
+hypogeal
+hypogene
+hypogenous
+hypogeous
+hypogeum
+hypoglossal
+hypoglycaemia
+hypoglycemia
+hypoglycemic
+hypognathous
+hypogynous
+hypoid
+hypoiodite
+hypolimnion
+hypomania
+hypomorphic
+hyponasty
+hyponitrite
+hyponitrous
+hypophosphate
+hypophosphite
+hypophosphoric
+hypophosphorous
+hypophyge
+hypophyseal
+hypophysectomized
+hypophysis
+hypopituitarism
+hypoplasia
+hypoploid
+hypopnoea
+hypos
+hyposensitization
+hyposensitize
+hypostatization
+hypostatization's
+hypostatizations
+hypostatize
+hypostatizes
+hyposthenia
+hypostyle
+hyposulphite
+hyposulphurous
+hypotaxis
+hypotension
+hypotensive
+hypotenuse
+hypotenuses
+hypothalamic
+hypothalamically
+hypothalamus
+hypothalmus
+hypothec
+hypothecate
+hypothecation
+hypothecator
+hypothenuse
+hypothermal
+hypothermia
+hypothermic
+hypotheses
+hypothesis
+hypothesize
+hypothesized
+hypothesizer
+hypothesizers
+hypothesizes
+hypothesizing
+hypothetic
+hypothetical
+hypothetically
+hypothyroid
+hypothyroidism
+hypotonic
+hypotonically
+hypotonicity
+hypotrophy
+hypoxanthine
+hypoxemia
+hypoxemic
+hypoxia
+hypoxic
+hypsography
+hypsometer
+hypsometer's
+hypsometers
+hypsometric
+hypsometry
+hyracoid
+hyrax
+hyrcania
+Hyson
+hyssop
+hysterectomize
+hysterectomized
+hysterectomizes
+hysterectomizing
+hysterectomy
+hysteresis
+hysteretic
+hysteria
+hysteric
+hysterical
+hysterically
+hysterics
+hysterogenic
+hysteroid
+hysteron
+hysterotomy
+hystricomorph
+Hz
+I'd
+I'll
+I'm
+i's
+I've
+IA
+iamb
+iambic
+iambus
+iambuses
+Ian
+Ian's
+Iapetus
+iata
+iatric
+iatrogenic
+ibadan
+ibarruri
+Iberia
+Iberian
+ibero
+Ibero
+ibert
+ibex
+ibibio
+ibid
+ibidem
+ibis
+ibises
+ibiza
+IBM
+IBM's
+Ibn
+Ibo
+Ibrahim
+Ibsen
+Icaria
+Icarian
+Icarus
+ICC
+ice
+iceberg
+iceberg's
+icebergs
+iceblink
+icebound
+icebox
+icebreaker
+icecap
+icecap's
+icecaps
+iced
+icefall
+icehouse
+Iceland
+Iceland's
+Icelander
+Icelandic
+iceless
+iceman
+iceman's
+icemans
+Iceni
+ices
+ichang
+ichinomiya
+ichneumon
+ichneumonized
+ichneumonized's
+ichneumonizeds
+ichnography
+ichnology
+ichor
+ichorous
+ichthyic
+ichthyoid
+ichthyolite
+ichthyology
+ichthyophagous
+Ichthyornis
+ichthyosaur
+ichthyosis
+icicle
+icicles
+icier
+iciest
+icily
+iciness
+icing
+icings
+ickier
+icky
+ICL
+icon
+icon's
+iconic
+iconically
+iconicity
+iconium
+iconoclasm
+iconoclast
+iconoclastic
+iconoclastically
+iconographer
+iconographic
+iconographical
+iconographically
+iconography
+iconolatry
+iconological
+iconology
+iconomatic
+iconoscope
+iconostasis
+icons
+icosahedra
+icosahedral
+icosahedron
+icterus
+ictinus
+ictus
+icy
+id
+id's
+Ida
+Ida's
+Idaho
+ide
+idea
+idea's
+ideal
+idealess
+idealism
+idealist
+idealistic
+idealistically
+ideality
+idealization
+idealization's
+idealizations
+idealize
+idealized
+idealizer
+idealizers
+idealizes
+idealizing
+idealless
+ideally
+idealogical
+idealogy
+ideals
+ideas
+ideate
+ideates
+ideation
+ideational
+ideationally
+ideatum
+idem
+idempotent
+idempotents
+identic
+identical
+identically
+identicalness
+identifers
+identifiability
+identifiable
+identifiably
+identification
+identifications
+identified
+identifier
+identifiers
+identifies
+identify
+identifying
+identikit
+identities
+identity
+identity's
+ideogram
+ideogram's
+ideogramic
+ideogrammatic
+ideogrammic
+ideograms
+ideograph
+ideographic
+ideographically
+ideography
+ideolect
+ideologic
+ideological
+ideologically
+ideologies
+ideologist
+ideologists
+ideologue
+ideologues
+ideology
+ideomotor
+ideosyncrasies
+ideosyncrasy
+ides
+idetic
+idioblast
+idiocies
+idiocy
+idiographic
+idiolect
+idiolectal
+idiom
+idiomatic
+idiomatically
+idiomaticness
+idiomorphic
+idiomorphically
+idioms
+idiopathic
+idiopathically
+idiopathy
+idiophone
+idioplasm
+idioplasmatic
+idioplasmic
+idiosyncracies
+idiosyncracy
+idiosyncrasies
+idiosyncrasy
+idiosyncrasy's
+idiosyncratic
+idiosyncratically
+idiot
+idiot's
+idiotic
+idiotical
+idiotically
+idioticalness
+idiotism
+idiotize
+idiotizes
+idiots
+idle
+idled
+idleness
+idler
+idlers
+idles
+idlest
+idling
+idly
+Ido
+idocrase
+idol
+idol's
+idolater
+idolatrize
+idolatrized
+idolatrizes
+idolatrizing
+idolatrous
+idolatrously
+idolatrousness
+idolatry
+idolization
+idolization's
+idolizations
+idolize
+idolized
+idolizer
+idolizers
+idolizes
+idolizing
+idols
+idolum
+Idomeneus
+idun
+idyll
+idyllic
+idyllically
+idyllist
+ie
+IEE
+IEEE
+ieper
+ieyasu
+if
+ife
+iffiness
+iffy
+Ifni
+igbo
+igdrasil
+igfet
+igloo
+igloos
+IGN
+Ignatius
+igneous
+ignescent
+ignis
+ignitability
+ignitable
+ignite
+ignited
+igniter
+ignites
+ignitible
+igniting
+ignition
+ignitions
+ignitor
+ignitron
+ignobility
+ignoble
+ignobleness
+ignobly
+ignominiosness
+ignominious
+ignominiously
+ignominy
+ignorable
+ignoramus
+ignorance
+ignorant
+ignorantly
+ignorantness
+ignoratio
+ignore
+ignored
+ignorer
+ignores
+ignoring
+ignotum
+Igor
+igor
+Igor's
+Igorot
+igraine
+iguana
+Iguanodon
+ihram
+ii
+iii
+Ijssel
+Ijsselmeer
+ikan
+Ike
+Ike's
+ikebana
+ikeja
+ikhnaton
+ikon
+IL
+ilea
+ileac
+ileitis
+ileostomy
+ilesha
+ileum
+ileus
+ilex
+Ilford
+ilia
+iliac
+Iliad
+Iliadize
+Iliadizes
+ilial
+iliamna
+iligan
+ilion
+ilium
+ilk
+ilk's
+Ilkeston
+ilkley
+ill
+illampu
+illation
+illative
+illatively
+illaudable
+illaudably
+illawarra
+illegal
+illegalities
+illegality
+illegalization
+illegalize
+illegalized
+illegalizes
+illegalizing
+illegally
+illegibility
+illegible
+illegibly
+illegitimacy
+illegitimate
+illegitimately
+illegitimatize
+illegitimatizes
+illiberal
+illiberalism
+illiberality
+illiberally
+illiberalness
+illich
+illicit
+illicitly
+illimani
+illimitability
+illimitable
+illimitableness
+illimitably
+illinium
+Illinois
+illiquid
+illiquidity
+illite
+illiteracy
+illiterate
+illiterately
+illiterateness
+illiterates
+illitic
+illness
+illness's
+illnesses
+illocution
+illogic
+illogical
+illogicality
+illogically
+illogicalness
+illon
+ills
+illude
+illume
+illumed
+illuminable
+illuminance
+illuminant
+illuminate
+illuminated
+illuminates
+illuminati
+illuminating
+illuminatingly
+illumination
+illuminations
+illuminative
+illuminator
+illuminators
+illumine
+illumined
+illumines
+illuming
+illuminism
+illuminist
+Illuminize
+Illuminizes
+illus
+illusion
+illusion's
+illusional
+illusionary
+illusionism
+illusionist
+illusionistic
+illusions
+illusive
+illusively
+illusiveness
+illusorily
+illusoriness
+illusory
+illust
+illustrate
+illustrated
+illustrates
+illustrating
+illustration
+illustrational
+illustrations
+illustrative
+illustratively
+illustrator
+illustrator's
+illustrators
+illustrious
+illustriously
+illustriousness
+illutation
+illutation's
+illutations
+illuvial
+illuviate
+illuviation
+illuvium
+illy
+illyria
+Illyrian
+illyricum
+ilmen
+ilmenite
+iloilo
+Ilona
+ilorin
+Ilyushin
+im
+image
+imaged
+Imagen
+imagen
+Imagen's
+imagery
+images
+imaginable
+imaginableness
+imaginably
+imaginal
+imaginarily
+imaginariness
+imaginary
+imaginate
+imagination
+imagination's
+imaginations
+imaginative
+imaginatively
+imaginativeness
+imagine
+imagined
+imaginer
+imagines
+imaging
+imagining
+imaginings
+imagism
+imagist
+imagistic
+imagistically
+imago
+Imai
+imam
+imamate
+imaret
+imbalance
+imbalances
+imbecile
+imbecilely
+imbecilic
+imbecility
+imbed
+imbibe
+imbibed
+imbiber
+imbibing
+imbibition
+imbibitional
+imbitter
+imbosom
+imbricate
+imbricately
+imbrication
+Imbrium
+imbroglio
+imbros
+imbrown
+imbrue
+imbrued
+imbruing
+imbrute
+imbruted
+imbruting
+imbue
+imbued
+imbuing
+imdtly
+ime
+imidazole
+imide
+imidic
+imido
+imine
+imino
+iminourea
+imipramine
+imit
+imitable
+imitate
+imitated
+imitates
+imitating
+imitation
+imitational
+imitations
+imitative
+imitatively
+imitativeness
+imitator
+imitators
+immaculacy
+immaculate
+immaculately
+immaculateness
+immane
+immanence
+immanency
+immanent
+immanentism
+immanentist
+immanentistic
+immanently
+Immanuel
+immaterial
+immaterialism
+immaterialist
+immateriality
+immaterialization
+immaterialize
+immaterialized
+immaterializes
+immaterializing
+immaterially
+immaterialness
+immature
+immaturel
+immaturely
+immatureness
+immaturity
+immeasurable
+immeasurableness
+immeasurably
+immediacies
+immediacy
+immediate
+immediately
+immediateness
+immedicable
+immedicably
+Immelmann
+immemorial
+immemorially
+immense
+immensely
+immenseness
+immensities
+immensity
+immensurable
+immerge
+immerged
+immergence
+immerging
+immerse
+immersed
+immerser
+immerses
+immersible
+immersing
+immersion
+immersionism
+immersions
+immesh
+immethodical
+immethodically
+immigrant
+immigrant's
+immigrants
+immigrate
+immigrated
+immigrates
+immigrating
+immigration
+immigrational
+imminence
+imminency
+imminent
+imminently
+imminentness
+Immingham
+immingle
+immiscibility
+immiscible
+immiscibly
+immitigable
+immitigableness
+immitigably
+immittance
+immix
+immixture
+immobile
+immobilism
+immobility
+immobilization
+immobilization's
+immobilizations
+immobilize
+immobilized
+immobilizer
+immobilizes
+immobilizing
+immoderacy
+immoderate
+immoderately
+immoderateness
+immoderation
+immodest
+immodestly
+immodesty
+immolate
+immolation
+immolator
+immoral
+immoralist
+immoralities
+immorality
+immoralize
+immoralizes
+immorally
+immortal
+immortality
+immortalizable
+immortalizable's
+immortalizables
+immortalization
+immortalization's
+immortalizations
+immortalize
+immortalized
+immortalizer
+immortalizers
+immortalizes
+immortalizing
+immortally
+immortals
+immortelle
+immotile
+immotility
+immovability
+immovable
+immovableness
+immovably
+immoveables
+immune
+immunities
+immunity
+immunity's
+immunization
+immunization's
+immunizations
+immunize
+immunized
+immunizes
+immunizing
+immunoassay
+immunochemical
+immunochemically
+immunochemistry
+immunoelectrophoresis
+immunofluorescence
+immunofluorescent
+immunogenesis
+immunogenetic
+immunogenetically
+immunogenetics
+immunogenic
+immunogenically
+immunogenicity
+immunoglobulin
+immunohematological
+immunohematology
+immunologic
+immunological
+immunologically
+immunologist
+immunology
+immunomicrosphere
+immunopathologic
+immunopathological
+immunopathologist
+immunopathology
+immunoreaction
+immunosuppression
+immunosuppressive
+immunotherapy
+immunotoxin
+immunotoxins
+immure
+immured
+immurement
+immures
+immuring
+immutability
+immutable
+immutableness
+immutably
+imp
+imp's
+impact
+impacted
+impacter
+impacting
+impaction
+impactionize
+impactionizes
+impactions
+impactive
+impactor
+impactor's
+impactors
+impacts
+impair
+impaired
+impairer
+impairing
+impairment
+impairs
+impala
+impale
+impaled
+impalement
+impales
+impaling
+impalpability
+impalpable
+impalpably
+impanation
+impanel
+impaneled
+impaneling
+imparadised
+imparipinnate
+imparisyllabic
+imparity
+impart
+impartable
+impartation
+imparted
+impartial
+impartiality
+impartially
+impartible
+impartibly
+imparting
+impartment
+imparts
+impassability
+impassable
+impassableness
+impassably
+impasse
+impasses
+impassibility
+impassible
+impassibly
+impassion
+impassioned
+impassioning
+impassions
+impassive
+impassively
+impassiveness
+impassivity
+impaste
+impasto
+impatience
+Impatiens
+impatient
+impatiently
+impeach
+impeachable
+impeached
+impeaches
+impeaching
+impeachment
+impearl
+impeccability
+impeccable
+impeccably
+impeccant
+impecuniosity
+impecunious
+impecuniously
+impecuniousness
+impedance
+impedance's
+impedances
+impede
+impeded
+impeder
+impedes
+impediment
+impediment's
+impedimenta
+impediments
+impeding
+impel
+impelled
+impeller
+impellers
+impelling
+impellor
+impels
+impend
+impendent
+impending
+impenetrability
+impenetrable
+impenetrableness
+impenetrably
+impenitence
+impenitent
+impenitently
+impennate
+imperate
+imperative
+imperatively
+imperativeness
+imperatives
+imperator
+imperatorial
+imperceivable
+imperceptibility
+imperceptible
+imperceptibly
+imperceptive
+imperceptiveness
+imperceptivity
+imperfect
+imperfectability
+imperfection
+imperfection's
+imperfections
+imperfective
+imperfectivity
+imperfectly
+imperfectness
+imperforate
+imperforated
+imperforates
+imperial
+imperialism
+imperialist
+imperialist's
+imperialistic
+imperialistically
+imperialists
+imperialization
+imperialization's
+imperializations
+imperialize
+imperializes
+imperially
+imperil
+imperiled
+imperiling
+imperilment
+imperious
+imperiously
+imperiousness
+imperishability
+imperishable
+imperishableness
+imperishably
+imperium
+impermanence
+impermanency
+impermanent
+impermanently
+impermeability
+impermeable
+impermeableness
+impermeably
+impermissibility
+impermissible
+impermissibly
+imperscriptible
+impersonal
+impersonality
+impersonalization
+impersonalization's
+impersonalizations
+impersonalize
+impersonalized
+impersonalizes
+impersonalizing
+impersonally
+impersonate
+impersonated
+impersonates
+impersonating
+impersonation
+impersonations
+impersonator
+impertinence
+impertinency
+impertinent
+impertinently
+imperturbability
+imperturbable
+imperturbably
+impervious
+imperviously
+imperviousness
+impetigo
+impetrate
+impetrated
+impetrates
+impetrating
+impetration
+impetrations
+impetuosity
+impetuous
+impetuously
+impetuousness
+impetus
+imphal
+impi
+impiety
+impinge
+impinged
+impingement
+impinges
+impinging
+impious
+impiously
+impish
+impishly
+impishness
+implacability
+implacable
+implacableness
+implacably
+implacental
+implant
+implantable
+implantation
+implanted
+implanter
+implanting
+implants
+implausibility
+implausible
+implausibly
+implead
+implement
+implementability
+implementable
+implemental
+implementation
+implementation's
+implementations
+implemented
+implementer
+implementers
+implementing
+implementor
+implementor's
+implementors
+implements
+implicant
+implicant's
+implicants
+implicate
+implicated
+implicates
+implicating
+implication
+implications
+implicative
+implicatively
+implicativeness
+implicit
+implicitly
+implicitness
+implied
+implies
+implode
+imploded
+implodes
+imploding
+implore
+implored
+implores
+imploring
+implosion
+implosions
+implosive
+implosively
+imply
+implying
+impolder
+impolicy
+impolite
+impolitely
+impoliteness
+impolitic
+impolitical
+impolitically
+impoliticly
+impoliticness
+imponderabilia
+imponderability
+imponderable
+imponderableness
+imponderables
+imponderably
+imponent
+import
+importable
+importance
+importancy
+important
+importantly
+importation
+importations
+imported
+importer
+importers
+importing
+imports
+importunate
+importunately
+importunateness
+importune
+importunely
+importuner
+importuners
+importunities
+importunity
+imposable
+impose
+imposed
+imposer
+imposes
+imposing
+imposingly
+imposition
+imposition's
+impositions
+impossibilities
+impossibility
+impossible
+impossibleness
+impossibles
+impossibly
+impost
+imposter
+imposthume
+impostor
+impostor's
+impostors
+imposts
+impostume
+imposture
+impotence
+impotency
+impotent
+impotently
+impound
+impounded
+impounding
+impoundment
+impoundments
+impounds
+impoverish
+impoverished
+impoverisher
+impoverishes
+impoverishing
+impoverishment
+impower
+impracticability
+impracticable
+impracticableness
+impracticably
+impractical
+impracticality
+impractically
+impracticalness
+imprecate
+imprecated
+imprecates
+imprecating
+imprecation
+imprecations
+imprecatory
+imprecise
+imprecisely
+impreciseness
+imprecision
+impregnability
+impregnable
+impregnableness
+impregnably
+impregnate
+impregnated
+impregnates
+impregnating
+impregnation
+impregnations
+impregnator
+impregnators
+impresa
+impresario
+imprescriptible
+impress
+impressed
+impresser
+impresses
+impressibility
+impressible
+impressibly
+impressing
+impression
+impression's
+impressionability
+impressionable
+impressionableness
+impressionably
+impressional
+impressionism
+impressionist
+impressionistic
+impressionistically
+impressionists
+impressions
+impressive
+impressively
+impressiveness
+impressment
+impressure
+imprest
+imprimatur
+imprimis
+imprint
+imprinted
+imprinting
+imprints
+imprison
+imprisonable
+imprisoned
+imprisoning
+imprisonment
+imprisonment's
+imprisonments
+imprisons
+improbability
+improbable
+improbableness
+improbably
+improbity
+impromptu
+improper
+improperly
+improperness
+impropitious
+impropriety
+improvability
+improvable
+improvably
+improve
+improved
+improvement
+improvements
+improver
+improves
+improvidence
+improvident
+improvidently
+improving
+improvisation
+improvisation's
+improvisational
+improvisations
+improvisator
+improvisatorial
+improvisatory
+improvise
+improvised
+improviser
+improvisers
+improvises
+improvising
+improvisor
+improvizatorize
+improvizatorizes
+imprudence
+imprudent
+imprudently
+imps
+impudence
+impudent
+impudently
+impudicity
+impugn
+impugnable
+impugned
+impugner
+impugning
+impugns
+impuissance
+impuissant
+impulse
+impulsed
+impulses
+impulsing
+impulsion
+impulsions
+impulsive
+impulsively
+impulsiveness
+impunity
+impure
+impurely
+impureness
+impurities
+impurity
+impurity's
+imputability
+imputable
+imputation
+imputations
+imputative
+imputatively
+impute
+imputed
+imputes
+imputing
+imroz
+in
+inabilities
+inability
+inaccessibility
+inaccessible
+inaccessibly
+inaccuracies
+inaccuracy
+inaccurate
+inaccurately
+inaction
+inactions
+inactivate
+inactivation
+inactive
+inactively
+inactivity
+inadequacies
+inadequacy
+inadequate
+inadequately
+inadequateness
+inadmissibility
+inadmissible
+inadmissibly
+inadvertence
+inadvertency
+inadvertent
+inadvertently
+inadvisability
+inadvisable
+inalienability
+inalienable
+inalienably
+inalterability
+inalterable
+inalterableness
+inalterably
+inamorata
+inane
+inanely
+inaneness
+inaner
+inanest
+inanimate
+inanimately
+inanimateness
+inanition
+inanity
+inapparent
+inapparently
+inappeasable
+inappellable
+inappetence
+inapplicability
+inapplicable
+inapplicably
+inapposite
+inappositely
+inappositeness
+inappreciable
+inappreciably
+inappreciative
+inappreciatively
+inappreciativeness
+inapprehensive
+inapproachable
+inappropriate
+inappropriately
+inappropriateness
+inapt
+inaptitude
+inaptly
+inaptness
+inarch
+inarguable
+inarguably
+inarticulable
+inarticulate
+inarticulately
+inarticulateness
+inartificial
+inartistic
+inartistically
+inasmuch
+inattention
+inattentive
+inattentively
+inattentiveness
+inaudibility
+inaudible
+inaudibly
+inaugural
+inaugurate
+inaugurated
+inaugurating
+inauguration
+inaugurations
+inaugurator
+inaugurators
+inauspicious
+inauspiciously
+inauspiciousness
+inauthentic
+inauthenticity
+Inbal
+inbeing
+inboard
+inboards
+inborn
+inbound
+inbounds
+inbreathe
+inbred
+inbreed
+inbreeder
+inbreeding
+inbuilt
+Inc
+Inca
+incalculability
+incalculable
+incalculableness
+incalculably
+incalescence
+incalescences
+incalescent
+incandesce
+incandesced
+incandescence
+incandescent
+incandescently
+incandesces
+incandescing
+incant
+incantation
+incantational
+incantations
+incantatory
+incanted
+incapability
+incapable
+incapableness
+incapably
+incapacitate
+incapacitated
+incapacitates
+incapacitating
+incapacitation
+incapacitator
+incapacity
+incaparina
+incapsulate
+incarcerate
+incarcerated
+incarcerates
+incarcerating
+incarceration
+incardinate
+incardination
+incarnadine
+incarnate
+incarnation
+incarnation's
+incarnations
+Incas
+incase
+incaution
+incautious
+incautiously
+incautiousness
+incendiaries
+incendiarism
+incendiary
+incense
+incensed
+incenses
+incensing
+incensory
+incentive
+incentive's
+incentively
+incentives
+incept
+incepted
+incepting
+inception
+inceptions
+inceptive
+inceptively
+inceptor
+incepts
+incertitude
+incessancy
+incessant
+incessantly
+incest
+incestuous
+incestuously
+incestuousness
+inch
+inched
+inches
+inching
+inchmeal
+inchoate
+inchoately
+inchoateness
+inchoative
+inchoatively
+inchon
+inchworm
+inchworm's
+inchworms
+incidence
+incidences
+incident
+incident's
+incidental
+incidentally
+incidentals
+incidents
+incinerate
+incinerated
+incinerates
+incinerating
+incineration
+incinerations
+incinerator
+incinerators
+incipience
+incipiency
+incipient
+incipiently
+incipit
+incise
+incised
+incises
+incising
+incision
+incision's
+incisions
+incisive
+incisively
+incisiveness
+incisor
+incisor's
+incisors
+incisure
+incitant
+incitants
+incitation
+incitations
+incite
+incited
+incitement
+incitements
+inciter
+incites
+inciting
+incivility
+inclemency
+inclement
+inclemently
+inclinable
+inclination
+inclination's
+inclinational
+inclinations
+incline
+inclined
+incliner
+inclines
+inclining
+inclinometer
+inclinometer's
+inclinometers
+inclip
+inclose
+inclosed
+incloses
+inclosing
+includable
+include
+included
+includes
+includible
+including
+incluse
+inclusion
+inclusion's
+inclusions
+inclusive
+inclusively
+inclusiveness
+incoercible
+incog
+incogitable
+incogitant
+incognita
+incognito
+incognizance
+incognizant
+incoherence
+incoherences
+incoherent
+incoherently
+incombustibility
+incombustible
+income
+incomer
+incomers
+incomes
+incoming
+incommensurability
+incommensurable
+incommensurably
+incommensurate
+incommode
+incommodious
+incommodiously
+incommodiousness
+incommodity
+incommunicability
+incommunicable
+incommunicably
+incommunicado
+incommunicative
+incommutable
+incommutably
+incomparability
+incomparable
+incomparably
+incompatibilities
+incompatibility
+incompatibility's
+incompatible
+incompatibly
+incompetence
+incompetency
+incompetent
+incompetent's
+incompetently
+incompetents
+incomplete
+incompletely
+incompleteness
+incompletion
+incompliant
+incomprehensibility
+incomprehensible
+incomprehensibleness
+incomprehensibly
+incomprehension
+incomprehensive
+incompressibility
+incompressible
+incompressibly
+incomputable
+incomputably
+inconceivability
+inconceivable
+inconceivableness
+inconceivably
+inconcinnity
+inconclusive
+inconclusively
+inconclusiveness
+incondensable
+incondite
+inconformity
+incongruence
+incongruent
+incongruently
+incongruities
+incongruity
+incongruous
+incongruously
+incongruousness
+inconscient
+inconsecutive
+inconsequence
+inconsequent
+inconsequential
+inconsequentiality
+inconsequentially
+inconsequently
+inconsiderable
+inconsiderableness
+inconsiderably
+inconsiderate
+inconsiderately
+inconsiderateness
+inconsideration
+inconsistence
+inconsistencies
+inconsistency
+inconsistency's
+inconsistent
+inconsistently
+inconsolable
+inconsolableness
+inconsolably
+inconsonance
+inconsonant
+inconspicuous
+inconspicuously
+inconspicuousness
+inconstancy
+inconstant
+inconstantly
+inconsumable
+inconsumably
+incontestability
+incontestable
+incontestably
+incontinence
+incontinency
+incontinent
+incontinently
+incontrollable
+incontrovertible
+incontrovertibly
+inconvenience
+inconvenienced
+inconveniences
+inconveniencing
+inconveniency
+inconvenient
+inconveniently
+inconvertibility
+inconvertible
+inconvertibly
+inconvincible
+incoordinate
+incoordination
+incorporable
+incorporate
+incorporated
+incorporates
+incorporating
+incorporation
+incorporative
+incorporator
+incorporeal
+incorporeally
+incorporeity
+incorrect
+incorrectly
+incorrectness
+incorrigibility
+incorrigible
+incorrigibleness
+incorrigibly
+incorrupt
+incorrupted
+incorruptibility
+incorruptible
+incorruptibly
+incorruption
+incorruptly
+incorruptness
+increasable
+increase
+increased
+increaser
+increases
+increasing
+increasingly
+increate
+incredibility
+incredible
+incredibleness
+incredibly
+incredulity
+incredulous
+incredulously
+increment
+incremental
+incrementalism
+incrementalist
+incrementalists
+incrementally
+incrementation
+incremented
+incrementing
+increments
+increscent
+incriminate
+incriminated
+incriminates
+incriminating
+incrimination
+incriminatory
+incross
+incrossbred
+incrust
+incrustation
+incubate
+incubated
+incubates
+incubating
+incubation
+incubational
+incubative
+incubator
+incubator's
+incubators
+incubatory
+incubi
+incubus
+incudes
+inculcate
+inculcated
+inculcates
+inculcation
+inculcator
+inculpable
+inculpate
+inculpation
+inculpative
+inculpatory
+incult
+incumbency
+incumbent
+incumbents
+incumber
+incunabula
+incunabulum
+incur
+incurability
+incurable
+incurableness
+incurables
+incurably
+incuriosity
+incurious
+incuriously
+incuriousness
+incurred
+incurrence
+incurrent
+incurrer
+incurring
+incurs
+incursion
+incursions
+incurvate
+incurvated
+incurvates
+incurvating
+incurvation
+incurvature
+incurve
+incus
+incuse
+Ind
+indaba
+indagate
+indagation
+indagator
+indamine
+indebted
+indebtedness
+indecency
+indecent
+indecently
+indeces
+indecipherable
+indecision
+indecisive
+indecisively
+indecisiveness
+indeclinable
+indecomposable
+indecorous
+indecorously
+indecorousness
+indecorum
+indeed
+indefatigability
+indefatigable
+indefatigableness
+indefatigably
+indefeasibility
+indefeasible
+indefeasibly
+indefectibility
+indefectible
+indefectibly
+indefensibility
+indefensible
+indefensibly
+indefinability
+indefinable
+indefinableness
+indefinably
+indefinite
+indefinitely
+indefiniteness
+indefinity
+indehiscence
+indehiscent
+indelibility
+indelible
+indelibly
+indelicacy
+indelicate
+indelicately
+indelicateness
+indemnification
+indemnifier
+indemnify
+indemnity
+indemonstrable
+indemonstrably
+indene
+indent
+indentation
+indentation's
+indentations
+indented
+indenter
+indenting
+indention
+indents
+indenture
+indentured
+indentures
+indenturing
+independence
+independency
+independent
+independently
+independents
+indescribable
+indescribableness
+indescribably
+indestructibility
+indestructible
+indestructibleness
+indestructibly
+indeterminable
+indeterminableness
+indeterminably
+indeterminacies
+indeterminacy
+indeterminacy's
+indeterminate
+indeterminately
+indeterminateness
+indetermination
+indetermine
+indeterminism
+indeterminist
+indeterministic
+index
+indexable
+indexation
+indexed
+indexer
+indexers
+indexes
+indexical
+indexing
+India
+India's
+Indiaman
+Indian
+Indian's
+Indiana
+Indiana's
+Indianapolis
+Indians
+Indic
+indican
+indicant
+indicants
+indicate
+indicated
+indicates
+indicating
+indication
+indicational
+indications
+indicative
+indicatively
+indicatives
+indicator
+indicator's
+indicators
+indicatory
+indices
+indicia
+indict
+indictable
+indicted
+indicter
+indiction
+indictment
+indictment's
+indictments
+indictor
+Indies
+indifference
+indifferency
+indifferent
+indifferentism
+indifferentist
+indifferently
+indigen
+indigence
+indigene
+indigenes
+indigenous
+indigenously
+indigenousness
+indigent
+indigested
+indigestibility
+indigestible
+indigestion
+indigestive
+indign
+indignant
+indignantly
+indignation
+indignities
+indignity
+indigo
+indigoid
+indigotin
+Indira
+indirect
+indirected
+indirecting
+indirection
+indirections
+indirectly
+indirectness
+indirects
+indiscernability
+indiscernible
+indisciplinable
+indiscipline
+indisciplined
+indiscoverable
+indiscreet
+indiscreetly
+indiscreetness
+indiscrete
+indiscretion
+indiscriminate
+indiscriminately
+indiscriminateness
+indiscriminating
+indiscriminatingly
+indiscrimination
+indiscussible
+indispensability
+indispensable
+indispensableness
+indispensably
+indispose
+indisposed
+indisposes
+indisposing
+indisposition
+indisputable
+indisputableness
+indisputably
+indissociable
+indissociably
+indissolubility
+indissoluble
+indissolubleness
+indissolubly
+indistinct
+indistinctive
+indistinctly
+indistinctness
+indistinguishability
+indistinguishable
+indistinguishableness
+indistinguishably
+indite
+indited
+inditer
+inditing
+indium
+indivertible
+indivertibly
+individual
+individual's
+individualism
+individualist
+individualistic
+individualistically
+individualists
+individuality
+individualization
+individualization's
+individualizations
+individualize
+individualized
+individualizer
+individualizers
+individualizes
+individualizing
+individualizingly
+individually
+individuals
+individuate
+individuated
+individuates
+individuating
+individuation
+indivisibility
+indivisible
+indivisibleness
+indivisibly
+indo
+Indo
+Indochina
+Indochinese
+indocile
+indocility
+indoctrinate
+indoctrinated
+indoctrinates
+indoctrinating
+indoctrination
+indoctrinator
+Indoeuropean
+indole
+indoleacetic
+indolebutyric
+indolence
+indolent
+indolently
+Indologist
+indomethacin
+indomitability
+indomitable
+indomitableness
+indomitably
+Indonesia
+Indonesian
+indoor
+indoors
+indophenol
+indore
+indorsee
+indoxyl
+indra
+indraft
+indrawn
+indre
+Indris
+indubitability
+indubitable
+indubitableness
+indubitably
+induce
+induced
+inducement
+inducement's
+inducements
+inducer
+induces
+inducibility
+inducible
+inducing
+induct
+inductance
+inductances
+inducted
+inductee
+inductees
+inductile
+inducting
+induction
+induction's
+inductions
+inductive
+inductively
+inductiveness
+inductor
+inductor's
+inductors
+inducts
+indue
+indulge
+indulged
+indulgence
+indulgence's
+indulgences
+indulgent
+indulgently
+indulger
+indulges
+indulging
+indult
+induna
+induplicate
+indurate
+induration
+indurative
+Indus
+indusium
+industrial
+industrialism
+industrialist
+industrialist's
+industrialists
+industrialization
+industrialization's
+industrializations
+industrialize
+industrialized
+industrializes
+industrializing
+industrially
+industrials
+industries
+industrious
+industriously
+industriousness
+industry
+industry's
+indwell
+indweller
+indwelling
+indy
+Indy
+inearth
+inebriant
+inebriate
+inebriated
+inebriates
+inebriating
+inebriation
+inebriety
+inedible
+inedited
+ineducability
+ineducable
+ineffability
+ineffable
+ineffableness
+ineffably
+ineffaceability
+ineffaceable
+ineffaceably
+ineffective
+ineffectively
+ineffectiveness
+ineffectual
+ineffectuality
+ineffectually
+ineffectualness
+inefficacious
+inefficaciously
+inefficaciousness
+inefficacy
+inefficiencies
+inefficiency
+inefficient
+inefficiently
+inegalitarian
+inelastic
+inelastically
+inelasticity
+inelegance
+inelegant
+inelegantly
+ineligibility
+ineligible
+ineliminable
+ineloquent
+ineloquently
+ineluctability
+ineluctable
+ineluctably
+ineludible
+inenarrable
+inept
+ineptitude
+ineptly
+ineptness
+inequable
+inequalities
+inequality
+inequitable
+inequitably
+inequities
+inequity
+inequivalent
+inequivalve
+inequivalved
+ineradicability
+ineradicable
+ineradicably
+inerrable
+inerrancy
+inerrant
+inert
+inertance
+inertia
+inertial
+inertially
+inertias
+inertly
+inertness
+inescapable
+inescapably
+inescutcheon
+inessential
+inessive
+inestimable
+inestimably
+inevitabilities
+inevitability
+inevitable
+inevitableness
+inevitably
+inexact
+inexactitude
+inexactly
+inexactness
+inexcusable
+inexcusableness
+inexcusably
+inexhaustibility
+inexhaustible
+inexhaustibleness
+inexhaustibly
+inexistence
+inexistent
+inexorability
+inexorable
+inexorableness
+inexorably
+inexpedience
+inexpediency
+inexpedient
+inexpediently
+inexpensive
+inexpensively
+inexpensiveness
+inexperience
+inexperienced
+inexpert
+inexpertly
+inexpertness
+inexpiable
+inexpiably
+inexplainable
+inexplicability
+inexplicable
+inexplicableness
+inexplicably
+inexplicit
+inexpressibility
+inexpressible
+inexpressibleness
+inexpressibly
+inexpressive
+inexpressively
+inexpressiveness
+inexpugnable
+inexpugnableness
+inexpugnably
+inexpungible
+inextensible
+inextinguishable
+inextinguishably
+inextirpable
+inextricability
+inextricable
+inextricably
+infall
+infallibilism
+infallibility
+infallible
+infallibly
+infamous
+infamously
+infamy
+infancy
+infant
+infant's
+infanta
+infante
+infanticide
+infanticide's
+infantile
+infantilism
+infantility
+infantry
+infantryman
+infantrymen
+infants
+infarct
+infarcted
+infarction
+infare
+infatuate
+infatuated
+infatuation
+infatuations
+infauna
+infaunal
+infeasible
+infect
+infected
+infecting
+infection
+infection's
+infections
+infectious
+infectiously
+infectiousness
+infective
+infectivity
+infector
+infects
+infecund
+infecundibility
+infelicitous
+infelicitously
+infelicity
+infer
+inferable
+inference
+inference's
+inferencer
+inferences
+inferencing
+inferential
+inferentially
+inferior
+inferior's
+inferiority
+inferiorize
+inferiorizes
+inferiorly
+inferiors
+infernal
+infernalize
+infernalizes
+infernally
+inferno
+inferno's
+infernos
+inferred
+inferrer
+inferrible
+inferring
+infers
+infertile
+infertility
+infest
+infestant
+infestation
+infestations
+infested
+infester
+infesting
+infests
+infeudation
+infibulate
+infidel
+infidel's
+infidelity
+infidelize
+infidelizes
+infidels
+infield
+infield's
+infielder
+infielder's
+infielders
+infields
+infight
+infighter
+infighter's
+infighters
+infighting
+infill
+infiltrate
+infiltrated
+infiltrates
+infiltrating
+infiltration
+infiltrative
+infiltrator
+infiltrators
+infinite
+infinitely
+infiniteness
+infinitesimal
+infinitesimally
+infinities
+infinitival
+infinitive
+infinitive's
+infinitively
+infinitives
+infinitize
+infinitizes
+infinitude
+infinitum
+infinity
+infirm
+infirmary
+infirmed
+infirmity
+infirmly
+infix
+infix's
+infixes
+inflame
+inflamed
+inflamer
+inflaming
+inflammability
+inflammable
+inflammableness
+inflammably
+inflammation
+inflammatorily
+inflammatory
+inflatable
+inflate
+inflated
+inflater
+inflates
+inflating
+inflation
+inflationary
+inflationism
+inflationist
+inflator
+inflect
+inflected
+inflecting
+inflection
+inflectional
+inflectionally
+inflections
+inflective
+inflects
+inflexed
+inflexibility
+inflexible
+inflexibleness
+inflexibly
+inflexion
+inflict
+inflicted
+inflicter
+inflicting
+infliction
+inflictive
+inflictor
+inflicts
+inflorescence
+inflorescences
+inflorescent
+inflow
+inflows
+influence
+influenced
+influencer
+influences
+influencing
+influent
+influential
+influentially
+influenza
+influx
+info
+infold
+inform
+informal
+informality
+informalize
+informalizes
+informally
+informant
+informant's
+informants
+Informatica
+informatics
+information
+informational
+informations
+informative
+informatively
+informativeness
+informatory
+informed
+informer
+informers
+informing
+informs
+infra
+infracostal
+infract
+infraction
+infractions
+infractor
+infrahuman
+infralapsarian
+infrangibility
+infrangible
+infrangibleness
+infrangibly
+infrared
+infrasonic
+infraspecific
+infrastructural
+infrastructure
+infrastructures
+infrequence
+infrequency
+infrequent
+infrequently
+infringe
+infringed
+infringement
+infringement's
+infringements
+infringer
+infringes
+infringing
+infulae
+infundibular
+infundibulate
+infundibuliform
+infundibulum
+infuriate
+infuriated
+infuriately
+infuriates
+infuriating
+infuriatingly
+infuriation
+infuscate
+infuse
+infused
+infuser
+infuses
+infusibility
+infusible
+infusibleness
+infusing
+infusion
+infusionism
+infusions
+infusoria
+infusorial
+infusorian
+ingather
+ingathering
+inge
+ingeminate
+ingenerate
+ingenious
+ingeniously
+ingeniousness
+ingenue
+ingenuity
+ingenuous
+ingenuously
+ingenuousness
+Ingersoll
+ingest
+ingesta
+ingested
+ingestible
+ingestion
+ingestive
+ingle
+ingleborough
+inglenook
+inglorious
+ingloriously
+ingloriousness
+ingoing
+ingolstadt
+ingot
+ingraft
+ingrain
+ingrained
+ingrainedly
+ingrains
+Ingram
+ingrate
+ingratiate
+ingratiating
+ingratiatingly
+ingratiation
+ingratiatory
+ingratitude
+ingravescent
+ingredient
+ingredient's
+ingredients
+ingres
+ingress
+ingression
+ingressive
+ingressiveness
+ingrowing
+ingrown
+ingrownness
+ingrowth
+ingrowths
+inguinal
+ingulf
+ingurgitate
+ingurgitation
+Ingush
+inhabit
+inhabitable
+inhabitance
+inhabitancy
+inhabitant
+inhabitant's
+inhabitants
+inhabitation
+inhabited
+inhabiter
+inhabiting
+inhabits
+inhalant
+inhalation
+inhalational
+inhalator
+inhale
+inhaled
+inhaler
+inhales
+inhaling
+inhambane
+inharmonic
+inharmonious
+inharmoniously
+inharmoniousness
+inharmony
+inhaul
+inhere
+inhered
+inherence
+inherent
+inherently
+inheres
+inhering
+inherit
+inheritability
+inheritable
+inheritableness
+inheritance
+inheritance's
+inheritances
+inherited
+inheriting
+inheritor
+inheritor's
+inheritors
+inheritress
+inheritress's
+inheritresses
+inheritrices
+inheritrix
+inherits
+inhesion
+inhibit
+inhibited
+inhibiter
+inhibiting
+inhibition
+inhibition's
+inhibitions
+inhibitive
+inhibitor
+inhibitors
+inhibitory
+inhibits
+inholding
+inholdings
+inhomogeneities
+inhomogeneity
+inhomogeneous
+inhospitable
+inhospitableness
+inhospitably
+inhospitality
+inhuman
+inhumane
+inhumanely
+inhumanities
+inhumanity
+inhumanize
+inhumanizes
+inhumanly
+inhumanness
+inhumation
+inhume
+inhumed
+inhumes
+inhuming
+inimical
+inimically
+inimitable
+inimitableness
+inimitably
+inion
+iniquities
+iniquitous
+iniquitously
+iniquitousness
+iniquity
+iniquity's
+initial
+initialed
+initialer
+initialing
+initialism
+initializable
+initialization
+initialization's
+initializations
+initialize
+initialized
+initializer
+initializers
+initializes
+initializing
+initialness
+initials
+initiate
+initiated
+initiates
+initiating
+initiation
+initiations
+initiative
+initiative's
+initiatives
+initiator
+initiator's
+initiators
+initiatory
+initio
+inject
+injectable
+injectant
+injected
+injecting
+injection
+injection's
+injections
+injective
+injector
+injectors
+injects
+injudicious
+injudiciously
+injudiciousness
+injunct
+injunction
+injunction's
+injunctions
+injunctive
+injure
+injured
+injurer
+injures
+injuries
+injuring
+injurious
+injuriously
+injuriousness
+injury
+injury's
+injustice
+injustice's
+injustices
+ink
+inkberry
+inkblot
+inked
+inker
+Inkerman
+inkers
+inkhorn
+inkiness
+inking
+inkings
+inkle
+inkling
+inkling's
+inklings
+inks
+inkstand
+inkwell
+inky
+inlace
+inlaid
+inland
+inlander
+inlay
+inlayer
+inlaying
+inlet
+inlet's
+inlets
+inlier
+inly
+inlying
+Inman
+Inman's
+inmate
+inmate's
+inmates
+inmesh
+inmigrant
+inmost
+inn
+innard
+innards
+innate
+innately
+innateness
+inner
+innerly
+innermost
+innersole
+innerspring
+innervate
+innervated
+innervates
+innervating
+innervation
+innervational
+innerve
+inning
+innings
+inniskilling
+innkeeper
+innkeeper's
+innkeepers
+innocence
+innocency
+innocent
+innocently
+innocents
+innocuous
+innocuously
+innocuousness
+innominate
+innovate
+innovated
+innovates
+innovating
+innovation
+innovation's
+innovational
+innovations
+innovative
+innovativeness
+innovator
+innovators
+innovatory
+innoxious
+inns
+innsbruck
+innuendo
+innuendoes
+innuendos
+Innuit
+innumerability
+innumerable
+innumerableness
+innumerably
+innumerate
+innumerous
+innutrition
+inobservance
+inobservant
+inoculable
+inoculant
+inoculate
+inoculated
+inoculates
+inoculating
+inoculation
+inoculations
+inoculative
+inoculativity
+inoculator
+inoculum
+inodorous
+inoffensive
+inoffensively
+inoffensiveness
+inofficious
+inoperable
+inoperative
+inoperativeness
+inoperculate
+inopportune
+inopportunely
+inopportuneness
+inordinate
+inordinately
+inordinateness
+inorganic
+inorganically
+inosculate
+inosculated
+inosculates
+inosculating
+inosculation
+inositol
+inotropic
+inpatient
+inphase
+inpour
+input
+input's
+inputed
+inputer
+inputing
+inputs
+inputted
+inputting
+inqilab
+inquest
+inquietude
+inquire
+inquired
+inquirer
+inquirers
+inquires
+inquiries
+inquiring
+inquiringly
+inquiry
+inquiry's
+inquisition
+inquisition's
+inquisitional
+inquisitions
+inquisitive
+inquisitively
+inquisitiveness
+inquisitor
+inquisitorial
+inquisitorially
+inroad
+inroads
+inrush
+ins
+insalivate
+insalubrious
+insalubrity
+insane
+insanely
+insaneness
+insanitary
+insanitation
+insanity
+insatiability
+insatiable
+insatiableness
+insatiably
+insatiate
+insatiately
+insatiateness
+inscape
+inscribe
+inscribed
+inscriber
+inscribes
+inscribing
+inscription
+inscription's
+inscriptional
+inscriptions
+inscriptive
+inscriptively
+inscroll
+inscrutability
+inscrutable
+inscrutableness
+inscrutably
+insculp
+inseam
+insect
+insect's
+insectan
+insectarium
+insectary
+insecticidal
+insecticidally
+insecticide
+insecticides
+insectifuge
+insectile
+insectivore
+insectivore's
+insectivores
+insectivorous
+insectivory
+insects
+insecure
+insecurely
+insecureness
+insecurity
+Inselberg
+inseminate
+insemination
+inseminator
+insensate
+insensately
+insensateness
+insensibility
+insensible
+insensibleness
+insensibly
+insensitive
+insensitively
+insensitiveness
+insensitivity
+insentience
+insentient
+inseparability
+inseparable
+inseparableness
+inseparably
+insert
+inserted
+inserter
+inserting
+insertion
+insertion's
+insertional
+insertions
+inserts
+insessorial
+inset
+insets
+insetted
+insetting
+inshore
+inshrine
+inside
+insider
+insiders
+insides
+insidious
+insidiously
+insidiousness
+insight
+insight's
+insightful
+insightfully
+insights
+insignia
+insignias
+insignificance
+insignificances
+insignificancy
+insignificant
+insignificantly
+insincere
+insincerely
+insincerity
+insinuate
+insinuated
+insinuates
+insinuating
+insinuatingly
+insinuation
+insinuations
+insinuative
+insinuator
+insipid
+insipidity
+insipidly
+insipience
+insist
+insisted
+insistence
+insistency
+insistent
+insistently
+insisting
+insists
+insnare
+insobriety
+insociability
+insociable
+insociably
+insofar
+insolate
+insolation
+insole
+insolence
+insolent
+insolently
+insolubility
+insolubilization
+insolubilize
+insoluble
+insolubleness
+insolubly
+insolvable
+insolvably
+insolvency
+insolvent
+insomnia
+insomniac
+insomniacs
+insomuch
+insouciance
+insouciant
+insouciantly
+insoul
+inspan
+inspect
+inspected
+inspecting
+inspection
+inspection's
+inspections
+inspective
+inspector
+inspector's
+inspectorate
+inspectors
+inspectorship
+inspects
+insphere
+inspiration
+inspiration's
+inspirational
+inspirationally
+inspirations
+inspirator
+inspiratory
+inspire
+inspired
+inspirer
+inspires
+inspiring
+inspirit
+inspissate
+inspissated
+inspissation
+inspissator
+instabilities
+instability
+instable
+instalation
+install
+installant
+installation
+installation's
+installations
+installed
+installer
+installers
+installing
+installment
+installment's
+installments
+installs
+instalment
+instalments
+instance
+instanced
+instances
+instancing
+instancy
+instant
+instantaneity
+instantaneous
+instantaneously
+instantaneousness
+instanter
+instantiate
+instantiated
+instantiates
+instantiating
+instantiation
+instantiation's
+instantiations
+instantly
+instantness
+instants
+instar
+instate
+instated
+instates
+instating
+instauration
+instead
+instep
+insteps
+instigate
+instigated
+instigates
+instigating
+instigation
+instigative
+instigator
+instigator's
+instigators
+instil
+instill
+instillation
+instilled
+instiller
+instilling
+instillment
+instills
+instils
+instinct
+instinct's
+instinctive
+instinctively
+instincts
+instinctual
+institute
+instituted
+instituter
+instituters
+institutes
+instituting
+institution
+institution's
+institutional
+institutionalism
+institutionalist
+institutionalization
+institutionalization's
+institutionalizations
+institutionalize
+institutionalized
+institutionalizes
+institutionalizing
+institutionally
+institutionize
+institutionizes
+institutions
+institutive
+institutor
+instruct
+instructed
+instructing
+instruction
+instruction's
+instructional
+instructions
+instructive
+instructively
+instructiveness
+instructor
+instructor's
+instructors
+instructorship
+instructress
+instructs
+instrument
+instrumental
+instrumentalism
+instrumentalist
+instrumentalist's
+instrumentalists
+instrumentalities
+instrumentality
+instrumentalize
+instrumentalizes
+instrumentally
+instrumentals
+instrumentation
+instrumented
+instrumenting
+instruments
+insubordinate
+insubordinately
+insubordination
+insubstantial
+insubstantiality
+insufferable
+insufferableness
+insufferably
+insufficience
+insufficiencies
+insufficiency
+insufficient
+insufficiently
+insufflate
+insufflated
+insufflates
+insufflating
+insufflation
+insufflator
+insugently
+insulant
+insular
+insularism
+insularity
+insularize
+insularizes
+insularly
+insulate
+insulated
+insulates
+insulating
+insulation
+insulations
+insulator
+insulator's
+insulators
+insulin
+insult
+insulted
+insulter
+insulting
+insultingly
+insults
+insuperable
+insuperably
+insupportable
+insupportableness
+insupportably
+insuppressible
+insuppressibly
+insurability
+insurable
+insurance
+insurances
+insure
+insured
+insurer
+insurers
+insures
+insurgence
+insurgency
+insurgent
+insurgent's
+insurgents
+insuring
+insurmountable
+insurmountably
+insuror
+insurrection
+insurrection's
+insurrectional
+insurrectionary
+insurrectionist
+insurrectionize
+insurrectionizes
+insurrections
+insusceptibility
+insusceptible
+insusceptibly
+inswing
+intact
+intactness
+intaglio
+intake
+intakes
+intaking
+intangibility
+intangible
+intangible's
+intangibleness
+intangibles
+intangibly
+intarsia
+integer
+integer's
+integers
+integrability
+integrable
+integral
+integral's
+integrality
+integralization
+integralization's
+integralizations
+integralize
+integralizes
+integrally
+integrals
+integrand
+integrant
+integratable
+integrate
+integrated
+integrates
+integrating
+integration
+integrationist
+integrations
+integrative
+integrator
+integrity
+integument
+integumental
+integumentary
+Intel
+Intel's
+intellect
+intellect's
+intellection
+intellective
+intellectively
+intellects
+intellectual
+intellectualism
+intellectualist
+intellectualistic
+intellectuality
+intellectualization
+intellectualization's
+intellectualizations
+intellectualize
+intellectualized
+intellectualizer
+intellectualizers
+intellectualizes
+intellectualizing
+intellectually
+intellectualness
+intellectuals
+intellectus
+intelligence
+intelligencer
+intelligences
+intelligent
+intelligential
+intelligently
+intelligentsia
+intelligibility
+intelligible
+intelligibleness
+intelligibly
+Intelsat
+intemperance
+intemperate
+intemperately
+intemperateness
+intend
+intendance
+intendancy
+intendant
+intendants
+intended
+intendedly
+intendedness
+intender
+intending
+intendment
+intends
+intenerate
+inteneration
+intense
+intensely
+intenseness
+intensification
+intensified
+intensifier
+intensifiers
+intensifies
+intensify
+intensifying
+intension
+intensional
+intensionally
+intensities
+intensity
+intensive
+intensively
+intensiveness
+intent
+intention
+intentional
+intentionality
+intentionally
+intentioned
+intentions
+intently
+intentness
+intents
+intepupillary
+inter
+interact
+interactant
+interacted
+interacting
+interaction
+interaction's
+interactional
+interactions
+interactive
+interactively
+interactivity
+interacts
+interagency
+INTERAMA
+interatomic
+interaxial
+interbedded
+interbrain
+interbreed
+intercalary
+intercalate
+intercalated
+intercalates
+intercalating
+intercalation
+intercalative
+intercase
+intercaste
+intercede
+interceder
+intercedes
+intercellular
+intercellularly
+intercensal
+intercept
+intercepted
+intercepter
+intercepting
+interception
+interceptor
+intercepts
+intercession
+intercessional
+intercessor
+intercessory
+interchange
+interchangeability
+interchangeable
+interchangeableness
+interchangeably
+interchanged
+interchanger
+interchanges
+interchanging
+interchangings
+interchannel
+intercity
+intercivilization
+intercivilization's
+intercivilizations
+interclass
+interclavicle
+interclavicular
+intercohort
+intercollegiate
+intercolonization
+intercolonization's
+intercolonizations
+intercolumniation
+intercom
+intercommunicate
+intercommunicated
+intercommunicates
+intercommunicating
+intercommunication
+intercommunion
+intercomputer
+interconnect
+interconnectable
+interconnected
+interconnectedness
+interconnecting
+interconnection
+interconnection's
+interconnections
+interconnectivity
+interconnects
+interconsole
+intercontinental
+interconversion
+interconvert
+interconvertibility
+interconvertible
+intercooler
+intercorrelated
+intercostal
+intercostally
+intercourse
+intercrisis
+intercrop
+intercross
+intercrystallization
+intercrystallization's
+intercrystallizations
+intercrystallize
+intercrystallizes
+intercultural
+interculturally
+intercurrent
+intercurrently
+intercut
+interdenominational
+interdenominationalism
+interdental
+interdentally
+interdepartmental
+interdepartmentally
+interdepend
+interdependence
+interdependencies
+interdependency
+interdependent
+interdependently
+interdict
+interdiction
+interdictive
+interdictor
+interdictory
+interdiffuse
+interdiffusion
+interdigitate
+interdigitation
+interdisciplinary
+interest
+interested
+interestedly
+interesting
+interestingly
+interestingness
+interests
+interface
+interfaced
+interfacer
+interfaces
+interfacial
+interfacing
+interfaith
+interfascicular
+interfere
+interfered
+interference
+interferences
+interferential
+interferer
+interferes
+interfering
+interferingly
+interferogram
+interferogram's
+interferograms
+interferometer
+interferometer's
+interferometers
+interferometric
+interferometrically
+interferometry
+interferon
+interfertile
+interfertility
+interfile
+interflow
+interfluent
+interfluve
+interframe
+interfuse
+interfusion
+intergalactic
+intergeneration
+intergenerational
+intergeneric
+interglacial
+intergovernmental
+intergradation
+intergradational
+intergrade
+intergranal
+intergroup
+intergrowth
+interhemispheric
+interhybridize
+interhybridizes
+interim
+interindex
+interindustry
+interionic
+interior
+interior's
+interiority
+interiorization
+interiorize
+interiorized
+interiorizes
+interiorizing
+interiorly
+interiors
+Interisland
+interjacent
+interject
+interjected
+interjecting
+interjection
+interjectional
+interjectionalize
+interjectionalizes
+interjectionally
+interjectionize
+interjectionizes
+interjector
+interjectory
+interjects
+interjudgment
+interjudgment's
+interjudgments
+interlace
+interlaced
+interlacement
+interlaces
+interlacing
+interlaken
+interlaminate
+interlamination
+interlap
+interlard
+interlay
+interlayer
+interlayering
+interleaf
+interleave
+interleaved
+interleaves
+interleaving
+interlibrary
+interline
+interlinear
+interlinearly
+interlineation
+interlingua
+interlining
+interlink
+interlinked
+interlinking
+interlinks
+interlisp
+interlisp's
+interlobular
+interlocal
+interlocation
+interlock
+interlocked
+interlocker
+interlocking
+interlocks
+interlocution
+interlocutor
+interlocutory
+interlope
+interloped
+interloper
+interlopes
+interloping
+interlude
+interludes
+interlunar
+interlunary
+interlunation
+intermarriage
+intermarry
+intermeddle
+intermeddler
+intermediacy
+intermediaries
+intermediary
+intermediate
+intermediate's
+intermediated
+intermediately
+intermediateness
+intermediates
+intermediating
+intermediation
+intermembrane
+interment
+intermesh
+intermeshed
+intermetallic
+intermetrics
+intermezzo
+intermigration
+interminable
+interminableness
+interminably
+intermingle
+intermingled
+intermingles
+intermingling
+intermission
+intermissions
+intermit
+intermittence
+intermittency
+intermittent
+intermittently
+intermitter
+intermix
+intermixed
+intermixer
+intermixes
+intermixing
+intermixture
+intermodule
+intermolecular
+intermolecularly
+intern
+internal
+internality
+internalization
+internalization's
+internalizations
+internalize
+internalized
+internalizes
+internalizing
+internally
+internals
+international
+internationalism
+internationalist
+internationalists
+internationality
+internationalization
+internationalization's
+internationalizations
+internationalize
+internationalized
+internationalizes
+internationalizing
+internationally
+internationals
+interne
+internecine
+interned
+internee
+internescine
+Internet
+Internet's
+internetwork
+interneuron
+interneuronal
+interning
+internist
+internment
+internodal
+internode
+interns
+internship
+internuclear
+internuncial
+internuncially
+internuncio
+interoceptive
+interoceptor
+interoffice
+interorganizational
+interosculate
+interpage
+interparticle
+interpellant
+interpellate
+interpellation
+interpellator
+interpenetrate
+interpenetrates
+interpenetration
+interpersonal
+interpersonally
+interphase
+interphone
+interplanetary
+interplant
+interplay
+interplead
+interpleader
+interpol
+interpolant
+interpolate
+interpolated
+interpolates
+interpolating
+interpolation
+interpolations
+interpolative
+interpolator
+interpolatory
+interpose
+interposed
+interposer
+interposes
+interposing
+interposition
+interpret
+interpretability
+interpretable
+interpretation
+interpretation's
+interpretational
+interpretations
+interpretative
+interpretatively
+interprete
+interpreted
+interpreter
+interpreters
+interpretes
+interpreting
+interpretive
+interpretively
+interpretor
+interpretors
+interprets
+interprocess
+interprocessor
+interquartile
+interracial
+interradial
+interred
+interregional
+interregnum
+interrelate
+interrelated
+interrelatedly
+interrelatedness
+interrelates
+interrelating
+interrelation
+interrelations
+interrelationship
+interrelationship's
+interrelationships
+interreligious
+interrex
+interring
+interrobang
+interrogable
+interrogate
+interrogated
+interrogates
+interrogating
+interrogation
+interrogational
+interrogations
+interrogative
+interrogatively
+interrogatives
+interrogator
+interrogatories
+interrogators
+interrogatory
+interrogee
+interrogees
+interrupt
+interrupted
+interrupter
+interrupters
+interruptible
+interrupting
+interruption
+interruption's
+interruptions
+interruptive
+interrupts
+interscholastic
+intersect
+intersected
+intersecting
+intersection
+intersection's
+intersections
+intersectoral
+intersects
+interservice
+intersession
+intersex
+intersexual
+intersexuality
+intersexually
+interspace
+interspecies
+interspecific
+intersperse
+interspersed
+intersperses
+interspersing
+interspersion
+interspersions
+interstadial
+interstage
+interstate
+interstellar
+intersterile
+intersterility
+interstice
+interstices
+interstitial
+interstitially
+interstratify
+intersubjective
+intersubjectively
+intersubjectivity
+intersurvey
+intersystem
+intertask
+intertestamental
+intertexture
+intertidal
+intertidally
+intertie
+intertill
+intertillage
+intertrigo
+intertropical
+intertwine
+intertwined
+intertwinement
+intertwines
+intertwining
+intertwist
+interurban
+interval
+interval's
+intervale
+intervalometer
+intervalometer's
+intervalometers
+intervals
+intervene
+intervened
+intervener
+intervenes
+intervening
+intervenor
+intervention
+intervention's
+interventionism
+interventionist
+interventions
+intervertebral
+intervertebrally
+interview
+interviewed
+interviewee
+interviewee's
+interviewees
+interviewer
+interviewer's
+interviewers
+interviewing
+interviews
+intervocalic
+interwar
+interweave
+interweaves
+interweaving
+interwoven
+interzonal
+interzone
+intestacy
+intestate
+intestinal
+intestinally
+intestine
+intestine's
+intestines
+intima
+intimacy
+intimal
+intimate
+intimated
+intimately
+intimateness
+intimater
+intimates
+intimating
+intimation
+intimations
+intimidate
+intimidated
+intimidates
+intimidating
+intimidation
+intimidator
+intimidatory
+intinction
+intine
+intitule
+intl
+intnl
+into
+intolerability
+intolerable
+intolerableness
+intolerably
+intolerance
+intolerant
+intolerantly
+intolerantness
+intonate
+intonation
+intonation's
+intonational
+intonations
+intone
+intoned
+intoner
+intoning
+intorsion
+intoxicant
+intoxicate
+intoxicated
+intoxicatedly
+intoxicating
+intoxication
+intra
+intraarterial
+intraarterially
+intracardiac
+intracardial
+intracardially
+intracellular
+intracellularly
+intracity
+intraclass
+intracoastal
+intracohort
+intracranial
+intracranially
+intractability
+intractable
+intractableness
+intractably
+intracutaneous
+intracutaneously
+intradepartmental
+intradermal
+intradermally
+intrados
+intraepithelial
+intrafamily
+intragalactic
+intragenerational
+intraindustry
+intraline
+intrametropolitan
+intramolecular
+intramolecularly
+intramural
+intramurally
+intramuscular
+intramuscularly
+intranasal
+intranational
+intrans
+intransigeance
+intransigeant
+intransigeantly
+intransigence
+intransigent
+intransigently
+intransigents
+intransitive
+intransitively
+intransitiveness
+intrant
+intranuclear
+intraoffice
+intraorganization
+intraorganization's
+intraorganizations
+intraperitoneal
+intraperitoneally
+intrapersonal
+intrapopulation
+intraprocess
+intrapsychic
+intrapsychically
+intrapulmonary
+intraregional
+intrasectoral
+intrasocietal
+intraspecies
+intraspecific
+intraspecifically
+intrastate
+intratelluric
+intratissue
+intrauterine
+intravasation
+intravascular
+intravenous
+intravenously
+intravital
+intravitally
+intravitam
+intrazonal
+intreat
+intrench
+intrepid
+intrepidity
+intrepidly
+intrepidness
+intricacies
+intricacy
+intricate
+intricately
+intricateness
+intrigant
+intriguant
+intrigue
+intrigued
+intriguer
+intrigues
+intriguing
+intriguingly
+intrinsic
+intrinsical
+intrinsically
+intrinsicalness
+intrinsics
+intro
+introduce
+introduced
+introducer
+introduces
+introducing
+introduction
+introduction's
+introductions
+introductorily
+introductory
+introgressant
+introgression
+introgressive
+introit
+introject
+introjected
+introjection
+introjects
+intromission
+intromit
+intromittent
+intromitter
+introrse
+introrsely
+introspect
+introspection
+introspectional
+introspectionism
+introspectionist
+introspectionistic
+introspections
+introspective
+introspectively
+introspectiveness
+introversion
+introversive
+introversively
+introvert
+introverted
+intrude
+intruded
+intruder
+intruder's
+intruders
+intrudes
+intruding
+intrusion
+intrusion's
+intrusions
+intrusive
+intrusively
+intrusiveness
+intrust
+intrvascularly
+intsv
+intubate
+intubated
+intubates
+intubating
+intubation
+intuc
+intuit
+intuitable
+intuiting
+intuition
+intuition's
+intuitional
+intuitionism
+intuitionist
+intuitions
+intuitive
+intuitively
+intuitiveness
+intuitivism
+intumesce
+intumescence
+intumescent
+intussuscept
+intussusception
+intussusceptive
+intwine
+inuit
+inulin
+inunction
+inundate
+inundated
+inundates
+inundating
+inundation
+inundations
+inundator
+inundatory
+inurbane
+inure
+inured
+inurement
+inuring
+inurn
+inutile
+inutility
+inv
+invade
+invaded
+invader
+invaders
+invades
+invading
+invaginate
+invaginated
+invaginates
+invaginating
+invagination
+invalid
+invalidate
+invalidated
+invalidates
+invalidating
+invalidation
+invalidations
+invalidator
+invalidism
+invalidities
+invalidity
+invalidly
+invalidness
+invalids
+invaluable
+invaluableness
+invaluably
+Invar
+invariability
+invariable
+invariableness
+invariably
+invariance
+invariant
+invariantly
+invariants
+invasion
+invasion's
+invasions
+invasive
+invasiveness
+invective
+invectively
+invectiveness
+inveigh
+inveigher
+inveigle
+inveigled
+inveiglement
+inveigler
+inveigling
+invenit
+invent
+invented
+inventing
+invention
+invention's
+inventions
+inventive
+inventively
+inventiveness
+inventor
+inventor's
+inventorial
+inventorially
+inventories
+inventors
+inventory
+inventory's
+inventress
+invents
+inveracity
+invercalt
+invercargill
+Inverness
+inverse
+inversely
+inverses
+inversion
+inversions
+inversive
+invert
+invertase
+invertebrate
+invertebrate's
+invertebrates
+inverted
+inverter
+inverters
+invertible
+inverting
+inverts
+invest
+investable
+invested
+investigate
+investigated
+investigates
+investigating
+investigation
+investigational
+investigations
+investigative
+investigator
+investigator's
+investigators
+investigatory
+investing
+investiture
+investment
+investment's
+investments
+investor
+investor's
+investors
+invests
+inveteracy
+inveterate
+inveterately
+inviability
+inviable
+invictus
+invidious
+invidiously
+invidiousness
+invigorate
+invigorated
+invigorates
+invigorating
+invigoratingly
+invigoration
+invigorator
+inviible
+invincibility
+invincible
+invincibleness
+invincibly
+inviolability
+inviolable
+inviolableness
+inviolably
+inviolacy
+inviolate
+inviolately
+inviolateness
+inviscid
+invisibility
+invisible
+invisibleness
+invisibly
+invitation
+invitation's
+invitational
+invitations
+invitatory
+invite
+invited
+invitee
+invitees
+inviter
+invites
+inviting
+invitingly
+invocable
+invocate
+invocation
+invocation's
+invocational
+invocations
+invocatory
+invoice
+invoiced
+invoices
+invoicing
+invokable
+invoke
+invoked
+invoker
+invokers
+invokes
+invoking
+involucel
+involucral
+involucrate
+involucre
+involucred
+involucrum
+involuntarily
+involuntariness
+involuntary
+involute
+involutely
+involution
+involutional
+involutionary
+involutions
+involutorial
+involutory
+involve
+involved
+involvedly
+involvement
+involvement's
+involvements
+involver
+involves
+involving
+invulnerability
+invulnerable
+invulnerableness
+invulnerably
+invultuation
+inward
+inwardly
+inwardness
+inwards
+inweave
+inwrap
+inwrought
+inyala
+Io
+ioctl
+iodate
+iodated
+iodating
+iodation
+iodic
+iodide
+iodin
+iodinate
+iodinated
+iodinating
+iodination
+iodine
+iodism
+iodization
+iodize
+iodized
+iodizer
+iodizers
+iodizes
+iodizing
+iodoamino
+iodocompounds
+iodoform
+iodometry
+iodophor
+iodoprotein
+iodopsin
+iodothyronines
+iodotyrosines
+iodous
+iolite
+ion
+iona
+ione
+Ionesco
+Ionia
+Ionian
+ionic
+ionicity
+Ionicization
+Ionicization's
+Ionicizations
+Ionicize
+Ionicizes
+ionium
+ionizable
+ionizable's
+ionizables
+ionization
+ionization's
+ionizations
+ionize
+ionized
+ionizer
+ionizers
+ionizes
+ionizing
+ionizings
+ionizion
+ionizions
+ionone
+ionopause
+ionosphere
+ionospheric
+ionospherically
+ions
+iontophoresis
+iosola
+IOT
+iota
+iotacism
+Iowa
+ipecac
+ipecacuanha
+iphigenia
+ipoh
+Ipomoea
+iproniazid
+ipsambul
+ipsilateral
+ipsilaterally
+ipso
+ipsus
+ipswich
+IQ
+iqbal
+iquique
+iquitos
+IR
+Ira
+iracund
+irade
+IRAF
+Iran
+Iran's
+Iranian
+Iranian's
+Iranians
+Iranize
+Iranizes
+Iraq
+iraqi
+Iraqi
+Iraqi's
+Iraqis
+irascibility
+irascible
+irascibleness
+irascibly
+irate
+irately
+irateness
+irbid
+irbil
+ire
+ire's
+ireful
+Ireland
+Ireland's
+irenaeus
+Irene
+irenic
+irenically
+irenicon
+irenics
+ires
+Ireton
+irian
+irid
+iridaceous
+iridectomy
+irides
+iridescence
+iridescent
+iridescently
+iridic
+iridium
+irido
+iridosmine
+iridotomy
+irina
+iris
+irises
+Irish
+Irishism
+Irishize
+Irishizes
+Irishman
+Irishmen
+iritis
+irk
+irked
+irking
+irks
+irksome
+irksomely
+irksomeness
+Irkutsk
+Irma
+iron
+ironbark
+ironbound
+ironclad
+ironed
+ironer
+ironfisted
+ironfounding
+ironhanded
+ironhandedly
+ironhandedness
+ironhearted
+ironic
+ironical
+ironically
+ironicalness
+ironies
+ironing
+ironings
+ironist
+ironize
+ironizes
+ironmaster
+ironmonger
+ironmongery
+ironness
+Irons
+irons
+ironside
+ironsides
+ironstone
+ironware
+ironweed
+ironwood
+ironwork
+ironwork's
+ironworker
+ironworks
+irony
+Iroquoian
+Iroquois
+irradiance
+irradiant
+irradiate
+irradiated
+irradiation
+irradiative
+irradiator
+irradicable
+irradicably
+irrational
+irrationalism
+irrationalist
+irrationalistic
+irrationality
+irrationalize
+irrationalizes
+irrationally
+irrationalness
+irrationals
+Irrawaddy
+irreal
+irreality
+irreclaimable
+irreclaimably
+irreconcilability
+irreconcilable
+irreconcilableness
+irreconcilably
+irreconciliable
+irrecoverable
+irrecoverableness
+irrecoverably
+irrecusable
+irrecusably
+irred
+irredeemable
+irredeemably
+irredenta
+irredentism
+irredentist
+irreducibility
+irreducible
+irreducibly
+irreflexive
+irreformability
+irreformable
+irrefragability
+irrefragable
+irrefragably
+irrefrangible
+irrefutability
+irrefutable
+irrefutably
+irreg
+irregardless
+irregular
+irregularities
+irregularity
+irregularize
+irregularizes
+irregularly
+irregulars
+irrelative
+irrelatively
+irrelevance
+irrelevances
+irrelevancies
+irrelevancy
+irrelevant
+irrelevantly
+irrelievable
+irreligion
+irreligionist
+irreligious
+irreligiously
+irremeable
+irremediable
+irremediableness
+irremediably
+irremissible
+irremovability
+irremovable
+irremovably
+irreparable
+irreparableness
+irreparably
+irrepealability
+irrepealable
+irreplaceability
+irreplaceable
+irreplaceableness
+irreplaceably
+irrepressibility
+irrepressible
+irrepressibly
+irreproachability
+irreproachable
+irreproachableness
+irreproachably
+irreproducibility
+irreproducible
+irresistibility
+irresistible
+irresistibleness
+irresistibly
+irresoluble
+irresolute
+irresolutely
+irresoluteness
+irresolution
+irresolvable
+irrespective
+irrespectively
+irrespirable
+irresponsibility
+irresponsible
+irresponsibleness
+irresponsibly
+irresponsive
+irresponsiveness
+irretentive
+irretrievability
+irretrievable
+irretrievably
+irreverence
+irreverent
+irreverently
+irreversibility
+irreversible
+irreversibly
+irrevocability
+irrevocable
+irrevocableness
+irrevocably
+irrigate
+irrigated
+irrigates
+irrigating
+irrigation
+irrigational
+irrigationists
+irrigations
+irrigator
+irrigators
+irriguous
+irritability
+irritable
+irritableness
+irritably
+irritant
+irritants
+irritate
+irritated
+irritates
+irritating
+irritatingly
+irritation
+irritations
+irritative
+irrotational
+irrotationally
+irrupt
+irrupted
+irrupting
+irruption
+irruptions
+irruptive
+irruptively
+irrupts
+IRS
+irtysh
+Irvin
+Irvin's
+Irvine
+Irving
+Irwin
+Irwin's
+is
+Isaac
+Isaacs
+Isaacson
+Isaacson's
+Isabel
+Isabella
+Isabella's
+Isadore
+Isadore's
+isagoge
+isagogics
+Isaiah
+Isaiah's
+isallobar
+isar
+isarithmic
+isatin
+isauria
+Isbn
+Iscariot
+ischaemia
+ischia
+ischium
+isentropic
+isentropically
+isherwood
+Ishmael
+Ishmaelite
+Ishtar
+Isidore
+isinglass
+Isis
+Iskander
+Iskenderun
+Islam
+Islamabad
+Islamabad's
+Islamic
+Islamization
+Islamization's
+Islamizations
+Islamize
+Islamized
+Islamizes
+Islamizing
+island
+islander
+islanders
+Islandia
+islandia
+islands
+islay
+isle
+isle's
+isles
+islet
+islet's
+islets
+isling
+Islington
+ism
+Ismaili
+ismailia
+isn't
+iso
+ISO
+isoagglutination
+isoagglutinative
+isoagglutinin
+isoagglutinogen
+isoalloxazine
+isoamyl
+isoantibody
+isoantigen
+isoantigenic
+isoantigenicity
+isobar
+isobaric
+isobath
+isobutylene
+isocept
+Isocheim
+isochor
+isochromatic
+isochron
+isochronal
+isochronally
+isochrone
+isochronism
+isochronization
+isochronize
+isochronized
+isochronizes
+isochronizing
+isochronous
+isochronously
+isochroous
+isoclinal
+isoclinally
+isocline
+isoclinic
+isoclinically
+isocracy
+isocrates
+isocyanate
+isocyanic
+isocyanide
+isodiametric
+isodiaphere
+isodimorphism
+isodine
+isodynamic
+isoelectric
+isoelectronic
+isoenergetic
+isogamete
+isogenous
+isogeotherm
+isogloss
+isogon
+isogonic
+isogram
+isogram's
+isograms
+isohel
+isohyet
+isoimmunization
+isoimmunization's
+isoimmunizations
+isoimmunize
+isoimmunizes
+isolate
+isolated
+isolates
+isolating
+isolation
+isolationism
+isolationist
+isolationistic
+isolations
+isolator
+Isolde
+Isolde's
+isolecithal
+isoleucine
+isolex
+isoline
+isologous
+isologue
+isomagnetic
+isomer
+isomerase
+isomeric
+isomerism
+isomerization
+isomerization's
+isomerizations
+isomerize
+isomerized
+isomerizeparabolization
+isomerizes
+isomerizing
+isomerous
+isomers
+isometric
+isometrical
+isometrically
+isometrics
+isometry
+isomorph
+isomorphic
+isomorphically
+isomorphism
+isomorphism's
+isomorphisms
+isomorphous
+isoniazid
+isonomy
+isooctane
+isophone
+isophotal
+isophote
+isopiestic
+isopleth
+isopleths
+isopod
+isoprene
+isopropyl
+isorhythmic
+isosceles
+isoseismal
+isosmotic
+isospondylous
+isostasy
+isosteric
+isotactic
+isothere
+isotherm
+isothermal
+isothermally
+isotherms
+isotone
+isotonic
+isotonically
+isotonicity
+isotope
+isotope's
+isotopes
+isotopic
+isotopically
+isotopy
+isotron
+isotropic
+isotropical
+isotropically
+isotropy
+isozyme
+isozymic
+ispell
+ispell's
+Israel
+Israel's
+Israeli
+Israeli's
+Israelis
+Israelite
+Israelites
+Israelitize
+Israelitizes
+israfil
+issachar
+ISSN
+issuable
+issuably
+issuance
+issuant
+issue
+issued
+issueless
+issuer
+issuers
+issues
+issuing
+issus
+istana
+Istanbul
+isthmian
+isthmic
+isthmus
+istle
+istria
+Istvan
+Istvan's
+it
+it'd
+it'll
+it's
+itacolumite
+itaconic
+Italia
+Italian
+Italian's
+italianate
+Italianism
+Italianization
+Italianization's
+Italianizations
+Italianize
+Italianized
+Italianizer
+Italianizers
+Italianizes
+Italianizing
+Italians
+italic
+italicity
+italicization
+italicization's
+italicizations
+italicize
+italicized
+italicizes
+italicizing
+italics
+italicy
+Italy
+itch
+itches
+itchiness
+itching
+itchy
+ITcorp
+ITCorp
+ITcorp's
+ITCorp's
+item
+item's
+itemization
+itemization's
+itemizations
+itemize
+itemized
+itemizer
+itemizers
+itemizes
+itemizing
+items
+iterance
+iterant
+iterate
+iterated
+iterates
+iterating
+iteration
+iterations
+iterative
+iteratively
+iterator
+iterator's
+iterators
+Ithaca
+Ithacan
+ithunn
+ithyphallic
+itineracy
+itinerancy
+itinerant
+itinerantly
+itineraries
+itinerary
+itinerate
+itinerated
+itinerates
+itinerating
+itineration
+Ito
+Ito's
+its
+itself
+itsy
+ITT
+IUD
+iud
+IUDs
+iuds
+iulus
+iv
+Ivan
+Ivanhoe
+Ivanovo
+Ivanovsky
+Iverson
+Iverson's
+Ives
+ivied
+ivies
+iviza
+ivories
+Ivory
+ivory
+ivy
+ivy's
+ix
+Ixia
+Ixion
+Ixtaccihuatl
+ixtle
+iyar
+iyeyasu
+Izaak
+izaak
+Izhevsk
+izmir
+izmit
+iznik
+Iztaccihuatl
+Izvestia
+izzard
+j's
+jab
+jab's
+Jabalpur
+jabbed
+jabber
+jabbered
+jabberer
+jabbering
+jabberings
+jabbers
+jabberwocky
+jabbing
+Jabir
+Jabiru
+Jablonsky
+Jablonsky's
+Jaborandi
+jabot
+jabs
+jacamar
+Jacaranda
+jacdaw
+jack
+jackal
+jackal's
+jackals
+jackanapes
+jackass
+jackassery
+jackboot
+jackbooted
+jackboots
+jackdaw
+jackdaws
+jacked
+jacker
+jackeroo
+jacket
+jacketed
+jackets
+jacketted
+jacketting
+jackfish
+jackfruit
+jackhammer
+Jackie
+jacking
+jackknife
+Jackman
+jackpot
+jackpots
+jacks
+jackscrew
+jackshaft
+jacksmelt
+jacksnipe
+Jackson
+Jacksonian
+Jacksons
+Jacksonville
+jackstay
+jackstraws
+Jacky
+JACM
+Jacob
+Jacobean
+Jacobi
+Jacobi's
+Jacobian
+Jacobin
+Jacobinize
+jacobite
+Jacobite
+Jacobs
+Jacobsen
+Jacobson
+Jacobson's
+Jacobus
+Jacoby
+jacoby
+jaconet
+Jacquard
+Jacqueline
+jacquerie
+Jacques
+jactitation
+jade
+jaded
+jadedly
+jadedness
+jadeite
+jades
+jading
+Jadotville
+Jaeger
+Jaeger's
+jael
+jaffa
+jaffna
+jag
+Jaga
+jagged
+jaggedly
+jaggedness
+jagger
+jaggers
+jaggery
+jagging
+jaggy
+jaguar
+jaguarondi
+jahveh
+Jahvist
+jahweh
+jai
+jail
+jailbait
+jailbird
+jailbreak
+jailed
+jailer
+jailers
+jailhouse
+jailing
+jailor
+jails
+Jaime
+Jaime's
+Jain
+Jainism
+jaipur
+Jakarta
+Jake
+Jakes
+jalap
+jalapa
+jalisco
+jalopies
+jalopy
+jalousie
+jam
+Jamaica
+Jamaican
+jamb
+jambalaya
+jambeau
+jambi
+jambo
+jamboree
+James
+Jamesian
+Jameson
+Jamestown
+Jamie
+Jamie's
+jammed
+jammer
+jamming
+jammu
+jammy
+jamnagar
+jampan
+jams
+jamshedpur
+jamshid
+Jan
+jana
+Janacek
+janata
+Jane
+Jane's
+Janeiro
+Janesville
+Janet
+Janet's
+jangle
+jangled
+jangler
+jangles
+jangling
+Janice
+Janiculum
+Janigro
+janina
+janis
+Janis
+janissaries
+janissary
+janitor
+janitor's
+janitorial
+janitors
+janitress
+Janos
+Janowitz
+Jansen
+Jansenism
+Jansenist
+Jansenist's
+Januaries
+January
+January's
+Janus
+Jap
+Japan
+Japan's
+Japanese
+Japanese's
+Japanization
+Japanization's
+Japanizations
+Japanize
+Japanized
+Japanizes
+Japanizing
+japanned
+japanner
+japanning
+jape
+japer
+japery
+japes
+Japheth
+Japhetic
+japing
+japonica
+jar
+jar's
+jardiniere
+jarful
+jargon
+jargonistic
+jargonization
+jargonization's
+jargonizations
+jargonize
+jargonized
+jargonizes
+jargonizing
+jarl
+jarp
+jarrah
+jarred
+jarring
+jarringly
+jarrow
+jarry
+jars
+jarvey
+Jarvi
+Jarvin
+Jarvin's
+Jarvis
+jasmine
+Jason
+jasper
+jasperize
+jasperizes
+jaspers
+jassy
+Jastrow
+Jat
+jato
+jaundice
+jaundiced
+jaundices
+jaundicing
+jaunt
+jaunt's
+jaunted
+jauntier
+jauntily
+jauntiness
+jaunting
+jaunts
+jaunty
+Java
+java
+Javanese
+javanese
+javari
+javelin
+javelin's
+javelins
+jaw
+jaw's
+jawan
+jawara
+jawbone
+jawbreak
+jawbreaker
+jawed
+jawline
+jaws
+jaxartes
+jay
+jayawardena
+jaybird
+Jaycee
+Jaycees
+jaywalk
+jazz
+jazzier
+jazzily
+jazziness
+jazzman
+jazzmen
+jazzy
+JCL
+jealous
+jealousies
+jealously
+jealousness
+jealousy
+jean
+jean's
+Jeanette
+Jeanie
+jeanne
+Jeanne
+Jeannie
+jeans
+jebel
+Jed
+Jed's
+jedda
+jeep
+jeep's
+jeepable
+jeeped
+jeepers
+jeeping
+jeeps
+jeer
+jeer's
+jeerer
+jeeringly
+jeers
+jefe
+Jeff
+Jefferson
+Jefferson's
+Jeffersonian
+Jeffersonians
+Jeffrey
+Jeffreys
+jehad
+jehol
+jehoshaphat
+Jehovah
+Jehovist
+jehu
+jejune
+jejunely
+jejuneness
+jejunum
+jekyll
+jell
+jellaba
+jelled
+jellicoe
+jellied
+jellies
+jellify
+jelling
+Jello
+jello
+jells
+jelly
+jelly's
+jellybean
+jellyfish
+jellying
+jellylike
+jemadar
+jemappes
+jembe
+Jemmy
+Jena
+Jenghis
+Jenkins
+Jenner
+Jennie
+Jennifer
+Jennings
+jenny
+Jensen
+Jensen's
+jeopard
+jeopardies
+jeopardization
+jeopardize
+jeopardized
+jeopardizes
+jeopardizing
+jeopardy
+Jephthah
+jequirity
+jerba
+jerbil
+jerboa
+Jeremiad
+Jeremiah
+Jeremy
+Jeres
+jerez
+Jericho
+jerid
+jerk
+jerked
+jerker
+jerkier
+jerkily
+jerkin
+jerkiness
+jerking
+jerkings
+jerks
+jerkwater
+jerky
+jeroboam
+Jerome
+jerreed
+jerry
+Jerry's
+Jersey
+jersey
+jersey's
+jerseys
+Jerusalem
+Jervis
+Jespersen
+jess
+Jesse
+Jesse's
+Jesselton
+Jessica
+Jessie
+jessy
+Jessy
+jest
+jested
+jester
+jesting
+jests
+Jesu
+Jesuit
+jesuitic
+jesuitical
+jesuitically
+Jesuitism
+Jesuitize
+Jesuitized
+Jesuitizes
+Jesuitizing
+jesuitry
+Jesuits
+Jesus
+jet
+jet's
+jetbead
+Jethro
+jetliner
+jetliners
+jetport
+jets
+jetsam
+jetted
+jettied
+jetties
+jetting
+jettison
+jettisonable
+Jetton
+jetty
+jettying
+jeunes
+jevons
+Jew
+jewel
+jeweled
+jeweler
+jeweleries
+jewelers
+jewelery
+jewelfish
+jeweling
+Jewell
+Jewell's
+Jewelled
+jewelries
+jewelry
+jewels
+Jewess
+Jewett
+Jewett's
+jewfish
+Jewish
+Jewishness
+Jewry
+Jews
+Jezebel
+Jezreel
+jhansi
+jhelum
+jib
+jibber
+jibbers
+jibbing
+jibbons
+jibboom
+jibe
+jibed
+jibes
+jibing
+jibouti
+jidda
+jiff
+jiffies
+jiffy
+jig
+jig's
+jigged
+jigger
+jiggered
+jiggermast
+jigging
+jiggle
+jiggled
+jiggles
+jigglier
+jiggling
+jiggly
+jigs
+jigsaw
+jihad
+Jill
+Jill's
+jillaroo
+jillion
+jilolo
+jilt
+jilted
+jilter
+jilts
+Jim
+Jim's
+Jimenez
+jimjams
+Jimmie
+jimmied
+jimmies
+jimmy
+Jimmy's
+jimmying
+jinghis
+jingle
+jingled
+jingler
+jingles
+jingling
+jingly
+jingo
+jingoes
+jingoish
+jingoism
+jingoist
+jingoistic
+jingoistically
+jinja
+jink
+jinks
+jinn
+jinnah
+jinni
+jinny
+Jinny
+jinx
+jipijapa
+jissom
+jitney
+jitneys
+jitter
+jitterbug
+jitterbugger
+jitterbugging
+jitters
+jittery
+jiujitsu
+jiujutsu
+jive
+jived
+jives
+jiving
+Jo
+Jo's
+Joab
+Joan
+Joanna
+Joanne
+Joanne's
+Joannes
+Joaquin
+job
+job's
+jobbed
+jobber
+jobbers
+jobbery
+jobbing
+jobcentre
+jobcentres
+jobholder
+jobholders
+jobless
+joblessness
+jobname
+jobrel
+Jobrel
+jobs
+Jocasta
+Jochum
+jock
+jockey
+jockeyed
+jockeying
+jockeys
+jocko
+jocks
+jockstrap
+jockstraps
+jocose
+jocosely
+jocoseness
+jocosity
+jocular
+jocularity
+jocularly
+jocund
+jocundity
+jocundly
+jodhpur
+jodhpuri
+jodhpurs
+Jodi
+Jodi's
+Jodo
+jodrell
+Jody
+Joe
+Joel
+Joes
+joey
+joffre
+jog
+jogged
+jogger
+joggers
+jogging
+joggle
+joggled
+joggler
+joggles
+joggling
+jogjakarta
+jogs
+Johann
+Johanna
+Johanna's
+Johannes
+Johannesburg
+Johansen
+Johanson
+john
+john's
+Johnnie
+Johnnie's
+Johnny
+Johnny's
+johns
+Johnsen
+Johnson
+Johnsonian
+Johnston
+Johnston's
+Johnstown
+johore
+join
+joinable
+joinder
+joined
+joiner
+joiners
+joinery
+joining
+joins
+joint
+joint's
+jointed
+jointedly
+jointedness
+jointer
+jointing
+jointly
+jointness
+jointress
+joints
+jointure
+jointured
+jointures
+jointuring
+jointworm
+Joinville
+joist
+joists
+joke
+joked
+joker
+jokers
+jokes
+joking
+jokingly
+jokjakarta
+Joliet
+Jolla
+Jolla's
+jollied
+jollier
+jollies
+jollification
+jollifications
+jollify
+jollities
+jollity
+jolly
+jollying
+jolo
+Jolson
+jolt
+jolted
+jolter
+jolting
+jolts
+jolty
+Jon
+Jon's
+Jonah
+Jonas
+Jonathan
+Jonathanization
+Jonathanization's
+Jonathanizations
+Jones
+Joneses
+jongleur
+jonnock
+jonquil
+jonquils
+Jonson
+jook
+Joplin
+joppa
+jordaens
+Jordan
+Jorge
+Jorgensen
+Jorgenson
+jorum
+jos
+Jose
+Josef
+Joseph
+Josephine
+Josephson
+Josephus
+josh
+joshed
+josher
+joshes
+joshing
+Joshua
+Josiah
+josquin
+joss
+jostle
+jostled
+jostles
+jostling
+jot
+jota
+jots
+jotted
+jotter
+jotting
+jotun
+Jotunheim
+joual
+joule
+jounce
+jounced
+jounces
+jouncier
+jouncing
+jouncy
+jour
+journal
+journal's
+journalese
+journaleses
+journalism
+journalist
+journalist's
+journalistic
+journalistically
+journalists
+journalization
+journalization's
+journalizations
+journalize
+journalized
+journalizer
+journalizers
+journalizes
+journalizing
+journalled
+journals
+journey
+journeyed
+journeying
+journeyings
+journeyman
+journeymen
+journeys
+journeywork
+joust
+jousted
+jouster
+jousting
+jousts
+Jovanovich
+Jove
+jovial
+joviality
+jovialize
+jovializes
+jovially
+Jovian
+jow
+jowett
+jowl
+jowled
+jowlier
+jowls
+jowly
+joy
+joy's
+joyance
+Joyce
+joyful
+joyfully
+joyfulness
+joyless
+joylessly
+joylessness
+joyous
+joyously
+joyousness
+joypop
+joyride
+joyrider
+joyriding
+joys
+joystick
+joysticks
+Jr
+Juan
+Juanita
+Juantorena
+juba
+Jubal
+jubbah
+Jubbulpore
+jube
+jubilant
+jubilantly
+jubilarian
+jubilate
+jubilated
+jubilates
+jubilating
+jubilation
+jubilations
+jubilee
+Judaea
+Judah
+Judaic
+Judaica
+Judaism
+Judas
+Judd
+Judd's
+Judder
+Juddered
+Juddering
+Judders
+Jude
+Judea
+judezmo
+judge
+judged
+judger
+judges
+judgeship
+judging
+judgmatic
+judgmatical
+judgmatically
+judgment
+judgment's
+judgmental
+judgments
+judicable
+judicative
+judicator
+judicatory
+judicature
+judicatures
+judicial
+judicialize
+judicializes
+judicially
+judiciaries
+judiciary
+judicious
+judiciously
+judiciousness
+Judith
+judo
+judogi
+judoist
+judoka
+Judson
+Judson's
+Judy
+jug
+jug's
+jugal
+jugate
+jugfet
+jugful
+jugged
+juggernaut
+juggernaut's
+juggernauted
+juggernauting
+juggernauts
+jugging
+juggins
+juggle
+juggled
+juggler
+jugglers
+jugglery
+juggles
+juggling
+juglandaceous
+Jugoslavia
+jugs
+jugular
+jugulate
+jugulum
+jugum
+jugurtha
+juice
+juice's
+juiced
+juiceless
+juicer
+juicers
+juices
+juicier
+juiciest
+juicily
+juiciness
+juicing
+juicy
+Juilliard
+juiz
+jujitsu
+juju
+jujube
+jujutsu
+juke
+jukebox
+jukes
+juking
+Jul
+julep
+juleps
+Jules
+Julia
+Julian
+Juliana
+Julie
+Julie's
+julienne
+Julies
+Juliet
+Julio
+Julius
+jullundur
+July
+July's
+Julys
+Jumada
+jumble
+jumbled
+jumbles
+jumbling
+jumbo
+jumbos
+jumbuck
+jumna
+jump
+jumped
+jumper
+jumpers
+jumpier
+jumpiness
+jumping
+jumps
+jumpy
+Jun
+juncaceous
+junco
+junction
+junction's
+junctional
+junctions
+junctor
+juncture
+juncture's
+junctures
+June
+June's
+Juneau
+Juneberry
+Junes
+Jung
+Jung's
+jungfrau
+Jungian
+jungian
+jungle
+jungle's
+jungled
+jungles
+jungly
+junior
+junior's
+juniors
+juniper
+Junius
+junk
+junker
+junkerdom
+junkers
+junket
+junketed
+junketeer
+junketeering
+junketer
+junketing
+junkets
+junkie
+junkies
+junkman
+junks
+junky
+junkyard
+Juno
+Junoesque
+junta
+junto
+juntos
+Jupiter
+jupon
+Jura
+Jura's
+jural
+jurally
+Juras
+jurassic
+jurat
+juratory
+jure
+jurel
+juridic
+juridical
+juridically
+juries
+jurisconsult
+jurisconsults
+jurisdiction
+jurisdiction's
+jurisdictional
+jurisdictionally
+jurisdictions
+jurisprudence
+jurisprudent
+jurisprudential
+jurisprudentially
+jurist
+juristic
+juristically
+jurists
+juror
+juror's
+jurors
+jury
+jury's
+juryman
+jus
+jussive
+jussives
+just
+juste
+juster
+justice
+justice's
+justices
+justiceship
+justiciability
+justiciable
+justiciar
+justiciary
+justifiability
+justifiable
+justifiably
+justification
+justifications
+justificative
+justificatory
+justified
+justifier
+justifier's
+justifiers
+justifies
+justify
+justifying
+Justine
+justing
+Justinian
+justle
+justly
+justment
+justness
+jut
+jute
+jutes
+Jutish
+Jutland
+Jutland's
+jutted
+juttied
+jutties
+jutting
+jutty
+juttying
+juvenal
+juvenescence
+juvenescent
+juvenile
+juvenile's
+juveniles
+juvenilia
+juvenility
+juvenilize
+juvenilizes
+juvenocracy
+juxtapose
+juxtaposed
+juxtaposes
+juxtaposing
+juxtaposition
+juxtapositional
+Jylland
+k's
+Kaaba
+Kabaka
+kabalega
+kabaragoya
+kabbala
+kabob
+kaboom
+Kabuki
+Kabul
+Kabyle
+kachang
+kachina
+Kaddish
+kadi
+kadiyevka
+kaduna
+Kaffir
+kaffirs
+Kaffraria
+Kafir
+kafiristan
+Kafka
+Kafkaesque
+kaftan
+kagera
+kagoshima
+kagu
+Kahn
+Kahn's
+kaiak
+kaieteur
+kaif
+kaifeng
+kail
+kailyard
+kain
+kainogenesis
+kairouan
+kaiser
+Kaiserslautern
+Kajar
+Kajar's
+kaka
+kakapo
+kakemono
+kaki
+Kalahari
+Kalamazoo
+kalat
+kale
+kaleidescope
+kaleidoscope
+kaleidoscoped
+kaleidoscopes
+kaleidoscopic
+kaleidoscopical
+kaleidoscopically
+kaleidoscoping
+kalends
+Kalevala
+kaleyard
+kalgan
+kalgoorlie
+kali
+kalian
+kalidasa
+kalif
+kalimantan
+kalinin
+kaliningrad
+kalisz
+kaliyuga
+kalmar
+kalmia
+Kalmuck
+Kalmuk
+Kalmuk's
+kalong
+kalpa
+kalpak
+kalsomine
+kaluga
+kama
+kamakura
+kamala
+kamasutra
+Kamchatka
+kame
+kamerun
+kamet
+kami
+Kamikaze
+kamikaze
+Kamikaze's
+Kamikazes
+Kampala
+Kampala's
+kampong
+kampuchea
+Kampuchea
+Kampuchea's
+kamseen
+Kamu
+kana
+Kanaka
+kanamycin
+kananga
+kanara
+Kanarese
+Kanawa
+kanazawa
+kanchenjunga
+kanchipuram
+kandahar
+Kandinsky
+kandy
+Kane
+Kane's
+kanga
+kangaroo
+kangaroos
+kangwane
+Kanji
+Kankakee
+Kannada
+kannada
+kano
+kanpur
+Kansas
+kansu
+Kant
+kantar
+kanu
+kanzu
+kaohsiung
+kaolack
+kaoliang
+kaolin
+kaolinite
+kaolinization
+kaolinization's
+kaolinizations
+kaolinize
+kaolinizes
+kaon
+kapellmeister
+Kapfenberg
+kaph
+Kaplan
+Kaplan's
+kapok
+kappa
+kaput
+karabiner
+Karachi
+Karachi's
+karafuto
+karaganda
+Karaite
+Karajan
+karakoram
+karakorum
+Karakul
+karamanlis
+Karamazov
+Karamazov's
+karat
+karate
+karateist
+karbala
+Karczykowski
+karelia
+Karelian
+Karen
+kariba
+Karl
+Karloff
+Karlovy
+Karlsbad
+Karlsruhe
+karma
+karmic
+Karnak
+karnataka
+Karol
+karoo
+kaross
+Karp
+Karp's
+Karpov
+Karri
+Karst
+kart
+karyatid
+karyogamy
+karyokinesis
+karyolymph
+karyolysis
+karyoplasm
+karyosome
+karyotin
+karyotype
+kasai
+kasbah
+Kasha
+kasher
+kashgar
+Kashmir
+kashmir
+Kashmiri
+Kaskaskia
+Kaspszyk
+kassa
+kassala
+kassel
+kat
+katabasis
+katabolism
+katakana
+katanga
+katar
+Kate
+kathak
+katharevusa
+Katharine
+Katharine's
+katharsis
+Katherine
+kathiawar
+Kathleen
+Kathy
+Katie
+Katie's
+katmai
+Katmandu
+Katowice
+Katowice's
+Katrina
+Katrina's
+Katrine
+katsina
+kattegat
+katydid
+Katz
+katzenjammer
+kauai
+Kauffman
+Kauffman's
+Kaufman
+Kaufman's
+kaunas
+kaunda
+kauri
+kava
+kaveri
+kawasaki
+Kay
+kayak
+kayaker
+kayaks
+kayo
+kayoed
+kayoing
+kayseri
+kazachok
+kazakh
+kazan
+kazantzakis
+kazbek
+kazoo
+kazoos
+kcal
+kea
+kean
+kearney
+Keaton
+Keats
+kebab
+kebabs
+keble
+kebob
+Keck
+keck
+Keck's
+ked
+kedah
+keddah
+kedge
+kedgeree
+kediri
+kedron
+keef
+Keegan
+keegan
+keel
+keelboat
+keeled
+keeler
+keelhaul
+keeling
+Keeling
+keelless
+keels
+keelson
+keelung
+keen
+Keenan
+keener
+keenest
+keening
+keenly
+keenness
+keep
+keeper
+keepers
+keeping
+keepnet
+keeps
+keepsake
+keepsakes
+keeshond
+Keewatin
+kef
+keffiyeh
+keg
+kegful
+kegler
+kegs
+kegsful
+Keighley
+Keijo
+keister
+keitel
+Keith
+keitloa
+kekkonen
+kelantan
+Keller
+Kelley
+Kellogg
+Kelly
+Kelly's
+keloid
+kelp
+kelpie
+Kelsey
+Kelsey's
+Kelson
+kelt
+kelter
+kelts
+Kelvin
+kemal
+kemble
+kemerovo
+Kemp
+kempe
+Kempff
+kempis
+kempt
+Ken
+ken
+Ken's
+kenaf
+kendal
+Kendall
+Kendall's
+kendo
+Kenilworth
+Kennan
+Kennan's
+Kennecott
+Kennedy
+kennel
+kennel's
+kenneled
+kenneling
+Kennelly
+kennels
+Kenneth
+Kenney
+Kenney's
+Kennington
+Kenny
+keno
+kenogenesis
+Kenosha
+kenosis
+Kensington
+kenspeckle
+Kent
+kente
+Kentish
+kentledge
+Kenton
+Kenton's
+Kentucky
+Kenya
+kenyatta
+Kenyon
+Kenyon's
+keos
+kep
+Kepler
+Kepler's
+kept
+kerala
+keramic
+keramics
+keratin
+keratinization
+keratinize
+keratinized
+keratinizes
+keratinizing
+keratitis
+keratogenous
+keratoid
+keratoplasty
+keratose
+keratosis
+kerb
+kerbaya
+kerbela
+kerbing
+kerbstone
+kerch
+kerchief
+kerchief's
+kerchiefed
+kerchiefs
+kerchieves
+Kerenski
+kerf
+kerguelen
+kerkrade
+kerman
+Kermanshah
+kermes
+kermis
+Kermit
+kermits
+kern
+kerne
+kernel
+kernel's
+kerneled
+kerneling
+kernels
+Kernighan
+Kernighan's
+kernite
+kero
+kerosene
+kerosine
+Kerouac
+kerouac
+Kerouac's
+Kerr
+Kerr's
+kerry
+kersey
+kerseymere
+Kertesz
+kerygma
+kesselring
+Kessler
+Kessler's
+kesteven
+kestrel
+Keswick
+ketch
+ketches
+ketchup
+ketene
+keto
+ketogenesis
+ketogenic
+ketone
+ketonic
+ketonization
+ketonization's
+ketonizations
+ketonize
+ketonizes
+ketonuria
+ketose
+ketosis
+ketosteroid
+ketotic
+ketoxime
+Kettering
+kettle
+kettle's
+kettledrum
+kettles
+kevel
+Kevin
+kew
+kewaskum
+Kewaskum
+kewaunee
+Kewaunee
+kewpie
+kex
+key
+keyboard
+keyboard's
+keyboarder
+keyboarding
+keyboards
+keybutton
+keyclick
+keyclick's
+keyclicks
+keyed
+Keyes
+keyhole
+keyholes
+keying
+keyless
+Keynes
+Keynesian
+Keynesianism
+keynote
+keynoter
+keynotes
+keypad
+keypad's
+keypads
+keypunch
+keypunched
+keypuncher
+keypunches
+keypunching
+keys
+keystone
+keystones
+keystroke
+keystroke's
+keystrokes
+keytop
+keytops
+keyway
+keyways
+keyword
+keyword's
+keywords
+KGB
+Khabarovsk
+Khachaturian
+Khaddar
+Khakass
+khaki
+Khakis
+Khalid
+Khalif
+Khalkha
+Khalkidiki
+Khama
+Khamsin
+khan
+Khanate
+Khanga
+Khania
+Kharif
+Kharkov
+Khartoum
+Khartoum's
+Khat
+Khayal
+Khedive
+Khelat
+Kherson
+Khieu
+Khingan
+Khirbet
+Khiva
+Khmer
+Khoikhoi
+Khoisan
+Khojent
+Khotan
+khrush
+Khrushchev
+Khrushchevs
+Khufu
+Khulna
+Khuskhus
+Khyber
+kHz
+Kiaat
+Kiang
+Kiangsi
+Kiangsu
+Kiaochow
+kibble
+kibbled
+kibbles
+kibbling
+kibbutz
+kibbutzim
+kibbutznik
+kibe
+Kibitka
+kibitz
+kibitzer
+Kiblah
+kibosh
+kick
+Kickapoo
+kickapoo
+kickback
+kickbacks
+kickdown
+kicked
+kicker
+kickers
+kicking
+kickoff
+kickoffs
+kicks
+kickshaw
+kickshaws
+kicksorter
+kickstand
+kicktail
+kickup
+kickups
+kid
+kid's
+kidd
+Kidde
+Kidde's
+kidded
+kidder
+Kidderminster
+kiddie
+kiddies
+kidding
+kiddingly
+kiddish
+kiddle
+kiddush
+kiddy
+kidless
+kidnap
+kidnap's
+kidnaped
+kidnaper
+kidnaper's
+kidnapers
+kidnaping
+kidnaping's
+kidnapings
+kidnaps
+kidney
+kidney's
+kidneys
+kidron
+kids
+kidskin
+kief
+Kieffer
+Kieffer's
+Kiel
+kiel
+kielbasa
+Kielce
+Kier
+Kierkegaard
+Kieselguhr
+Kiev
+Kiewit
+Kiewit's
+Kif
+Kigali
+Kigali's
+kike
+Kikoi
+Kikumon
+Kikuyu
+Kikuyu's
+Kilauea
+Kildare
+Kilderkin
+Kilgore
+Kilgore's
+Kilimanjaro
+Kilimanjaro's
+Kilkenny
+kill
+killable
+Killarney
+killdeer
+Killebrew
+killebrew
+killed
+killer
+killers
+Killick
+Killiecrankie
+Killifish
+Killikinick
+killing
+killingly
+killings
+killjoy
+kills
+Kilmarnock
+kiln
+kilo
+kilobar
+kilobaud
+kilobit
+kilobits
+kilobuck
+kilobyte
+kilobytes
+kilocalorie
+kilocalories
+kilocurie
+kilocycle
+kilocycles
+kilogauss
+kilogram
+kilogram's
+kilograms
+kilohertz
+kilohm
+kilojoule
+kiloliter
+kiloliter's
+kiloliters
+kilometer
+kilometer's
+kilometers
+kilooersted
+kiloparsec
+kilorad
+kilos
+kiloton
+kilotons
+kilovolt
+kilovolts
+kilowatt
+kilowatts
+kiloword
+kilt
+kilter
+kilts
+kilung
+Kim
+Kimball
+Kimball's
+kimberley
+kimberlite
+Kimberly
+Kimberly's
+kimono
+kin
+kina
+kinabalu
+kinase
+kincardine
+kinchinjunga
+kincob
+kind
+kinder
+kindergarten
+kindergartner
+kindest
+kindhearted
+kindheartedly
+kindheartedness
+kindle
+kindled
+kindler
+kindles
+kindless
+kindlessly
+kindlier
+kindliness
+kindling
+kindly
+kindness
+kindnesses
+kindred
+kinds
+kine
+kinematic
+kinematical
+kinematically
+kinematics
+kinematograph
+kinescope
+kinescoped
+kinescopes
+kineses
+kinesic
+kinesics
+kinesiology
+kinesis
+kinesthesia
+kinesthesis
+kinesthetic
+kinesthetically
+kinesthetics
+kinetic
+kineticist
+kinetics
+kinetin
+kinetochore
+kinetonucleus
+kinetoplast
+kinetoplastic
+kinetoscope
+kinetosome
+kinfolk
+kinfolks
+King
+king
+kingbird
+kingbolt
+kingcraft
+kingcup
+kingdom
+Kingdom
+kingdom's
+kingdoms
+kingfish
+kingfisher
+kinglet
+kinglier
+kingliness
+kingly
+kingmaker
+Kingman
+kingpin
+kings
+Kingsbury
+kingship
+kingside
+Kingsley
+Kingston
+Kingstown
+kingwana
+Kingwood
+kingwood
+kinin
+kink
+kinkajou
+kinkajou's
+kinkier
+kinkiness
+kinky
+Kinney
+Kinney's
+Kinnickinnic
+kinnickinnic
+Kinnock
+kino
+Kinross
+kinsey
+Kinsey
+kinsfolk
+Kinshasa
+Kinshasha
+Kinshasha's
+kinship
+kinsman
+kinsmen
+kinsmen's
+kinswoman
+kiosk
+kiosks
+kioto
+Kiowa
+kip
+Kipling
+kipper
+kippered
+kippering
+kippers
+kips
+Kirby
+Kirchhoff
+Kirchner
+Kirchner's
+Kirchoff
+Kirghiz
+Kiribati
+Kirigami
+Kirin
+kirk
+Kirk
+Kirk's
+Kirkby
+Kirkcaldy
+Kirkcudbright
+Kirkland
+Kirkman
+Kirkpatrick
+Kirkuk
+Kirkwall
+kirkwood
+Kirkwood
+Kirman
+Kirmess
+Kirov
+Kirov's
+Kirovabad
+Kirovograd
+kirsch
+Kirshbaum
+kirtle
+Kiruna
+Kirundi
+Kisangani
+Kish
+Kishinev
+Kishke
+Kismayu
+kismet
+kiss
+kissable
+kissed
+Kissel
+kisser
+kissers
+kisses
+Kissin
+kissing
+Kissinger
+kissings
+Kist
+Kistna
+Kisumu
+kit
+kit's
+Kitakyushu
+Kitakyushu's
+kitbag
+kitbags
+kitchen
+kitchen's
+kitchener
+kitchenette
+kitchenettes
+kitchenless
+kitchens
+kitchenware
+kitchenwares
+kite
+kited
+kitenge
+kiter
+kites
+kith
+kithara
+kithe
+kithing
+kiting
+kits
+kitsch
+kitschy
+kitten
+kitten's
+kittened
+kittening
+kittenish
+kittenishly
+kittenishness
+kittens
+kitties
+kittiwake
+kittle
+kittled
+kittler
+kittles
+kittling
+Kitts
+kitty
+kitwe
+kiushu
+kiva
+kivu
+Kiwanis
+kiwi
+kiwi's
+kiwis
+kiz
+Kizil
+kizzie
+Klagenfurt
+klaipeda
+Klan
+Klangfarbe
+Klansman
+klatch
+klatsch
+klauber
+Klaus
+Klausenburg
+klaxon
+Klee
+kleenex
+Kleiber
+Klein
+Klein's
+Kleinrock
+Kleinrock's
+Kleist
+Klemperer
+klepht
+kleptomania
+kleptomaniac
+klieg
+Klimt
+Kline
+kline
+Kline's
+Klipspringer
+Klondike
+klong
+klootchman
+klopstock
+kludge
+kludge's
+kludged
+kludger
+kludger's
+kludgers
+kludges
+kludgey
+kludging
+klutz
+klutz's
+klutzes
+klutziness
+klutzy
+Klux
+klystron
+klystrons
+km
+knack
+knacker
+knackery
+knacks
+knackwurst
+knag
+knap
+Knapp
+Knapp's
+knapsack
+knapsack's
+knapsacks
+knar
+Knauer
+Knauer's
+knave
+knave's
+knavery
+knaves
+knavish
+knavishly
+knawel
+knead
+kneadable
+kneaded
+kneader
+kneading
+kneads
+knee
+kneecap
+kneecaps
+kneed
+kneehole
+kneeholes
+kneeing
+kneel
+kneeled
+kneeler
+kneeling
+kneels
+kneepad
+kneepads
+knees
+knell
+knell's
+Kneller
+knells
+knelt
+Knesset
+knew
+knick
+knicker
+knickerbocker
+knickers
+knickknack
+knickpoint
+knife
+knifed
+knifelike
+kniferest
+knifes
+knifing
+knight
+knighted
+Knighthead
+knighthood
+knighting
+knightliness
+knightly
+knights
+Knightsbridge
+Knightsbridge's
+Kniplova
+knish
+knit
+knits
+knitted
+knitter
+knitting
+knitwear
+knives
+knob
+knob's
+knobbed
+knobby
+Knobeloch
+knobeloch
+Knobkerrie
+knobs
+knock
+knockabout
+knockabouts
+knockdown
+knockdowns
+knocked
+knocker
+knockers
+knocking
+knockout
+knockouts
+knocks
+knockwurst
+knoll
+knoll's
+knolls
+knop
+Knossos
+knossos
+knot
+knot's
+knotgrass
+knothole
+knots
+Knott
+Knott's
+knotted
+knotter
+knottier
+knottiness
+knotting
+knotty
+knotweed
+knotwork
+knout
+know
+knowable
+knower
+knoweth
+knowhow
+knowily
+knowing
+knowingly
+knowledge
+knowledgeability
+knowledgeable
+knowledgeableness
+knowledgeably
+knowledges
+Knowles
+Knowlton
+Knowlton's
+known
+knows
+Knox
+Knoxville
+knuckle
+knuckleball
+knuckleballer
+knucklebone
+knucklebones
+knuckled
+knucklehead
+knuckleheaded
+knuckles
+knuckling
+Knudsen
+Knudson
+knurl
+knurly
+Knussen
+Knuth
+Knuth's
+Knutsen
+Knutson
+koa
+koala
+koan
+kob
+kobarid
+Kobayashi
+kobe
+Koblenz
+kobold
+Koch
+Kochab
+Kochab's
+kochi
+Kodachrome
+Kodak
+Kodaks
+Kodaly
+Kodiak
+kodok
+koel
+Koenig
+Koenigsberg
+Koestler
+kofta
+koftgar
+kofu
+Koheleth
+Kohima
+Kohl
+Kohler
+kohlrabi
+Kohn
+Kohoutek
+koine
+koinonia
+Kokand
+Kokanee
+Kokobeh
+Kokoschka
+kokura
+kola
+kolar
+kolding
+Kolhapur
+Kolinsky
+kolkhoz
+Kollo
+Kollwitz
+Kolmar
+Kolmogorov
+Kolo
+Kolomna
+Kolyma
+Komati
+Komatik
+kombu
+Komi
+Kommunarsk
+Kommunizma
+Komodo
+Komsomol
+Komsomolsk
+Konakry
+Kondo
+Kondrashin
+Kong
+konga
+koniology
+Konrad
+konrad
+Konrad's
+Konstanz
+konya
+koodoo
+kook
+kookaburra
+kookie
+kookier
+kookiness
+kooks
+kooky
+kooning
+Kootenay
+kopeck
+Kopeisk
+kopek
+koph
+Kopje
+Koppa
+Koppers
+Koran
+Koran's
+Korbut
+Korchnoi
+Kordofan
+Kordofanian
+Korea
+Korean
+Koreans
+korfball
+Korma
+Korngold
+Korsakov
+Kortrijk
+Koruna
+Korzybski
+Kos
+Kosciusko
+kosher
+koshered
+koshering
+Kossuth
+Kostroma
+Kosygin
+Kota
+Kotabaru
+koto
+Koulibiaca
+Koumis
+Kovacs
+Kovic
+Kovic's
+Kovno
+Kovrov
+Kowalewski
+Kowalewski's
+Kowalski
+Kowalski's
+Koweit
+Kowhai
+Kowloon
+kowtow
+Kozhikode
+kpc
+Kra
+Kraal
+Kraemer
+kraemer
+kraft
+Kragujevac
+Krait
+Krakatoa
+Krakau
+kraken
+Krakow
+Kramatorsk
+Kramer
+Krameria
+Kranj
+Krans
+Krasnodar
+Krasnoyarsk
+Krause
+kraut
+krauts
+Krebs
+Krefeld
+Kreisky
+Kreisler
+Kremenchug
+Kremer
+Kremlin
+kremlinologist
+kremlinology
+Krems
+Kreplach
+Kresge
+kretchmer
+Kreutzer
+Krieger
+Krieger's
+Kriegspiel
+Kriemhild
+krill
+Krimmer
+Krio
+Krips
+Kris
+Krishna
+Kriss
+Kristiansand
+Kristianstad
+Kristin
+Kristin's
+Kristina
+Krivoy
+Kromesky
+Krone
+Kronecker
+Kronecker's
+Kronig
+Kronos
+Kroon
+Kropotkin
+Krueger
+Kruger
+Krugersdorp
+Kruller
+krummholz
+Krummhorn
+Krupp
+Kruse
+Kruse's
+Kruysen
+Krym
+krypton
+KS
+Kshatriya
+Kuala
+Kuban
+Kubelik
+Kublai
+Kubrick
+Kuch
+Kuchen
+Kuching
+kudo
+kudos
+kudu
+kudzu
+Kueh
+Kuenlun
+Kuenning
+Kuenning's
+Kufic
+Kuhn
+Kuhn's
+Kuibyshev
+Kukri
+Kuku
+Kula
+kulak
+kultur
+Kulturkampf
+Kulun
+Kum
+Kumamoto
+Kumar
+Kumasi
+Kumbaloi
+kumquat
+Kung
+Kungur
+Kunming
+Kunzite
+Kuomintang
+Kuopio
+Kura
+kurchatovium
+Kurd
+kurdish
+Kurdish
+Kurgan
+Kuril
+Kurland
+Kurosawa
+Kuroshio
+Kurrajong
+Kursaal
+Kursk
+Kurt
+kurtosis
+Kurzeme
+Kuskokwim
+Kutaisi
+Kutch
+Kutuzov
+Kuwait
+Kuznetsk
+Kwa
+Kwacha
+Kwajalein
+Kwakiutl
+Kwangchow
+Kwangchowan
+Kwangju
+Kwangtung
+Kwantung
+Kwanza
+Kwara
+kwashiorkor
+Kwazulu
+Kweichow
+Kweilin
+Kweisui
+Kweiyang
+Kwela
+KWIC
+KWOC
+KY
+kyanite
+kyanize
+kyanized
+kyanizes
+kyanizing
+Kyle
+kylin
+kylix
+kyloe
+kymograph
+kymric
+kymry
+Kynewulf
+Kyongsong
+Kyoto
+kyphosis
+Kyprianou
+Kyrie
+kythera
+Kyushu
+l's
+L'vov
+la
+La
+Laager
+Laaland
+lab
+lab's
+Laban
+Laban's
+labarum
+labdanum
+labe
+labefaction
+label
+label's
+labelable
+labeled
+labeler
+labeler's
+labelers
+labeling
+labellate
+labellum
+labels
+labia
+labial
+labialization
+labialization's
+labializations
+labialize
+labialized
+labializes
+labializing
+labially
+labiate
+labiche
+labile
+lability
+labilization
+labilization's
+labilizations
+labilize
+labilizes
+labiodental
+labionasal
+labiovelar
+labium
+lablab
+labor
+laborabilities
+laborability
+laborability's
+laborable
+laborable's
+laborables
+laboratories
+laboratory
+laboratory's
+labored
+labored's
+laboredly
+laboredness
+laborer
+laborer's
+laborers
+laborhood
+laborhood's
+laborhoods
+laboring
+laboring's
+laboringly
+laborings
+laborious
+laboriously
+laboriousness
+laborism
+laborism's
+laborisms
+laborist
+laborist's
+laborists
+laborite
+laborite's
+laborites
+laborless
+laborlesses
+labors
+laborsaving
+labour's
+Labrador
+labradorite
+labret
+labroid
+labrum
+labs
+labuan
+Laburnum
+labyrinth
+labyrinthian
+labyrinthine
+labyrinthodont
+labyrinths
+laccolith
+lace
+laced
+lacedaemon
+Lacedaemonian
+laceless
+lacelike
+lacemaker
+lacer
+lacerant
+lacerate
+lacerated
+lacerates
+lacerating
+laceration
+lacerations
+lacerative
+Lacerta
+Lacerta's
+lacertilian
+laces
+lacewing
+lacework
+Lacey
+lacey
+laches
+Lachesis
+lachlan
+lachryma
+lachrymal
+lachrymator
+lachrymatory
+lachrymose
+lachrymosely
+lacier
+lacing
+laciniate
+laciniated
+laciniation
+lack
+lackadaisic
+lackadaisical
+lackadaisically
+lackaday
+Lackawanna
+lacked
+lacker
+lackey
+lackeyed
+lackeying
+lackeys
+lacking
+lackluster
+lacks
+laclos
+laconia
+laconic
+laconically
+laconics
+laconism
+laconisms
+laconize
+laconized
+laconizes
+laconizing
+lacquer
+lacquered
+lacquerer
+lacquerers
+lacquering
+lacquers
+lacrimal
+lacrimation
+lacrimator
+lacrosse
+lacrosses
+lactalbumin
+lactam
+lactary
+lactase
+lactate
+lactated
+lactates
+lactating
+lactation
+lactational
+lactationally
+lacteal
+lactescent
+lactic
+lactiferous
+lactiferousness
+Lactobacillus
+lactobionamide
+lactobionamides
+lactobionic
+lactobionyl
+lactoflavin
+lactogenic
+lactoglobulin
+lactometer
+lactone
+lactonic
+lactonized
+lactophenol
+lactoprotein
+lactoscope
+lactose
+lacuna
+lacunae
+lacunal
+lacunar
+lacunaria
+lacunary
+lacunas
+lacunate
+lacustrine
+lacy
+lad
+ladanum
+ladder
+ladders
+laddie
+lade
+laded
+laden
+ladened
+ladening
+ladies
+Ladin
+lading
+Ladino
+ladislaus
+ladle
+ladled
+ladles
+ladling
+ladoga
+ladrone
+lads
+lady
+lady's
+ladybird
+ladybird's
+ladybirds
+ladybug
+ladybug's
+ladybugs
+ladyfern
+ladyfinger
+ladyfy
+ladykin
+ladylike
+ladylove
+ladyship
+ladysmith
+ladysnow
+laertes
+laevogyrate
+laevorotatory
+laevulin
+laevulose
+Lafayette
+laforgue
+lag
+lagan
+lage
+lagena
+lager
+lagerkvist
+lagers
+laggard
+laggardly
+laggardness
+laggards
+lagged
+lagger
+lagging
+lagniappe
+lagomorph
+lagomorphic
+lagomorphous
+lagoon
+lagoon's
+lagoonal
+lagoons
+Lagos
+Lagrange
+Lagrangian
+Lagrangian's
+lags
+Lagting
+Laguerre
+laguna
+Laguna
+lah
+Lahnda
+Lahore
+Lahore's
+Lahti
+Laibach
+laic
+laical
+laically
+laicism
+laicization
+laicizations
+laicize
+laicized
+laicizes
+laicizing
+laid
+Laidlaw
+Laidlaw's
+laik
+lain
+laing
+lair
+lair's
+laird
+lairdly
+lairs
+lairy
+laissez
+laitance
+laitances
+laity
+laius
+lake
+lake's
+lakefront
+Lakehurst
+Lakeland
+laker
+Lakes
+lakes
+lakeshore
+lakeside
+Lakewood
+lakewood
+lakh
+laking
+Laksa
+Lakshadweep
+laky
+lala
+lalang
+lalapalooza
+lallans
+lallation
+lallygag
+lallygagged
+Lalo
+lam
+lama
+Lamaism
+Lamar
+Lamar's
+Lamarck
+Lamarckian
+Lamarckism
+lamartine
+lamas
+lamasery
+lamb
+lamb's
+lambast
+lambaste
+lambda
+lambda's
+lambdacism
+lambdas
+lambdoid
+lambency
+lambent
+lambently
+lamber
+lambert
+lambertian
+lambeth
+lambkill
+lambkin
+Lamborghini
+Lamborghini's
+Lamborghinis
+lambrequin
+lambs
+lambskin
+lame
+lamebrain
+lamebrained
+lamed
+lamella
+lamellae
+lamellar
+lamellarly
+lamellas
+lamellate
+lamellately
+lamellation
+lamellicorn
+lamelliform
+lamellirostral
+lamely
+lameness
+lament
+lamentable
+lamentableness
+lamentably
+lamentation
+lamentation's
+lamentations
+lamented
+lamenting
+laments
+lamer
+lames
+lamest
+lametedly
+lamia
+lamina
+laminal
+laminar
+laminaria
+laminarian
+laminarin
+laminate
+laminated
+laminates
+laminating
+lamination
+laminations
+laminator
+laming
+Lamington
+laminin
+laminitis
+Lammas
+Lammastide
+lammed
+lammergeier
+lamming
+lamp
+lamp's
+lampas
+lampblack
+lampedusa
+lamper
+lampern
+lampeter
+lampholder
+lampion
+lamplight
+lamplighter
+lampoon
+lampooned
+lampooner
+lampoonery
+lampooning
+lampoons
+Lamport
+Lamport's
+lamppost
+lampposts
+lamprey
+lampreys
+lamprophyre
+lamps
+lampshade
+lampshades
+lamster
+Lana
+Lana's
+lanai
+lanark
+lanate
+Lancashire
+Lancaster
+Lancastrian
+lance
+lanced
+lancejack
+lancelet
+lancelot
+Lancelot
+Lancelot's
+lanceolate
+lanceolately
+lancer
+lancers
+lances
+lancet
+lanceted
+lancewood
+lanchow
+lancinate
+lancinated
+lancinates
+lancinating
+lancination
+lancinations
+lancing
+land
+landammann
+Landau
+landau
+landaulet
+landed
+lander
+landers
+landes
+landeshauptmann
+landfall
+landfill
+landform
+landgrave
+landgraviate
+landgravine
+landhold
+landholder
+landholders
+landholding
+landholdings
+landing
+landings
+Landis
+landladies
+landlady
+landlady's
+landless
+landlocked
+landloper
+landlord
+landlord's
+landlordism
+landlords
+landlubber
+landlubberly
+landmark
+landmark's
+landmarks
+landmass
+landmasses
+landor
+landowner
+landowner's
+landowners
+landownership
+landowning
+landowska
+landrace
+lands
+landscape
+landscaped
+landscaper
+landscapes
+landscaping
+landscapist
+landscapists
+landseer
+landshark
+landshut
+landside
+landsknecht
+landslide
+landslides
+landslip
+landslips
+landsman
+landtag
+landwaiter
+landward
+landwards
+Landwehr
+lane
+lane's
+lanes
+lanesmanship
+lanfranc
+Lang
+Lang's
+Lange
+Langeland
+langeland
+Langford
+Langland
+langlauf
+Langley
+Langmuir
+Langmuir's
+Langobard
+Langobardic
+langouste
+langrage
+langres
+Langridge
+langsyne
+Langton
+Langtry
+language
+language's
+languages
+langue
+languedoc
+languet
+languid
+languidly
+languidness
+languish
+languished
+languisher
+languishes
+languishing
+languishingly
+languishment
+languor
+languorous
+languorously
+langur
+laniard
+laniary
+laniferous
+lank
+Lanka
+Lanka's
+lankester
+lankier
+lankily
+lankiness
+lankly
+lankness
+lanky
+lanner
+lanneret
+lanolin
+lanose
+Lansing
+lansquenet
+Lantana
+lantern
+lantern's
+lanterns
+lanthanide
+lanthanum
+lanthorn
+lanuginous
+lanuginousness
+lanugo
+lanyard
+Lao
+laoag
+Laocoon
+laodicea
+laodicean
+laomedon
+Laos
+Laotian
+Laotians
+laotze
+lap
+lap's
+laparotomy
+lapboard
+lapdog
+lapel
+lapel's
+lapeled
+lapels
+lapful
+lapidarian
+lapidary
+lapidate
+lapidify
+lapillus
+lapis
+Lapith
+Laplace
+Laplacian
+Lapland
+Lapp
+lapped
+lapper
+lappet
+lapping
+laps
+lapse
+lapsed
+lapser
+lapses
+lapsing
+lapstrake
+lapstreak
+lapsus
+laptev
+laptop
+laptop's
+laptops
+lapwing
+Lar
+Laramie
+larcener
+larcenist
+larcenous
+larcenously
+larceny
+larch
+lard
+larded
+larder
+larding
+lardon
+lards
+lardy
+Laredo
+lares
+large
+largehearted
+largely
+largemouth
+largen
+largeness
+larger
+largess
+largesse
+largest
+larghetto
+largish
+largo
+largos
+lariat
+larine
+larisa
+lark
+lark's
+larker
+larkier
+Larkin
+Larkin's
+larks
+larkspur
+larky
+larmor
+larn
+larnax
+larousse
+larrigan
+larrikin
+larrup
+Larry
+Larry's
+Lars
+Larsen
+Larson
+larum
+larva
+larvae
+larval
+larvas
+larvicidal
+larvicide
+larwood
+laryngeal
+laryngeally
+larynges
+laryngitis
+laryngology
+laryngoscope
+laryngoscopic
+laryngotomy
+larynx
+larynxes
+las
+lasagna
+lasagne
+lascar
+lascaux
+lascivious
+lasciviously
+lasciviousness
+lase
+laser
+laser's
+lasers
+lash
+lashed
+lasher
+lashes
+lashing
+lashings
+lashio
+lashkar
+lasing
+lasker
+lasket
+Laski
+lass
+lass's
+lassa
+lassalle
+Lassen
+lasses
+lassie
+lassies
+lassitude
+lassitudes
+lasso
+lassoed
+lassoer
+lassoes
+lassus
+last
+lasted
+laster
+lasting
+lastingly
+lastingness
+lastly
+lasts
+Laszlo
+Laszlo's
+lat
+Latakia
+latch
+latched
+latches
+latchet
+latching
+latchkey
+latchstring
+late
+latecomer
+latecomers
+lated
+lateen
+lateener
+lateiner
+lately
+latencies
+latency
+latency's
+latened
+lateness
+latening
+latensification
+latensifications
+latensified
+latensifies
+latensify
+latent
+latentize
+latentizes
+latently
+latents
+later
+latera
+lateral
+lateralization
+lateralization's
+lateralizations
+lateralize
+lateralizes
+laterally
+Lateran
+Lateran's
+laterite
+laterization
+laterization's
+laterizations
+lateroversion
+latest
+LaTeX
+latex
+LaTeX's
+latex's
+latexes
+lath
+lathe
+lather
+lathered
+latherer
+lathering
+lathery
+lathes
+lathi
+lathing
+Lathrop
+lathy
+latices
+laticiferous
+latifundium
+latimer
+Latimeria
+Latin
+Latin's
+Latina
+Latinate
+Latinism
+Latinist
+Latinity
+Latinization
+Latinization's
+Latinizations
+Latinize
+Latinized
+Latinizer
+Latinizers
+Latinizes
+Latinizing
+Latino
+latish
+latitude
+latitude's
+latitudes
+latitudinal
+latitudinally
+latitudinarian
+latitudinarianism
+latitudinary
+latium
+Latona
+Latour
+latria
+latrine
+latrine's
+latrines
+Latrobe
+Latrobe's
+latten
+latter
+latter's
+latterly
+lattermost
+lattice
+lattice's
+latticed
+lattices
+latticework
+latticing
+lattimer
+Lattimer
+latus
+Latvia
+Latvia's
+Latvian
+laud
+lauda
+laudability
+laudable
+laudableness
+laudably
+laudanum
+laudation
+laudations
+laudative
+laudatorily
+laudatory
+lauder
+Lauderdale
+Laudian
+lauds
+Laue
+Laue's
+laugh
+laughable
+laughableness
+laughably
+laughed
+laugher
+laughers
+laughing
+laughingly
+laughingstock
+laughingstocks
+Laughlin
+Laughlin's
+laughs
+laughter
+laughterful
+laughters
+Laughton
+Launce
+Launceston
+launch
+launched
+launcher
+launchers
+launches
+launching
+launchings
+launder
+launderability
+laundered
+launderer
+launderette
+launderettes
+laundering
+launderings
+launders
+laundress
+laundresses
+laundries
+Laundromat
+Laundromats
+laundry
+laundryman
+laundrymen
+laundrywoman
+laura
+Laura's
+lauraceous
+laurasia
+laurate
+laureate
+laureated
+laureates
+laureateship
+laureating
+laureation
+laurel
+laurel's
+laureled
+laureling
+laurels
+Lauren
+Laurence
+Laurent
+Laurent's
+Laurentian
+lauric
+Laurie
+Laurie's
+laurier
+laurustinus
+lauryl
+Lausanne
+Lausanne's
+lautrec
+lav
+lava
+lavabo
+lavage
+lavaged
+laval
+lavalava
+lavaliere
+lavalike
+lavallade
+lavalliere
+lavation
+lavational
+lavato
+lavatories
+lavatory
+lavatory's
+lave
+laveer
+lavender
+lavendered
+lavendering
+laver
+laverock
+laving
+lavish
+lavished
+lavishing
+lavishly
+lavishness
+Lavoisier
+Lavoisier's
+lavolta
+law
+law's
+lawbreak
+lawbreaker
+lawbreakers
+lawbreaking
+lawes
+Lawford
+lawful
+lawfully
+lawfulness
+lawgive
+lawgiver
+lawgivers
+lawgiving
+lawks
+Lawless
+lawless
+lawlessly
+lawlessness
+lawmake
+lawmaker
+lawmakers
+lawmaking
+lawman
+lawmen
+lawn
+lawn's
+lawns
+lawny
+Lawrence
+Lawrenceville
+lawrencium
+Lawrentian
+laws
+Lawson
+lawsuit
+lawsuit's
+lawsuits
+lawyer
+lawyer's
+lawyerly
+lawyers
+lax
+laxation
+laxative
+laxatively
+laxativeness
+laxatives
+laxey
+laxity
+laxly
+laxness
+lay
+layabout
+layabouts
+layamon
+layard
+layaway
+laycock
+layer
+layerage
+layered
+layering
+layers
+layette
+laying
+layman
+laymen
+layoff
+layoffs
+layout
+layout's
+layouts
+layover
+layovers
+laypeople
+layperson
+lays
+layshaft
+Layton
+Layton's
+layup
+layup's
+layups
+laywoman
+laywomen
+Lazar
+lazaretto
+Lazarus
+laze
+lazed
+lazes
+lazied
+lazier
+laziest
+lazily
+laziness
+lazing
+lazio
+lazuli
+lazulite
+lazurite
+lazy
+lazybones
+lazying
+lazyish
+lb
+lbs
+LDL
+lea
+leach
+leachable
+leachate
+leaches
+leaching
+Leacock
+lead
+leadbelly
+leaded
+leaden
+leadenly
+leadenness
+leader
+leader's
+leaderless
+leaders
+leadership
+leadership's
+leaderships
+leadeth
+leadier
+leading
+leadings
+leadless
+leadoff
+leads
+leadsman
+leadsmen
+leadwork
+leadwort
+leady
+leaf
+Leaf
+leafage
+leafcutter
+leafed
+leafhopper
+leafier
+leafiest
+leafing
+leafless
+leaflet
+leaflet's
+leaflets
+leafletting
+leaflike
+leafs
+leafstalk
+leafstalks
+leafy
+league
+leagued
+leaguer
+leaguers
+leagues
+leaguing
+Leah
+leak
+leakage
+leakage's
+leakages
+leaked
+leaker
+leakey
+leakier
+leakily
+leakiness
+leaking
+leaks
+leaky
+leal
+Leamington
+lean
+Leander
+Leander's
+leaned
+leaner
+leanest
+leaning
+leanings
+leanly
+leanness
+leans
+leant
+leap
+leaped
+leaper
+leapfrog
+leapfrogged
+leapfrogging
+leaping
+leaps
+leapt
+Lear
+learn
+learnable
+learned
+learnedly
+learnedness
+learner
+learners
+learning
+learnings
+learns
+leary
+Leary
+lease
+leaseback
+leased
+leasehold
+leaseholder
+leases
+leash
+leash's
+leashes
+leasing
+least
+leastways
+leastwise
+leasure
+leat
+leather
+leatherback
+leathered
+Leatherette
+leatherhead
+leathering
+leatherize
+leatherizes
+leatherjacket
+leatherlike
+leathern
+leatherneck
+leathers
+leatherwood
+leatherwork
+leathery
+leave
+leaved
+leaven
+leavened
+leavening
+Leavenworth
+leaver
+leavers
+leaves
+leaving
+leavings
+leavis
+Lebanese
+Lebanon
+leben
+lebensraum
+Lebesgue
+lebkuchen
+leblanc
+lebowa
+lebrun
+lecce
+lech
+lecher
+lecherous
+lecherously
+lecherousness
+lechery
+lecithin
+lecithinase
+lecky
+leconte
+lectern
+lectern's
+lecterns
+lectin
+lectin's
+lectins
+lection
+lectionary
+lector
+lecture
+lectured
+lecturer
+lecturers
+lectures
+lectureship
+lecturing
+lecythus
+led
+LED's
+Leda
+lederhosen
+ledge
+ledger
+ledgers
+ledges
+ledgy
+LEDs
+lee
+Lee's
+leeboard
+leech
+leech's
+leeches
+leeds
+leek
+leer
+leered
+leering
+leers
+leery
+lees
+leet
+leeuwarden
+Leeuwenhoek
+Leeuwenhoek's
+leeward
+leewards
+leeway
+Lefkowitz
+left
+lefthand
+lefthanded
+lefties
+leftism
+leftist
+leftist's
+leftists
+leftmost
+leftover
+leftover's
+leftovers
+lefts
+leftward
+leftwards
+leftwing
+leftwinger
+leftwingers
+lefty
+leg
+legacies
+legacy
+legacy's
+legal
+legalese
+legalism
+legalist
+legalistic
+legalistically
+legalities
+legality
+legalization
+legalization's
+legalizations
+legalize
+legalized
+legalizes
+legalizing
+legally
+legals
+legaspi
+legate
+legated
+legatee
+legates
+legateship
+legatine
+legating
+legation
+legations
+legato
+legator
+legend
+legend's
+legendarily
+legendary
+Legendre
+Legendre's
+legendry
+legends
+legerdemain
+legerity
+leges
+legged
+leggier
+legging
+leggings
+leggy
+leghorn
+legibility
+legible
+legibly
+legion
+legion's
+legionary
+legionnaire
+legionnaires
+legions
+legis
+legislate
+legislated
+legislates
+legislating
+legislation
+legislations
+legislative
+legislatively
+legislator
+legislator's
+legislatorial
+legislators
+legislatorship
+legislatress
+legislatrix
+legislature
+legislature's
+legislatures
+legist
+legit
+legitimacy
+legitimate
+legitimated
+legitimately
+legitimates
+legitimating
+legitimation
+legitimatize
+legitimatized
+legitimatizes
+legitimatizing
+legitimism
+legitimist
+legitimization
+legitimization's
+legitimizations
+legitimize
+legitimized
+legitimizer
+legitimizes
+legitimizing
+legless
+legman
+legnica
+legroom
+legs
+legume
+legumes
+legumin
+leguminous
+legwork
+Lehigh
+Lehman
+Lehman's
+lehmann
+lehmbruck
+lehr
+lei
+Leibnitz
+Leibniz
+Leicester
+Leicestershire
+Leichhardt
+Leiden
+Leif
+Leigh
+Leighton
+Leila
+Leinsdorf
+Leinster
+Leipzig
+Leipzig's
+leiria
+Leishmania
+leishmaniasis
+leister
+leisure
+leisured
+leisureliness
+leisurely
+leith
+leitmotif
+leitmotiv
+Leitner
+leitrim
+leix
+lek
+lekker
+Leland
+Leland's
+lely
+leman
+Lemberg
+lemke
+Lemke
+lemma
+lemma's
+lemmas
+Lemmens
+lemming
+lemmings
+lemniscate
+lemnos
+lemon
+lemon's
+lemonade
+lemons
+lemony
+lempira
+Lemuel
+lemur
+lemures
+lemuroid
+Len
+Len's
+Lena
+Lena's
+lend
+lender
+lenders
+lending
+lends
+lenglen
+length
+lengthen
+lengthened
+lengthener
+lengthening
+lengthens
+lengthier
+lengthily
+lengthiness
+lengthly
+lengthman
+lengths
+lengthways
+lengthwise
+lengthy
+lenience
+leniency
+lenient
+leniently
+Lenin
+Leninabad
+Leninakan
+Leningrad
+Leninism
+Leninist
+lenis
+lenitive
+lenitively
+lenity
+Lennon
+Lennon's
+Lennox
+Lennox's
+Lenny
+Leno
+Lenore
+Lenore's
+lens
+lens's
+lense
+lensed
+lenser
+lensers
+lenses
+lensing
+lensings
+lensless
+lent
+lentamente
+Lenten
+lentic
+lenticel
+lenticular
+lenticulate
+lenticulation
+lentigo
+lentil
+lentil's
+lentils
+lentissimo
+lento
+Lenya
+Leo
+leoben
+Leon
+Leona
+Leonard
+Leonardo
+Leoncavallo
+Leone
+Leonid
+Leonid's
+Leonidas
+leonine
+leopard
+leopard's
+leopardess
+Leopardi
+leopards
+Leopold
+Leopoldville
+leotard
+leotards
+Lepanto
+lepaya
+leper
+lepers
+lepidolite
+lepidopteran
+lepidopterist
+Lepidosiren
+lepidote
+lepidus
+lepontine
+leporid
+leporine
+leprechaun
+leprechauns
+leprosarium
+leprose
+leprosy
+leprotic
+leprous
+leprously
+leprousness
+Leptocephalus
+Lepton
+lepton
+lepton's
+leptons
+leptophyllous
+leptosome
+leptospiral
+leptospirosis
+leptotene
+Lepus
+Lermontov
+Leroy
+Lerwick
+les
+lesbian
+lesbianism
+lesbians
+lesbos
+lesion
+lesions
+Leslie
+Lesotho
+Lesotho's
+less
+lessee
+lessen
+lessened
+lessening
+lessens
+lesseps
+lesser
+lesses
+lessing
+lesson
+lesson's
+lessoned
+lessoning
+lessons
+lessor
+lest
+lester
+let
+let's
+letch
+letchworth
+letdown
+letdowns
+lethal
+lethality
+lethalize
+lethalizes
+lethally
+lethargic
+lethargically
+lethargies
+lethargy
+Lethbridge
+Lethe
+Lethe's
+Letitia
+Letitia's
+Leto
+lets
+Lett
+letted
+letter
+lettered
+letterer
+letterhead
+letterheads
+lettering
+letterman
+lettermen
+letterpress
+letters
+letterset
+letting
+Lettish
+lettuce
+letup
+leu
+leucas
+leucine
+Leucippus
+leucite
+leucitic
+leuco
+leucocratic
+leucocyte
+leucocytosis
+leucoderma
+leucoma
+leucomaine
+leucopenia
+leucoplast
+leucopoiesis
+leucorrhoea
+leucotomy
+leuctra
+leukas
+leukemia
+leukemic
+leukemoid
+leukocyte
+leukocytic
+leuven
+lev
+levalloisian
+Levant
+levanter
+Levantine
+levator
+levatores
+levators
+levee
+levee's
+leveed
+leveeing
+levees
+level
+leveled
+leveler
+levelers
+levelest
+levelheaded
+levelheadedness
+leveling
+levelly
+levelness
+levels
+leven
+lever
+lever's
+leverage
+leveraged
+leverages
+leveraging
+levered
+leveret
+Leverhulme
+levering
+Leverkusen
+leverrier
+levers
+Levi
+Leviable
+leviable
+leviathan
+leviathan's
+levied
+levier
+levies
+levigate
+levigated
+levigates
+levigating
+levigation
+Levin
+Levin's
+Levine
+levirate
+leviratic
+Levis
+levitate
+levitated
+levitates
+levitating
+levitation
+levitational
+Levite
+Levitical
+Leviticus
+levities
+Levitt
+Levitt's
+levity
+levkas
+Levko
+levorotation
+levorotatory
+levulose
+levy
+levying
+Lew
+Lew's
+lewd
+lewdly
+lewdness
+Lewellyn
+lewellyn
+lewes
+lewis
+Lewisham
+lewisite
+lex
+lexeme
+lexica
+lexical
+lexicality
+lexically
+lexicographer
+lexicographer's
+lexicographers
+lexicographic
+lexicographical
+lexicographically
+lexicography
+lexicology
+lexicon
+lexicon's
+lexiconize
+lexiconizes
+lexicons
+lexicostatistic
+lexicostatistics
+lexigraphy
+Lexington
+lexis
+ley
+Leyden
+Leyte
+Lhasa
+liabilities
+liability
+liability's
+liable
+liableness
+Liadov
+liaise
+liaised
+liaises
+liaising
+liaison
+liaison's
+liaisons
+liana
+Liao
+Liaoning
+Liaotung
+Liaoyang
+liar
+liar's
+liard
+liars
+Lias
+liase
+liason
+lib
+libation
+libationary
+libations
+libau
+libava
+Libby
+Libby's
+libeccio
+libel
+libelant
+libelants
+libeled
+libelee
+libelees
+libeler
+libelers
+libeling
+libelist
+libelous
+libelously
+libels
+liber
+liberace
+Liberace
+liberal
+liberalism
+liberalist
+liberalistic
+liberality
+liberalization
+liberalization's
+liberalizations
+liberalize
+liberalized
+liberalizer
+liberalizers
+liberalizes
+liberalizing
+liberally
+liberalness
+liberals
+liberate
+liberated
+liberates
+liberating
+liberation
+liberationist
+liberationists
+liberator
+liberator's
+liberators
+liberec
+Liberia
+libertarian
+libertarianism
+libertarians
+liberticide
+libertie
+liberties
+libertinage
+libertine
+libertines
+libertinism
+liberty
+liberty's
+libia
+libidinal
+libidinally
+libidinous
+libidinously
+libidinousness
+libido
+libra
+librae
+librarian
+librarian's
+librarians
+librarianship
+libraries
+library
+library's
+librate
+libration
+librational
+libratory
+libretti
+librettist
+librettists
+libretto
+libretto's
+librettos
+Libreville
+Libreville's
+libriform
+Libya
+Libyan
+licating
+lice
+licensable
+license
+license's
+licensed
+licensee
+licensee's
+licensees
+licenseless
+licenselesses
+licenser
+licenses
+licensing
+licensor
+licensure
+licentiate
+licentiateship
+licentious
+licentiously
+licentiousness
+lichee
+lichen
+lichen's
+lichened
+lichenin
+lichenization
+lichenization's
+lichenizations
+lichenize
+lichenizes
+lichenology
+lichenous
+lichens
+Lichfield
+lichi
+licht
+lichtenstein
+Lichtenstein
+Lichter
+lichter
+licit
+licitly
+lick
+licked
+licker
+lickerish
+lickerishly
+lickerishness
+licking
+licks
+lickspittle
+licorice
+lictor
+lid
+lid's
+lidded
+liddell
+lidding
+lidice
+lidless
+lido
+lidocaine
+lidos
+lids
+lie
+lieberman
+Lieberman
+Lieberman's
+Liebfraumilch
+liebig
+liebknecht
+Liechtenstein
+lied
+lieder
+lief
+liege
+liegeman
+liegnitz
+lien
+lien's
+lienal
+liens
+lientery
+lier
+lierne
+lies
+liestal
+lietuva
+lieu
+lieut
+lieutenancy
+lieutenant
+lieutenant's
+lieutenants
+lieve
+life
+life's
+lifeblood
+lifeboat
+lifeboats
+lifeful
+lifeguard
+lifeguards
+lifeless
+lifelessly
+lifelessness
+lifelike
+lifelikeness
+lifeline
+lifelines
+lifelong
+lifemanship
+lifer
+lifers
+lifesaver
+lifesaving
+lifespan
+lifespans
+lifestyle
+lifestyles
+lifetime
+lifetime's
+lifetimes
+lifeway
+lifework
+liffey
+LIFO
+lift
+liftable
+liftboy
+lifted
+lifter
+lifters
+lifting
+liftman
+liftoff
+lifts
+ligament
+ligamentary
+ligamentous
+ligaments
+ligan
+ligand
+ligands
+ligate
+ligated
+ligates
+ligating
+ligation
+ligations
+ligature
+ligatured
+ligatures
+ligaturing
+liger
+ligeti
+Ligget
+Ligget's
+Liggett
+Liggett's
+light
+lighted
+lighten
+lightened
+lightener
+lightening
+lightens
+lighter
+lighter's
+lighterage
+lighters
+lightest
+lightface
+lightfaced
+lightfooted
+lightfootedly
+lightfootedness
+lightful
+lighthanded
+lighthandedness
+lightheaded
+lighthearted
+lightheartedly
+lightheartedness
+lighthouse
+lighthouse's
+lighthouses
+lighting
+lightish
+lightless
+lightly
+lightness
+lightning
+lightning's
+lightninged
+lightnings
+lightproof
+lights
+lightship
+lightships
+lightsome
+lightsomely
+lightsomeness
+lightweight
+lightweights
+lightyear
+lightyears
+ligneous
+lignification
+lignified
+lignifies
+ligniform
+lignify
+lignifying
+lignin
+lignite
+lignitic
+lignitize
+lignitizes
+lignocaine
+lignocellulose
+lignum
+ligroin
+ligula
+ligulate
+ligule
+ligure
+liguria
+lii
+likability
+likable
+likableness
+likasi
+like
+likeable
+liked
+likelier
+likeliest
+likelihood
+likelihoods
+likeliness
+likely
+liken
+likened
+likeness
+likeness's
+likenesses
+likening
+likens
+liker
+likes
+likest
+likewise
+liking
+likings
+liklihood
+likuta
+Lila
+Lila's
+lilac
+lilac's
+lilacs
+lilburne
+liliaceous
+Lilian
+Lilian's
+lilied
+lilienthal
+lilies
+Lilith
+liliuokalani
+lille
+Lillian
+Lillian's
+lilliput
+Lilliputian
+lilliputian
+Lilliputianize
+Lilliputianizes
+Lilly
+lilo
+lilongwe
+lilt
+lilting
+liltingly
+liltingness
+lily
+lily's
+Lima
+limacine
+Liman
+limassol
+limb
+limba
+limbate
+limbed
+limber
+limbered
+limbering
+limberly
+limberness
+limbers
+limbic
+limbless
+limbo
+limbos
+Limbourg
+limbs
+Limburg
+Limburger
+limbus
+lime
+lime's
+limeade
+limed
+limekiln
+limelight
+limen
+limerick
+limerick's
+limericks
+limes
+limestone
+limewater
+limey
+limicoline
+limicolous
+limier
+liminal
+liming
+limit
+limitability
+limitable
+limitably
+limitarian
+limitary
+limitation
+limitation's
+limitational
+limitations
+limitative
+limited
+limitedly
+limitedness
+limiteds
+limiter
+limiters
+limiting
+limitless
+limitlessly
+limitlessness
+limitrophe
+limits
+limmer
+limn
+limner
+limnetic
+limnic
+limning
+limnological
+limnologically
+limnologist
+limnology
+limo
+limo's
+limoges
+limonene
+limonite
+limonitic
+limos
+limousin
+limousine
+limousines
+limp
+limped
+limper
+limpet
+limpid
+limpidity
+limpidly
+limpidness
+limping
+limpkin
+limply
+limpness
+Limpopo
+limps
+limpsy
+limulus
+limy
+Lin
+Lin's
+linac
+linacre
+linage
+linalool
+linares
+linate
+linated
+lination
+linchpin
+linchpin's
+linchpins
+Lincoln
+Lincolnshire
+lincrusta
+linctus
+Lind
+Lind's
+Linda
+lindane
+Lindberg
+Lindbergh
+Lindbergh's
+linden
+lindesnes
+Lindholm
+Lindholm's
+lindisfarne
+Lindquist
+Lindquist's
+Lindsay
+Lindsay's
+Lindsey
+Lindsey's
+Lindstrom
+Lindstrom's
+lindwall
+Lindy
+lindy
+line
+line's
+lineage
+lineages
+lineal
+lineality
+lineally
+lineament
+lineamental
+linear
+linearities
+linearity
+linearizable
+linearization
+linearization's
+linearizations
+linearize
+linearized
+linearizes
+linearizing
+linearizion
+linearly
+lineate
+lineation
+lineations
+linebacker
+linebackers
+linebacking
+linebreed
+linecaster
+linecasting
+lined
+linefeed
+linefeeds
+lineman
+linemen
+linen
+linen's
+linenize
+linenizer
+linenizers
+linenizes
+linens
+linenumber
+lineolate
+lineolated
+lineprinter
+lineprinter's
+lineprinters
+liner
+linerless
+liners
+lines
+linesman
+linestyle
+lineup
+lineups
+linewidth
+linga
+lingam
+lingayen
+lingcod
+linger
+lingered
+lingerer
+lingerie
+lingering
+lingeringly
+lingers
+lingo
+lingoes
+lingonberry
+lingua
+linguae
+lingual
+lingualize
+lingualizes
+lingually
+linguiform
+linguine
+linguini
+linguist
+linguist's
+linguistic
+linguistical
+linguistically
+linguistician
+linguistics
+linguists
+lingulate
+linhay
+liniment
+liniments
+linin
+lining
+linings
+link
+linkage
+linkage's
+linkages
+linkboy
+linked
+linker
+linkers
+linking
+linkings
+linkman
+links
+linksman
+linkup
+linkwork
+linlithgow
+linn
+Linnaean
+linnaeus
+Linnaeus
+linnet
+linnhe
+lino
+linocut
+linoleate
+linoleic
+linolenate
+linolenic
+linoleum
+linos
+Linotype
+Linsang
+linseed
+linstock
+lint
+lintel
+linter
+Linton
+lints
+lintwhite
+linty
+linum
+Linus
+linz
+lion
+lion's
+Lionel
+lioness
+lioness's
+lionesses
+lionfish
+lionhearted
+lionizable
+lionizable's
+lionizables
+lionization
+lionization's
+lionizations
+lionize
+lionized
+lionizer
+lionizers
+lionizes
+lionizing
+lionlike
+lions
+lip
+lip's
+lipari
+lipase
+lipchitz
+Lipetsk
+lipid
+lipid's
+lipide
+lipidic
+lipids
+lipless
+liplike
+lipography
+lipoid
+lipolysis
+lipolytic
+lipoma
+lipophilic
+lipoprotein
+lippe
+lipped
+lippen
+lippi
+lippie
+lippier
+Lippincott
+Lippincott's
+lipping
+Lippizaner
+lippy
+lipread
+lipreading
+lips
+Lipschitz
+Lipscomb
+Lipscomb's
+lipstick
+Lipton
+liquate
+liquated
+liquates
+liquating
+liquation
+liquations
+liquefacient
+liquefaction
+liquefactive
+liquefactive's
+liquefactives
+liquefiability
+liquefiable
+liquefied
+liquefier
+liquefiers
+liquefies
+liquefy
+liquefying
+liquesce
+liquescent
+liqueur
+liquid
+liquid's
+liquidate
+liquidated
+liquidates
+liquidating
+liquidation
+liquidation's
+liquidations
+liquidator
+liquidity
+liquidization
+liquidize
+liquidized
+liquidizer
+liquidizers
+liquidizes
+liquidizing
+liquidly
+liquidness
+liquids
+liquidus
+liquor
+liquor's
+liquored
+liquorice
+liquoring
+liquorish
+liquors
+lira
+liras
+lire
+Liriodendron
+liripipe
+Lisa
+Lisbon
+Lise
+Lise's
+lisieux
+lisle
+lisp
+lisp's
+lisped
+lisper
+lisping
+lisps
+liss
+Liss
+Lissajous
+lissom
+lissome
+lissomely
+lissomeness
+list
+liste
+listed
+listel
+listen
+listenable
+listened
+listener
+listeners
+listening
+listens
+lister
+listeriosis
+Listerism
+Listerize
+Listerizes
+listers
+listing
+listing's
+listings
+listless
+listlessly
+listlessness
+liston
+Liston
+lists
+Liszt
+lit
+litanies
+litany
+liter
+literacy
+literae
+literal
+literalism
+literalist
+literalistic
+literality
+literalization
+literalization's
+literalizations
+literalize
+literalized
+literalizer
+literalizers
+literalizes
+literally
+literalness
+literals
+literarily
+literariness
+literary
+literate
+literately
+literateness
+literati
+literatim
+literation
+literator
+literature
+literature's
+literatures
+literatus
+liters
+litharge
+lithe
+lithely
+litheness
+lithesome
+lithia
+lithiasis
+lithic
+lithically
+lithium
+litho
+lithograph
+lithographer
+lithographers
+lithographic
+lithographically
+lithographize
+lithographizes
+lithographs
+lithography
+lithoid
+lithologic
+lithological
+lithologically
+lithology
+lithomarge
+lithometeor
+lithophane
+lithophyte
+lithophytic
+lithopone
+lithos
+lithosol
+lithosphere
+lithospheric
+lithotomy
+lithotrity
+Lithuania
+lithuanian
+Lithuanian
+litigable
+litigant
+litigants
+litigate
+litigated
+litigates
+litigating
+litigation
+litigator
+litigious
+litigiously
+litigiousness
+litmus
+litotes
+litter
+litterateur
+litterbag
+litterbug
+littered
+litterer
+littering
+littermate
+littermate's
+littermates
+litters
+littery
+little
+littleneck
+littleness
+littler
+littlest
+Littleton
+Litton
+littoral
+littoria
+liturgic
+liturgical
+liturgically
+liturgics
+liturgiologist
+liturgiology
+liturgist
+liturgy
+litz
+liu
+Liv
+livability
+livable
+livableness
+livably
+live
+liveability
+liveable
+lived
+livelier
+liveliest
+livelihood
+livelily
+liveliness
+livelong
+lively
+liven
+livened
+liveness
+livening
+liver
+liveried
+liverish
+liverishness
+Livermore
+Liverpool
+Liverpudlian
+livers
+liverwort
+livery
+liveryman
+lives
+livest
+livestock
+liveth
+livid
+lividity
+lividness
+living
+livingly
+livingness
+livings
+Livingston
+livingstone
+livlihood
+livonia
+livorno
+livraison
+livy
+lix
+lixiviate
+lixiviated
+lixiviates
+lixiviating
+lixiviation
+lixivium
+Liz
+Liz's
+lizard
+lizard's
+lizards
+Lizzie
+lizzy
+Lizzy
+Ljubljana
+llama
+llama's
+llamas
+Llandaff
+Llandudno
+Llanelli
+Llangollen
+llano
+llanos
+Llewellyn
+Lleyn
+Lloyd
+lo
+loach
+loaches
+load
+loadable
+loaded
+loader
+loaders
+loading
+loadings
+loads
+loadstar
+loadstone
+loaf
+loafed
+loafer
+loafers
+loafing
+loafs
+loam
+loamy
+loan
+loanable
+loanda
+loaned
+loaner
+loaning
+loans
+loanword
+loanword's
+loanwords
+loath
+loathe
+loathed
+loather
+loathes
+loathing
+loathly
+loathness
+loathsome
+loathsomely
+loathsomeness
+loaves
+lob
+Lobachevsky
+lobar
+lobate
+lobated
+lobately
+lobation
+lobbied
+lobbies
+lobbing
+lobby
+lobbyer
+lobbying
+lobbyism
+lobbyist
+lobe
+lobe's
+lobectomy
+lobed
+lobelia
+lobeline
+lobengula
+lobes
+lobito
+loblolly
+lobo
+lobola
+lobos
+lobotomy
+lobscouse
+lobster
+lobster's
+lobsterman
+lobstermen
+lobsters
+lobular
+lobularity
+lobularly
+lobulate
+lobulated
+lobulation
+lobule
+lobules
+lobulose
+lobworm
+local
+locale
+locales
+localism
+localisms
+localite
+localities
+locality
+locality's
+localizable
+localizable's
+localizables
+localization
+localization's
+localizations
+localize
+localized
+localizer
+localizers
+localizes
+localizing
+locally
+locals
+Locarno
+locatable
+locate
+located
+locater
+locates
+locating
+location
+locational
+locationally
+locations
+locative
+locatives
+locator
+locator's
+locators
+loch
+lochia
+loci
+lock
+lockable
+lockage
+lockbox
+Locke
+locked
+locker
+lockers
+locket
+Lockhart
+Lockheed
+Lockian
+lockies
+locking
+lockings
+lockjaw
+locknut
+lockout
+lockout's
+lockouts
+locks
+locksmith
+locksmithing
+lockstep
+lockstitch
+lockup
+lockup's
+lockups
+Lockwood
+lockyer
+locl
+loco
+locoes
+locofoco
+locoism
+locoman
+locomote
+locomoted
+locomotes
+locomoting
+locomotion
+locomotive
+locomotive's
+locomotively
+locomotives
+locomotor
+locomotory
+locoweed
+locris
+locular
+loculate
+loculated
+loculation
+locule
+loculed
+loculus
+locum
+locus
+locus's
+locust
+locust's
+locusts
+locution
+locutor
+lod
+lode
+loden
+lodestar
+lodestone
+lodge
+lodged
+lodgement
+lodgepole
+lodger
+lodger's
+lodgers
+lodges
+lodging
+lodgings
+lodgment
+lodi
+lodicule
+Lodowick
+Lodowick's
+Loeb
+Loeb's
+loess
+Loewe
+loewi
+lofoten
+loft
+loft's
+lofter
+loftier
+loftily
+loftiness
+lofts
+lofty
+log
+log's
+Logan
+loganberry
+loganiaceous
+logaoedic
+logarithm
+logarithm's
+logarithmic
+logarithmically
+logarithms
+logbook
+loge
+logged
+logger
+logger's
+loggerhead
+loggers
+loggets
+loggia
+loggie
+logging
+loggy
+logia
+logic
+logic's
+logical
+logicality
+logicalization
+logicalization's
+logicalizations
+logicalize
+logicalizes
+logically
+logicalness
+logicals
+logician
+logician's
+logicians
+logicism
+logicize
+logicized
+logicizes
+logicizing
+logics
+login
+logins
+logion
+logions
+logistic
+logistical
+logistically
+logistician
+logistics
+logjam
+loglog
+lognormal
+lognormality
+lognormally
+logo
+logoff
+logogram
+logogram's
+logogrammatic
+logograms
+logograph
+logographic
+logographically
+logography
+logogriph
+logomachy
+logopaedics
+logorrhea
+logorrhea's
+logorrheas
+logorrheic
+logos
+logotype
+logout
+logroll
+logroller
+logrolling
+logs
+logwood
+logy
+lohengrin
+loin
+loin's
+loincloth
+loins
+Loire
+loiret
+Lois
+loiter
+loitered
+loiterer
+loitering
+loiters
+Loki
+Loki's
+Lola
+loll
+Lolland
+lollapalooza
+Lollard
+loller
+lollies
+lolling
+lollipop
+lollop
+lolly
+lollygag
+lollypop
+lomax
+Lomb
+Lomb's
+Lombard
+Lombardy
+Lombardy's
+lombok
+Lombrosian
+lombroso
+Lome
+loment
+lomond
+London
+Londonderry
+londonderry
+Londoner
+Londonization
+Londonization's
+Londonizations
+Londonize
+Londonizes
+londrina
+lone
+lonelier
+loneliest
+lonelily
+loneliness
+lonely
+loneness
+loner
+loners
+lonesome
+lonesomely
+lonesomeness
+long
+longan
+longanimity
+longanimous
+Longbenton
+longboat
+longboats
+longbow
+longbowman
+longcase
+longcloth
+longe
+longed
+longer
+longeron
+longest
+longevity
+longevous
+Longfellow
+Longford
+longhair
+longhaired
+longhand
+longhead
+longheaded
+longheadedness
+longhorn
+longhorns
+longhouse
+longicorn
+longing
+longingly
+longings
+longinus
+longish
+longitude
+longitude's
+longitudes
+longitudinal
+longitudinally
+longlasting
+longleaf
+longlegs
+longline
+longly
+longness
+Longobard
+longs
+longship
+longshore
+longshoreman
+longshoremen
+longshoring
+longsome
+longsomely
+longsomeness
+longspur
+longstanding
+Longstreet
+longstreet
+longterm
+longtime
+longue
+longueuil
+longueur
+longus
+longways
+longwinded
+longword
+longword's
+longwords
+longyearbyen
+Lonicera
+loo
+loobies
+looby
+loofah
+look
+lookahead
+looked
+looker
+lookers
+lookin
+looking
+lookout
+lookouts
+looks
+lookup
+lookup's
+lookups
+loom
+loomed
+looming
+Loomis
+looms
+loon
+looney
+loonier
+looniness
+loony
+loop
+looped
+looper
+loophole
+loophole's
+loopholed
+loopholes
+loopholing
+looping
+loops
+loopy
+loose
+loosebox
+loosed
+looseleaf
+loosely
+loosen
+loosened
+loosener
+looseness
+loosening
+loosens
+looser
+looses
+loosest
+loosestrife
+loosing
+loot
+looted
+looter
+looting
+loots
+lop
+lope
+loped
+loper
+Lopez
+lophobranch
+lophophore
+loping
+lopped
+lopper
+loppier
+lopping
+loppy
+lops
+lopseed
+lopsided
+lopsidedly
+lopsidedness
+loquacious
+loquaciously
+loquaciousness
+loquacity
+loquat
+lor
+loran
+lorans
+lorca
+lord
+lord's
+lording
+lordlier
+lordliness
+lordling
+lordly
+lordosis
+lordotic
+lords
+lordship
+lordy
+lore
+loreal
+Lorelei
+Loren
+Loren's
+Lorengar
+lorentz
+Lorentzian
+Lorenz
+Lorenz's
+Loretta
+lorgnette
+lorgnettes
+lorgnon
+lorgnons
+Lori
+Lori's
+lorica
+loricate
+loricated
+lorient
+lorikeet
+lorimer
+Lorinda
+Lorinda's
+loris
+lorn
+lornness
+lorrain
+Lorraine
+lorries
+lorris
+lorry
+lory
+los
+losable
+losableness
+lose
+losel
+loser
+losers
+loses
+losey
+losing
+losings
+loss
+loss's
+lossage
+losses
+lossier
+lossiest
+lossless
+lossy
+lost
+lostness
+lot
+lot's
+Lota
+loth
+lothair
+lothario
+Lothario
+lotharios
+lothian
+lothians
+lothringen
+lotic
+lotion
+lotions
+lotos
+lots
+Lotte
+Lotte's
+lotted
+lotteries
+lottery
+Lottie
+lotting
+lotto
+lotus
+Lou
+Lou's
+louche
+loud
+louden
+loudened
+loudening
+louder
+loudest
+loudish
+loudly
+loudmouth
+loudmouthed
+loudness
+loudspeak
+loudspeaker
+loudspeaker's
+loudspeakers
+loudspeaking
+lough
+Loughborough
+Louis
+Louisa
+Louisburg
+Louise
+Louisiana
+Louisianan
+Louisville
+lounge
+lounged
+lounger
+loungers
+lounges
+lounging
+Lounsbury
+Lounsbury's
+loup
+loupe
+louping
+Lourdes
+louse
+loused
+louses
+lousewort
+lousier
+lousily
+lousiness
+lousing
+lousy
+lout
+louth
+loutish
+loutishly
+loutishness
+louts
+louvain
+louvar
+louver
+louvered
+louvers
+Louvre
+lovable
+lovableness
+lovably
+lovage
+lovat
+love
+love's
+loveable
+lovebird
+lovebirds
+loved
+Lovejoy
+lovejoy
+Lovelace
+Loveland
+loveless
+lovelessly
+lovelessness
+lovelier
+lovelies
+loveliest
+lovelily
+loveliness
+lovell
+lovelock
+lovelocks
+lovelorn
+lovelornness
+lovely
+lovemaking
+lover
+lover's
+lovering
+loverly
+lovers
+loves
+lovesick
+lovesickness
+lovesome
+lovey
+loving
+lovingly
+lovingness
+low
+lowan
+lowborn
+lowboy
+lowbred
+lowbrow
+lowdown
+Lowe
+Lowe's
+Lowell
+lower
+lowercase
+lowercased
+lowercases
+lowercasing
+lowerclassman
+lowered
+lowering
+lowermost
+lowers
+lowery
+lowest
+lowestoft
+lowing
+lowland
+lowlander
+lowlands
+lowlier
+lowliest
+lowlight
+lowlight's
+lowlights
+lowlihead
+lowlily
+lowliness
+lowly
+lown
+lowness
+Lowry
+Lowry's
+lows
+lowveld
+lox
+loxes
+loxodrome
+loxodromic
+loxodromically
+loxodromics
+Loy
+loy
+loyal
+loyalist
+loyalists
+loyalize
+loyalizes
+loyally
+loyalties
+loyalty
+loyalty's
+loyang
+loyola
+Loyola
+lozenge
+lozenged
+lozenges
+lozengy
+lozi
+LPG
+LSI
+Ltd
+LTV
+lualaba
+luanda
+luang
+luau
+Luba
+lubber
+lubberland
+lubberlanders
+lubberliness
+lubberly
+lubbers
+Lubbock
+lube
+Lubell
+Lubell's
+lublin
+lubra
+lubric
+lubrical
+lubricant
+lubricant's
+lubricants
+lubricate
+lubricated
+lubricates
+lubricating
+lubrication
+lubrications
+lubricative
+lubricator
+lubricious
+lubriciously
+lubricity
+lubricous
+lubritorium
+lubumbashi
+Lucan
+Lucania
+lucarne
+Lucas
+lucca
+luce
+lucency
+lucent
+lucently
+Lucerne
+Lucia
+Lucian
+lucid
+lucidity
+lucidly
+lucidness
+lucien
+Lucien
+Lucifer
+luciferin
+luciferous
+lucilius
+Lucille
+Lucina
+Lucius
+luck
+lucked
+luckier
+luckiest
+luckily
+luckiness
+luckless
+Lucknow
+lucks
+lucky
+lucrative
+lucratively
+lucrativeness
+lucre
+Lucretia
+Lucretius
+lucubrate
+lucubrated
+lucubrates
+lucubrating
+lucubration
+lucubrations
+lucubrator
+luculent
+luculently
+lucullus
+Lucy
+lud
+Luddite
+Ludendorff
+ludhiana
+ludicrous
+ludicrously
+ludicrousness
+Ludlow
+Ludlow's
+ludmilla
+Ludmilla
+ludo
+Ludwig
+Ludwigsburg
+Ludwigshafen
+lues
+luetic
+luetically
+luff
+Luffa
+luffed
+luffing
+luffs
+Lufthansa
+Luftwaffe
+lug
+Luganda
+Lugansk
+luge
+luger
+luggage
+luggageless
+lugged
+lugger
+lugging
+lugo
+lugs
+lugsail
+lugubrious
+lugubriously
+lugubriousness
+lugworm
+luichow
+luik
+Luis
+Luke
+Luke's
+lukemia
+lukewarm
+lukewarmly
+lukewarmness
+lull
+lullaby
+lulled
+lulls
+lulu
+Luluabourg
+lum
+lumbago
+lumbar
+lumbarization
+lumbarization's
+lumbarizations
+lumber
+lumbered
+lumberer
+lumbering
+lumberjack
+lumberjack's
+lumberjacket
+lumberjacks
+lumberman
+lumbermen
+lumbers
+lumberyard
+lumbian
+lumbricalis
+lumbricoid
+lumen
+lumenal
+lumens
+lumiere
+lumina
+luminaire
+luminal
+luminance
+luminaries
+luminary
+luminesce
+luminesced
+luminescence
+luminescent
+luminescing
+luminiferous
+luminist
+luminosity
+luminous
+luminously
+luminousness
+lumisterol
+lumme
+lummox
+lummus
+lump
+lumped
+lumpen
+lumpenproletariat
+lumper
+lumpier
+lumpily
+lumpiness
+lumping
+lumpish
+lumpishly
+lumpishness
+lumps
+Lumpur
+lumpy
+lumumba
+luna
+Luna
+Luna's
+lunacy
+lunar
+lunarian
+lunary
+lunate
+lunated
+lunately
+lunatic
+lunatics
+lunation
+lunatize
+lunatizes
+lunch
+lunched
+luncheon
+luncheon's
+luncheonette
+luncheons
+luncher
+lunches
+lunching
+lunchroom
+lunchrooms
+lunchtime
+Lund
+Lund's
+Lundberg
+Lundberg's
+Lundquist
+Lundquist's
+lune
+lunes
+lunette
+lung
+lungan
+lunge
+lunged
+lunger
+lungfish
+lungi
+lunging
+lungki
+lungs
+lungworm
+lungwort
+lunik
+lunisolar
+lunitidal
+lunker
+lunkhead
+lunkheaded
+luns
+lunt
+lunula
+lunulate
+lunule
+luny
+Luo
+lupanar
+Lupercalia
+lupin
+lupine
+lupulin
+lupus
+Lur
+Lura
+lurch
+lurched
+lurcher
+lurches
+lurching
+lurdan
+lurdane
+lure
+lured
+lurer
+lures
+lurex
+lurid
+luridly
+luridness
+luring
+lurk
+lurked
+lurker
+lurkers
+lurking
+lurks
+Lusaka
+Lusaka's
+lusatia
+Lusatian
+luscious
+lusciously
+lusciousness
+lush
+lushes
+lushly
+lushness
+lusion
+Lusitania
+lust
+luster
+lustered
+lustering
+lusterless
+lusters
+lusterware
+lustful
+lustfully
+lustfulness
+lustier
+lustihood
+lustily
+lustiness
+lusting
+lustra
+lustral
+lustrate
+lustrated
+lustrates
+lustrating
+lustration
+lustrations
+lustrous
+lustrously
+lustrousness
+lustrum
+lusts
+lusty
+lusus
+lutanist
+lute
+lute's
+luteal
+luted
+luteinization
+luteinize
+lutenist
+luteolin
+luteous
+lutes
+lutestring
+Lutetia
+lutetium
+Luther
+Lutheran
+Lutheranize
+Lutheranizer
+Lutheranizers
+Lutheranizes
+luthern
+luthuli
+lutihaw
+lutine
+luting
+lutist
+Luton
+Lutoslawski
+Lutyens
+Lutz
+lux
+luxate
+luxated
+luxates
+luxating
+luxation
+luxations
+luxe
+Luxembourg
+Luxemburg
+luxes
+Luxon
+luxor
+luxulianite
+luxuriance
+luxuriant
+luxuriantly
+luxuriate
+luxuriated
+luxuriating
+luxuries
+luxurious
+luxuriously
+luxuriousness
+luxury
+luxury's
+Luzon
+Luzon's
+lvi
+lvii
+Lvov
+lxi
+lxii
+lxiv
+lxix
+lxvi
+lxvii
+lyallpur
+lyautey
+lycanthrope
+lycanthropic
+lycanthropy
+lycaon
+lycaonia
+lycee
+lyceum
+lychee
+lychnis
+lycia
+Lycian
+lycidas
+lycopod
+lycopodium
+lycurgus
+lydda
+lyddite
+lydgate
+Lydia
+Lydian
+lye
+lyell
+lying
+lyingly
+lyings
+Lykes
+Lyle
+Lyle's
+lyly
+Lyman
+Lyman's
+Lyme
+Lymington
+lymph
+lymphadenitis
+lymphangial
+lymphangitis
+lymphatic
+lymphatically
+lymphoadenoma
+lymphoblast
+lymphoblastic
+lymphocyte
+lymphocytes
+lymphocytic
+lymphocytosis
+lymphoid
+lymphoma
+lymphomatoid
+lymphomatosis
+lymphomatous
+lymphopoiesis
+lyncean
+lynch
+Lynchburg
+lynched
+lyncher
+lynches
+lynchet
+Lyndon
+lyndon
+Lynn
+lynx
+lynx's
+lynxes
+Lyon
+Lyonnais
+lyonnaise
+Lyonnesse
+lyophile
+lyophilic
+lyophilization
+lyophilize
+lyophilized
+lyophilizer
+lyophobic
+lyotropic
+Lyra
+Lyra's
+lyrate
+lyrated
+lyrately
+lyre
+lyre's
+lyrebird
+lyrebird's
+lyrebirds
+lyres
+lyric
+lyrical
+lyrically
+lyricalness
+lyricism
+lyricist
+lyricists
+lyricize
+lyricized
+lyricizes
+lyricizing
+lyrics
+lyrism
+lyrist
+Lysander
+lysate
+lyse
+Lysenko
+Lysenko's
+Lysenkoism
+lysergic
+lyses
+lysias
+Lysimachus
+lysimeter
+lysimeter's
+lysimeters
+lysimetric
+lysin
+lysine
+lysing
+lysippus
+lysis
+lysogen
+lysogenic
+lysogenicity
+lysogenization
+lysogenize
+lysogeny
+lysol
+lysolecithin
+lysosomal
+lysosomally
+lysosome
+lysozyme
+lyssa
+Lytham
+Lythraceous
+lytic
+lytically
+lytta
+lytton
+Lyublin
+m's
+Ma
+ma
+ma'am
+Maag
+Maar
+Maarianhamina
+Maas
+Maastricht
+Maazel
+Mab
+Mabel
+Mabel's
+mabela
+mabuse
+Mac
+macabre
+macabrely
+macaco
+macadam
+Macadamia
+macadamization
+macadamize
+macadamized
+macadamizes
+macadamizing
+Macao
+macaque
+macarize
+macarized
+macarizes
+macarizing
+macaroni
+macaroni's
+macaronic
+macaronically
+macaronies
+macaroon
+MacArthur
+Macarthur
+Macaskill
+Macassar
+Macau
+Macaulay
+Macaulayan
+Macaulayism
+Macaulayisms
+macaw
+macaw's
+macaws
+Macbeth
+Maccabean
+Maccabees
+maccaroni
+Macclesfield
+Macdonald
+MacDonald
+Macdonnell
+MacDougall
+Macdougall
+MacDougall's
+Macdougall's
+MacDraw
+MacDraw's
+mace
+macebearer
+maced
+macedoine
+Macedon
+Macedonia
+Macedonian
+macer
+macerate
+macerated
+macerates
+macerating
+maceration
+macerations
+macerator
+macerators
+maces
+Macgregor
+MacGregor
+Mach
+machado
+machan
+machel
+machete
+Machiavelli
+Machiavellian
+machicolate
+machicolation
+machin
+machinability
+machinable
+machinate
+machinated
+machinates
+machinating
+machination
+machination's
+machinations
+machinator
+machine
+machine's
+machineable
+machined
+machinelike
+machineries
+machinery
+machines
+machining
+machinist
+machinists
+machinization
+machinization's
+machinizations
+machinize
+machinizes
+machismo
+machmeter
+macho
+machree
+machu
+macing
+macintosh
+MacIntosh
+MacIntosh's
+mack
+Mackay
+MacKenzie
+Mackenzie
+mackerel
+mackerels
+Mackerras
+MacKerras
+Mackey
+Mackey's
+Mackinac
+mackinaw
+mackintosh
+mackle
+mackled
+mackles
+macklin
+mackling
+macle
+Maclean
+macled
+Macleod
+MacMahon
+Macmahon
+MacMahon's
+MacMillan
+Macmillan
+Macneice
+Macon
+MacPaint
+MacPaint's
+Macpherson
+macrame
+Macready
+macro
+macro's
+macroaggregate
+macroaggregated
+macrobiotic
+macrobiotics
+macrocephalic
+macrocephalous
+macrocephaly
+macroclimate
+macrocosm
+macrocosmic
+macrocosmically
+macrocyte
+macrocytic
+macrocytosis
+macrodynamic
+macroeconomic
+macroeconomics
+macroencephaly
+macroevolution
+macroevolutionary
+macrofossil
+macrogamete
+macrograph
+macroinstruction
+macromolecular
+macromolecule
+macromolecule's
+macromolecules
+macron
+macronucleus
+macronutrient
+macropathological
+macropathology
+macrophage
+macrophages
+macrophagic
+macrophysics
+macrophyte
+macrophytic
+macroprocessor
+macropterous
+macros
+macroscale
+macroscopic
+macroscopical
+macroscopically
+macrosimulation
+macrosocioeconomic
+macrosporangium
+macrospore
+macrostructural
+macrostructure
+macrostructure's
+macrosystem
+macruran
+macula
+maculate
+maculated
+maculates
+maculating
+maculation
+maculations
+macule
+macumba
+mad
+madafu
+Madagascar
+madam
+Madame
+Madames
+madams
+madcap
+Maddalena
+madded
+madden
+maddened
+maddening
+maddeningly
+madder
+maddest
+madding
+maddish
+Maddox
+made
+Madeira
+Madeleine
+Madeleine's
+Madeline
+Madeline's
+mademoiselle
+mademoiselles
+madhouse
+Madhya
+madhya
+madina
+Madison
+madly
+madman
+madmen
+madness
+Madonna
+Madonnas
+madras
+madre
+madrepore
+Madrid
+madrigal
+madrigalian
+madrigaling
+madrigalist
+madrigals
+madrilene
+madrona
+madrone
+Madsen
+Madsen's
+madstone
+madstones
+madura
+madurai
+maduro
+madwoman
+madwomen
+madwort
+Mae
+Mae's
+maebashi
+Maecenas
+Maelstrom
+maelstrom
+maelstrom's
+maelstroms
+maenad
+maenadic
+maestoso
+maestricht
+maestro
+maeterlinck
+maewo
+mafeking
+maffick
+mafia
+Mafia
+Mafia's
+Mafiosi
+mafioso
+mag
+MAG
+magallanes
+magazine
+magazine's
+magazined
+magazines
+magazining
+magazinism
+magazinist
+magazinists
+Magdalen
+magdalena
+Magdalene
+Magdalenian
+Magdeburg
+mage
+Magellan
+Magellanic
+magen
+magenta
+Maggie
+maggiore
+maggot
+maggot's
+maggotries
+maggotry
+maggots
+maggoty
+Maghreb
+magi
+magic
+magical
+magicalize
+magicalizes
+magically
+magician
+magician's
+magicians
+magicked
+magicking
+Magill
+magill
+magilp
+maginot
+magisterial
+magisterially
+magisterium
+magistery
+magistracy
+magistral
+magistrally
+magistrate
+magistrate's
+magistrates
+magistrateship
+magistratical
+magistratically
+magistrature
+Maglemosian
+magma
+magmatic
+magna
+magnanimity
+magnanimous
+magnanimously
+magnanimousness
+magnate
+magnates
+magnesia
+magnesian
+magnesite
+magnesium
+magnesiums
+magnet
+magnet's
+magnetic
+magnetically
+magnetics
+magnetism
+magnetism's
+magnetisms
+magnetite
+magnetitic
+magnetizabilities
+magnetizability
+magnetizability's
+magnetizable
+magnetizable's
+magnetizables
+magnetization
+magnetization's
+magnetizations
+magnetize
+magnetized
+magnetizer
+magnetizers
+magnetizes
+magnetizing
+magneto
+magnetochemistry
+magnetodynamo
+magnetoelectric
+magnetoelectrical
+magnetoelectricity
+magnetofluidmechanic
+magnetofluidmechanics
+magnetogasdynamic
+magnetogasdynamics
+magnetogram
+magnetogram's
+magnetograms
+magnetograph
+magnetohydrodynamic
+magnetohydrodynamics
+magnetometer
+magnetometer's
+magnetometers
+magnetometric
+magnetometry
+magnetomotive
+magneton
+magnetooptic
+magnetooptical
+magnetooptics
+magnetopause
+magnetos
+magnetoscope
+magnetosheath
+magnetosphere
+magnetospheric
+magnetostatic
+magnetostriction
+magnetostrictive
+magnetostrictively
+magnetron
+magnetrons
+magnets
+magnific
+magnifical
+magnifically
+Magnificat
+magnification
+magnifications
+magnificats
+magnificence
+magnificent
+magnificently
+magnifico
+magnified
+magnifier
+magnifiers
+magnifies
+magnify
+magnifying
+magniloquence
+magniloquent
+magniloquently
+magnitude
+magnitude's
+magnitudes
+magnolia
+magnoliaceous
+magnolias
+magnum
+magnums
+magnus
+Magnuson
+Magnuson's
+Magog
+Magog's
+magot
+magpie
+magpies
+magritte
+Magruder
+magtape
+magtapes
+maguey
+Maguire
+maguire
+Maguires
+maguires
+magus
+Magyar
+mahabharata
+mahalla
+mahanadi
+maharaja
+maharaja's
+maharajah
+maharanee
+maharani
+maharashtra
+Maharashtra
+maharishi
+mahatma
+mahatmaism
+Mahayana
+Mahayanist
+Mahdi
+mahewu
+Mahican
+mahjong
+Mahler
+mahler
+Mahler's
+mahlstick
+mahoganize
+mahoganized
+mahoganizes
+mahoganizing
+mahogany
+Mahomet
+mahometan
+Mahoney
+Mahoney's
+Mahonia
+Mahound
+mahout
+mahratta
+mahseer
+Maia
+maid
+maid's
+maidan
+maiden
+maidenhair
+maidenhead
+maidenhood
+maidenliness
+maidenly
+maidens
+maidhood
+maidish
+maids
+maidservant
+maidstone
+maiduguri
+maier
+maieutic
+maieutical
+maieutics
+maigre
+maihem
+maikop
+mail
+mailability
+mailable
+mailbag
+mailbags
+mailboat
+mailboats
+mailbox
+mailbox's
+mailboxes
+mailcoach
+mailed
+mailer
+mailer's
+mailers
+mailing
+mailings
+maillol
+maillot
+mailman
+mailmen
+mailplane
+mailplanes
+mails
+mailsack
+mailsacks
+maim
+maimed
+maimedness
+maimer
+maimers
+maiming
+maimonides
+maims
+main
+mainbrace
+Maine
+mainframe
+mainframe's
+mainframes
+mainland
+mainlander
+mainlanders
+mainline
+mainlined
+mainliner
+mainliners
+mainlines
+mainlining
+mainly
+mainmast
+mains
+mainsail
+mainsheet
+mainspring
+mainstay
+mainstream
+maintain
+maintainability
+maintainable
+maintained
+maintainer
+maintainer's
+maintainers
+maintaining
+maintains
+maintenance
+maintenance's
+maintenances
+maintenence
+Maintenon
+maintop
+maintopsail
+mainz
+maiolica
+maisonette
+maisonettes
+Maitland
+maitre
+maitres
+maize
+maizer
+maizers
+maizes
+majestic
+majestical
+majestically
+majesties
+majesty
+majesty's
+Majlis
+majolica
+major
+Majorca
+Majorca's
+majordomo
+majordomos
+majored
+majorette
+majorettes
+majoring
+majorities
+majority
+majority's
+majorize
+majorizes
+majors
+majunga
+majuscular
+majuscule
+makable
+makalu
+makarios
+make
+makeable
+makebate
+makefast
+makefile
+makefiles
+makepeace
+maker
+makers
+makes
+makeshift
+makeshifts
+makeshifty
+makeup
+makeups
+makeweight
+makeyevka
+makhachkala
+making
+makings
+makkah
+mako
+makos
+makurdi
+makuta
+mal
+Malabar
+Malabar's
+malabo
+Malacca
+malachi
+malachite
+malacologic
+malacological
+malacologist
+malacology
+malacophyllous
+malacopterygian
+malacostracan
+maladapt
+maladaptation
+maladapted
+maladaptive
+maladdress
+maladies
+maladjust
+maladjusted
+maladjustive
+maladjustment
+maladjustments
+maladminister
+maladministration
+maladroit
+maladroitly
+malady
+malady's
+Malagasy
+Malagasy's
+malaise
+malam
+Malamud
+malamud
+malamute
+malang
+malapert
+malapertly
+malapertness
+malapportioned
+malapportionment
+malappropriate
+malappropriated
+malappropriates
+malappropriating
+malaprop
+malapropian
+malapropism
+malapropos
+malar
+malaria
+malarial
+malarian
+malariated
+malariologist
+malariology
+malarious
+malarkey
+malassimilation
+malate
+malatesta
+malathion
+malatya
+Malawi
+Malawi's
+malaxate
+malaxated
+malaxates
+malaxating
+Malay
+Malaya
+Malayize
+Malayizes
+Malaysia
+Malaysian
+Malcolm
+malconduct
+malconformation
+malcontent
+malcontent's
+malcontented
+malcontentedly
+malcontentedness
+malcontents
+Malden
+Malden's
+maldevelopment
+maldistribute
+maldistribution
+Maldive
+Maldive's
+Maldives
+maldon
+male
+male's
+maleable
+malebranche
+maledict
+malediction
+maledictory
+malefaction
+malefactor
+malefactor's
+malefactors
+malefic
+maleficence
+maleficent
+maleic
+malemute
+maleness
+malentendu
+males
+malevich
+malevolence
+malevolencies
+malevolent
+malevolently
+malfeasance
+malfeasant
+malformation
+malformations
+malformed
+malfunction
+malfunctioned
+malfunctioning
+malfunctions
+malgovernment
+malherbe
+Mali
+Mali's
+Malibu
+Malibu's
+malic
+malice
+malicious
+maliciously
+maliciousness
+maliferous
+malign
+malignance
+malignancies
+malignancy
+malignant
+malignantly
+maligned
+malignity
+malignly
+malihini
+malimprinted
+malines
+malinger
+malingered
+malingerer
+malingering
+malinke
+Malinowski
+malism
+Malison
+malkin
+mall
+mall's
+mallam
+mallard
+mallards
+malleability
+malleable
+malleableness
+malleablize
+malleablizes
+mallee
+mallemuck
+mallenders
+malleolus
+mallet
+mallet's
+mallets
+malleus
+mallorca
+Mallory
+mallow
+malls
+malm
+malmsey
+malnourished
+malnutrition
+malocclusion
+malodor
+malodorous
+malodorously
+malodorousness
+malolactic
+Malone
+Maloney
+Maloney's
+malonic
+malonylurea
+malory
+malpighi
+malpighiaceous
+Malpighian
+malposed
+malposition
+malpractice
+malpractitioner
+Malraux
+malt
+Malta
+maltase
+malted
+Maltese
+maltha
+malthus
+Malthus
+Malthusian
+malting
+maltman
+maltobionic
+Malton
+Malton's
+maltose
+maltreat
+maltreatment
+malts
+maltster
+malty
+maluku
+malvaceous
+malvasia
+malvasian
+malvern
+malversation
+malvoisie
+malwa
+Mam
+mama
+mamaguy
+mamba
+mambo
+mambos
+mamelon
+Mameluke
+mamilla
+mamillate
+mamma
+mamma's
+mammal
+mammal's
+mammalian
+mammalogist
+mammalogy
+mammals
+mammary
+mammas
+mammee
+mammer
+mammet
+mammies
+mammiferous
+mammilla
+mammillar
+mammillary
+mammillate
+mammillated
+mammock
+mammography
+mammon
+mammonism
+mammonist
+mammonite
+mammoth
+mammy
+mampara
+man
+man's
+mana
+manacle
+manacled
+manacles
+manacling
+manado
+manage
+manageability
+manageable
+manageableness
+manageably
+managed
+management
+management's
+managemental
+managements
+manager
+manager's
+manageress
+managerial
+managerialism
+managerially
+managers
+managership
+manages
+managing
+Managua
+manakin
+manassas
+manasseh
+manatee
+manaus
+manche
+Manchester
+manchet
+manchineel
+Manchu
+manchukuo
+manchuria
+Manchuria
+mancipation
+mancipatory
+manciple
+manciples
+Mancunian
+Mandaean
+mandala
+Mandalay
+mandamus
+mandamused
+mandamuses
+mandamusing
+mandarin
+mandarinate
+mandarinates
+mandarinic
+mandarinism
+mandarinize
+mandarinizes
+mandarins
+mandataries
+mandatary
+mandate
+mandated
+mandates
+mandating
+mandator
+mandatorial
+mandatories
+mandatorily
+mandatory
+Mande
+Mandelbrot
+Mandelbrot's
+Mandeville
+mandi
+mandible
+mandibular
+mandibulate
+Mandingo
+mandir
+mandola
+mandolin
+mandolin's
+mandolinist
+mandolinists
+mandolins
+mandorla
+mandragora
+mandrake
+mandrakes
+mandrel
+mandril
+mandrill
+manducate
+manducated
+manducates
+manducating
+mane
+mane's
+maned
+manege
+manes
+manet
+maneuver
+maneuverability
+maneuverable
+maneuvered
+maneuverer
+maneuvering
+maneuvers
+Manfred
+manful
+manfully
+manfulness
+mangabey
+mangalore
+manganate
+manganese
+manganesian
+manganic
+manganin
+manganite
+manganous
+mange
+mangel
+mangelwurzel
+manger
+manger's
+mangers
+mangier
+mangily
+manginess
+mangle
+mangled
+mangler
+mangles
+mangling
+mango
+mango's
+mangonel
+mangos
+mangosteen
+mangrove
+mangy
+manhandle
+manhandled
+manhandles
+manhandling
+Manhattan
+Manhattan's
+Manhattanize
+Manhattanizes
+manhole
+manholes
+manhood
+manhunt
+manhunts
+mani
+mania
+maniac
+maniac's
+maniacal
+maniacally
+maniacs
+manic
+manically
+Manichaeism
+manichaeus
+manicotti
+manicure
+manicured
+manicures
+manicuring
+manicurist
+manicurists
+manifest
+manifestant
+manifestation
+manifestation's
+manifestations
+manifested
+manifesting
+manifestly
+manifestness
+manifesto
+manifesto's
+manifestoed
+manifestoes
+manifestoing
+manifestos
+manifests
+manifold
+manifold's
+manifolder
+manifoldly
+manifoldness
+manifolds
+manikin
+manikins
+Manila
+Manila's
+manilla
+manille
+maninke
+manioc
+maniple
+manipulability
+manipulable
+manipular
+manipulatable
+manipulate
+manipulated
+manipulates
+manipulating
+manipulation
+manipulations
+manipulative
+manipulativeness
+manipulator
+manipulator's
+manipulators
+manipulatory
+manipur
+manisa
+Manitoba
+manitoulin
+manitowoc
+Manitowoc
+manizales
+mankind
+Mankowski
+mankowski
+manky
+manless
+Manley
+Manley's
+manlier
+manliest
+manlike
+manliness
+manly
+Mann
+Mann's
+manna
+mannar
+manned
+mannequin
+mannequins
+manner
+mannered
+Mannerheim
+mannerism
+mannerisms
+mannerist
+manneristic
+mannerize
+mannerizes
+mannerless
+mannerliness
+mannerly
+manners
+Mannheim
+mannikin
+manning
+mannish
+mannishly
+mannishness
+mannitic
+mannitol
+mannopyranosyl
+mannosyl
+manolete
+manometer
+manometer's
+manometers
+manometric
+manometrical
+manometrically
+manometry
+manor
+manor's
+manorial
+manorialism
+manors
+manpower
+manque
+manresa
+manrope
+manropes
+mans
+mansard
+mansarded
+mansart
+manse
+manservant
+Mansfield
+manship
+mansholt
+mansion
+mansion's
+mansions
+manslaughter
+manslayer
+mansuete
+mansuetude
+manteau
+mantegna
+mantel
+mantel's
+mantelet
+mantelletta
+mantelpiece
+mantels
+mantelshelf
+manteltree
+mantic
+mantilla
+mantinea
+mantis
+mantises
+mantissa
+mantissa's
+mantissas
+mantle
+mantle's
+mantled
+mantlepiece
+Mantler
+mantles
+mantling
+mantoux
+mantova
+mantra
+mantrap
+mantua
+manual
+manual's
+manually
+manuals
+manubrium
+manuduction
+manuductory
+Manuel
+Manuel's
+manufactory
+manufacturable
+manufacture
+manufactured
+manufacturer
+manufacturer's
+manufacturers
+manufactures
+manufacturing
+Manuguerra
+manuka
+manukau
+manumission
+manumit
+manumitted
+manumitting
+manure
+manured
+manurer
+manurers
+manures
+manurial
+manuring
+manus
+manuscript
+manuscript's
+manuscriptal
+manuscripts
+manutius
+Manville
+manward
+manwards
+manwise
+Manx
+Manxman
+many
+manyfold
+manyplies
+manzanilla
+manzanita
+manzoni
+Mao
+maoism
+Maori
+map
+map's
+maple
+maple's
+maplecrest
+Maplecrest
+maples
+mapmaker
+mapmakers
+mapmaking
+mappable
+mapped
+mapper
+mappery
+mapping
+mapping's
+mappings
+mappist
+mappists
+maps
+maputo
+maquette
+maquillage
+maquis
+Mar
+mar
+mara
+marabou
+Marabout
+marabunta
+maraca
+Maracaibo
+maracanda
+maracay
+maraging
+marasca
+maraschino
+marasmic
+marasmus
+marat
+Maratha
+Marathi
+marathon
+marathons
+maraud
+marauder
+marauders
+marauding
+marauds
+maravedi
+marble
+marbled
+marbleize
+marbleized
+marbleizes
+marbleizing
+marbler
+marbles
+marbling
+marbly
+Marburg
+Marc
+Marc's
+marcasite
+Marceau
+Marceau's
+Marcel
+marcelled
+marcelling
+Marcello
+Marcello's
+marcellus
+marcescent
+march
+marche
+marched
+marcher
+marches
+marchesa
+marchese
+marching
+marchioness
+Marchland
+marchpane
+Marcia
+Marcia's
+Marciano
+Marcie
+Marcie's
+Marcionism
+Marco
+Marco's
+Marconi
+marconigram
+marconigram's
+marconigrams
+marcos
+marcotte
+Marcotte
+Marcus
+marcuse
+Marcy
+Mardi
+Mardis
+marduk
+mardy
+mare
+mare's
+maremma
+Marengo
+Marenzio
+mares
+marg
+Margaret
+Margaret's
+margaric
+margarine
+margarita
+margarite
+margate
+Margaux
+Margay
+Marge
+Margery
+Margery's
+margin
+margin's
+marginal
+marginalia
+marginality
+marginalization
+marginalize
+marginalized
+marginalizes
+marginalizing
+marginally
+marginals
+marginate
+marginated
+marginates
+marginating
+margination
+marginations
+margined
+margining
+margins
+Margo
+Margo's
+margravate
+margrave
+margravine
+margrethe
+Marguerite
+maria
+Maria's
+mariachi
+Marian
+Marian's
+Mariana
+marianao
+Marianne
+Marianne's
+maribor
+mariculture
+Marie
+Marie's
+Mariehamn
+Marienbad
+Marietta
+marigold
+marigold's
+marigolds
+marijuana
+marijuana's
+Marilyn
+marimba
+Marin
+marina
+marinade
+marinades
+marinas
+marinate
+marinated
+marinates
+marinating
+Marinduque
+marine
+mariner
+marines
+Marinetti
+Marino
+Mario
+Mariolatry
+Mariology
+Marion
+marionette
+marionettes
+mariposa
+marish
+Marissa
+Marissa's
+Marist
+maritage
+maritain
+marital
+maritally
+maritime
+maritimer
+maritsa
+Mariupol
+Marius
+Marivaux
+marjoram
+Marjorie
+Marjory
+Marjory's
+mark
+Mark's
+markable
+markdown
+marked
+markedly
+marker
+markers
+market
+marketability
+marketable
+marketed
+marketeer
+marketeer's
+marketeering
+marketeers
+marketer
+marketing
+marketings
+marketplace
+marketplace's
+marketplaces
+markets
+marketwise
+Markevitch
+Markham
+Markham's
+Markhor
+marking
+markings
+Markism
+Markism's
+Markka
+Markov
+Markova
+Markovian
+Markovitz
+markovitz
+marks
+marksman
+marksmanship
+marksmen
+markswoman
+markswomen
+markup
+markups
+marl
+Marlborough
+Marlene
+Marley
+marlin
+marline
+marlite
+Marlow
+Marlowe
+marmalade
+marmalades
+marmara
+marmite
+marmolada
+marmoreal
+marmoreally
+marmorean
+marmoset
+marmoset's
+marmosets
+marmot
+maroc
+marocain
+Maronite
+maroon
+marooned
+maroquin
+maros
+marplot
+marprelate
+marquand
+marque
+marquee
+marquees
+Marquesan
+marquesas
+marquess
+marquessate
+marquesses
+marquet
+Marquette
+marquis
+marquisate
+marquise
+marquises
+marquisette
+Marrakech
+Marrakesh
+marram
+marrano
+marred
+marriage
+marriage's
+marriageability
+marriageable
+marriages
+married
+marries
+Marriner
+marring
+Marriott
+marron
+marrow
+marrowbone
+marrowbones
+marrowfat
+marrowless
+marrows
+marrowy
+marry
+marryat
+marrying
+mars
+Marsala
+marse
+Marseillaise
+Marseille
+Marseilles
+marsh
+marsh's
+Marsha
+marshal
+marshalcy
+marshaled
+marshaler
+marshalers
+marshaling
+Marshall
+Marshalled
+Marshalling
+marshals
+Marshalsea
+marshalship
+marshes
+marshier
+marshiness
+marshland
+marshlands
+marshmallow
+marshmallows
+marshmallowy
+marshy
+marsilius
+marsipobranch
+Marston
+marsupial
+marsupial's
+marsupialization
+marsupialization's
+marsupializations
+marsupialize
+marsupializes
+marsupials
+marsupium
+mart
+martaban
+martagon
+martel
+martellato
+martello
+marten
+martens
+martensite
+martensitic
+martensitically
+Martha
+martial
+martialization
+martialization's
+martializations
+martialize
+martializes
+martially
+Martian
+Martians
+Martin
+martin
+martineau
+martinet
+Martinez
+martingale
+martini
+Martinique
+martinis
+Martinmas
+Martinon
+Martinson
+martlet
+Marton
+marts
+Marty
+martyr
+martyr's
+martyrdom
+martyrization
+martyrization's
+martyrizations
+martyrize
+martyrized
+martyrizer
+martyrizers
+martyrizes
+martyrizing
+martyrologies
+martyrologist
+martyrologists
+martyrology
+martyrs
+martyry
+marvel
+marveled
+marveler
+marveling
+marvell
+marvelous
+marvelously
+marvelousness
+marvels
+Marvin
+Marx
+Marxian
+Marxism
+Marxisms
+Marxist
+marxists
+Mary
+Mary's
+Maryland
+Maryland's
+Marylanders
+marzipam
+marzipan
+masaccio
+Masai
+masan
+masaryk
+masbate
+Mascagni
+mascara
+mascaras
+mascarene
+mascle
+mascon
+mascot
+mascot's
+mascots
+masculine
+masculinely
+masculineness
+masculinity
+masculinization
+masculinization's
+masculinizations
+masculinize
+masculinized
+masculinizes
+masculinizing
+Masefield
+maser
+Maserati
+Maserati's
+Maseratis
+mash
+masharbrum
+mashed
+masher
+mashers
+mashes
+mashhad
+mashie
+mashing
+mashings
+masinissa
+masjid
+mask
+maskable
+maskanonge
+masked
+masker
+masking
+maskings
+masks
+masochism
+masochist
+masochist's
+masochistic
+masochistically
+masochists
+mason
+mason's
+masoned
+Masonic
+masoning
+Masonite
+masonry
+masons
+masqat
+masque
+masquer
+masquerade
+masquerader
+masquerades
+masquerading
+masquers
+masques
+mass
+massa
+massachuset
+Massachusetts
+massacre
+massacred
+massacrer
+massacres
+massacring
+massage
+massaged
+massager
+massages
+massaging
+massasauga
+massasoit
+Massawa
+massbus
+massed
+Massenet
+masses
+masseter
+masseteric
+masseur
+masseurs
+masseuse
+Massey
+Massey's
+massicot
+massif
+massifs
+massine
+massing
+massinger
+massinissa
+massive
+massively
+massiveness
+massless
+massorete
+massotherapy
+massy
+mast
+mastaba
+mastectomies
+mastectomy
+masted
+master
+master's
+mastered
+masterful
+masterfully
+masterfulness
+mastering
+masterings
+masterliness
+masterly
+mastermind
+masterminded
+masterminding
+masterminds
+masterpiece
+masterpiece's
+masterpieces
+masters
+mastership
+mastersinger
+mastersingers
+masterstroke
+masterstrokes
+masterwork
+mastery
+masthead
+mastic
+masticate
+masticated
+masticates
+masticating
+mastication
+mastications
+masticator
+masticators
+masticatory
+mastiff
+mastigophoran
+mastitic
+mastitis
+mastodon
+mastodonic
+mastodons
+mastodont
+mastoid
+mastoidectomy
+mastoideus
+mastoiditis
+masts
+masturbate
+masturbated
+masturbates
+masturbating
+masturbation
+masturbational
+masturbatory
+masuria
+masurium
+mat
+mat's
+Matabele
+Matabeleland
+matadi
+matador
+matamoros
+matanzas
+matapan
+match
+matchable
+matchboard
+matchboarding
+matchbook
+matchbox
+matched
+matcher
+matchers
+matches
+matching
+matchings
+matchless
+matchlessly
+matchlock
+matchmake
+matchmaker
+matchmaker's
+matchmakers
+matchmaking
+matchmaking's
+matchmark
+matchstick
+matchwood
+mate
+mate's
+mated
+matelote
+Mateo
+Mateo's
+mater
+materfamilias
+material
+materialism
+materialism's
+materialist
+materialistic
+materialistically
+materiality
+materialization
+materialization's
+materializations
+materialize
+materialized
+materializer
+materializers
+materializes
+materializing
+materially
+materialness
+materials
+materiel
+maternal
+maternalize
+maternalizes
+maternally
+maternity
+mates
+matey
+math
+mathematic
+mathematical
+mathematically
+mathematician
+mathematician's
+mathematicians
+mathematicize
+mathematicizes
+mathematics
+mathematization
+Mathews
+Mathewson
+Mathias
+Mathieu
+Mathis
+maths
+mathura
+Matilda
+matinal
+matinee
+mating
+matings
+matins
+Matisse
+Matisses
+matlo
+matlock
+mato
+matoke
+matopo
+Matorin
+matozinhos
+matrass
+matriarch
+matriarchal
+matriarchate
+matriarchy
+matric
+matrices
+matricidal
+matricide
+matriclinous
+matriculant
+matriculate
+matriculated
+matriculates
+matriculating
+matriculation
+matrilineal
+matrilineally
+matrilocal
+matrimonial
+matrimonially
+matrimony
+matrix
+matrixes
+matroclinous
+matroid
+matron
+matronage
+matronize
+matronized
+matronizes
+matronizing
+matronly
+matronymic
+mats
+Matson
+Matson's
+matsu
+Matsumoto
+Matsumoto's
+matsuyama
+matt
+Matt
+Matt's
+mattamore
+matte
+matted
+mattei
+matter
+mattered
+matterhorn
+mattering
+matters
+mattery
+Matthew
+Matthews
+matthias
+Mattie
+mattie
+Mattila
+matting
+mattins
+mattock
+mattoid
+mattrass
+mattress
+mattress's
+mattresses
+Mattson
+Mattson's
+maturate
+maturated
+maturates
+maturating
+maturation
+maturational
+maturations
+maturative
+mature
+matured
+maturely
+matureness
+maturer
+matures
+maturing
+maturities
+maturity
+matutinal
+matutinally
+matzo
+matzoon
+matzos
+maubeuge
+mauby
+Mauceri
+Maud
+maude
+Maude
+maudlin
+maudlinism
+maudlinisms
+maudlinize
+maudlinizes
+maudlinly
+Maugham
+maugre
+maui
+maul
+maulana
+mauler
+maulers
+mauling
+maulmain
+mauls
+maulstick
+maumet
+mauna
+maund
+maunder
+maundy
+maungy
+maupassant
+maupertuis
+Maureen
+mauretania
+mauriac
+Maurice
+mauricio
+Mauricio
+Maurine
+Maurine's
+Maurist
+Mauritania
+Mauritius
+maurois
+maury
+maurya
+Mauser
+mausoleum
+mausoleums
+mauve
+maverick
+mavericks
+Mavis
+Mavourneen
+maw
+mawger
+mawkin
+mawkish
+mawkishly
+mawkishness
+Mawr
+mawsie
+Mawson
+max
+maxi
+maxilla
+maxillae
+maxillary
+maxillas
+maxilliped
+maxillipede
+maxim
+Maxim
+maxim's
+maxima
+maximal
+maximalist
+maximally
+Maximilian
+maximin
+maximization
+maximization's
+maximizations
+maximize
+maximized
+maximizer
+maximizers
+maximizes
+maximizing
+maxims
+maximum
+maximumly
+maximums
+maximus
+Maxine
+maxint
+maxisingle
+maxixe
+Maxtor
+Maxtor's
+maxwell
+Maxwellian
+May
+may
+Maya
+Mayakovski
+Mayan
+Mayans
+mayapple
+maybe
+mayday
+Mayen
+mayence
+Mayer
+mayer
+Mayer's
+mayest
+Mayfair
+mayflower
+Mayflower
+mayfly
+mayhap
+mayhem
+maying
+Maynard
+Mayo
+Mayo's
+mayon
+mayonnaise
+mayor
+mayor's
+mayoral
+mayoralty
+mayoress
+mayors
+mayorship
+Mayotte
+maypole
+mays
+mayst
+mazard
+mazarin
+Mazda
+Mazdaism
+maze
+maze's
+mazed
+mazedly
+mazedness
+mazednesses
+mazer
+mazes
+mazing
+mazuma
+mazurka
+mazurka's
+mazurkas
+mazy
+mazzard
+mazzini
+MBA
+Mbujimayi
+McAdams
+Mcadams
+McAllister
+Mcallister
+Mcallister's
+McAllister's
+McBride
+Mcbride
+McBride's
+Mcbride's
+Mccabe
+McCabe
+Mccabe's
+McCabe's
+Mccall
+McCall
+McCall's
+Mccall's
+McCallum
+Mccallum
+Mccallum's
+McCallum's
+Mccann
+McCann
+Mccann's
+McCann's
+Mccarthy
+McCarthy
+McCarthy's
+Mccarthy's
+Mccarthyism
+Mccartney
+McCarty
+Mccarty
+McCarty's
+Mccarty's
+McCauley
+Mccauley
+McCauley's
+Mccauley's
+Mcclain
+McClain
+Mcclain's
+McClain's
+McClellan
+Mcclellan
+McClellan's
+Mcclellan's
+Mcclure
+McClure
+Mcclure's
+McClure's
+McCluskey
+Mccluskey
+Mccluskey's
+McCluskey's
+McConnel
+Mcconnel
+Mcconnel's
+McConnel's
+McConnell
+Mcconnell
+McConnell's
+Mcconnell's
+Mccormack
+McCormick
+Mccormick
+Mccormick's
+McCormick's
+McCoy
+Mccoy
+Mccoy's
+McCoy's
+McCracken
+Mccracken
+McCracken's
+Mccracken's
+Mccullers
+McCullough
+Mccullough
+Mccullough's
+McCullough's
+Mcdaniel
+McDaniel
+McDaniel's
+Mcdaniel's
+McDermott
+Mcdermott
+McDermott's
+Mcdermott's
+Mcdiarmid
+McDonald
+Mcdonald
+Mcdonald's
+McDonald's
+McDonnell
+Mcdonnell
+McDonnell's
+Mcdonnell's
+Mcdougall
+McDougall
+Mcdougall's
+McDougall's
+McDowell
+Mcdowell
+McDowell's
+Mcdowell's
+McElhaney
+McElhaney's
+McElroy
+Mcelroy
+McElroy's
+Mcelroy's
+Mcfadden
+McFadden
+Mcfadden's
+McFadden's
+Mcfarland
+McFarland
+McFarland's
+Mcfarland's
+McGee
+Mcgee
+Mcgee's
+McGee's
+McGill
+Mcgill
+McGill's
+Mcgill's
+McGillicuddy
+McGillicuddy's
+Mcginnis
+McGinnis
+McGinty
+McGinty's
+Mcgonagall
+Mcgovern
+McGovern
+Mcgovern's
+McGovern's
+Mcgowan
+McGowan
+Mcgowan's
+McGowan's
+Mcgrath
+McGrath
+McGrath's
+Mcgrath's
+McGraw
+Mcgraw
+McGraw's
+Mcgraw's
+Mcgregor
+McGregor
+Mcgregor's
+McGregor's
+McGuire
+Mcguire
+Mcguire's
+McGuire's
+Mchugh
+McHugh
+McHugh's
+Mchugh's
+McIntosh
+Mcintosh
+Mcintosh's
+McIntosh's
+Mcintyre
+McIntyre
+McIntyre's
+Mcintyre's
+McKay
+Mckay
+Mckay's
+McKay's
+Mckee
+McKee
+Mckee's
+McKee's
+Mckenna
+McKenna
+Mckenna's
+McKenna's
+McKenzie
+Mckenzie
+Mckenzie's
+McKenzie's
+Mckeon
+McKeon
+McKeon's
+Mckeon's
+McKesson
+Mckesson
+Mckesson's
+McKesson's
+McKinley
+Mckinley
+Mckinley's
+McKinley's
+McKinney
+Mckinney
+McKinney's
+Mckinney's
+Mcknight
+McKnight
+Mcknight's
+McKnight's
+McLanahan
+Mclaughlin
+McLaughlin
+McLaughlin's
+Mclaughlin's
+Mclean
+McLean
+Mclean's
+McLean's
+Mcleod
+McLeod
+Mcleod's
+McLeod's
+Mcluhan
+Mclure
+Mcmahon
+McMahon
+McMahon's
+Mcmahon's
+McMartin
+McMartin's
+McMillan
+Mcmillan
+Mcmillan's
+McMillan's
+Mcmullen
+McMullen
+McMullen's
+Mcmullen's
+Mcmunn
+Mcmurdo
+McNair
+McNally
+Mcnally
+Mcnally's
+McNally's
+Mcnaughten
+McNaughton
+Mcnaughton
+Mcnaughton's
+McNaughton's
+Mcneil
+McNeil
+Mcneil's
+McNeil's
+McNulty
+Mcnulty
+McNulty's
+Mcnulty's
+Mcpherson
+McPherson
+Mcpherson's
+McPherson's
+Mcqueen
+MD
+MDs
+MDT
+me
+mea
+mead
+Meade
+meadow
+meadow's
+meadowland
+meadowlark
+meadowlark's
+meadowlarks
+meadows
+meadowsweet
+meads
+meager
+meagerly
+meagerness
+meagre
+meal
+meal's
+mealie
+mealier
+mealies
+meals
+mealtime
+mealworm
+mealy
+mealymouth
+mealymouthed
+mealymouthedly
+mealymouthedness
+mealymouthednesses
+mean
+meander
+meandered
+meandering
+meanderings
+meanders
+meandrous
+meaner
+meanest
+meaning
+meaning's
+meaningful
+meaningfully
+meaningfulness
+meaningless
+meaninglessly
+meaninglessness
+meanings
+meanly
+meanness
+means
+meant
+meantime
+meanwhile
+meany
+measle
+measled
+measles
+measlier
+measly
+measurability
+measurable
+measurably
+measure
+measured
+measuredly
+measureless
+measurement
+measurement's
+measurements
+measurer
+measures
+measuring
+meat
+meat's
+meatball
+meatballs
+meath
+meatier
+meatiest
+meatiness
+meatman
+meatmen
+meats
+meatus
+meaty
+mecamylamine
+mecca
+Meccano
+mech
+mechanic
+mechanic's
+mechanical
+mechanicalization
+mechanicalization's
+mechanicalizations
+mechanicalize
+mechanicalizes
+mechanically
+mechanicals
+mechanician
+mechanics
+mechanism
+mechanism's
+mechanisms
+mechanist
+mechanistic
+mechanistically
+mechanizable
+mechanization
+mechanization's
+mechanizations
+mechanize
+mechanized
+mechanizer
+mechanizers
+mechanizes
+mechanizing
+mechanochemically
+mechanoreceptor
+mechanotherapy
+mechelen
+Mechem
+Mechlin
+mecholyl
+meck
+Mecklenburg
+meconium
+mecum
+med
+medal
+medal's
+medaled
+medaling
+medalist
+medalists
+medalize
+medalizes
+medallic
+medallion
+medallion's
+medallions
+medals
+medan
+medawar
+meddle
+meddled
+meddler
+meddles
+meddlesome
+meddlesomeness
+meddling
+Mede
+Medea
+Medfield
+Medford
+Medford's
+media
+mediacy
+mediad
+mediae
+medial
+medialization
+medialization's
+medializations
+medialize
+medializes
+medially
+median
+median's
+medianly
+medians
+mediant
+medias
+mediastinum
+mediate
+mediated
+mediately
+mediateness
+mediates
+mediating
+mediation
+mediational
+mediations
+mediative
+mediatization
+mediatization's
+mediatizations
+mediatize
+mediatized
+mediatizes
+mediatizing
+mediator
+mediatorial
+mediators
+mediatorship
+mediatory
+mediatress
+mediatresses
+mediatrice
+mediatrix
+medic
+medic's
+medicable
+medicably
+Medicaid
+medicaid
+medical
+medically
+medicament
+medicamented
+medicamenting
+medicamentous
+medicaments
+medicare
+Medicare
+medicate
+medicated
+medicates
+medicating
+medication
+medications
+medicative
+Medici
+medicinable
+medicinal
+medicinally
+medicine
+medicine's
+medicines
+Medicis
+medico
+medicolegal
+medicos
+medics
+medieval
+medieval's
+medievalise
+medievalises
+medievalism
+medievalism's
+medievalisms
+medievalist
+medievalist's
+medievalistic
+medievalistics
+medievalists
+medievalize
+medievalizes
+medievally
+medievals
+Medina
+mediocre
+mediocrities
+mediocrity
+meditate
+meditated
+meditates
+meditating
+meditation
+meditations
+meditative
+meditatively
+meditativeness
+meditator
+Mediterranean
+Mediterraneanization
+Mediterraneanization's
+Mediterraneanizations
+Mediterraneanize
+Mediterraneanizes
+medium
+medium's
+mediumistic
+mediumization
+mediumization's
+mediumizations
+mediumize
+mediumizes
+mediums
+mediumship
+medlar
+medlars
+medley
+medleys
+medulla
+medullary
+medullated
+Medusa
+Medusa's
+medusae
+Medusan
+medusoid
+medway
+mee
+meed
+meek
+meeker
+meekest
+meekly
+meekness
+meerkat
+meerschaum
+meerut
+meet
+meeter
+meeting
+meetinghouse
+meetings
+meetly
+meets
+Meg
+Meg's
+mega
+megabit
+megabits
+megabuck
+megabyte
+megabytes
+megacephaly
+megacycle
+megadeath
+Megaera
+megaflop
+megaflops
+megagamete
+megagametophyte
+megahertz
+megakaryocyte
+megakaryocytic
+megalith
+megalithic
+megaloblast
+megaloblastic
+megalocardia
+megalocephaly
+megalomania
+megalomaniac
+megalomaniacal
+megalomaniacally
+megalomanic
+megalopolis
+megalopolises
+megalopolistic
+megalopolitan
+megalopolitanism
+megalopteran
+megalopterous
+megalosaur
+megaparsec
+megaphone
+megaphonic
+megapode
+megapolis
+megapolitan
+megara
+megarians
+megaron
+megascopic
+megascopically
+megasporangium
+megaspore
+megasporic
+megasporogenesis
+megasporophyll
+megathere
+megaton
+megatons
+megavolt
+megawatt
+megaword
+megawords
+megger
+meghalaya
+megiddo
+megillah
+megilp
+megohm
+megohms
+megrim
+megrims
+mehemet
+Mehta
+Meier
+Meier's
+Meiji
+meilhac
+meiny
+meiosis
+meiotic
+meiotically
+meir
+Meissen
+Meister
+meister
+Meistersinger
+meitner
+mekka
+Mekong
+Mel
+Melaleuca
+melamine
+Melampus
+melancholia
+melancholiac
+melancholic
+melancholically
+melancholy
+melanchthon
+Melanesia
+Melanesian
+melange
+melanic
+Melanie
+melanin
+melanism
+melanist
+melanistic
+melanite
+melanitic
+melanization
+melanize
+melanized
+melanizes
+melanizing
+melanoblast
+melanoblastic
+melanoblastoma
+Melanochroi
+melanochroic
+melanocyte
+melanogenesis
+melanoid
+melanoma
+melanophore
+melanosis
+melanotic
+melanous
+melaphyre
+melatonin
+melba
+Melbourne
+Melcher
+Melcher's
+melchior
+Melchite
+Melchizedek
+meld
+melding
+melds
+Meleager
+melee
+meliaceous
+melic
+melies
+melilla
+melilot
+Melinda
+melinite
+meliorate
+meliorated
+meliorates
+meliorating
+melioration
+meliorations
+meliorative
+meliorator
+meliorism
+meliorist
+melioristic
+Melisande
+melisma
+Melissa
+Melitopol
+mell
+melliferous
+mellifluent
+mellifluently
+mellifluous
+mellifluously
+mellifluousness
+mellitin
+Mellon
+mellophone
+mellow
+mellowed
+mellowing
+mellowly
+mellowness
+mellows
+melodeon
+melodic
+melodically
+melodies
+melodious
+melodiously
+melodiousness
+melodist
+melodization
+melodize
+melodized
+melodizer
+melodizes
+melodizing
+melodrama
+melodrama's
+melodramas
+melodramatic
+melodramatically
+melodramatics
+melodramatist
+melodramatization
+melodramatize
+melodramatized
+melodramatizes
+melodramatizing
+melody
+melody's
+meloid
+melon
+melon's
+melons
+melos
+Melpomene
+Melpomene's
+melt
+meltability
+meltable
+meltage
+meltdown
+meltdown's
+melted
+melter
+melting
+meltingly
+Melton
+melts
+meltwater
+meltwaters
+Melungeon
+Melville
+Melvin
+mem
+member
+member's
+membered
+members
+membership
+membership's
+memberships
+membranal
+membrane
+membrane's
+membraned
+membraneless
+membranes
+membranous
+membranously
+meme
+memel
+memento
+mementoes
+mementos
+memling
+Memnon
+memo
+memo's
+memoir
+memoire
+memoirs
+memorabilia
+memorability
+memorable
+memorableness
+memorably
+memoranda
+memorandum
+memorandums
+memorex
+memorial
+memorialist
+memorialization
+memorialization's
+memorializations
+memorialize
+memorialized
+memorializer
+memorializers
+memorializes
+memorializing
+memorially
+memorials
+memoriam
+memories
+memoriter
+memorizable
+memorizable's
+memorizables
+memorization
+memorization's
+memorizations
+memorize
+memorized
+memorizer
+memorizers
+memorizes
+memorizing
+memory
+memory's
+memoryless
+memos
+Memphian
+Memphis
+memphremagog
+memsahib
+men
+men's
+menace
+menaced
+menaces
+menacing
+menacingly
+menadione
+menado
+menagerie
+menageries
+menai
+menam
+menander
+menaquinone
+menarche
+menarcheal
+menarches
+mencius
+Mencken
+mencken
+menckenese
+mend
+mendable
+mendacious
+mendaciously
+mendaciousness
+mendacity
+mended
+Mendel
+Mendel's
+mendelevium
+Mendeleyev
+Mendelian
+Mendelism
+Mendelize
+Mendelizes
+Mendelssohn
+mender
+menderes
+mendicancies
+mendicancy
+mendicant
+mendicants
+mendicities
+mendicity
+mending
+mendips
+Mendoza
+mendoza
+mends
+Menelaus
+Menelik
+menes
+menfolk
+menfolks
+Mengelberg
+mengistu
+menhaden
+menhir
+menial
+menially
+menials
+meningeal
+meninges
+meningitic
+meningitis
+meningocele
+meningococcal
+meningococcic
+meninx
+menisci
+meniscus
+meniscuses
+menispermaceous
+Menlo
+Mennonite
+Mennonites
+meno
+menology
+Menominee
+menominee
+menomini
+menon
+menopausal
+menopause
+menorah
+Menorca
+menorrhagia
+menorrhagic
+menotti
+mens
+mensa
+mensal
+mensch
+Mensch
+mense
+mensed
+menseful
+menseless
+menservants
+menses
+Menshevik
+mensing
+menstrual
+menstruate
+menstruated
+menstruates
+menstruating
+menstruation
+menstruations
+menstruous
+menstruum
+mensurability
+mensurable
+mensurableness
+mensural
+mensuration
+mensurational
+mensurations
+menswear
+mental
+mentalism
+mentalist
+mentalities
+mentality
+mentalization
+mentalization's
+mentalizations
+mentalize
+mentalizes
+mentally
+mentation
+mentations
+menthol
+mentholated
+mention
+mentionable
+mentioned
+mentioner
+mentioners
+mentioning
+mentions
+Menton
+mentor
+mentor's
+mentors
+mentorship
+mentum
+menu
+menu's
+menuhin
+menus
+Menzies
+meow
+meow's
+meowed
+meowing
+meows
+mepacrine
+meperidine
+Mephistopheles
+mephitic
+mephitis
+meprobamate
+mer
+merano
+merbromin
+merca
+mercantile
+mercantilism
+mercantilist
+mercantilistic
+mercaptan
+mercaptide
+mercaptopurine
+Mercator
+Mercedes
+mercenaries
+mercenarily
+mercenariness
+mercenary
+mercenary's
+mercer
+mercerization
+mercerization's
+mercerizations
+mercerize
+mercerized
+mercerizer
+mercerizers
+mercerizes
+mercerizing
+mercers
+mercery
+merchandise
+merchandised
+merchandiser
+merchandises
+merchandising
+merchant
+merchant's
+merchantability
+merchantable
+merchantman
+merchantmen
+merchants
+merchet
+mercia
+Mercian
+mercians
+mercies
+merciful
+mercifully
+mercifulness
+merciless
+mercilessly
+mercilessness
+Merck
+Merck's
+Mercouri
+mercurate
+mercurated
+mercurates
+mercurating
+mercuration
+mercurations
+mercurial
+mercurialization
+mercurialization's
+mercurializations
+mercurialize
+mercurializes
+mercurially
+mercurialness
+Mercurian
+mercuric
+mercuries
+Mercurochrome
+mercurous
+mercury
+mercy
+mere
+Meredith
+merely
+merengue
+merest
+meretricious
+meretriciously
+meretriciousness
+merganser
+merge
+merged
+mergence
+mergences
+merger
+mergers
+merges
+merging
+mergui
+meridian
+meridians
+meridional
+meridionally
+meringue
+meringues
+merino
+Merionethshire
+meristem
+meristic
+meristically
+merit
+merited
+meriting
+meritocracy
+meritocratic
+meritorious
+meritoriously
+meritoriousness
+merits
+Meriwether
+meriwether
+merkin
+Merle
+merlin
+merlon
+mermaid
+mermaid's
+mermaids
+merman
+merman's
+mermen
+meroblastic
+meroblastically
+merocrine
+meromorphic
+meromyosin
+meroplankton
+Merovingian
+merozoite
+Merriam
+Merrick
+merrick
+merrier
+merriest
+Merrill
+merrily
+merrimac
+Merrimac
+Merrimack
+merriment
+merriments
+merriness
+Merritt
+Merritt's
+merry
+merrymake
+merrymaker
+merrymaking
+merryman
+merrythought
+merse
+Merseburg
+Mersey
+Merseyside
+mersin
+merthyr
+Merton
+Mervin
+Mervin's
+mesa
+mesarch
+mescal
+mescaline
+mesdames
+mesdemoiselles
+meseems
+Mesembryanthemum
+mesencephalon
+mesenchyme
+mesenteric
+mesenteritis
+mesenteron
+mesentery
+mesh
+meshach
+meshed
+meshes
+meshing
+meshuga
+meshwork
+meshy
+mesial
+mesially
+mesic
+mesically
+mesitylene
+mesmeric
+mesmerically
+mesmerism
+mesmerisms
+mesmerist
+mesmerists
+mesmerizabilities
+mesmerizability
+mesmerizability's
+mesmerizable
+mesmerizable's
+mesmerizables
+mesmerization
+mesmerization's
+mesmerizations
+mesmerize
+mesmerized
+mesmerizer
+mesmerizers
+mesmerizes
+mesmerizing
+mesnalty
+mesne
+mesobenthos
+mesoblast
+mesoblastic
+mesocarp
+mesocephalic
+mesocratic
+mesoderm
+mesodermal
+mesodermic
+mesogastrium
+mesoglea
+mesognathous
+mesolithic
+mesolonghi
+mesomeric
+mesomerism
+mesomorph
+mesomorphic
+mesomorphism
+mesomorphy
+meson
+mesonephric
+mesonephros
+mesonic
+mesopause
+mesopelagic
+mesophase
+mesophases
+mesophyll
+mesophyte
+Mesopotamia
+mesosome
+mesosphere
+mesospheric
+mesothelioma
+mesothelium
+mesothoracic
+mesothorax
+mesothorium
+mesotron
+mesotronic
+mesotrophic
+Mesozoic
+Mesple
+mesquite
+mess
+message
+message's
+messaged
+messages
+messaging
+messalina
+messaline
+Messapian
+messed
+messene
+messenger
+messenger's
+messengers
+messenia
+messes
+messiaen
+messiah
+messiahs
+messiahship
+messianic
+messianism
+messier
+messiest
+messieurs
+messily
+messina
+messiness
+messing
+messmate
+messmates
+Messrs
+messuage
+messuages
+messy
+mestee
+mester
+mestizo
+mestranol
+met
+meta
+metabole
+metabolic
+metabolically
+metabolism
+metabolisms
+metabolite
+metabolites
+metabolizable
+metabolizable's
+metabolizables
+metabolize
+metabolized
+metabolizes
+metabolizing
+metacarpal
+metacarpus
+metacenter
+metacentres
+metacentric
+metacharacter
+metacharacters
+metachromatic
+metachromatism
+metacinnabarite
+metacircular
+metacircularity
+metaethical
+metaethics
+metafemale
+metagalactic
+metagalaxies
+metagalaxy
+metagenesis
+metagenetic
+metagenetically
+metagnathous
+metagram
+metagram's
+metagrams
+metal
+metal's
+metalanguage
+metalanguages
+metaled
+metalicities
+metalicity
+metalicity's
+metaling
+metalization
+metalization's
+metalizations
+metalize
+metalized
+metalizes
+metalizing
+metallic
+metallically
+metallicize
+metallicizes
+metalliferous
+metallike
+metalline
+metallist
+metallists
+metallocene
+metallographer
+metallographic
+metallographically
+metallographist
+metallography
+metalloid
+metalloidal
+metallophone
+metallurgic
+metallurgical
+metallurgically
+metallurgist
+metallurgists
+metallurgy
+metals
+metalsmith
+metalsmithes
+metalware
+metalwork
+metalworker
+metalworking
+metalworkings
+metamale
+metamathematical
+metamathematician
+metamathematics
+metamer
+metamere
+metameric
+metamerically
+metamerism
+metamerization
+metamerization's
+metamerizations
+metamerized
+metamerized's
+metamerizeds
+metamorphic
+metamorphically
+metamorphism
+metamorphose
+metamorphosed
+metamorphosis
+metanephric
+metanephros
+metanotion
+metanotions
+metaperiodate
+metaph
+metaphase
+metaphonize
+metaphonizes
+metaphor
+metaphor's
+metaphoric
+metaphorical
+metaphorically
+metaphorize
+metaphorizes
+metaphors
+metaphosphate
+metaphosphoric
+metaphrase
+metaphrast
+metaphysic
+metaphysical
+metaphysically
+metaphysician
+metaphysicize
+metaphysicizes
+metaphysics
+metaplasia
+metaplasm
+metaplasmic
+metaplastic
+metapolitics
+metaproduction
+metaproductions
+metaprotein
+metapsychological
+metapsychology
+metasomatic
+metasomatically
+metasomatism
+metastability
+metastable
+metastably
+metastasis
+metastasize
+metastasized
+metastasizes
+metastasizing
+metastatic
+metastatically
+metasymbol
+metasymbols
+metasyntax
+metasyntaxes
+metatarsal
+metatarsally
+metatarsus
+metate
+metatheory
+metatherian
+metathesis
+metathetic
+metathetical
+metathetically
+metathoracic
+metathorax
+metavariable
+metaxylem
+metazoa
+metazoal
+metazoan
+Metcalf
+Metcalf's
+metchnikoff
+mete
+meted
+metempirical
+metempirics
+metempsychosis
+metencephalic
+metencephalon
+meteor
+meteor's
+meteoric
+meteorically
+meteorite
+meteorites
+meteoritic
+meteoritical
+meteoritics
+meteorization
+meteorization's
+meteorizations
+meteorize
+meteorizes
+meteorograph
+meteorographic
+meteoroid
+meteoroid's
+meteoroidal
+meteoroids
+meteorol
+meteorologic
+meteorological
+meteorologicaly
+meteorologist
+meteorology
+meteors
+meter
+meter's
+metered
+metering
+meters
+metes
+metestrus
+methacrylate
+methacrylic
+methadon
+methadone
+methaemoglobin
+methamphetamine
+methane
+methanol
+methanolic
+metheglin
+methenamine
+methinks
+methionine
+metho
+method
+method's
+methodic
+methodical
+methodically
+methodicalness
+methodism
+methodist
+methodist's
+methodistic
+methodists
+methodius
+methodization
+methodization's
+methodizations
+methodize
+methodized
+methodizer
+methodizers
+methodizes
+methodizing
+methodological
+methodologically
+methodologies
+methodologist
+methodologists
+methodology
+methodology's
+methods
+methotrexate
+methought
+methoxide
+meths
+Methuen
+Methuen's
+Methuselah
+Methuselahs
+methyl
+methylal
+methylamine
+methylase
+methylate
+methylated
+methylation
+methylator
+methylcholanthrene
+methylcyclohexane
+methyldopa
+methylene
+methylic
+methylnaphthalene
+methylphenidate
+methylphthalate
+methylthionine
+metic
+meticulosity
+meticulous
+meticulously
+meticulousness
+metier
+meting
+metis
+metoestrus
+Metol
+metonic
+metonym
+metonymic
+metonymical
+metonymically
+metonymy
+metope
+metopic
+metopon
+metrazol
+Metrecal
+metric
+metric's
+metrical
+metrically
+metricate
+metrication
+metricize
+metricized
+metricizes
+metricizing
+metrics
+metrify
+metrist
+metritis
+metro
+metrological
+metrologically
+metrologist
+metrology
+metronidazole
+metronome
+metronomes
+metronomic
+metronomical
+metronomically
+metronymic
+metropolis
+metropolitan
+metropolitanization
+metropolitanize
+metropolitanizes
+metrorrhagia
+metros
+mets
+Metternich
+mettle
+mettled
+mettles
+mettlesome
+metz
+Metzler
+Metzler's
+meu
+meung
+meuse
+mew
+mewed
+mewl
+mews
+Mexicali
+Mexican
+Mexicanize
+Mexicanizes
+Mexicans
+Mexico
+Meyer
+Meyerbeer
+Meyerhof
+Meyers
+mezcal
+mezcaline
+mezereon
+mezereum
+mezuza
+mezuzah
+mezzanine
+mezzanines
+mezzo
+mezzos
+mezzotint
+MFD
+mho
+MHz
+Miami
+miaou
+miasma
+miasmal
+miasmatic
+miasmic
+miaul
+mica
+micaceous
+Micah
+micawber
+mice
+micellar
+micelle
+micelle's
+micelles
+Michael
+Michael's
+Michaelangelo
+Michaelmas
+Michaels
+Michaelson
+Michel
+Michel's
+Michelangelo
+Michele
+Michele's
+Michelin
+Michelle
+Michelle's
+michelozzo
+Michelson
+Michigan
+Michigan's
+Mick
+mick
+Mickelson
+mickery
+Mickey
+Mickey's
+Mickie
+mickiewicz
+mickle
+Micky
+Micmac
+micra
+micro
+microamp
+microampere
+microamperes
+microanalysis
+microanalyst
+microanalytic
+microanalytical
+microanatomical
+microanatomy
+microbalance
+microbalances
+microbarograph
+microbarographs
+microbe
+microbe's
+microbeless
+microbes
+microbial
+microbic
+microbicidal
+microbicide
+microbiologic
+microbiological
+microbiologically
+microbiologist
+microbiology
+microbodies
+microbody
+microbrailler
+microbus
+microcalorimetric
+microcephalic
+microcephaly
+microchemistry
+microchip
+microchips
+microcircuit
+microcircuitry
+microcircuits
+microcirculation
+microcirculatory
+microclimate
+microclimates
+microclimatic
+microclimatological
+microclimatologist
+microclimatology
+microcline
+microclines
+micrococcal
+micrococcus
+microcode
+microcoded
+microcodes
+microcoding
+microcomputer
+microcomputer's
+microcomputers
+microconcrete
+microconsumer
+microcontroller
+microcopier
+microcopy
+microcosm
+microcosmic
+microcosmically
+microcrack
+microcracked
+microcracking
+microcracks
+microcrystal
+microcrystalline
+microcrystallinity
+microcyte
+microcytic
+microdensitometer
+microdensitometer's
+microdensitometers
+microdensitometric
+microdensitometry
+microdetector
+microdissection
+microdomain
+microdomains
+microdont
+microdot
+microeconomic
+microeconomics
+microelectrode
+microelectronic
+microelectronically
+microelectronics
+microelectrophoresis
+microelectrophoretic
+microelectrophoretical
+microelectrophoretically
+microelement
+microencapsulate
+microencapsulation
+microenvironment
+microenvironmental
+microevolution
+microevolutionary
+microfabric
+microfarad
+microfarads
+microfauna
+microfaunal
+microfibril
+microfibrillar
+microfiche
+microfiches
+microfilaria
+microfilarial
+microfilm
+microfilm's
+microfilmed
+microfilmer
+microfilms
+microfine
+microflash
+microflora
+microfloral
+microform
+microfossil
+microfossils
+microfungal
+microfungus
+microgamete
+microgametocyte
+microgel
+microgram
+microgram's
+micrograms
+micrograph
+micrographer
+micrographers
+micrographs
+micrography
+microgroove
+microhabitat
+microhardness
+microinch
+microinjection
+microinstruction
+microinstruction's
+microinstructions
+microjoule
+microkink
+microkinking
+microlevel
+microliter
+microliter's
+microliters
+microlith
+microlithic
+micromania
+micromanipulation
+micromanipulator
+micromere
+micrometeorite
+micrometeorites
+micrometeoritic
+micrometeoroid
+micrometeorological
+micrometeorologist
+micrometeorology
+micrometer
+micrometer's
+micrometers
+micromethod
+micrometric
+micrometry
+micromicrofarad
+micromicrofarads
+micromicron
+micromillimeter
+micromillimeter's
+micromillimeters
+microminiature
+microminiaturization
+microminiaturize
+microminiaturized
+microminiaturizer
+microminiaturizers
+microminiaturizes
+microminiaturizing
+micromixing
+micron
+Micronesia
+Micronesian
+micronization
+micronization's
+micronizations
+micronize
+micronizes
+microns
+micronuclear
+micronucleate
+micronucleus
+micronutrient
+micronutrients
+microorganic
+microorganism
+microorganisms
+micropalaeontology
+micropaleontologic
+micropaleontological
+micropaleontologist
+micropaleontology
+microparasite
+microparasites
+microparasitic
+microphage
+microphone
+microphones
+microphonic
+microphonics
+microphoning
+microphotograph
+microphotographer
+microphotographic
+microphotography
+microphotometer
+microphotometer's
+microphotometers
+microphotometric
+microphotometrically
+microphotometry
+microphyll
+microphyllous
+microphysical
+microphysically
+microphysics
+microphyte
+micropipet
+micropipette
+microplankton
+micropolarization
+micropolarization's
+micropolarizations
+micropore
+microporosity
+microporous
+Microport
+Microport's
+microprint
+microprobe
+microprocessing
+microprocessor
+microprocessor's
+microprocessors
+microprogram
+microprogram's
+microprogrammable
+microprogrammed
+microprogramming
+microprograms
+microprojection
+microprojector
+micropulsation
+micropump
+micropylar
+micropyle
+micropyrometer
+microradiograph
+microradiographic
+microradiography
+microreader
+microrelief
+microreproduction
+micros
+microscale
+microscope
+microscope's
+microscopes
+microscopic
+microscopical
+microscopically
+microscopist
+Microscopium
+microscopize
+microscopizes
+microscopy
+microsecond
+microsecond's
+microseconds
+microsection
+microseism
+microseismic
+microseismicity
+microsimulation
+microsimulations
+Microsoft
+Microsoft's
+microsomal
+microsome
+microsomes
+microspectrophotometer
+microspectrophotometer's
+microspectrophotometers
+microspectrophotometric
+microspectrophotometrical
+microspectrophotometrically
+microspectrophotometry
+microsphere
+microspheric
+microsporangium
+microspore
+microsporic
+microsporophyll
+microstate
+microstomatous
+microstore
+microstructural
+microstructurally
+microstructure
+microstructures
+microsurgery
+microsurgical
+microswitch
+microswitches
+microsystem
+microsystems
+microtechnic
+microtechnique
+microtherm
+microtome
+microtomes
+microtomy
+microtonal
+microtonality
+microtonally
+microtone
+microtones
+microtubular
+microtubule
+microtubules
+microvolt
+microvolts
+microwatt
+microwatts
+microwave
+microwave's
+microwaves
+microword
+microwords
+microwriter
+microwriters
+micrurgy
+micturate
+micturated
+micturates
+micturating
+micturition
+micturitions
+mid
+midafternoon
+midair
+midas
+midband
+midbrain
+midcapacity
+midcourse
+midday
+Middelburg
+midden
+middens
+middies
+middle
+middlebreaker
+middlebrow
+middlebrowism
+middlebrows
+Middlebury
+middled
+middleman
+middlemen
+middlemost
+middler
+middles
+Middlesbrough
+Middlesex
+Middleton
+Middletown
+middleweight
+middleweights
+Middlewood
+middling
+middlingly
+middlings
+middorsal
+middy
+mideast
+midfield
+midfielder
+midge
+midges
+midget
+midgut
+midheaven
+midi
+midian
+midinette
+midiron
+midland
+midlander
+Midlandize
+Midlandizes
+midlands
+midlife
+midline
+midlothian
+midmorn
+midmorning
+midmost
+midnight
+midnightly
+midnights
+midplane
+midpoint
+midpoint's
+midpoints
+midportion
+midrange
+midrash
+midrashic
+midrashim
+midrib
+midribbed
+midriff
+midriffs
+midscale
+midsection
+midsemester
+midship
+midshipman
+midshipmen
+midships
+midsole
+midspan
+midst
+midstream
+midsts
+midsummer
+midsummery
+midterm
+midterm's
+midterms
+midtown
+midwatch
+midwatches
+Midway
+midway
+midways
+midweek
+midweekly
+Midwest
+Midwestern
+Midwesterner
+Midwesterners
+midwife
+midwifed
+midwifery
+midwifing
+midwing
+midwinter
+midwinterly
+midwintry
+midwived
+midwives
+midwiving
+midyear
+mien
+miens
+mieres
+mies
+miff
+miffed
+miffing
+miffs
+miffy
+MIG
+mig
+might
+mightier
+mightiest
+mightily
+mightiness
+mightless
+mights
+mighty
+mignon
+mignonette
+migraine
+migraines
+migrainous
+migrancy
+migrant
+migrant's
+migrants
+migrate
+migrated
+migrates
+migratetic
+migratetics
+migrating
+migration
+migrational
+migrationist
+migrationists
+migrations
+migrative
+migrator
+migratorial
+migratories
+migratory
+MIGs
+migs
+Miguel
+mihrab
+mikado
+mike
+mikhail
+Mikhail
+Mikoyan
+mikoyan
+mil
+mila
+milacre
+milady
+milage
+Milan
+milanese
+Milashkina
+milazzo
+milch
+mild
+milden
+milder
+mildest
+mildew
+mildewcide
+mildewproof
+mildews
+mildewy
+mildhearted
+mildish
+mildly
+mildness
+Mildred
+mile
+mile's
+mileage
+mileages
+mileometer
+milepost
+miler
+miles
+milesian
+milestone
+milestone's
+milestones
+miletus
+milfoil
+milfoils
+Milford
+Milhaud
+milia
+miliaria
+miliarial
+miliarias
+miliary
+milieu
+milieus
+milieux
+milinch
+militance
+militances
+militancies
+militancy
+militant
+militantly
+militantness
+militants
+militaries
+militarily
+militarism
+militarisms
+militarist
+militaristic
+militaristically
+militarization
+militarizations
+militarize
+militarized
+militarizes
+militarizing
+military
+militaryism
+militaryisms
+militate
+militated
+militates
+militating
+militia
+militiaman
+militiamen
+militias
+milium
+milk
+milked
+milker
+milkers
+milkfish
+milkhouse
+milkier
+milkily
+milkiness
+milking
+milkless
+milklike
+milkmaid
+milkmaid's
+milkmaids
+milkman
+milkmen
+milks
+milksop
+milksopping
+milksoppy
+milkstone
+milkweed
+milkwort
+milky
+mill
+millable
+millage
+millais
+Millard
+millboard
+millcourse
+milldam
+milled
+millefleurs
+millenarian
+millenarianism
+millenaries
+millenary
+millenia
+millennia
+millennial
+millennialism
+millennium
+millepede
+millepore
+miller
+millerite
+millers
+millesimal
+millesimally
+millet
+millhouse
+milli
+milliammeter
+milliammeter's
+milliammeters
+milliamp
+milliampere
+milliamperes
+milliard
+milliary
+millibar
+millibarn
+millicron
+millicurie
+millicycle
+millidarcy
+millidegree
+millidegrees
+Millie
+millieme
+milliemes
+milliequivalent
+millifarad
+milligal
+milligan
+milligram
+milligram's
+milligrams
+millihenry
+millihertz
+millihg
+millijoule
+millijoules
+Millikan
+millilambert
+milliliter
+milliliter's
+milliliters
+millilux
+millime
+millimeter
+millimeter's
+millimeters
+millimetric
+millimicrofarad
+millimicrofarads
+millimicron
+millimicrosecond
+millimolar
+millimolarity
+millimole
+milline
+milliner
+milliners
+millinery
+milling
+Millington
+million
+millionaire
+millionaire's
+millionairedom
+millionaires
+millionairess
+millionary
+millioned
+millionfold
+millionize
+millionizes
+millions
+millionth
+millipede
+millipede's
+millipedes
+milliphot
+millipoise
+millirad
+milliroentgen
+millisecond
+milliseconds
+millivolt
+millivoltmeter
+millivoltmeter's
+millivoltmeters
+millivolts
+milliwatt
+milliwatts
+millman
+millmen
+millowner
+millpond
+millponds
+millrace
+millraces
+millrun
+mills
+millsite
+millstone
+millstone's
+millstones
+millstream
+millstreams
+millwheel
+millwheels
+millwork
+millwright
+millwrights
+Milne
+milne
+Milnes
+milo
+milometer
+milometers
+milord
+milquetoast
+Milquetoast
+Milquetoasts
+milquetoasts
+milreis
+Milstein
+milt
+milter
+miltiades
+Milton
+Miltonian
+Miltonic
+Miltonism
+Miltonist
+Miltonize
+Miltonized
+Miltonizes
+Miltonizing
+Milwaukee
+mim
+mimas
+MIMD
+mime
+mimeograph
+mimeographed
+mimeographes
+mimeographing
+mimer
+mimesis
+mimetic
+mimetically
+mimetism
+mimetite
+Mimi
+mimic
+mimical
+mimicked
+mimicking
+mimicry
+mimics
+miming
+mimir
+mimosa
+mimosaceous
+min
+Mina
+minable
+minacious
+minaret
+minareted
+minarets
+minas
+minatory
+mince
+minced
+mincemeat
+mincer
+mincers
+minces
+minch
+mincing
+mincingly
+mincy
+mind
+Mindanao
+Mindanao's
+minded
+mindedness
+Mindel
+minder
+minders
+mindful
+mindfully
+mindfulness
+minding
+mindless
+mindlessly
+mindlessness
+mindoro
+minds
+mindszenty
+mine
+mineable
+mined
+minefield
+minelayer
+miner
+mineral
+mineral's
+mineralizable
+mineralizable's
+mineralizables
+mineralization
+mineralization's
+mineralizations
+mineralize
+mineralized
+mineralizer
+mineralizers
+mineralizes
+mineralizing
+mineralocorticoid
+mineralogical
+mineralogies
+mineralogist
+mineralogists
+mineralogy
+minerals
+miners
+Minerva
+mines
+minestrone
+minesweeper
+minesweepers
+minesweeping
+mineworker
+mineworkers
+ming
+Ming
+minge
+mingle
+mingled
+mingles
+mingling
+Mingrelian
+mingus
+mingy
+minho
+mini
+miniature
+miniature's
+miniatured
+miniatures
+miniaturing
+miniaturist
+miniaturistic
+miniaturists
+miniaturization
+miniaturizations
+miniaturize
+miniaturized
+miniaturizes
+miniaturizing
+minibike
+minibus
+minibuses
+minicab
+minicabs
+minicam
+minicamera
+minicar
+minicartridge
+minicomputer
+minicomputer's
+minicomputers
+minidress
+minidresses
+minified
+minifies
+minify
+minifying
+minikin
+minim
+minima
+minimal
+minimalism
+minimalist
+minimalist's
+minimalists
+minimally
+minimax
+minimization
+minimization's
+minimizations
+minimize
+minimized
+minimizer
+minimizers
+minimizes
+minimizing
+minimum
+minimums
+minimus
+mining
+minion
+minions
+minipill
+minis
+miniscule
+miniskirt
+minister
+minister's
+ministered
+ministerial
+ministerialist
+ministerially
+ministering
+ministerium
+ministers
+ministrable
+ministrant
+ministration
+ministrations
+ministries
+ministry
+ministry's
+minitab
+minitrack
+minium
+miniver
+minivet
+mink
+mink's
+Minkowski
+minks
+minna
+Minneapolis
+minnesinger
+Minnesota
+Minnesota's
+Minnie
+minnow
+minnow's
+minnows
+Minoan
+minor
+minor's
+Minorca
+minored
+minoring
+Minorite
+minorities
+minority
+minority's
+minors
+Minos
+minot
+Minot's
+Minotaur
+Minotaur's
+minous
+Minsk
+Minsk's
+Minsky
+Minsky's
+minster
+minstrel
+minstrel's
+minstrels
+minstrelsy
+mint
+mintage
+minted
+minter
+minting
+mintoff
+Minton
+mints
+minuend
+minuends
+minuet
+minus
+minuscular
+minuscule
+minuses
+minute
+minuted
+minutely
+minuteman
+minutemen
+minuteness
+minuter
+minutes
+minutest
+minutia
+minutiae
+minutial
+minuting
+minx
+minxes
+Minya
+Miocene
+miocrystalline
+miombo
+mioses
+miosis
+miotic
+MIPS
+Miquelon
+Mira
+mirabeau
+mirabilite
+miracidium
+miracle
+miracle's
+miracles
+miracular
+miraculism
+miraculisms
+miraculist
+miraculists
+miraculize
+miraculized
+miraculizes
+miraculizing
+miraculous
+miraculously
+miraculousness
+mirador
+miraflores
+mirage
+miraged
+mirages
+miraging
+Miranda
+mirate
+mirated
+mirates
+mirating
+miration
+mirations
+mire
+mired
+mirepoix
+mires
+Mirfak
+Mirfak's
+Miriam
+miring
+mirk
+mirky
+mirror
+mirrored
+mirroring
+mirrorize
+mirrorizes
+mirrorlike
+mirrors
+mirrory
+mirth
+mirthful
+mirthfully
+mirthfulness
+mirthless
+mirthlessly
+mirthlessness
+mirths
+MIRV
+miry
+mirza
+misaddress
+misaddressed
+misadjustment
+misadventure
+misadventured
+misadventures
+misadventurous
+misadvise
+misaim
+misalign
+misaligned
+misaligning
+misalignment
+misalignment's
+misalignments
+misaligns
+misalliance
+misallocate
+misallocated
+misallocates
+misallocating
+misallocation
+misally
+misalphabetize
+misalphabetizes
+misandry
+misanthrope
+misanthropic
+misanthropically
+misanthropism
+misanthropist
+misanthropists
+misanthropize
+misanthropized
+misanthropizes
+misanthropizing
+misanthropy
+misapplication
+misapplied
+misapplier
+misapplies
+misapply
+misapplying
+misapplys
+misappreciate
+misappreciation
+misapprehend
+misapprehended
+misapprehending
+misapprehendingly
+misapprehends
+misapprehension
+misapprehensions
+misapprehensive
+misapprehensively
+misapprehensiveness
+misappropriate
+misappropriates
+misappropriation
+misarranged
+misarrangement
+misarray
+misascription
+misassignment
+misattribution
+misauthorization
+misauthorization's
+misauthorizations
+misauthorize
+misauthorizes
+misbaptize
+misbaptizes
+misbecome
+misbecoming
+misbeget
+misbegotten
+misbehadden
+misbehave
+misbehaved
+misbehaver
+misbehaves
+misbehaving
+misbehavior
+misbehavior's
+misbehaviors
+misbeholden
+misbelief
+misbelieve
+misbeliever
+misbelieving
+misbelievingly
+misbeseem
+misbestow
+misbirth
+misbrand
+misbranded
+misbranding
+misbrands
+misc
+miscalculate
+miscalculated
+miscalculates
+miscalculating
+miscalculation
+miscalculation's
+miscalculations
+miscalculator
+miscall
+miscaller
+miscanonize
+miscanonizes
+miscarriage
+miscarriages
+miscarried
+miscarries
+miscarry
+miscarrying
+miscarrys
+miscast
+miscasting
+miscasts
+miscegenation
+miscegenational
+miscegenations
+miscellanea
+miscellaneity
+miscellaneous
+miscellaneously
+miscellaneousness
+miscellanies
+miscellanist
+miscellanists
+miscellany
+mischance
+mischaracterization
+mischaracterization's
+mischaracterizations
+mischaracterize
+mischaracterizes
+mischief
+mischiefful
+mischievous
+mischievously
+mischievousness
+miscibility
+miscible
+misclassification
+misclassifications
+misclassified
+misclassify
+misclassifying
+miscode
+miscoded
+miscodes
+miscoding
+miscolor
+miscolor's
+miscolored
+miscoloring
+miscolors
+miscommunicate
+miscommunicated
+miscommunicates
+miscommunication
+miscomprehend
+miscomprehension
+misconceit
+misconceive
+misconceived
+misconceiver
+misconceives
+misconceiving
+misconception
+misconception's
+misconceptions
+misconduct
+misconducted
+misconducting
+misconducts
+misconstruction
+misconstructions
+misconstrue
+misconstrued
+misconstrues
+misconstruing
+miscontent
+miscontentment
+miscook
+miscopy
+miscorrect
+miscorrected
+miscounsel
+miscounseled
+miscount
+miscounted
+miscounting
+miscounts
+miscreance
+miscreances
+miscreant
+miscreants
+miscreate
+miscreation
+miscreative
+miscreator
+miscue
+miscue's
+miscues
+misdate
+misdeal
+misdealing
+misdeclared
+misdeed
+misdeeds
+misdeem
+misdeems
+misdefined
+misdeliver
+misdelivered
+misdelivery
+misdemean
+misdemeanant
+misdemeanants
+misdemeanor
+misdemeanor's
+misdemeanors
+misdescribe
+misdescription
+misdescriptive
+misdirect
+misdirected
+misdirection
+misdirector
+misdirectors
+misdirects
+misdo
+misdoer
+misdoing
+misdoubt
+mise
+miseducated
+miseducation
+misemphasis
+misemphasization
+misemphasize
+misemphasized
+misemphasizes
+misemphasizing
+misemploy
+misemployment
+misendeavor
+misendeavor's
+misendeavors
+miseno
+miser
+miserable
+miserableness
+miserably
+Miserere
+misericord
+misericorde
+miseries
+miserliness
+miserly
+misers
+misery
+misery's
+mises
+misesteem
+misestimate
+misestimation
+misfeasance
+misfeasor
+misfeature
+misfeed
+misfile
+misfiled
+misfiles
+misfiling
+misfire
+misfired
+misfires
+misfiring
+misfit
+misfit's
+misfits
+misfortune
+misfortune's
+misfortunes
+misgauge
+misgauged
+misgauges
+misgauging
+misgive
+misgives
+misgiving
+misgivingly
+misgivings
+misgovern
+misgovernment
+misguidance
+misguide
+misguided
+misguidedly
+misguidedness
+misguider
+misguides
+misguiding
+mishandle
+mishandled
+mishandles
+mishandling
+mishap
+mishap's
+mishaps
+mishear
+Mishima
+mishmash
+Mishnah
+misidentification
+misidentified
+misidentifies
+misidentify
+misidentifying
+misimpression
+misimprove
+misinform
+misinformation
+misinformative
+misinformed
+misinforming
+misinforms
+misintelligence
+misinterpret
+misinterpretable
+misinterpretation
+misinterpretations
+misinterpreted
+misinterpreter
+misinterpreters
+misinterpreting
+misinterprets
+misjoinder
+misjudge
+misjudged
+misjudges
+misjudging
+misjudgingly
+misjudgment
+misjudgment's
+misjudgments
+misknow
+misknowledge
+misknows
+miskolc
+mislabel
+mislabeled
+mislabeling
+mislabor
+mislabor's
+mislabored
+mislaboring
+mislabors
+mislaid
+mislay
+mislaying
+mislays
+mislead
+misleader
+misleading
+misleadingly
+misleadings
+misleads
+misleared
+misled
+mislike
+mismachine
+mismanage
+mismanaged
+mismanagement
+mismanages
+mismanaging
+mismarriage
+mismatch
+mismatched
+mismatches
+mismatching
+mismate
+misname
+misnamed
+misnames
+misnaming
+misnomer
+misnomered
+misogamic
+misogamist
+misogamists
+misogamy
+misogynic
+misogynist
+misogynist's
+misogynistic
+misogynists
+misogyny
+misologist
+misology
+misoneism
+misorder
+misorganization
+misorganization's
+misorganizations
+misorganize
+misorganizes
+misperceive
+misperceived
+misperceives
+misperception
+misperceptions
+misplace
+misplaced
+misplacement
+misplacements
+misplaces
+misplacing
+misplay
+misplead
+mispleading
+mispoint
+misposition
+mispositioned
+mispositioning
+mispositions
+mispraise
+misprint
+misprision
+misprisions
+misprize
+misprized
+misprizes
+misprizing
+mispronounce
+mispronounced
+mispronounces
+mispronouncing
+mispronunciation
+mispunctuate
+mispunctuation
+misquotation
+misquote
+misquoted
+misquotes
+misread
+misreader
+misreading
+misreads
+misrealize
+misrealizes
+misreckon
+misrecognize
+misrecognizes
+misrecollect
+misrecollection
+misregister
+misregistration
+misrelated
+misremember
+misreport
+misreporting
+misrepresent
+misrepresentation
+misrepresentation's
+misrepresentations
+misrepresentative
+misrepresented
+misrepresenter
+misrepresenting
+misrepresents
+misroute
+misrouted
+misroutes
+misrouting
+misrule
+misruled
+misruler
+misrules
+misruling
+miss
+missal
+missals
+missed
+missel
+missend
+misses
+misshape
+misshapen
+misshapenly
+misshapenness
+misshapennesses
+misshapes
+missile
+missile's
+missileer
+missileers
+missileman
+missilemen
+missilery
+missiles
+missilry
+missing
+mission
+missionaries
+missionarize
+missionarizes
+missionary
+missionary's
+missionate
+missioned
+missioner
+missioning
+missionization
+missionize
+missionized
+missionizer
+missionizers
+missionizes
+missionizing
+missions
+missis
+mississauga
+mississipi
+Mississippi
+Mississippian
+Mississippians
+missive
+missives
+missolonghi
+missort
+Missoula
+Missouri
+missout
+misspeak
+misspecification
+misspecified
+misspell
+misspelled
+misspelling
+misspellings
+misspells
+misspelt
+misspend
+misspended
+misspender
+misspending
+misspends
+misstate
+misstated
+misstatement
+misstatements
+misstater
+misstates
+misstating
+misstep
+misstrike
+missus
+Missy
+mist
+mistakable
+mistake
+mistaken
+mistakenly
+mistaker
+mistakes
+mistaking
+mistakingly
+mistal
+mistassini
+misted
+mister
+mistered
+mistering
+misterm
+misters
+mistful
+misthink
+misti
+mistier
+mistiest
+mistigris
+mistily
+mistime
+mistimed
+mistiness
+misting
+mistle
+mistletoe
+mistook
+mistrain
+mistral
+mistrals
+mistranslate
+mistranslation
+mistreat
+mistreated
+mistreating
+mistreatment
+mistreats
+mistress
+mistressly
+mistrial
+mistrust
+mistrusted
+mistruster
+mistrustful
+mistrustfully
+mistrustfulness
+mistrusting
+mistrusts
+mists
+misty
+mistype
+mistyped
+mistypes
+mistyping
+misunderstand
+misunderstander
+misunderstanders
+misunderstanding
+misunderstanding's
+misunderstandings
+misunderstands
+misunderstood
+misusage
+misuse
+misused
+misuser
+misuses
+misusing
+misvalue
+misventure
+miswrite
+miswrites
+miswriting
+miswritten
+MIT
+MIT's
+Mitch
+mitch
+Mitch's
+Mitchell
+Mitchell's
+mite
+miter
+mitered
+miterer
+mitering
+miterwort
+mites
+mither
+mithgarthr
+Mithraism
+Mithras
+mithridate
+mithridates
+mithridatism
+miticide
+mitigate
+mitigated
+mitigates
+mitigating
+mitigation
+mitigations
+mitigative
+mitigator
+mitigators
+mitigatory
+mitis
+mitochondria
+mitochondrion
+mitogenesis
+mitogenetic
+mitogenic
+mitoinhibitory
+mitosis
+mitotic
+mitotically
+mitrailleuse
+mitral
+mitrewort
+Mitropolous
+Mitropoulos
+mitt
+mitted
+Mittelland
+mitten
+mitten's
+mittens
+Mitterrand
+mittimus
+mitts
+mitzvah
+mitzvah's
+mitzvahes
+mitzvahs
+mix
+mixable
+mixed
+mixer
+mixers
+mixes
+mixing
+mixologist
+mixologists
+mixology
+mixolydian
+Mixtec
+mixture
+mixture's
+mixtures
+mixup
+mizanthropise
+mizanthropises
+Mizar
+Mizar's
+Mizoguchi
+mizoram
+mizzen
+mizzenmast
+mizzle
+mizzled
+mizzles
+mizzling
+mizzly
+MKS
+MKSA
+ml
+mlea
+Mlle
+mm
+Mme
+MN
+mnemonic
+mnemonic's
+mnemonically
+mnemonics
+Mnemosyne
+MO
+moa
+moab
+moan
+moaned
+moanful
+moanfully
+moaning
+moans
+moat
+moat's
+moats
+mob
+mob's
+mobbed
+mobbing
+mobbish
+mobbishly
+mobbishness
+mobbism
+mobcap
+mobcaps
+Mobil
+mobile
+mobiles
+mobility
+mobilizable
+mobilizable's
+mobilizables
+mobilization
+mobilization's
+mobilizations
+mobilize
+mobilized
+mobilizer
+mobilizes
+mobilizing
+mobocracy
+mobocrat
+mobocratic
+mobs
+mobster
+mobsters
+mobutu
+moccasin
+moccasin's
+moccasins
+mocha
+mock
+mocked
+mocker
+mockernut
+mockers
+mockery
+mocking
+mockingbird
+mockingly
+mocks
+mockup
+mockups
+mod
+modal
+modalities
+modality
+modality's
+modalize
+modalizes
+modally
+mode
+model
+model's
+modeled
+modeler
+modelers
+modeling
+modelings
+models
+modem
+modems
+modena
+moderate
+moderated
+moderately
+moderateness
+moderates
+moderating
+moderation
+moderationist
+moderations
+moderatism
+moderato
+moderator
+moderator's
+moderators
+moderatorship
+modern
+moderne
+modernism
+modernist
+modernistic
+modernists
+modernity
+modernizable
+modernizable's
+modernizables
+modernization
+modernization's
+modernizations
+modernize
+modernized
+modernizer
+modernizers
+modernizes
+modernizing
+modernly
+modernness
+moderns
+modes
+modest
+modestly
+Modesto
+modesty
+modge
+modicity
+modicum
+modifiability
+modifiable
+modifiableness
+modification
+modifications
+modificative
+modified
+modifier
+modifiers
+modifies
+modify
+modifying
+modigliani
+modillion
+Modiolus
+modish
+modishly
+modishness
+modiste
+Modred
+mods
+modulability
+modular
+modularities
+modularity
+modularization
+modularize
+modularized
+modularizes
+modularizing
+modularly
+modulate
+modulated
+modulates
+modulating
+modulation
+modulations
+modulator
+modulator's
+modulators
+modulatory
+module
+module's
+modules
+moduli
+modulo
+modulus
+modus
+Moe
+Moe's
+Moen
+Moen's
+mofette
+mog
+Mogadiscio
+mogador
+mogen
+Moghul
+Mogilev
+mogul
+mohair
+Mohammed
+Mohammedan
+Mohammedanism
+Mohammedanization
+Mohammedanization's
+Mohammedanizations
+Mohammedanize
+Mohammedanized
+Mohammedanizes
+Mohammedanizing
+Mohave
+Mohawk
+Mohican
+mohm
+moho
+Mohock
+mohole
+Mohr
+mohs
+mohur
+moidore
+moieties
+moiety
+moil
+moiler
+moiling
+moilingly
+Moines
+moirai
+moire
+Moiseyev
+Moiseyev's
+moist
+moisten
+moistened
+moistener
+moistening
+moistly
+moistness
+moisture
+moistureless
+moistures
+moisturization
+moisturize
+moisturized
+moisturizer
+moisturizers
+moisturizes
+moisturizing
+Mojave
+moke
+mokha
+mokpo
+molal
+molality
+molar
+molarity
+molarization
+molarizations
+molars
+molasses
+mold
+moldable
+Moldau
+Moldavia
+Moldavian
+Moldavite
+moldboard
+molded
+molder
+moldered
+moldering
+molders
+moldier
+moldiness
+molding
+molds
+moldy
+mole
+Molech
+molecular
+molecularity
+molecularly
+molecule
+molecule's
+molecules
+molehill
+moles
+moleskin
+moleskins
+molest
+molestation
+molestations
+molested
+molester
+molesters
+molesting
+molests
+Moliere
+molina
+Moline
+molise
+Moll
+moll
+mollah
+mollescent
+Mollet
+mollie
+mollification
+mollifications
+mollified
+mollifies
+mollify
+mollifying
+mollusc
+molluscan
+molluscoid
+molluscs
+mollusk
+molluskan
+mollusks
+mollweide
+Molly
+mollycoddle
+mollycoddled
+mollycoddler
+mollycoddles
+mollycoddling
+Moloch
+Molochize
+Molochizes
+Molokai
+molopo
+molotov
+Molotov
+molt
+molten
+molter
+moltke
+molto
+molts
+molucca
+Moluccas
+moly
+molybdate
+molybdenite
+molybdenous
+molybdenum
+molybdic
+molybdous
+mom
+mom's
+mombasa
+moment
+moment's
+momenta
+momental
+momentaneous
+momentarily
+momentariness
+momentary
+momently
+momentous
+momentously
+momentousness
+moments
+momentum
+momentums
+momism
+momma
+Mommsen
+mommy
+moms
+Momus
+Mon
+Mona
+Mona's
+monachal
+monachism
+monacid
+Monaco
+monad
+monadelphous
+monadic
+monadism
+monadnock
+monads
+monaghan
+monal
+monandrous
+monandry
+monanthous
+monarch
+monarchal
+monarchial
+monarchic
+monarchical
+monarchically
+monarchies
+monarchism
+monarchist
+monarchistic
+monarchists
+monarchize
+monarchizer
+monarchizers
+monarchizes
+monarchs
+monarchy
+monarchy's
+monas
+Monash
+monasterial
+monasteries
+monastery
+monastery's
+monastic
+monastical
+monastically
+monasticism
+monasticize
+monasticizes
+monatomic
+monaural
+monaurally
+monaxial
+monazite
+monck
+Moncton
+Mondale
+Monday
+Monday's
+Mondays
+monde
+Mondial
+mondrian
+monecious
+Monegasque
+monel
+moneme
+moner
+monestrous
+Monet
+monet
+monetarily
+monetarism
+monetarist
+monetary
+monetization
+monetize
+monetized
+monetizes
+monetizing
+money
+money's
+moneybags
+moneychanger
+moneyed
+moneyer
+moneylender
+moneylenders
+moneylending
+moneyless
+moneymake
+moneymaker
+moneymaking
+moneys
+moneywort
+Monfort
+mong
+monger
+mongered
+mongering
+mongers
+Mongo
+Mongol
+Mongolia
+Mongolian
+Mongolianism
+Mongolic
+mongolism
+mongoloid
+mongoose
+mongooses
+mongrel
+mongrelism
+mongrelization
+mongrelizations
+mongrelize
+mongrelized
+mongrelizer
+mongrelizes
+mongrelizing
+mongrelly
+mongrelness
+monic
+Monica
+monicker
+monied
+monies
+moniker
+monilia
+moniliform
+monish
+monism
+monist
+monistic
+monistical
+monition
+monitions
+monitor
+monitored
+monitorial
+monitorially
+monitoring
+monitors
+monitorship
+monitory
+monitress
+monk
+monk's
+monkeries
+monkery
+monkey
+monkeyed
+monkeyflower
+monkeying
+monkeypot
+monkeys
+monkeyshine
+monkfish
+monkhood
+monkish
+monks
+monkshood
+Monmouth
+Monmouth's
+Monmouthshire
+monnet
+mono
+mono's
+monoacid
+monoacidic
+monoamine
+monoatomic
+monobasic
+monocarp
+monocarpellary
+monocarpic
+monocausal
+Monoceros
+monochasial
+monochasium
+monochloride
+monochloroethanol
+monochord
+monochordize
+monochordizes
+monochromat
+monochromatic
+monochromatically
+monochromaticity
+monochromatism
+monochromator
+monochrome
+monochromes
+monochromic
+monochromist
+monocle
+monocled
+monocles
+monocline
+monoclinic
+monoclinous
+monocoque
+monocracy
+monocrat
+monocratic
+monocular
+monocularly
+monocultural
+monoculture
+monocycle
+monocyclic
+monocycly
+monocyte
+monocytic
+monodisperse
+monodispersity
+monodist
+monodrama
+monodramatic
+monody
+monoecious
+monoeciously
+monoecism
+monoenergetic
+monoester
+monofilament
+monofuel
+monogamic
+monogamist
+monogamists
+monogamous
+monogamously
+monogamousness
+monogamy
+monogastric
+monogenean
+monogenesis
+monogenetic
+monogenic
+monogenically
+monogerm
+monogram
+monogram's
+monogrammatic
+monograms
+monograph
+monograph's
+monographes
+monographic
+monographical
+monographs
+monography
+monogynous
+monogyny
+monohull
+monohybrid
+monohydrate
+monohydric
+monohydroxy
+monoicous
+monoid
+monolatry
+monolayer
+monolingual
+monolingualism
+monolinguals
+monolith
+monolithic
+monolithically
+monoliths
+monologist
+monologists
+monologize
+monologized
+monologizes
+monologizing
+monologue
+monologues
+monologuist
+monomania
+monomaniac
+monomark
+monomer
+monomer's
+monomeric
+monomerous
+monomers
+monometalism
+monometalist
+monometallic
+monometer
+monometer's
+monometers
+monomial
+monomolecular
+monomolecularly
+monomorphemic
+monomorphic
+monomorphism
+monomorphous
+Monongahela
+Monongahela's
+mononuclear
+mononucleosis
+monopetalous
+monophagous
+monophobia
+monophonic
+monophonically
+monophony
+monophthong
+monophthongal
+monophyletic
+monophyletism
+monophyllous
+Monophysite
+monoplane
+monoplegia
+monoploid
+monopode
+monopodial
+monopodially
+monopodium
+monopolies
+monopolist
+monopolistic
+monopolistically
+monopolists
+monopolizable
+monopolizable's
+monopolizables
+monopolization
+monopolization's
+monopolizations
+monopolize
+monopolized
+monopolizer
+monopolizers
+monopolizes
+monopolizing
+monopoly
+monopoly's
+monopropellant
+monopsony
+monopteros
+monopulse
+monorail
+monorail's
+monorails
+monosaccharide
+monosaccharides
+monosemy
+monosepalous
+monosized
+monosodium
+monosome
+monosomic
+monospermous
+monostat
+monostatic
+monostich
+monostichous
+monostome
+monostrophe
+monostylous
+monosyllabic
+monosyllabically
+monosyllabicity
+monosyllable
+monosyllables
+monosymmetric
+monosymmetry
+monosynaptic
+monosynaptically
+monotheism
+monotheist
+monotheistic
+monotheistical
+monotheistically
+monothetic
+monotint
+monotone
+monotonic
+monotonically
+monotonicity
+monotonize
+monotonizes
+monotonous
+monotonously
+monotonousness
+monotony
+monotower
+monotrematous
+monotreme
+monotrichous
+monotropism
+monotype
+monotypic
+monovalent
+monovular
+monoxide
+monozygotic
+Monroe
+Monrovia
+mons
+Monsanto
+monsieur
+monsignor
+monsoon
+monsoonal
+monsoons
+monster
+monster's
+monsters
+monstrance
+monstrances
+monstrosities
+monstrosity
+monstrous
+monstrously
+monstrousness
+montage
+montaged
+montages
+montaging
+montagnard
+montagu
+Montague
+montagues
+Montaigne
+montaigne
+montale
+Montana
+Montana's
+Montanan
+Montanan's
+montane
+montauban
+montbretia
+montcalm
+Montclair
+monte
+montefiore
+montego
+monteith
+Montenegrin
+Montenegrin's
+montenegro
+Monterey
+montero
+monterrey
+montesquieu
+montessori
+Monteux
+Monteverdi
+Monteverdi's
+Montevideo
+Montezuma
+montfort
+montgolfier
+Montgomery
+Montgomeryshire
+month
+month's
+montherlant
+monthlies
+monthly
+months
+Monticello
+monticule
+Montmartre
+Montmartre's
+montmorillonite
+montparnasse
+Montpelier
+montpellier
+Montrachet
+Montrachet's
+Montreal
+montreuil
+montreux
+montrose
+Montserrat
+Monty
+monument
+monument's
+monumental
+monumentality
+monumentalization
+monumentalization's
+monumentalizations
+monumentalize
+monumentalized
+monumentalizes
+monumentalizing
+monumentally
+monumentless
+monuments
+monza
+monzonite
+moo
+mooch
+moocher
+mooches
+mooching
+mood
+mood's
+moodier
+moodily
+moodiness
+moods
+moody
+mooed
+moog
+moola
+moolah
+moolvie
+moon
+moonbeam
+moonbeam's
+moonbeams
+moonbow
+mooncalf
+mooned
+Mooney
+mooneye
+moonfish
+moonflower
+mooning
+moonish
+moonishly
+moonless
+moonlet
+moonlight
+moonlighted
+moonlighter
+moonlighting
+moonlights
+moonlit
+moonquake
+moonraker
+moonrise
+moons
+moonscape
+moonseed
+moonset
+moonshine
+moonshiner
+moonshot
+moonstone
+moonstruck
+moonward
+moonwort
+moony
+moor
+moor's
+moorage
+Moorcock
+Moore
+moored
+moorfowl
+moorhen
+mooring
+moorings
+Moorish
+Moorland
+moors
+moorwort
+moos
+moose
+moot
+mooted
+mop
+mopboard
+mope
+moped
+moper
+mopes
+moping
+mopoke
+mopped
+mopper
+moppet
+mopping
+mops
+moquette
+mor
+mora
+moraceous
+Moradabad
+morainal
+moraine
+morainic
+moral
+moral's
+morale
+morales
+moralism
+moralist
+moralistic
+moralistically
+moralities
+morality
+moralization
+moralization's
+moralizations
+moralize
+moralized
+moralizer
+moralizers
+moralizes
+moralizing
+moralizinglies
+moralizingly
+morally
+morals
+Moran
+Moran's
+morar
+morass
+morasses
+morassy
+moratorium
+moratoriums
+morava
+Moravia
+Moravian
+Moravianized
+Moravianized's
+Moravianizeds
+moray
+morbid
+morbidity
+morbidize
+morbidizes
+morbidly
+morbidness
+morbific
+morbihan
+morbilli
+morcha
+mordacious
+mordaciously
+mordacity
+mordancy
+mordant
+mordantly
+mordecai
+mordent
+mordred
+Mordvin
+Mordvinian
+more
+morea
+moreau
+morecambe
+mored
+moreen
+morehouse
+Morehouse
+moreish
+morel
+Moreland
+morelia
+morello
+morelos
+moreover
+morepork
+mores
+Moresby
+Moresby's
+moresco
+moresque
+Moreton
+Morgan
+morganatic
+morganatically
+morganite
+morgen
+morgue
+morgues
+Moriarty
+moribund
+moribundity
+morion
+Morisco
+morish
+Morley
+Morley's
+Mormon
+morn
+mornay
+morning
+mornings
+Moro
+Moroccan
+morocco
+Morocco
+moron
+moroni
+moronic
+moronically
+moronism
+moronity
+morose
+morosely
+moroseness
+morosity
+morph
+morphallaxis
+morpheme
+morphemic
+Morpheus
+morphine
+morphines
+morphinic
+morphinism
+morphinization
+morphinization's
+morphinizations
+morphinize
+morphinizes
+morphism
+morphism's
+morphisms
+morpho
+morphogenesis
+morphologic
+morphological
+morphologically
+morphology
+morphophoneme
+morphophonemic
+morphophonemics
+morphosis
+morphotype
+morphotypes
+morphy
+Morrill
+Morrill's
+Morris
+morris
+Morrison
+Morrissey
+Morrissey's
+Morristown
+morro
+morrow
+mors
+Morse
+morsel
+morsel's
+morseled
+morseling
+morselization
+morselization's
+morselizations
+morselize
+morselizes
+morsels
+mort
+mortal
+mortality
+mortalize
+mortalizes
+mortally
+mortals
+mortar
+mortarboard
+mortared
+mortaring
+mortarize
+mortarizes
+mortars
+mortem
+mortgage
+mortgage's
+mortgaged
+mortgagee
+mortgagees
+mortgager
+mortgages
+mortgaging
+mortgagor
+mortgagors
+mortician
+morticians
+mortification
+mortifications
+mortified
+mortifiedly
+mortifier
+mortifies
+mortify
+mortifying
+mortimer
+Mortimer
+mortise
+mortising
+mortmain
+Morton
+Morton's
+mortuaries
+mortuary
+mortuary's
+morula
+morwong
+mos
+mosaic
+mosaic's
+mosaically
+mosaicism
+mosaicist
+mosaics
+mosasaur
+moschatel
+moscone
+Moscone
+Moscow
+moseley
+Moselle
+Moser
+Moser's
+Moses
+mosey
+moseyed
+moseying
+moshav
+moshesh
+moskva
+Moslem
+Moslem's
+Moslemize
+Moslemizes
+Moslems
+mosley
+mosotho
+mosque
+mosques
+mosquito
+mosquitoes
+mosquitoey
+mosquitos
+moss
+moss's
+mossback
+mossbacked
+Mossberg
+mossbunker
+mosses
+Mossi
+mossie
+mossier
+mosslike
+mosso
+mosstrooper
+mossy
+most
+mostly
+Mosul
+mot
+mote
+motel
+motel's
+motels
+motet
+moth
+mothball
+mother
+mother's
+motherboard
+motherboard's
+motherboards
+mothered
+motherer
+motherers
+motherfucker
+motherhood
+motherhouse
+mothering
+motherland
+motherless
+motherlessness
+motherliness
+motherly
+mothers
+motherwell
+motherwort
+mothproof
+mothproofer
+moths
+mothy
+motif
+motif's
+motifs
+motile
+motility
+motion
+motional
+motioned
+motioner
+motioning
+motionless
+motionlessly
+motionlessness
+motions
+motivate
+motivated
+motivates
+motivating
+motivation
+motivational
+motivationally
+motivations
+motivative
+motivator
+motive
+motived
+motives
+motivic
+motiving
+motivity
+motley
+motmot
+motocross
+motoneuron
+motor
+motorable
+motorbicycle
+motorbike
+motorboat
+motorboater
+motorboating
+motorbus
+motorcade
+motorcade's
+motorcades
+motorcar
+motorcar's
+motorcars
+motorcoach
+motorcycle
+motorcycle's
+motorcycles
+motorcyclist
+motordrome
+motored
+motoric
+motorically
+motoring
+motorist
+motorist's
+motorists
+motorization
+motorization's
+motorizations
+motorize
+motorized
+motorizes
+motorizing
+motorless
+motorman
+motormen
+Motorola
+Motorola's
+motors
+motortruck
+motorway
+motown
+mots
+motte
+mottle
+mottled
+mottler
+mottles
+mottling
+motto
+mottoes
+mottos
+motu
+mouflon
+moujik
+moulage
+mould
+mouldboard
+moulded
+moulder
+mouldering
+moulding
+moulds
+mouldy
+moulin
+moulins
+moulmein
+moult
+Moulton
+Moulton's
+mound
+mounded
+mounds
+mount
+mountable
+mountain
+mountain's
+mountaineer
+mountaineering
+mountaineers
+mountainous
+mountainously
+mountainousness
+mountains
+mountainside
+mountainsides
+mountaintop
+mountaintop's
+mountaintops
+mountainy
+Mountbatten
+mountebank
+mountebankery
+mounted
+mounter
+Mountie
+mounting
+mountings
+mounts
+mourn
+mourned
+mourner
+mourners
+mournful
+mournfully
+mournfulness
+mourning
+mourningly
+mourns
+mouse
+mousebird
+mouser
+mouses
+mousetail
+mousetrap
+mousey
+mousier
+mousily
+mousiness
+mousing
+moussaka
+mousse
+mousseline
+Moussorgsky
+Mousterian
+mousy
+mouth
+mouthbrooder
+mouthed
+mouther
+mouthes
+mouthful
+mouthier
+mouthing
+mouthlike
+mouthpart
+mouthpiece
+mouthpieces
+mouths
+mouthwash
+mouthwatering
+mouthy
+Mouton
+movability
+movable
+movableness
+movably
+move
+moved
+moveless
+movelessly
+movelessness
+movement
+movement's
+movements
+mover
+movers
+moves
+movie
+movie's
+moviedom
+moviegoer
+moviemaker
+movies
+movietone
+moving
+movingly
+movings
+moviola
+mow
+mowburnt
+mowed
+mower
+mowers
+mowing
+mown
+mows
+moxa
+moxie
+Moyer
+Moyer's
+Mozambique
+Mozarab
+Mozart
+Mozart's
+mozzarella
+Mpc
+MPH
+Mr
+MRI
+Mridang
+Mrs
+Ms
+MSC
+MST
+Mt
+MTS
+MTV
+mu
+much
+muchness
+muciferous
+mucilage
+mucilaginous
+mucilaginously
+mucin
+muck
+muckamuck
+mucked
+mucker
+mucking
+muckle
+muckrake
+muckraker
+muckraking
+mucks
+mucksweat
+muckworm
+mucky
+mucoid
+mucopolysaccharide
+mucoprotein
+mucopurulent
+mucosa
+mucous
+mucro
+mucronate
+mucus
+mud
+mudcat
+Mudd
+Mudd's
+mudded
+muddied
+muddier
+muddily
+muddiness
+mudding
+muddle
+muddled
+muddlehead
+muddleheaded
+muddleheadedness
+muddleheads
+muddler
+muddlers
+muddles
+muddling
+muddy
+muddying
+mudfish
+mudguard
+mudhole
+mudhole's
+mudholes
+mudir
+mudlark
+mudpack
+mudra
+muds
+mudsill
+mudskipper
+mudskippers
+mudsling
+mudslinger
+mudslingers
+mudslinging
+mudstone
+mudstones
+Mueller
+Mueller's
+Muenster
+muenster
+muesli
+muezzin
+muff
+muff's
+muffin
+muffin's
+muffins
+muffle
+muffled
+muffler
+mufflers
+muffles
+muffling
+muffs
+mufti
+muftis
+mufulira
+mug
+mug's
+mugabe
+mugged
+mugger
+muggers
+muggier
+muggily
+mugginess
+mugging
+muggings
+muggins
+muggy
+mugho
+mugs
+mugwort
+mugwump
+muhammad
+Muhammad
+muhammadan
+Muharram
+Muir
+mujik
+Mukden
+Mukden's
+mukluk
+mulatto
+mulattoes
+mulattos
+mulberries
+mulberry
+mulberry's
+mulch
+mulched
+mulches
+mulching
+Mulciber
+mulct
+muldoon
+mule
+mule's
+mules
+muleta
+muleteer
+muley
+mulga
+mulhouse
+muliebrity
+muling
+mulish
+mulishly
+mulishness
+mulki
+mull
+mullah
+mullein
+mullen
+muller
+mullet
+mullets
+mulley
+mulligan
+Mulligan's
+mulligatawny
+mulliken
+mulling
+mullion
+mullite
+mullock
+mulloway
+multan
+multangular
+multeity
+multi
+multiaperture
+Multibus
+Multibus's
+multicavity
+multicellular
+multicellularity
+multichannel
+multichip
+multicide
+multicollector
+multicollinearity
+multicolor
+multicolor's
+multicolored
+multicolors
+multicolumn
+multicompletion
+multicomponent
+multicomputer
+multicomputer's
+multicomputers
+multicoupler
+Multics
+multicycle
+multideck
+multidimensional
+multidimensionality
+multidisciplinary
+multidrop
+multielectrode
+multiengine
+multifaceted
+multifactorial
+multifactrially
+multifarious
+multifariously
+multifariousness
+multifibered
+multifibered's
+multifibereds
+multifid
+multifigure
+multifile
+multiflora
+multifoil
+multifold
+multifoliate
+multiform
+multiformity
+multifunctioned
+multigravida
+multihop
+multihued
+multihull
+multihulls
+multikey
+multikeys
+multilane
+multilaned
+multilateral
+multilateralist
+multilateralists
+multilaterally
+multilayer
+multilayered
+multilayers
+multilevel
+multileveled
+multilingual
+multilingualism
+multilingualist
+multilingually
+multimedia
+multimegaton
+multimembered
+multimeter
+multimeter's
+multimeters
+multimillionaire
+multinational
+multinomial
+multinuclear
+multinucleate
+multinucleated
+multipacket
+multipactor
+multipara
+multiparous
+multipartite
+multiped
+multiphase
+multiphasic
+multiphastic
+multiplane
+multiple
+multiple's
+multiplepoinding
+multiples
+multiplet
+multiplets
+multiplex
+multiplexed
+multiplexer
+multiplexers
+multiplexes
+multiplexing
+multiplexor
+multiplexor's
+multiplexors
+multipliable
+multiplicable
+multiplicand
+multiplicand's
+multiplicands
+multiplicate
+multiplicates
+multiplication
+multiplications
+multiplicative
+multiplicatively
+multiplicatives
+multiplicity
+multiplied
+multiplier
+multipliers
+multiplies
+multiply
+multiplying
+multipolar
+multipolarity
+multiprocess
+multiprocessing
+multiprocessor
+multiprocessor's
+multiprocessors
+multiprogram
+multiprogrammed
+multiprogramming
+multiprogrammings
+multipronged
+multipunch
+multipunched
+multipurpose
+multiracial
+multiracialism
+multireel
+multirole
+multiscreen
+multisectoral
+multisegment
+multispectral
+multistage
+multistatic
+multistorey
+multistory
+multisubject
+multisyllabic
+multitasking
+multitude
+multitude's
+multitudes
+multitudinous
+multitudinously
+multitudinousness
+multiuser
+multivalence
+multivalent
+multivalued
+multivariable
+multivariate
+multiversity
+multivibrator
+multivocal
+multivolume
+multivolumed
+multiway
+multiword
+multure
+mum
+mumble
+mumbled
+mumbler
+mumblers
+mumbles
+mumbling
+mumblings
+mumbo
+mumchance
+Mumford
+mummer
+mummery
+mummies
+mummification
+mummifications
+mummified
+mummify
+mumming
+mummy
+mummy's
+mump
+mumper
+mumps
+Munch
+munch
+munched
+muncher
+munches
+munching
+Muncie
+Munda
+mundane
+mundanely
+mundaneness
+Mundt
+mundt
+mung
+munga
+munge
+munged
+munger
+mungers
+munges
+munging
+mungings
+mungo
+Munich
+municipal
+municipalities
+municipality
+municipality's
+municipalization
+municipalization's
+municipalizations
+municipalize
+municipalized
+municipalizer
+municipalizers
+municipalizes
+municipalizing
+municipally
+munificence
+munificent
+munificently
+muniment
+muniments
+munist
+munition
+munitions
+munnion
+munro
+munroe
+Munroe
+munsell
+Munsey
+Munsey's
+Munson
+munster
+munt
+muntin
+muntjac
+muntz
+muon
+Muong
+Muong's
+muonic
+murage
+mural
+muralist
+murals
+murasaki
+murat
+murcia
+Murdabad
+murder
+murdered
+murderee
+murderer
+murderers
+murderess
+murdering
+murderous
+murderously
+murderousness
+murders
+Murdoch
+mure
+murex
+muriate
+muriatic
+muricate
+Muriel
+Murillo
+murine
+murk
+murkier
+murkily
+murkiness
+murky
+murman
+Murmansk
+murmur
+murmured
+murmurer
+murmuring
+murmurous
+murmurously
+murmurs
+Murphy
+murra
+murrain
+Murray
+murre
+murrelet
+murrey
+murrhine
+Murrow
+murrow
+murrumbidgee
+murther
+musaceous
+Musca
+muscadel
+muscadine
+muscae
+muscarine
+Muscat
+muscatel
+muscid
+muscle
+muscled
+muscleman
+musclemen
+muscles
+muscling
+muscly
+muscovado
+muscovite
+muscovites
+Muscovy
+muscular
+muscularity
+muscularize
+muscularizes
+muscularly
+musculature
+musculoskeletal
+muse
+mused
+musee
+museology
+muser
+muses
+musette
+musettes
+museum
+museum's
+museumize
+museumizes
+museums
+mush
+musher
+mushier
+mushily
+mushiness
+mushroom
+mushroomed
+mushrooming
+mushrooms
+mushy
+music
+musical
+musicale
+musicality
+musicalization
+musicalization's
+musicalizations
+musicalize
+musicalizes
+musically
+musicals
+musician
+musicianly
+musicians
+musicianship
+musicological
+musicologist
+musicologists
+musicology
+musics
+musil
+musing
+musingly
+musings
+musjid
+musk
+muskeg
+Muskegon
+muskellunge
+musket
+musket's
+musketeer
+musketry
+muskets
+Muskhogean
+muskie
+muskier
+muskies
+muskiness
+muskmelon
+muskox
+muskoxen
+muskrat
+muskrat's
+muskrats
+musks
+musky
+Muslim
+Muslim's
+Muslims
+muslin
+muso
+musquash
+muss
+mussed
+mussel
+mussel's
+mussels
+musses
+musset
+mussier
+mussily
+mussiness
+mussing
+Mussolini
+Mussolini's
+Mussolinis
+Mussorgsky
+Mussorgsky's
+Mussulman
+mussy
+must
+must've
+mustache
+mustached
+mustaches
+mustachio
+mustachioed
+mustachios
+mustafa
+mustang
+mustangs
+mustard
+mustards
+mustee
+musteline
+muster
+mustered
+mustering
+musters
+musth
+mustier
+mustily
+mustiness
+mustn't
+musts
+musty
+mutability
+mutable
+mutableness
+mutably
+mutafacient
+mutagen
+mutagenesis
+mutagenic
+mutagenically
+mutagenicity
+mutandis
+mutant
+mutants
+mutase
+mutate
+mutated
+mutates
+mutating
+mutation
+mutational
+mutationally
+mutations
+mutatis
+mutative
+mutator
+mutators
+mutch
+mutchkin
+mute
+muted
+mutedly
+mutely
+muteness
+muter
+mutes
+mutest
+Muti
+muticous
+mutilate
+mutilated
+mutilates
+mutilating
+mutilation
+mutilations
+mutilator
+mutine
+mutined
+mutineer
+muting
+mutinies
+mutining
+mutinous
+mutinously
+mutinousness
+mutiny
+mutiny's
+mutism
+mutsuhito
+mutt
+mutter
+muttered
+mutterer
+mutterers
+muttering
+mutters
+mutton
+muttonchops
+muttonhead
+muttony
+muttra
+mutual
+mutualism
+mutualist
+mutualistic
+mutuality
+mutualization
+mutualization's
+mutualizations
+mutualize
+mutualized
+mutualizes
+mutualizing
+mutually
+mutuel
+mutule
+muumuu
+Muzak
+Muzo
+Muzo's
+muzorewa
+muzz
+muzzier
+muzzily
+muzziness
+muzzle
+muzzle's
+muzzled
+muzzler
+muzzles
+muzzling
+muzzy
+MVS
+MVT
+Mwalimu
+Mweru
+my
+myalgia
+myalism
+myall
+myasthenia
+mycelium
+Mycenae
+Mycenaean
+mycetoma
+mycetozoan
+mycin
+mycobacteria
+Mycobacterium
+mycology
+mycoplasma
+mycorrhiza
+mycosis
+mycostatin
+mycotic
+mydriasis
+mydriatic
+myel
+myelencephalon
+myelin
+myeline
+myelinization
+myelinization's
+myelinizations
+myelitis
+myeloid
+myeloma
+myers
+myiasis
+mylar
+mylonite
+myna
+mynah
+Mynheer
+myocardial
+myocardiograph
+myocarditis
+myocardium
+myofibril
+myogenic
+myoglobin
+myograph
+myology
+myoma
+myope
+myopia
+myopic
+myopically
+myosin
+myosotis
+myotic
+myotome
+myotonia
+Myra
+Myra's
+myriad
+myriameter
+myriameter's
+myriameters
+myriapod
+Myrica
+myriopod
+myristate
+myrmecological
+myrmecology
+myrmecophagous
+myrmecophile
+Myrmidon
+myrobalan
+Myron
+myrrh
+myrtaceous
+myrtle
+myself
+mysia
+Mysore
+mystagogue
+mystagogy
+mysteries
+mysterious
+mysteriously
+mysteriousness
+mystery
+mystery's
+mystic
+mystic's
+mystical
+mystically
+mysticism
+mysticisms
+mysticize
+mysticizes
+mystics
+mystification
+mystified
+mystifier
+mystifies
+mystify
+mystifying
+mystifyingly
+mystique
+myth
+myth's
+mythes
+mythic
+mythical
+mythically
+mythicization
+mythicize
+mythicized
+mythicizer
+mythicizers
+mythicizes
+mythicizing
+mythize
+mythizes
+mythmaker
+mythmaking
+mythographer
+mythographers
+mythography
+mythologer
+mythologic
+mythological
+mythologically
+mythologies
+mythologist
+mythologization
+mythologize
+mythologized
+mythologizer
+mythologizes
+mythologizing
+mythology
+mythology's
+mythomania
+mythomaniac
+mythopoeia
+mythopoeic
+mythopoetic
+mythopoetical
+mythos
+myths
+mytilene
+myxoedema
+myxoma
+myxomatosis
+myxomycete
+myxovirus
+mzee
+mzungu
+n's
+NAACP
+Naafi
+nab
+Nabataean
+nabbed
+nabbing
+nabis
+Nabisco
+nabla
+nablas
+nablus
+nabob
+Nabokov
+Nabonidus
+naboth
+nacelle
+NaCl
+nacre
+nacreous
+Nadia
+Nadine
+Nadine's
+nadir
+nae
+naevus
+nag
+nag's
+Naga
+Nagaland
+Nagana
+Nagano
+Nagari
+Nagasaki
+nagged
+nagger
+nagging
+naggingly
+nagor
+Nagoya
+Nagoya's
+Nagpur
+nags
+Nagy
+Nagy's
+Nagyszeben
+naha
+Nahuatl
+Nahum
+naiad
+nail
+nailbrush
+nailed
+nailer
+nailfile
+nailhead
+nailing
+nails
+nainsook
+Nair
+Nair's
+naira
+nairn
+Nairobi
+naissant
+naive
+naively
+naiveness
+naiver
+naivete
+naivety
+nakamura
+Nakamura
+Nakayama
+naked
+nakedize
+nakedizes
+nakedly
+nakedness
+naker
+nakhichevan
+nakoma
+Nakoma
+nakuru
+nalchik
+nalgo
+Nama
+namable
+namangan
+Namaqualand
+namas
+name
+name's
+nameable
+named
+nameless
+namelessly
+namelessness
+namelist
+namelists
+namely
+namen
+nameplate
+nameplates
+namer
+namers
+names
+namesake
+namesake's
+namesakes
+nametape
+namhoi
+Namibia
+naming
+namur
+Nan
+Nana
+nanak
+nanchang
+Nancy
+Nancy's
+nanda
+Nanette
+nanga
+nankeen
+Nanking
+nannies
+nanning
+nanny
+nanogram
+nanograms
+nanometer
+nanometers
+nanometric
+Nanook
+nanook
+nanoplankton
+nanosecond
+nanoseconds
+Nansen
+nanterre
+nantes
+Nantucket
+nantung
+Naomi
+nap
+nap's
+napalm
+nape
+napery
+napes
+naphtali
+naphtha
+naphthalene
+naphthalenic
+naphthene
+naphthenic
+naphthol
+naphthyl
+Napier
+Napierian
+napiform
+napkin
+napkin's
+napkins
+Naples
+napless
+Napoleon
+Napoleonic
+Napoleonize
+Napoleonizes
+Napoli
+nappa
+napped
+napper
+nappier
+nappies
+napping
+nappy
+Napravnik
+naps
+nara
+Narayanganj
+narbada
+Narbonne
+Narbonne's
+narc
+narceine
+narcism
+narcissi
+narcissism
+narcissist
+narcissistic
+narcissus
+narcissuses
+narcist
+narcoanalysis
+narcolepsy
+narcoleptic
+narcos
+narcosis
+narcosynthesis
+narcotic
+narcotically
+narcotics
+narcotism
+narcotization
+narcotize
+narcotized
+narcotizes
+narcotizing
+nardoo
+nares
+narial
+nark
+narmada
+Narraganset
+Narragansett
+Narragansett's
+narrate
+narrated
+narrates
+narrating
+narration
+narrational
+narrations
+narrative
+narrative's
+narratively
+narratives
+narrator
+narrators
+narrow
+narrowed
+narrower
+narrowest
+narrowing
+narrowingness
+narrowly
+narrowminded
+narrowness
+narrows
+narthex
+narva
+narvik
+narwal
+narwhal
+narwhal's
+narwhals
+nary
+NASA
+nasal
+nasality
+nasalization
+nasalization's
+nasalizations
+nasalize
+nasalized
+nasalizes
+nasalizing
+nasally
+nascence
+nascency
+nascent
+naseberry
+naseby
+Nash
+nashe
+nasho
+Nashua
+Nashville
+nasion
+nasofrontal
+nasopharynx
+Nassau
+nasser
+nastase
+nastic
+nastier
+nasties
+nastiest
+nastily
+nastiness
+nasturtium
+nasty
+Nat
+natal
+Natalie
+Natalie's
+natalist
+natality
+natant
+natation
+natations
+natatorial
+natatorium
+natatory
+natch
+Natchez
+nate
+Nate
+Nate's
+nates
+Nathan
+Nathanael
+Nathaniel
+natheless
+nation
+nation's
+national
+nationalism
+nationalisms
+nationalist
+nationalist's
+nationalistic
+nationalistically
+nationalists
+nationalities
+nationality
+nationality's
+nationalization
+nationalization's
+nationalizations
+nationalize
+nationalized
+nationalizer
+nationalizers
+nationalizes
+nationalizing
+nationally
+nationals
+nationhood
+nations
+nationwide
+native
+natively
+nativeness
+natives
+nativism
+nativist
+nativistic
+nativity
+NATO
+natrium
+natrolite
+natron
+natsopa
+natter
+natterjack
+nattier
+nattily
+nattiness
+natty
+natural
+naturalism
+naturalist
+naturalistic
+naturalistically
+naturalization
+naturalization's
+naturalizations
+naturalize
+naturalized
+naturalizer
+naturalizers
+naturalizes
+naturalizing
+naturally
+naturalness
+naturals
+naturam
+nature
+nature's
+natured
+natures
+naturism
+naturize
+naturizes
+naturopath
+naturopathy
+nauch
+naucratis
+naught
+naught's
+naughtier
+naughtily
+naughtiness
+naughts
+naughty
+naumachia
+nauplius
+naur
+Nauru
+nausea
+nauseant
+nauseas
+nauseate
+nauseated
+nauseates
+nauseating
+nauseatingly
+nauseous
+nauseously
+nauseousness
+nauseum
+naut
+nautch
+nautical
+nautically
+nautiloid
+nautilus
+navaho
+Navaho
+Navajo
+naval
+navally
+navar
+navarin
+navarino
+navarre
+Navassa
+nave
+navel
+navels
+naves
+navew
+navicert
+navicular
+navies
+navigability
+navigable
+navigableness
+navigably
+navigate
+navigated
+navigates
+navigating
+navigation
+navigational
+navigationally
+navigations
+navigator
+navigator's
+navigators
+navona
+Navona
+navratilova
+navtas
+navvy
+navy
+navy's
+naw
+nawab
+naxalite
+naxos
+nay
+Nayarit
+Nazarene
+Nazareth
+Nazarite
+naze
+Nazi
+Nazi's
+nazification
+nazifications
+nazified
+nazifies
+nazify
+nazifying
+Nazis
+Nazism
+NBC
+NBS
+NC
+NCAA
+NCAR
+NCC
+NCO
+NCR
+nd
+ndola
+NE
+neagh
+Neal
+Neal's
+Neanderthal
+neap
+Neapolitan
+near
+nearby
+Nearctic
+neared
+nearer
+nearest
+nearing
+nearly
+nearness
+nears
+nearside
+nearsighted
+nearsightedly
+nearsightedness
+neat
+neaten
+neater
+neatest
+neath
+neatly
+neatness
+neats
+neb
+nebbish
+Neblett
+nebo
+Nebraska
+Nebraska's
+Nebraskan
+Nebraskan's
+nebuchadnezzar
+Nebuchadnezzar
+Nebuchadnezzar's
+nebula
+nebulae
+nebular
+nebularization
+nebularization's
+nebularizations
+nebularize
+nebularizes
+nebulization
+nebulizations
+nebulize
+nebulized
+nebulizer
+nebulizes
+nebulizing
+nebulosity
+nebulous
+nebulously
+nebulousness
+necessaries
+necessarily
+necessary
+necessitarian
+necessitarianism
+necessitate
+necessitated
+necessitates
+necessitating
+necessitation
+necessitations
+necessities
+necessitous
+necessitously
+necessitousness
+necessity
+neck
+neckar
+neckband
+neckcloth
+necked
+necker
+neckerchief
+necking
+necklace
+necklace's
+necklaces
+neckline
+neckpiece
+necks
+necktie
+necktie's
+neckties
+neckwear
+necrobiosis
+necrolatry
+necrological
+necrologist
+necrologists
+necrology
+necromancer
+necromancers
+necromancy
+necromania
+necromantic
+necromantically
+necrophagia
+necrophagous
+necrophagy
+necrophilia
+necrophilic
+necrophilism
+necrophobia
+necropolis
+necropsy
+necrose
+necroses
+necrosis
+necrotic
+necrotize
+necrotized
+necrotizes
+necrotizing
+necrotomy
+nectar
+nectareous
+nectaries
+nectarine
+nectarize
+nectarizes
+nectarous
+nectary
+Ned
+Ned's
+neddy
+Nederland
+nee
+need
+needed
+needer
+needful
+needfully
+needfulness
+Needham
+needier
+neediness
+needing
+needle
+needlecord
+needlecraft
+needled
+needlefish
+needleful
+needlelike
+needlepoint
+needler
+needlers
+needles
+needless
+needlessly
+needlessness
+needlewoman
+needlewomen
+needlework
+needleworker
+needling
+needly
+needn't
+needs
+needy
+neep
+nefarious
+nefariously
+nefariousness
+nefertiti
+Neff
+Neff's
+negate
+negated
+negater
+negates
+negating
+negation
+negational
+negations
+negative
+negatived
+negatively
+negativeness
+negatives
+negativing
+negativism
+negativisms
+negativist
+negativistic
+negativists
+negativity
+negaton
+negator
+negators
+negatron
+negev
+neglect
+neglected
+neglecter
+neglectful
+neglectfully
+neglectfulness
+neglecting
+neglects
+negligee
+negligees
+negligence
+negligent
+negligently
+negligibility
+negligible
+negligibly
+negotiability
+negotiable
+negotiant
+negotiate
+negotiated
+negotiates
+negotiating
+negotiation
+negotiations
+negotiator
+negotiators
+negotiatory
+Negress
+negresses
+negrillo
+Negritic
+Negrito
+negritude
+Negro
+Negro's
+Negroes
+negroid
+Negroization
+Negroization's
+Negroizations
+Negroize
+Negroizes
+Negrophil
+negrophile
+negrophilism
+Negrophobe
+negropont
+negros
+Negus
+Nehemiah
+Nehru
+Nehru's
+neigh
+neighbor
+neighbor's
+neighbored
+neighborer
+neighborer's
+neighborers
+neighborhood
+neighborhood's
+neighborhoods
+neighboring
+neighborings
+neighborless
+neighborlesses
+neighborlike
+neighborlike's
+neighborlikes
+neighborliness
+neighborly
+neighbors
+neighborship
+neighborship's
+neighborships
+Neil
+Neil's
+neisse
+neither
+Nejd
+nek
+Nekrasov
+nekton
+Nell
+Nell's
+Nellie
+Nellie's
+Nelly
+Nelsen
+Nelsen's
+Nelson
+nelson
+neman
+nemathelminth
+nematic
+nematicidal
+nematicide
+nematocyst
+nematode
+nematodes
+Nembutal
+nemea
+Nemean
+nemertean
+nemery
+nemeses
+Nemesia
+nemesis
+nemophila
+nene
+neo
+neoanthropic
+neoarsphenamine
+Neocene
+neoclassic
+neoclassical
+neoclassicism
+neoclassicist
+neocolonialism
+neoconservative
+neocortex
+neocosmic
+neodymium
+neofascism
+Neogaea
+Neogene
+neogenesis
+neogenetic
+neoglycolipid
+neoglycolipids
+neoimpressionism
+neoliberalism
+neolith
+neolithic
+neological
+neologism
+neologism's
+neologisms
+neologistic
+neologization
+neologize
+neologized
+neologizes
+neologizing
+neology
+neomycin
+neon
+neonatal
+neonatally
+neonate
+neoned
+neoorthodox
+neoorthodoxy
+neophyte
+neophytes
+neoplasia
+neoplasm
+neoplasms
+neoplastic
+neoplasticism
+neoplasticist
+neoplasticists
+neoplasty
+neoprene
+neoscholasticism
+neostigmine
+neotenic
+neoteny
+neoteric
+Neotropical
+neotype
+Neozoic
+Nepal
+Nepal's
+Nepali
+nepenthe
+nepenthean
+neper
+nephanalysis
+nepheline
+nephelinic
+nephelinite
+nephelinitic
+nephelite
+nephelometer
+nephelometer's
+nephelometers
+nephelometric
+nephelometry
+nephew
+nephew's
+nephews
+nephogram
+nephograph
+nephology
+nephometer
+nephometer's
+nephometers
+nephoscope
+nephralgia
+nephrectomy
+nephridium
+nephrite
+nephritic
+nephritis
+nephron
+nephrosis
+nephrotomy
+nepos
+nepotism
+nepotist
+nepotistic
+nepotists
+Neptune
+Neptunian
+neptunium
+neral
+nereid
+Nereis
+nereus
+Neri
+neritic
+nernst
+Nero
+neroli
+neruda
+nerva
+nerval
+nervate
+nervation
+nervations
+nerve
+nerve's
+nerved
+nerveless
+nervelessly
+nervelessness
+nerves
+nervier
+nervine
+nerviness
+nerving
+nervosity
+nervous
+nervously
+nervousness
+nervure
+nervy
+nescience
+nesciences
+nescient
+nesh
+Ness
+nesselrode
+nessus
+nest
+nested
+nester
+nesting
+nestle
+nestled
+nestler
+nestles
+nestling
+Nestor
+Nestorianism
+nestorius
+nests
+net
+net's
+netaji
+netball
+nether
+Netherlands
+nethermost
+netherworld
+netkeeper
+netless
+netlike
+neto
+nets
+netsuke
+nett
+netted
+netter
+netting
+nettle
+nettled
+nettles
+nettlesome
+nettling
+netty
+network
+network's
+networked
+networking
+networks
+Neubrandenburg
+Neumann
+neumatic
+neume
+neural
+neuralgia
+neuralgic
+neurally
+neurasthenia
+neurasthenic
+neurectomy
+neurilemma
+neuritic
+neuritis
+neuro
+neuroanatomic
+neuroanatomy
+neuroanotomy
+neurobiology
+neurobiology's
+neuroblast
+neuroblastoma
+neurochemistry
+neurocirculatory
+neurocoele
+neuroendocrine
+neuroepithelial
+neurofibril
+neurofibrillary
+neurogenic
+neurogenically
+neuroglia
+neuroglial
+neurogram
+neurohypophysis
+neurolemma
+neurological
+neurologically
+neurologist
+neurologists
+neurology
+neuroma
+neuromuscular
+neuron
+neuron's
+neuronal
+neuronic
+neurons
+neuropath
+neuropathic
+neuropathically
+neuropathology
+neuropathy
+neurophysiology
+neuropsychiatric
+neuropsychiatry
+neuropteran
+neuropterous
+neuroses
+neurosis
+neurospora
+neurosurgeon
+neurosurgery
+neurosurgical
+neurotic
+neurotically
+neuroticism
+neuroticize
+neuroticizes
+neurotomy
+neurotoxic
+neurotoxicity
+neurotoxin
+neurotransmitter
+neurotransmitters
+neurotropic
+neurovascular
+neusatz
+neuss
+neustria
+neuter
+neutercane
+neutered
+neuterer
+neuterers
+neutering
+neuterings
+neuters
+neutral
+neutralism
+neutralist
+neutralistic
+neutralists
+neutralities
+neutrality
+neutralization
+neutralization's
+neutralizations
+neutralize
+neutralized
+neutralizer
+neutralizers
+neutralizes
+neutralizing
+neutrally
+neutralness
+neutrals
+neutretto
+neutrino
+neutrino's
+neutrinos
+neutron
+neutronium
+neutrons
+neutrophil
+neutrophile
+neutrophilic
+neutrophilis
+neutrophils
+Neva
+Neva's
+Nevada
+neve
+never
+nevermore
+nevers
+nevertheless
+Neville
+Nevins
+Nevis
+Nevski
+nevus
+New
+new
+Newark
+Newbold
+Newbold's
+newborn
+newborns
+Newburg
+Newbury
+newbury
+Newburyport
+Newcastle
+Newcombe
+Newcomen
+newcomer
+newcomer's
+newcomers
+newel
+Newell
+newer
+newest
+newfangled
+newfangledness
+Newfie
+newfound
+newfoundland
+Newgate
+Newham
+Newhaven
+newish
+newline
+newline's
+newlines
+newly
+newlywed
+newlyweds
+Newman
+Newmanize
+Newmanizes
+Newmarket
+newness
+Newport
+news
+NeWS
+newsagent
+newsagents
+newsboy
+newsboys
+newsbreak
+newscast
+newscaster
+newscasters
+newscasting
+newscasts
+newsgroup
+newsgroup's
+newsgroups
+newshawk
+newsier
+newsiness
+newsless
+newsletter
+newsletter's
+newsletters
+newsmagazine
+newsman
+newsmen
+newsmonger
+newspaper
+newspaper's
+newspaperized
+newspaperized's
+newspaperizeds
+newspaperman
+newspapermen
+newspapers
+newspeak
+newsprint
+newsreel
+newsroom
+newsstand
+Newsweek
+Newsweekly
+newswire
+newsworthiness
+newsworthy
+newsy
+newt
+newton
+Newton
+Newton's
+Newtonabbey
+Newtonian
+Newtown
+newts
+next
+nexus
+nexuses
+ney
+nez
+NFS
+Ngaio
+Ngaliema
+NGK
+Ngoma
+Nguni
+Nguyen
+Nguyen's
+Ngwee
+NH
+Nha
+niacin
+Niagara
+Niamey
+Niamey's
+nib
+nibble
+nibbled
+nibbler
+nibblers
+nibbles
+nibbling
+Nibelung
+nibelungenlied
+niblick
+nibs
+Nicaea
+Nicaean
+Nicaragua
+niccolo
+Niccolo
+nice
+Nice
+nicely
+Nicene
+niceness
+nicer
+nicest
+niceties
+nicety
+niche
+niches
+niching
+Nicholas
+Nicholls
+Nichols
+Nicholson
+nichrome
+Nicias
+nick
+nicked
+nickel
+nickel's
+nickeled
+nickelic
+nickeliferous
+nickeling
+nickelization
+nickelization's
+nickelizations
+nickelize
+nickelizes
+nickelodeon
+nickelous
+nickels
+nicker
+nickered
+nickering
+nicking
+Nicklaus
+nicklaus
+nicknack
+nickname
+nicknamed
+nicknameless
+nicknamer
+nicknames
+nickpoint
+nicks
+Nicobar
+Nicodemus
+Nicol
+Nicola
+Nicolai
+Nicolesco
+Nicolson
+Nicosia
+Nicosia's
+Nicotiana
+nicotinamide
+nicotine
+nicotinic
+nicotinism
+nicotinize
+nicotinizes
+nictheroy
+nictitate
+nictitating
+nidaros
+niddering
+nide
+nidicolous
+nidification
+nidifugous
+nidify
+nidus
+niebuhr
+niece
+niece's
+nieces
+Niedersachsen
+niello
+Nielsen
+Nielson
+niemen
+Niersteiner
+Nietszche
+Nietzsche
+nietzschean
+nieve
+niff
+Niflheim
+niftier
+nifties
+nifty
+Niger
+Niger's
+Nigeria
+Nigerian
+niggard
+niggardliness
+niggardly
+nigger
+niggle
+niggled
+niggler
+niggles
+niggling
+nigglingly
+nigh
+night
+night's
+nightcap
+nightclothes
+nightclub
+nightclubber
+nightclubs
+nightdress
+nighted
+nighters
+nightfall
+nightglow
+nightgown
+nighthawk
+nightie
+nighties
+nightingale
+nightingale's
+nightingales
+nightingalize
+nightingalizes
+nightlife
+nightlong
+nightly
+nightmare
+nightmare's
+nightmares
+nightmarish
+nightmarishly
+nightrider
+nights
+nightshade
+nightshirt
+nightside
+nightspot
+nightstand
+nightstick
+nighttide
+nighttime
+nightwalker
+nightwear
+nighty
+nigrescent
+nigrify
+nigritude
+NIH
+nihilianism
+nihilism
+nihilisms
+nihilist
+nihilistic
+nihilistically
+nihility
+nihon
+niigata
+nijinsky
+Nijinsky
+Nijmegen
+Nikaria
+Nike
+Nikko
+Nikko's
+Nikolai
+Nikolai's
+Nikolainkaupunki
+Nikolayev
+nil
+Nile
+nilgai
+nilgiri
+nill
+nilly
+nilmanifold
+Nilotic
+nilpotent
+Nilsen
+Nilsson
+nim
+nimble
+nimbleness
+nimbler
+nimblest
+nimblewit
+nimbly
+nimbostratus
+nimbus
+nimbused
+nimbuses
+NIMH
+nimiety
+Nimitz
+nimming
+nimonic
+Nimrod
+Nimwegen
+Nina
+nincompoop
+nincompoopery
+nine
+ninebark
+ninefold
+ninepin
+ninepins
+nines
+nineteen
+nineteens
+nineteenth
+nineties
+ninetieth
+ninety
+ninetyfold
+Nineveh
+Ningpo
+ningsia
+ninnies
+ninny
+ninnyhammer
+Ninon
+ninth
+ninus
+Niobe
+niobic
+niobium
+niobous
+niort
+nip
+nipa
+nipigon
+Nipissing
+nipped
+nipper
+nippers
+nippier
+nippily
+nippiness
+nipping
+nippingly
+nipple
+nipples
+nipplewort
+Nippon
+Nipponize
+Nipponizes
+nippur
+nippy
+nips
+nirvana
+nisei
+Nisei
+niseis
+Nishapur
+nishinomiya
+Nissen
+nisus
+nit
+nite
+niter
+nitid
+niton
+nitpick
+nitramine
+nitrate
+nitrated
+nitrates
+nitrating
+nitration
+nitrations
+nitrator
+nitric
+nitride
+nitriding
+nitridization
+nitridization's
+nitridizations
+nitridize
+nitridizes
+nitrification
+nitrifications
+nitrify
+nitrile
+nitrite
+nitro
+nitrobacteria
+nitrobenzene
+nitrocellulose
+nitrocellulosic
+nitrochloroform
+nitrofuran
+nitrogen
+nitrogenization
+nitrogenization's
+nitrogenizations
+nitrogenize
+nitrogenized
+nitrogenizes
+nitrogenizing
+nitrogenous
+nitroglycerin
+nitroglycerine
+nitrohydrochloric
+nitrometer
+nitromethane
+nitroparaffin
+nitros
+nitrosamine
+nitroso
+nitrosoamine
+nitrosyl
+nitrous
+nitty
+nitwit
+nitwitted
+Niue
+nival
+nivation
+niven
+niveous
+nivernais
+nix
+nixed
+nixer
+nixes
+nixie
+nixing
+Nixon
+Nizam
+nizhni
+NJ
+njord
+nkomo
+nkrumah
+NM
+nm
+NMR
+NNE
+NNW
+no
+NOAA
+Noachian
+Noah
+nob
+nobbier
+nobble
+nobbled
+nobbling
+nobbut
+nobby
+Nobel
+nobelium
+nobiliary
+nobilities
+nobility
+noble
+Noble
+nobleman
+noblemen
+nobleness
+nobler
+nobles
+noblesse
+noblest
+noblewoman
+nobly
+nobodies
+nobody
+nobody's
+nocent
+noces
+nociceptive
+nock
+nocking
+noctambulation
+noctambulism
+noctambulist
+Noctiluca
+noctilucent
+noctuid
+noctule
+nocturn
+nocturnal
+nocturnally
+nocturne
+nocuous
+nocuously
+nod
+nod's
+nodal
+nodality
+nodally
+nodded
+nodder
+noddies
+nodding
+noddle
+noddy
+node
+node's
+nodes
+nodi
+nodical
+nodose
+nodosity
+nods
+nodular
+nodulation
+nodule
+nodules
+nodulize
+nodulizes
+nodus
+Noel
+noes
+noesis
+Noetherian
+noetic
+nofretete
+nog
+noggin
+nogging
+Noguchi
+noh
+nohow
+noil
+noise
+noised
+noiseless
+noiselessly
+noisemake
+noisemaker
+noisemakers
+noisemaking
+noises
+noisette
+noisier
+noisily
+noisiness
+noising
+noisome
+noisomely
+noisomeness
+noisy
+Nolan
+Nolan's
+nolde
+Noll
+Noll's
+nolle
+nolo
+noma
+nomad
+nomadic
+nomadism
+nomadization
+nomadization's
+nomadizations
+nomadize
+nomadized
+nomadizes
+nomadizing
+nomads
+nomarch
+nomarchy
+nombles
+nombril
+nome
+nomen
+nomenclator
+nomenclatorial
+nomenclatural
+nomenclature
+nomenclatures
+nomic
+nomina
+nominal
+nominalism
+nominalist
+nominalistic
+nominalize
+nominalized
+nominalizes
+nominalizing
+nominally
+nominate
+nominated
+nominates
+nominating
+nomination
+nomination's
+nominations
+nominative
+nominatively
+nominator
+nominators
+nominee
+nominees
+nomism
+nomocracy
+nomogram
+nomogram's
+nomograms
+nomograph
+nomographer
+nomographic
+nomographically
+nomographies
+nomography
+nomological
+nomology
+nomothetic
+non
+nonacid
+nonacknowledgment
+nonacknowledgment's
+nonacknowledgments
+nonactive
+nonadjacent
+nonage
+nonagenarian
+nonaggression
+nonagon
+nonagricultural
+nonaligned
+nonallelic
+nonanalytic
+nonanesthetized
+nonanoic
+nonapostatizing
+nonapostatizing's
+nonapostatizings
+nonappearance
+nonbank
+nonblank
+nonblanks
+nonblocking
+nonbook
+nonbusiness
+noncalcareous
+noncanonization
+noncanonization's
+noncanonizations
+noncarbohydrate
+noncartelized
+noncartelized's
+noncartelizeds
+noncatechizable
+noncatechizable's
+noncatechizables
+noncausal
+nonce
+nonchalance
+nonchalant
+nonchalantly
+nonchalantness
+noncharitable
+noncivilized
+noncivilized's
+noncivilizeds
+noncoloring
+noncoloring's
+noncolorings
+noncom
+noncombatant
+noncommissioned
+noncommittal
+noncommittally
+noncompliance
+noncomputable
+nonconcurrence
+nonconcurrency
+noncondensing
+nonconducting
+nonconductor
+nonconductors
+nonconfidence
+nonconform
+nonconformable
+nonconformably
+nonconformance
+nonconformer
+nonconforming
+nonconformism
+nonconformist
+nonconformists
+nonconformity
+nonconservative
+noncontiguous
+noncontributory
+noncooperation
+noncooperationist
+noncooperative
+noncooperator
+noncritical
+noncrossing
+noncrystallizable
+noncrystallizable's
+noncrystallizables
+noncrystallized
+noncrystallized's
+noncrystallizeds
+noncrystallizing
+noncrystallizing's
+noncrystallizings
+noncurrent
+noncyclic
+nondecreasing
+nondeductibility
+nondeductible
+nondefense
+nondefense's
+nondefenses
+nondeforming
+nondegenerate
+nondemobilization
+nondemobilization's
+nondemobilizations
+nondemocratic
+nondescript
+nondescriptly
+nondestructive
+nondestructively
+nondeterminacy
+nondeterminate
+nondeterminately
+nondeterminism
+nondeterministic
+nondeterministically
+nondialyzing
+nondialyzing's
+nondialyzings
+nondimensionalize
+nondimensionalized
+nondirected
+nondirectional
+nondirective
+nondisclosure
+nondisclosures
+nondiscriminatory
+nondisjunction
+nondisjunctional
+nondispersive
+nondistinctive
+nondivided
+nondormant
+nondramatic
+nondrying
+nondurable
+none
+noneconomic
+noneconomist
+noneffective
+nonego
+nonelectrolyte
+nonemergency
+nonempty
+nonentities
+nonentity
+nonequivalence
+nonequivalent
+nones
+nonessential
+nonesuch
+nonet
+nonetheless
+noneuclidean
+nonevent
+nonexecutable
+nonexistence
+nonexistent
+nonextensible
+nonfat
+nonfavorite
+nonfavorite's
+nonfavorites
+nonfeasance
+nonferrous
+nonfiction
+nonfictional
+nonfigurative
+nonflammable
+nonflowering
+nonfragmenting
+nonfulfillment
+nonfulfillment's
+nonfulfillments
+nonfunctional
+nong
+nongalvanized
+nongalvanized's
+nongalvanizeds
+nongelatinizing
+nongelatinizing's
+nongelatinizings
+nongovernment
+nongovernmental
+nonharmonic
+nonhierarchic
+nonhierarchical
+nonhuman
+nonhydrolyzable
+nonhydrolyzable's
+nonhydrolyzables
+nonidentical
+nonillion
+nonimmunized
+nonimmunized's
+nonimmunizeds
+nonimpact
+nonimpinging
+noninductive
+noninteger
+noninteracting
+noninterference
+nonintersecting
+nonintervention
+noninterventionist
+nonintuitive
+noninvertible
+noninverting
+noninvolvement
+nonionic
+nonionized
+nonionized's
+nonionizeds
+nonionizing
+nonionizing's
+nonionizings
+nonjoinder
+nonjuring
+nonjuror
+nonlinear
+nonlinearities
+nonlinearity
+nonlinearity's
+nonlinearly
+nonlinguist
+nonlinguistic
+nonliterary
+nonliterate
+nonloaded
+nonlocal
+nonlocalized
+nonlocalized's
+nonlocalizeds
+nonmagical
+nonmagnetizable
+nonmagnetizable's
+nonmagnetizables
+nonmatching
+nonmetal
+nonmetallic
+nonmoral
+nonmultiple
+nonnegative
+nonnitrogenized
+nonnitrogenized's
+nonnitrogenizeds
+nonnucleated
+nonnumeric
+nono
+nonobjective
+nonobjectivism
+nonobjectivist
+nonobjectivity
+nonobservance
+nonoccurrence
+nonogenarian
+nonorganization
+nonorganization's
+nonorganizations
+nonorthogonal
+nonorthogonality
+nonowner
+nonowners
+nonoxidizable
+nonoxidizable's
+nonoxidizables
+nonoxidizing
+nonoxidizing's
+nonoxidizings
+nonparallel
+nonparametric
+nonparametrical
+nonparametrics
+nonpareil
+nonparlor
+nonparlor's
+nonparlors
+nonparous
+nonparticipant
+nonparticipating
+nonparticipation
+nonpartisan
+nonpartisanship
+nonparty
+nonpast
+nonpaternity
+nonpathogenic
+nonpayment
+nonpenalized
+nonpenalized's
+nonpenalizeds
+nonperishable
+nonpermanent
+nonpersonal
+nonperturbing
+nonphosphorized
+nonphosphorized's
+nonphosphorizeds
+nonplus
+nonpluses
+nonpoisonous
+nonpolar
+nonpolarizable
+nonpolarizable's
+nonpolarizables
+nonpolarized
+nonpolarizing
+nonpolarizing's
+nonpolarizings
+nonpolitical
+nonporous
+nonpositive
+nonpossession
+nonpossessor
+nonprescription
+nonprint
+nonprinting
+nonprocedural
+nonprocedurally
+nonproducer
+nonproductive
+nonproductively
+nonproductiveness
+nonprofessional
+nonprofessionally
+nonprofit
+nonprofitable
+nonprogrammable
+nonprogrammer
+nonprogressive
+nonproliferation
+nonpros
+nonprossed
+nonprossing
+nonprotein
+nonracial
+nonrandom
+nonrationalized
+nonrationalized's
+nonrationalizeds
+nonreactive
+nonreader
+nonrealistic
+nonrealization
+nonrealization's
+nonrealizations
+nonreclosing
+nonrecognized
+nonrecognized's
+nonrecognizeds
+nonrecording
+nonrecursive
+nonrecursively
+nonreducing
+nonredundant
+nonregulation
+nonreimbursable
+nonrelativistic
+nonrelevance
+nonrelevant
+nonreligious
+nonremovable
+nonrenewable
+nonrepresentational
+nonrepresentationalism
+nonrepresentative
+nonresidence
+nonresidency
+nonresident
+nonresidential
+nonresistance
+nonresistant
+nonrespondent
+nonrespondents
+nonresponse
+nonrestraint
+nonrestricted
+nonrestrictive
+nonretractable
+nonreturnable
+nonrigid
+nonscheduled
+nonschematized
+nonschematized's
+nonschematizeds
+nonscientific
+nonseasonal
+nonsecretor
+nonsectarian
+nonsegregated
+nonsegregation
+nonsense
+nonsensical
+nonsensically
+nonsensicalness
+nonsensitized
+nonsensitized's
+nonsensitizeds
+nonsequenced
+nonsignificant
+nonsignificantly
+nonsingular
+nonskid
+nonslip
+nonsmoker
+nonsmokers
+nonsocial
+nonspecialist
+nonspecialist's
+nonspecialists
+nonspecialized
+nonspecialized's
+nonspecializeds
+nonspecific
+nonsporting
+nonstandard
+nonstandardized
+nonstandardized's
+nonstandardizeds
+nonstarter
+nonstative
+nonstick
+nonstop
+nonstriated
+nonstylized
+nonstylized's
+nonstylizeds
+nonsuch
+nonsuit
+nonsupervisory
+nonsupport
+nonsyllabic
+nonsympathizer
+nonsympathizer's
+nonsympathizers
+nonsynchronous
+nonsynthesized
+nonsynthesized's
+nonsynthesizeds
+nontechnical
+nontechnically
+nontemporal
+nontemporizing
+nontemporizing's
+nontemporizings
+nontenure
+nonterminal
+nonterminal's
+nonterminals
+nonterminating
+nontermination
+nontrivial
+nonuniform
+nonunion
+nonunionism
+nonuse
+nonuser
+nonutilized
+nonutilized's
+nonutilizeds
+nonverbal
+nonverbally
+nonveteran
+nonveterans
+nonviable
+nonviolence
+nonviolent
+nonviolently
+nonvisualized
+nonvisualized's
+nonvisualizeds
+nonvocal
+nonvolatile
+nonvolatilized
+nonvolatilized's
+nonvolatilizeds
+nonvolunteer
+nonvolunteers
+nonvoter
+nonvoting
+nonvulcanizable
+nonvulcanizable's
+nonvulcanizables
+nonwhite
+nonworker
+nonzero
+noodle
+noodled
+noodles
+noodling
+nook
+nook's
+nooks
+noon
+noonday
+nooning
+noons
+noontide
+noontime
+noordbrabant
+Noordholland
+noose
+nooses
+noosing
+nopal
+nope
+nor
+Nora
+Nora's
+noradrenalin
+noradrenaline
+nord
+nordau
+Nordhoff
+Nordhoff's
+Nordic
+Nordkyn
+Nordstrom
+Nordstrom's
+Noreen
+Noreen's
+norepinephrine
+Norfolk
+norge
+noria
+noricum
+norite
+nork
+Norland
+norm
+norm's
+Norma
+normal
+normalcy
+normality
+normalizable
+normalization
+normalization's
+normalizations
+normalize
+normalized
+normalizer
+normalizers
+normalizes
+normalizing
+normally
+normals
+Norman
+Normandy
+Normanization
+Normanization's
+Normanizations
+Normanize
+Normanized
+Normanizer
+Normanizers
+Normanizes
+Normanizing
+Normanton
+normative
+normatively
+normativeness
+normed
+normotensive
+norms
+Norn
+norodom
+Norris
+Norristown
+Norse
+Norseman
+north
+north's
+Northallerton
+Northampton
+Northamptonshire
+northbound
+Northcliffe
+Northcountryman
+northeast
+northeaster
+northeasterly
+northeastern
+northeasternmost
+northeastward
+northeastwards
+norther
+northerly
+northern
+northerner
+northerners
+northernize
+northernizes
+northernly
+northernmost
+northers
+Northfield
+northing
+northland
+Northman
+Northmen
+northmost
+Northrop
+Northrop's
+Northrup
+Northrup's
+norths
+Northumberland
+Northumbria
+Northumbrian
+Northumbrians
+northward
+northwards
+northwest
+northwester
+northwesterly
+northwestern
+northwestward
+northwestwards
+Northwich
+Norton
+Norwalk
+Norway
+Norwegian
+Norwich
+nose
+nosebag
+nosebag's
+nosebags
+noseband
+nosebleed
+nosebleed's
+nosebleeds
+nosed
+nosegay
+nosepiece
+noses
+nosey
+noseying
+nosh
+nosher
+nosier
+nosily
+nosiness
+nosing
+nosize
+nosography
+nosologic
+nosological
+nosologically
+nosology
+nostalgia
+nostalgic
+nostalgically
+Nostoc
+nostology
+Nostradamus
+Nostrand
+Nostrand's
+nostril
+nostril's
+nostrils
+nostrum
+nosy
+not
+nota
+notability
+notable
+notableness
+notables
+notably
+notarial
+notarially
+notarius
+notarization
+notarizations
+notarize
+notarized
+notarizes
+notarizing
+notary
+notate
+notated
+notates
+notating
+notation
+notation's
+notational
+notationally
+notations
+notative
+notch
+notched
+notches
+notching
+note
+notebook
+notebook's
+notebooks
+notecase
+noted
+notedly
+notedness
+noteless
+notelet
+notepaper
+noter
+notes
+noteworthily
+noteworthiness
+noteworthy
+nothing
+nothingize
+nothingizes
+nothingness
+nothings
+notice
+noticeable
+noticeably
+noticeboard
+noticeboards
+noticed
+notices
+noticing
+notifiable
+notification
+notifications
+notified
+notifier
+notifiers
+notifies
+notify
+notifying
+noting
+notion
+notional
+notionality
+notionally
+notions
+notitia
+notochord
+notocord
+Notogaea
+notoriety
+notorious
+notoriously
+notoriousness
+Notornis
+Nototherium
+Notour
+Notre
+Nottingham
+Nottinghamshire
+notum
+Notus
+notwithstanding
+nougat
+noumenon
+noun
+noun's
+nouncing
+nounize
+nounizes
+nouns
+nourish
+nourished
+nourisher
+nourishes
+nourishing
+nourishment
+nous
+nouveau
+nouvelle
+Nov
+nova
+nova's
+novaculite
+novae
+Novak
+Novak's
+novalis
+novara
+novas
+novation
+novaya
+novel
+novel's
+novelese
+novelette
+novelettish
+novelist
+novelist's
+novelistic
+novelists
+novelization
+novelization's
+novelizations
+novelize
+novelized
+novelizer
+novelizers
+novelizes
+novelizing
+novella
+novelle
+novello
+novels
+novelties
+novelty
+novelty's
+November
+November's
+Novembers
+novemdecillion
+novena
+novercal
+Novgorod
+novice
+novice's
+novices
+novitiate
+novitiates
+novocaine
+Novokuznetsk
+Novosibirsk
+Novosibirsk's
+now
+nowaday
+nowadays
+noway
+noways
+nowel
+nowhence
+nowhere
+nowheres
+nowhither
+nowise
+nows
+nowt
+nox
+noxious
+noxiously
+noxiousness
+noyade
+noyau
+noyes
+Noyes
+noyon
+nozzle
+nozzles
+NRC
+nroff
+nroff's
+NSF
+nth
+NTIS
+NTP
+nu
+nuance
+nuanced
+nuances
+nub
+Nuba
+nubbin
+nubble
+nubbles
+nubbly
+nubecula
+Nubia
+Nubia's
+Nubian
+nubians
+nubile
+nubility
+Nucci
+nucellar
+nucelli
+nucellus
+nucha
+nuchal
+nucleant
+nuclear
+nuclease
+nucleate
+nucleated
+nucleation
+nucleator
+nuclei
+nucleic
+nuclein
+nucleocapsid
+nucleolar
+nucleoli
+nucleolus
+nucleon
+nucleon's
+nucleonic
+nucleonics
+nucleons
+nucleophile
+nucleophilic
+nucleophilically
+nucleophilicity
+nucleoplasm
+nucleoplasmatic
+nucleoplasmic
+nucleoprotein
+nucleoside
+nucleosynthesis
+nucleotidase
+nucleotide
+nucleotide's
+nucleotides
+nucleus
+nucleuses
+nuclide
+nuclidic
+nuddy
+nude
+nudely
+nudeness
+nuder
+nudes
+nudest
+nudge
+nudged
+nudger
+nudges
+nudging
+nudibranch
+nudicaul
+nudism
+nudist
+nudists
+nudity
+nudum
+nuevo
+Nuffield
+nugatory
+Nugent
+nugent
+nuggar
+nugget
+nuggets
+nuggety
+nuisance
+nuisance's
+nuisances
+nuissance
+nuke
+nukus
+null
+nullah
+nullarbor
+nulled
+nullification
+nullificationist
+nullifidian
+nullified
+nullifier
+nullifiers
+nullifies
+nullify
+nullifying
+nullipara
+nulliparous
+nullity
+nulls
+Nullstellensatz
+numantia
+numb
+numbat
+numbed
+number
+numberable
+numbered
+numberer
+numbering
+numberless
+numberplate
+numbers
+numbfish
+numbing
+numbingly
+numbles
+numbly
+numbness
+numbs
+numbskull
+numdah
+numen
+numerable
+numeral
+numeral's
+numerally
+numerals
+numerary
+numerate
+numerated
+numerates
+numerating
+numeration
+numerations
+numerator
+numerator's
+numerators
+numeric
+numerical
+numerically
+numerics
+numerological
+numerology
+numerous
+numerously
+numerousness
+numia
+numidia
+numinous
+numis
+numismatic
+numismatically
+numismatics
+numismatist
+nummary
+nummular
+nummulite
+numnah
+numskull
+nun
+nun's
+nunatak
+nunc
+nunciation
+nunciature
+nuncio
+nuncle
+nuncupate
+nuncupation
+nuncupative
+Nuneaton
+nunes
+nunhood
+nunnery
+nunny
+nuns
+nuovo
+Nupe
+nuptial
+nuptiality
+nuptialize
+nuptializes
+nuptials
+Nuremberg
+nureyev
+nuri
+nuristan
+nurmi
+nurse
+nurse's
+nursed
+nursemaid
+nurser
+nurseries
+nursery
+nursery's
+nurserymaid
+nurseryman
+nurses
+nursing
+nursling
+nurtural
+nurturant
+nurture
+nurtured
+nurturer
+nurtures
+nurturing
+nusa
+nut
+nut's
+nutant
+nutate
+nutated
+nutates
+nutating
+nutation
+nutational
+nutbrown
+nutcase
+nutcrack
+nutcracker
+nutgall
+nuthatch
+nuthouse
+nutlet
+nutlike
+nutmeg
+nutria
+nutrient
+nutrients
+nutriment
+nutrition
+nutrition's
+nutritional
+nutritionally
+nutritionist
+nutritionists
+nutritious
+nutritiously
+nutritiousness
+nutritive
+nutritively
+nuts
+nutshell
+nutted
+nutter
+nuttier
+nuttiness
+nutting
+nutty
+nutwood
+nux
+nuzzle
+nuzzled
+nuzzles
+nuzzling
+NV
+NW
+NY
+nyala
+Nyanja
+nyanza
+nyasa
+Nyasaland
+NYC
+nyctaginaceous
+nyctalopia
+nyctinasty
+nyctitropism
+nyctophobia
+nye
+nyeman
+nyerere
+nylghau
+nylon
+nylons
+nymph
+nympha
+nymphaeaceous
+nymphal
+nymphalid
+nymphet
+nymphette
+nympho
+nympholepsy
+nympholept
+nymphomania
+nymphomaniac
+nymphomaniacal
+nymphomaniacs
+nymphs
+Nynorsk
+Nyoro
+Nyquist
+Nyquist's
+NYSE
+nystagmic
+nystagmus
+nystatin
+NYT
+NYU
+nyx
+O'Brien
+O'Brien's
+o'clock
+O'Clock
+O'Connell
+O'Connell's
+O'Connor
+O'Connor's
+O'Dell
+O'Dell's
+O'Donnell
+O'Donnell's
+O'Dwyer
+O'Dwyer's
+o'er
+O'Er
+O'Hare
+O'Hare's
+O'Leary
+O'Leary's
+O'Neill
+O'Neill's
+o's
+O'Shea
+O'Shea's
+O'Sullivan
+O'Sullivan's
+oaf
+oafish
+oafishly
+oafishness
+oafs
+Oahu
+oak
+oaken
+Oakham
+Oakland
+Oakley
+Oakmont
+oaks
+oakum
+Oakville
+oakwood
+oar
+oar's
+oared
+oarfish
+oaring
+oarlock
+oars
+oarsman
+oarsmanship
+oases
+oasis
+oast
+oat
+oatcake
+oatcake's
+oatcakes
+oaten
+oater
+oates
+oath
+oaths
+oatmeal
+oats
+Oaxaca
+oba
+Obadiah
+oban
+obasanjo
+obbligato
+obconic
+obcordate
+obduracy
+obdurate
+obdurately
+obdurateness
+obeah
+obedience
+obediences
+obedient
+obedientiary
+obediently
+obeisance
+obeisant
+obeisantly
+obelisk
+obelize
+obelized
+obelizes
+obelizing
+Oberammergau
+Oberhausen
+Oberland
+Oberlin
+Oberon
+obese
+obesity
+obey
+obeyed
+obeyer
+obeying
+obeys
+obfuscate
+obfuscated
+obfuscater
+obfuscates
+obfuscating
+obfuscation
+obfuscations
+obfuscatory
+obi
+obit
+obiter
+obituaries
+obituary
+object
+object's
+objected
+objectification
+objectifications
+objectified
+objectifies
+objectify
+objectifying
+objecting
+objection
+objection's
+objectionable
+objectionableness
+objectionably
+objections
+objective
+objectively
+objectiveness
+objectives
+objectivism
+objectivist
+objectivistic
+objectivity
+objectivize
+objectivizes
+objectization
+objectization's
+objectizations
+objectize
+objectizes
+objectless
+objectlessness
+objector
+objector's
+objectors
+objects
+objurgate
+objurgated
+objurgates
+objurgating
+objurgation
+objurgations
+objurgatory
+oblanceolate
+oblast
+oblate
+oblately
+oblateness
+oblation
+oblations
+obligate
+obligated
+obligately
+obligates
+obligating
+obligation
+obligation's
+obligational
+obligations
+obligato
+obligator
+obligatorily
+obligatory
+oblige
+obliged
+obligee
+obliger
+obliges
+obliging
+obligingly
+obligingness
+obligor
+obligors
+oblique
+obliquely
+obliqueness
+obliquity
+obliterate
+obliterated
+obliterates
+obliterating
+obliteration
+obliterations
+obliterative
+obliteratively
+obliterator
+obliviated
+obliviates
+obliviating
+oblivion
+oblivionize
+oblivionizes
+oblivions
+oblivious
+obliviously
+obliviousness
+oblong
+oblongatal
+oblongated
+oblongish
+oblongly
+oblongness
+obloquious
+obloquy
+obmutescence
+obnoxious
+obnoxiously
+obnoxiousness
+obnubilate
+obnubilated
+obnubilates
+obnubilating
+obnubilation
+obnubilations
+oboe
+oboes
+oboist
+obolus
+obote
+obovate
+obovoid
+Obraztsova
+obreption
+obscene
+obscenely
+obscenities
+obscenity
+obscurant
+obscurantic
+obscurantism
+obscurantist
+obscuration
+obscurations
+obscure
+obscured
+obscurely
+obscureness
+obscurer
+obscures
+obscuring
+obscurities
+obscurity
+obscurum
+obsecrate
+obsequent
+obsequies
+obsequious
+obsequiously
+obsequiousness
+obsequy
+observable
+observably
+observance
+observance's
+observances
+observant
+observantly
+observation
+observation's
+observational
+observationally
+observations
+observatories
+observatory
+observe
+observed
+observer
+observers
+observes
+observing
+observingly
+obsess
+obsessed
+obsesses
+obsession
+obsession's
+obsessional
+obsessionally
+obsessions
+obsessive
+obsessively
+obsessiveness
+obsidian
+obsolesce
+obsolescence
+obsolescent
+obsolescently
+obsolete
+obsoleted
+obsoletely
+obsoleteness
+obsoletes
+obsoleting
+obstacle
+obstacle's
+obstacles
+obstetric
+obstetrical
+obstetrically
+obstetrician
+obstetrician's
+obstetricians
+obstetrics
+obstinacy
+obstinate
+obstinately
+obstinateness
+obstipation
+obstreperous
+obstreperously
+obstreperousness
+obstruct
+obstructed
+obstructer
+obstructing
+obstruction
+obstruction's
+obstructionism
+obstructionist
+obstructionistic
+obstructions
+obstructive
+obstructively
+obstructiveness
+obstructor
+obstructs
+obstruent
+obtain
+obtainability
+obtainable
+obtainably
+obtained
+obtainer
+obtaining
+obtainment
+obtains
+obtect
+obtected
+obtest
+obtestation
+obtrude
+obtruded
+obtruder
+obtrudes
+obtruding
+obtrusion
+obtrusive
+obtrusively
+obtrusiveness
+obtund
+obturate
+obturated
+obturates
+obturating
+obturation
+obturator
+obtuse
+obtusely
+obtuseness
+obtuser
+obtusest
+obverse
+obversely
+obvert
+obviate
+obviated
+obviates
+obviating
+obviation
+obviations
+obvious
+obviously
+obviousness
+obvolute
+oca
+ocarina
+Occam
+Occam's
+occas
+occasion
+occasional
+occasionalism
+occasionally
+occasioned
+occasioning
+occasionings
+occasions
+occident
+occidental
+Occidentalization
+Occidentalization's
+Occidentalizations
+Occidentalize
+Occidentalized
+Occidentalizes
+Occidentalizing
+occidentally
+occipital
+occipitally
+occiput
+occlude
+occluded
+occludent
+occludes
+occluding
+occlusal
+occlusion
+occlusion's
+occlusions
+occlusive
+occular
+occult
+occultate
+occultation
+occultations
+occulter
+occultism
+occultist
+occultly
+occupancies
+occupancy
+occupant
+occupant's
+occupants
+occupation
+occupation's
+occupational
+occupationally
+occupations
+occupied
+occupier
+occupiers
+occupies
+occupy
+occupying
+occur
+occurred
+occurrence
+occurrence's
+occurrences
+occurrent
+occurring
+occurs
+ocean
+ocean's
+oceana
+oceanarium
+oceanfront
+oceangoing
+Oceania
+oceanic
+oceanid
+oceanographer
+oceanographer's
+oceanographers
+oceanographic
+oceanographical
+oceanographically
+oceanography
+oceanologic
+oceanological
+oceanologically
+oceanologist
+oceanology
+oceans
+oceanside
+oceanus
+ocellar
+ocellate
+ocellated
+ocellation
+ocelli
+ocellus
+ocelot
+och
+ocher
+ocher's
+ocherous
+ochers
+ochlocracy
+ochlocrat
+ochlocratic
+ochlocratical
+ochlophobia
+Ochman
+ochone
+ochrea
+ockeghem
+ocker
+Ockham
+ocode
+oconomowoc
+Oconomowoc
+ocotillo
+Ocrea
+Oct
+octachord
+octad
+octadecyl
+octagon
+octagonal
+octagonally
+octagons
+octahedra
+octahedral
+octahedrally
+octahedrite
+octahedron
+octal
+octals
+octamerous
+octameter
+octameter's
+octameters
+octandrious
+octane
+octanedioic
+octangle
+octangular
+Octans
+octant
+octant's
+octants
+octarchy
+octaroon
+octavalent
+octave
+octaves
+Octavia
+Octavian
+octavo
+octennial
+octet
+octile
+octillion
+October
+October's
+Octobers
+Octobrist
+octocentenary
+octodecillion
+octodecimo
+octogenarian
+octonary
+octoploid
+octoploidy
+octopod
+octopodan
+octopodous
+octopus
+octoroon
+octosyllabic
+octosyllable
+octroi
+octu
+octuple
+octylphenylether
+ocular
+ocularist
+oculist
+oculomotor
+odalisque
+odd
+oddball
+oddball's
+oddballs
+odder
+oddest
+oddfellow
+oddities
+oddity
+oddity's
+oddly
+oddment
+oddness
+odds
+ode
+ode's
+odea
+oded
+Odelsting
+odense
+oder
+Oderberg
+Oderberg's
+Oderbergs
+odes
+Odessa
+odeum
+odic
+odilo
+Odin
+odious
+odiously
+odiousness
+odium
+odoacer
+odograph
+odometer
+odometer's
+odometers
+odontalgia
+odontoblast
+Odontoglossum
+odontograph
+odontoid
+odontologst
+odontology
+odontophore
+odor
+odor's
+odorant
+odored
+odorful
+odoriferous
+odoriferously
+odoriferousness
+odorize
+odorized
+odorizer
+odorizes
+odorizing
+odorless
+odorlesses
+odorous
+odorously
+odorousness
+odors
+odovacar
+odra
+odyl
+Odysseus
+odyssey
+oecology
+Oedipal
+oedipal
+Oedipally
+Oedipus
+oeillade
+OEM
+OEM's
+OEMS
+oenology
+oenomel
+oenone
+oersted
+oestrin
+oestrogen
+oestrone
+oestrous
+oestrus
+oeuvre
+oeuvres
+of
+ofay
+off
+offa
+offal
+offaly
+offbeat
+offcast
+offcut
+offcuts
+Offenbach
+offend
+offended
+offender
+offenders
+offending
+offends
+offense
+offense's
+offenseless
+offenselesses
+offenselessly
+offenses
+offensive
+offensively
+offensiveness
+offensives
+offer
+offered
+offerer
+offerers
+offering
+offerings
+offers
+offertories
+offertory
+offhand
+offhanded
+offhandedly
+offhandedness
+office
+office's
+officeholder
+officeholders
+officemate
+officemates
+officer
+officer's
+officered
+officers
+offices
+official
+official's
+officialdom
+officialese
+officialism
+officialization
+officialization's
+officializations
+officialize
+officializes
+officially
+officials
+officiant
+officiary
+officiate
+officiated
+officiates
+officiating
+officiation
+officiations
+officinal
+officio
+officious
+officiously
+officiousness
+offing
+offish
+offishly
+offishness
+offline
+offload
+offloaded
+offloading
+offloads
+offprint
+offprints
+offramp
+offs
+offsaddle
+offscour
+offscouring
+offscreen
+offset
+offset's
+offsets
+offsetting
+offshoot
+offshore
+offside
+offspring
+offsprings
+offstage
+oft
+often
+oftener
+oftentimes
+ofttimes
+ogaden
+ogasawara
+ogbomosho
+Ogden
+ogdoad
+ogee
+ogeographically
+Ogham
+ogive
+ogle
+ogled
+ogler
+ogles
+Oglethorpe
+ogling
+Ogpu
+ogre
+ogreish
+ogress
+ogun
+Ogygian
+oh
+Ohio
+Ohio's
+ohm
+ohmage
+ohmic
+ohmically
+ohmmeter
+ohmmeter's
+ohmmeters
+ohms
+oho
+ohs
+Oidium
+oil
+oilbird
+oilcan
+oilcloth
+oilcup
+oiled
+oiler
+oilers
+oilfield
+oilfired
+oilier
+oiliest
+oilily
+oiliness
+oiling
+oilman
+oilmen
+oils
+oilseed
+oilseeds
+oilskin
+oilstone
+oily
+oink
+ointment
+ointments
+Oireachtas
+oise
+Oistrakh
+oita
+Ojibwa
+OK
+OK's
+oka
+okamoto
+Okamoto
+okapi
+okavango
+okay
+okay's
+Okayama
+okays
+oke
+Okeechobee
+Okefenokee
+Okhotsk
+Okie
+Okinawa
+Oklahoma
+Oklahoma's
+Oklahoman
+Oklahoman's
+okra
+okta
+Olaf
+olasticism
+Olav
+Olav's
+Olcott
+old
+Oldcastle
+olden
+Oldenburg
+older
+oldest
+oldfangled
+Oldham
+oldie
+oldies
+oldish
+oldness
+Oldsmobile
+oldster
+oldsters
+Olduvai
+oldwife
+oldy
+oleaceous
+oleaginous
+oleaginously
+oleaginousness
+oleander
+oleanders
+oleaster
+oleate
+olecranon
+olefin
+olefine
+olefinic
+Oleg
+oleg
+oleic
+olein
+oleograph
+oleomargarine
+oleophilic
+oleophobic
+oleoresin
+oleum
+olfaction
+olfactions
+olfactive
+olfactology
+olfactometer
+olfactometer's
+olfactometers
+olfactorily
+olfactory
+Olga
+olibanum
+olid
+oligarch
+oligarchic
+oligarchical
+oligarchy
+Oligocene
+oligochaete
+oligoclase
+oligomer
+oligomer's
+oligomers
+oligopolistic
+oligopoly
+oligopsony
+oligosaccharide
+oligosaccharide's
+oligosaccharides
+oligotrophic
+oliguria
+Olin
+Olin's
+olio
+oliphant
+olivaceous
+olivary
+olive
+olive's
+Oliveira
+olivenite
+oliver
+Oliver's
+Olivers
+olives
+Olivetti
+Olivia
+Olivier
+olivier
+Olivier's
+olivine
+olla
+olm
+ology
+olomouc
+oloroso
+Olsen
+Olson
+olszyn
+Olympia
+olympiad
+Olympian
+Olympianize
+Olympianizes
+Olympic
+Olympics
+Olympus
+Olynthus
+om
+omadhaun
+omagh
+Omaha
+Oman
+omar
+omasum
+omayyad
+ombre
+ombudsman
+ombudsman's
+ombudsperson
+omdurman
+omega
+omegas
+omelet
+omelets
+omelette
+omen
+omen's
+omens
+omental
+omentum
+omer
+omicron
+ominous
+ominously
+ominousness
+omissible
+omission
+omission's
+omissions
+omit
+omits
+omitted
+omitting
+ommatidial
+ommatidium
+ommatophore
+Ommiad
+ommission
+omni
+omnibus
+omnicompetent
+omnidirectional
+omnifarious
+omnifariously
+omnifariousness
+omnific
+omnificence
+omnificences
+omnificent
+omnify
+omnipotence
+omnipotency
+omnipotent
+omnipotently
+omnipresence
+omnipresent
+omnipresently
+omnirange
+omniscience
+omnisciency
+omniscient
+omnisciently
+omnist
+omnivore
+omnivorous
+omnivorously
+omnivorousness
+omophagia
+omphale
+omphalos
+Omsk
+omuta
+on
+onager
+onagraceous
+onanism
+onanistic
+onassis
+once
+oncer
+oncogene
+oncogene's
+oncogenes
+oncogenic
+oncology
+oncoming
+ondes
+ondo
+ondograph
+ondometer
+one
+one's
+onefold
+onega
+Oneida
+oneiric
+oneirocritic
+oneirocritical
+oneirocritically
+oneiromancy
+oneness
+oner
+onerous
+onerously
+onerousness
+ones
+oneself
+onetime
+oneupmanship
+ongoing
+onion
+onionized
+onionized's
+onionizeds
+onions
+onionskin
+onitsha
+onium
+online
+onliness
+onload
+onlook
+onlooker
+onlookers
+onlooking
+only
+onomasiology
+onomastic
+onomastics
+onomatology
+onomatopoeia
+onomatopoeia's
+onomatopoeic
+Onondaga
+Onondaga's
+onrush
+onrushing
+ons
+onset
+onset's
+onsets
+onsetting
+onshore
+onside
+onslaught
+onslaughts
+onstage
+Ontario
+ontically
+onto
+ontogenesis
+ontogenetic
+ontogenetically
+ontogeny
+ontological
+ontologically
+ontologist
+ontology
+onus
+onward
+onwards
+onychophoran
+onymous
+onyx
+oocyte
+oodles
+oof
+oogamy
+oogenesis
+oogonium
+ooh
+oolite
+oology
+oolong
+oomiak
+oompah
+oomph
+oont
+oophorectomy
+oophoritis
+oophyte
+oops
+oose
+oosperm
+oosphere
+oospore
+oostende
+ootheca
+ootid
+ooze
+oozed
+oozes
+oozier
+oozing
+oozy
+op
+opacities
+opacity
+opah
+opal
+opal's
+opaled
+opalesce
+opalescence
+opalescences
+opalescent
+opalescently
+opaline
+opalize
+opalizes
+opals
+opaque
+opaquely
+opaqueness
+opcode
+opcode's
+opcodes
+ope
+OPEC
+Opel
+open
+openability
+openable
+opencast
+opened
+openendedness
+opener
+openers
+openest
+openhanded
+openhandedly
+openhandedness
+openhearted
+openheartedly
+openheartedness
+opening
+opening's
+openings
+openly
+openmouthed
+openmouthedly
+openmouthedness
+openness
+opens
+openwork
+opera
+opera's
+operability
+operable
+operably
+operand
+operand's
+operandi
+operands
+operant
+operantly
+operants
+operas
+operate
+operated
+operates
+operatic
+operatically
+operating
+operation
+operational
+operationalism
+operationalist
+operationalistic
+operationalization
+operationalizations
+operationalize
+operationalized
+operationally
+operationism
+operationist
+operations
+operative
+operatively
+operativeness
+operatives
+operatize
+operatizes
+operator
+operator's
+operators
+opercular
+operculate
+operculated
+operculum
+operetta
+operettist
+operon
+operose
+ophicleide
+ophidian
+ophiology
+ophiophagous
+ophir
+ophite
+ophitic
+Ophiuchus
+Ophiucus
+ophthalmia
+ophthalmic
+ophthalmitis
+ophthalmologic
+ophthalmologically
+ophthalmologist
+ophthalmology
+ophthalmoscope
+ophthalmoscopic
+ophthalmoscopical
+ophthalmoscopy
+opiate
+opiates
+opine
+opined
+opines
+oping
+opining
+opinion
+opinion's
+opinionate
+opinionated
+opinionatedly
+opinionatedness
+opinionative
+opinionatively
+opinionativeness
+opinions
+opisometer
+opisthobranch
+opisthognathous
+opium
+opiumism
+Oporto
+opossum
+Oppenheimer
+Oppens
+oppidan
+oppilate
+opponent
+opponent's
+opponents
+opportune
+opportunely
+opportunism
+opportunist
+opportunistic
+opportunistically
+opportunities
+opportunity
+opportunity's
+opposability
+opposable
+oppose
+opposed
+opposeless
+opposer
+opposes
+opposing
+opposite
+oppositely
+oppositeness
+opposites
+opposition
+oppositional
+oppositions
+oppress
+oppressed
+oppresses
+oppressing
+oppression
+oppressive
+oppressively
+oppressiveness
+oppressor
+oppressor's
+oppressors
+opprobrious
+opprobriously
+opprobriousness
+opprobrium
+oppugn
+oppugnant
+oppugner
+ops
+opsimath
+opsonic
+opsonin
+opt
+optacon
+optacons
+optative
+optatively
+opted
+opthalmic
+opthalmologic
+opthalmology
+optic
+optical
+optically
+optician
+opticians
+optics
+optima
+optimal
+optimality
+optimally
+optimism
+optimist
+optimistic
+optimistical
+optimistically
+optimists
+optimization
+optimization's
+optimizations
+optimize
+optimized
+optimizer
+optimizer's
+optimizers
+optimizes
+optimizing
+optimo
+optimum
+opting
+option
+option's
+optional
+optionality
+optionalize
+optionalizes
+optionally
+options
+optoacoustic
+optoelectronic
+optoisolate
+optokinetic
+optometer
+optometric
+optometrical
+optometrist
+optometrists
+optometry
+opts
+opulence
+opulent
+opulently
+opuntia
+opus
+opuscule
+opusculum
+opuses
+or
+or's
+ora
+orach
+orache
+oracle
+oracle's
+oracles
+oracular
+oracularity
+oracularly
+oracy
+oradea
+oral
+orality
+oralization
+oralization's
+oralizations
+oralize
+oralizes
+orally
+orals
+oran
+orange
+orange's
+orangeade
+Orangeism
+Orangeman
+orangeroot
+orangery
+oranges
+orangewood
+orangey
+orangish
+orangize
+orangizes
+orangoutan
+orangutan
+orangy
+orate
+orated
+orates
+orating
+oratio
+oration
+oration's
+orations
+orator
+orator's
+Oratorian
+oratoric
+oratorical
+oratorically
+oratories
+oratorio
+oratorios
+oratorize
+oratorizes
+orators
+oratory
+oratory's
+orb
+orbicular
+orbicularity
+orbicularly
+orbiculate
+orbiculately
+orbit
+orbital
+orbitally
+orbitals
+orbited
+orbiter
+orbiters
+orbiting
+orbits
+orc
+orca
+orca's
+Orcadian
+orcas
+orcein
+orch
+orchard
+orchard's
+orchardist
+orchardman
+orchards
+orchesis
+orchestra
+orchestra's
+orchestral
+orchestrally
+orchestras
+orchestrate
+orchestrated
+orchestrater
+orchestrates
+orchestrating
+orchestration
+orchestrational
+orchestrations
+orchestrator
+orchestre
+orchestrina
+orchid
+orchid's
+orchidaceous
+orchids
+orchil
+orchis
+orchitis
+orcinol
+orczy
+ordain
+ordained
+ordainer
+ordaining
+ordainment
+ordains
+ordeal
+ordeals
+order
+ordered
+orderer
+ordering
+orderings
+orderless
+orderlies
+orderliness
+orderly
+orders
+ordinal
+ordinance
+ordinance's
+ordinances
+ordinand
+ordinaries
+ordinarily
+ordinariness
+ordinary
+ordinate
+ordinated
+ordinates
+ordinating
+ordination
+ordinations
+ordinator
+ordinators
+ordines
+ordnance
+ordnances
+ordonnance
+Ordovician
+ordure
+ordzhonikidze
+ore
+ore's
+oread
+orectic
+oregano
+Oregon
+Oregonians
+orel
+Orenburg
+orense
+ores
+Oresteia
+Oresteia's
+Orestes
+orfe
+Orff
+orfray
+organ
+organ's
+organdie
+organdy
+organelle
+organic
+organically
+organicism
+organicist
+organics
+organism
+organism's
+organismal
+organismic
+organismically
+organisms
+organist
+organist's
+organists
+organizabilities
+organizability
+organizability's
+organizable
+organizable's
+organizables
+organization
+organization's
+organizational
+organizational's
+organizationally
+organizationals
+organizationist
+organizationist's
+organizationists
+organizations
+organize
+organized
+organizer
+organizers
+organizes
+organizing
+organogenesis
+organography
+organoleptic
+organology
+organometallic
+organon
+organotherapy
+organs
+organum
+organza
+organzine
+orgasm
+orgasmic
+orgasms
+orgastic
+orgeat
+orgiastic
+orgiastically
+orgies
+orgulous
+orgy
+orgy's
+oribi
+oriel
+orient
+orientable
+oriental
+orientalism
+orientalist
+orientalization
+orientalization's
+orientalizations
+orientalize
+orientalized
+orientalizes
+orientalizing
+orientally
+orientation
+orientation's
+orientational
+orientationally
+orientations
+oriente
+oriented
+orienteering
+orienting
+orientization
+orientization's
+orientizations
+orientize
+orientizes
+orients
+orifice
+orifice's
+orifices
+orificial
+oriflamme
+origami
+origanum
+origen
+origin
+origin's
+original
+originality
+originally
+originals
+originate
+originated
+originates
+originating
+origination
+originations
+originative
+originatively
+originator
+originator's
+originators
+origins
+Orin
+orinasal
+Orinoco
+oriole
+orioles
+Orion
+orion
+Orion's
+orismological
+orismology
+orison
+orissa
+Oriya
+orizaba
+orjonikidze
+Orkney
+Orkney's
+orkneys
+Orlando
+orle
+Orleanist
+Orleans
+Orlick
+orlon
+orlop
+Orly
+orly
+Ormandy
+Ormazd
+ormer
+ormolu
+ormuz
+ornament
+ornamental
+ornamentalize
+ornamentalizes
+ornamentally
+ornamentation
+ornamentations
+ornamented
+ornamenting
+ornaments
+ornate
+ornately
+ornateness
+orne
+orneriness
+ornery
+orney
+ornis
+ornith
+ornithic
+ornithine
+ornithischian
+ornithology
+ornithology's
+ornithomancy
+ornithopod
+ornithopter
+Ornithorhynchus
+ornithoscopy
+ornithosis
+orobanchaceous
+orogenic
+orogeny
+orographic
+orographical
+orographically
+orography
+oroide
+orometer
+Orono
+Orono's
+orontes
+orotund
+orotundity
+orozco
+orphan
+orphanage
+orphanages
+orphaned
+orphanhood
+orphaning
+orphanize
+orphanizes
+orphans
+orpharion
+Orphean
+Orpheus
+Orphic
+Orphically
+Orphism
+orphrey
+orpiment
+orpine
+Orpington
+Orr
+Orr's
+orrery
+orris
+orsini
+Orsk
+ort
+Ortega
+ortegal
+orthant
+orthicon
+ortho
+orthocenter
+orthocephalic
+orthocephalous
+orthocephaly
+orthochromatic
+orthoclase
+orthoclastic
+orthodontia
+orthodontic
+orthodontics
+orthodontist
+orthodontists
+orthodox
+orthodoxes
+orthodoxly
+orthodoxy
+orthoepic
+orthoepical
+orthoepically
+orthoepist
+orthoepy
+orthogenesis
+orthogenetic
+orthogenetically
+orthogenic
+orthognathism
+orthognathous
+orthognathy
+orthogonal
+orthogonality
+orthogonalization
+orthogonalize
+orthogonalized
+orthogonalizes
+orthogonalizing
+orthogonally
+orthograde
+orthographic
+orthographical
+orthographically
+orthographies
+orthography
+orthohydrogen
+orthonormal
+orthopedic
+orthopedically
+orthopedics
+orthopedist
+orthophosphate
+orthophosphates
+orthophosphoric
+orthophosphorous
+orthopsychiatric
+orthopsychiatrist
+orthopsychiatry
+orthopter
+orthopteran
+orthopterist
+orthopteroid
+orthopteron
+orthopterous
+orthoptic
+orthoptics
+orthorhombic
+orthoscope
+orthoscopes
+orthoscopic
+orthostichy
+orthotic
+orthotics
+orthotist
+orthotone
+orthotropic
+orthotropically
+orthotropism
+orthotropous
+ortles
+ortolan
+orts
+oruro
+Orvieto
+Orville
+Orville's
+Orwell
+Orwellian
+oryol
+oryx
+oryxes
+orzae
+OS
+OS's
+Osage
+Osaka
+Osbert
+Osborn
+Osborne
+Oscan
+Oscar
+oscillate
+oscillated
+oscillates
+oscillating
+oscillation
+oscillation's
+oscillational
+oscillations
+oscillator
+oscillator's
+oscillators
+oscillatory
+oscillogram
+oscillogram's
+oscillograms
+oscillograph
+oscillographic
+oscillographically
+oscillography
+oscilloscope
+oscilloscope's
+oscilloscopes
+oscilloscopic
+oscilloscopically
+oscine
+oscitancy
+osculant
+oscular
+osculate
+osculated
+osculates
+osculating
+osculation
+osculations
+osculatory
+osculum
+OSF
+OSF'S
+Osgood
+Osgood's
+OSHA
+Oshawa
+Oshkosh
+Oshogbo
+osier
+Osijek
+Osiris
+Oslo
+osman
+Osmanli
+osmatic
+osmeterium
+osmic
+osmious
+osmiridium
+osmium
+osmolal
+osmolality
+osmolar
+osmolarity
+osmometer
+osmometer's
+osmometers
+osmometric
+osmometry
+osmoregulation
+osmoregulatory
+osmose
+osmosed
+osmosing
+osmosis
+osmotic
+osmotically
+osmous
+osmunda
+Osnaburg
+oso
+osprey
+ospreys
+osram
+osric
+ossa
+ossein
+osseous
+osseously
+Osset
+ossetia
+Ossetic
+Ossian
+ossicle
+ossicular
+ossiculate
+ossiculated
+ossie
+ossietzky
+ossiferous
+ossification
+ossifications
+ossificatory
+ossified
+ossifrage
+ossify
+osso
+ossuary
+osteal
+osteitis
+ostend
+ostensible
+ostensibly
+ostensive
+ostensively
+ostensorium
+ostensory
+ostentation
+ostentations
+ostentatious
+ostentatiously
+ostentatiousness
+osteoarthritic
+osteoarthritis
+osteoblast
+osteoblastic
+osteoclasis
+osteoclast
+osteoclastic
+osteocyte
+osteogenesis
+osteoid
+osteological
+osteologically
+osteologist
+osteology
+osteoma
+osteomalacia
+osteomyelitis
+osteopath
+osteopathic
+osteopathically
+osteopaths
+osteopathy
+osteophyte
+osteophytic
+osteoplastic
+osteoplasty
+osteoporosis
+osteotome
+osteotomy
+ostia
+ostinato
+ostiole
+ostium
+ostler
+ostmark
+ostosis
+ostracism
+ostracizable
+ostracizable's
+ostracizables
+ostracization
+ostracization's
+ostracizations
+ostracize
+ostracized
+ostracizer
+ostracizers
+ostracizes
+ostracizing
+ostracod
+ostracoderm
+ostracon
+Ostrander
+ostrava
+ostrich
+ostrich's
+ostriches
+Ostrogoth
+ostwald
+Ostyak
+Oswald
+otalgia
+Othello
+other
+other's
+othergates
+otherguess
+otherness
+others
+otherwhere
+otherwhile
+otherwhiles
+otherwise
+otherworld
+otherworldliness
+otherworldly
+Othin
+othman
+otho
+otic
+otiose
+Otis
+otitis
+otocyst
+otolaryngology
+otology
+otoscope
+otranto
+Ott
+Ott's
+ottar
+ottava
+Ottawa
+otter
+otter's
+otterburn
+otters
+Ottley
+Otto
+Otto's
+Ottoman
+Ottomanization
+Ottomanization's
+Ottomanizations
+Ottomanize
+Ottomanizes
+otway
+ouabain
+ouachita
+Ouagadougou
+ouan
+ouananiche
+oubangui
+oubliette
+ouch
+oudh
+ouessant
+ough
+ought
+oughtn't
+oughts
+oui
+Ouija
+oujda
+oulu
+ounce
+ounces
+our
+ours
+ourself
+ourselves
+ouse
+ousel
+oust
+ousted
+ouster
+ousting
+out
+outage
+outage's
+outages
+outasight
+outback
+outbalance
+outbid
+outboard
+outboards
+outbound
+outbrave
+outbreak
+outbreak's
+outbreaks
+outbreed
+outbreeding
+outbuilding
+outburst
+outburst's
+outbursts
+outby
+outbye
+outcast
+outcast's
+outcaste
+outcasts
+outcaviled
+outcaviling
+outclamor
+outclamor's
+outclamors
+outclass
+outclassed
+outcome
+outcome's
+outcomes
+outcries
+outcrop
+outcrops
+outcross
+outcry
+outdate
+outdated
+outdatedness
+outdazzle
+outdistance
+outdistanced
+outdistancing
+outdo
+outdoor
+outdoors
+outdoorsman
+outdoorsmanship
+outdoorsy
+outdraw
+outdrew
+outed
+outer
+outercoat
+outermost
+outface
+outfall
+outfield
+outfielder
+outfielders
+outfight
+outfighting
+outfit
+outfit's
+outfits
+outfitted
+outfitter
+outfitting
+outflank
+outflanker
+outflow
+outflows
+outfoot
+outfought
+outfox
+outgas
+outgeneral
+outgeneraled
+outgiving
+outgo
+outgoes
+outgoing
+outgoingness
+outgoings
+outgrew
+outgrip
+outgrow
+outgrowing
+outgrown
+outgrows
+outgrowth
+outguess
+outgun
+outhaul
+outhouse
+outhumor
+outhumor's
+outhumored
+outhumoring
+outhumors
+outhyperbolize
+outhyperbolizes
+outing
+outing's
+outings
+outjockey
+outlabor
+outlabor's
+outlabors
+outland
+outlander
+outlanders
+outlandish
+outlandishly
+outlandishness
+outlast
+outlasts
+outlaw
+outlawed
+outlawing
+outlawry
+outlaws
+outlay
+outlay's
+outlays
+outlet
+outlet's
+outlets
+outlier
+outliers
+outline
+outlined
+outlines
+outlining
+outlist
+outlive
+outlived
+outlives
+outliving
+outlook
+outlying
+outman
+outmaneuver
+outmaneuvered
+outmaneuvering
+outmaneuvers
+outmatch
+outmatched
+outmigration
+outmode
+outmoded
+outmoding
+outmost
+outness
+outnumber
+outnumbered
+outnumbering
+outnumbers
+outpace
+outpaced
+outpatient
+outpatients
+outperform
+outperformed
+outperforming
+outperforms
+outplay
+outplayed
+outpoint
+outport
+outporter
+outpost
+outpost's
+outposts
+outpour
+outpouring
+outpourings
+outpull
+output
+output's
+outputs
+outputted
+outputting
+outrace
+outrage
+outraged
+outrageous
+outrageously
+outrageousness
+outrages
+outraging
+outrance
+outrange
+outrank
+outreach
+outride
+outrider
+outrigger
+outriggers
+outright
+outrightly
+outrival
+outrivaled
+outrivaling
+outrun
+outrunner
+outruns
+outrush
+outs
+outsavor
+outsavor's
+outsavoring
+outsavors
+outscore
+outscoring
+outsell
+outsert
+outset
+outshine
+outshone
+outshoot
+outshout
+outside
+outsider
+outsider's
+outsiderness
+outsiders
+outsight
+outsit
+outsize
+outsized
+outskirt
+outskirts
+outsleep
+outsmart
+outsmarted
+outsmarting
+outsmarts
+outsmell
+outsoar
+outsole
+outspeak
+outspeed
+outspend
+outspent
+outspin
+outsplendor
+outsplendor's
+outsplendors
+outspoken
+outspokenly
+outspokenness
+outspread
+outstand
+outstanding
+outstandingly
+outstare
+outstart
+outstate
+outstation
+outstay
+outstretch
+outstretched
+outstrip
+outstripped
+outstripping
+outstrips
+outswing
+outtake
+outtalk
+outthink
+outturn
+outtyrannize
+outtyrannizes
+outvote
+outvoted
+outvotes
+outvoting
+outward
+outwardly
+outwardness
+outwards
+outwash
+outwear
+outweigh
+outweighed
+outweighing
+outweighs
+outwit
+outwith
+outwits
+outwitted
+outwitting
+outwork
+outworn
+ouvre
+ouzel
+ouzo
+ova
+oval
+oval's
+ovalization
+ovalization's
+ovalizations
+ovalize
+ovalizes
+ovally
+ovalness
+ovals
+Ovambo
+ovarial
+ovarian
+ovariectomized
+ovariectomy
+ovaries
+ovariole
+ovariotomy
+ovaritis
+ovary
+ovary's
+ovate
+ovates
+ovation
+ovationed
+ovationing
+ovations
+oven
+oven's
+ovenbird
+ovenbirds
+ovenproof
+ovenproofed
+ovenproofing
+ovenproofs
+ovens
+ovenware
+over
+overabundance
+overabundant
+overachieve
+overachieved
+overachiever
+overachieves
+overachieving
+overact
+overaction
+overactive
+overactivity
+overage
+overaggressive
+overagonize
+overagonizes
+overall
+overall's
+overalls
+overarch
+overarching
+overarm
+overawe
+overbalance
+overbear
+overbearance
+overbearing
+overbearingly
+overbearingness
+overbid
+overbite
+overblew
+overblouse
+overblow
+overblowing
+overblown
+overblows
+overboard
+overboot
+overbought
+overbrutalize
+overbrutalizes
+overbuild
+overburden
+overburdened
+overburdening
+overburdeningly
+overburdens
+overbuy
+overcall
+overcalled
+overcalling
+overcalls
+overcame
+overcapacity
+overcapitalization
+overcapitalization's
+overcapitalizations
+overcapitalize
+overcapitalized
+overcapitalizes
+overcapitalizing
+overcareful
+overcarefully
+overcast
+overcasting
+overcautious
+overcentralization
+overcentralization's
+overcentralizations
+overcentralize
+overcentralizes
+overcerebral
+overcharge
+overcheck
+overcivilization
+overcivilization's
+overcivilizations
+overcivilize
+overcivilizes
+overclamor
+overclamor's
+overclamors
+overcloud
+overcoat
+overcoat's
+overcoating
+overcoats
+overcolor
+overcolor's
+overcolors
+overcome
+overcomer
+overcomes
+overcoming
+overcompensate
+overcompensation
+overcompensatory
+overcompetence
+overconfidence
+overconfident
+overconfidently
+overconsolidate
+overconsolidated
+overconsolidates
+overconsolidating
+overconsolidation
+overconsumption
+overcooked
+overcooled
+overcorrection
+overcriticize
+overcriticizes
+overcrop
+overcrowd
+overcrowded
+overcrowding
+overcrowds
+overcurious
+overcurrent
+overcurrents
+overdetermination
+overdetermine
+overdetermined
+overdetermines
+overdetermining
+overdevelop
+overdeveloped
+overdevelopment
+overdo
+overdoctrinize
+overdoctrinizes
+overdoing
+overdominance
+overdominant
+overdone
+overdose
+overdose's
+overdosed
+overdoses
+overdosing
+overdraft
+overdraft's
+overdrafts
+overdraw
+overdrawing
+overdrawn
+overdraws
+overdress
+overdrew
+overdrive
+overdriving
+overdue
+overdye
+overeager
+overeagerly
+overeagerness
+overeat
+overeaten
+overeater
+overeating
+overeducated
+overemotionalize
+overemotionalizes
+overemphasis
+overemphasization
+overemphasization's
+overemphasizations
+overemphasize
+overemphasized
+overemphasizer
+overemphasizers
+overemphasizes
+overemphasizing
+overestimate
+overestimated
+overestimates
+overestimating
+overestimation
+overestimations
+overet
+overexcite
+overexcited
+overexcitement
+overexploitation
+overexploited
+overexpose
+overexposure
+overextend
+overextended
+overextending
+overextends
+overextension
+overfall
+overfastidious
+overfavor
+overfavor's
+overfavorable
+overfavorable's
+overfavorables
+overfavorablies
+overfavorably
+overfavors
+overfed
+overfeed
+overfertilization
+overfill
+overfilled
+overfilling
+overfills
+overfish
+overfleshed
+overflight
+overflow
+overflowed
+overflowing
+overflown
+overflows
+overfly
+overfold
+overgarment
+overgeneralize
+overgeneralizes
+overgenerous
+overglaze
+overgraze
+overgrazing
+overground
+overgrow
+overgrown
+overgrowth
+overhand
+overhanded
+overhang
+overhanging
+overhangs
+overhaul
+overhauled
+overhauler
+overhauling
+overhaulings
+overhauls
+overhead
+overheads
+overhear
+overheard
+overhearer
+overhearing
+overhears
+overheat
+overheated
+overheating
+overheats
+overhonor
+overhonor's
+overhonors
+overhumanize
+overhumanizes
+overhype
+overhyped
+overhypes
+overhyping
+Overijssel
+overily
+overindulge
+overindulged
+overindulgence
+overindulgent
+overindustrialization
+overindustrialization's
+overindustrializations
+overindustrialize
+overindustrializes
+overing
+overissue
+overissued
+overissues
+overissuing
+overjoy
+overjoyed
+overjudgment
+overjudgment's
+overjudgments
+overkill
+overkill's
+overlabor
+overlabor's
+overlabors
+overlaid
+overland
+overlap
+overlap's
+overlapped
+overlapping
+overlaps
+overlay
+overlaying
+overlays
+overleaf
+overleap
+overlearn
+overlie
+overlive
+overload
+overloaded
+overloading
+overloads
+overlong
+overlook
+overlooked
+overlooking
+overlooks
+overlord
+overlords
+overlordship
+overloud
+overly
+overlying
+overman
+overmantel
+overmaster
+overmatch
+overmatter
+overmuch
+overnationalization
+overnationalization's
+overnationalizations
+overnice
+overnight
+overnighter
+overnighters
+overnights
+overoptimism
+overoptimist
+overoptimistic
+overoptimistically
+overpaid
+overpass
+overpay
+overpayment
+overpersuade
+overpersuasion
+overpitch
+overplay
+overplayed
+overplaying
+overplus
+overpopulate
+overpopulated
+overpopulation
+overpower
+overpowered
+overpowering
+overpoweringly
+overpowers
+overpraise
+overpressure
+overprice
+overpriced
+overprint
+overprinted
+overprinting
+overprints
+overprize
+overproduce
+overproduced
+overproduces
+overproducing
+overproduction
+overpronounce
+overproof
+overproportion
+overprotect
+overprotection
+overprotective
+overran
+overrapturize
+overrapturizes
+overrate
+overrated
+overrationalize
+overrationalizes
+overreach
+overreached
+overreacher
+overreaches
+overreact
+overreaction
+overrefine
+overrefinement
+overrepresent
+overrepresented
+overridden
+override
+overrider
+overrides
+overriding
+overripe
+overrode
+overrule
+overruled
+overrules
+overruling
+overrun
+overrunning
+overruns
+overs
+oversample
+oversampled
+oversampling
+oversanguine
+oversaturate
+overscale
+overscore
+oversea
+overseas
+oversee
+overseeing
+overseen
+overseer
+overseers
+oversees
+oversell
+overselling
+oversells
+oversensitive
+oversensitiveness
+oversentimentalize
+oversentimentalizes
+overset
+oversew
+oversexed
+overshadow
+overshadowed
+overshadowing
+overshadows
+overshoe
+overshoes
+overshoot
+overshooting
+overshoots
+overshot
+overside
+oversight
+oversight's
+oversights
+oversimplification
+oversimplifications
+oversimplified
+oversimplifies
+oversimplify
+oversimplifying
+oversize
+oversized
+oversizes
+overskirt
+overslaugh
+oversleep
+oversleeve
+overslip
+oversoft
+oversoftness
+oversold
+oversoul
+overspecialization
+overspecialization's
+overspecializations
+overspecialize
+overspecialized
+overspecializes
+overspeculate
+overspeculation
+overspeed
+overspend
+overspender
+overspending
+overspends
+overspent
+overspill
+overspread
+overstaff
+overstaffed
+overstaffing
+overstaffs
+overstate
+overstated
+overstatement
+overstatement's
+overstatements
+overstates
+overstating
+overstay
+oversteepen
+oversteer
+overstep
+overstepped
+overstepping
+oversteps
+overstock
+overstocks
+overstory
+overstrain
+overstraining
+overstress
+overstressed
+overstrew
+overstride
+overstrike
+overstrikes
+overstriking
+overstruck
+overstrung
+overstuff
+overstuffed
+overstuffing
+overstuffs
+oversubscribe
+oversubscribed
+oversubscribes
+oversubscribing
+oversubscription
+oversubtle
+oversubtlety
+oversupply
+oversystematize
+oversystematizes
+overt
+overtake
+overtaken
+overtaker
+overtakers
+overtakes
+overtaking
+overtask
+overtax
+overtaxation
+overtaxed
+overthrew
+overthrow
+overthrowing
+overthrown
+overthrows
+overthrust
+overtime
+overtly
+overtness
+overtone
+overtone's
+overtones
+overtook
+overtop
+overtrade
+overtrain
+overtrick
+overtrump
+overture
+overture's
+overtures
+overturn
+overturned
+overturning
+overturns
+overtype
+overtyping
+overunionized
+overunionized's
+overunionizeds
+overurbanization
+overurbanization's
+overurbanizations
+overuse
+overvalue
+overview
+overview's
+overviews
+overvoltage
+overvoltages
+overwatch
+overwear
+overweary
+overween
+overweening
+overweigh
+overweight
+overwhelm
+overwhelmed
+overwhelming
+overwhelmingly
+overwhelms
+overwind
+overwinter
+overwomanize
+overwomanizes
+overword
+overwork
+overworked
+overworking
+overworks
+overwrap
+overwrite
+overwrites
+overwriting
+overwritten
+overwrote
+overwrought
+overzealous
+overzealousness
+ovicidal
+ovicide
+Ovid
+oviduct
+oviductal
+oviedo
+oviferous
+oviform
+ovine
+oviparous
+oviparously
+oviparousness
+oviposit
+oviposition
+ovipositional
+ovipositor
+ovisac
+ovoid
+ovoidal
+ovonic
+ovotestis
+ovoviviparous
+ovoviviparously
+ovoviviparousness
+ovular
+ovulate
+ovulated
+ovulates
+ovulating
+ovulation
+ovulations
+ovulatory
+ovule
+ovum
+ow
+owe
+owed
+owelty
+Owen
+Owens
+owerless
+owerri
+owes
+owing
+owl
+owl's
+owler
+owlet
+owlish
+owlishly
+owlishness
+owls
+owly
+own
+owned
+owner
+owner's
+owners
+ownership
+ownerships
+owning
+owns
+owt
+ox
+oxacillin
+oxalacetate
+oxalacetic
+oxalate
+oxalic
+oxalis
+oxaloacetate
+oxaloacetic
+oxazine
+oxblood
+oxbow
+Oxbridge
+oxcart
+oxen
+oxenstierna
+oxeye
+Oxford
+Oxfordshire
+oxheart
+oxhide
+oxidant
+oxidase
+oxidasic
+oxidate
+oxidation
+oxidations
+oxidative
+oxidatively
+oxide
+oxide's
+oxides
+oxidic
+oxidimetry
+oxidizabilities
+oxidizability
+oxidizability's
+oxidizable
+oxidizable's
+oxidizables
+oxidization
+oxidization's
+oxidizations
+oxidize
+oxidized
+oxidizement
+oxidizement's
+oxidizements
+oxidizer
+oxidizers
+oxidizes
+oxidizing
+oxidizings
+oxime
+Oxnard
+oxon
+oxonian
+oxonium
+oxpecker
+oxtail
+oxter
+oxtongue
+oxus
+oxyacetylene
+oxyacid
+oxycephaly
+oxychloride
+oxygen
+oxygenate
+oxygenated
+oxygenates
+oxygenating
+oxygenation
+oxygenations
+oxygenator
+oxygenic
+oxygenicity
+oxygenizable
+oxygenizable's
+oxygenizables
+oxygenize
+oxygenizement
+oxygenizement's
+oxygenizements
+oxygenizer
+oxygenizers
+oxygenizes
+oxygenless
+oxygens
+oxyhaemoglobin
+oxyhemoglobin
+oxyhydrogen
+oxyhydroxides
+oxymoron
+oxyphil
+oxyphile
+oxyphilic
+oxysalt
+oxysome
+oxysulfide
+oxysulphide
+oxytetracycline
+oxytocic
+oxytocin
+oxytone
+oyer
+oyez
+oyo
+oystchers
+oyster
+oyster's
+oystercatcher
+oystering
+oysterman
+oystermen
+oysters
+Oz
+oz
+ozagen
+ozagenians
+ozalid
+Ozark
+Ozarks
+Ozawa
+ozocerite
+ozokerite
+ozone
+ozonic
+ozonide
+ozoniferous
+ozonization
+ozonization's
+ozonizations
+ozonize
+ozonized
+ozonizer
+ozonizers
+ozonizes
+ozonizing
+ozonolysis
+ozonosphere
+ozonous
+ozs
+Ozzie
+ozzie
+p's
+pa
+Paal
+PABA
+Pablo
+Pabst
+pabulum
+paca
+pace
+pace's
+paced
+pacem
+pacemaker
+pacemaking
+pacer
+pacers
+paces
+pacesetter
+pacesetting
+paceway
+pacha
+pachalic
+Pachisi
+Pachouli
+pachuca
+pachuco
+pachyderm
+pachydermal
+pachydermatous
+pachydermatously
+pachysandra
+pachytene
+pacifiable
+Pacific
+pacific
+pacifically
+pacification
+pacifications
+pacificator
+pacificators
+pacificatory
+pacificist
+pacified
+pacifier
+pacifies
+pacifism
+pacifist
+pacifistic
+pacifistically
+pacify
+pacifying
+pacing
+pack
+packability
+packable
+package
+packaged
+packager
+packagers
+packages
+packaging
+packagings
+Packard
+Packard's
+Packards
+packboard
+packed
+packer
+packers
+packet
+packet's
+packeted
+packeting
+packetization
+packetize
+packetized
+packetizer
+packetizer's
+packetizers
+packetizes
+packetizing
+packets
+packhorse
+packing
+packinghouse
+packman
+packs
+packsack
+packsaddle
+packthread
+packwood
+Packwood
+pact
+pact's
+pacts
+pad
+pad's
+padang
+padauk
+padded
+paddies
+padding
+paddings
+paddle
+paddleboard
+paddled
+paddlefish
+paddler
+paddles
+paddling
+paddock
+paddy
+Paddywhack
+pademelon
+paderborn
+Paderewski
+padishah
+padlock
+padlocked
+padlocks
+padma
+padouk
+padova
+padre
+padrone
+pads
+padsaw
+padua
+paduasoy
+Padus
+paean
+paeanize
+paeanizes
+paeans
+paederast
+paediatrician
+paediatrics
+paedogenesis
+paedology
+paedomorphosis
+paedophilia
+paella
+paeon
+paeony
+paestum
+pagan
+pagan's
+paganini
+Paganini
+paganish
+paganism
+paganization
+paganization's
+paganizations
+paganize
+paganized
+paganizer
+paganizers
+paganizes
+paganizing
+pagans
+page
+page's
+pageant
+pageant's
+pageantry
+pageants
+pageboy
+paged
+pageful
+pagefuls
+pager
+pager's
+pagers
+pages
+paginal
+paginate
+paginated
+paginates
+paginating
+pagination
+paginations
+paging
+pagoda
+pagodas
+pagurian
+pah
+pahang
+Pahari
+Pahlavi
+pahsien
+paid
+paigle
+Paignton
+pail
+pail's
+pailful
+paillasse
+paillette
+pails
+pain
+Paine
+pained
+painful
+painfuller
+painfullest
+painfully
+painfulness
+paining
+painkiller
+painless
+painlessly
+painlessness
+pains
+painstaking
+painstakingly
+paint
+paintbox
+paintbrush
+painted
+painter
+painterliness
+painterly
+painters
+painting
+paintings
+paints
+pair
+paired
+pairing
+pairings
+pairs
+pairwise
+paisa
+paisano
+paisley
+Paiute
+paix
+pajama
+pajama's
+pajamaed
+pajamas
+pakeha
+paki
+Pakistan
+Pakistani
+Pakistanis
+pal
+pal's
+palace
+palace's
+palaces
+Palacio
+paladin
+palaeanthropic
+Palaearctic
+palaeethnology
+palaeoanthropic
+palaeoanthropology
+palaeobotany
+Palaeocene
+palaeoclimatology
+palaeoecological
+palaeoecology
+palaeoethnobotany
+palaeogene
+palaeography
+palaeolith
+palaeolithic
+palaeomagnetism
+palaeontography
+palaeontology
+palaeontology's
+Palaeozoic
+palaeozoology
+palaestra
+palais
+palanquin
+palasts
+palatability
+palatable
+palatableness
+palatably
+palatal
+palatalization
+palatalize
+palatalized
+palatalizes
+palatalizing
+palatally
+palate
+palate's
+palates
+palatial
+palatially
+palatialness
+palatinate
+Palatine
+palatization
+palatization's
+palatizations
+palatize
+palatizes
+Palau
+palaver
+palavered
+palavering
+palawan
+palazzo
+palazzos
+pale
+palea
+paled
+paleface
+palefaces
+palely
+palembang
+palencia
+paleness
+Palenque
+paleoanthropology
+paleoanthropology's
+paleoecologic
+paleoecological
+paleoecologist
+paleoecology
+paleogeographic
+paleogeographical
+paleogeographically
+paleogeography
+paleographer
+paleographic
+paleographical
+paleographically
+paleography
+paleolith
+Paleolithic
+paleoliths
+paleologist
+paleologists
+paleomagnetics
+paleontologic
+paleontological
+paleontologist
+paleontology
+Paleozoic
+paleozoological
+paleozoology
+paler
+Palermo
+pales
+palest
+Palestine
+Palestinian
+palestra
+palestrina
+paletot
+palette
+paley
+palfrey
+Pali
+palikar
+palimpsest
+palindrome
+palindromes
+palindromic
+palindromicity
+paling
+palingenesis
+palingenetic
+palinode
+palisade
+palisades
+palish
+palk
+pall
+palladia
+Palladian
+palladic
+palladio
+palladium
+palladiumize
+palladiumizes
+palladous
+Pallas
+pallbearer
+pallet
+pallete
+palletization
+palletizations
+palletize
+palletized
+palletizer
+palletizes
+palletizing
+pallette
+pallial
+palliasse
+palliate
+palliation
+palliative
+palliatively
+palliatives
+palliator
+pallid
+pallidly
+pallidness
+palling
+pallium
+pallor
+pallor's
+pallors
+pally
+palm
+palma
+palmaceous
+palmar
+palmary
+palmate
+palmated
+palmately
+palmation
+palmed
+palmer
+Palmerston
+palmetto
+palmier
+palming
+palmira
+palmist
+palmistry
+palmitate
+palmlike
+Palmolive
+palms
+palmy
+Palmyra
+Palo
+palolo
+Palomar
+palomino
+palooka
+palos
+palour
+palp
+palpability
+palpable
+palpably
+palpal
+palpate
+palpated
+palpates
+palpating
+palpation
+palpations
+palpebral
+palpebrate
+palpi
+palpitant
+palpitate
+palpitated
+palpitates
+palpitating
+pals
+palsgrave
+palsied
+palsies
+palstave
+palsy
+palsying
+palter
+paltered
+palterer
+paltering
+paltrier
+paltriness
+paltry
+paludal
+paludism
+palynologic
+palynological
+palynologically
+palynologist
+palynology
+Pam
+Pam's
+Pamela
+pamirs
+pampa
+pampas
+pamper
+pampered
+pamperer
+pampering
+pamperize
+pamperizes
+pampero
+pampers
+pamphlet
+pamphlet's
+pamphleteer
+pamphleteers
+pamphletize
+pamphletizes
+pamphlets
+pamphrey
+pamphylia
+pamplona
+pan
+pan's
+panacea
+panacea's
+panacean
+panaceas
+panache
+panada
+panama
+Panama
+Panamanian
+panatela
+panatella
+panatellas
+Panathenaea
+panay
+pancake
+pancake's
+pancaked
+pancakes
+pancaking
+panchax
+panchayat
+panchen
+Pancho
+panchromatic
+pancosmism
+pancratium
+pancreas
+pancreatic
+pancreatin
+panda
+panda's
+pandanaceous
+Pandanus
+Pandarus
+pandas
+Pandean
+pandect
+pandects
+pandemic
+pandemonium
+pander
+pandered
+panderer
+pandering
+panderize
+panderizes
+panders
+pandied
+pandit
+Pandora
+pandore
+pandour
+pandowdy
+pandurate
+pandy
+pandybat
+pane
+pane's
+panegyric
+panegyrical
+panegyrically
+panegyrist
+panel
+paneled
+paneling
+panelings
+panelist
+panelist's
+panelists
+panelization
+panelized
+panellist
+panellists
+panels
+panes
+panetela
+panetella
+panettone
+panful
+pang
+pang's
+panga
+Pangaea
+pangenesis
+pangenetic
+pangolin
+pangs
+panhandle
+panhandled
+panhandler
+panhandles
+panhandling
+Panhellenic
+Panhellenism
+panhuman
+panic
+panic's
+panicked
+panicking
+panicky
+panicle
+panicmonger
+panics
+paniculate
+Panjabi
+panjandrum
+panjim
+pankhurst
+panmixia
+panmunjom
+pannage
+panne
+panned
+pannier
+pannikin
+panning
+pannonia
+panocha
+panoplied
+panoply
+panoptic
+panorama
+panoramas
+panoramic
+panoramically
+panpipe
+panpipes
+pans
+pansies
+pansophy
+pansy
+pansy's
+pant
+Pantagruel
+pantalets
+pantalettes
+pantaloon
+pantaloons
+pantas
+pantechnicon
+panted
+pantelleria
+pantheism
+pantheist
+pantheistic
+pantheistical
+pantheistically
+pantheon
+pantheonization
+pantheonization's
+pantheonizations
+pantheonize
+pantheonizes
+panther
+panther's
+panthers
+pantie
+panties
+pantihose
+pantile
+pantiled
+panting
+pantisocracies
+pantisocracy
+pantisocratic
+pantisocratical
+pantisocratist
+panto
+pantograph
+pantographic
+pantomime
+pantomimed
+pantomimic
+pantomimist
+pantothenate
+pantothenic
+pantoum
+pantries
+pantropic
+pantry
+pantry's
+pantryman
+pantrymen
+pants
+pantsuit
+panty
+pantywaist
+panza
+panzer
+Paoli
+Paoli's
+paoting
+paotow
+pap
+papa
+papacy
+papadopoulos
+papain
+papal
+papalization
+papalization's
+papalizations
+papalize
+papalizer
+papalizers
+papalizes
+papally
+papandreou
+papaveraceous
+papaverine
+papaw
+papaya
+papeete
+papen
+paper
+paper's
+paperback
+paperback's
+paperbacks
+paperbark
+paperboard
+paperbound
+paperboy
+paperboys
+paperclip
+paperclips
+papered
+paperer
+paperers
+paperhanger
+paperhangers
+paperhanging
+paperiness
+papering
+paperings
+paperknife
+paperknives
+paperless
+papermaker
+papermakers
+papermaking
+papers
+paperthrow
+paperweight
+paperweights
+paperwork
+papery
+papeterie
+Paphian
+paphlagonia
+paphos
+Papiamento
+papier
+papiers
+papilionaceous
+papilla
+papillae
+papillary
+papillate
+papillated
+papilloma
+papillomatous
+papillon
+papillose
+papillote
+papist
+papistry
+papoose
+Pappas
+pappies
+pappose
+pappus
+pappy
+paprika
+Papua
+Papua's
+Papuan
+papule
+papyraceous
+papyri
+papyrology
+papyrus
+papyruses
+par
+para
+parabasis
+parabiosis
+parabiotic
+parabiotically
+parablast
+parable
+parables
+parabola
+parabolic
+parabolically
+parabolize
+parabolized
+parabolizes
+parabolizing
+paraboloid
+paraboloidal
+parabrake
+paracasein
+Paracel
+Paracelsus
+paracetamol
+parachronism
+parachute
+parachute's
+parachuted
+parachuter
+parachutes
+parachutic
+parachuting
+parachutist
+paraclete
+parade
+paraded
+parader
+parades
+paradigm
+paradigm's
+paradigmatic
+paradigmatical
+paradigms
+parading
+paradisaic
+paradisaical
+paradisaically
+paradisal
+paradise
+paradisiac
+paradisiacal
+paradisiacally
+paradox
+paradox's
+paradoxes
+paradoxic
+paradoxical
+paradoxically
+paradoxicalness
+paradrop
+paraesthesia
+paraffin
+paraffinic
+paraffinize
+paraffinizes
+paraffins
+paraformaldehyde
+paragenesis
+paragenetic
+paragenetically
+paraginase
+paragoge
+paragon
+paragon's
+paragonite
+paragons
+paragraph
+paragraphed
+paragrapher
+paragraphic
+paragraphing
+paragraphize
+paragraphizes
+paragraphs
+Paraguay
+Paraguayan
+Paraguayan's
+Paraguayans
+parahydrogen
+parakeet
+parakeets
+paralanguage
+paraldehyde
+paralinguistic
+paralipomena
+parallactic
+parallax
+parallax's
+parallel
+paralleled
+parallelepiped
+parallelepipeds
+paralleling
+parallelism
+parallelization
+parallelization's
+parallelizations
+parallelize
+parallelized
+parallelizer
+parallelizers
+parallelizes
+parallelizing
+parallelogram
+parallelogram's
+parallelograms
+parallels
+paralogism
+paralysis
+paralytic
+paralyzation
+paralyze
+paralyzed
+paralyzedlies
+paralyzedly
+paralyzer
+paralyzer's
+paralyzers
+paralyzes
+paralyzing
+paralyzinglies
+paralyzingly
+paramagnet
+paramagnetic
+paramagnetically
+paramagnetism
+paramaribo
+paramatta
+paramecium
+paramedic
+paramedical
+parament
+parameter
+parameter's
+parameterizable
+parameterization
+parameterization's
+parameterizations
+parameterize
+parameterized
+parameterizes
+parameterizing
+parameterless
+parameters
+parametric
+parametrical
+parametrically
+paramilitary
+paramnesia
+paramo
+paramorph
+paramorphine
+paramorphism
+paramount
+paramountcy
+paramour
+Paramus
+parang
+paranoia
+paranoiac
+paranoiacs
+paranoid
+paranormal
+paranormality
+paranormally
+paranymph
+paraoxon
+parapet
+parapet's
+parapeted
+parapets
+paraph
+paraphernalia
+paraphrasable
+paraphrase
+paraphrased
+paraphraser
+paraphrases
+paraphrasing
+paraphrastic
+paraphrastically
+paraphysis
+paraplegia
+paraplegic
+parapodial
+parapodium
+parapraxis
+paraprofessional
+paraprofessionals
+parapsychology
+paraquat
+pararosaniline
+parasang
+paraselene
+paraselenic
+parasexual
+parasexuality
+parashah
+parasite
+parasite's
+parasites
+parasitic
+parasitical
+parasitically
+parasiticidal
+parasiticide
+parasitics
+parasitism
+parasitization
+parasitize
+parasitized
+parasitizes
+parasitizing
+parasitology
+parasol
+parasols
+parastichy
+parasympathetic
+parasympathomimetic
+parasynthesis
+parasynthetic
+parasyntheton
+paratactic
+paratactical
+paratactically
+parataxis
+parathion
+parathyroid
+parathyroidectomize
+parathyroidectomized
+parathyroidectomizes
+parathyroidectomizing
+parathyroidectomy
+paratroop
+paratrooper
+paratroopers
+paratroops
+paratyphoid
+paravane
+paraxial
+parboil
+parboiled
+parbuckle
+parbuckled
+parbuckling
+parcae
+parcel
+parceled
+parceler
+parceling
+parcels
+parcenary
+parcener
+parch
+parched
+parcheesi
+parchment
+parchmentize
+parchmentizes
+parclose
+pard
+pardalote
+pardner
+pardners
+pardon
+pardonable
+pardonableness
+pardonably
+pardoned
+pardoner
+pardoners
+pardoning
+pardons
+pardubice
+pare
+paregoric
+pareira
+parella
+parenchyma
+parenchymal
+parent
+parent's
+parentage
+parental
+parentally
+parenteral
+parenterally
+parentheses
+parenthesis
+parenthesization
+parenthesize
+parenthesized
+parenthesizes
+parenthesizing
+parenthetic
+parenthetical
+parenthetically
+parenthood
+parenting
+parents
+parer
+parergon
+pares
+paresis
+paresthesia
+Pareto
+Pareto's
+pareu
+pareve
+parfait
+parfleche
+parfocalization
+parfocalize
+parget
+parhelic
+parhelion
+pariah
+parian
+paries
+parietal
+parietes
+parimutuel
+parimutuels
+paring
+parings
+parioli
+paripinnate
+Paris
+parish
+parish's
+parishad
+parishes
+parishioner
+parishioners
+Parisian
+Parisianization
+Parisianization's
+Parisianizations
+Parisianize
+Parisianizes
+parisina
+parisology
+parison
+parisyllabic
+parities
+parity
+park
+parka
+parka's
+parkas
+Parke
+Parke's
+parked
+parker
+parkers
+Parkersburg
+Parkhouse
+parkin
+parking
+Parkinson
+Parkinsonian
+parkinsonism
+parkish
+parkland
+parklike
+parks
+parkway
+parky
+parlance
+parlando
+parlante
+parlay
+parlayed
+parle
+parley
+parleys
+parleyvoo
+parliament
+parliament's
+parliamentarian
+parliamentarianism
+parliamentarians
+parliamentary
+parliaments
+parling
+parlor
+parlor's
+parlors
+parlous
+parlously
+parm
+Parma
+parmenides
+parmentier
+Parmesan
+parmigiana
+parmigianino
+parmigiano
+Parnassian
+Parnassus
+parnell
+parochial
+parochialism
+parochialism's
+parochialisms
+parochialization
+parochialization's
+parochializations
+parochialize
+parochializes
+parochially
+parodic
+parodied
+parodies
+parodist
+parodistic
+parody
+paroicous
+parol
+parole
+paroled
+parolee
+parolees
+paroles
+paroling
+paronomasia
+paronomastic
+paronym
+paronymous
+parotic
+parotid
+parotitis
+parotoid
+parous
+parousia
+paroxysm
+paroxysmal
+paroxytone
+parquet
+parqueted
+parqueting
+parquetry
+Parr
+Parr's
+parrakeet
+parramatta
+parrel
+parricidal
+parricide
+parried
+parrillo
+parring
+parris
+Parrish
+parrot
+parrotfish
+parroting
+parrotize
+parrotizes
+parrotlike
+parrots
+Parrs
+parry
+parrying
+pars
+parse
+parsec
+parsecs
+parsed
+Parsee
+parser
+parser's
+parsers
+parses
+Parsi
+Parsifal
+Parsifal's
+parsimonious
+parsimoniously
+parsimony
+parsing
+parsings
+parsley
+parsnip
+parson
+parson's
+parsonage
+parsonize
+parsonizes
+parsons
+part
+partake
+partaker
+partakes
+partaking
+partan
+parted
+parter
+parterre
+parters
+parthenocarpic
+parthenocarpically
+parthenocarpy
+parthenogenesis
+parthenogenetic
+parthenogenetically
+Parthenon
+Parthenopaeus
+Parthenope
+Parthenos
+Parthia
+parthia
+Parthian
+parti
+partial
+partiality
+partialize
+partializes
+partially
+partials
+partible
+participant
+participant's
+participants
+participate
+participated
+participates
+participating
+participation
+participations
+participative
+participator
+participatory
+participial
+participially
+participle
+participles
+particlar
+particle
+particle's
+particles
+particular
+particularism
+particularist
+particularistic
+particularity
+particularization
+particularization's
+particularizations
+particularize
+particularized
+particularizes
+particularizing
+particularly
+particulars
+particulate
+particulates
+partied
+parties
+parting
+partings
+partisan
+partisan's
+partisanize
+partisanizes
+partisans
+partisanship
+partita
+partite
+partition
+partitioned
+partitioner
+partitioning
+partitionist
+partitions
+partitive
+partitively
+partizan
+partlet
+partly
+partner
+partner's
+partnered
+partnering
+partners
+partnership
+partnerships
+partook
+partridge
+partridge's
+partridges
+parts
+parturient
+parturifacient
+parturition
+partway
+party
+party's
+partying
+parulis
+parure
+parve
+parvenu
+parvenue
+parvis
+parvise
+parzival
+pas
+Pasadena
+pasargadae
+pasay
+Pascal
+Pascal's
+Pasch
+paschal
+pase
+pash
+pasha
+pashalik
+pashka
+pashm
+Pashto
+pasionaria
+Paso
+pasolini
+pasqueflower
+pasquinade
+pass
+passable
+passably
+passacaglia
+passade
+passage
+passage's
+passaged
+passages
+passageway
+passaging
+Passaic
+Passamaquoddy
+passant
+passarine
+passavant
+passband
+passbook
+passbook's
+passbooks
+passe
+passed
+passel
+passementerie
+passenger
+passenger's
+passengerly
+passengers
+passepied
+passer
+passerby
+passerine
+passers
+passersby
+passes
+passible
+passifloraceous
+passim
+passing
+passion
+passional
+passionate
+passionately
+passionateness
+passionflower
+passionless
+passions
+Passiontide
+passivate
+passivated
+passivates
+passivating
+passivation
+passivations
+passive
+passively
+passiveness
+passives
+passivism
+passivist
+passivists
+passivity
+passkey
+Passover
+passport
+passport's
+passports
+password
+password's
+passworded
+passwords
+past
+past's
+pasta
+paste
+pasteboard
+pasted
+pastel
+pastelist
+pastellist
+pastels
+pastern
+pasternak
+Pasternak
+pasterns
+pastes
+pasteup
+Pasteur
+Pasteurism
+pasteurization
+pasteurizations
+pasteurize
+pasteurized
+pasteurizer
+Pasteurizers
+pasteurizes
+pasteurizing
+pastiche
+pastier
+pasties
+pastil
+pastilles
+pastime
+pastime's
+pastimes
+pastiness
+pasting
+pastis
+pastlle
+pastness
+pasto
+pastor
+pastor's
+pastoral
+pastorale
+pastoralism
+pastoralist
+pastoralize
+pastoralizes
+pastorally
+pastoralness
+pastorate
+pastorium
+pastorize
+pastorizes
+pastors
+pastorship
+pastrami
+pastries
+pastry
+pasts
+pasturage
+pasture
+pasture's
+pastured
+pastureland
+pasturer
+pastures
+pasturing
+pasty
+pat
+pat's
+patagium
+Patagonia
+Patagonians
+patagonians
+patch
+patchboard
+patched
+patcher
+patches
+patchier
+patchily
+patchiness
+patching
+patchouli
+patchouly
+patchwork
+patchworker
+patchworkers
+patchy
+pate
+pated
+patella
+patellae
+patellar
+patellas
+patellate
+patelliform
+paten
+patency
+patent
+patentability
+patentable
+patented
+patentee
+patentees
+patenter
+patenters
+patenting
+patently
+patentor
+patents
+pater
+paterfamilias
+paternal
+paternalism
+paternalist
+paternalistic
+paternalize
+paternalizes
+paternally
+paternity
+paternoster
+Paterson
+Paterson's
+path
+Pathan
+pathbreaking
+pathetic
+pathetical
+pathetically
+pathfind
+pathfinder
+pathfinding
+pathic
+pathlength
+pathless
+pathlessness
+pathname
+pathname's
+pathnames
+pathogen
+pathogenesis
+pathogenetic
+pathogenic
+pathogenically
+pathogenicity
+pathogens
+pathognomonic
+pathognomy
+pathol
+pathologic
+pathological
+pathologically
+pathologies
+pathologist
+pathologist's
+pathologists
+pathology
+pathometer
+pathometer's
+pathometers
+pathomorphologic
+pathomorphological
+pathomorphology
+pathophysiologic
+pathophysiological
+pathophysiology
+pathos
+paths
+pathway
+pathway's
+pathways
+patiala
+patible
+paticularly
+patience
+patient
+patient's
+patiently
+patients
+patil
+patin
+patina
+patinae
+patinas
+patine
+patined
+patining
+patio
+patios
+patisserie
+patisseries
+patmore
+Patmos
+patna
+patois
+paton
+patras
+patresfamilias
+patrial
+patriarch
+patriarchal
+patriarchate
+patriarchies
+patriarchs
+patriarchy
+Patrice
+Patricia
+patrician
+patrician's
+patricians
+patriciate
+patriciates
+patricidal
+patricide
+Patrick
+patriclinous
+patrilineage
+patrilineal
+patrilocal
+patrimonial
+patrimony
+patriot
+patriot's
+patriotic
+patriotically
+patriotism
+patriots
+patristic
+patristical
+patristics
+patroclus
+patrol
+patrol's
+patrolled
+patroller
+patrolling
+patrolman
+patrolmen
+patrology
+patrols
+patron
+patron's
+patronage
+patronal
+patroness
+patronizable
+patronizable's
+patronizables
+patronization
+patronization's
+patronizations
+patronize
+patronized
+patronizer
+patronizers
+patronizes
+patronizing
+patronizing's
+patronizingly
+patronizings
+patronly
+patronne
+patrons
+patronymic
+patroon
+pats
+Patsies
+Patsy
+patted
+patten
+patter
+pattered
+patterer
+pattering
+patterings
+pattern
+patterned
+patterning
+patternize
+patternizes
+patterns
+patters
+Patterson
+Patti
+Patti's
+pattie
+patties
+patting
+Patton
+patty
+patty's
+patulous
+patulously
+patulousness
+pau
+paua
+paucal
+paucity
+Pauk
+Paul
+Paul's
+Paula
+pauldron
+Paulette
+Paulette's
+Pauli
+Pauline
+Pauling
+pauling
+Paulinize
+Paulinizes
+Paulinus
+Paulo
+Paulo's
+paulownia
+Paulsen
+Paulson
+Paulus
+paumotu
+paunch
+paunchier
+paunchiness
+paunchy
+pauper
+pauperism
+pauperization
+pauperization's
+pauperizations
+pauperize
+pauperized
+pauperizer
+pauperizers
+pauperizes
+pauperizing
+pausanias
+pause
+paused
+pauses
+pausing
+pav
+pavage
+pavane
+pavanne
+Pavarotti
+pave
+paved
+pavement
+pavement's
+pavements
+paver
+paves
+pavese
+pavid
+pavilion
+pavilion's
+pavilions
+paving
+pavior
+pavis
+pavlodar
+Pavlov
+pavlova
+Pavlovian
+Pavo
+pavonine
+paw
+pawed
+pawing
+pawky
+pawl
+pawn
+pawn's
+pawnbroker
+pawnbroker's
+pawnbrokers
+pawnbroking
+pawned
+Pawnee
+pawnees
+pawner
+pawning
+pawnor
+pawns
+pawnshop
+pawnshop's
+pawnshops
+pawpaw
+paws
+Pawtucket
+pax
+paxam
+paxton
+paxwax
+pay
+payable
+paycheck
+paycheck's
+paychecks
+payday
+payed
+payee
+payer
+payer's
+payers
+paygrade
+paygrades
+paying
+payload
+payload's
+payloads
+paymaster
+paymasters
+payment
+payment's
+payments
+Payne
+Paynes
+paynim
+Paynize
+Paynizes
+payoff
+payoff's
+payoffs
+payola
+payor
+payroll
+payrolls
+pays
+Payson
+Paz
+PBS
+PC
+PC's
+PCB
+PCBS
+PCs
+PDP
+PDT
+pea
+pea's
+Peabody
+peace
+peaceable
+peaceableness
+peaceably
+peaceful
+peacefully
+peacefulness
+peacekeeper
+peacekeeping
+peacemake
+peacemaker
+peacemaking
+peaces
+peacetime
+peacetimes
+peach
+peach's
+peaches
+peachier
+Peachtree
+peachy
+peacock
+peacock's
+peacockish
+peacocks
+peafowl
+peag
+peahen
+peak
+peake
+peaked
+peakedness
+peaking
+peaks
+peaky
+peal
+Peale
+Peale's
+pealed
+pealike
+pealing
+peals
+pean
+peanut
+peanut's
+peanuts
+pear
+Pearce
+pearl
+pearl's
+pearler
+pearlescence
+pearlescent
+pearlier
+pearlite
+pearlitic
+pearlization
+pearlize
+pearlized
+pearlizes
+pearlizing
+pearls
+pearlstone
+pearlwort
+pearly
+pearmain
+pears
+Pears
+Pearson
+peart
+peary
+peas
+peasant
+peasant's
+peasanthood
+peasantize
+peasantizes
+peasantry
+peasants
+peascod
+Pease
+peasecod
+peashooter
+peasouper
+peat
+peaty
+peau
+peavey
+pebble
+pebble's
+pebbled
+pebbles
+pebbling
+pebbly
+pecan
+pecans
+peccable
+peccadillo
+peccadilloes
+peccancy
+peccant
+peccantly
+peccary
+peccavi
+pechora
+peck
+pecked
+pecker
+pecking
+peckinpah
+peckish
+pecks
+Pecksniffian
+pecky
+Pecos
+pectase
+pectate
+pecten
+pectic
+pectin
+pectinaceous
+pectinate
+pectinated
+pectination
+pectines
+pectization
+pectize
+pectized
+pectizes
+pectizing
+pectoral
+pectoralis
+pectorals
+peculate
+peculated
+peculates
+peculating
+peculation
+peculator
+peculiar
+peculiarities
+peculiarity
+peculiarity's
+peculiarize
+peculiarizes
+peculiarly
+peculiars
+peculium
+pecuniarily
+pecuniary
+pedagog
+pedagogic
+pedagogical
+pedagogically
+pedagogics
+pedagogue
+pedagogy
+pedal
+pedaled
+pedaler
+pedalers
+pedalfer
+pedalferic
+pedaling
+pedalo
+pedals
+pedant
+pedantic
+pedantically
+pedantize
+pedantizes
+pedantry
+pedate
+pedatifid
+peddle
+peddled
+peddler
+peddler's
+peddlers
+peddlery
+peddles
+peddling
+peden
+pederast
+pederastic
+pederasts
+pederasty
+pedestal
+pedestaled
+pedestaling
+pedestals
+pedestrian
+pedestrian's
+pedestrianism
+pedestrianization
+pedestrianize
+pedestrianized
+pedestrianizes
+pedestrianizing
+pedestrians
+pedi
+pediatric
+pediatrician
+pediatrics
+pediatrist
+pedicab
+pedicel
+pedicellate
+pedicle
+pedicled
+pedicular
+pediculate
+pediculosis
+pediculous
+pedicure
+pedicurist
+pediform
+pedigree
+pedigreed
+pediment
+pedimental
+pedimented
+pedipalp
+pedlar
+pedlary
+pedocal
+pedocalic
+pedogenesis
+pedogenetic
+pedogenic
+pedologic
+pedological
+pedologist
+pedology
+pedometer
+pedometer's
+pedometers
+pedophile
+pedophilia
+pedophiliac
+pedophilic
+Pedro
+pedunculate
+pee
+peebles
+peek
+peekaboo
+peeked
+peeking
+peeks
+peel
+peelable
+peeled
+peeler
+peeler's
+peeling
+peels
+peen
+peened
+peening
+peens
+peep
+peeped
+peeper
+peepers
+peephole
+peeping
+peeps
+peepshow
+peepul
+peepy
+peer
+peerage
+peered
+peeress
+peering
+peerless
+peerlessly
+peerlessness
+peers
+peeter
+peetweet
+peeve
+peeve's
+peeved
+peevers
+peeves
+peeving
+peevish
+peevishly
+peevishness
+peewee
+peewit
+peg
+peg's
+Pegasus
+pegboard
+pegboards
+pegged
+pegging
+Peggy
+pegmatite
+pegs
+pegu
+Pehlevi
+peignoir
+Peiping
+peipus
+peiraeus
+peirce
+pejoration
+pejorative
+pejoratively
+pejoratives
+pekan
+peke
+Pekin
+Peking
+Pekingese
+pekoe
+pelage
+Pelagian
+Pelagianism
+pelagic
+pelagius
+pelargonic
+pelargonium
+Pelasgian
+pelerine
+Peleus
+Pelew
+pelf
+Pelham
+Pelias
+pelican
+pelicans
+pelion
+pelisse
+pelite
+pella
+pellagra
+pellagrin
+pellagrous
+pelles
+pellet
+pellet's
+pelletal
+pelleted
+pelletier
+pelleting
+pelletization
+pelletizations
+pelletize
+pelletized
+pelletizer
+pelletizes
+pelletizing
+pellets
+pellicle
+pellitory
+pellucid
+pellucidity
+pellucidly
+pellucidness
+Pelmanism
+pelmet
+Peloponnese
+peloponnese
+Peloponnesian
+Pelops
+peloria
+peloric
+pelorus
+pelota
+pelotas
+pelt
+peltast
+peltate
+peltately
+pelter
+peltier
+pelting
+peltries
+peltry
+pelts
+pelvic
+pelvis
+pelvises
+pemba
+pemberton
+Pembroke
+Pembroke's
+Pembrokeshire
+pemican
+pemmican
+pemmicanization
+pemmicanization's
+pemmicanizations
+pemmicanize
+pemmicanizes
+pemphigus
+pen
+penal
+penalizable
+penalizable's
+penalizables
+penalization
+penalization's
+penalizations
+penalize
+penalized
+penalizes
+penalizing
+penally
+penalties
+penalty
+penalty's
+penance
+penanced
+penances
+penancing
+penang
+penates
+pence
+penchant
+penchi
+pencil
+penciled
+penciler
+pencilers
+penciling
+pencilings
+pencils
+pend
+pendant
+pended
+pendency
+pendent
+pendente
+pendentive
+pendently
+penderecki
+pending
+Pendleton
+pendleton
+pendragon
+pends
+pendular
+pendulous
+pendulously
+pendulousness
+pendulum
+pendulum's
+pendulums
+Penelope
+Penelope's
+peneplain
+penetrability
+penetrable
+penetrableness
+penetrably
+penetralia
+penetrance
+penetrances
+penetrant
+penetrants
+penetrate
+penetrated
+penetrates
+penetrating
+penetratingly
+penetration
+penetrations
+penetrative
+penetratively
+penetrativeness
+penetrator
+penetrator's
+penetrators
+penetrometer
+penetrometer's
+penetrometers
+peneus
+pengally
+pengpu
+penguin
+penguin's
+penguins
+Penh
+penholder
+penicillate
+penicillately
+penicillation
+penicillin
+penicillium
+penile
+penillion
+peninsula
+peninsula's
+peninsular
+peninsulas
+peninsulate
+penis
+penises
+penitence
+penitences
+penitency
+penitent
+penitential
+penitentially
+penitentiary
+penitently
+penki
+penknife
+penknife's
+penknives
+penlight
+penman
+penmanship
+penmen
+Penn
+penna
+pennaceous
+pennae
+pennant
+pennants
+pennate
+penned
+pennies
+penniless
+pennine
+pennines
+penning
+penninite
+pennis
+pennon
+pennoncel
+Pennsylvania
+Pennsylvania's
+penny
+penny's
+pennycress
+pennyroyal
+pennyweight
+pennywort
+pennyworth
+penological
+penologist
+penology
+penrith
+Penrose
+pens
+Pensacola
+pensile
+pension
+pensionable
+pensionary
+pensioned
+pensioner
+pensioners
+pensioning
+pensionless
+pensions
+pensive
+pensively
+pensiveness
+penstemon
+penstock
+pent
+penta
+pentachlorophenol
+pentacle
+pentacles
+pentad
+pentadactyl
+pentadactylism
+pentagon
+pentagon's
+pentagonal
+pentagonally
+pentagons
+pentagram
+pentagram's
+pentagrams
+pentagraph
+pentahedral
+pentahedron
+pentamerous
+pentameter
+pentane
+pentangle
+pentangles
+pentangular
+pentanoic
+pentapeptide
+pentaploid
+pentaploidy
+pentaprism
+pentaquin
+pentaquine
+pentarchy
+pentastich
+Pentateuch
+pentathlete
+pentathlon
+pentatomic
+pentatonic
+pentavalent
+pentazocine
+Pentecost
+pentecostal
+pentelikon
+pentene
+penthesileia
+pentheus
+penthouse
+penthouse's
+penthouses
+pentimento
+Pentland
+pentlandite
+pentobarbital
+pentobarbitone
+pentode
+pentodes
+pentomic
+pentosan
+pentose
+pentothal
+pentoxide
+Pentstemon
+pentyl
+pentylenetetrazol
+penuche
+penuchle
+penult
+penultima
+penultimate
+penultimately
+penumbra
+penumbral
+penurious
+penuriously
+penuriousness
+penury
+Penutian
+penza
+penzance
+peon
+peonage
+peones
+peonies
+peony
+people
+people's
+peopled
+peoplehood
+peopleless
+peoples
+peopling
+Peoria
+pep
+pepin
+peplos
+peplum
+pepo
+pepper
+peppercorn
+peppercorn's
+peppercorns
+peppered
+pepperer
+peppergrass
+peppering
+peppermint
+peppermints
+pepperminty
+pepperoni
+peppers
+peppertree
+pepperwort
+peppery
+peppier
+peppiness
+pepping
+peppy
+Pepsi
+pepsico
+Pepsico
+pepsin
+pepsinate
+pepsinogen
+peptic
+peptidase
+peptidases
+peptide
+peptides
+peptizable
+peptizable's
+peptizables
+peptization
+peptization's
+peptizations
+peptize
+peptized
+peptizer
+peptizers
+peptizes
+peptizing
+peptone
+peptonization
+peptonize
+peptonized
+peptonizes
+peptonizing
+Pepys
+Pequot
+per
+pera
+peracid
+peradventure
+peraea
+perak
+perambulate
+perambulated
+perambulates
+perambulating
+perambulation
+perambulations
+perambulator
+perambulatory
+perborate
+percale
+percaline
+perceivable
+perceivably
+perceive
+perceived
+perceiver
+perceivers
+perceives
+perceiving
+percent
+percentage
+percentages
+percentile
+percentiles
+percents
+percept
+perceptibility
+perceptible
+perceptibly
+perception
+perceptional
+perceptions
+perceptive
+perceptively
+perceptiveness
+perceptivity
+perceptual
+perceptually
+Perceval
+perch
+perchance
+perched
+Percheron
+perches
+perching
+perchlorate
+perchloric
+perchloride
+percipience
+percipient
+Percival
+Percival's
+percoid
+percoidean
+percolate
+percolated
+percolates
+percolating
+percolation
+percolator
+percolators
+percptibly
+percuss
+percussion
+percussionist
+percussionize
+percussionizes
+percussions
+percussive
+percussively
+percussiveness
+percutaneous
+percutaneously
+Percy
+perdido
+perdition
+perditions
+perdu
+perdurability
+perdurable
+perdurably
+pere
+peregrinate
+peregrinated
+peregrinates
+peregrinating
+peregrination
+peregrinations
+peregrine
+pereira
+peremptorily
+peremptoriness
+peremptory
+perennate
+perennated
+perennates
+perennating
+perennation
+perennations
+perennial
+perennialize
+perennializes
+perennially
+perennials
+Perez
+perfect
+perfecta
+perfected
+perfecter
+perfectibility
+perfectible
+perfecting
+perfection
+perfectionism
+perfectionist
+perfectionist's
+perfectionists
+perfections
+perfective
+perfectively
+perfectiveness
+perfectivity
+perfectivize
+perfectivizes
+perfectly
+perfectness
+perfecto
+perfects
+perfervid
+perfidious
+perfidiously
+perfidiousness
+perfidy
+perfin
+perfoliate
+perfoliation
+perforate
+perforated
+perforates
+perforating
+perforation
+perforations
+perforator
+perforce
+perform
+performable
+performance
+performance's
+performances
+performative
+performatory
+performed
+performer
+performers
+performing
+performs
+perfume
+perfumed
+perfumer
+perfumery
+perfumes
+perfuming
+perfunctorily
+perfunctoriness
+perfunctory
+perfuse
+perfused
+perfusing
+perfusion
+perfusive
+Pergamon
+pergamum
+pergola
+pergolesi
+perhaps
+peri
+perianth
+periapt
+periblem
+pericardial
+pericarditis
+pericardium
+pericarp
+perichondral
+perichondrial
+perichondrium
+periclase
+Periclean
+Pericles
+periclinal
+pericline
+pericope
+pericranial
+pericranium
+pericycle
+pericyclic
+pericynthion
+periderm
+peridermal
+peridermic
+peridia
+peridium
+peridot
+peridotic
+peridotite
+peridotitic
+perigean
+perigee
+perigee's
+periglacial
+perigon
+perigordian
+perigynous
+perigyny
+perihelial
+perihelion
+perikaryal
+perikaryon
+peril
+peril's
+periled
+periling
+Perilla
+perilous
+perilously
+perilousness
+perils
+perilune
+perilymph
+perimeter
+perimorph
+perimysium
+perinatal
+perinephrium
+perineum
+perineuritis
+perineurium
+period
+period's
+periodate
+periodic
+periodical
+periodicalize
+periodicalizes
+periodically
+periodicals
+periodicities
+periodicity
+periodization
+periodizations
+periodize
+periodized
+periodizes
+periodizing
+periodontal
+periodontally
+periodontics
+periodontist
+periods
+perioneum
+perionychium
+periosteum
+periostitis
+periotic
+peripatecically
+peripatetic
+peripatetically
+peripateticism
+peripatus
+peripety
+peripherad
+peripheral
+peripherally
+peripherals
+peripheries
+periphery
+periphery's
+periphrasis
+periphrastic
+periphrastically
+periphytic
+periphyton
+periplast
+peripteral
+perique
+perisarc
+periscope
+periscopes
+periscopic
+perish
+perishability
+perishable
+perishable's
+perishables
+perished
+perisher
+perishers
+perishes
+perishing
+perishingly
+perisperm
+perispomenon
+perissodactyl
+peristalsis
+peristome
+peristyle
+peritectic
+perithecium
+peritoneum
+peritonitis
+peritrack
+Peritricha
+peritrichous
+peritrichously
+periwig
+periwinkle
+periwinkles
+perjure
+perjured
+perjurer
+perjures
+perjuring
+perjurious
+perjuriously
+perjury
+perk
+perked
+perkier
+perkily
+perkiness
+perking
+Perkins
+perks
+perky
+Perle
+Perle's
+perlis
+perlite
+perlitic
+Perlman
+perlocution
+perlocutionary
+perm
+permafrost
+permalloy
+permanence
+permanency
+permanent
+permanently
+permanentness
+permanents
+permanganate
+permanganic
+permeability
+permeable
+permeableness
+permeably
+permeance
+permease
+permeate
+permeated
+permeates
+permeating
+permeation
+permeations
+permeative
+Permian
+permissable
+permissibility
+permissible
+permissibleness
+permissibly
+permission
+permissions
+permissive
+permissively
+permissiveness
+permit
+permit's
+permits
+permitted
+permitter
+permitting
+permittivity
+permutation
+permutation's
+permutational
+permutations
+permute
+permuted
+permutes
+permuting
+pernambuco
+pernicious
+perniciously
+perniciousness
+pernickety
+pernik
+pernod
+Pernod
+perogative
+peroneal
+peroral
+perorally
+perorate
+peroration
+perorational
+peroxidase
+peroxide
+peroxidic
+peroxidize
+peroxidizement
+peroxidizement's
+peroxidizements
+peroxidizes
+peroxisomal
+peroxisome
+peroxysulphuric
+perpend
+perpendicular
+perpendicularity
+perpendicularly
+perpendiculars
+perpetrate
+perpetrated
+perpetrates
+perpetrating
+perpetration
+perpetrations
+perpetrator
+perpetrator's
+perpetrators
+perpetual
+perpetually
+perpetuate
+perpetuated
+perpetuates
+perpetuating
+perpetuation
+perpetuator
+perpetuity
+perpignan
+perplex
+perplexed
+perplexedly
+perplexes
+perplexing
+perplexities
+perplexity
+perquisite
+perquisites
+perrault
+perrin
+perron
+Perry
+Perry's
+persalt
+perse
+persecute
+persecuted
+persecutes
+persecuting
+persecution
+persecutive
+persecutor
+persecutor's
+persecutors
+persecutory
+Perseid
+persephone
+Persephone
+Persephone's
+persepolis
+Perseus
+perseverance
+perseverant
+perseveration
+perseverations
+persevere
+persevered
+perseveres
+persevering
+Pershing
+Persia
+Persian
+Persianization
+Persianization's
+Persianizations
+Persianize
+Persianizes
+Persians
+Persicaria
+persiennes
+persiflage
+persimmon
+persimmons
+Persis
+persist
+persisted
+persistence
+persistency
+persistent
+persistently
+persister
+persisting
+persists
+persnickety
+person
+person's
+persona
+personable
+personableness
+personae
+personage
+personage's
+personages
+personal
+personalism
+personalist
+personalistic
+personalities
+personality
+personality's
+personalization
+personalization's
+personalizations
+personalize
+personalized
+personalizes
+personalizing
+personally
+personals
+personalty
+personate
+personated
+personates
+personating
+personation
+personative
+personator
+personhood
+personification
+personifications
+personified
+personifier
+personifies
+personify
+personifying
+personization
+personization's
+personizations
+personize
+personizes
+personnel
+persons
+perspective
+perspective's
+perspectively
+perspectives
+perspectivism
+perspex
+perspicacious
+perspicaciously
+perspicaciousness
+perspicacity
+perspicuity
+perspicuous
+perspicuously
+perspicuousness
+perspiration
+perspirations
+perspiratory
+perspire
+perspired
+perspires
+perspiring
+Persson
+persuadable
+persuade
+persuaded
+persuader
+persuaders
+persuades
+persuading
+persuasible
+persuasion
+persuasion's
+persuasions
+persuasive
+persuasively
+persuasiveness
+persulphate
+persulphuric
+pert
+pertain
+pertained
+pertaining
+pertains
+Perth
+pertinacious
+pertinaciously
+pertinaciousness
+pertinacity
+pertinence
+pertinency
+pertinent
+pertinently
+pertly
+pertness
+perturb
+perturbable
+perturbation
+perturbation's
+perturbational
+perturbations
+perturbative
+perturbed
+perturbing
+pertussis
+Peru
+perugia
+perugino
+peruke
+perusal
+peruse
+perused
+peruser
+perusers
+peruses
+perusing
+perutz
+Peruvian
+Peruvianize
+Peruvianizes
+Peruvians
+peruzzi
+perv
+pervade
+pervaded
+pervades
+pervading
+pervasion
+pervasive
+pervasively
+pervasiveness
+perverse
+perversely
+perverseness
+perversion
+perversions
+perversity
+perversive
+pervert
+perverted
+pervertedly
+pervertedness
+perverter
+perverting
+perverts
+pervious
+perviousness
+pes
+Pesach
+pesade
+pesaro
+pescadores
+pescara
+peseta
+pesewa
+peshawar
+peshitta
+peskier
+pesky
+peso
+pesos
+pessary
+pessimal
+pessimism
+pessimist
+pessimistic
+pessimistically
+pessimists
+pessimum
+pest
+pestalozzi
+peste
+pester
+pestered
+pestering
+pesters
+pesthole
+pesthouse
+pesticide
+pesticides
+pestiferous
+pestiferously
+pestiferousness
+pestilence
+pestilences
+pestilent
+pestilential
+pestilentially
+pestilently
+pestle
+pestled
+pestles
+pestling
+pests
+pet
+petal
+petal's
+petaled
+petaliferous
+petallike
+petalody
+petaloid
+petalous
+petals
+petard
+petasos
+petasus
+Pete
+Pete's
+petechia
+peter
+Peter
+Peter's
+Peterborough
+petered
+Peterlee
+Peterloo
+Peterman
+Petermann
+Peters
+peters
+Petersburg
+Petersen
+Petersham
+Peterson
+pethidine
+petiolate
+petiolated
+petiole
+petioled
+petiolule
+petit
+petite
+petiteness
+petition
+petitionary
+petitioned
+petitioner
+petitioning
+petitions
+petits
+Petkiewicz
+Petkiewicz's
+Petra
+petrarch
+petrarchan
+petrel
+petri
+Petrie
+petrifaction
+petrification
+petrified
+petrify
+Petrine
+petrochemical
+petrochemistry
+petrodollar
+petrogenesis
+petrogenetic
+petroglyph
+petrograd
+petrographer
+petrographic
+petrographical
+petrographically
+petrography
+petrol
+petrolatum
+petroleum
+petrolic
+petrolization
+petrolization's
+petrolizations
+petrolize
+petrolizes
+petrologic
+petrological
+petrologically
+petrologist
+petrology
+petronel
+Petronius
+Petropavlovsk
+petrosal
+Petrosian
+petrous
+Petrov
+Petrovsk
+Petrozavodsk
+pets
+petsamo
+petted
+petter
+petter's
+petters
+pettibone
+Pettibone
+petticoat
+petticoat's
+petticoated
+petticoats
+pettier
+pettiest
+pettifog
+pettifogger
+pettifoggery
+pettifogging
+pettily
+pettiness
+pettinesses
+petting
+pettish
+pettishly
+pettishness
+pettitoes
+petty
+petulance
+petulances
+petulancy
+petulant
+petulantly
+petunia
+petuntse
+Peugeot
+pevsner
+pew
+pew's
+Pewaukee
+pewaukee
+pewee
+pewit
+pews
+pewter
+pewterer
+Peyer
+peyote
+Peyton
+Peyton's
+Pfalz
+pfennig
+Pfizer
+Pforzheim
+ph
+Ph
+pH
+Phaeacian
+Phaedra
+Phaedrus
+phaeton
+phage
+phagedaena
+phagocyte
+phagocytes
+phagocytize
+phagocytizes
+phagocytosis
+phagomania
+phagophobia
+phalangeal
+phalanger
+phalanges
+phalanstery
+phalanx
+phalanxes
+phalarope
+phalli
+phallic
+phallically
+phallicism
+phallus
+phalluses
+phanerocrystalline
+phanerogam
+phanerogamic
+phanerogamous
+phanerophyte
+phanerozoic
+phantasm
+phantasma
+phantasmagoria
+phantasmagoric
+phantasmal
+phantasmic
+phantasy
+phantom
+phantom's
+phantomize
+phantomizer
+phantomizers
+phantomizes
+phantomlike
+phantoms
+pharaoh
+pharaonic
+pharisaic
+pharisaical
+pharisaically
+pharisaicalness
+pharisaism
+pharisee
+pharmaceutic
+pharmaceutical
+pharmaceutically
+pharmaceuticals
+pharmaceutics
+pharmacies
+pharmacist
+pharmacists
+pharmacodynamic
+pharmacodynamically
+pharmacodynamics
+pharmacogenetic
+pharmacogenetics
+pharmacognostic
+pharmacognostical
+pharmacognosy
+pharmacokinetic
+pharmacokinetics
+pharmacologic
+pharmacological
+pharmacologically
+pharmacologist
+pharmacology
+pharmacophore
+pharmacophores
+pharmacophoric
+pharmacopoeia
+pharmacy
+pharnges
+pharos
+pharsalus
+pharyngeal
+pharyngitis
+pharyngology
+pharyngoscope
+pharyngotomy
+pharynx
+pharynxes
+phase
+phased
+phaser
+phasers
+phases
+phasic
+phasing
+phasmid
+phatic
+PhD
+phd
+pheasant
+pheasant's
+pheasants
+pheidippides
+phelloderm
+phellogen
+Phelps
+phenacaine
+phenacetin
+phenacite
+phenanthrene
+phenazine
+phenetic
+phenetics
+phenetidine
+phenetole
+phenformin
+phenix
+phenobarbital
+phenobarbitone
+phenocain
+phenocopy
+phenocryst
+phenol
+phenolate
+phenolic
+phenolization
+phenolization's
+phenolizations
+phenolize
+phenolizes
+phenological
+phenologically
+phenology
+phenolphthalein
+phenomena
+phenomenal
+phenomenalism
+phenomenalist
+phenomenalistic
+phenomenalistically
+phenomenalization
+phenomenalization's
+phenomenalizations
+phenomenalize
+phenomenalizes
+phenomenally
+phenomenological
+phenomenologically
+phenomenologies
+phenomenologist
+phenomenology
+phenomenom
+phenomenon
+phenothiazine
+phenotype
+phenotypic
+phenotypical
+phenotypically
+phenoxide
+phentolamine
+phenyl
+phenylalanine
+phenylamine
+phenylene
+phenylephrine
+phenylic
+phenylketonuria
+pheromone
+pheromone's
+pheromones
+phew
+phi
+phial
+phidias
+phidippides
+Phil
+Philadelphia
+Philadelphus
+philae
+philander
+philandered
+philanderer
+philanderer's
+philanderers
+philandering
+philanders
+philanthropic
+philanthropical
+philanthropically
+philanthropies
+philanthropist
+philanthropists
+philanthropize
+philanthropizes
+philanthropy
+philatelic
+philatelically
+philatelist
+philately
+philby
+Philco
+philco
+philemon
+philharmonic
+philhellene
+philibeg
+Philip
+Philippe
+philippe
+Philippeville
+philippi
+philippians
+Philippians
+Philippic
+philippics
+Philippine
+Philippines
+philippopolis
+philips
+Philistia
+Philistine
+Philistines
+philistines
+Philistinism
+Philistinize
+Philistinizes
+Phillies
+Phillip
+Phillip's
+phillips
+Phillips
+phillumenist
+Philly
+Philoctetes
+philodendron
+philogyny
+philol
+philological
+philologically
+philologist
+philologists
+philology
+philomel
+Philomela
+philoprogenitive
+philoprogenitiveness
+philosopher
+philosopher's
+philosophers
+philosophic
+philosophical
+philosophically
+philosophies
+philosophization
+philosophization's
+philosophizations
+philosophize
+philosophized
+philosophizer
+philosophizers
+philosophizes
+philosophizing
+philosophy
+philosophy's
+philter
+philtre
+phimosis
+Phipps
+phiz
+phlebitis
+phlebosclerosis
+phlebotomization
+phlebotomize
+phlebotomized
+phlebotomizes
+phlebotomizing
+phlebotomy
+Phlegethon
+phlegm
+phlegmatic
+phlegmatically
+phlegmy
+phloem
+phlogistic
+phlogiston
+phlogopite
+phlox
+phlyctena
+phnom
+phobia
+phobic
+Phobos
+phocaea
+phocine
+phocis
+phocomelia
+phoebe
+phoebus
+Phoenicia
+Phoenicia's
+Phoenician
+phoenicians
+phoenix
+phomvihane
+phon
+phonate
+phonated
+phonates
+phonating
+phonation
+phone
+phone's
+phoned
+phonematic
+phoneme
+phoneme's
+phonemes
+phonemic
+phonemically
+phonemics
+phonendoscope
+phones
+phonetic
+phonetical
+phonetically
+phonetician
+phoneticization
+phoneticization's
+phoneticizations
+phoneticize
+phoneticizes
+phonetics
+phonetist
+phoney
+phoneys
+phonic
+phonically
+phonics
+phonier
+phonies
+phonily
+phoniness
+phoning
+phonocardiogram
+phonocardiogram's
+phonocardiograms
+phonocardiograph
+phonocardiographic
+phonocardiography
+phonogram
+phonogram's
+phonogramic
+phonogramically
+phonogrammic
+phonogrammically
+phonograms
+phonograph
+phonographer
+phonographic
+phonographically
+phonographs
+phonography
+phonolite
+phonolitic
+phonologial
+phonologic
+phonological
+phonologically
+phonologist
+phonology
+phonometer
+phonon
+phonons
+phonoreception
+phonoreceptor
+phonorecord
+phonos
+phonoscope
+phonotactics
+phonotype
+phonotypes
+phonotypy
+phony
+phooey
+phosgene
+phosgenite
+phosophoric
+phosphatase
+phosphate
+phosphate's
+phosphates
+phosphatic
+phosphatide
+phosphatidic
+phosphatidyl
+phosphatization
+phosphatization's
+phosphatizations
+phosphatize
+phosphatized
+phosphatizes
+phosphatizing
+phosphaturia
+phosphene
+phosphide
+phosphine
+phosphines
+phosphino
+phosphite
+phosphocreatine
+phospholipid
+phospholipids
+phosphonium
+phosphoprotein
+phosphor
+phosphorate
+phosphore
+phosphoresce
+phosphorescence
+phosphorescent
+phosphorescently
+phosphoreted
+phosphoretted
+phosphoric
+phosphorism
+phosphorite
+phosphoritic
+phosphorize
+phosphorizes
+phosphorolysis
+phosphorolytic
+phosphoroscope
+phosphorous
+phosphors
+phosphorus
+phosphoryl
+phosphorylase
+phosphorylate
+phosphorylation
+phosphorylative
+phossy
+phot
+photic
+photically
+photo
+photo's
+photoactinic
+photoactive
+photoautotrophic
+photoautotrophically
+photobiologic
+photobiological
+photobiologist
+photobiology
+photobiotic
+photocatalyzer
+photocatalyzer's
+photocatalyzers
+photocathode
+photocathodes
+photocell
+photochemical
+photochemically
+photochemist
+photochemistry
+photochromic
+photochromism
+photochronograph
+photocoagulation
+photocompose
+photocomposer
+photocomposition
+photoconduction
+photoconductive
+photoconductivity
+photocopied
+photocopier
+photocopies
+photocopy
+photocopying
+photocurrent
+photodecomposition
+photodetector
+photodiode
+photodiodes
+photodisintegrate
+photodisintegration
+photodissociation
+photodissociative
+photodrama
+photoduplicate
+photoduplication
+photodynamic
+photodynamically
+photodynamics
+photoelastic
+photoelasticity
+photoelectric
+photoelectrically
+photoelectron
+photoelectronic
+photoelectrons
+photoelectrotype
+photoemission
+photoemissive
+photoengrave
+photoengraver
+photoengravers
+photoengraving
+photofit
+photoflash
+photoflood
+photofluorogram
+photofluorogram's
+photofluorograms
+photofluorographic
+photofluorography
+photogene
+photogenic
+photogenically
+photogeologic
+photogeological
+photogeology
+photogram
+photogram's
+photogrammetric
+photogrammetrist
+photogrammetry
+photograms
+photograph
+photographed
+photographer
+photographers
+photographic
+photographically
+photographing
+photographize
+photographizes
+photographs
+photography
+photogravure
+photoheliograph
+photoinduced
+photoinduction
+photoinductive
+photoionization
+photoionization's
+photoionizations
+photoisomerization
+photoisomerization's
+photoisomerizations
+photojournalism
+photojournalist
+photojournalist's
+photojournalistic
+photojournalists
+photokinesis
+photokinetic
+photolabeled
+photolabeler
+photolabeling
+photolithograph
+photolithographer
+photolithographic
+photolithographically
+photolithography
+photoluminescence
+photolysis
+photolytic
+photolytically
+photolyzable
+photolyze
+photolyzed
+photolyzes
+photolyzing
+photomap
+photomechanical
+photomechanically
+photometer
+photometer's
+photometers
+photometric
+photometrically
+photometry
+photomicrgraphical
+photomicrogram
+photomicrogram's
+photomicrograms
+photomicrograph
+photomicrographic
+photomicrography
+photomicroscope
+photomicroscopic
+photomontage
+photomorphogenesis
+photomorphogenic
+photomultiplier
+photomural
+photon
+photon's
+photonasty
+photonegative
+photoneutron
+photonic
+photons
+photonuclear
+photooxidation
+photooxidative
+photoperiod
+photoperiodic
+photoperiodically
+photoperiodism
+photophilic
+photophilous
+photophily
+photophobia
+photophobic
+photophore
+photophysical
+photophysics
+photopia
+photoplay
+photopolymer
+photopolymerization
+photopolymerization's
+photopolymerizations
+photopositive
+photoprint
+photoproduct
+photoproduction
+photoreaction
+photorealism
+photoreception
+photoreceptive
+photoreceptor
+photoreconnaissance
+photorecord
+photorecorder
+photoreduction
+photoresistance
+photorespiration
+photos
+photoselected
+photoselection
+photosensitive
+photosensitivity
+photosensitization
+photosensitization's
+photosensitizations
+photosensitize
+photosensitized
+photosensitizer
+photosensitizers
+photosensitizes
+photosensitizing
+photoset
+photosetter
+photosphere
+photospheric
+photostat
+photostatic
+photosynthesis
+photosynthesize
+photosynthesized
+photosynthesizes
+photosynthesizing
+photosynthetic
+photosynthetically
+phototactic
+phototactically
+phototaxis
+phototelegraphy
+phototherapy
+photothermic
+phototonus
+phototopography
+phototransistor
+phototropic
+phototropically
+phototropism
+phototube
+phototype
+phototypeset
+phototypesetter
+phototypesetting
+phototypographic
+phototypography
+photovoltaic
+photozincography
+Phragmites
+phrasal
+phrasally
+phrase
+phrased
+phrasemaker
+phrasemaking
+phrasemonger
+phrasemongering
+phraseogram
+phraseogram's
+phraseograms
+phraseograph
+phraseological
+phraseologically
+phraseologies
+phraseologist
+phraseology
+phraseology's
+phrases
+phrasing
+phrasings
+phratries
+phratry
+phreatic
+phreatophyte
+phreatophytic
+phrenetic
+phrenic
+phrenitis
+phrenological
+phrenologically
+phrenologist
+phrenology
+phrensy
+phrixus
+phrygia
+Phrygian
+phthalate
+phthalein
+phthalic
+phthalocyanine
+phthiriasis
+phthisic
+phthisis
+phut
+phycologist
+phycology
+phycomycete
+phycomycetes
+phyfe
+phyla
+phylactery
+phylae
+phylar
+phyle
+phylesis
+phyletic
+phyllary
+Phyllis
+phyllite
+phylloclade
+phyllode
+phyllodium
+phylloid
+phyllome
+phyllomic
+phyllophagous
+phyllopod
+phylloquinone
+phyllotaxis
+Phylloxera
+phylogenetic
+phylogeny
+phylum
+physiatrics
+physiatrist
+physic
+physical
+physicalism
+physicalist
+physicalistic
+physicality
+physically
+physicalness
+physicals
+physician
+physician's
+physicians
+physicist
+physicist's
+physicists
+physicked
+physicking
+physicochemical
+physicochemically
+physics
+physiochemical
+physiocrat
+physiocratic
+physiognomic
+physiognomical
+physiognomically
+physiognomy
+physiographer
+physiographic
+physiographical
+physiography
+physiol
+physiologic
+physiological
+physiologically
+physiologist
+physiology
+physiopathologic
+physiopathological
+physiopathology
+physiotherapist
+physiotherapy
+physique
+physiqued
+physoclistous
+physostigmine
+physostomous
+phytane
+phytoalexin
+phytochemical
+phytochemically
+phytochemist
+phytochemistry
+phytochrome
+phytoflagellate
+phytogenesis
+phytogenic
+phytogeographic
+phytogeographical
+phytogeographically
+phytogeography
+phytography
+phytohormone
+phytolith
+phytoliths
+phytological
+phytologically
+phytology
+phyton
+phytonic
+phytopathogen
+phytopathogenic
+phytopathologic
+phytopathological
+phytopathology
+phytophagous
+phytophagy
+phytoplankton
+phytoplanktonic
+phytosociological
+phytosociologically
+phytosociologist
+phytosociology
+phytosterol
+phytotoxic
+phytotoxicity
+phytotoxin
+phytotron
+pi
+piacenza
+piacular
+piaf
+piaffe
+piaget
+pial
+pianism
+pianissimo
+pianist
+pianistic
+pianistically
+pianists
+piano
+piano's
+pianoforte
+pianoforte's
+pianofortes
+Pianola
+pianos
+pias
+piassava
+piaster
+piave
+Piavko
+piaza
+piazza
+piazza's
+piazzas
+piazze
+pibroch
+pic
+pica
+picador
+picadores
+picaninny
+picara
+Picard
+picardy
+picaresque
+picaro
+picaroon
+Picasso
+picayune
+picayunish
+Piccadilly
+piccalilli
+piccanin
+piccaninny
+piccard
+piccolo
+piccoloist
+pice
+piceous
+pichiciego
+pick
+pickaback
+pickaninny
+pickaroon
+pickax
+pickaxe
+picked
+pickeer
+picker
+pickerel
+pickerels
+pickerelweed
+pickering
+pickers
+picket
+picketboat
+picketed
+picketer
+picketers
+picketing
+pickets
+Pickett
+Pickett's
+Pickford
+pickier
+pickin
+picking
+pickings
+pickle
+pickled
+pickles
+pickling
+picklock
+Pickman
+pickoff
+pickoffs
+pickpocket
+pickproof
+picks
+pickthank
+pickup
+pickup's
+pickups
+Pickwickian
+picky
+picnic
+picnic's
+picnicked
+picnicker
+picnickers
+picnicking
+picnicky
+picnics
+picnometer
+picnometer's
+picnometers
+pico
+picofarad
+picofarads
+picogram
+picogram's
+picograms
+picojoule
+picoline
+picometer
+picometer's
+picometers
+picon
+picong
+picosecond
+picoseconds
+picot
+picotee
+picrate
+picric
+picrite
+picrotoxin
+Pict
+Pictish
+pictogram
+pictograph
+pictographic
+pictography
+pictor
+pictorial
+pictorialism
+pictorialization
+pictorialization's
+pictorializations
+pictorialize
+pictorialized
+pictorializes
+pictorializing
+pictorially
+pictorialness
+picts
+picture
+pictured
+picturegoer
+pictures
+picturesque
+picturesquely
+picturesqueness
+picturing
+picturization
+picturization's
+picturizations
+picturize
+picturized
+picturizes
+picturizing
+picul
+piddle
+piddling
+piddock
+pidgin
+pidginization
+pidginize
+pidginized
+pidginizes
+pidginizing
+pie
+piebald
+piece
+pieced
+piecemeal
+piecer
+pieces
+piecewise
+piecework
+pieceworker
+piecing
+piecrust
+pied
+Piedfort
+Piedmont
+piedmont
+piedmontite
+piefort
+pieing
+pieman
+piemonte
+pier
+pierce
+pierced
+pierces
+piercing
+piercingly
+pieria
+Pierian
+Pierides
+pieridine
+piero
+Pierre
+Pierrot
+piers
+Pierson
+pies
+pieta
+Pietermaritzburg
+Pieterson
+pieties
+pietism
+pietist
+pietistic
+pietistical
+pietistically
+pietro
+piety
+piezo
+piezochemistry
+piezoelectric
+piezoelectrically
+piezoelectricity
+piezometer
+piezometer's
+piezometers
+piezometric
+piezometry
+piffle
+piffled
+piffles
+piffling
+pig
+pig's
+pigboat
+pigeon
+pigeon's
+pigeonberry
+pigeonfoot
+pigeonhearted
+pigeonhole
+pigeonholed
+pigeonholes
+pigeonholing
+pigeons
+pigeonwing
+pigface
+pigfaced
+pigfish
+pigged
+piggeries
+piggery
+piggin
+pigging
+piggish
+piggishly
+piggishness
+piggledy
+piggott
+piggy
+piggyback
+piggybacked
+piggybacking
+pigheaded
+pigheadedness
+piglet
+piglets
+pigmeat
+pigment
+pigmentary
+pigmentation
+pigmentations
+pigmented
+pigmentize
+pigmentizes
+pigments
+pigmy
+pignut
+pigpen
+pigpens
+pigroot
+pigs
+pigskin
+pigstick
+pigsticker
+pigsticking
+pigsty
+pigswill
+pigtail
+pigtailed
+pigweed
+pika
+pike
+pike's
+piked
+pikelet
+pikeman
+pikeperch
+piker
+pikes
+pikestaff
+piking
+pilaf
+pilaff
+pilaster
+Pilate
+pilatus
+pilau
+pilch
+pilchard
+pilcomayo
+pile
+pilea
+pileate
+pileated
+piled
+pilei
+pileous
+pilers
+piles
+pileum
+pileup
+pileus
+pilewort
+pilfer
+pilferage
+pilfered
+pilferer
+pilfering
+pilfers
+pilgarlic
+pilgrim
+pilgrim's
+pilgrimage
+pilgrimage's
+pilgrimages
+pilgrimize
+pilgrimizes
+pilgrims
+pili
+piliferous
+piliform
+piling
+pilings
+pill
+pill's
+pillage
+pillaged
+pillager
+pillages
+pillaging
+pillar
+pillared
+pillarize
+pillarizes
+pillars
+pillbox
+pillboxes
+pillion
+pillions
+pilliwinks
+pilloried
+pillories
+pillory
+pillorying
+pillow
+pillow's
+pillowcase
+pillowcases
+pillows
+pills
+Pillsbury
+pillwort
+pilocarpine
+piloerection
+pilose
+pilot
+pilot's
+pilotage
+pilotages
+piloted
+pilothouse
+piloting
+pilotless
+pilots
+Pilsen
+pilsener
+pilsner
+Pilsudski
+Piltdown
+pilular
+pilule
+pilus
+pimento
+pimiento
+pimp
+pimpernel
+pimping
+pimple
+pimpled
+pimples
+pimplike
+pimply
+pimps
+pin
+pin's
+pinaceous
+pinafore
+pinafores
+pinar
+pinaster
+pinata
+pinball
+pinbone
+pincer
+pincer's
+pincerlike
+pincers
+pinch
+pinchbeck
+pinchcock
+pinched
+pincher
+pinches
+pinching
+pinchpenny
+pinckney
+pincushion
+pindar
+Pindaric
+pindling
+pindus
+pine
+pineal
+pineapple
+pineapple's
+pineapples
+pinecone
+pined
+pinedrops
+Pinehurst
+pinene
+pinero
+pinery
+pines
+pinesap
+pineta
+pinetum
+pinewood
+piney
+pinfeather
+pinfish
+pinfold
+ping
+pinger
+pinging
+pingo
+pinguid
+pinhead
+pinheaded
+pinheadedness
+pinheads
+pinhole
+pinholes
+pining
+pinion
+pinioned
+pinions
+pinite
+pink
+pinked
+pinker
+Pinkerton
+pinkest
+pinkeye
+pinkie
+pinkies
+pinking
+pinkish
+pinkishness
+pinkly
+pinkness
+pinko
+pinkoes
+pinkos
+pinkroot
+pinks
+Pinkster
+pinky
+pinna
+pinnace
+pinnacle
+pinnacle's
+pinnacled
+pinnacles
+pinnacling
+pinnae
+pinnal
+pinnas
+pinnate
+pinnately
+pinnatifid
+pinnatipartite
+pinnatiped
+pinnatisect
+pinned
+pinner
+pinning
+pinnings
+pinniped
+pinniped's
+pinnipeds
+pinnula
+pinnular
+pinnulate
+pinnulated
+pinnule
+pinny
+pinochet
+pinochle
+pinole
+pinpoint
+pinpointed
+pinpointing
+pinpoints
+pinprick
+pinpricks
+pins
+pinscher
+pinsetter
+Pinsk
+Pinsky
+Pinsky's
+pinspotter
+pinstripe
+pint
+pint's
+pinta
+pintadera
+pintail
+pintails
+pinter
+pintle
+pinto
+pintoes
+pints
+pinturicchio
+pinup
+pinwheel
+pinwork
+pinworm
+pinxter
+piny
+piolet
+pion
+pioneer
+pioneered
+pioneering
+pioneers
+pionic
+Piotr
+Piotr's
+pious
+piously
+piousness
+pip
+pipa
+pipage
+pipal
+pipe
+pipeage
+pipeclay
+piped
+pipefish
+pipefitting
+pipeful
+pipeless
+pipelike
+pipeline
+pipelined
+pipelines
+pipelining
+piper
+piperaceous
+piperazine
+piperidine
+piperine
+piperonal
+pipers
+pipes
+Pipestone
+pipestone
+pipet
+pipette
+pipewort
+pipgras
+piping
+pipingly
+pipings
+pipistrelle
+pipit
+pipkin
+pippin
+pipping
+pipsissewa
+pipsqueak
+piquancy
+piquant
+piquantly
+piquantness
+pique
+piqued
+piquet
+piquing
+piracy
+Piraeus
+piragua
+pirandello
+piranesi
+piranha
+piraro
+pirate
+pirate's
+pirated
+pirates
+piratical
+piratically
+pirating
+piratize
+piratizes
+pirhouette
+pirn
+pirog
+pirogue
+piroplasm
+piroplasma
+piroplasmata
+pirouette
+pirouetting
+pirozhki
+Pisa
+Pisanello
+Pisano
+piscary
+Piscataway
+Piscataway's
+piscatorial
+Pisces
+piscicultural
+pisciculture
+pisciculturist
+piscina
+piscine
+Piscis
+piscivorous
+pisgah
+pish
+pishogue
+pishpek
+pisiform
+pisistratus
+pismire
+pisolite
+pisolitic
+piss
+pissarro
+pissed
+pisser
+pisses
+pissing
+pissoir
+pistachio
+pistareen
+piste
+pistil
+pistil's
+pistillate
+pistils
+pistoia
+pistol
+pistol's
+pistole
+pistoled
+pistoleer
+pistoleers
+pistoling
+pistols
+piston
+piston's
+pistons
+pit
+pit's
+pita
+pitapat
+Pitcairn
+pitch
+pitchblende
+pitched
+pitcher
+pitchers
+pitches
+pitchfork
+pitchfork's
+pitchforks
+pitching
+pitchman
+pitchometer
+pitchometers
+pitchout
+pitchstone
+pitchy
+piteous
+piteously
+piteousness
+pitfall
+pitfall's
+pitfalls
+pith
+pithead
+Pithecanthropus
+pithed
+pithes
+pithier
+pithiest
+pithily
+pithiness
+pithing
+pithos
+pithy
+pitiable
+pitiableness
+pitiably
+pitied
+pitier
+pitiers
+pities
+pitiful
+pitifully
+pitifulness
+pitiless
+pitilessly
+pitilessness
+pitman
+Pitney
+piton
+piton's
+pitons
+pitot
+pits
+pitsaw
+Pitt
+Pitta
+pittance
+pittance's
+pittances
+pitted
+pitting
+Pittsburgh
+Pittsburghers
+Pittsfield
+Pittston
+pituitary
+pituri
+pity
+pitying
+pityingly
+pityriasis
+piura
+Pius
+pivot
+pivotable
+pivotal
+pivotally
+pivoted
+pivoting
+pivotman
+pivots
+pix
+pixel
+pixel's
+pixels
+pixie
+pixieish
+pixies
+pixilated
+pixilates
+pixilation
+pixiness
+pixmap
+pixmap's
+pixmaps
+pixy
+Pizarro
+pizazz
+pize
+pizz
+pizza
+pizzazz
+pizzeria
+pizzicato
+pizzle
+Pl
+placability
+placable
+placably
+placard
+placard's
+placards
+placate
+placated
+placater
+placates
+placating
+placation
+placative
+placatory
+place
+placeable
+placebo
+placed
+placeholder
+placeless
+placelessly
+placeman
+placemat
+placemat's
+placemats
+placement
+placement's
+placements
+placency
+placent
+placenta
+placental
+placentation
+placentations
+placentia
+placer
+places
+placet
+placid
+placidity
+placidly
+placidness
+placing
+placket
+placoderm
+placoid
+plafond
+plagal
+plage
+plagiarism
+plagiarist
+plagiaristic
+plagiarization
+plagiarization's
+plagiarizations
+plagiarize
+plagiarized
+plagiarizer
+plagiarizers
+plagiarizes
+plagiarizing
+plagiary
+plagioclase
+plagioclimax
+plagiotropism
+plague
+plagued
+plaguer
+plagues
+plaguesome
+plaguey
+plaguily
+plaguing
+plaguy
+plaice
+plaid
+plaid's
+plaided
+plaids
+plain
+plainchant
+plainclothes
+plainclothesman
+plainer
+plainest
+Plainfield
+plainly
+plainness
+plains
+plainsman
+plainsong
+plainspoken
+plainspokenness
+plaint
+plaintext
+plaintful
+plaintiff
+plaintiff's
+plaintiffs
+plaintive
+plaintively
+plaintiveness
+Plainview
+plainview
+plaister
+plait
+plait's
+plaiter
+plaiting
+plaits
+plan
+plan's
+planar
+planarian
+planarity
+planation
+planchet
+planchette
+Planck
+Planck's
+plane
+plane's
+planed
+planeload
+planer
+planers
+planes
+planet
+planet's
+planetaria
+planetarium
+planetary
+planetesimal
+planetoid
+planetoidal
+planetoids
+planetological
+planetologist
+planetology
+planets
+planform
+plangency
+plangent
+plangently
+planimeter
+planimeter's
+planimeters
+planimetric
+planimetry
+planing
+planish
+planisher
+planisphere
+planispheric
+plank
+planking
+planks
+plankton
+planktonic
+planless
+planlessly
+planlessness
+planned
+planner
+planner's
+planners
+planning
+plano
+planoconcave
+planoconvex
+planogamete
+planograph
+planographic
+planography
+planometer
+planosol
+plans
+plant
+plantable
+plantagenet
+plantain
+plantar
+plantation
+plantation's
+plantations
+planted
+planter
+planters
+plantigrade
+planting
+plantings
+plantlike
+plantocracy
+plants
+planula
+planular
+planuloid
+plaque
+plaques
+plash
+plashy
+plasm
+plasma
+plasmagel
+plasmagene
+plasmagenic
+plasmalemma
+plasmapheresis
+plasmasol
+plasmatic
+plasmid
+plasmid's
+plasmids
+plasmin
+plasminogen
+plasmodesm
+plasmodesma
+plasmodium
+plasmogamy
+plasmolysis
+plasmolytic
+plasmolytically
+plasmolyze
+plasmon
+plasmosome
+plasodesma
+plassey
+Plasson
+plaster
+plasterboard
+plastered
+plasterer
+plasterers
+plastering
+plasters
+plasterwork
+plastery
+plastic
+plastically
+Plasticine
+plasticity
+plasticization
+plasticization's
+plasticizations
+plasticize
+plasticized
+plasticizer
+plasticizers
+plasticizes
+plasticizing
+plasticly
+plastics
+plastid
+plastidial
+plastisol
+plastisols
+plastogene
+plastometer
+plastral
+plastron
+plat
+plata
+plataea
+platan
+plate
+plateau
+plateau's
+plateaus
+plateaux
+plated
+plateful
+platelayer
+platelayers
+platelet
+platelet's
+platelets
+platelike
+platemaker
+platemaking
+platemark
+platemarks
+platen
+platen's
+platens
+plater
+plateresque
+platers
+plates
+platform
+platform's
+platforms
+plath
+platies
+platina
+plating
+platings
+platinic
+platiniferous
+platiniridium
+platinization
+platinization's
+platinizations
+platinize
+platinized
+platinizes
+platinizing
+platinocyanic
+platinocyanide
+platinoid
+platinotype
+platinous
+platinum
+platipi
+platipi's
+platitude
+platitudes
+platitudinal
+platitudinarian
+platitudinization
+platitudinize
+platitudinized
+platitudinizes
+platitudinizing
+platitudinous
+platitudinously
+Plato
+platonic
+Platonical
+platonically
+Platonism
+Platonist
+platonization
+platonize
+platonized
+platonizes
+platonizing
+platoon
+platoons
+Plattdeutsch
+Platte
+platted
+Platteland
+platter
+platter's
+platterful
+platters
+Platteville
+platting
+platy
+platyhelminth
+platypus
+platypus's
+platypuses
+platyrrhine
+plauded
+plauding
+plaudit
+plauen
+plause
+plausibility
+plausible
+plausibleness
+plausibly
+plausive
+Plautus
+play
+playa
+playability
+playable
+playact
+playback
+playbacks
+playbill
+playbills
+playbook
+playboy
+playboys
+played
+player
+player's
+players
+playful
+playfully
+playfulness
+playgirl
+playgoer
+playgoers
+playground
+playground's
+playgrounds
+playgroup
+playgroups
+playhouse
+playhouses
+playing
+playland
+playlet
+playmaker
+playmate
+playmate's
+playmates
+playoff
+playpen
+playpen's
+playpens
+playroom
+plays
+playschool
+playsuit
+plaything
+plaything's
+playthings
+playtime
+playwright
+playwright's
+playwrights
+playwriting
+plaza
+plazas
+plea
+plea's
+pleach
+plead
+pleadable
+pleaded
+pleader
+pleading
+pleadingly
+pleadings
+pleads
+pleas
+pleasance
+pleasant
+pleasantly
+pleasantness
+pleasantry
+please
+pleased
+pleasely
+pleaser
+pleases
+pleasing
+pleasingly
+pleasingness
+pleasurability
+pleasurable
+pleasurableness
+pleasurably
+pleasure
+pleasured
+pleasureless
+pleasures
+pleasuring
+pleat
+pleated
+pleater
+pleatless
+pleats
+pleb
+plebby
+plebe
+plebeian
+plebeianism
+plebeianize
+plebeianizes
+plebeianly
+plebes
+plebian
+plebiscitary
+plebiscite
+plebiscite's
+plebiscites
+plebs
+plectognath
+plectrum
+plectrum's
+plectrums
+pled
+pledge
+pledged
+pledgee
+pledger
+pledges
+pledget
+pledging
+pledgor
+pleiad
+Pleiades
+pleiocene
+pleiotropism
+Pleistocene
+plenary
+plenipotent
+plenipotentiary
+plenish
+plenitude
+plenitudinous
+plenteous
+plenteously
+plenteousness
+plenties
+plentiful
+plentifully
+plentifulness
+plentitude
+plenty
+plenum
+pleochroism
+pleomorphism
+pleonasm
+pleopod
+plesiosaur
+plessor
+plethora
+plethoric
+plethysmograph
+pleura
+pleurae
+pleural
+pleuras
+pleurisy
+pleuritic
+pleurodont
+pleurodynia
+pleuron
+pleuropneumonia
+pleurotomy
+pleuston
+pleven
+plex
+plexiform
+Plexiglas
+plexiglass
+plexor
+plexus
+pliability
+pliable
+pliableness
+pliably
+pliancy
+pliant
+pliantly
+pliantness
+plica
+plicate
+plication
+plied
+plier
+pliers
+plies
+plight
+plighter
+plimsoll
+plink
+plinked
+plinker
+plinking
+plinks
+plinth
+Pliny
+Pliocene
+ploat
+plod
+plodded
+plodder
+plodding
+ploddingly
+plodge
+plods
+plonk
+plonko
+plop
+plopped
+plopping
+plosion
+plosive
+plot
+plot's
+plotinus
+plotless
+plotlessness
+plots
+plottable
+plottage
+plotted
+plotter
+plotter's
+plotters
+plottier
+plotting
+plotty
+ploughboys
+ploughmen
+ploughs
+ploughstaff
+plover
+plovers
+plow
+plowable
+plowboy
+plowed
+plower
+plowhead
+plowing
+plowman
+plowmen
+plowmen's
+plows
+plowshare
+plowshare's
+plowshares
+ploy
+ploy's
+ploys
+pluck
+plucked
+plucker
+pluckier
+pluckily
+pluckiness
+plucking
+plucky
+plug
+plug's
+plugboard
+plugboard's
+plugboards
+pluggable
+plugged
+plugger
+plugging
+plugs
+plum
+plum's
+plumage
+plumaged
+plumages
+plumate
+plumb
+plumb's
+plumbaginaceous
+plumbaginous
+plumbago
+plumbate
+plumbed
+plumbeous
+plumber
+plumbers
+plumbic
+plumbicon
+plumbiferous
+plumbing
+plumbism
+plumbous
+plumbs
+plumbum
+plume
+plumed
+plumelet
+plumes
+plumier
+pluming
+plumlike
+plummer
+plummet
+plummeted
+plummeting
+plummets
+plummier
+plummy
+plumose
+plumosely
+plump
+plumped
+plumpen
+plumper
+plumpish
+plumply
+plumpness
+plums
+plumulate
+plumule
+plumulose
+plumy
+plunder
+plunderable
+plunderage
+plundered
+plunderer
+plunderers
+plundering
+plunderous
+plunders
+plunge
+plunged
+plunger
+plungers
+plunges
+plunging
+plunk
+plunker
+plunkers
+plunking
+pluperfect
+plural
+pluralism
+pluralist
+pluralistic
+pluralistically
+pluralists
+plurality
+pluralization
+pluralization's
+pluralizations
+pluralize
+pluralized
+pluralizer
+pluralizers
+pluralizes
+pluralizing
+plurally
+plurals
+pluriaxial
+pluriliteral
+pluripotent
+pluripresence
+plus
+pluses
+plush
+plushier
+plushiness
+plushly
+plushness
+plushy
+plussage
+plusses
+Plutarch
+Pluto
+plutocracy
+plutocrat
+plutocratic
+plutocratically
+pluton
+plutonian
+plutonic
+plutonium
+plutus
+pluvial
+pluviometer
+pluvious
+ply
+plying
+Plymouth
+plyscore
+plywood
+PM
+pma
+pneuma
+pneumatic
+pneumatically
+pneumaticity
+pneumatics
+pneumatology
+pneumatolysis
+pneumatolytic
+pneumatometer
+pneumatometer's
+pneumatometers
+pneumatophore
+pneumatophoric
+pneumectomy
+pneumobacillus
+pneumococcus
+pneumoconiosis
+pneumodynamics
+pneumogastric
+pneumograph
+pneumonectomy
+pneumonia
+pneumonic
+pneumonitis
+pneumothorax
+pnom
+poaceous
+poach
+poached
+poacher
+poachers
+poaches
+poaching
+POBox
+Pocahontas
+pocahontas
+pochard
+pock
+pocket
+pocketbook
+pocketbook's
+pocketbooks
+pocketed
+pocketful
+pocketing
+pocketknife
+pocketknife's
+pocketknives
+pockets
+pockmark
+pocky
+poco
+pococurante
+Pocono
+Poconos
+pocus
+pod
+pod's
+podagra
+podagral
+podded
+podding
+poddy
+podesta
+podge
+podger
+podgers
+podgier
+podgorica
+podgy
+podia
+podiatric
+podiatrist
+podiatry
+podite
+poditic
+podium
+Podolsk
+podophyllin
+pods
+podsol
+Poe
+poem
+poem's
+poems
+poenology
+poesies
+poesy
+poet
+poet's
+poetaster
+poetess
+poetic
+poetical
+poetically
+poeticalness
+poeticism
+poeticization
+poeticize
+poeticized
+poeticizes
+poeticizing
+poetics
+poetization
+poetization's
+poetizations
+poetize
+poetized
+poetizer
+poetizers
+poetizes
+poetizing
+poetries
+poetry
+poetry's
+poets
+pogey
+pogge
+pogo
+Pogonia
+Pogorelich
+pogrom
+pogromist
+pogromize
+pogromizes
+pogroms
+pogy
+pohai
+pohutukawa
+poi
+poignancy
+poignant
+poignantly
+poikilotherm
+poikilothermic
+poikilothermism
+poilu
+Poincare
+poinciana
+poind
+Poindexter
+poinsettia
+point
+pointe
+pointed
+pointedly
+pointedness
+pointer
+pointers
+pointier
+pointiest
+pointillism
+pointillist
+pointilliste
+pointillistic
+pointing
+pointless
+pointlessly
+pointlessness
+points
+pointsman
+pointwise
+pointy
+poirot
+poise
+poised
+poises
+poising
+poison
+poisoned
+poisoner
+poisoning
+poisonous
+poisonously
+poisonousness
+poisons
+Poisson
+poitiers
+poitou
+poitrine
+poke
+pokeberry
+poked
+pokelogan
+poker
+pokerface
+pokerfaced
+pokes
+pokeweed
+pokey
+pokeys
+pokie
+pokier
+pokily
+pokiness
+poking
+poky
+pol
+pola
+Polack
+polacre
+Poland
+Poland's
+Polanski
+polar
+polarimeter
+polarimeter's
+polarimeters
+polarimetric
+polarimetry
+Polaris
+polariscope
+polariscopic
+polarities
+polariton
+polarity
+polarity's
+polarizabilities
+polarizability
+polarizability's
+polarizable
+polarizable's
+polarizables
+polarization
+polarization's
+polarizations
+polarize
+polarized
+polarizer
+polarizers
+polarizes
+polarizing
+polarogram
+polarogram's
+polarograms
+polarograph
+polarographic
+polarographically
+polarography
+Polaroid
+polaron
+polder
+pole
+poleax
+poleaxe
+polecat
+poled
+poleless
+polemarch
+polemic
+polemical
+polemically
+polemicist
+polemicize
+polemicized
+polemicizes
+polemicizing
+polemics
+polemist
+polemize
+polemized
+polemizes
+polemizing
+polemoniaceous
+polemonium
+polenta
+poler
+poles
+polestar
+poleward
+poleyn
+police
+police's
+policed
+policeman
+policeman's
+policemen
+policemen's
+polices
+policewoman
+policewoman's
+policewomen
+policies
+policing
+policize
+policizer
+policizers
+policizes
+policy
+policy's
+policyholder
+policyholders
+policymaker
+policymakers
+policymaking
+poling
+polio
+poliomyelitic
+poliomyelitis
+poliovirus
+polis
+polish
+polished
+polisher
+polishers
+polishes
+polishing
+politburo
+polite
+politely
+politeness
+politer
+politesse
+politest
+politic
+political
+politicalize
+politicalizes
+politically
+politician
+politician's
+politicians
+politicization
+politicize
+politicized
+politicizer
+politicizers
+politicizes
+politicizing
+politick
+politicker
+politicking
+politico
+politicos
+politics
+polities
+politize
+politizes
+polity
+Polje
+Polk
+polka
+polka's
+polkadot
+polkadots
+polkas
+poll
+Pollack
+pollaiuolo
+pollan
+Pollard
+Pollard's
+polled
+pollee
+pollen
+pollenate
+pollenated
+pollenates
+pollenating
+pollenation
+pollenizer
+pollenosis
+poller
+pollex
+pollical
+pollices
+pollinate
+pollinated
+pollinates
+pollinating
+pollination
+pollinator
+polling
+Pollini
+pollinic
+polliniferous
+pollinium
+pollinize
+pollinized
+pollinizer
+pollinizes
+pollinizing
+pollinosis
+polliwog
+pollock
+polloi
+polls
+pollster
+pollutant
+pollutants
+pollute
+polluted
+polluter
+pollutes
+polluting
+pollution
+pollutive
+Pollux
+Pollyanna
+pollywog
+pollywog's
+pollywogs
+polo
+poloist
+polonaise
+polonium
+polony
+Polska
+poltava
+poltergeist
+poltroon
+poltroonery
+poltroonish
+poltroonishly
+Poly
+poly
+polyadelphous
+polyamide
+polyandrous
+polyandry
+polyanka
+polyantha
+polyanthus
+polyatomic
+polybasic
+polybasite
+polybius
+polybutene
+polybutenes
+polycarbonate
+Polycarp
+polycarpellary
+polycarpic
+polycarpous
+polycarpy
+polycentrism
+polychaete
+polychaetous
+polychasium
+polychemicals
+polychotomous
+polychotomy
+polychromatic
+polychromatize
+polychromatizes
+polychrome
+polychromize
+polychromizes
+polychromy
+polycistronic
+polyclinic
+polycondensation
+polyconic
+polycot
+polycotyl
+polycotyledon
+polycotyledonous
+polycrates
+polycrystal
+polycrystalline
+polycyclic
+polycythemia
+polycythemic
+polydactyl
+polydactylous
+polydactyly
+polydemic
+polydeuces
+polydipsi
+polydipsia
+polydisperse
+polydispersity
+polyelectrolytes
+polyembryony
+polyester
+polyesters
+polyether
+polyethers
+polyethylene
+polygala
+polygalaceous
+polygamic
+polygamical
+polygamically
+polygamist
+polygamize
+polygamizes
+polygamous
+polygamously
+polygamy
+polygene
+polygenesis
+polygenesist
+polygenetic
+polygenetically
+polygenic
+polyglandular
+polyglot
+polyglotism
+polyglottism
+polygnotus
+polygon
+polygon's
+polygonaceous
+polygonal
+polygonally
+polygons
+polygonum
+polygram
+polygram's
+polygrams
+polygraph
+polygraphic
+polygynoecial
+polygynous
+polygyny
+polyhedra
+polyhedral
+polyhedron
+polyhedrosis
+polyhistor
+polyhistoric
+polyhydric
+polyhydroxy
+Polyhymnia
+polyisobutylene
+polyisocyanates
+polyisoprene
+polymath
+polymathic
+polymathy
+polymer
+polymer's
+polymerase
+polymeric
+polymerically
+polymerism
+polymerization
+polymerization's
+polymerizations
+polymerize
+polymerizes
+polymerous
+polymers
+polymorph
+polymorphic
+polymorphically
+polymorphism
+polymorphonuclear
+polymorphous
+polymorphously
+polymyositis
+polymyxin
+Polynesia
+Polynesia's
+Polynesian
+polyneuritis
+polynices
+polynomial
+polynomial's
+polynomials
+polynuclear
+polynucleotide
+polynya
+polyonymous
+polyoxyethene
+polyp
+polypary
+polypeptide
+polypeptidic
+polypetalous
+polyphagia
+polyphagous
+polyphagy
+polyphase
+polyphasic
+Polyphemus
+polyphenol
+polyphenolic
+polyphone
+polyphonic
+polyphonically
+polyphonous
+polyphonously
+polyphony
+polyphosphate
+polyphosphates
+polyphosphoric
+polyphyletic
+polyphyletically
+polyphyleticism
+polyphyodont
+polypide
+polyploid
+polyploidy
+polypnea
+polypneic
+polypod
+polypody
+polypoid
+polypous
+polypropylene
+polyprotodont
+polyptych
+polypus
+polyrhythm
+polyrhythmic
+polyrhythmically
+polyribonucleotide
+polyribosomal
+polyribosome
+Polys
+polysaccharide
+polysaccharides
+polysaprobic
+polysemous
+polysemy
+polysepalous
+polysilicon
+polysiloxanes
+polysome
+polysomic
+polysorbate
+polystichous
+polystyrene
+polysulfide
+polysulphide
+polysulphurization
+polysulphurization's
+polysulphurizations
+polysyllabic
+polysyllabically
+polysyllable
+polysyllogism
+polysynaptic
+polysynaptically
+polysyndeton
+polytechnic
+polytene
+polyteny
+polytheism
+polytheist
+polytheistic
+polytheistical
+polythene
+polythetic
+polythionic
+polytocous
+polytonal
+polytonality
+polytonally
+polytope
+polytrophic
+polytype
+polytypic
+polytypism
+polytypy
+polyunsaturated
+polyurethane
+polyuria
+polyvalence
+polyvalent
+polyvinyl
+polyvinylidene
+polywater
+polyxena
+polyzoan
+polyzoarium
+polyzoic
+pom
+pomace
+pomaceous
+pomade
+pomaded
+pomades
+pomander
+pomatum
+pombal
+pombe
+pome
+pomegranate
+pomelo
+pomerania
+Pomerania
+Pomeranian
+pomeranian
+pomfret
+pomiculture
+pomiferous
+pommel
+pommeled
+pommeling
+pommern
+pommy
+pomological
+pomologically
+pomologist
+pomology
+Pomona
+pomorze
+pomp
+pompadour
+pompano
+Pompeii
+Pompey
+pompey
+pompidou
+pompon
+pompons
+pomposity
+pompous
+pompously
+pompousness
+pon
+Ponce
+Ponchartrain
+Ponchartrain's
+poncho
+pond
+ponder
+ponderable
+pondered
+ponderer
+pondering
+ponderosa
+ponderosa's
+ponderosas
+ponderous
+ponderously
+ponderousness
+ponders
+pondicherry
+Pondo
+pondokkie
+Pondoland
+ponds
+pondweed
+pone
+pong
+pongee
+pongid
+poniard
+ponies
+Pons
+pons
+pont
+ponta
+pontchartrain
+pontefract
+pontevedra
+Pontiac
+pontianak
+Pontic
+pontifex
+pontiff
+pontific
+pontifical
+pontificals
+pontificaly
+pontificate
+pontificated
+pontificates
+pontificating
+pontification
+pontificator
+pontifices
+pontil
+pontine
+pontius
+ponton
+pontonier
+pontoon
+pontormo
+pontus
+pontypool
+pontypridd
+pony
+pony's
+ponytail
+pooch
+pooched
+pood
+poodle
+poof
+pooftah
+pooh
+pool
+Poole
+Poole's
+pooled
+pooling
+poolroom
+pools
+poon
+poona
+poonce
+poop
+poor
+poorer
+poorest
+poorhouse
+poorish
+poorly
+poorness
+poove
+pop
+pop's
+popcorn
+pope
+pope's
+popedom
+Popek
+Popek's
+Popeks
+popery
+popes
+popeyed
+popgun
+popinjay
+popish
+popishly
+poplar
+poplin
+popliteal
+Popov
+popover
+Popp
+poppa
+poppadom
+popped
+popper
+poppet
+poppied
+poppies
+popping
+popple
+poppy
+poppy's
+poppycock
+poppyhead
+poppyseed
+pops
+Popsicle
+popsicle
+Popsicles
+popsy
+populace
+populaire
+populaires
+popular
+popularism
+popularity
+popularization
+popularization's
+popularizations
+popularize
+popularized
+popularizer
+popularizers
+popularizes
+popularizing
+popularly
+populate
+populated
+populates
+populating
+population
+populations
+populism
+populist
+populistic
+populous
+populously
+populousness
+porbeagle
+porcelain
+porcelainization
+porcelainization's
+porcelainizations
+porcelainize
+porcelainizes
+porcelainlike
+porcelaneous
+porcellaneous
+porch
+porch's
+porches
+porcine
+porcupine
+porcupine's
+porcupines
+pore
+pored
+pores
+porgy
+pori
+poriferal
+poriferan
+poring
+porirua
+porism
+pork
+porker
+porkies
+porkpie
+porky
+porn
+pornocracy
+pornographer
+pornographic
+pornographically
+pornography
+poromeric
+porosimeter
+porosity
+porous
+porously
+porousness
+porphyria
+porphyrin
+porphyritic
+porphyrogenite
+porphyroid
+porphyropsin
+porphyry
+porpoise
+porpoises
+porrect
+porridge
+porringer
+porsena
+Porson
+port
+portability
+portable
+portables
+portably
+portadown
+portage
+portaged
+portaging
+portal
+portal's
+portals
+portamento
+portamento's
+portance
+portative
+portcullis
+Porte
+Porte's
+ported
+portend
+portended
+portending
+portends
+portent
+portentous
+portentously
+portentousness
+portents
+porter
+porterage
+porterhouse
+portering
+porters
+portfire
+portfolio
+portfolios
+porthole
+Portia
+portico
+portiere
+porting
+portion
+portion's
+portioned
+portioning
+portionize
+portionizes
+portionless
+portions
+Portland
+portlaoise
+portlier
+portliness
+portly
+portmanteau
+portmanteaus
+Porto
+portobello
+portrait
+portrait's
+portraitist
+portraits
+portraiture
+portray
+portrayal
+portrayals
+portrayed
+portrayer
+portraying
+portrays
+portress
+ports
+Portsmouth
+Portugal
+Portuguese
+portulaca
+portulacaceous
+posable
+posada
+pose
+posed
+Poseidon
+Posen
+poser
+posers
+poses
+poseur
+poseurs
+posey
+posh
+poshest
+posho
+posies
+posing
+posit
+posited
+Positif
+positing
+position
+positional
+positioned
+positioning
+positions
+positive
+positively
+positiveness
+positives
+positivism
+positivist
+positivistic
+positivists
+positivity
+positivize
+positivizes
+positron
+positronium
+posits
+Posner
+Posner's
+posology
+poss
+posse
+posseman
+possemen
+posses
+possess
+possessed
+possessedly
+possessedness
+possesses
+possessing
+possession
+possession's
+possessional
+possessions
+possessive
+possessive's
+possessively
+possessiveness
+possessives
+possessor
+possessor's
+possessors
+possessory
+posset
+possets
+possibilities
+possibility
+possibility's
+possible
+possibles
+possibly
+possie
+possum
+possum's
+possums
+post
+postage
+postal
+postaxial
+postaxially
+postbag
+postbags
+postbellum
+postbox
+postboxes
+postboy
+postboys
+postbreeding
+postcard
+postcard's
+postcards
+postcava
+postclassic
+postclassical
+postcode
+postcodes
+postcolonial
+postcondition
+postconditions
+postdate
+postdated
+postdates
+postdating
+postdental
+postdiluvian
+postdoctoral
+postdoctorate
+posted
+postembryonal
+postembryonic
+postemergence
+poster
+poster's
+posteriad
+posterior
+posteriori
+posteriority
+posteriorly
+posterity
+posterize
+posterizes
+postern
+posters
+postexilian
+postexilic
+postface
+postfix
+postfixed
+postfixes
+postfixing
+postform
+postglacial
+postgraduate
+posthaste
+posthole
+posthumous
+posthumously
+posthumousness
+posthypnotic
+postiche
+posticous
+postie
+postil
+postilion
+postillion
+postimpressionism
+posting
+postings
+postliminy
+postlude
+postludes
+postman
+postmarital
+postmark
+postmarked
+postmarks
+postmaster
+postmaster's
+postmasters
+postmastership
+postmen
+postmenopausal
+postmeridian
+postmillenarian
+postmillenarianism
+postmillennial
+postmillennialism
+postmillennialist
+postmistress
+postmodern
+postmortem
+postmultiply
+postnasal
+postnatal
+postnatally
+postnuptial
+postnuptially
+postoperative
+postoperatively
+postorbital
+postorder
+postpaid
+postpartum
+postpituitary
+postponable
+postpone
+postponed
+postponement
+postponer
+postpones
+postponing
+postposition
+postpositional
+postpositionally
+postpositions
+postpositive
+postpositively
+postprandial
+postprandially
+postprocess
+postprocessor
+postprocessors
+postrider
+posts
+postschool
+postscript
+postscript's
+postscripts
+postsecondary
+postsynaptic
+postsynaptically
+postsynchronization
+posttension
+posttraumatic
+postulancy
+postulant
+postulate
+postulated
+postulates
+postulating
+postulation
+postulational
+postulations
+postulator
+postural
+posture
+posture's
+postured
+posturer
+postures
+posturing
+posturize
+posturizes
+postvocalic
+postwar
+posy
+pot
+pot's
+potability
+potable
+potableness
+potage
+potamic
+potamology
+potash
+potassic
+potassium
+potation
+potato
+potatoes
+potatory
+potbellied
+potbelly
+potboil
+potboiler
+potboilers
+potboy
+potch
+poteen
+potemkin
+Potemkin
+potence
+potency
+potent
+potentate
+potentate's
+potentates
+potential
+potentialities
+potentiality
+potentialization
+potentialization's
+potentializations
+potentialize
+potentializes
+potentially
+potentials
+potentiate
+potentiating
+potentiation
+potentiator
+potentiometer
+potentiometer's
+potentiometers
+potentiometric
+potentiostat
+potentize
+potentizes
+potently
+potful
+pothead
+pothecary
+potheen
+pother
+potherb
+pothered
+pothering
+pothole
+potholed
+potholing
+pothook
+pothouse
+pothunter
+pothunting
+potiche
+potion
+potions
+potiphar
+potlatch
+potlatches
+potluck
+potman
+Potomac
+potoroo
+potpie
+potpourri
+pots
+Potsdam
+potsdam
+potsherd
+potshot
+potshotting
+potstone
+pottage
+pottawatomie
+Pottawatomie
+potted
+potter
+potter's
+potterer
+potteries
+potteringly
+potters
+pottery
+pottier
+potties
+potting
+pottle
+potto
+pottos
+Potts
+potty
+potyomkin
+pouch
+pouch's
+pouched
+pouches
+pouchier
+pouchy
+pouf
+pouff
+pouffed
+Poughkeepsie
+poulard
+poularde
+Poulenc
+poult
+poulterer
+poultice
+poultices
+poultry
+poultryman
+pounce
+pounced
+pounces
+pouncet
+pouncing
+pound
+poundage
+poundal
+pounded
+pounder
+pounders
+pounding
+pounds
+pour
+pourable
+pourboire
+poured
+pourer
+pourers
+pouring
+pouringly
+pourparler
+pourpoint
+pours
+poussette
+poussetted
+poussetting
+Poussin
+poussin
+poussins
+Poussins
+pout
+pouted
+pouter
+pouting
+pouts
+pouty
+poverty
+pow
+powan
+powder
+powdered
+powderer
+powdering
+powderization
+powderization's
+powderizations
+powderize
+powderizer
+powderizers
+powderizes
+powderman
+powdermen
+powderpuff
+powders
+powdery
+Powell
+power
+powerboat
+powered
+powerful
+powerfully
+powerfulness
+powerhouse
+powerhouse's
+powerhouses
+powering
+powerless
+powerlessly
+powerlessness
+powers
+Powhatan
+powwow
+powys
+pox
+poxes
+poxvirus
+poyang
+Poynting
+Poynting's
+poza
+pozsony
+pozzuolana
+pozzuoli
+pozzy
+ppm
+PR
+pracharak
+practicability
+practicable
+practicableness
+practicably
+practical
+practicalities
+practicality
+practicalization
+practicalization's
+practicalizations
+practicalize
+practicalizer
+practicalizers
+practicalizes
+practically
+practicalness
+practice
+practice's
+practiced
+practicer
+practices
+practicing
+practicum
+practitioner
+practitioner's
+practitioners
+pradesh
+Pradesh
+Prado
+praecox
+praedial
+praemunire
+praenomen
+Praesepe
+praetor
+Praetorian
+praetorius
+pragmat
+pragmatic
+pragmatical
+pragmatically
+pragmaticism
+pragmaticist
+pragmatics
+pragmatism
+pragmatist
+pragmatistic
+pragmatists
+pragmats
+Prague
+praha
+prairie
+prairies
+praise
+praised
+praiser
+praisers
+praises
+praiseworthily
+praiseworthiness
+praiseworthy
+praising
+praisingly
+prajna
+Prakrit
+praline
+pralltriller
+pram
+prams
+prance
+pranced
+prancer
+prances
+prancing
+prancingly
+prandial
+prang
+prank
+prank's
+prankish
+prankishly
+prankishness
+pranks
+prankster
+pranksters
+prase
+praseodymium
+prat
+prate
+prated
+prater
+prates
+pratfall
+pratincole
+prating
+pratingly
+pratique
+prato
+Pratt
+prattle
+prattled
+prattler
+prattles
+prattling
+prattlingly
+Prattville
+prau
+Pravda
+prawn
+prawner
+prawns
+praxeological
+praxeology
+praxes
+praxis
+praxiteles
+pray
+prayed
+prayer
+prayer's
+prayerful
+prayerfully
+prayerfulness
+prayers
+praying
+prays
+pre
+preach
+preached
+preacher
+preacherize
+preacherizes
+preachers
+preaches
+preachier
+preachifies
+preachify
+preachily
+preachiness
+preaching
+preachingly
+preachment
+preachy
+preacknowledgment
+preacknowledgment's
+preacknowledgments
+preadamite
+preadapt
+preadaptation
+preadapted
+preadaptive
+preadolescence
+preadolescent
+preallocate
+preallocated
+preallocates
+preallocating
+preallocation
+preallocation's
+preallocations
+preallocator
+preallocators
+preamble
+preambles
+preamplifier
+preamplifiers
+preanesthetic
+preanesthetics
+prearrange
+prearranged
+prearrangement
+preassign
+preassigned
+preassigning
+preassigns
+preatomic
+preaxial
+preaxially
+prebaptize
+prebaptizes
+prebend
+prebendal
+prebendary
+prebind
+prebiologic
+prebiological
+prebiotic
+precall
+Precambrian
+precancel
+precancelation
+precancerous
+precarious
+precariously
+precariousness
+precast
+precatory
+precaution
+precaution's
+precautionary
+precautioned
+precautioning
+precautions
+precautious
+precede
+preceded
+precedence
+precedence's
+precedences
+precedency
+precedent
+precedented
+precedential
+precedents
+precedes
+preceding
+preceed
+preceeded
+preceeding
+precensor
+precentor
+precentorial
+precentorship
+precept
+precept's
+preceptive
+preceptively
+preceptor
+preceptorial
+preceptorship
+preceptory
+preceptress
+precepts
+precess
+precessed
+precesses
+precessing
+precession
+precessional
+prechlorination
+precinct
+precinct's
+precincts
+preciosity
+precious
+preciously
+preciousness
+precipice
+precipitable
+precipitance
+precipitancy
+precipitant
+precipitantly
+precipitantness
+precipitate
+precipitated
+precipitately
+precipitateness
+precipitates
+precipitating
+precipitation
+precipitative
+precipitator
+precipitin
+precipitinogen
+precipitinogenic
+precipitous
+precipitously
+precipitousness
+precis
+precise
+precisely
+preciseness
+precisian
+precisianism
+precision
+precisionist
+precisionize
+precisionizes
+precisions
+precivilization
+precivilization's
+precivilizations
+preclinical
+preclude
+precluded
+precludes
+precluding
+preclusion
+preclusive
+preclusively
+precoat
+precoating
+precocial
+precocious
+precociously
+precociousness
+precocity
+precode
+precoded
+precognition
+precognitive
+precollege
+precolonial
+precolor
+precolor's
+precolorable
+precolorable's
+precolorables
+precoloring
+precolorings
+precolors
+precombustion
+precompact
+precompile
+precompiled
+precompiles
+precompiling
+precompose
+precomputation
+precomputed
+preconceive
+preconceived
+preconception
+preconception's
+preconceptions
+preconceptual
+preconcert
+preconcerted
+preconcertedly
+preconcertedness
+precondition
+preconditioned
+preconditions
+preconization
+preconization's
+preconizations
+preconize
+preconizer
+preconizers
+preconizes
+preconnected
+preconnection
+preconscious
+preconsolidate
+preconsolidated
+preconsolidates
+preconsolidating
+preconsolidation
+preconsonantal
+precook
+precooked
+precritical
+precriticize
+precriticizes
+precursor
+precursor's
+precursors
+precursory
+precut
+predaceous
+predaceousness
+predacious
+predacity
+predate
+predated
+predates
+predating
+predation
+predator
+predator's
+predatorily
+predators
+predatory
+predawn
+predecease
+predecessor
+predecessor's
+predecessors
+predecline
+predefense
+predefense's
+predefenses
+predefine
+predefined
+predefines
+predefining
+predefinition
+predefinition's
+predefinitions
+predella
+predesignate
+predesignation
+predestinarian
+predestinarianism
+predestinate
+predestination
+predestinator
+predestine
+predestined
+predeterminate
+predetermination
+predetermine
+predetermined
+predeterminer
+predetermines
+predetermining
+predial
+predicable
+predicament
+predicant
+predicatable
+predicate
+predicated
+predicates
+predicating
+predication
+predications
+predicative
+predicator
+predicatory
+predict
+predictability
+predictable
+predictably
+predicted
+predicting
+prediction
+prediction's
+predictions
+predictive
+predictively
+predictor
+predictors
+predicts
+predigest
+predigested
+predigestion
+predikant
+predilect
+predilection
+predilections
+predispose
+predisposed
+predisposes
+predisposition
+predispositions
+prednisone
+predoctoral
+predominance
+predominancy
+predominant
+predominantly
+predominate
+predominated
+predominately
+predominates
+predominating
+predomination
+predrilled
+preemergence
+preemergent
+preemie
+preeminence
+preeminent
+preeminently
+preemphasization
+preemphasization's
+preemphasize
+preemphasized
+preemphasizer
+preemphasizers
+preemphasizes
+preemphasizing
+preemployment
+preempt
+preempted
+preempting
+preemption
+preemptive
+preemptively
+preemptor
+preempts
+preen
+preener
+preening
+preexchange
+preexchanged
+preexist
+preexistence
+preexistent
+preexisting
+prefab
+prefabricate
+prefabricated
+prefabrication
+preface
+prefaced
+prefacer
+prefaces
+prefacing
+prefatorial
+prefatorially
+prefatorily
+prefatory
+prefavor
+prefavor's
+prefavorable
+prefavorable's
+prefavorables
+prefavorablies
+prefavorably
+prefavorite
+prefavorite's
+prefavorites
+prefavors
+prefect
+prefects
+prefectural
+prefecture
+prefectures
+prefer
+preferability
+preferable
+preferableness
+preferably
+preference
+preference's
+preferences
+preferential
+preferentially
+preferment
+preferred
+preferrer
+preferring
+prefers
+prefertilization
+prefertilization's
+prefertilizations
+prefertilize
+prefertilizes
+prefiguration
+prefigurative
+prefiguratively
+prefigurativeness
+prefigure
+prefigured
+prefigurement
+prefigures
+prefiguring
+prefill
+prefilled
+prefilling
+prefills
+prefix
+prefixal
+prefixally
+prefixed
+prefixes
+prefixing
+preflavor
+preflavor's
+preflavoring
+preflavorings
+preflavors
+preflight
+preflighted
+preflighting
+preflights
+prefocus
+prefocused
+prefocuses
+prefocusing
+preform
+preformation
+preformed
+preforms
+prefrontal
+pregalvanize
+pregalvanizes
+preglacial
+pregnability
+pregnable
+pregnancies
+pregnancy
+pregnant
+pregnantly
+pregnenolone
+preheat
+preheated
+preheater
+prehensile
+prehensility
+prehension
+prehistorian
+prehistoric
+prehistorical
+prehistorically
+prehistory
+prehominid
+prehumor
+prehumor's
+prehumors
+preignition
+preincubate
+preincubated
+preincubates
+preincubating
+preinduction
+preindustrial
+preinitialize
+preinitialized
+preinitializes
+preinitializing
+preinterview
+preisolated
+prejudge
+prejudged
+prejudger
+prejudgment
+prejudgment's
+prejudgments
+prejudice
+prejudiced
+prejudices
+prejudicial
+prejudicially
+prejudicialness
+prejudicing
+prejudicious
+prejudiciously
+prelabor
+prelabor's
+prelabors
+prelacy
+prelate
+prelatism
+prelatize
+prelatizes
+prelature
+prelect
+prelection
+prelexical
+prelibation
+prelicense
+prelicensed
+prelicenser
+prelicenses
+prelicensing
+preliminaries
+preliminarily
+preliminary
+prelims
+preliterate
+prelocalization
+prelocalization's
+prelocalizations
+prelude
+prelude's
+preluded
+preluder
+preludes
+preluding
+preludize
+preludizes
+prelusion
+prelusive
+prelusively
+prelusory
+premalignant
+preman
+premarital
+premaritally
+premarket
+premature
+prematurely
+prematureness
+prematurity
+premaxilla
+premed
+premedial
+premedian
+premedical
+premedication
+premedieval
+premedieval's
+premedievalism
+premedievalism's
+premedievalisms
+premedievals
+premeditate
+premeditated
+premeditatedly
+premeditation
+premeditative
+premeditator
+premeiotic
+premenstrual
+premenstrually
+premership
+premie
+premier
+premier's
+premiere
+premiered
+premieres
+premiering
+premiers
+premiership
+premillenarian
+premillenarianism
+premillennial
+premillennialism
+premillennialist
+premillennially
+premise
+premise's
+premised
+premises
+premising
+premiss
+premium
+premium's
+premiums
+premix
+premixed
+premolar
+premonish
+premonition
+premonitions
+premonitorily
+premonitory
+premonopolize
+premonopolizes
+premorse
+premultiplied
+premultiply
+premultiplying
+premultiplys
+premune
+premunition
+prename
+prenatal
+prenatally
+prenomen
+prenominal
+prenominate
+prenomination
+prenotion
+Prentice
+Prenticed
+Prenticing
+preoccupancy
+preoccupation
+preoccupations
+preoccupied
+preoccupies
+preoccupy
+preoffense
+preoffense's
+preoffenses
+preopened
+preoperative
+preoperatively
+preorbital
+preordain
+preordained
+preordaining
+preordainment
+preordains
+preordination
+preorganization
+preorganization's
+preorganizations
+preorganize
+preorganizes
+preoviposition
+preovulatory
+preoxidation
+preoxidize
+preoxidized
+preoxidizes
+preoxidizing
+prep
+prepackage
+prepackaged
+preparation
+preparation's
+preparations
+preparative
+preparative's
+preparatively
+preparatives
+preparator
+preparatorily
+preparatory
+prepare
+prepared
+preparedly
+preparedness
+preparer
+prepares
+preparing
+prepausal
+prepay
+prepayment
+prepend
+prepended
+prepender
+prependers
+prepending
+prepends
+prepense
+prepensely
+preplan
+preponderance
+preponderances
+preponderancy
+preponderant
+preponderantly
+preponderate
+preponderately
+preponderating
+preponderation
+preposition
+preposition's
+prepositional
+prepositionally
+prepositions
+prepositive
+prepositively
+prepositor
+prepossess
+prepossessing
+prepossessingly
+prepossessingness
+prepossession
+preposterous
+preposterously
+preposterousness
+prepotency
+prepotent
+prepotently
+preppie
+prepping
+preprandial
+preprepared
+preprint
+preprinted
+preprinting
+preprints
+preprocess
+preprocessed
+preprocesses
+preprocessing
+preprocessor
+preprocessors
+preproduction
+preprofessional
+preprogram
+preprogrammed
+prepuberal
+prepuberally
+prepubertal
+prepubertally
+prepuberty
+prepubescence
+prepubescent
+prepublication
+prepuce
+prepunch
+prepupal
+preputial
+preradiation
+prerealization
+prerealization's
+prerealizations
+prerealize
+prerealizes
+prerecognize
+prerecognizes
+prerecord
+prerelease
+prerequisite
+prerequisite's
+prerequisites
+prerogative
+prerogative's
+prerogatived
+prerogatives
+presa
+presage
+presaged
+presageful
+presager
+presages
+presaging
+presanctified
+presbyope
+presbyopia
+presbyopic
+presbyter
+presbyterate
+presbyterial
+presbyterially
+Presbyterian
+Presbyterianism
+Presbyterianize
+Presbyterianizes
+presbytery
+prescan
+preschool
+preschooler
+prescience
+prescience's
+prescient
+prescientific
+presciently
+prescind
+prescore
+Prescott
+prescribe
+prescribed
+prescriber
+prescribes
+prescribing
+prescript
+prescriptible
+prescription
+prescription's
+prescriptions
+prescriptive
+prescriptively
+prescriptivism
+prese
+preselect
+preselected
+preselecting
+preselection
+preselects
+presell
+presence
+presence's
+presences
+present
+presentability
+presentable
+presentableness
+presentably
+presentation
+presentation's
+presentational
+presentationism
+presentations
+presentative
+presented
+presentee
+presenter
+presenters
+presentient
+presentiment
+presentimental
+presenting
+presently
+presentment
+presentments
+presentness
+presents
+preservable
+preservation
+preservationist
+preservations
+preservative
+preservative's
+preservatives
+preserve
+preserved
+preserver
+preservers
+preserves
+preserving
+preset
+presets
+presettable
+presetting
+preshrunk
+preside
+presided
+presidency
+president
+president's
+presidential
+presidentially
+presidents
+presidentship
+presider
+presides
+presidial
+presidiary
+presiding
+presidio
+presidium
+presignify
+Presley
+presley
+presoak
+presoaks
+prespecialize
+prespecializes
+presplendor
+presplendor's
+presplendors
+press
+pressboard
+Pressburg
+pressed
+presser
+presses
+pressing
+pressingly
+pressings
+pression
+pressman
+pressmark
+pressmen
+pressor
+pressroom
+pressrun
+pressure
+pressured
+pressures
+pressuring
+pressurization
+pressurize
+pressurized
+pressurizer
+pressurizers
+pressurizes
+pressurizing
+presswork
+prest
+prestandardization
+prestandardization's
+prestandardizations
+prestandardize
+prestandardizes
+prestel
+prester
+presternum
+prestidigitate
+prestidigitation
+prestidigitator
+prestige
+prestigeful
+prestigious
+prestigiously
+prestigiousness
+prestissimo
+presto
+Preston
+Preston's
+prestonpans
+prestos
+prestress
+prestressed
+prestwich
+presumable
+presumably
+presume
+presumed
+presumer
+presumes
+presuming
+presumingly
+presumption
+presumption's
+presumptions
+presumptive
+presumptively
+presumptuous
+presumptuously
+presumptuousness
+presuppose
+presupposed
+presupposes
+presupposing
+presupposition
+presuppositions
+presympathize
+presympathizes
+presynaptic
+presynaptically
+pretax
+preteen
+pretend
+pretended
+pretendedly
+pretender
+pretenders
+pretending
+pretends
+pretense
+pretenses
+pretension
+pretensionless
+pretensions
+pretensive
+pretentious
+pretentiously
+pretentiousness
+preterhuman
+preterit
+preterite
+preterition
+preteritive
+preterminal
+pretermission
+pretermit
+preternatural
+preternaturally
+preternaturalness
+pretest
+pretested
+pretesting
+pretests
+pretext
+pretext's
+pretexts
+pretonic
+pretor
+Pretoria
+Pretorian
+pretorius
+Pretre
+pretreat
+pretreatment
+pretrial
+prettied
+prettier
+pretties
+prettiest
+prettification
+prettify
+prettily
+prettiness
+pretty
+prettying
+prettyish
+pretubercular
+pretuberculous
+pretzel
+pretzels
+Preussen
+preutilizable
+preutilizable's
+preutilizables
+preutilization
+preutilization's
+preutilizations
+preutilize
+preutilizes
+prevail
+prevailed
+prevailing
+prevailingly
+prevails
+prevalence
+prevalent
+prevalently
+prevaricate
+prevaricated
+prevaricates
+prevaricating
+prevarication
+prevaricator
+prevenient
+preveniently
+prevent
+preventability
+preventable
+preventably
+preventative
+prevented
+preventer
+preventible
+preventing
+prevention
+preventions
+preventive
+preventively
+preventiveness
+preventives
+prevents
+preverbal
+preview
+previewed
+previewer
+previewers
+previewing
+previews
+Previn
+previous
+previously
+previousness
+previse
+prevision
+previsional
+previsionary
+previsioned
+previsioning
+previsions
+prevocalic
+prevocational
+prevue
+prewar
+prexy
+prey
+Prey
+preyed
+preyer
+preying
+preys
+Priam
+priapic
+priapism
+Priapus
+pribilof
+price
+Price
+priced
+priceless
+pricer
+pricers
+prices
+pricey
+pricier
+pricing
+prick
+pricked
+pricker
+pricket
+prickier
+pricking
+prickle
+prickled
+pricklier
+prickliness
+prickling
+prickly
+pricks
+pricky
+pricy
+pride
+prided
+prideful
+pridefully
+pridefulness
+prides
+priding
+pried
+prier
+pries
+priest
+priestcraft
+priestess
+priestesses
+priesthood
+Priestley
+priestliness
+priestly
+priests
+prieur
+prig
+priggery
+priggish
+priggishly
+priggishness
+priggism
+prill
+prim
+prima
+primacy
+primaeval
+primal
+primality
+primaquine
+primaries
+primarily
+primary
+primary's
+primate
+primates
+primateship
+primatial
+primatives
+primatological
+primatologist
+primatology
+prime
+Prime's
+primed
+primely
+primeness
+primer
+primero
+primers
+primes
+primeval
+primevally
+primigravida
+primine
+priming
+primipara
+primiparity
+primiparous
+primitive
+primitively
+primitiveness
+primitives
+primitivism
+primitivist
+primitivistic
+primitivity
+primly
+primmer
+primmest
+primming
+primness
+primo
+primogenitor
+primogeniture
+primordial
+primordially
+primordium
+primos
+primp
+primping
+primrdium
+primrose
+primula
+primulaceous
+primus
+prince
+princedom
+princekin
+princelet
+princelier
+princeliness
+princeling
+princely
+princes
+princeship
+princess
+princess's
+princesse
+princesses
+Princeton
+principal
+principalities
+principality
+principality's
+principally
+principals
+principalship
+Principe
+Principia
+principial
+principium
+principle
+principled
+principles
+princox
+prink
+prinker
+print
+printability
+printable
+printably
+printed
+printemps
+printer
+printers
+printery
+printing
+printless
+printmake
+printmaker
+printmakers
+printmaking
+printout
+printouts
+prints
+prior
+priorate
+prioress
+prioresses
+priori
+priorities
+prioritization
+prioritize
+prioritized
+prioritizer
+prioritizers
+prioritizes
+prioritizing
+prioritizings
+priority
+priority's
+priorization
+priorizations
+priorize
+priorized
+priorizes
+priorizing
+priorly
+priors
+priorship
+priory
+pripet
+prisage
+Priscian
+Priscilla
+prise
+prisere
+prism
+prism's
+prismatic
+prismatically
+prismatoid
+prismatoidal
+prismoid
+prismoidal
+prisms
+prison
+prisoner
+prisoner's
+prisoners
+prisons
+prissier
+prissily
+prissiness
+prissy
+pristane
+pristine
+pristinely
+Pritchard
+Pritchard's
+prithee
+privacies
+privacy
+privatdocent
+privatdozent
+private
+privateer
+privateer's
+privateers
+privately
+privateness
+privates
+privation
+privations
+privatism
+privative
+privatively
+privatization
+privatize
+privatized
+privatizing
+privet
+privies
+privilege
+privileged
+privileges
+privily
+privity
+privy
+privy's
+prix
+prize
+prized
+prizefight
+prizefighter
+prizefighting
+prizer
+prizers
+prizes
+prizewinner
+prizing
+pro
+pro's
+proa
+proach
+proaching
+proactive
+probabilism
+probabilist
+probabilistic
+probabilistically
+probabilities
+probability
+probable
+probably
+proband
+probang
+probate
+probated
+probates
+probating
+probation
+probational
+probationally
+probationary
+probationer
+probationers
+probative
+probatory
+probe
+probed
+probenecid
+prober
+probes
+probing
+probings
+probit
+probity
+problem
+problem's
+problematic
+problematical
+problematically
+problemize
+problemizes
+problems
+probosces
+proboscidean
+proboscidian
+proboscis
+proc
+procaine
+procambial
+procambium
+procarp
+procaryote
+procaryotic
+procathedral
+procedural
+procedurally
+procedure
+procedure's
+procedures
+proceed
+proceeded
+proceeder
+proceeding
+proceedings
+proceeds
+proceleusmatic
+procephalic
+procercoid
+process
+process's
+processability
+processable
+processed
+processes
+processibility
+processible
+processing
+procession
+processional
+processionally
+processionize
+processionizes
+processor
+processor's
+processors
+prochronism
+proclaim
+proclaimed
+proclaimer
+proclaimers
+proclaiming
+proclaims
+proclamation
+proclamation's
+proclamations
+proclimax
+proclitic
+proclivities
+proclivity
+proclivity's
+proclus
+Procne
+proconsul
+proconsular
+proconsulate
+proconsulship
+procopius
+procrastinate
+procrastinated
+procrastinates
+procrastinating
+procrastination
+procrastinator
+procrastinator's
+procrastinators
+procreant
+procreate
+procreation
+procreative
+procreativity
+procreator
+procrustean
+Procrusteanize
+Procrusteanizes
+Procrustes
+procryptic
+Procter
+Procter's
+proctodaeum
+proctologic
+proctological
+proctologist
+proctology
+proctor
+proctor's
+proctored
+proctorial
+proctoring
+proctorization
+proctorization's
+proctorizations
+proctorize
+proctorizes
+proctors
+proctorship
+proctoscope
+procumbent
+procurable
+procurance
+procuration
+procurator
+procuratorial
+procuratory
+procure
+procured
+procurement
+procurement's
+procurements
+procurer
+procurers
+procures
+procuress
+procuring
+Procyon
+prod
+prodded
+prodder
+prodding
+prodigal
+prodigality
+prodigalize
+prodigalizes
+prodigally
+prodigies
+prodigious
+prodigiously
+prodigiousness
+prodigy
+prodromal
+prodromata
+prodrome
+prodromes
+prodromic
+producable
+produce
+produced
+producer
+producers
+produces
+producible
+producing
+product
+product's
+production
+production's
+productional
+productions
+productive
+productively
+productiveness
+productivities
+productivity
+productize
+productized
+productizer
+productizers
+productizes
+productizing
+products
+proem
+proemial
+proenzyme
+proestrus
+prof
+profanation
+profanatory
+profane
+profaned
+profanely
+profaneness
+profaner
+profaning
+profanity
+profanize
+profanizes
+profess
+professed
+professedly
+professes
+professeur
+professing
+profession
+profession's
+professional
+professionalism
+professionalisms
+professionalization
+professionalization's
+professionalizations
+professionalize
+professionalized
+professionalizes
+professionalizing
+professionally
+professionals
+professionize
+professionizes
+professions
+professor
+professor's
+professorate
+professorial
+professorially
+professoriat
+professoriate
+professors
+professorship
+proffer
+proffered
+proffering
+proffers
+proficiencies
+proficiency
+proficient
+proficiently
+profile
+profiled
+profiler
+profiler's
+profilers
+profiles
+profili
+profiling
+profit
+profit's
+profitability
+profitable
+profitableness
+profitably
+profited
+profiteer
+profiteer's
+profiteers
+profiter
+profiterole
+profiters
+profiting
+profitless
+profits
+profitted
+profitting
+profligacy
+profligate
+profligately
+profligates
+profluent
+profound
+profoundest
+profoundity
+profoundly
+profoundness
+profundity
+profuse
+profusely
+profuseness
+profusion
+prog
+progamete
+progenitive
+progenitor
+progeny
+progestational
+progesterone
+progestin
+progestogen
+progging
+proglottid
+proglottidean
+proglottis
+prognathic
+prognathism
+prognathous
+prognoses
+prognosis
+prognostic
+prognosticate
+prognostication
+prognosticative
+prognosticator
+prograde
+program
+program's
+programist
+programist's
+programistic
+programistics
+programists
+programmability
+programmable
+programmatic
+programmatically
+programmed
+programmer
+programmer's
+programmers
+programming
+programs
+progress
+progressed
+progresses
+progressing
+progression
+progression's
+progressional
+progressionist
+progressions
+progressist
+progressive
+progressively
+progressiveness
+progressivism
+progressivist
+progressivistic
+prohibit
+prohibited
+prohibiter
+prohibiting
+prohibition
+prohibition's
+prohibitionist
+prohibitions
+prohibitive
+prohibitively
+prohibitiveness
+prohibitory
+prohibits
+project
+project's
+projectable
+projected
+projectile
+projectiles
+projecting
+projection
+projection's
+projectional
+projectionist
+projectionists
+projections
+projective
+projectively
+projector
+projector's
+projectors
+projects
+projet
+projets
+prokaryote
+prokaryotic
+Prokofieff
+Prokofiev
+Prokofiev's
+Prokopyevsk
+prolactin
+prolamin
+prolamine
+prolan
+prolapse
+prolapsed
+prolapsing
+prolate
+prole
+proleg
+prolegomena
+prolegomenon
+prolepsis
+proleptic
+proletarian
+proletarianization
+proletarianize
+proletarianized
+proletarianizes
+proletarianizing
+proletariat
+proliferate
+proliferated
+proliferates
+proliferating
+proliferation
+proliferative
+proliferous
+proliferously
+prolific
+prolificacy
+prolifically
+prolificity
+prolificness
+proline
+prolix
+prolixity
+prolixly
+prolocutor
+prolog
+prolog's
+prologize
+prologs
+prologue
+prologue's
+prologues
+prologuize
+prologuizer
+prologuizers
+prologuizes
+prolong
+prolongate
+prolongated
+prolongates
+prolongating
+prolongation
+prolonged
+prolonger
+prolonging
+prolongs
+prolotherapy
+prolusion
+prolusionize
+prolusionizes
+prolusions
+prolusory
+prom
+promazine
+promenade
+promenade's
+promenader
+promenades
+promenading
+promethazine
+Promethean
+Prometheus
+promethium
+prominence
+prominent
+prominently
+promiscuity
+promiscuity's
+promiscuous
+promiscuously
+promiscuousness
+promise
+promised
+promisee
+promiser
+promises
+promising
+promisingly
+promisor
+promissory
+promontories
+promontory
+promotability
+promotable
+promote
+promoted
+promoter
+promoters
+promotes
+promoting
+promotion
+promotional
+promotions
+promotive
+promotiveness
+prompt
+promptbook
+promptbooks
+prompted
+prompter
+prompters
+promptest
+prompting
+promptings
+promptitude
+promptly
+promptness
+prompts
+promulgate
+promulgated
+promulgates
+promulgating
+promulgation
+promulgations
+promulgator
+promulgators
+promycelium
+pronatalism
+pronatalist
+pronate
+pronated
+pronating
+pronation
+pronator
+prone
+pronely
+proneness
+pronephric
+pronephros
+prong
+pronged
+pronghorn
+pronghorns
+prongs
+pronominal
+pronominalization
+pronominalize
+pronominally
+pronoun
+pronoun's
+pronounce
+pronounceable
+pronounced
+pronouncedly
+pronouncement
+pronouncement's
+pronouncements
+pronouncer
+pronounces
+pronouncing
+pronouns
+pronto
+pronuclear
+pronucleus
+pronunciamento
+pronunciation
+pronunciation's
+pronunciational
+pronunciations
+proof
+proof's
+proofed
+proofer
+proofing
+prooflike
+proofread
+proofreader
+proofreading
+proofreads
+proofroom
+proofs
+prop
+propaedeutic
+propagable
+propaganda
+propagandism
+propagandist
+propagandistic
+propagandistically
+propagandists
+propagandize
+propagandized
+propagandizes
+propagandizing
+propagate
+propagated
+propagates
+propagating
+propagation
+propagational
+propagations
+propagative
+propagator
+propagule
+propane
+propanoic
+proparoxytone
+propel
+propellant
+propellants
+propelled
+propellent
+propeller
+propeller's
+propellers
+propelling
+propellor
+propels
+propenamide
+propend
+propene
+propense
+propensities
+propensity
+proper
+properdin
+properly
+properness
+propertied
+properties
+propertius
+property
+propertyless
+prophage
+prophase
+prophasic
+prophecies
+prophecy
+prophecy's
+prophesied
+prophesier
+prophesies
+prophesy
+prophesying
+prophet
+prophet's
+prophetess
+prophetic
+prophetical
+prophetically
+prophetize
+prophetizes
+prophets
+prophylactic
+prophylactically
+prophylaxis
+propine
+propined
+propining
+propinquity
+propionate
+propionibacteria
+propionic
+propitiable
+propitiate
+propitiation
+propitiator
+propitiatory
+propitious
+propitiously
+propitiousness
+propjet
+proplastid
+propman
+propolis
+propone
+proponed
+proponent
+proponent's
+proponents
+proponing
+propontis
+proportion
+proportionable
+proportionably
+proportional
+proportionality
+proportionally
+proportionate
+proportionately
+proportioned
+proportioner
+proportioning
+proportionment
+proportions
+propos
+proposal
+proposal's
+proposals
+propose
+proposed
+proposer
+proposers
+proposes
+proposing
+proposition
+propositional
+propositionally
+propositioned
+propositioning
+propositionize
+propositionizes
+propositions
+propositus
+propound
+propounded
+propounder
+propounding
+propounds
+propped
+propping
+propranolol
+propretor
+proprietary
+proprietor
+proprietor's
+proprietors
+proprietorship
+proprietorships
+proprietress
+propriety
+proprioception
+proprioceptive
+proprioceptor
+props
+proptosis
+propulsion
+propulsion's
+propulsions
+propulsive
+propyl
+propylaeum
+propylene
+propylite
+prorate
+prorated
+prorating
+proration
+prorogate
+prorogation
+prorogue
+prorogued
+proroguing
+pros
+prosaic
+prosaically
+prosaism
+prosaist
+prosateur
+proscenium
+prosceniums
+prosciutto
+proscribe
+proscribed
+proscriber
+proscribes
+proscribing
+proscription
+proscriptive
+proscriptively
+prose
+prosector
+prosectorial
+prosecutable
+prosecute
+prosecuted
+prosecutes
+prosecuting
+prosecution
+prosecutions
+prosecutor
+prosecutors
+proselyte
+proselytism
+proselytization
+proselytization's
+proselytizations
+proselytize
+proselytized
+proselytizer
+proselytizers
+proselytizes
+proselytizing
+proseminar
+prosencephalic
+prosencephalon
+prosenchyma
+prosenchymas
+prosenchymata
+prosenchymatous
+proser
+proserpina
+Proserpine
+Proserpine's
+prosier
+prosily
+prosiness
+prosing
+prosit
+proso
+prosobranch
+prosodic
+prosodical
+prosodically
+prosodics
+prosodies
+prosodist
+prosody
+prosoma
+prosomal
+prosopographical
+prosopography
+prosopopoeia
+prospect
+prospected
+prospecting
+prospection
+prospection's
+prospections
+prospective
+prospectively
+prospectiveness
+prospectives
+prospector
+prospector's
+prospectors
+prospects
+prospectus
+prosper
+prospered
+prospering
+prosperity
+prosperous
+prosperously
+prosperousness
+prospers
+prossed
+prosser
+prost
+prostaglandin
+prostate
+prostatectomy
+prostatic
+prostatism
+prostatitis
+prostheses
+prosthesis
+prosthetic
+prosthetically
+prosthetics
+prosthodontics
+prosthodontist
+prostitute
+prostitutes
+prostitution
+prostitutor
+prostomial
+prostomium
+prostrate
+prostrated
+prostration
+prostyle
+prosy
+protactinium
+protagonist
+protagonists
+protagoras
+protamine
+protandrous
+protanopia
+protasis
+protatic
+protea
+protean
+protease
+proteases
+protect
+protectant
+protected
+protectedly
+protecting
+protection
+protection's
+protectionism
+protectionist
+protectionize
+protectionizes
+protections
+protective
+protectively
+protectiveness
+protector
+protector's
+protectoral
+protectorate
+protectors
+protectorship
+protectory
+protectress
+protects
+protege
+protege's
+proteges
+proteid
+proteide
+protein
+protein's
+proteinaceous
+proteinase
+proteinate
+proteins
+proteinuria
+proteinuric
+protend
+protensive
+protensively
+proteoclastic
+proteolysis
+proteolytic
+proteose
+proteranthous
+proteranthy
+Proterozoic
+proters
+protest
+protest's
+protestant
+protestantism
+Protestantism
+Protestantize
+Protestantizes
+protestants
+protestation
+protestations
+protested
+protester
+protester's
+protesters
+protesting
+protestingly
+protestor
+protests
+proteus
+prothalamion
+prothalamium
+prothallial
+prothallium
+prothallus
+prothesis
+prothetelic
+prothetely
+prothetic
+prothonotarial
+prothonotary
+prothoracic
+prothorax
+prothrombin
+protist
+Protista
+protistan
+protitch
+protium
+proto
+protoactinium
+protochordate
+protocol
+protocol's
+protocoled
+protocoling
+protocolization
+protocolization's
+protocolizations
+protocolize
+protocolizes
+protocols
+protoderm
+protodermal
+protogalaxy
+protogeometric
+protogynous
+protohistorian
+protohistoric
+protohistory
+protohuman
+protolanguage
+protolithic
+protomartyr
+protomorphic
+proton
+proton's
+protonate
+protonated
+protonation
+protonema
+protonemal
+protonematal
+protonic
+protonotary
+protons
+protonymph
+protonymphal
+protopathic
+protophloem
+Protophyta
+protophyta
+protoplanet
+protoplasm
+protoplasmic
+protoplast
+protoplastic
+protoporphyrin
+protosemitic
+protostar
+protostele
+protostelic
+prototherian
+prototroph
+prototrophic
+prototrophy
+prototypal
+prototype
+prototype's
+prototyped
+prototypes
+prototypic
+prototypical
+prototypically
+prototyping
+protoxide
+protoxylem
+protozoa
+protozoal
+protozoan
+protozoic
+protozoological
+protozoologist
+protozoology
+protozoon
+protract
+protracted
+protractile
+protraction
+protractive
+protractor
+protreptic
+protrude
+protruded
+protrudes
+protruding
+protrusible
+protrusile
+protrusion
+protrusion's
+protrusions
+protrusive
+protrusively
+protrusiveness
+protuberance
+protuberant
+protuberate
+protuberatly
+protude
+protudes
+protuding
+protyle
+proud
+prouder
+proudest
+proudful
+proudhearted
+proudhon
+proudly
+Proust
+proustite
+prout
+provability
+provable
+provableness
+provably
+provascular
+prove
+proved
+provement
+proven
+provenance
+Provence
+provender
+provenience
+provenly
+proventriculus
+prover
+proverb
+proverb's
+proverbial
+proverbialize
+proverbializes
+proverbially
+proverbize
+proverbizes
+proverbs
+provers
+proves
+provide
+provided
+providence
+provident
+providential
+providentially
+providently
+provider
+providers
+provides
+providing
+province
+province's
+provinces
+Provincetown
+provincial
+provincialism
+provincialist
+provinciality
+provincialization
+provincialization's
+provincializations
+provincialize
+provincializes
+provincially
+proving
+proviral
+provirus
+provision
+provisional
+provisionally
+provisionary
+provisioned
+provisioner
+provisioning
+provisions
+proviso
+provisons
+provisory
+provitamin
+provo
+provocate
+provocateur
+provocateurs
+provocation
+provocations
+provocative
+provocatively
+provocativeness
+provoke
+provoked
+provokes
+provoking
+provokingly
+provolone
+provost
+prow
+prow's
+prowess
+prowl
+prowled
+prowler
+prowlers
+prowling
+prowls
+prows
+proxemic
+proxemics
+proxies
+proxima
+proximal
+proximally
+proximate
+proximately
+proximateness
+proximity
+proximo
+proxmire
+Proxmire
+proxy
+prude
+prude's
+prudence
+prudent
+prudential
+prudentially
+prudentius
+prudently
+prudery
+prudes
+prudish
+prudishly
+prudishness
+pruinose
+prune
+pruned
+Prunella
+prunelle
+pruner
+pruners
+prunes
+pruning
+prurience
+pruriency
+prurient
+pruriently
+pruriginous
+prurigo
+pruritic
+pruritus
+Prussia
+Prussian
+Prussianism
+Prussianization
+Prussianization's
+Prussianizations
+Prussianize
+Prussianized
+Prussianizer
+Prussianizers
+Prussianizes
+Prussianizing
+prussiate
+prussic
+prut
+prutot
+pry
+pryer
+prying
+pryingly
+prynne
+prytaneum
+psalm
+psalm's
+psalmbook
+psalmist
+psalmody
+psalms
+psalter
+psalterium
+psaltery
+psaltry
+psammite
+psephite
+psephological
+psephologist
+psephology
+pseud
+pseudaxis
+pseudepigraph
+pseudepigrapha
+pseudepigraphon
+pseudepigraphy
+pseudo
+pseudoallele
+pseudoallelic
+pseudoallelism
+pseudoanemia
+pseudoanemia's
+pseudoanemias
+pseudoanemic
+pseudoanemics
+pseudocarp
+pseudoclassic
+pseudoclassicism
+pseudocode
+pseudoedema
+pseudoedema's
+pseudoedemas
+pseudoenergy
+pseudographize
+pseudographizes
+pseudomedieval
+pseudomedieval's
+pseudomedievals
+pseudomorph
+pseudomutuality
+pseudonym
+pseudonym's
+pseudonymity
+pseudonymous
+pseudonymously
+pseudonymousness
+pseudonyms
+pseudopodium
+pseudopotential
+pseudorandom
+pseudoscience
+pseudoscientific
+pseudoscientist
+pseudoscorpion
+pseudosophisticated
+pseudosophistication
+pseudotuberculosis
+pshaw
+psi
+psilocybin
+psilomelane
+psittacine
+psittacosis
+Pskov
+psoas
+Psoralea
+psoriasis
+psst
+PST
+psych
+psychasthenia
+psyche
+psyche's
+psychedelia
+psychedelic
+psychedelically
+psyches
+psychiatric
+psychiatrically
+psychiatrist
+psychiatrist's
+psychiatrists
+psychiatry
+psychic
+psychic's
+psychical
+psychically
+psychics
+psycho
+psychoacoustic
+psychoacoustics
+psychoactive
+psychoanalysis
+psychoanalyst
+psychoanalytic
+psychoanalytical
+psychoanalytically
+psychoanalyze
+psychoanalyzer
+psychoanalyzer's
+psychoanalyzers
+psychoanalyzes
+psychobiographical
+psychobiography
+psychobiologic
+psychobiological
+psychobiologist
+psychobiology
+psychochemical
+psychocultural
+psychodrama
+psychodramatic
+psychodynamic
+psychodynamically
+psychodynamics
+psychogenesis
+psychogenetic
+psychogenic
+psychogenically
+psychognosis
+psychognosy
+psychograph
+psychohistory
+psychokinesis
+psychokinetic
+psycholinguist
+psycholinguistic
+psycholinguistics
+psychologic
+psychological
+psychologically
+psychologism
+psychologist
+psychologist's
+psychologists
+psychologization
+psychologize
+psychologized
+psychologizes
+psychologizing
+psychology
+psychometric
+psychometrically
+psychometrics
+psychometry
+psychomimetic
+psychomotor
+psychoneurosis
+psychoneurotic
+psychopath
+psychopathic
+psychopathically
+psychopathologic
+psychopathological
+psychopathologically
+psychopathologist
+psychopathology
+psychopathy
+psychopharmaceutical
+psychopharmacologic
+psychopharmacological
+psychopharmacologist
+psychopharmacology
+psychophysic
+psychophysical
+psychophysically
+psychophysicist
+psychophysics
+psychophysiologic
+psychophysiological
+psychophysiologically
+psychophysiologist
+psychophysiology
+psychopomp
+psychos
+psychoses
+psychosexual
+psychosexuality
+psychosexually
+psychosis
+psychosocial
+psychosocially
+psychosomatic
+psychosomatically
+psychosomatics
+psychosurgery
+psychosurgical
+psychotechnics
+psychotherapeutic
+psychotherapeutically
+psychotherapeutics
+psychotherapist
+psychotherapists
+psychotherapy
+psychotic
+psychotically
+psychotogen
+psychotogenic
+psychotomimetic
+psychotomimetically
+psychotropic
+psychrometer
+psychrometer's
+psychrometers
+psychrometric
+psychrometry
+psychrophilic
+psycoanalyze
+psyllium
+PTA
+ptah
+ptarmigan
+pteridology
+pteridophyte
+pteridosperm
+pterodactyl
+pterodactyl's
+pterodactyls
+pteropod
+pterosaur
+pterygoid
+pteryla
+ptisan
+ptochocracy
+ptolemaeus
+Ptolemaic
+Ptolemaist
+ptolemaists
+Ptolemaists
+Ptolemy
+ptomaine
+ptosis
+ptyalin
+ptyalism
+pub
+pub's
+puberal
+pubertal
+puberty
+puberulent
+pubes
+pubescence
+pubescent
+pubic
+pubis
+public
+publican
+publicans
+publication
+publication's
+publications
+publicist
+publicists
+publicity
+publicize
+publicized
+publicizes
+publicizing
+publick
+publicly
+publicness
+publics
+publique
+publish
+publishable
+published
+publisher
+publishers
+publishes
+publishing
+pubs
+PUC
+Puccini
+puccoon
+puce
+puck
+pucka
+pucker
+puckered
+puckering
+puckers
+puckery
+puckish
+puckishly
+puckishness
+pud
+pudding
+pudding's
+puddings
+puddingstone
+puddle
+puddled
+puddler
+puddles
+puddling
+puddly
+pudency
+pudendal
+pudendum
+pudgier
+pudginess
+pudgy
+pudsey
+puebla
+pueblo
+puebloization
+puebloization's
+puebloizations
+puebloize
+puebloizes
+pueblos
+puerile
+puerilely
+puerilism
+puerperal
+puerperium
+Puerto
+puff
+puffball
+puffballs
+puffbird
+puffbirds
+puffed
+puffer
+puffers
+puffery
+puffin
+puffiness
+puffing
+puffins
+puffs
+puffy
+pug
+pugaree
+puget
+puggaree
+pugging
+Pugh
+pugilism
+pugilist
+pugilistic
+puglia
+pugmark
+pugnacious
+pugnaciously
+pugnaciousness
+pugnacity
+pugwash
+puisne
+puissance
+puissant
+puissantly
+puke
+puked
+pukes
+puking
+pukka
+pul
+pula
+Pulaski
+pulchritude
+pulchritudinous
+pule
+puler
+puli
+pulicide
+pulik
+puling
+pulis
+Pulitzer
+pull
+pullback
+pulled
+puller
+pullet
+pulley
+pulley's
+pulleys
+pulling
+pullings
+Pullman
+Pullmanize
+Pullmanizes
+Pullmans
+pullorum
+pullout
+pullover
+pulls
+pullulate
+pullulation
+pulmonary
+pulmonate
+pulmonic
+pulmotor
+pulp
+pulpal
+pulpally
+pulper
+pulpiness
+pulping
+pulpit
+pulpit's
+pulpitize
+pulpitizes
+pulpits
+pulpwood
+pulpy
+pulque
+pulsant
+pulsar
+pulsar's
+pulsars
+pulsate
+pulsated
+pulsates
+pulsatile
+pulsating
+pulsation
+pulsations
+pulsator
+pulsatory
+pulse
+pulsed
+pulsejet
+pulser
+pulses
+pulsimeter
+pulsimeter's
+pulsimeters
+pulsing
+pulsometer
+pulsometer's
+pulsometers
+pulverable
+pulverizable
+pulverizable's
+pulverizables
+pulverization
+pulverization's
+pulverizations
+pulverize
+pulverized
+pulverizer
+pulverizers
+pulverizes
+pulverizing
+pulverulent
+pulvillus
+pulvinate
+pulvinus
+puma
+puma's
+pumice
+pumiced
+pumiceous
+pumicing
+pumicite
+pummel
+pummeled
+pummeler
+pummeling
+pummels
+pump
+pumped
+pumper
+pumpernickel
+pumping
+pumpkin
+pumpkin's
+pumpkins
+pumpkinseed
+pumpkinseeds
+pumps
+pun
+pun's
+puna
+punakha
+punce
+punch
+punchable
+punchball
+punchballs
+punchboard
+punchbowl
+punchbowls
+punched
+puncheon
+puncher
+puncher's
+punchers
+punches
+punchier
+punchinello
+punching
+punchings
+punchless
+punchy
+punctate
+punctation
+punctilio
+punctilious
+punctiliously
+punctiliousness
+punctual
+punctuality
+punctually
+punctualness
+punctuate
+punctuated
+punctuates
+punctuating
+punctuation
+punctuator
+puncture
+puncture's
+punctured
+punctures
+puncturing
+pundit
+punditry
+pundits
+pune
+pung
+pungency
+pungent
+pungently
+Punic
+punier
+punily
+puniness
+punish
+punishability
+punishable
+punished
+punisher
+punishes
+punishing
+punishment
+punishment's
+punishments
+punition
+punitive
+punitively
+punitiveness
+punjab
+Punjab
+Punjab's
+Punjabi
+punk
+punka
+punkah
+punkie
+punkier
+punkies
+punkin
+punkiness
+punks
+punky
+punnet
+punnets
+punnier
+punning
+punny
+puns
+punster
+punsters
+punt
+punta
+punted
+punter
+punters
+punties
+punting
+punts
+punty
+puny
+pup
+pup's
+pupa
+pupae
+pupal
+puparia
+puparial
+puparium
+pupas
+pupate
+pupated
+pupates
+pupating
+pupation
+pupfish
+pupil
+pupil's
+pupilage
+pupilar
+pupilize
+pupilizes
+pupillage
+pupillary
+pupils
+pupiparous
+puppet
+puppet's
+puppeteer
+puppeteers
+puppetize
+puppetizes
+puppetry
+puppets
+puppies
+pupping
+Puppis
+puppy
+puppy's
+puppyish
+pups
+purana
+Purbeck
+purblind
+purblindly
+purblindness
+Purcell
+purchasable
+purchase
+purchased
+purchaser
+purchasers
+purchases
+purchasing
+purdah
+purdew
+Purdue
+pure
+pureblood
+purebred
+puree
+puree's
+pureed
+pureeing
+purees
+purely
+pureness
+purer
+purest
+purfle
+purfled
+purfling
+purgation
+purgative
+purgatorial
+purgatory
+purge
+purged
+purger
+purges
+purging
+puri
+purification
+purifications
+purificator
+purificatory
+purified
+purifier
+purifiers
+purifies
+purifing
+purify
+purifying
+purim
+Purina
+purine
+purism
+purist
+puristic
+purists
+puritan
+puritanic
+puritanical
+puritanically
+puritanism
+Puritanize
+Puritanizer
+Puritanizers
+Puritanizes
+puritans
+purity
+purl
+purled
+purler
+purlers
+purlieu
+purlin
+purling
+purloin
+purloined
+purloiner
+purloining
+purloins
+puromycin
+purple
+purpled
+purpler
+purples
+purplest
+purpling
+purplish
+purply
+purport
+purported
+purportedly
+purporter
+purporters
+purporting
+purports
+purpose
+purposed
+purposeful
+purposefully
+purposefulness
+purposeless
+purposelessly
+purposelessness
+purposely
+purposes
+purposing
+purposive
+purposively
+purposiveness
+purpura
+purpure
+purpuric
+purpurin
+purr
+purred
+purring
+purringly
+purrs
+purse
+pursed
+purselike
+purser
+pursers
+purses
+pursewarden
+pursier
+pursiness
+pursing
+purslane
+pursuance
+pursuant
+pursue
+pursued
+pursuer
+pursuers
+pursues
+pursuing
+pursuit
+pursuit's
+pursuits
+pursuivant
+pursy
+purtenance
+purulence
+purulent
+purvey
+purveyance
+purveyed
+purveying
+purveyor
+purveyors
+purveys
+purview
+purvis
+pus
+Pusan
+Pusan's
+Pusey
+Pusey's
+Puseyism
+push
+pushball
+pushbutton
+pushbuttons
+pushcart
+pushchair
+pushchairs
+pushdown
+pushed
+pusher
+pushers
+pushes
+pushful
+pushfulness
+pushier
+pushily
+pushiness
+pushing
+pushkin
+pushout
+pushover
+pushover's
+pushovers
+pushpin
+pushpin's
+pushpins
+pushrod
+pushrods
+pushto
+pushup
+pushy
+pusillanimity
+pusillanimous
+pusillanimously
+puss
+pussier
+pussies
+pussy
+pussycat
+pussyfoot
+pussyfooter
+pussyfooting
+pussytoes
+pustulant
+pustular
+pustulate
+pustulated
+pustulation
+pustule
+pustules
+put
+putains
+putamen
+putas
+putative
+putatively
+putdown
+putdown's
+putdowns
+Putnam
+Putnam's
+putout
+putrefaction
+putrefactive
+putrefy
+putrescence
+putrescent
+putrescible
+putrescine
+putrid
+putridity
+putridly
+putridness
+puts
+putsch
+putschist
+putt
+puttana
+putted
+puttee
+puttees
+putter
+putterer
+puttering
+putters
+puttied
+putties
+putting
+putto
+putty
+puttying
+puttyroot
+putumayo
+puvis
+puy
+puzzle
+puzzled
+puzzleheaded
+puzzleheadedness
+puzzlement
+puzzler
+puzzlers
+puzzles
+puzzling
+puzzlings
+PVC
+PWT
+pya
+pyaemia
+pycnidium
+pycnogonid
+pycnometer
+pycnometer's
+pycnometers
+pydna
+pye
+pyelitis
+pyelography
+pyelonephritic
+pyelonephritis
+pyemia
+pyemic
+pygidial
+pygidium
+pygmaean
+Pygmalion
+pygmean
+pygmies
+pygmoid
+pygmy
+pygmy's
+pygmyish
+pygmyism
+Pyhrric
+pyknic
+pyknotic
+Pyle
+Pyle's
+pylon
+pylons
+pylorectomy
+pylori
+pyloric
+pylorus
+pylos
+pym
+pyocanea
+pyoderma
+pyodermic
+pyogenesis
+pyogenic
+pyoid
+Pyongyang
+Pyongyang's
+pyorrhea
+pyorrhea's
+pyorrheal
+pyorrheas
+pyosis
+Pyotr
+Pyotr's
+pyracanth
+pyracantha
+pyralid
+pyralidid
+pyramid
+pyramid's
+pyramidal
+pyramidally
+pyramidical
+pyramidize
+pyramidizes
+pyramids
+pyramus
+pyran
+pyranoid
+pyranometer
+pyranose
+pyranoside
+pyrargyrite
+pyrazole
+pyre
+pyrene
+pyrenees
+pyrenoid
+pyrethrin
+pyrethroid
+pyrethrum
+pyretic
+Pyrex
+pyrexia
+pyrexial
+pyrexic
+pyrheliometer
+pyrheliometer's
+pyrheliometers
+pyrheliometric
+pyric
+pyridine
+pyridinize
+pyridinizes
+pyridoxal
+pyridoxamine
+pyridoxin
+pyridoxine
+pyriform
+pyrimethamine
+pyrimidine
+pyrimidines
+pyrite
+pyrites
+pyritic
+pyritization
+pyritization's
+pyritizations
+pyritize
+pyritizes
+pyrocatechol
+pyrocellulose
+pyrochemical
+pyrochemically
+pyroclastic
+pyroconductivity
+pyroelectric
+pyroelectricity
+pyrogallate
+pyrogallol
+pyrogen
+pyrogenic
+pyrogenicity
+pyrogenous
+pyrognostics
+pyrographic
+pyrography
+pyrola
+pyroligneous
+pyrolusite
+pyrolysed
+pyrolysing
+pyrolysis
+pyrolytic
+pyrolytically
+pyrolyzable
+pyrolyzate
+pyrolyze
+pyrolyze's
+pyrolyzer
+pyrolyzes
+pyromagnetic
+pyromancy
+pyromania
+pyromaniac
+pyromaniac's
+pyromaniacal
+pyromaniacs
+pyrometallurgical
+pyrometallurgy
+pyrometer
+pyrometer's
+pyrometers
+pyrometric
+pyrometrically
+pyrometry
+pyromorphite
+pyrone
+pyronine
+pyroninophilic
+pyrope
+pyrophoric
+pyrophosphate
+pyrophosphatic
+pyrophosphoric
+pyrophotometer
+pyrophyllite
+pyrophyllte
+pyrosis
+pyrostat
+pyrosulphate
+pyrosulphuric
+pyrotechnic
+pyrotechnical
+pyrotechnically
+pyrotechnics
+pyrotechnist
+pyroxene
+pyroxenic
+pyroxenite
+pyroxenitic
+pyroxenoid
+pyroxylin
+pyrrha
+pyrrhic
+pyrrho
+pyrrhotite
+pyrrhuloxia
+Pyrrhus
+pyrrol
+pyrrole
+pyrrolic
+pyrrolidine
+pyrruvic
+pyruvate
+pyschiatrist
+Pythagoras
+Pythagorean
+Pythagoreanism
+Pythagoreanize
+Pythagoreanizes
+Pythagoreans
+Pythia
+Pythian
+pythias
+python
+pythoness
+pythonic
+pythonine
+pythonize
+pythonizes
+pythons
+pyuria
+pyx
+pyxides
+pyxidium
+pyxie
+pyxis
+q's
+QA
+qaboos
+qaddafi
+qaddish
+qadi
+qairwan
+Qatar
+Qatar's
+qattara
+QED
+qeshm
+qibla
+qintar
+qishm
+QM
+qoph
+qua
+quack
+quacked
+quackery
+quacking
+quackish
+quacks
+quad
+quadded
+quadding
+quadragenarian
+Quadragesima
+quadragesimal
+quadrangle
+quadrangles
+quadrangular
+quadrant
+quadrant's
+quadrantal
+quadrants
+quadraphonic
+quadraphonics
+quadraphony
+quadraplegic
+quadrapole
+quadrat
+quadrate
+quadrated
+quadrates
+quadratic
+quadratical
+quadratically
+quadratics
+quadrating
+quadrature
+quadrature's
+quadratures
+quadrella
+quadrennial
+quadrennially
+quadrennium
+quadric
+quadricentennial
+quadriceps
+quadricipital
+quadrifid
+quadriga
+quadrilateral
+quadrilaterals
+quadrille
+quadrilles
+quadrillion
+quadrillionth
+quadrinomial
+quadripartite
+quadripartitely
+quadripartition
+quadriplegia
+quadriplegic
+quadripuntal
+quadrisect
+quadrisected
+quadrisecting
+quadrisects
+quadrisyllabic
+quadrivalent
+quadrivial
+quadrivium
+quadroon
+quadroons
+quadrophonics
+quadrumanous
+quadrumvir
+quadrumvirate
+quadruped
+quadrupedal
+quadrupeds
+quadruple
+quadrupled
+quadruples
+quadruplet
+quadruplets
+quadruplex
+quadruplicate
+quadruplicated
+quadruplicates
+quadruplicating
+quadruplication
+quadruplications
+quadruplicity
+quadrupling
+quadruply
+quadrupolar
+quadrupole
+quadword
+quadword's
+quadwords
+quaere
+quaestor
+quaff
+quaffer
+quag
+quagga
+quaggy
+quagmire
+quagmire's
+quagmires
+quahog
+quai
+quaich
+quail
+quail's
+quails
+quaint
+quaintly
+quaintness
+quake
+quaked
+quaker
+Quakeress
+Quakerization
+Quakerization's
+Quakerizations
+Quakerize
+Quakerizes
+quakers
+quakes
+quaking
+quaky
+quale
+qualification
+qualifications
+qualified
+qualifiedly
+qualifier
+qualifiers
+qualifies
+qualify
+qualifying
+qualitative
+qualitatively
+qualities
+quality
+quality's
+qualm
+qualmish
+qualmishly
+qualmishness
+qualms
+qualmy
+quandaries
+quandary
+quandary's
+quango
+quangos
+quant
+quanta
+quantal
+quantasome
+quantic
+Quantico
+quantifiable
+quantifiably
+quantification
+quantificational
+quantificationally
+quantifications
+quantified
+quantifier
+quantifiers
+quantifies
+quantify
+quantifying
+quantifys
+quantile
+quantiles
+quantitate
+quantitated
+quantitates
+quantitating
+quantitation
+quantitations
+quantitative
+quantitatively
+quantitativeness
+quantities
+quantity
+quantity's
+quantization
+quantization's
+quantizations
+quantize
+quantized
+quantizer
+quantizer's
+quantizers
+quantizes
+quantizing
+quantum
+quaquaversal
+quarantinable
+quarantine
+quarantine's
+quarantined
+quarantines
+quarantining
+quare
+quark
+quarks
+quarrel
+quarreled
+quarreler
+quarrelers
+quarreling
+quarrelous
+quarrels
+quarrelsome
+quarrelsomely
+quarrelsomeness
+quarrian
+quarried
+quarrier
+quarries
+quarry
+quarry's
+quarrying
+quarryman
+quarrymen
+quart
+quartan
+quarter
+quarterage
+quarterback
+quarterbacks
+quarterdeck
+quarterdecks
+quartered
+quarterer
+quarterfinal
+quarterfinalist
+quartering
+quarterization
+quarterization's
+quarterizations
+quarterlies
+quarterlight
+quarterlights
+quarterly
+quartermaster
+quartermasters
+quartern
+quarternary
+quarters
+quartersaw
+quarterstaff
+quartet
+quartet's
+quartets
+quartette
+quartic
+quartics
+quartile
+quartiles
+quarto
+quartos
+quarts
+quartz
+quartziferous
+quartzite
+quartzitic
+quartzose
+quasar
+quasar's
+quasars
+quash
+quashed
+quashes
+quashi
+quashing
+quasi
+quasicontinuous
+quasimodo
+Quasimodo
+quasiorder
+quasiparticle
+quasiperiodic
+quasistationary
+quass
+Quassia
+quatercentenary
+quaternaries
+quaternary
+quaternion
+quaternity
+quathlamba
+quatrain
+quatre
+quatrefoil
+quattrocento
+quattuordecillion
+quaver
+quavered
+quavering
+quaveringly
+quavers
+quavery
+quay
+quayage
+quays
+quayside
+quean
+queasier
+queasily
+queasiness
+queasy
+queazy
+Quebec
+quebracho
+queen
+queen's
+Queenborough
+queencake
+queenly
+queens
+queensberry
+queenship
+Queensland
+Queensland's
+Queenstown
+queer
+queerer
+queerest
+queerish
+queerly
+queerness
+queers
+quell
+quelled
+queller
+quelling
+quells
+quelpart
+quelquechose
+quemoy
+quench
+quenchable
+quenched
+quencher
+quenches
+quenching
+quenchless
+queneau
+quenelle
+quercetin
+quercine
+queried
+querier
+queries
+querilla
+querist
+quern
+querns
+querulous
+querulously
+querulousness
+query
+querying
+quesnay
+quest
+quested
+quester
+questers
+questing
+question
+questionable
+questionableness
+questionably
+questionary
+questioned
+questioner
+questioners
+questioning
+questioningly
+questionings
+questionless
+questionnaire
+questionnaire's
+questionnaires
+questions
+questor
+quests
+quetta
+quetzal
+quetzalcoatl
+quetzales
+queue
+queue's
+queued
+queuer
+queuer's
+queuers
+queues
+queuing
+Quezon
+Quezon's
+quib
+quibble
+quibbled
+quibbler
+quibbles
+quibbling
+quiberon
+quibs
+quiche
+quiches
+Quichua
+quick
+quicken
+quickened
+quickener
+quickening
+quickens
+quicker
+quickest
+quickie
+quickies
+quicklime
+quickly
+quickness
+quicksand
+quicksands
+quickset
+quicksilver
+quickstep
+quicksteps
+quid
+quid's
+quiddity
+quidnunc
+quids
+quiescence
+quiescent
+quiescently
+quiescentness
+quiet
+quieted
+quieten
+quietened
+quietening
+quietens
+quieter
+quietest
+quieting
+quietism
+quietist
+quietly
+quietness
+quiets
+quietude
+quietus
+quiff
+quiffed
+quiffs
+quill
+quillet
+quillon
+quills
+quillwort
+quilmes
+quilt
+quilted
+quilter
+quilting
+quilts
+quim
+Quimper
+quinacrine
+quinary
+quinate
+quince
+quincentenary
+quinces
+quincuncial
+quincuncially
+quincunx
+quincunxes
+quincunxial
+quincy
+quindecagon
+quindecaplet
+quindecennial
+quindecillion
+quinic
+quinidine
+quiniela
+quinine
+quininize
+quininizes
+Quinn
+Quinn's
+quinnat
+quinoa
+quinoid
+quinoidine
+quinol
+quinoline
+quinone
+quinonoid
+quinquagenarian
+Quinquagesima
+quinquecentenary
+quinquefoliate
+quinquennial
+quinquennially
+quinquennium
+quinquepartite
+quinquereme
+quinquevalent
+quinquivalent
+quinsy
+quint
+quintain
+quintal
+quintan
+quintana
+quintero
+quintessence
+quintessential
+quintet
+quintets
+quintette
+quintic
+quintile
+quintiles
+quintilian
+quintillion
+quintillionth
+quintuple
+quintupled
+quintuples
+quintuplet
+quintuplet's
+quintuplets
+quintuplicate
+quintuplicated
+quintuplicates
+quintuplicating
+quintupling
+quintus
+quinze
+quip
+quipped
+quipping
+quips
+quipster
+quipu
+quire
+Quirinal
+quirinus
+Quirites
+quirk
+quirkily
+quirkiness
+quirking
+quirks
+quirky
+quirt
+quisling
+quislingism
+quist
+quit
+quitch
+quitclaim
+quite
+Quito
+Quito's
+quitrent
+quits
+quittance
+quitted
+quitter
+quitter's
+quitters
+quitting
+quittor
+Quivar
+quiver
+quivered
+quiverful
+quivering
+quivers
+Quixote
+quixotic
+quixotical
+quixotically
+Quixotism
+quixotry
+quiz
+quizmaster
+quizzed
+quizzer
+quizzes
+quizzical
+quizzicality
+quizzically
+quizzing
+qum
+qumran
+quo
+quod
+quodlibet
+quoin
+quoit
+quoits
+quokka
+quondam
+quonset
+quorum
+quot
+quota
+quota's
+quotable
+quotas
+quotation
+quotation's
+quotations
+quote
+quoted
+quotes
+quoth
+quotha
+quotidian
+quotient
+quotients
+quoting
+r's
+Rabat
+Rabat's
+rabato
+rabaul
+rabbath
+rabbet
+rabbeted
+rabbeting
+rabbets
+rabbi
+rabbinate
+rabbinic
+rabbinical
+rabbinically
+rabbinism
+rabbit
+rabbit's
+rabbited
+rabbiter
+rabbitfish
+rabbiting
+rabbitoh
+rabbitry
+rabbits
+rabbity
+rabble
+rabbled
+rabblement
+rabbler
+rabbling
+Rabelais
+Rabelaisian
+Rabi
+Rabia
+rabic
+rabid
+rabidity
+rabidly
+rabidness
+rabies
+Rabin
+Rabin's
+raccoon
+raccoon's
+raccoons
+race
+racecard
+racecards
+racecourse
+racecourses
+raced
+racegoer
+racegoers
+racehorse
+racehorse's
+racehorses
+racemate
+raceme
+racemic
+racemization
+racemize
+racemized
+racemizes
+racemizing
+racemose
+racer
+racers
+races
+racetrack
+racetracker
+raceway
+Rachel
+rachet
+rachides
+rachiodont
+rachis
+rachises
+rachitic
+rachitis
+Rachmaninoff
+rachmanism
+racial
+racialism
+racialist
+racialistic
+racialization
+racialization's
+racializations
+racialize
+racializes
+racially
+racier
+racily
+racine
+Racine
+raciness
+racing
+racism
+racist
+racists
+rack
+racked
+racker
+racket
+racket's
+racketeer
+racketeering
+racketeers
+rackets
+rackety
+Rackham
+racking
+rackle
+racks
+racon
+raconteur
+racoon
+racquet
+racquets
+racy
+rad
+rada
+radar
+radar's
+radars
+radarscope
+radarscopes
+Radcliffe
+raddle
+raddled
+raddles
+raddling
+Radetzky
+radial
+radiale
+radialization
+radialization's
+radializations
+radialize
+radializes
+radially
+radian
+radiance
+radiancy
+radians
+radiant
+radiantly
+radiate
+radiated
+radiately
+radiates
+radiating
+radiation
+radiational
+radiationless
+radiations
+radiative
+radiatively
+radiator
+radiator's
+radiators
+radic
+radical
+radicalism
+radicalization
+radicalization's
+radicalizations
+radicalize
+radicalized
+radicalizes
+radicalizing
+radically
+radicalness
+radicals
+radicand
+radicate
+radicel
+radices
+radicle
+radicular
+radiguet
+radii
+radio
+radioactivate
+radioactive
+radioactively
+radioactivities
+radioactivity
+radioastronomy
+radioautograph
+radioautographic
+radioautography
+radiobiologic
+radiobiological
+radiobiologically
+radiobiologist
+radiobiology
+radiobroadcast
+radiobroadcaster
+radiobroadcasting
+radiocarbon
+radiocast
+radiocaster
+radiochemical
+radiochemically
+radiochemist
+radiochemistry
+radiochlorine
+radiocommunication
+radioecological
+radioecologist
+radioecology
+radioed
+radioelement
+radiogenic
+radiogram
+radiogram's
+radiograms
+radiograph
+radiographic
+radiographically
+radiography
+radioimmunoassay
+radioing
+radioisotope
+radioisotopic
+radioisotopically
+radiolarian
+radioligand
+radiolocation
+radiologic
+radiological
+radiologically
+radiologist
+radiology
+radiolucency
+radiolucent
+radioluminescence
+radiolysis
+radiolytic
+radioman
+radiomen
+radiometeorograph
+radiometer
+radiometer's
+radiometers
+radiometric
+radiometrically
+radiometry
+radiomicrometer
+radiomimetic
+radionics
+radionuclide
+radiopaque
+radiopasteurization
+radiophone
+radiophonic
+radiophoto
+radiophotograph
+radiophysics
+radios
+radioscope
+radioscopic
+radioscopy
+radiosensitive
+radiosensitivity
+radiosonde
+radiosterilization
+radiosterilize
+radiosterilized
+radiosterilizes
+radiosterilizing
+radiostrontium
+radiosymmetrical
+radiotelegram
+radiotelegraph
+radiotelegraphic
+radiotelegraphy
+radiotelemetry
+radiotelephone
+radiotelephony
+radioteletype
+radiotherapist
+radiotherapy
+radiothermy
+radiothorium
+radiotoxic
+radiotracer
+radish
+radish's
+radishes
+radium
+radiumization
+radiumization's
+radiumizations
+radiumize
+radiumizes
+radius
+radiuses
+radix
+radixes
+Radnorshire
+radom
+radome
+radon
+rads
+radula
+radular
+Rae
+Rae's
+raeburn
+raf
+Rafael
+raff
+Rafferty
+Rafferty's
+raffia
+raffinate
+raffinose
+raffish
+raffishly
+raffishness
+raffle
+raffled
+raffles
+Rafflesia
+raffling
+raft
+rafter
+raftered
+rafters
+rafts
+raftsman
+rag
+rag's
+raga
+ragamuffin
+ragbag
+ragbolt
+rage
+raged
+rages
+ragged
+raggedly
+raggedness
+raggedy
+ragging
+raggle
+ragi
+raging
+raglan
+ragman
+ragout
+ragpicker
+rags
+ragtag
+ragtime
+ragusa
+Ragusan
+ragweed
+ragweeds
+ragworm
+ragworms
+ragwort
+rah
+rahman
+Raia
+raid
+raided
+raider
+raiders
+raiding
+raids
+rail
+railbird
+railbirds
+railcar
+railcars
+railed
+railer
+railers
+railhead
+railheads
+railing
+raillery
+railroad
+railroaded
+railroader
+railroaders
+railroading
+railroads
+rails
+railway
+railway's
+railwayman
+railways
+raiment
+Raimondi
+rain
+rain's
+rainband
+rainbird
+rainbow
+rainbows
+raincheck
+raincoat
+raincoat's
+raincoats
+raindrop
+raindrop's
+raindrops
+rained
+rainfall
+rainforest
+rainier
+rainiest
+raining
+rainless
+rainmaker
+rainmaking
+rainout
+rainproof
+rains
+rainspout
+rainsquall
+rainstorm
+rainwash
+rainwater
+rainwear
+rainy
+raise
+raised
+raiser
+raisers
+raises
+raisin
+raising
+raisins
+raison
+raj
+raja
+rajab
+rajah
+rajahs
+rajasthan
+Rajive
+Rajive's
+rajkot
+Rajput
+rajputana
+rajya
+rakata
+rake
+raked
+rakehell
+raker
+rakes
+raki
+raking
+rakish
+rakishly
+rakishness
+rale
+Raleigh
+rallentando
+rallied
+rallies
+ralline
+rally
+rallycross
+rallye
+rallying
+rallyist
+rallymaster
+Ralph
+Ralph's
+Ralston
+ram
+ram's
+Rama
+ramachandra
+Ramada
+ramakrishna
+Raman
+Raman's
+ramat
+ramate
+ramayana
+rambert
+ramble
+rambled
+rambler
+ramblers
+rambles
+rambling
+ramblingly
+ramblings
+Rambouillet
+rambunctious
+rambunctiously
+rambunctiousness
+rambutan
+rameau
+ramekin
+ramentum
+ramequin
+Rameses
+rami
+ramie
+ramification
+ramification's
+ramifications
+ramified
+ramifies
+ramiform
+ramify
+ramifying
+ramillies
+Ramirez
+ramirez
+ramjet
+ramjets
+rammed
+rammer
+ramming
+rammish
+Ramo
+Ramo's
+Ramona
+ramose
+ramosely
+ramous
+ramp
+ramp's
+rampage
+rampaged
+rampageous
+rampageously
+rampageousness
+rampages
+rampaging
+Rampal
+rampancy
+rampant
+rampantly
+rampart
+ramparts
+ramped
+ramping
+rampion
+ramps
+rampur
+ramrod
+ramrods
+rams
+ramsay
+ramses
+Ramsey
+ramsgate
+ramshackle
+ramsons
+ramtil
+ramulose
+ramus
+ran
+rancagua
+rance
+ranch
+ranched
+rancher
+rancherie
+ranchero
+ranchers
+ranches
+ranchi
+ranching
+ranchman
+rancho
+ranchos
+rancid
+rancidity
+rancidness
+rancor
+rancor's
+rancorous
+rancorously
+rancors
+Rand
+Randall
+randan
+randers
+randies
+Randolph
+random
+randomization
+randomization's
+randomizations
+randomize
+randomized
+randomizer
+randomizes
+randomizing
+randomly
+randomness
+Randova
+randy
+Randy's
+ranee
+rang
+range
+ranged
+rangefinder
+rangeland
+rangelands
+ranger
+rangers
+ranges
+rangier
+ranginess
+ranging
+Rangoon
+rangy
+rani
+ranian
+Ranier
+Ranier's
+ranjit
+rank
+ranked
+ranker
+ranker's
+rankers
+rankest
+Ranki
+Rankin
+Rankin's
+Rankine
+ranking
+ranking's
+rankings
+rankle
+rankled
+rankles
+rankling
+rankly
+rankness
+ranks
+ranmoor
+ransack
+ransacked
+ransacker
+ransacking
+ransacks
+ransom
+ransome
+ransomer
+ransoming
+ransoms
+rant
+ranted
+ranter
+ranters
+ranting
+rantingly
+rantry
+rants
+ranunculaceous
+ranunculus
+Raoul
+rap
+rap's
+rapacious
+rapaciously
+rapaciousness
+rapacity
+rapacki
+Rapallo
+rape
+raped
+raper
+rapes
+rapeseed
+Raphael
+raphe
+Raphia
+raphide
+rapid
+rapidity
+rapidly
+rapidness
+rapids
+rapier
+rapine
+raping
+rapist
+rapists
+rapparee
+rapped
+rappee
+rappel
+rappen
+rapper
+rapper's
+rappers
+rapping
+rapport
+rapporteur
+rapprochement
+raps
+rapscallion
+rapt
+raptly
+raptness
+raptor
+raptorial
+rapture
+rapture's
+raptured
+raptures
+rapturing
+rapturize
+rapturizes
+rapturous
+rapturously
+rapturousness
+rapunzel
+Rapunzel
+rara
+rare
+rarebit
+raree
+rarefaction
+rarefactional
+rarefactive
+rarefied
+rarefy
+rarely
+rareness
+rarer
+rareripe
+rarest
+rarify
+raring
+Raritan
+Raritan's
+rarities
+rarity
+rarity's
+rarotonga
+rasa
+rasbora
+rascal
+rascality
+rascalize
+rascalizes
+rascally
+rascals
+rase
+rash
+rasher
+rashes
+rashly
+rashness
+rasht
+rasing
+rask
+Rasmussen
+rasorial
+rasp
+raspatory
+raspberry
+rasped
+rasper
+rasping
+raspingly
+raspings
+rasps
+rasputin
+raspy
+rasse
+Rastafarian
+raster
+rasters
+Rastus
+rasure
+rat
+rat's
+rata
+ratable
+ratably
+ratafia
+ratan
+rataplan
+ratatouille
+ratbag
+ratbaggery
+ratbite
+ratch
+ratchet
+ratchet's
+ratcheted
+ratcheting
+ratchets
+rate
+rateable
+rated
+rateen
+ratel
+ratemeter
+ratemeter's
+ratemeters
+ratepayer
+ratepayers
+rater
+raters
+rates
+ratfink
+ratfish
+Ratfor
+ratha
+rathe
+rathenau
+rather
+rathskeller
+raticide
+ratification
+ratificationist
+ratifications
+ratified
+ratifies
+ratify
+ratifying
+rating
+ratings
+ratio
+ratio's
+ratiocinate
+ratiocinated
+ratiocinates
+ratiocinating
+ratiocination
+ratiocinative
+ratiocinator
+ratiometer
+ration
+rational
+rationale
+rationale's
+rationales
+rationalism
+rationalist
+rationalistic
+rationalistically
+rationalists
+rationalities
+rationality
+rationalizable
+rationalizable's
+rationalizables
+rationalization
+rationalization's
+rationalizations
+rationalize
+rationalized
+rationalizer
+rationalizers
+rationalizes
+rationalizing
+rationally
+rationalness
+rationed
+rationing
+rations
+ratios
+ratisbon
+ratite
+ratlam
+ratlike
+ratline
+rato
+raton
+ratoon
+rats
+ratsbane
+rattail
+rattan
+ratted
+ratteen
+ratter
+rattier
+rattigan
+ratting
+rattish
+Rattle
+rattle
+rattlebox
+rattlebrain
+rattlebrained
+rattled
+rattler
+rattlers
+rattles
+rattlesnake
+rattlesnake's
+rattlesnakes
+rattletrap
+rattling
+rattlingly
+rattly
+rattoon
+rattrap
+ratty
+raucous
+raucously
+raucousness
+Raul
+Raul's
+raunchier
+raunchily
+raunchiness
+raunchy
+Rauwolfia
+ravage
+ravaged
+ravagement
+ravager
+ravagers
+ravages
+ravaging
+rave
+raved
+ravel
+Ravel
+raveled
+raveler
+ravelers
+ravelin
+raveling
+ravelings
+ravelment
+ravels
+raven
+ravened
+ravener
+ravening
+ravenna
+ravenous
+ravenously
+ravenousness
+ravens
+raver
+raves
+ravin
+ravine
+ravine's
+ravined
+ravines
+raving
+ravings
+ravioli
+ravish
+ravisher
+ravishes
+ravishing
+ravishingly
+ravishment
+raw
+rawalpindi
+rawboned
+rawer
+rawest
+rawhide
+rawhided
+rawhiding
+rawinsonde
+Rawlings
+rawlings
+Rawlins
+rawlins
+Rawlinson
+rawly
+rawness
+raws
+Rawson
+rawsthorne
+ray
+ray's
+Rayburn
+rayed
+Rayleigh
+rayless
+raylessness
+raylet
+Raymond
+Raymondville
+rayon
+rays
+Raytheon
+raze
+razed
+razee
+razeed
+razeeing
+razer
+razes
+razing
+razoo
+razor
+razor's
+razorback
+razorbill
+razors
+razz
+razzia
+razzle
+razzmatazz
+RCA
+RCS
+rd
+re
+Rea
+reabbreviate
+reabbreviated
+reabbreviates
+reabbreviating
+reabsorb
+reabsorption
+reacclimatization
+reacclimatization's
+reacclimatizations
+reacclimatize
+reacclimatizes
+reach
+reachability
+reachable
+reachably
+reached
+reacher
+reaches
+reaching
+reacknowledgment
+reacknowledgment's
+reacknowledgments
+reacquaint
+reacquainted
+reacquire
+reacquisition
+react
+reactance
+reactances
+reactant
+reactants
+reacted
+reacting
+reaction
+reaction's
+reactional
+reactionally
+reactionaries
+reactionary
+reactionary's
+reactionaryism
+reactions
+reactivate
+reactivated
+reactivates
+reactivating
+reactivation
+reactive
+reactively
+reactiveness
+reactivity
+reactor
+reactor's
+reactors
+reacts
+reactualization
+reactualization's
+reactualizations
+reactualize
+reactualizes
+read
+readability
+readable
+readableness
+readably
+readapting
+reade
+reader
+reader's
+readers
+readership
+readership's
+readied
+readier
+readies
+readiest
+readily
+readiness
+reading
+readings
+readjust
+readjustable
+readjusted
+readjuster
+readjusting
+readjustment
+readjustments
+readjusts
+readonly
+readout
+readout's
+readouts
+reads
+readwrite
+ready
+readying
+reaffirm
+reaffirmation
+reaffirmed
+reaffirming
+reaffirms
+reafforest
+Reagan
+reagent
+reagents
+reaggregate
+reaggregation
+real
+realest
+realgar
+realign
+realigned
+realigning
+realignment
+realignments
+realigns
+realism
+realist
+realist's
+realistic
+realistically
+realisticize
+realisticizes
+realists
+realities
+reality
+realizabilities
+realizability
+realizability's
+realizable
+realizable's
+realizableness
+realizables
+realizablies
+realizably
+realization
+realization's
+realizations
+realize
+realized
+realizer
+realizers
+realizes
+realizing
+realizing's
+realizingly
+realizings
+reallocate
+reallocated
+reallocates
+reallocating
+reallocation
+reallocation's
+reallocations
+reallocator
+reallocator's
+reallocators
+reallot
+reallotment
+reallotments
+reallots
+reallotted
+reallotting
+really
+realm
+realm's
+realms
+realness
+realpolitik
+reals
+realtor
+realtors
+realty
+ream
+ream's
+reamed
+reamer
+reaming
+reams
+reanalysis
+reanalyze
+reanalyzed
+reanalyzer
+reanalyzers
+reanalyzes
+reanalyzing
+reanimalize
+reanimalizes
+reap
+reaped
+reaper
+reaping
+reapologize
+reapologizes
+reappear
+reappearance
+reappeared
+reappearing
+reappears
+reapplication
+reapplied
+reapplies
+reapply
+reapplying
+reapportion
+reapportioned
+reapportionment
+reappraisal
+reappraisals
+reappraise
+reappraised
+reappraises
+reappraising
+reaps
+rear
+reared
+rearer
+rearguard
+rearguards
+rearhorse
+rearing
+rearm
+rearmament
+rearmed
+rearming
+rearmost
+rearms
+rearrange
+rearrangeable
+rearranged
+rearrangement
+rearrangement's
+rearrangements
+rearranges
+rearranging
+rearrest
+rearrested
+rears
+rearward
+rearwardly
+rearwards
+reason
+reasonability
+reasonable
+reasonableness
+reasonably
+reasoned
+reasoner
+reasoning
+reasonings
+reasonless
+reasonlessly
+reasons
+reassemble
+reassembled
+reassembler
+reassembles
+reassembling
+reassembly
+reassert
+reasserted
+reasserting
+reassertion
+reasserts
+reassess
+reassessed
+reassesses
+reassessing
+reassessment
+reassessment's
+reassessments
+reassign
+reassignable
+reassigned
+reassigning
+reassignment
+reassignment's
+reassignments
+reassigns
+reassociation
+reassurance
+reassurances
+reassure
+reassured
+reassures
+reassuring
+reassuringly
+reast
+reauthorization
+reauthorization's
+reauthorizations
+reauthorize
+reauthorizes
+reave
+reaver
+reaving
+reawaken
+reawakened
+reawakening
+reawakens
+reb
+rebaptization
+rebaptization's
+rebaptizations
+rebarbative
+rebarbatively
+rebate
+rebate's
+rebated
+rebater
+rebates
+rebating
+rebato
+rebec
+Rebecca
+rebel
+rebel's
+rebell
+rebelled
+rebelling
+rebellion
+rebellion's
+rebellions
+rebellious
+rebelliously
+rebelliousness
+rebellow
+rebells
+rebels
+rebid
+rebidding
+rebids
+rebirth
+rebirth's
+reboant
+rebond
+rebonded
+rebonding
+rebonds
+reboot
+rebooted
+rebooter
+rebooters
+rebooting
+reboots
+reborn
+rebound
+rebounded
+rebounder
+rebounding
+rebounds
+rebourbonize
+rebourbonizes
+Rebozo
+rebroadcast
+rebroadcasts
+rebrutalize
+rebrutalizes
+rebs
+rebuff
+rebuffed
+rebuffing
+rebuffs
+rebuild
+rebuilding
+rebuilds
+rebuilt
+rebuke
+rebuked
+rebuker
+rebukes
+rebuking
+rebus
+rebut
+rebuttable
+rebuttal
+rebuttals
+rebutted
+rebutter
+rebutting
+rec
+recalcitrance
+recalcitrancy
+recalcitrant
+recalculate
+recalculated
+recalculates
+recalculating
+recalculation
+recalculations
+recalesce
+recalescence
+recall
+recallability
+recallable
+recalled
+recaller
+recalling
+recalls
+recanalization
+recant
+recantation
+recanted
+recap
+recapitalization
+recapitalization's
+recapitalizations
+recapitalize
+recapitalized
+recapitalizes
+recapitulate
+recapitulated
+recapitulates
+recapitulating
+recapitulation
+recappable
+recapped
+recapping
+recaption
+recapture
+recaptured
+recaptures
+recapturing
+recarbonization
+recarbonization's
+recarbonizations
+recarbonize
+recarbonizer
+recarbonizers
+recarbonizes
+recast
+recasting
+recasts
+recategorized
+recatory
+recausticize
+recausticizes
+recede
+receded
+recedes
+receding
+receipt
+receipt's
+receipted
+receipting
+receiptor
+receipts
+receivable
+receivables
+receive
+received
+receiver
+receiver's
+receivers
+receivership
+receives
+receiving
+recency
+recension
+recent
+recently
+recentness
+recentralization
+recentralization's
+recentralizations
+recentralize
+recentralizes
+recept
+receptacle
+receptacle's
+receptacles
+receptaculum
+reception
+reception's
+receptionist
+receptionists
+receptions
+receptive
+receptively
+receptiveness
+receptivity
+receptor
+receptor's
+receptors
+recertification
+recess
+recessed
+recesses
+recessing
+recession
+recession's
+recessional
+recessionary
+recessions
+recessive
+recessively
+recessiveness
+recharge
+rechargeable
+recharged
+recharger
+recharges
+recharging
+rechartering
+recheat
+recheck
+rechecked
+rechecking
+rechecks
+recherche
+recherches
+recidivism
+recidivist
+recidivistic
+Recife
+Recife's
+recipe
+recipe's
+recipes
+recipience
+recipiency
+recipient
+recipient's
+recipients
+reciprocal
+reciprocalize
+reciprocalizes
+reciprocally
+reciprocals
+reciprocate
+reciprocated
+reciprocates
+reciprocating
+reciprocation
+reciprocative
+reciprocator
+reciprocity
+recirculate
+recirculated
+recirculates
+recirculating
+recirculation
+recision
+recital
+recital's
+recitalist
+recitals
+recitation
+recitation's
+recitations
+recitative
+recitativo
+recite
+recited
+reciter
+recites
+reciting
+recivilization
+recivilization's
+recivilizations
+recivilize
+recivilizes
+reck
+reckless
+recklessly
+recklessness
+Recklinghausen
+reckon
+reckoned
+reckoner
+reckoning
+reckonings
+reckons
+reclaim
+reclaimable
+reclaimed
+reclaimer
+reclaimers
+reclaiming
+reclaims
+reclamation
+reclamations
+reclassification
+reclassified
+reclassifies
+reclassify
+reclassifying
+reclinate
+recline
+reclined
+reclines
+reclining
+reclosable
+recluse
+recluse's
+recluses
+reclusion
+reclusive
+recluster
+reclustered
+reclustering
+reclusters
+recode
+recoded
+recodes
+recodified
+recodifies
+recodify
+recodifying
+recoding
+recognition
+recognition's
+recognitions
+recognizability
+recognizable
+recognizably
+recognizance
+recognize
+recognized
+recognizedlies
+recognizedly
+recognizee
+recognizer
+recognizers
+recognizes
+recognizing
+recognizinglies
+recognizingly
+recoil
+recoiled
+recoiling
+recoilless
+recoils
+recoin
+recoinage
+recollect
+recollected
+recollecting
+recollection
+recollection's
+recollections
+recollects
+recolonization
+recolonization's
+recolonizations
+recolonize
+recolonizes
+recolor
+recolor's
+recolored
+recoloring
+recolors
+recombinant
+recombination
+recombination's
+recombinational
+recombinations
+recombine
+recombined
+recombines
+recombining
+recommence
+recommenced
+recommences
+recommencing
+recommend
+recommendable
+recommendation
+recommendation's
+recommendations
+recommendatory
+recommended
+recommender
+recommending
+recommends
+recommit
+recommitment
+recommittal
+recompence
+recompense
+recompilation
+recompilations
+recompile
+recompiled
+recompiles
+recompiling
+recompose
+recomposition
+recompute
+recomputed
+recomputes
+recomputing
+reconceptualization
+reconceptualizing
+reconcilability
+reconcilable
+reconcilableness
+reconcile
+reconciled
+reconcilement
+reconciler
+reconciles
+reconciliation
+reconciliation's
+reconciliations
+reconciliatory
+reconciling
+recondite
+reconditely
+reconditeness
+recondition
+reconditioned
+reconditioning
+reconditionings
+reconditions
+reconfigurability
+reconfigurable
+reconfiguration
+reconfiguration's
+reconfigurations
+reconfigure
+reconfigured
+reconfigurer
+reconfigures
+reconfiguring
+reconfirm
+reconfirmation
+reconnaissance
+reconnect
+reconnected
+reconnecter
+reconnecting
+reconnection
+reconnects
+reconnoiter
+reconnoitered
+reconnoiterer
+reconnoiterer's
+reconnoiterers
+reconnoitering
+reconnoiters
+reconquer
+reconquered
+reconquering
+reconquers
+reconsider
+reconsideration
+reconsidered
+reconsidering
+reconsiders
+reconsolidate
+reconsolidated
+reconsolidates
+reconsolidating
+reconstitute
+reconstituted
+reconstitutes
+reconstitution
+reconstruct
+reconstructed
+reconstructible
+reconstructing
+reconstruction
+reconstructionism
+reconstructionist
+reconstructions
+reconstructive
+reconstructor
+reconstructs
+recontacted
+recontaminate
+recontamination
+reconvene
+reconvened
+reconvenes
+reconvening
+reconvention
+reconversion
+reconvert
+reconverted
+reconverting
+reconverts
+reconvey
+reconveyance
+recopied
+recopies
+recopy
+record
+recordable
+recordation
+recorded
+recorder
+recorders
+recording
+recordings
+recordist
+records
+recored
+recount
+recounted
+recounter
+recounting
+recounts
+recoup
+recoupable
+recouped
+recouping
+recoupment
+recoups
+recourse
+recourses
+recover
+recoverability
+recoverable
+recovered
+recoverer
+recoveries
+recovering
+recovers
+recovery
+recovery's
+recreant
+recreatable
+recreate
+recreated
+recreates
+recreating
+recreation
+recreational
+recreationist
+recreations
+recreative
+recrement
+recriminate
+recriminated
+recriminates
+recriminating
+recrimination
+recriminations
+recriminative
+recriminatory
+recriticize
+recriticizes
+recrudesce
+recrudescence
+recrudescent
+recruit
+recruit's
+recruited
+recruiter
+recruiter's
+recruiters
+recruiting
+recruitment
+recruits
+recrystallization
+recrystallization's
+recrystallizations
+recrystallize
+recrystallized
+recrystallizes
+recrystallizing
+recta
+rectal
+rectally
+rectangle
+rectangle's
+rectangles
+rectangular
+rectangularity
+rectangularly
+recti
+rectifiability
+rectifiable
+rectification
+rectifications
+rectified
+rectifier
+rectifiers
+rectify
+rectilinear
+rectilinearly
+rectillinear
+recting
+rection
+rectitude
+rectitudinous
+rective
+recto
+rectocele
+rector
+rector's
+rectorate
+rectorial
+rectors
+rectorship
+rectory
+rectos
+rectrices
+rectrix
+rectum
+rectum's
+rectums
+rectus
+recumbency
+recumbent
+recumbently
+recuperate
+recuperated
+recuperates
+recuperating
+recuperation
+recuperative
+recuperator
+recur
+recurred
+recurrence
+recurrence's
+recurrences
+recurrency
+recurrent
+recurrently
+recurring
+recurs
+recurse
+recursed
+recurses
+recursing
+recursion
+recursion's
+recursions
+recursive
+recursively
+recursiveness
+recursivity
+recurvate
+recurve
+recurved
+recusancy
+recusant
+recuse
+recyclable
+recycle
+recycled
+recycles
+recycling
+red
+redact
+redaction
+redactional
+redactions
+redactor
+redan
+redargue
+redback
+redbird
+redbirds
+redbone
+redbreast
+redbrick
+Redbridge
+redbud
+redbug
+redcap
+redcoat
+redcoats
+redcurrant
+redd
+redded
+redden
+reddened
+reddening
+redder
+reddest
+redding
+reddish
+reddishness
+redditch
+reddle
+reddy
+rede
+redear
+redeclare
+redeclared
+redeclares
+redeclaring
+redecorate
+redecorated
+redecorates
+redecorating
+redecoration
+redecorator
+rededicate
+redeem
+redeemable
+redeemed
+redeemer
+redeemers
+redeeming
+redeems
+redefine
+redefined
+redefines
+redefining
+redefinition
+redefinition's
+redefinitions
+redemption
+redemptional
+redemptioner
+redemptive
+Redemptorist
+redemptory
+redeploy
+redeployed
+redeployment
+redeploys
+redeposit
+redeposit's
+redeposited
+redepositing
+redeposition
+redepositor
+redepositor's
+redepositors
+redeposits
+redescribe
+redescription
+redesign
+redesigned
+redesigning
+redesigns
+redetermination
+redetermine
+redetermined
+redetermines
+redetermining
+redevelop
+redeveloped
+redeveloper
+redevelopers
+redeveloping
+redevelopment
+redevelops
+redeye
+redfin
+Redford
+Redford's
+Redgrave
+redhead
+redheaded
+redheader
+redheads
+Redhook
+redhook
+redhorse
+redia
+rediae
+redial
+redialed
+redialer
+redialing
+redials
+redias
+rediffusion
+redingote
+redintegrate
+redintegration
+redintegrative
+redirect
+redirected
+redirecting
+redirection
+redirections
+redirector
+redirector's
+redirectors
+redirects
+rediscount
+rediscountable
+rediscover
+rediscovered
+rediscovering
+rediscovers
+rediscovery
+redisplay
+redisplayed
+redisplaying
+redisplays
+redistribute
+redistributed
+redistributes
+redistributing
+redistribution
+redistribution's
+redistributions
+redistributive
+redistributory
+redistrict
+redistricting
+redivivus
+redleg
+redly
+Redmond
+Redmond's
+redneck
+rednecked
+rednecks
+redness
+redo
+redoing
+redolence
+redolent
+redolently
+redon
+redondo
+Redondo's
+redone
+redose
+redouble
+redoubled
+redoubles
+redoubling
+redoubt
+redoubtable
+redoubtably
+redound
+redout
+redowa
+redox
+redpoll
+redraw
+redrawing
+redrawn
+redraws
+redress
+redressed
+redresser
+redresses
+redressing
+redroot
+reds
+redshank
+redshift
+redshifted
+redshifting
+redshifts
+redshirt
+redskin
+redstart
+Redstone
+redtop
+reduce
+reduced
+reducer
+reducers
+reduces
+reducibility
+reducible
+reducibly
+reducing
+reduct
+reductant
+reductase
+reductio
+reduction
+reduction's
+reductional
+reductionalist
+reductionism
+reductionist
+reductionistic
+reductions
+reductive
+redundancies
+redundancy
+redundant
+redundantly
+reduplicate
+reduplicated
+reduplication
+reduplicative
+reduplicatively
+reduviid
+redware
+redwing
+redwood
+redwoods
+ree
+reebok
+reed
+reed's
+reedbuck
+reeder
+reedier
+reedify
+reeding
+reedling
+reeds
+reeducate
+reeducation
+reeducative
+Reedville
+reedy
+reef
+reefer
+reefing
+reefs
+reek
+reeked
+reeker
+reeking
+reeks
+reeky
+reel
+reelable
+reelect
+reelected
+reelecting
+reelection
+reelects
+reeled
+reeler
+reeling
+reels
+reembroider
+reemerged
+reemission
+reemission's
+reemissions
+reemphasization
+reemphasization's
+reemphasize
+reemphasized
+reemphasizer
+reemphasizers
+reemphasizes
+reemphasizing
+reemploy
+reemployment
+reen
+reenact
+reenactment
+reenforce
+reenforcement
+reenlist
+reenlisted
+reenlistment
+reenlists
+reenter
+reentered
+reentering
+reenters
+reentrance
+reentrant
+reentry
+reenumerate
+reenumeration
+Reese
+reest
+reestablish
+reestablished
+reestablishes
+reestablishing
+reestablishment
+reestimate
+reestimating
+reevaluate
+reevaluated
+reevaluates
+reevaluating
+reevaluation
+reeve
+reeves
+reexamination
+reexamine
+reexamined
+reexamines
+reexamining
+ref
+reface
+refaced
+refaces
+refacing
+refactoring
+refashion
+refavor
+refavor's
+refavors
+refect
+refection
+refectories
+refectory
+refelled
+refelling
+refer
+referable
+referee
+referee's
+refereed
+refereeing
+referees
+reference
+referenced
+referencer
+references
+referencing
+referenda
+referendum
+referent
+referent's
+referential
+referentiality
+referentially
+referents
+referral
+referral's
+referrals
+referred
+referrer
+referring
+refers
+refertilization
+refertilization's
+refertilizations
+refertilize
+refertilizes
+refill
+refillable
+refilled
+refilling
+refills
+refinance
+refine
+refined
+refinement
+refinement's
+refinements
+refiner
+refineries
+refinery
+refines
+refining
+refinish
+refinished
+refinisher
+refinishes
+refinishing
+refit
+reflate
+reflated
+reflates
+reflating
+reflation
+reflationary
+reflect
+reflectance
+reflected
+reflecting
+reflection
+reflection's
+reflectional
+reflections
+reflective
+reflectively
+reflectiveness
+reflectivity
+reflectometer
+reflectometer's
+reflectometers
+reflectometry
+reflector
+reflector's
+reflectorize
+reflectorized
+reflectorizes
+reflectorizing
+reflectors
+reflects
+reflet
+reflex
+reflex's
+reflexed
+reflexes
+reflexion
+reflexive
+reflexively
+reflexiveness
+reflexivity
+reflexly
+reflexology
+reflorescence
+reflorescent
+reflow
+refluence
+refluent
+reflux
+refluxed
+refluxes
+refluxing
+refocus
+refocused
+refocuses
+refocusing
+refolded
+reforest
+reforestation
+reforestization
+reforestization's
+reforestize
+reforestizes
+reforge
+reform
+reformability
+reformable
+reformat
+reformate
+reformation
+reformational
+reformative
+reformatories
+reformatory
+reformats
+reformatted
+reformatter
+reformatting
+reformed
+reformer
+reformers
+reforming
+reformism
+reformist
+reformists
+reforms
+reformulate
+reformulated
+reformulates
+reformulating
+reformulation
+refract
+refracted
+refractile
+refracting
+refraction
+refractive
+refractively
+refractiveness
+refractivities
+refractivity
+refractometer
+refractometer's
+refractometers
+refractometric
+refractometry
+refractor
+refractorily
+refractoriness
+refractory
+refrain
+refrained
+refraining
+refrainment
+refrains
+refrangibility
+refrangible
+refrangibleness
+refresh
+refreshed
+refreshen
+refresher
+refreshers
+refreshes
+refreshing
+refreshingly
+refreshment
+refreshment's
+refreshments
+refried
+refries
+refrigerant
+refrigerate
+refrigerated
+refrigeration
+refrigerator
+refrigerator's
+refrigerators
+refringent
+refry
+refrying
+reft
+refuel
+refueled
+refueling
+refuels
+refuge
+refuged
+refugee
+refugee's
+refugeeism
+refugees
+refuges
+refuging
+refugium
+refulgence
+refulgent
+refund
+refund's
+refundability
+refundable
+refunded
+refunder
+refunders
+refunding
+refunds
+refurbish
+refurbished
+refurbisher
+refurbishing
+refurbishment
+refusal
+refusals
+refuse
+refused
+refuser
+refuses
+refusing
+refutable
+refutably
+refutation
+refute
+refuted
+refuter
+refutes
+refuting
+regain
+regained
+regaining
+regains
+regal
+regale
+regaled
+regalia
+regaling
+regality
+regalize
+regalizes
+regally
+regalvanization
+regalvanization's
+regalvanizations
+regalvanize
+regalvanizes
+regard
+regardant
+regarded
+regardful
+regardfully
+regardfulness
+regarding
+regardless
+regardlessly
+regardlessness
+regards
+regatta
+regattas
+regelate
+regelation
+regency
+regenerable
+regeneracy
+regenerate
+regenerated
+regenerately
+regenerateness
+regenerates
+regenerating
+regeneration
+regenerative
+regeneratively
+regenerator
+regenerators
+Regensburg
+regent
+regent's
+regental
+regents
+reger
+reggae
+reggio
+regicidal
+regicide
+regime
+regime's
+regimen
+regiment
+regimental
+regimentally
+regimentals
+regimentation
+regimented
+regiments
+regimes
+regin
+Regina
+Reginald
+regiomontanus
+region
+region's
+regional
+regionalism
+regionalist
+regionalistic
+regionalization
+regionalization's
+regionalizations
+regionalize
+regionalized
+regionalizes
+regionalizing
+regionally
+regions
+Regis
+regisseur
+register
+registered
+registering
+registers
+registrable
+registrant
+registrants
+registrar
+registrars
+registration
+registration's
+registrations
+registries
+registry
+regius
+reglet
+regna
+regnal
+regnant
+regnum
+rego
+regolith
+regorge
+regorged
+regorging
+regosol
+regrant
+regrate
+regreet
+regreets
+regress
+regressed
+regresses
+regressing
+regression
+regression's
+regressions
+regressive
+regressively
+regressiveness
+regressor
+regressors
+regret
+regretful
+regretfully
+regretfulness
+regretless
+regrets
+regrettable
+regrettably
+regretted
+regretter
+regretting
+regrid
+regridded
+regridding
+regrids
+reground
+regroup
+regrouped
+regrouping
+regrow
+regulable
+regular
+regularities
+regularity
+regularization
+regularization's
+regularizations
+regularize
+regularized
+regularizer
+regularizers
+regularizes
+regularizing
+regularly
+regulars
+regulate
+regulated
+regulates
+regulating
+regulation
+regulations
+regulative
+regulator
+regulator's
+regulators
+regulatory
+Regulus
+regurgitate
+regurgitated
+regurgitates
+regurgitating
+regurgitation
+regurgitative
+rehabilitant
+rehabilitate
+rehabilitated
+rehabilitates
+rehabilitating
+rehabilitation
+rehabilitationist
+rehabilitations
+rehabilitative
+rehabilitator
+reharmonization
+reharmonize
+reharmonizes
+rehash
+rehashed
+rehashes
+rehashing
+rehear
+rehearing
+rehearsal
+rehearsal's
+rehearsals
+rehearse
+rehearsed
+rehearser
+rehearses
+rehearsing
+Rehoboam
+rehonor
+rehonor's
+rehonors
+rehouse
+rehoused
+rehouses
+rehousing
+rehumanization
+rehumanize
+rehumanizes
+rehybridize
+rehybridizes
+rehydratable
+rehydrate
+rehydration
+Reich
+Reichenberg
+reichsmark
+Reichsrat
+Reichstag
+Reid
+Reid's
+reification
+reified
+reify
+reifying
+reigate
+reign
+reigned
+reigning
+reigns
+Reilly
+reimbursable
+reimburse
+reimbursed
+reimbursement
+reimbursement's
+reimbursements
+reimburses
+reimbursing
+reimpression
+reims
+rein
+reincarnate
+reincarnated
+reincarnation
+reincarnationist
+reincorporating
+reincorporation
+reindeer
+reined
+Reiner
+reinfection
+reinforce
+reinforceable
+reinforced
+reinforcement
+reinforcement's
+reinforcements
+reinforcer
+reinforces
+reinforcing
+reinhard
+Reinhard
+reinhardt
+Reinhardt
+Reinhold
+reining
+reinitialization
+reinitialize
+reinitialized
+reinitializes
+reinitializing
+reinless
+reins
+reinsert
+reinserted
+reinserting
+reinsertion
+reinsertions
+reinserts
+reinsman
+reinstall
+reinstalled
+reinstaller
+reinstalling
+reinstalls
+reinstate
+reinstated
+reinstatement
+reinstates
+reinstating
+reinstitution
+reinsurance
+reinsure
+reinsurer
+reintegrate
+reintegrated
+reintegration
+reintegrative
+reinterpret
+reinterpretation
+reinterpretations
+reinterpreted
+reinterpreting
+reinterprets
+reinterview
+reinterviewed
+reintroduce
+reintroduced
+reintroduces
+reintroducing
+reintroduction
+reinvent
+reinvented
+reinventing
+reinvention
+reinvents
+reinvest
+reinvested
+reinvestigation
+reinvestment
+reinvigorate
+reinvigoration
+reinvigorator
+reinvoke
+reinvoked
+reinvokes
+reinvoking
+reissue
+reissued
+reissuer
+reissuer's
+reissuers
+reissues
+reissuing
+reitemize
+reitemizes
+reiterate
+reiterated
+reiterates
+reiterating
+reiteration
+reiterations
+reiterative
+reiteratively
+reiterativeness
+reiterator
+reith
+reive
+reiver
+reiving
+reject
+rejected
+rejectee
+rejecter
+rejecting
+rejectingly
+rejection
+rejection's
+rejections
+rejective
+rejector
+rejector's
+rejectors
+rejects
+rejig
+rejigger
+rejoice
+rejoiced
+rejoicer
+rejoices
+rejoicing
+rejoicingly
+rejoin
+rejoinder
+rejoined
+rejoining
+rejoins
+rejuvenate
+rejuvenated
+rejuvenates
+rejuvenating
+rejuvenation
+rejuvenator
+rejuvenesce
+rejuvenescence
+rejuvenescent
+rekindle
+rekindled
+rekindler
+rekindles
+rekindling
+reknit
+relabel
+relabeled
+relabeler
+relabelers
+relabeling
+relabels
+relapse
+relapsed
+relapser
+relapses
+relapsing
+relatable
+relate
+related
+relatedly
+relatedness
+relater
+relates
+relating
+relation
+relational
+relationally
+relations
+relationship
+relationship's
+relationships
+relative
+relatively
+relativeness
+relatives
+relativism
+relativist
+relativistic
+relativistically
+relativity
+relativity's
+relativization
+relativization's
+relativizations
+relativize
+relativized
+relativizes
+relativizing
+relator
+relatum
+relax
+relaxant
+relaxation
+relaxation's
+relaxations
+relaxed
+relaxedly
+relaxedness
+relaxer
+relaxes
+relaxin
+relaxing
+relay
+relayed
+relaying
+relays
+relearn
+relearns
+releasability
+releasable
+releasably
+release
+released
+releaser
+releases
+releasing
+relection
+relegate
+relegated
+relegates
+relegating
+relegation
+relent
+relented
+relenting
+relentless
+relentlessly
+relentlessness
+relents
+relevance
+relevances
+relevancy
+relevant
+relevantly
+reliabilities
+reliability
+reliable
+reliableness
+reliably
+reliance
+reliant
+reliantly
+relic
+relic's
+relicense
+relicensed
+relicenser
+relicenses
+relicensing
+relics
+relict
+reliction
+relied
+relief
+reliefs
+relier
+relies
+relievable
+relieve
+relieved
+relievedly
+reliever
+relievers
+relieves
+relieving
+relievo
+religion
+religion's
+religionism
+religionist
+religionists
+religionize
+religionizes
+religions
+religiose
+religiosity
+religious
+religiously
+religiousness
+reline
+relinking
+relinquish
+relinquished
+relinquishes
+relinquishing
+relinquishment
+reliquary
+relique
+reliquiae
+relish
+relishable
+relished
+relishes
+relishing
+relive
+relives
+reliving
+reload
+reloaded
+reloader
+reloading
+reloads
+relocatable
+relocate
+relocated
+relocatee
+relocates
+relocating
+relocation
+relocations
+relucent
+reluct
+reluctance
+reluctances
+reluctancy
+reluctant
+reluctantly
+reluctate
+reluctated
+reluctation
+reluctivity
+relume
+relumed
+relumine
+reluming
+rely
+relying
+remade
+remagnetization
+remagnetization's
+remagnetizations
+remagnetize
+remagnetizes
+remain
+remainder
+remainder's
+remaindered
+remaindering
+remainderman
+remainders
+remained
+remaines
+remaining
+remains
+remake
+remaking
+reman
+remand
+remanded
+remanding
+remanence
+remanent
+remanufacture
+remanufacturer
+remap
+remark
+remarkable
+remarkableness
+remarkably
+remarked
+remarking
+remarks
+remarque
+remarriage
+remarriages
+remarried
+remarry
+remarrying
+rematch
+rematerialize
+rematerializes
+Remblai
+Rembrandt
+Reme
+remediable
+remediableness
+remediably
+remedial
+remedially
+remediate
+remediation
+remedied
+remedies
+remediless
+remedilessly
+remedy
+remedying
+remember
+rememberability
+rememberable
+remembered
+rememberer
+remembering
+remembers
+remembrance
+remembrance's
+remembrancer
+remembrances
+rememorize
+rememorizes
+Remex
+remigial
+remilitarization
+remilitarize
+remind
+reminded
+reminder
+reminders
+remindful
+reminding
+reminds
+remineralization
+remineralization's
+remineralizations
+remineralize
+remineralizes
+Remington
+reminisce
+reminisced
+reminiscence
+reminiscence's
+reminiscences
+reminiscent
+reminiscential
+reminiscently
+reminisces
+reminiscing
+remint
+remise
+remised
+remising
+remiss
+remissible
+remissibly
+remission
+remissions
+remissly
+remissness
+remit
+remitment
+remits
+remittable
+remittal
+remittance
+remittances
+remitted
+remittee
+remittent
+remittently
+remitter
+remitting
+remix
+remixed
+remixes
+remixing
+remnant
+remnant's
+remnants
+remobilization
+remobilization's
+remobilizations
+remobilize
+remobilizes
+remodel
+remodeled
+remodeling
+remodels
+remodulate
+remodulated
+remodulates
+remodulating
+remodulation
+remodulator
+remodulator's
+remodulators
+remolding
+remonetization
+remonetize
+remonetized
+remonetizes
+remonetizing
+remonstrance
+remonstrant
+remonstrantly
+remonstrate
+remonstrated
+remonstrates
+remonstrating
+remonstration
+remonstrative
+remonstratively
+remonstrator
+remontant
+remontoir
+remora
+remorse
+remorseful
+remorsefully
+remorsefulness
+remorseless
+remorselessly
+remorselessness
+remote
+remotely
+remoteness
+remotest
+remotion
+remould
+remoulded
+remoulding
+remoulds
+remount
+remounting
+removability
+removable
+removableness
+removably
+removal
+removal's
+removalist
+removals
+remove
+removed
+remover
+removes
+removing
+remscheid
+remunerate
+remunerated
+remunerates
+remunerating
+remuneration
+remunerations
+remunerative
+remuneratively
+remunerativeness
+remunerator
+remuneratory
+Remus
+remus
+Remy
+Rena
+Rena's
+renaissance
+renal
+rename
+renamed
+renames
+renaming
+Renardy
+renascence
+renascent
+renaturation
+renature
+renatured
+renatures
+renaturing
+Renault
+Renault's
+Renaults
+rencounter
+rend
+render
+renderable
+rendered
+renderer
+rendering
+renderings
+renders
+rendezvous
+rendezvoused
+rendezvouses
+rendezvousing
+rending
+rendition
+rendition's
+renditions
+rends
+rendzina
+Rene
+Rene's
+Renee
+Renee's
+renegade
+renegades
+renegado
+renege
+reneged
+reneger
+reneges
+reneging
+renegotiable
+renegotiate
+renegotiated
+renegotiates
+renegotiation
+renew
+renewability
+renewable
+renewably
+renewal
+renewals
+renewed
+renewer
+renewing
+renews
+Renfrew
+reni
+reniform
+renig
+renigged
+renigging
+renin
+renitency
+renitent
+rennes
+rennet
+rennin
+reno
+renographic
+renography
+Renoir
+renominate
+renominated
+renominates
+renominating
+renomination
+renormalization
+renormalize
+renormalized
+renormalizes
+renormalizing
+renounce
+renounced
+renouncement
+renouncer
+renounces
+renouncing
+renovate
+renovated
+renovates
+renovation
+renovator
+renown
+renowned
+Rensselaer
+Rensselaer's
+Rensselaerite
+rent
+rentability
+rentable
+rental
+rental's
+rentals
+rente
+rented
+renter
+renter's
+renters
+rentier
+renting
+rents
+renumber
+renumbered
+renumbering
+renumbers
+renumeration
+renunciate
+renunciation
+renunciations
+renunciative
+renunciatory
+Renville
+renvoi
+reobjectivization
+reobjectivization's
+reobjectivizations
+reobjectivize
+reobjectivizes
+reoccupy
+reoccur
+reoccurrence
+reopen
+reopened
+reopening
+reopens
+reorder
+reordered
+reordering
+reorders
+reorganization
+reorganization's
+reorganizational
+reorganizationist
+reorganizationist's
+reorganizationists
+reorganizations
+reorganize
+reorganized
+reorganizer
+reorganizers
+reorganizes
+reorganizing
+reorient
+reorientate
+reorientated
+reorientates
+reorientating
+reorientation
+reoriented
+reoxidize
+reoxidizes
+reoxygenize
+reoxygenizes
+rep
+repack
+repackage
+repackaged
+repackager
+repackages
+repackaging
+repacked
+repacker
+repacking
+repacks
+repaganization
+repaganization's
+repaganizations
+repaganize
+repaganizer
+repaganizers
+repaganizes
+repaid
+repaint
+repainted
+repainter
+repainters
+repainting
+repaints
+repair
+repairability
+repairable
+repaired
+repairer
+repairers
+repairing
+repairman
+repairmen
+repairs
+repand
+reparable
+reparation
+reparation's
+reparations
+reparative
+repartee
+repartition
+repartitioned
+repartitioner
+repartitioners
+repartitioning
+repartitions
+repass
+repassage
+repassivation
+repast
+repast's
+repasts
+repatriate
+repatriated
+repatriates
+repatriating
+repatriation
+repatriations
+repatronize
+repatronizes
+repaving
+repay
+repayable
+repaying
+repayment
+repayments
+repays
+repeal
+repealable
+repealed
+repealer
+repealing
+repeals
+repeat
+repeatability
+repeatable
+repeated
+repeatedly
+repeater
+repeaters
+repeating
+repeats
+repechage
+repel
+repellant
+repelled
+repellency
+repellent
+repellently
+repeller
+repelling
+repels
+repent
+repentance
+repentant
+repentantly
+repented
+repenter
+repenting
+repents
+repercussion
+repercussion's
+repercussions
+repercussive
+repersonalize
+repertoire
+repertory
+repetend
+repetition
+repetition's
+repetitional
+repetitions
+repetitious
+repetitiously
+repetitiousness
+repetitive
+repetitively
+repetitiveness
+rephosphorization
+rephosphorization's
+rephosphorizations
+rephosphorize
+rephosphorizes
+rephrase
+rephrased
+rephrases
+rephrasing
+repine
+repined
+repiner
+repining
+replace
+replaceable
+replaced
+replacement
+replacement's
+replacements
+replacer
+replaces
+replacing
+replant
+replanted
+replay
+replayed
+replaying
+replays
+repleader
+replenish
+replenished
+replenisher
+replenishes
+replenishing
+replenishment
+replenishments
+replete
+repleteness
+repletion
+repleviable
+replevied
+replevies
+replevin
+replevy
+replica
+replica's
+replicable
+replicas
+replicate
+replicated
+replicates
+replicating
+replication
+replications
+replicative
+replicator
+replicators
+replied
+replier
+replies
+reply
+replying
+repoint
+repolymerization
+repolymerization's
+repolymerizations
+repolymerize
+repolymerizes
+repone
+repopularize
+report
+reportable
+reportage
+reported
+reportedly
+reporter
+reporters
+reporting
+reportorial
+reportorially
+reports
+reposal
+repose
+reposed
+reposeful
+reposefully
+reposefulness
+reposes
+reposing
+reposit
+reposited
+repositing
+reposition
+repositioned
+repositioning
+repositions
+repositories
+repository
+repository's
+repossess
+repossession
+repost
+reposted
+reposter
+reposting
+repostings
+reposts
+repot
+repower
+reprehend
+reprehensibility
+reprehensible
+reprehensibleness
+reprehensibly
+reprehension
+reprehensive
+represent
+representable
+representably
+representation
+representation's
+representational
+representationalism
+representationalist
+representationally
+representations
+representative
+representatively
+representativeness
+representatives
+representativity
+represented
+representer
+representing
+represents
+repress
+repressed
+represses
+repressibility
+repressible
+repressing
+repression
+repression's
+repressionist
+repressions
+repressive
+repressively
+repressiveness
+repressor
+reprieval
+reprieve
+reprieved
+reprieves
+reprieving
+reprimand
+reprimanded
+reprint
+reprinted
+reprinter
+reprinting
+reprints
+reprisal
+reprisal's
+reprisals
+reprise
+reprised
+reprising
+repristinate
+repristination
+reprivatization
+reprivatization's
+reprivatizations
+reprivatize
+reprivatizes
+repro
+reproach
+reproachable
+reproached
+reproacher
+reproaches
+reproachful
+reproachfully
+reproachfulness
+reproaching
+reproachingly
+reprobance
+reprobate
+reprobates
+reprobating
+reprobation
+reprobative
+reprobatory
+reprocess
+reprocessable
+reprocessed
+reprocesses
+reprocessor
+reproduce
+reproduced
+reproducer
+reproducers
+reproduces
+reproducibilities
+reproducibility
+reproducible
+reproducibly
+reproducing
+reproduction
+reproduction's
+reproductions
+reproductive
+reproductively
+reproductivity
+reprogram
+reprogrammed
+reprogrammer
+reprogrammer's
+reprogrammers
+reprogramming
+reprograms
+reprography
+reproof
+repros
+reprove
+reproved
+reprover
+reproving
+reprovingly
+reps
+reptant
+reptile
+reptile's
+reptiles
+reptilian
+republic
+republic's
+republican
+republican's
+republicanism
+republicanization
+republicanization's
+republicanizations
+republicanize
+republicanized
+republicanizer
+republicanizers
+republicanizes
+republicanizing
+republicans
+republication
+republics
+republish
+republished
+republisher
+republisher's
+republishers
+republishes
+republishing
+repudiate
+repudiated
+repudiates
+repudiating
+repudiation
+repudiationist
+repudiations
+repudiator
+repugn
+repugnance
+repugnancy
+repugnant
+repugnantly
+repulse
+repulsed
+repulses
+repulsing
+repulsion
+repulsions
+repulsive
+repulsively
+repulsiveness
+repulverize
+repulverizes
+reputability
+reputable
+reputably
+reputation
+reputation's
+reputations
+repute
+reputed
+reputedly
+reputes
+reputing
+req
+request
+requested
+requester
+requesters
+requesting
+requestioned
+requestioner
+requestor
+requests
+requiem
+requiem's
+requiems
+requiescat
+requin
+require
+required
+requirement
+requirement's
+requirements
+requirer
+requires
+requiring
+requisite
+requisiteness
+requisites
+requisition
+requisitioned
+requisitioner
+requisitioning
+requisitions
+requital
+requite
+requited
+requiter
+requiting
+reradiate
+reradiation
+reran
+reread
+rereading
+rereads
+reredos
+reremouse
+rereward
+reroute
+rerouted
+rerouter
+rerouters
+reroutes
+reroutings
+reroyalize
+reroyalizes
+rerun
+rerunning
+reruns
+res
+resail
+resalable
+resale
+resample
+resampling
+resaturate
+resaturated
+resaturates
+resaturating
+resaturation
+rescale
+rescaled
+rescaling
+rescan
+rescanned
+rescanning
+rescans
+reschedule
+rescheduled
+rescheduler
+reschedules
+rescheduling
+rescind
+rescinded
+rescinder
+rescindment
+rescissible
+rescission
+rescissory
+rescript
+rescue
+rescued
+rescuer
+rescuers
+rescues
+rescuing
+resealed
+research
+researchable
+researched
+researcher
+researcher's
+researchers
+researches
+researching
+researchist
+reseat
+reseau
+resect
+resectability
+resectable
+resection
+reseed
+reselect
+reselected
+reselecting
+reselection
+reselects
+resell
+reseller
+resellers
+reselling
+resells
+resemblance
+resemblance's
+resemblances
+resemblant
+resemble
+resembled
+resembles
+resembling
+resend
+resending
+resends
+resensitization
+resensitization's
+resensitizations
+resensitize
+resensitizes
+resent
+resented
+resentful
+resentfully
+resentfulness
+resenting
+resentment
+resents
+resepulcher
+resepulchers
+resequence
+resequenced
+reserpine
+reservation
+reservation's
+reservations
+reserve
+reserved
+reservedly
+reservedness
+reserver
+reserves
+reserving
+reservist
+reservists
+reservoir
+reservoir's
+reservoirs
+reset
+reseted
+reseter
+reseting
+resets
+resettable
+resetting
+resettings
+resettle
+resettled
+resettlement
+resettles
+resettling
+reshape
+reshaped
+reshaper
+reshapes
+reshaping
+reship
+reshipment
+reshipper
+reshuffle
+reside
+resided
+residence
+residence's
+residences
+residency
+resident
+resident's
+residential
+residentially
+residentiary
+residents
+resider
+resides
+residing
+residua
+residual
+residually
+residuals
+residuary
+residue
+residue's
+residues
+residuum
+resifted
+resign
+resignation
+resignation's
+resignations
+resigned
+resignedly
+resignedness
+resigner
+resigning
+resigns
+resile
+resiled
+resilience
+resiliency
+resilient
+resiliently
+resiling
+resin
+resin's
+resinate
+resined
+resiniferous
+resinify
+resining
+resinize
+resinizes
+resinlike
+resinoid
+resinous
+resins
+resiny
+resipiscence
+resist
+resistable
+resistance
+resistances
+resistant
+resistantly
+resisted
+resistencia
+resister
+resistibility
+resistible
+resistibly
+resisting
+resistive
+resistively
+resistiveness
+resistivity
+resistless
+resistlessly
+resistlessness
+resistor
+resistor's
+resistors
+resists
+resit
+resitting
+resize
+resized
+resizes
+resizing
+resnais
+resnatron
+Resnik
+resojet
+resold
+resole
+resolemnize
+resolemnizes
+resoluble
+resolute
+resolutely
+resoluteness
+resolution
+resolutions
+resolutive
+resolvable
+resolve
+resolved
+resolvent
+resolver
+resolvers
+resolves
+resolving
+resonance
+resonances
+resonant
+resonantly
+resonate
+resonated
+resonates
+resonating
+resonator
+resonators
+resorb
+resorcinol
+resorption
+resorptive
+resort
+resorted
+resorter
+resorting
+resorts
+resound
+resounding
+resoundingly
+resounds
+resource
+resource's
+resourced
+resourceful
+resourcefully
+resourcefulness
+resources
+resourcing
+respecified
+respecifies
+respecify
+respect
+respectability
+respectable
+respectableness
+respectably
+respected
+respecter
+respectful
+respectfully
+respectfulness
+respecting
+respective
+respectively
+respectiveness
+respects
+respell
+Respighi
+respirable
+respiration
+respirational
+respirations
+respirator
+respirators
+respiratory
+respire
+respired
+respires
+respiring
+respirometer
+respirometer's
+respirometers
+respirometric
+respirometry
+respite
+respited
+respiting
+resplendence
+resplendency
+resplendent
+resplendently
+respond
+responded
+respondent
+respondent's
+respondents
+responder
+responders
+responding
+responds
+response
+responser
+responses
+responsibilities
+responsibility
+responsible
+responsibleness
+responsibly
+responsions
+responsive
+responsively
+responsiveness
+responsory
+responsum
+resrict
+ressentiment
+resses
+rest
+restage
+restandardization
+restandardization's
+restandardizations
+restandardize
+restandardizes
+restart
+restartable
+restarted
+restarter
+restarting
+restarts
+restate
+restated
+restatement
+restates
+restating
+restaurant
+restaurant's
+restauranteur
+restaurants
+restaurateur
+rested
+rester
+resterilize
+resterilizes
+restful
+restfully
+restfulness
+restiform
+restigmatize
+restigmatizes
+resting
+restitute
+restitution
+restive
+restively
+restiveness
+restless
+restlessly
+restlessness
+restock
+restorability
+restorable
+restoral
+restoration
+restoration's
+restorationism
+restorations
+restorative
+restoratively
+restorativeness
+restore
+restored
+restorer
+restorers
+restores
+restoring
+restrain
+restrainable
+restrained
+restrainedly
+restrainer
+restrainers
+restraining
+restrains
+restraint
+restraint's
+restraints
+restransmit
+restrict
+restricted
+restrictedly
+restricting
+restriction
+restriction's
+restrictionism
+restrictionist
+restrictions
+restrictive
+restrictively
+restrictiveness
+restricts
+restrike
+restroom
+restroom's
+restrooms
+restructurability
+restructure
+restructured
+restructures
+restructuring
+rests
+restudy
+resubmission
+resubmit
+resubmits
+resubmitted
+resubmitting
+result
+resultant
+resultantly
+resultants
+resulted
+resultful
+resultfulness
+resulting
+resultless
+results
+resumable
+resume
+resumed
+resumes
+resuming
+resumption
+resumption's
+resumptions
+resupinate
+resupination
+resupine
+resupplied
+resupplier
+resupplier's
+resuppliers
+resupplies
+resupply
+resupply's
+resupplying
+resurface
+resurfaced
+resurfacer
+resurfacer's
+resurfacers
+resurfaces
+resurfacing
+resurgam
+resurge
+resurged
+resurgence
+resurgent
+resurges
+resurging
+resurrect
+resurrected
+resurrecting
+resurrection
+resurrection's
+resurrectional
+resurrectionism
+resurrectionist
+resurrectionize
+resurrectionizes
+resurrections
+resurrects
+resuscitate
+resuscitated
+resuscitates
+resuscitating
+resuscitation
+resuscitative
+resuscitator
+resuscitators
+resuspended
+resuspension
+resvering
+resymbolization
+resymbolization's
+resymbolizations
+resymbolize
+resymbolizes
+resynchronization
+resynchronizations
+resynchronize
+resynchronized
+resynchronizes
+resynchronizing
+resynthesize
+resynthesizes
+ret
+retable
+retail
+retailed
+retailer
+retailers
+retailing
+retails
+retain
+retained
+retainer
+retainers
+retaining
+retainment
+retains
+retake
+retaliate
+retaliated
+retaliates
+retaliating
+retaliation
+retaliative
+retaliatory
+retard
+retardant
+retardate
+retardation
+retarded
+retarder
+retarding
+retch
+retching
+rete
+retell
+retelling
+retene
+retension
+retensioned
+retention
+retentionist
+retentions
+retentive
+retentively
+retentiveness
+retentivity
+retenue
+retest
+rethink
+rethinker
+rethinking
+rethinks
+rethought
+rethreading
+retia
+retiarius
+retiary
+reticence
+reticency
+reticent
+reticently
+reticle
+reticle's
+reticles
+reticular
+reticulate
+reticulated
+reticulately
+reticulates
+reticulating
+reticulation
+reticule
+reticulocyte
+reticulocytic
+reticulose
+reticulum
+retied
+retiform
+retina
+retina's
+retinacular
+retinaculum
+retinae
+retinal
+retinas
+retinene
+retinite
+retinitis
+retinize
+retinizes
+retinol
+retinopathy
+retinoscopy
+retinospora
+retinue
+retinues
+retinula
+retinular
+retirant
+retire
+retired
+retiredly
+retiredness
+retiree
+retirement
+retirement's
+retirements
+retires
+retiring
+retiringly
+retiringness
+retitled
+retold
+retool
+retorsion
+retort
+retorted
+retorting
+retortion
+retorts
+retot
+retouch
+retoucher
+retouching
+retrace
+retraced
+retraces
+retracing
+retract
+retractable
+retracted
+retractile
+retractility
+retracting
+retraction
+retractions
+retractor
+retractor's
+retractors
+retracts
+retrain
+retrainable
+retrained
+retrainee
+retraining
+retrains
+retral
+retrally
+retranquilize
+retranquilizes
+retranslated
+retransmission
+retransmission's
+retransmissions
+retransmit
+retransmits
+retransmitted
+retransmitting
+retread
+retreaded
+retreading
+retreat
+retreatant
+retreated
+retreater
+retreating
+retreats
+retrench
+retrenching
+retrenchment
+retrial
+retributed
+retribution
+retributive
+retributively
+retributory
+retried
+retrier
+retriers
+retries
+retrievability
+retrievable
+retrieval
+retrieval's
+retrievals
+retrieve
+retrieved
+retriever
+retrievers
+retrieves
+retrieving
+retro
+retroact
+retroaction
+retroactive
+retroactively
+retroactivity
+retrocede
+retrocession
+retrochoir
+retrodiction
+retrofire
+retrofit
+retrofitted
+retrofitting
+retroflection
+retroflex
+retroflexed
+retroflexion
+retrogradation
+retrogradations
+retrograde
+retrogradely
+retrograding
+retrogress
+retrogression
+retrogressive
+retrogressively
+retroject
+retrolental
+retrolingual
+retropack
+retroperitoneal
+retroperitoneally
+retroreflection
+retroreflective
+retroreflector
+retrorocket
+retrorse
+retrorsely
+retroserrate
+retrospect
+retrospection
+retrospective
+retrospectively
+retroversion
+retrovision
+retry
+retrying
+rets
+retsina
+retted
+retting
+return
+returnable
+returned
+returnee
+returnee's
+returnees
+returner
+returners
+returning
+returns
+retuse
+retype
+retyped
+retypes
+retyping
+Reub
+Reub's
+Reuben
+reuchlin
+reunification
+reunify
+reunion
+Reunion
+reunion's
+reunionist
+reunionistic
+reunions
+reunite
+reunited
+reuniting
+reupholstering
+reus
+reusable
+reuse
+reused
+reuses
+reusing
+reuter
+Reuters
+Reuther
+reutilization
+reutilize
+reutilizes
+reutlingen
+Rev
+rev
+reval
+revalidate
+revalidated
+revalidates
+revalidating
+revalidation
+revalorization
+revalorization's
+revalorizations
+revalorize
+revalorized
+revalorizes
+revalorizing
+revaluate
+revaluation
+revalue
+revalued
+revalues
+revamp
+revamped
+revamping
+revamps
+revanche
+revanchism
+revanchist
+revaporization
+revaporization's
+revaporizations
+revaporize
+revaporizes
+reveal
+revealable
+revealed
+revealer
+revealing
+revealment
+reveals
+revegetate
+revegetation
+revehent
+reveille
+reveilles
+revel
+revelation
+revelation's
+revelationist
+revelationize
+revelationizes
+revelations
+revelator
+revelatory
+reveled
+reveler
+revelers
+reveling
+revelings
+revelry
+revels
+revenant
+revenge
+revenge's
+revenged
+revengeful
+revengefully
+revengefulness
+revenger
+revenges
+revenging
+revenue
+revenuer
+revenuers
+revenues
+rever
+reverb
+reverberant
+reverberantly
+reverberate
+reverberated
+reverberation
+reverberations
+reverberative
+reverberator
+reverberatory
+revere
+revered
+reverence
+reverencer
+reverend
+reverend's
+reverends
+reverent
+reverential
+reverentially
+reverently
+reveres
+reverie
+reveries
+reverified
+reverifies
+reverify
+reverifying
+revering
+revers
+reversal
+reversal's
+reversals
+reverse
+reversed
+reversely
+reverser
+reverses
+reversi
+reversibility
+reversible
+reversibly
+reversing
+reversion
+reversional
+reversionary
+reversioner
+reversions
+reverso
+revert
+reverted
+reverter
+revertible
+reverting
+revertive
+reverts
+revery
+revest
+revet
+revetment
+revetments
+revetted
+revetting
+revictual
+review
+reviewed
+reviewer
+reviewers
+reviewing
+reviews
+revile
+reviled
+revilement
+reviler
+reviling
+revisable
+revisal
+revise
+revised
+reviser
+revises
+revising
+revision
+revision's
+revisionary
+revisionism
+revisionist
+revisionists
+revisions
+revisit
+revisited
+revisiting
+revisits
+revisor
+revisory
+revisualization
+revisualization's
+revisualizations
+revisualize
+revisualizes
+revitalization
+revitalization's
+revitalizations
+revitalize
+revitalized
+revitalizer
+revitalizers
+revitalizes
+revitalizing
+revivable
+revival
+revival's
+revivalism
+revivalist
+revivalistic
+revivalists
+revivalize
+revivalizes
+revivals
+revive
+revived
+reviver
+revives
+revivification
+revivified
+revivify
+reviving
+reviviscence
+reviviscent
+revocable
+revocation
+revocations
+revoice
+revokable
+revoke
+revoked
+revoker
+revokes
+revoking
+revolatilize
+revolatilizes
+revolt
+revolted
+revolter
+revolting
+revoltingly
+revolts
+revoluable
+revolute
+revolution
+revolution's
+revolutionaries
+revolutionarily
+revolutionariness
+revolutionary
+revolutionary's
+revolutionibus
+revolutionist
+revolutionists
+revolutionize
+revolutionized
+revolutionizement
+revolutionizement's
+revolutionizements
+revolutionizer
+revolutionizers
+revolutionizes
+revolutionizing
+revolutions
+revolvable
+revolve
+revolved
+revolver
+revolvers
+revolves
+revolving
+revs
+revue
+revues
+revulsed
+revulsion
+revulsive
+revved
+revving
+rew
+rewake
+rewaken
+reward
+rewardable
+rewarded
+rewarder
+rewarding
+rewardingly
+rewards
+rewind
+rewinded
+rewinder
+rewinding
+rewinds
+rewire
+rewired
+rewires
+rewiring
+reword
+reworded
+rewording
+rewording's
+rewordings
+rewords
+rework
+reworked
+reworking
+reworks
+rewound
+rewrite
+rewriter
+rewrites
+rewriting
+rewritings
+rewritten
+rewrote
+Rex
+rexine
+rexroth
+rey
+Reykjavik
+Reykjavik's
+reynard
+reynaud
+Reynolds
+reynosa
+rezone
+RFI
+rhabdom
+rhabdomancy
+rhabdome
+rhabdomere
+rhabdomyoma
+rhachis
+rhadamanthine
+Rhadamanthus
+rhaetia
+Rhaetian
+Rhaetic
+rhamnaceous
+rhamnose
+rhamnus
+rhaphe
+rhapsodic
+rhapsodical
+rhapsodically
+rhapsodist
+rhapsodize
+rhapsodized
+rhapsodizes
+rhapsodizing
+rhapsody
+rhatany
+Rhea
+rhebok
+rhee
+Rheims
+rheims
+rhein
+Rheinholdt
+rheinholdt
+Rheinland
+Rhemish
+Rhenish
+rhenium
+rheobase
+rheological
+rheologically
+rheologist
+rheology
+rheometer
+rheometer's
+rheometers
+rheophile
+rheophilic
+rheostat
+rheostatic
+rheostats
+rheotaxis
+rheotropism
+rhesus
+rhet
+rhetic
+rhetor
+rhetoric
+rhetorical
+rhetorically
+rhetoricalness
+rhetorician
+rhetoricians
+rheum
+rheumatic
+rheumatically
+rheumatics
+rheumatism
+rheumatiz
+rheumatoid
+rheumatologist
+rheumatology
+rheumy
+rheydt
+rhigolene
+rhinal
+Rhine
+Rhineland
+rhinelander
+Rhinelander
+rhinencephalic
+rhinencephalon
+rhinestone
+rhinestones
+rhinitis
+rhino
+rhinoceros
+rhinocerotic
+rhinolaryngology
+rhinology
+rhinopharyngitis
+rhinoplasty
+rhinos
+rhinoscopy
+rhinosporidium
+rhinotracheitis
+rhinovirus
+rhizanthous
+rhizobium
+rhizocarpic
+rhizocarpous
+rhizocephalan
+rhizocephalid
+rhizoctonia
+rhizogenesis
+rhizogenetic
+rhizogenic
+rhizoid
+rhizoidal
+rhizomatous
+rhizome
+rhizomic
+rhizomorph
+rhizomorphous
+rhizoplane
+rhizopod
+rhizopodal
+rhizopodous
+rhizopus
+rhizosphere
+rhizotomy
+rho
+Rhoda
+Rhoda's
+rhodamine
+Rhode
+Rhodes
+Rhodesia
+Rhodesian
+Rhodesoid
+Rhodian
+rhodic
+rhodinal
+rhodium
+rhodochrosite
+rhododendron
+rhododendrons
+rhodolite
+rhodomontade
+rhodonite
+Rhodope
+rhodoplast
+rhodopsin
+rhodora
+rhodos
+rhomb
+rhombencephalon
+rhombi
+rhombic
+rhombohedral
+rhombohedron
+rhomboid
+rhomboidal
+rhomboideus
+rhombs
+rhombus
+rhombuses
+rhonchi
+rhonchus
+Rhonda
+rhotacism
+rhotic
+rhubarb
+rhumb
+rhumba
+rhumbatron
+rhumbs
+rhus
+rhuses
+rhyme
+rhymed
+rhymer
+rhymes
+rhymester
+rhyming
+rhynchocephalian
+rhyolite
+rhyolitic
+rhythm
+rhythm's
+rhythmic
+rhythmical
+rhythmically
+rhythmicity
+rhythmicize
+rhythmicizes
+rhythmics
+rhythmist
+rhythmizable
+rhythmizable's
+rhythmizables
+rhythmization
+rhythmization's
+rhythmizations
+rhythmize
+rhythmizes
+rhythms
+rhytidome
+rhyton
+ri
+RI
+ria
+rial
+rialto
+riant
+riantly
+riata
+rib
+rib's
+ribald
+ribaldry
+riband
+ribas
+ribband
+ribbed
+ribbentrop
+ribber
+ribbing
+ribble
+ribbon
+ribbon's
+ribbonfish
+ribbonlike
+ribbons
+ribbonwood
+ribby
+ribera
+ribgrass
+riblet
+riboflavin
+ribonuclease
+ribonucleic
+ribonucleoprotein
+ribonucleoside
+ribonucleotide
+ribose
+ribosomal
+ribosome
+ribosomes
+ribs
+ribwort
+ribworts
+Rica
+Rican
+Ricanism
+Ricans
+ricardo
+Ricci
+ricci
+Ricciarelli
+riccio
+rice
+ricebird
+ricer
+ricercar
+ricercare
+rices
+rich
+Richard
+Richard's
+Richards
+Richardson
+richelieu
+richen
+richened
+richening
+richer
+richert
+riches
+richest
+richey
+Richey
+Richfield
+richland
+Richland
+richly
+richment
+Richmond
+richness
+Richter
+richthofen
+rici
+ricin
+ricinoleic
+ricinus
+Rick
+Rick's
+rickards
+Rickenbaugh
+rickenbaugh
+rickets
+rickettsia
+rickettsial
+rickety
+rickey
+rickeys
+rickrack
+ricksha
+rickshaw
+rickshaw's
+rickshaws
+Rico
+ricochet
+ricocheted
+ricocheting
+ricochets
+ricotta
+rictal
+rictus
+rid
+ridable
+riddance
+ridded
+ridden
+ridder
+ridding
+riddle
+riddled
+riddler
+riddles
+riddling
+ride
+rideable
+rident
+rider
+rider's
+riderless
+riders
+rides
+ridge
+ridge's
+ridged
+Ridgefield
+ridgeling
+ridgepole
+ridges
+ridgetree
+ridgeway
+ridging
+ridgling
+Ridgway
+ridgy
+ridicule
+ridiculed
+ridiculer
+ridicules
+ridiculing
+ridiculize
+ridiculizes
+ridiculous
+ridiculously
+ridiculousness
+riding
+ridings
+ridley
+ridotto
+ridpath
+rids
+riefenstahl
+riegger
+riel
+Riemann
+Riemannian
+riempie
+rien
+rienzi
+rier
+Riesling
+rife
+rifely
+riff
+riffle
+riffled
+riffler
+riffles
+riffling
+riffraff
+rification
+rifice
+rificer
+rifle
+riflebird
+rifled
+rifleman
+riflemen
+rifler
+riflery
+rifles
+riflescope
+rifling
+rift
+rifying
+rig
+rig's
+Riga
+rigadoon
+rigamarole
+rigatoni
+rigaudon
+Rigel
+Rigel's
+rigged
+rigger
+riggers
+rigging
+Riggs
+right
+rightable
+righted
+righten
+righteous
+righteously
+righteousness
+righter
+rightful
+rightfully
+rightfulness
+righthand
+righthanded
+righting
+rightish
+rightism
+rightist
+rightly
+rightmost
+rightness
+righto
+rights
+rightward
+rightwards
+rightwinger
+rightwingers
+rigi
+rigid
+rigidification
+rigidify
+rigidities
+rigidity
+rigidly
+rigidness
+rigil
+rigmarole
+rigmaroles
+rigor
+rigor's
+rigorism
+rigorism's
+rigorisms
+rigorist
+rigorist's
+rigoristic
+rigoristics
+rigorists
+rigorous
+rigorously
+rigorousness
+rigors
+rigs
+Rigsdaler
+Rijeka
+Rijksdaaler
+Rijn
+Rijswijk
+Riksdag
+rile
+Riley
+riling
+Rilke
+rilke
+rill
+rille
+rillet
+rilly
+rim
+rim's
+rimbaud
+rime
+rimer
+rimester
+rimier
+riming
+Rimini
+rimland
+rimless
+rimmed
+rimming
+rimose
+rimous
+rimrock
+rims
+Rimsky
+rimu
+rimy
+rin
+rinascimento
+rind
+rind's
+rinded
+rinderpest
+rinds
+Rinehart
+rinforzando
+ring
+ringbark
+ringbolt
+ringbolts
+ringbone
+ringboned
+ringdove
+ringed
+ringel
+ringent
+ringer
+ringers
+ringgit
+ringhals
+ringing
+ringinglow
+ringingly
+ringings
+ringleader
+ringleaders
+ringlet
+ringlets
+ringlike
+ringmaster
+ringmasters
+ringneck
+ringolade
+rings
+ringside
+ringsiders
+ringster
+ringstraked
+ringtail
+ringtaw
+ringtoss
+ringworm
+ringworms
+rink
+rinker
+rinse
+rinsed
+rinser
+rinses
+rinsing
+Rio
+Riordan
+Riordan's
+riot
+rioted
+rioter
+rioters
+rioting
+riotous
+riotously
+riotousness
+riots
+rip
+riparian
+ripcord
+ripe
+ripely
+ripen
+ripened
+ripener
+ripeness
+ripening
+ripens
+riper
+ripest
+ripieno
+Ripley
+ripoff
+ripoff's
+ripoffs
+ripon
+riposte
+ripped
+ripper
+ripping
+ripple
+rippled
+rippler
+ripples
+ripplet
+rippling
+riprap
+rips
+ripsaw
+ripsnorter
+ripsnorting
+riptide
+Ripuarian
+RISC
+rise
+risen
+riser
+risers
+rises
+risibility
+risible
+risibles
+rising
+risings
+risk
+risked
+risker
+riskier
+riskiness
+risking
+risks
+risky
+risorgimento
+risotto
+Riss
+rissole
+risus
+rit
+ritard
+ritardando
+Ritchie
+Ritchie's
+rite
+rite's
+rited
+ritenuto
+rites
+ritornello
+Ritter
+ritual
+ritualism
+ritualist
+ritualistic
+ritualistically
+ritualization
+ritualize
+ritualized
+ritualizes
+ritualizing
+ritually
+rituals
+Ritz
+ritzier
+ritziness
+ritzy
+rivage
+rival
+rivaled
+rivaless
+rivalesses
+rivaling
+rivalize
+rivalizes
+rivalries
+rivalrous
+rivalry
+rivalry's
+rivals
+rive
+rived
+riven
+river
+river's
+Rivera
+riverbank
+riverbanks
+riverbed
+riverboat
+riverfront
+riverine
+rivers
+riverside
+Riverview
+riverview
+riverward
+riverwards
+riverweed
+rivet
+riveted
+riveter
+riveting
+rivets
+Riviera
+riving
+rivulet
+rivulet's
+rivulets
+Riyadh
+riyal
+rizal
+rizzio
+RMS
+RNA
+roach
+roaches
+road
+road's
+roadability
+roadbed
+roadbeds
+roadblock
+roadblocks
+roadholding
+roadhouse
+roadhouses
+roadless
+roadroller
+roadrollers
+roadrunner
+roadrunners
+roads
+roadside
+roadsides
+roadstead
+roadster
+roadster's
+roadsters
+roadway
+roadway's
+roadways
+roadwork
+roadworks
+roadworthiness
+roadworthy
+roam
+roamed
+roamer
+roaming
+roams
+roan
+Roanoke
+roar
+roared
+roarer
+roaring
+roaringest
+roars
+roast
+roasted
+roaster
+roasting
+roasts
+rob
+robalo
+roband
+robbed
+robben
+robber
+robber's
+robberies
+robbers
+robbery
+robbery's
+robbia
+robbie
+Robbie
+robbing
+Robbins
+robe
+robed
+Robert
+Robert's
+Roberta
+Roberto
+Roberts
+Robertson
+Robertsons
+robes
+Robeson
+Robespierre
+robin
+robin's
+robing
+robins
+Robinson
+Robinson's
+Robinsonville
+roble
+roborant
+robot
+robot's
+robotic
+robotics
+robotism
+robotization
+robotization's
+robotizations
+robotize
+robotizes
+robots
+robs
+Robson
+robust
+robustious
+robustiously
+robustiousness
+robustly
+robustness
+roc
+roca
+rocaille
+rocambole
+Rocco
+Rochberg
+Rochdale
+Rochelle
+Rochester
+Rochester's
+rochet
+Rochford
+rock
+rockabilly
+rockabye
+Rockaway
+rockaway
+rockaways
+Rockaways
+rockbound
+rocked
+Rockefeller
+rocker
+rockers
+rockery
+rocket
+rocket's
+rocketed
+rocketeer
+rocketing
+rocketry
+rockets
+rockettes
+rockfish
+Rockford
+Rockhampton
+rockier
+rockies
+rockiness
+rocking
+Rockingham
+Rockland
+rocklike
+rockling
+rockoon
+rockrose
+rocks
+rockshaft
+rockskipper
+Rockville
+rockweed
+Rockwell
+rocky
+rococo
+rod
+rod's
+rodder
+rodding
+rode
+rodent
+rodenticide
+rodents
+rodeo
+rodeos
+rodeph
+Rodgers
+Rodin
+rodless
+rodlike
+Rodney
+Rodney's
+rodomontade
+Rodrigo
+Rodriguez
+rods
+Rodzinski
+roe
+roebuck
+roebucks
+roemer
+roentgen
+roentgenize
+roentgenogram
+roentgenogram's
+roentgenograms
+roentgenograph
+roentgenographic
+roentgenographically
+roentgenography
+roentgenologic
+roentgenological
+roentgenologically
+roentgenologist
+roentgenology
+roentgenopaque
+roentgenoscope
+roentgenoscopic
+roentgenoscopy
+roentgenotherapy
+roes
+roeselare
+Roethke
+roff
+rogation
+rogatory
+Roger
+Roger's
+Rogers
+roget
+rogue
+rogue's
+rogueing
+roguery
+rogues
+roguing
+roguish
+roguishly
+roguishness
+roi
+roic
+roil
+roiling
+roily
+roister
+roistered
+roisterer
+roistering
+roisterous
+Rojak
+rolamite
+Roland
+role
+role's
+roles
+Rolf
+roll
+rollaway
+rollback
+rollbar
+rolled
+roller
+rollers
+rollick
+rollicking
+rollickingly
+Rollie
+rollie
+rolling
+Rollins
+rollmop
+rollmops
+rollneck
+Rollo
+rollout
+rollover
+rolls
+rollway
+rolnick
+ROM
+Roma
+Romagna
+Romaic
+romaine
+Romains
+Romaji
+Roman
+Roman's
+romance
+romanced
+romancer
+romancers
+romances
+romancing
+Romanes
+Romanesque
+Romania
+Romanic
+Romanies
+Romanism
+Romanist
+Romanization
+Romanization's
+Romanizations
+Romanize
+Romanized
+Romanizer
+Romanizers
+Romanizes
+Romanizing
+Romano
+Romanov
+Romans
+Romansch
+romantic
+romantic's
+romantically
+romanticism
+romanticist
+romanticization
+romanticize
+romanticizes
+romanticizing
+romantics
+Romany
+romanza
+romaunt
+Romberg
+Rome
+Romeldale
+Romeo
+Romeos
+Romero
+Romeros
+Romish
+Rommel
+Romney
+romp
+romped
+romper
+rompers
+romping
+romps
+romulo
+Romulus
+Ron
+Ronald
+Roncesvalles
+rondeau
+rondeaux
+rondel
+rondelet
+rondelle
+rondo
+rondos
+rondure
+rone
+roneo
+ronggeng
+Ronin
+ronnel
+Ronnie
+Ronsard
+ronyon
+roo
+rood
+roof
+roofed
+roofer
+roofers
+roofhouse
+roofing
+roofless
+rooflike
+roofline
+roofs
+rooftop
+rooftops
+rooftree
+rooinek
+rook
+rookery
+rookie
+rookies
+rooks
+rooky
+room
+roomed
+roomer
+roomers
+roomette
+roomful
+roomier
+roominess
+rooming
+roommate
+roommate's
+roommates
+rooms
+roomy
+Rooney
+rooney
+roorback
+roos
+roose
+Roosevelt
+Roosevelt's
+Rooseveltian
+roost
+rooster
+roosters
+root
+root's
+rootage
+rooted
+rootedness
+rooter
+roothold
+rooting
+rootle
+rootless
+rootlessness
+rootlet
+rootlike
+roots
+rootstalk
+rootstock
+rooty
+ropable
+rope
+ropean
+roped
+ropedancer
+ropedancing
+roper
+ropers
+ropery
+ropes
+ropewalk
+ropewalker
+ropeway
+ropework
+ropier
+ropiness
+roping
+ropy
+roque
+roquefort
+roquelaure
+Roquemore
+roquet
+roraima
+rorqual
+Rorschach
+rorschach
+rort
+Rosa
+rosabelle
+Rosabelle
+rosace
+rosaceous
+Rosalie
+Rosalind
+rosaniline
+rosarian
+rosaries
+rosario
+rosarium
+rosary
+roscius
+roscoe
+roscommon
+rose
+rose's
+roseate
+roseately
+rosebay
+roseberry
+rosebud
+rosebud's
+rosebuds
+rosebush
+rosefish
+rosehip
+Roseland
+roselike
+rosella
+Rosella
+rosemaling
+rosemary
+Rosen
+Rosenberg
+Rosenblum
+Rosenblum's
+Rosenthal
+Rosenthal's
+Rosenzweig
+Rosenzweig's
+roseola
+roseolar
+rosery
+roses
+roset
+Rosetta
+rosette
+rosettes
+rosewall
+rosewater
+rosewood
+rosh
+Rosicrucian
+Rosie
+rosie
+rosier
+rosily
+rosin
+rosinante
+rosined
+rosiness
+rosining
+rosinous
+rosinweed
+roskilde
+roslev
+rospa
+Ross
+rossetti
+Rossi
+rossi
+Rossini
+rossiya
+rossoff
+rostagno
+rostagnos
+rostand
+rostellar
+rostellate
+rostellum
+roster
+rostock
+Rostov
+rostra
+rostral
+rostrate
+Rostropovich
+rostrum
+rosulate
+roswell
+Roswell
+rosy
+rot
+rota
+rotaed
+rotameter
+rotameter's
+rotameters
+Rotarian
+Rotarians
+rotary
+rotatable
+rotate
+rotated
+rotates
+rotating
+rotation
+rotational
+rotationally
+rotations
+rotative
+rotatively
+rotator
+rotator's
+rotators
+rotatory
+ROTC
+rote
+rotenone
+rotgut
+Roth
+Rotherham
+Rothermere
+Rothesay
+rothko
+Rothschild
+Rothschild's
+roti
+rotifer
+rotisserie
+rotogravure
+rotogravures
+rotonda
+rotor
+rotorcraft
+rotors
+rotorua
+rotos
+rototill
+rots
+rotted
+rotten
+rottenly
+rottenness
+rottenstone
+rotter
+Rotterdam
+rotting
+rottosei
+rottweiler
+rotund
+rotunda
+rotundity
+rotundly
+rotundness
+roturier
+rou
+Rouault
+Roubaix
+roucou
+rouen
+rouge
+rouget
+rough
+roughage
+roughcast
+roughed
+roughen
+roughened
+roughening
+roughens
+rougher
+roughest
+roughhouse
+roughhoused
+roughhousing
+roughish
+roughleg
+roughly
+roughneck
+roughness
+roughrider
+roughriders
+roughshod
+rouging
+roulade
+rouleau
+rouleaux
+roulers
+roulette
+rouletted
+roulettes
+rouletting
+roumelia
+round
+roundabout
+roundaboutness
+rounded
+roundedness
+roundel
+roundelay
+rounder
+rounders
+roundest
+roundhead
+roundheaded
+roundheadedness
+roundhouse
+rounding
+roundish
+roundlet
+roundly
+roundness
+roundoff
+rounds
+roundsman
+roundtable
+roundup
+roundup's
+roundups
+roundwood
+roundworm
+roup
+Rourke
+rous
+rouse
+rouseabout
+roused
+rousement
+rouser
+rouses
+rousing
+Rousseau
+Rousseau's
+Roussillon
+roust
+roustabout
+rouster
+rout
+route
+routed
+routeman
+Routemarch
+router
+routers
+routes
+routeway
+routh
+routine
+routinely
+routines
+routing
+routings
+routinization
+routinization's
+routinizations
+routinize
+routinizes
+roux
+rove
+roved
+roven
+rover
+roves
+roving
+row
+Rowan
+rowboat
+rowboats
+Rowbotham
+rowdier
+rowdies
+rowdily
+rowdiness
+rowdy
+rowdyish
+rowdyism
+Rowe
+Rowe's
+rowed
+rowel
+roweled
+roweling
+rowen
+Rowena
+Rowena's
+rower
+rowers
+Rowicki
+rowing
+Rowland
+Rowland's
+Rowlandson
+Rowley
+Rowley's
+rowlock
+rowntree
+rows
+roxas
+Roxburgh
+Roxbury
+Roxbury's
+Roxy
+roxy
+Roxy's
+Roy
+Roy's
+royal
+royalism
+royalist
+royalist's
+royalists
+royalization
+royalization's
+royalizations
+royalize
+royalizes
+royally
+royalties
+royalty
+royalty's
+royaux
+Royce
+Royden
+royster
+rozella
+rozelle
+Rozelle
+Rozelle's
+Rozhdestvensky
+rozzer
+RPM
+rpt
+rRNA
+RSVP
+RSX
+RTT
+rub
+Rubaiyat
+rubasse
+rubato
+rubbed
+rubber
+rubber's
+rubberization
+rubberize
+rubberized
+rubberizes
+rubberizing
+rubberlike
+rubberneck
+rubbernecker
+rubbers
+rubbery
+rubbing
+rubbish
+rubbishes
+rubbishy
+rubble
+rubbled
+rubblework
+rubbling
+rubbra
+rubby
+rubdown
+rube
+rubefacient
+rubefy
+rubella
+rubellite
+Ruben
+Ruben's
+Rubens
+Rubenstein
+rubeola
+rubeolar
+rubes
+rubescent
+rubiaceous
+Rubicon
+rubicund
+rubicundity
+rubidium
+rubies
+rubiginous
+Rubin
+Rubin's
+rubinstein
+rubious
+ruble
+ruble's
+rubles
+rubout
+rubric
+rubrical
+rubrically
+rubricate
+rubrication
+rubricator
+rubrician
+rubricize
+rubricizes
+rubs
+rubstone
+rubus
+ruby
+ruby's
+rubythroat
+rucellai
+ruche
+ruching
+ruck
+rucksack
+ruckus
+ruction
+rudbeckia
+rudd
+rudder
+rudder's
+rudderhead
+rudderless
+rudderpost
+rudders
+rudderstock
+ruddier
+ruddily
+ruddiness
+ruddle
+ruddled
+ruddleman
+ruddling
+ruddock
+ruddy
+rude
+rudely
+rudeness
+ruder
+ruderal
+rudesbies
+rudesby
+Rudesheimer
+rudest
+rudiment
+rudiment's
+rudimental
+rudimentarily
+rudimentariness
+rudimentary
+rudiments
+rudish
+Rudolf
+Rudolf's
+Rudolph
+Rudolph's
+Rudy
+Rudyard
+Rudyard's
+rue
+rueful
+ruefully
+ruefulness
+rues
+rufescent
+ruff
+ruffe
+ruffed
+ruffian
+ruffianism
+ruffianize
+ruffianizes
+ruffianly
+ruffians
+ruffle
+ruffled
+ruffler
+ruffles
+ruffling
+ruffly
+rufous
+Rufus
+rug
+rug's
+ruga
+rugae
+rugal
+rugate
+rugby
+rugged
+ruggedization
+ruggedize
+ruggedized
+ruggedizes
+ruggedizing
+ruggedly
+ruggedness
+rugger
+ruggiero
+rugose
+rugosely
+rugosity
+rugs
+rugulose
+ruh
+Ruhr
+ruidoso
+ruin
+ruinate
+ruination
+ruination's
+ruinations
+ruined
+ruiner
+ruing
+ruining
+ruinous
+ruinously
+ruinousness
+ruins
+ruisdael
+rule
+ruled
+ruleless
+ruler
+rulers
+rulership
+rules
+ruling
+rulings
+rum
+Rumania
+Rumanian
+Rumanians
+rumba
+rumble
+rumbled
+rumbler
+rumbles
+rumbling
+rumbly
+rumbustious
+rumdum
+rumelia
+rumen
+rumens
+Rumford
+rumina
+ruminal
+ruminant
+ruminantly
+ruminants
+ruminate
+rumination
+ruminative
+ruminatively
+ruminator
+rummage
+rummaged
+rummager
+rummaging
+rummel
+Rummel
+rummer
+rummest
+rummier
+rummies
+rummy
+rumor
+rumor's
+rumored
+rumorer
+rumorer's
+rumorers
+rumoring
+rumormonger
+rumormonger's
+rumormongers
+rumors
+rump
+Rumpelstiltskin
+rumple
+rumpled
+rumples
+rumplier
+rumpling
+rumply
+rumps
+rumpus
+rumrunner
+run
+runabout
+runabouts
+runagate
+runaround
+runaway
+runaways
+runback
+runcible
+runcinate
+runcorn
+rundle
+rundlet
+rundown
+Rundstedt
+rune
+runes
+rung
+rung's
+Runge
+rungs
+runic
+runless
+runlet
+runnable
+runnel
+runnels
+runner
+runner's
+runners
+runneth
+running
+runny
+Runnymede
+runoff
+runoffs
+runout
+runouts
+runover
+runs
+runt
+runtime
+runtiness
+runtm
+runts
+runty
+runway
+runways
+Runyon
+rupee
+rupees
+Rupert
+rupiah
+rupiahs
+rupicoline
+rupicolous
+Ruppert
+ruppert
+rupture
+ruptured
+ruptures
+rupturing
+rural
+ruralist
+rurality
+ruralization
+ruralization's
+ruralizations
+ruralize
+ruralized
+ruralizes
+ruralizing
+rurally
+rurban
+Rurik
+Ruritania
+ruse
+rush
+rushall
+rushed
+rushee
+rusher
+rushes
+rushing
+rushlight
+Rushmore
+rushy
+rusk
+Ruskin
+Russ
+Russell
+russet
+russeted
+russeting
+russets
+russetting
+Russia
+Russian
+Russian's
+russianization
+Russianization's
+Russianizations
+russianize
+Russianized
+Russianizes
+Russianizing
+Russians
+russification
+russify
+Russky
+Russo
+Russo's
+Russophile
+Russophobe
+russula
+rust
+rusted
+rustic
+rustical
+rustically
+rusticate
+rusticated
+rusticates
+rusticating
+rustication
+rusticator
+rusticity
+rusticize
+rusticizes
+rustier
+rustily
+rustiness
+rusting
+rustle
+rustled
+rustler
+rustlers
+rustles
+rustling
+rustproof
+rusts
+rusty
+rut
+rut's
+rutabaga
+rutabagas
+Rutgers
+Ruth
+ruthenia
+Ruthenian
+ruthenic
+ruthenious
+ruthenium
+Rutherford
+Rutherfordium
+ruthful
+Ruthful
+Ruthfully
+Ruthfulness
+ruthless
+ruthlessly
+ruthlessness
+rutilant
+rutilated
+rutile
+Rutland
+Rutledge
+ruts
+rutted
+Rutter
+ruttier
+rutting
+ruttish
+ruttishly
+ruttishness
+rutty
+ruwenzori
+ruysdael
+ruyter
+Rwanda
+Rwanda's
+Ryan
+ryazan
+Rybinsk
+rydal
+Rydberg
+Rydberg's
+Ryder
+rye
+rye's
+ryegrass
+ryobu
+ryokan
+ryot
+Ryswick
+Ryukyu
+Ryurik
+Rzewski
+s's
+Saadi
+Saar
+Saarinen
+Saarland
+saba
+sabadell
+sabadilla
+Sabaean
+sabah
+Sabaoth
+sabatier
+sabayon
+sabbat
+Sabbatarian
+sabbath
+Sabbathize
+Sabbathizes
+sabbatic
+sabbatical
+Sabellian
+saber
+saber's
+sabered
+sabering
+saberlike
+saberlike's
+saberlikes
+sabers
+sabertooth
+sabin
+Sabina
+Sabina's
+Sabine
+sable
+sable's
+sables
+sabol
+sabot
+sabotage
+sabotaged
+sabotages
+sabotaging
+saboteur
+saboteurs
+sabra
+sabras
+sabretache
+sabulous
+sac
+sacahuiste
+sacaton
+saccade
+saccadic
+saccate
+saccharase
+saccharate
+saccharic
+saccharide
+saccharides
+saccharification
+saccharify
+saccharimeter
+saccharimeter's
+saccharimeters
+saccharimetry
+saccharin
+saccharine
+saccharinity
+saccharoid
+saccharoidal
+saccharometer
+saccharometer's
+saccharometers
+saccharomyces
+saccharose
+sacco
+saccular
+sacculate
+sacculated
+sacculates
+sacculation
+saccule
+sacculus
+sacerdotal
+sacerdotalism
+sacerdotalist
+sacerdotally
+sachem
+sachemic
+sachems
+sachet
+sacheted
+sacheverell
+Sachs
+Sachsen
+sack
+sackbut
+sackcloth
+sacked
+sacker
+sackful
+sacking
+sacks
+Sackville
+saclike
+sacque
+sacra
+sacral
+sacralization
+sacralization's
+sacralizations
+sacrament
+sacramental
+sacramentalism
+sacramentalist
+sacramentally
+Sacramentarian
+sacramentize
+sacramentizes
+Sacramento
+sacraments
+sacrarium
+sacre
+sacred
+sacredly
+sacredness
+sacrestia
+sacrifice
+sacrificed
+sacrificer
+sacrificers
+sacrifices
+sacrificial
+sacrificially
+sacrificing
+sacrilege
+sacrilegious
+sacrilegiously
+sacrilegiousnes
+sacring
+sacristan
+sacristy
+sacroiliac
+sacrosanct
+sacrosanctity
+sacrum
+sad
+sadat
+sadden
+saddened
+saddening
+saddens
+sadder
+saddest
+saddhu
+saddle
+saddlebag
+saddlebags
+saddlebill
+saddlebow
+saddlecloth
+saddled
+saddleless
+saddler
+saddlery
+saddles
+saddletree
+saddling
+Sadducee
+sade
+sadhu
+sadi
+Sadie
+sadiron
+sadism
+sadist
+sadist's
+sadistic
+sadistically
+sadists
+Sadler
+Sadler's
+sadly
+sadness
+sadomasochism
+sadomasochist
+sadomasochistic
+sadowa
+Saens
+Safar
+safari
+safe
+safecracker
+safecracking
+safeguard
+safeguarded
+safeguarding
+safeguards
+safekeeping
+safelight
+safely
+safeness
+safer
+safes
+safest
+safetied
+safeties
+safety
+safetying
+safetyman
+saffian
+safflower
+saffron
+Safi
+safid
+safranin
+safranine
+safrole
+sag
+saga
+sagacious
+sagaciously
+sagaciousness
+sagacity
+sagami
+sagamore
+sage
+sagebrush
+sagely
+sageness
+sages
+saggar
+sagged
+sagger
+sagging
+saghalien
+Saginaw
+sagitta
+sagittal
+sagittally
+Sagittarius
+sagittate
+sago
+sagos
+sags
+saguache
+saguaro
+saguenay
+saguia
+sagunto
+Sahaptin
+Sahara
+Saharan
+saharanpur
+sahib
+sahitya
+said
+saida
+saiga
+Saigon
+sail
+sailable
+sailboard
+sailboat
+sailboater
+sailboaters
+sailboating
+sailboats
+sailcloth
+sailed
+sailer
+sailfish
+sailing
+sailon
+sailor
+sailorizing
+sailorizing's
+sailorizings
+sailorly
+sailors
+sailplane
+sailplaner
+sails
+sain
+sainfoin
+sainsbury
+saint
+Saint
+saintdom
+sainted
+sainthood
+saintlike
+saintliness
+saintly
+Saintpaulia
+saints
+saintsbury
+saintship
+saipan
+saith
+saithe
+Saiva
+Sakai
+sake
+saker
+sakes
+sakhalin
+Sakharov
+saki
+sako
+saktas
+sakti
+Sakyamuni
+Sal
+salaam
+salability
+salable
+salacious
+salaciously
+salaciousness
+salad
+salad's
+salade
+saladin
+salado
+salads
+salamanca
+salamander
+salamandrine
+salambria
+salami
+salamis
+salariat
+salaried
+salaries
+salary
+salchow
+salduba
+sale
+sale's
+saleable
+saledo
+Salem
+salep
+saleratus
+Salerno
+saleroom
+sales
+salesclerk
+salesgirl
+Salesian
+saleslady
+salesman
+salesmanship
+salesmen
+salespeople
+salespeople's
+salesperson
+salesperson's
+salesroom
+saleswoman
+saleswomen
+salet
+Salford
+Salian
+salic
+salicaceous
+salicin
+salicional
+Salicornia
+salicylate
+salicylic
+salida
+salience
+saliency
+salient
+salientian
+saliently
+saliferous
+salify
+salimeter
+salimeter's
+salimeters
+Salina
+Salina's
+saline
+salinger
+salinity
+salinization
+salinize
+salinizes
+salinometer
+salinometer's
+salinometers
+salique
+Salisbury
+Salish
+saliva
+salivary
+salivate
+salivated
+salivates
+salivating
+salivation
+Salk
+Salle
+sallee
+sallet
+sallied
+sallies
+Sallinen
+sallow
+sallowish
+sallowness
+sallust
+Sally
+sally
+Sally's
+sallying
+salmagundi
+salmanazar
+salmi
+Salminen
+salmon
+salmonberries
+salmonberry
+salmonella
+salmonellosis
+salmonid
+salmonoid
+salmons
+Salol
+salometer
+salometer's
+salometers
+salon
+salon's
+Salonen
+salonika
+salons
+saloon
+saloon's
+saloonkeep
+saloonkeeper
+saloons
+saloop
+salop
+salopette
+Salpa
+salpicon
+Salpiglossis
+salpingectomy
+salpingitis
+salpinx
+salsa
+salsa's
+salsas
+salsify
+salt
+salta
+saltant
+saltarello
+saltation
+saltatorial
+saltatory
+saltbox
+saltbush
+saltcellar
+saltchuck
+saltchucker
+salted
+salter
+saltern
+salters
+saltfish
+saltier
+saltiest
+saltigrade
+saltillo
+saltily
+saltine
+saltiness
+salting
+saltire
+saltless
+saltlike
+saltness
+salto
+Salton
+saltonstall
+saltpan
+saltpeter
+saltpeter's
+saltpeters
+salts
+saltshaker
+saltus
+saltwater
+saltworks
+saltwort
+salty
+salubrious
+salubriously
+salubriousness
+salubrity
+saluki
+salutarily
+salutariness
+salutaris
+salutary
+salutation
+salutation's
+salutational
+salutations
+salutatorian
+salutatory
+salute
+saluted
+saluter
+salutes
+salutiferous
+saluting
+salutory
+salvable
+Salvador
+Salvadoran
+salvage
+salvageability
+salvageable
+salvaged
+salvager
+salvages
+salvaging
+salvation
+salvational
+salvationism
+salvationist
+Salvatore
+salvatorian
+salve
+salver
+salverform
+salves
+Salvia
+salvific
+salving
+salvo
+salvoes
+salvor
+salvos
+salween
+salyut
+Salz
+Salz's
+Salzburg
+salzgitter
+Sam
+Sam's
+samar
+samara
+samarang
+samaria
+Samaritan
+samarium
+Samarkand
+samarskite
+samba
+sambar
+Sambo
+sambre
+sambur
+same
+samekh
+sameness
+samfoo
+Samian
+samiel
+samisen
+samite
+samiti
+samizdat
+samlet
+Sammy
+Sammy's
+Samnite
+samnium
+Samoa
+Samoan
+samos
+samothrace
+samovar
+Samoyed
+samp
+sampan
+samphire
+sample
+sample's
+sampled
+sampler
+samplers
+samples
+sampling
+samplings
+Sampson
+samsara
+samshu
+Samson
+samsun
+Samuel
+Samuels
+Samuelson
+samurai
+samurai's
+samurais
+San
+Sana
+sanatarium
+sanative
+sanatoria
+sanatorium
+sanbenito
+Sanborn
+Sanborn's
+Sanchez
+Sancho
+sancta
+sanctification
+sanctified
+sanctifier
+sanctify
+sanctimonious
+sanctimoniously
+sanctimoniousness
+sanctimony
+sanction
+sanctioned
+sanctioning
+sanctions
+sanctities
+sanctitude
+sanctity
+sanctuaries
+sanctuary
+sanctuary's
+sanctum
+Sanctus
+sand
+sandakan
+sandal
+sandal's
+sandaled
+sandaling
+sandals
+sandalwood
+sandarac
+sandbag
+sandbagger
+sandbank
+sandbar
+sandbars
+sandblast
+sandblaster
+sandbox
+sandbur
+Sandburg
+sanded
+sander
+Sanderling
+sanders
+Sanderson
+sandfly
+sandglass
+sandgrouse
+sandhi
+sandhill
+sandhog
+Sandhurst
+Sandia
+sandier
+sandiness
+sanding
+sandling
+sandlot
+sandlotter
+sandman
+sandpaper
+sandpapery
+sandpile
+sandpiper
+sandpit
+Sandra
+Sandringham
+sands
+sandsoap
+sandstone
+sandstones
+sandstorm
+sandstorms
+Sandusky
+sandwich
+Sandwich
+sandwiched
+sandwiches
+sandwiching
+sandworm
+sandworms
+sandwort
+sandworts
+sandy
+sane
+sanely
+saneness
+saner
+sanest
+Sanford
+Sanforized
+sang
+sangaree
+Sanger
+sangfroid
+Sangh
+sango
+Sangraal
+sangre
+sangria
+sanguinaria
+sanguinarily
+sanguinary
+sanguine
+sanguinely
+sanguineness
+sanguineous
+sanguineum
+sanguinity
+sanguinolent
+Sanhedrin
+sanicle
+sanies
+sanious
+sanipractor
+sanitaire
+sanitarian
+sanitarily
+sanitarium
+sanitariums
+sanitary
+sanitate
+sanitation
+sanitations
+sanitization
+sanitize
+sanitized
+sanitizer
+sanitizes
+sanitizing
+sanitorium
+sanity
+Sanjak
+sank
+sankey
+Sankhya
+sankt
+sanmicheli
+sannyasi
+sans
+sansei
+sanseis
+sanserif
+sansevieria
+Sanskrit
+sanskritic
+Sanskritic
+Sanskritize
+sansom
+sansome
+sant
+Santa
+santalaceous
+santana
+santander
+Santayana
+Santee
+Santiago
+Santo
+santolina
+santonica
+santonin
+Santos
+santour
+Sao
+saorstat
+sap
+sap's
+sapajou
+sapanwood
+sapele
+saphead
+sapheaded
+saphena
+saphenous
+sapid
+sapidity
+sapience
+sapiens
+sapient
+sapiential
+sapientize
+sapientizes
+sapiently
+sapindaceous
+sapio
+sapir
+sapless
+saplessness
+sapling
+sapling's
+saplings
+sapodilla
+sapogenin
+saponaceous
+saponaceousness
+saponifiable
+saponification
+saponifier
+saponify
+saponin
+saponins
+saponite
+sapor
+saporous
+sapota
+sapotaceous
+sappanwood
+sapped
+sapper
+sapphic
+sapphira
+sapphire
+sapphirine
+sapphism
+Sappho
+Sappho's
+sappier
+sappiness
+sapping
+sapporo
+sappy
+sapraemia
+sapremia
+sapremic
+saprobe
+saprobic
+saprobically
+saprogenic
+saprogenicity
+saprolite
+sapropel
+sapropelic
+saprophagous
+saprophyte
+saprophytic
+saprophytically
+saprozoic
+saps
+sapsago
+sapsucker
+sapwood
+Sara
+saraband
+sarabande
+Saracen
+Saracen's
+Saracens
+saragossa
+Sarah
+Sarajevo
+Saran
+Sarangi
+Saransk
+sarape
+sarasate
+Sarasota
+Saratoga
+Saratov
+sarawak
+sarcasm
+sarcasm's
+sarcasms
+sarcastic
+sarcastically
+sarcenet
+sarcocarp
+sarcoid
+sarcoidosis
+sarcolemma
+sarcolemmal
+sarcoma
+sarcomatosis
+sarcomatous
+sarcomere
+sarcomeric
+sarcophagic
+sarcophagous
+sarcophagus
+sarcophagy
+sarcoplasm
+sarcoplasma
+sarcoplasmatic
+sarcoplasmic
+sarcosomal
+sarcosome
+sarcous
+Sard
+sardar
+sardegna
+sardine
+sardines
+Sardinia
+Sardinia's
+Sardinian
+Sardis
+Sardius
+sardonic
+sardonically
+sardonicism
+sardonyx
+Sardou
+sargasso
+sargassum
+sarge
+Sarge's
+Sargent
+Sargodha
+Sargon
+sari
+Sark
+Sarkis
+sarmatia
+sarmentose
+sarmi
+sarnen
+sarnia
+sarod
+sarode
+sarodist
+sarong
+sarong's
+sarongs
+saronic
+saros
+sarpanch
+sarpedon
+sarpsis
+Sarracenia
+sarraceniaceous
+sarraute
+sarre
+sarrusophone
+sarsaparilla
+Sarsen
+sarsenet
+sarsparilla
+sarthe
+sarti
+sarto
+sartor
+sartorial
+sartorially
+sartorius
+Sartre
+sarum
+sarvodaya
+Saschowa
+sasebo
+sash
+sashay
+sashayed
+sashed
+sashes
+sashimi
+sasin
+Saskatchewan
+saskatoon
+sass
+sassaby
+sassafras
+Sassanid
+sassari
+Sassenach
+sassier
+sassing
+sassoon
+sasswood
+sassy
+sastruga
+sat
+satai
+Satan
+satang
+satangs
+satanic
+satanically
+Satanism
+Satanist
+satanize
+satanizes
+satchel
+satchel's
+satchelful
+satchels
+sate
+sated
+sateen
+satellite
+satellite's
+satellites
+satellitium
+satem
+sates
+sati
+satiable
+satiate
+satiated
+satiates
+satiating
+satiation
+Satie
+satiety
+satin
+satinet
+satinflower
+sating
+satinize
+satinizes
+satinpod
+satinwood
+satiny
+satire
+satire's
+satires
+satiric
+satirical
+satirically
+satirist
+satirist's
+satirists
+satirizable
+satirizable's
+satirizables
+satirize
+satirized
+satirizer
+satirizers
+satirizes
+satirizing
+satisfaction
+satisfaction's
+satisfactions
+satisfactorily
+satisfactoriness
+satisfactory
+satisfiability
+satisfiable
+satisfied
+satisfier
+satisfiers
+satisfies
+satisfy
+satisfying
+satisfyingly
+satori
+satrap
+satrapy
+Satsuma
+saturable
+saturant
+saturate
+saturated
+saturater
+saturates
+saturating
+saturation
+saturations
+saturator
+Saturday
+Saturday's
+Saturdays
+Saturn
+saturnali
+saturnalia
+saturnalian
+saturnalianly
+Saturnian
+saturniid
+saturnine
+saturninely
+Saturnism
+saturnism
+satyagraha
+satyagrahi
+Satyanarayanan
+Satyanarayanan's
+satyr
+satyriasis
+satyric
+satyrid
+sauce
+saucebox
+saucepan
+saucepan's
+saucepans
+saucer
+saucerlike
+saucers
+sauces
+sauch
+saucier
+saucily
+sauciness
+saucing
+saucy
+Saud
+Saudi
+Sauerbaum
+sauerbraten
+sauerkraut
+sauger
+Saukville
+Saul
+Saul's
+Sault
+sauna
+sauna's
+saunas
+Saunders
+saunter
+sauntered
+saunterer
+sauntering
+saunters
+saurel
+saurian
+sauries
+saurischian
+sauropod
+saury
+sausage
+sausage's
+sausages
+saussure
+saute
+sauterne
+sauternes
+sav
+sava
+savable
+savage
+savaged
+savagely
+savageness
+savager
+savagers
+savagery
+savages
+savaging
+savagism
+savagize
+savagizes
+savaii
+savanna
+savanna's
+Savannah
+savannahs
+savannas
+savant
+savants
+savas
+savate
+save
+saveable
+saved
+saveloy
+saver
+savers
+saves
+saving
+savings
+savior
+savior's
+saviorhood
+saviorhood's
+saviorhoods
+saviors
+saviorship
+saviorship's
+saviorships
+Saviour
+savoie
+savoir
+savona
+Savonarola
+savor
+savored
+savorer
+savorer's
+savorers
+savorier
+savories
+savoriest
+savorilies
+savorily
+savoriness
+savoring
+savoringlies
+savoringly
+savorless
+savorlesses
+savorous
+savors
+savory
+savory's
+savoy
+Savoy
+Savoyard
+Savoyards
+savvied
+savvy
+savvying
+saw
+sawbelly
+sawbill
+sawbones
+sawboneses
+sawbuck
+sawder
+sawdust
+sawed
+sawer
+sawfish
+sawfly
+sawhorse
+sawing
+sawlike
+sawmill
+sawmill's
+sawmills
+sawn
+Sawney
+saws
+sawtimber
+sawtooth
+sawyer
+sax
+Saxe
+saxhorn
+saxicolous
+saxifragaceous
+saxifrage
+saxo
+Saxon
+Saxonization
+Saxonization's
+Saxonizations
+Saxonize
+Saxonizes
+Saxons
+saxons
+Saxony
+saxophone
+saxophone's
+saxophones
+saxophonic
+saxophonist
+Saxton
+saxton
+say
+sayable
+sayan
+sayer
+sayers
+saying
+sayings
+says
+sazerac
+SC
+scab
+scabbard
+scabbard's
+scabbards
+scabbed
+scabbier
+scabbing
+scabble
+scabbled
+scabbles
+scabbling
+scabby
+scabies
+scabietic
+scabiosa
+scabious
+scabrous
+scabrously
+scabrousness
+scabs
+scad
+scad's
+scads
+scafell
+scaffold
+scaffolding
+scaffoldings
+scaffolds
+scag
+scagliola
+Scala
+Scala's
+scalability
+scalable
+scalade
+scalado
+scalage
+scalar
+scalar's
+scalare
+scalariform
+scalariformly
+scalars
+scalation
+scalawag
+scald
+scalded
+scaldfish
+scalding
+scalds
+scale
+scaleboard
+scaled
+scaleless
+scalelike
+scalene
+scalenus
+scalepan
+scaler
+scalers
+scales
+scalier
+scaliger
+scaliness
+scaling
+scalings
+scall
+scallion
+scallop
+scalloped
+scalloper
+scalloping
+scallopini
+scallops
+scallywag
+scallywags
+scalogram
+scalogram's
+scalograms
+scaloppine
+scalp
+scalp's
+scalpel
+scalper
+scalping
+scalps
+scaly
+scam
+scam's
+scammed
+scammel
+scamming
+scammony
+scamp
+scamper
+scampered
+scampering
+scampers
+scampi
+scampini
+scampish
+scams
+scan
+scandal
+scandal's
+scandaled
+scandaling
+scandalization
+scandalization's
+scandalizations
+scandalize
+scandalized
+scandalizer
+scandalizers
+scandalizes
+scandalizing
+scandalmonger
+scandalous
+scandalously
+scandalousness
+scandals
+scandaroon
+scandent
+scanderbeg
+Scandian
+scandic
+Scandinavia
+Scandinavian
+Scandinavians
+scandium
+scannable
+scanned
+scanner
+scanner's
+scanners
+scanning
+scans
+scansion
+scansorial
+scant
+scantier
+scanties
+scantiest
+scantily
+scantiness
+scantling
+scantly
+scantness
+scanty
+scapa
+scape
+scapegoat
+scapegoating
+scapegoatism
+scapegoats
+scapegrace
+scapewheel
+scaphoid
+scaphopod
+scapin
+scaping
+scapolite
+scapose
+scapula
+scapular
+scapulars
+scar
+scar's
+scarab
+scarabaeid
+scarabaeus
+scaramouch
+scaramouche
+Scarborough
+scarce
+scarcely
+scarcement
+scarceness
+scarcer
+scarcest
+scarcity
+scare
+scarecrow
+scarecrowish
+scared
+scarehead
+scaremonger
+scarer
+scares
+scarey
+scarf
+scarface
+scarfpin
+scarfs
+scarfskin
+scarier
+scarification
+scarificator
+scarifier
+scarify
+scaring
+scarious
+scarlatina
+scarlatinal
+Scarlatti
+Scarlatti's
+scarless
+scarlet
+scarp
+scarped
+scarper
+scarpered
+scarpering
+scarpers
+scarph
+scarping
+scarps
+scarred
+scarring
+scarron
+scarry
+scars
+Scarsdale
+Scarsdale's
+scarves
+scary
+scat
+scatback
+scathe
+scathed
+scatheless
+scathes
+scathing
+scathingly
+scatological
+scatology
+scatted
+scatter
+scatteration
+scatterbrain
+scatterbrained
+scattered
+scatterer
+scattergram
+scattergun
+scattering
+scatteringly
+scatterplot
+scatterplots
+scatters
+scattershot
+scattier
+scatting
+scatty
+scaup
+scauper
+scaups
+scavenge
+scavenged
+scavenger
+scavenger's
+scavengers
+scavenges
+scavenging
+scc
+SCCS
+scena
+scenario
+scenario's
+scenarioization
+scenarioization's
+scenarioizations
+scenarioize
+scenarioizes
+scenarios
+scenarist
+scenarization
+scenarization's
+scenarizations
+scenarize
+scenarizes
+scend
+scene
+scene's
+sceneries
+scenery
+scenes
+scenic
+scenical
+scenically
+scenics
+scenographic
+scenographically
+scenography
+scent
+scented
+scentless
+scents
+scepter
+scepter's
+sceptered
+sceptering
+scepterless
+scepterlesses
+scepters
+sceptibly
+sceptic
+sceptical
+scepticism
+Schaefer
+Schaeffer
+Schaerbeek
+Schafer
+Schaffhausen
+Schaffner
+Schantz
+Schapiro
+schappe
+schedule
+schedule's
+scheduled
+scheduler
+scheduler's
+schedulers
+schedules
+scheduling
+schedulize
+schedulizes
+scheel
+scheele
+scheelite
+Scheherazade
+Scheherazade's
+Scheherezade
+Schein
+scheldt
+Schelling
+schelling
+schema
+schema's
+schemas
+schemata
+schematic
+schematically
+schematics
+schematism
+schematization
+schematization's
+schematizations
+schematize
+schematized
+schematizer
+schematizers
+schematizes
+schematizing
+scheme
+scheme's
+schemed
+schemer
+schemers
+schemes
+scheming
+Schenck
+Schenectady
+scherzando
+scherzi
+scherzo
+schiaparelli
+schickard
+Schiedam
+Schiff
+Schiller
+Schiller's
+schilling
+Schippers
+schism
+schismatic
+schismatical
+schismatically
+schismatist
+schismatize
+schismatized
+schismatizes
+schismatizing
+schist
+schistose
+schistosity
+schistosomal
+schistosome
+schistosomiasis
+schistous
+schizo
+schizocarp
+schizogenesis
+schizogonic
+schizogonous
+schizogony
+schizoid
+schizomycete
+schizomycetes
+schizomycetous
+schizont
+schizophrene
+schizophrenia
+schizophrenic
+schizophrenically
+schizophyceous
+schizophyte
+schizophytic
+schizopod
+schizos
+schizothymia
+schizothymic
+schlegel
+Schleiermacher
+schlemiel
+schlepp
+Schlesien
+Schlesinger
+Schlesinger's
+Schleswig
+Schliemann
+schlieren
+schlieric
+Schlitz
+schlock
+Schloss
+schmaltz
+schmaltzy
+schmalz
+Schmidt
+Schmitt
+schmo
+schmooze
+schmuck
+Schnabel
+Schnabel's
+schnapps
+schnauzer
+Schnecken
+Schneider
+schnitzel
+Schnitzler
+schnook
+schnorkle
+schnorrer
+schnozzle
+Schoenberg
+Schoenberg's
+Schofield
+Schofield's
+schola
+scholar
+scholarly
+scholars
+scholarship
+scholarship's
+scholarships
+scholastic
+scholastica
+scholastically
+scholasticate
+scholasticism
+scholastics
+scholiast
+scholiastic
+scholium
+schongauer
+school
+schoolbag
+schoolbook
+schoolbooks
+schoolboy
+schoolboy's
+schoolboys
+schoolchild
+schooled
+schooler
+schoolers
+schoolfellow
+schoolgirl
+schoolgirlish
+schoolgirls
+schoolhouse
+schoolhouse's
+schoolhouses
+schoolie
+schooling
+schoolman
+schoolmarm
+schoolmaster
+schoolmaster's
+schoolmasters
+schoolmate
+schoolmates
+schoolmistress
+schoolroom
+schoolroom's
+schoolrooms
+schools
+schoolteacher
+schooltime
+schoolwork
+schoolyard
+schoolyard's
+schoolyards
+schooner
+Schopenhauer
+schopenhauer
+schorl
+schorlaceous
+schottische
+Schottky
+Schottky's
+schouten
+schrodinger
+Schroeder
+Schroedinger
+Schubert
+schul
+Schultz
+Schulz
+Schumacher
+schuman
+Schuman
+Schumann
+Schuster
+Schuyler
+Schuyler's
+Schuylkill
+schwa
+Schwab
+schwaben
+schwada
+schwann
+Schwartz
+Schwarz
+Schwarzkopf
+schwarzwald
+schweinfurt
+Schweitzer
+Schweitzer's
+schweiz
+schwerin
+schwitters
+schwyz
+Sci
+sciaenid
+sciaenoid
+sciamachy
+sciatic
+sciatica
+science
+science's
+sciences
+scienter
+sciential
+scientific
+scientifically
+scientifique
+scientism
+scientist
+scientist's
+scientists
+scientologist
+scientology
+scilicet
+scilla
+scilly
+scimitar
+scimitars
+Scimone
+scincoid
+scintigraphic
+scintigraphy
+scintilla
+scintillant
+scintillantly
+scintillate
+scintillated
+scintillates
+scintillating
+scintillation
+scintillator
+scintillometer
+scintillometer's
+scintillometers
+sciolism
+sciolist
+sciolistic
+sciomachy
+sciomancy
+sciomantic
+scion
+scions
+scipio
+scire
+scirocco
+scirrhi
+scirrhous
+scirrhus
+scissel
+scissile
+scission
+scissor
+scissored
+scissoring
+scissors
+scissortail
+scissure
+sciurine
+sciuroid
+sclera
+sclerenchyma
+scleritis
+Scleroderma
+sclerodermatous
+scleroid
+scleroma
+sclerometer
+sclerophyll
+scleroprotein
+sclerose
+sclerosed
+sclerosis
+sclerotial
+sclerotic
+sclerotin
+sclerotium
+sclerotization
+sclerotized
+sclerotomy
+sclerous
+SCM
+scoff
+scoffed
+scoffer
+scoffing
+scofflaw
+scofflaw's
+scofflaws
+scoffs
+Scofield
+scold
+scolded
+scolder
+scolding
+scolds
+scolecite
+scolex
+scolices
+scoliosis
+scoliotic
+scollop
+scolopendra
+scolopendrid
+scombroid
+sconce
+scone
+scoop
+scooped
+scooper
+scoopful
+scooping
+scoops
+scoot
+scooted
+scooter
+scooting
+scoots
+scop
+scopas
+scope
+scoped
+scopes
+scopic
+scoping
+scopolamine
+scops
+scopula
+scopulate
+Scopus
+scorbutic
+scorbutically
+scorch
+scorched
+scorcher
+scorches
+scorching
+scorchingly
+score
+score's
+scoreboard
+scoreboards
+scorecard
+scored
+scorekeeper
+scoreless
+scorer
+scorers
+scores
+scoria
+scoriaceous
+scorify
+scoring
+scorings
+scorn
+scorned
+scorner
+scornful
+scornfully
+scornfulness
+scorning
+scorns
+scorpaenid
+scorpaenoid
+scorper
+Scorpio
+scorpioid
+scorpion
+scorpion's
+scorpions
+Scorpius
+Scot
+scotch
+Scotchgard
+scotchgard
+Scotchman
+scotchman
+scoter
+Scotia
+Scotian
+Scotism
+Scotland
+Scotland's
+scotoma
+scotomatous
+scotopia
+scotopic
+Scots
+Scotsman
+Scotsmen
+Scotswoman
+scotswomen
+Scott
+Scotticism
+scottie
+Scottish
+Scotto
+Scottsdale
+Scotty
+scotus
+scoundrel
+scoundrel's
+scoundrelly
+scoundrels
+scour
+scoured
+scourer
+scourge
+scourger
+scourging
+scouring
+scourings
+scours
+scouse
+scouser
+scout
+scoutcraft
+scouted
+scouter
+scouting
+scoutmaster
+scouts
+scow
+scowl
+scowled
+scowler
+scowling
+scowls
+scrabble
+scrabbled
+scrabbler
+scrabbles
+scrabbling
+scrabbly
+scrag
+scraggier
+scragging
+scraggly
+scraggy
+scram
+scramb
+scramble
+scrambled
+scrambler
+scrambles
+scrambling
+scramming
+scran
+scrannel
+Scranton
+scrap
+scrap's
+scrapbook
+scrapbooks
+scrape
+scraped
+scraper
+scraperboard
+scraperboards
+scrapers
+scrapes
+scrapheap
+scrapheaps
+scrapie
+scraping
+scrapings
+scrapped
+scrapper
+scrappier
+scrappiness
+scrapping
+scrapple
+scrappy
+scraps
+scratch
+scratched
+scratcher
+scratchers
+scratches
+scratchier
+scratchiness
+scratching
+scratchy
+scrawl
+scrawled
+scrawler
+scrawling
+scrawls
+scrawly
+scrawnier
+scrawniness
+scrawny
+screak
+screaky
+scream
+screamed
+screamer
+screamers
+screaming
+screamingly
+screams
+scree
+screech
+screeched
+screecher
+screeches
+screeching
+screechy
+screed
+screen
+screenable
+screened
+screener
+screenful
+screening
+screenings
+screenplay
+screens
+screenwriter
+screenwriter's
+screenwriters
+screvane
+screw
+screwball
+screwbean
+screwdriver
+screwdrivers
+screwed
+screwer
+screwier
+screwiness
+screwing
+screwlike
+screws
+screwup
+screwworm
+screwy
+Scriabin
+scribble
+scribbled
+scribbler
+scribbles
+scribbling
+scribe
+scriber
+scribes
+scribing
+Scribners
+scrieve
+scrim
+scrimmage
+scrimmaged
+scrimmager
+scrimmages
+scrimmaging
+scrimp
+scrimped
+scrimping
+scrimps
+scrimpy
+scrimshank
+scrimshaw
+scrip
+Scripps
+script
+script's
+scriptal
+scripted
+scripting
+scription
+scriptorium
+scripts
+scriptural
+scripturalize
+scripturalizes
+scripturally
+scripture
+scriptures
+scriptwriter
+scriptwriter's
+scriptwriters
+scriven
+scrivener
+scrobiculate
+scrod
+scrofula
+scrofulous
+scroll
+scrollbar
+scrollbar's
+scrollbars
+scrolled
+scrolling
+scrolls
+scrollwork
+scrooge
+scrooge's
+scrooges
+scroop
+scrophulariaceous
+scrota
+scrotal
+scrotum
+scrotum's
+scrotums
+scrouge
+scrouging
+scrounge
+scrounged
+scrounger
+scroungers
+scrounges
+scrounging
+scrub
+scrubbed
+scrubber
+scrubbier
+scrubbing
+scrubby
+scrubland
+scrubs
+scrubwoman
+scruff
+scruffier
+scruffiness
+scruffy
+scrum
+scrummage
+scrump
+scrumptious
+scrumptiously
+scrumpy
+scrunch
+scruple
+scrupled
+scruples
+scrupling
+scrupulosity
+scrupulous
+scrupulously
+scrupulousness
+scrutable
+scrutator
+scrutin
+scrutineer
+scrutinization
+scrutinization's
+scrutinizations
+scrutinize
+scrutinized
+scrutinizer
+scrutinizers
+scrutinizes
+scrutinizing
+scrutinizinglies
+scrutinizingly
+scrutiny
+scry
+SCSI
+scuba
+scud
+scudded
+scudding
+scudo
+scuds
+scuff
+scuffed
+scuffing
+scuffle
+scuffled
+scuffles
+scuffling
+scuffs
+scull
+sculled
+sculler
+sculleries
+scullery
+scullin
+sculling
+scullion
+scullions
+sculls
+sculpin
+sculpsit
+sculpt
+sculpted
+sculpting
+sculptor
+sculptor's
+sculptors
+sculptress
+sculpts
+sculptural
+sculpturally
+sculpture
+sculptured
+sculptures
+sculpturesque
+sculpturesquely
+sculpturing
+scum
+scum's
+scumble
+scumbled
+scumbles
+scumbling
+scumming
+scummy
+scums
+scuncheon
+scunge
+scungy
+scunner
+scunthorpe
+scup
+scupper
+scuppered
+scuppering
+scuppernong
+scuppers
+scups
+scurf
+scurfy
+scurried
+scurril
+scurrile
+scurrility
+scurrilous
+scurrilously
+scurrilousness
+scurry
+scurrying
+scurvily
+scurviness
+scurvy
+scut
+scuta
+scutage
+scutate
+scutch
+scutcheon
+scute
+scutellation
+scutellum
+scutiform
+scuttle
+scuttlebutt
+scuttled
+scuttles
+scuttling
+scutum
+Scylla
+scyphiform
+scyphistoma
+scyphozoan
+scyphus
+scyros
+scythe
+scythe's
+scythes
+Scythia
+Scythian
+scything
+SD
+SE
+sea
+seabag
+seabeach
+seabed
+seabed's
+Seabee
+seabird
+seaboard
+seaboot
+Seaborg
+seaborg
+seaborne
+Seabrook
+seacoast
+seacoast's
+seacoasts
+seacock
+seacraft
+seadog
+seadrome
+seafare
+seafarer
+seafarers
+seafaring
+seafloor
+seafood
+seafowl
+seafront
+Seagate
+Seagate's
+seagirt
+seagoing
+Seagram
+Seagram's
+seagull
+seagulls
+seahorse
+seakale
+seal
+sealant
+sealants
+sealed
+sealer
+sealery
+sealing
+seals
+sealskin
+sealy
+Sealyham
+seam
+seaman
+seamanlike
+seamanly
+seamanship
+seamanships
+seamark
+seamed
+seamen
+seamer
+seami
+seamier
+seaminess
+seaming
+seamless
+seamlessly
+seamlessness
+seamlike
+seamount
+seams
+seamster
+seamstress
+seamstresses
+seamy
+Sean
+Sean's
+seanad
+seance
+seaplane
+seaport
+seaport's
+seaports
+seaquake
+Seaquarium
+seaquarium
+sear
+search
+searchable
+searched
+searcher
+searcher's
+searchers
+searches
+searching
+searchingly
+searchings
+searchless
+searchlight
+searchlights
+seared
+searing
+searingly
+Searle
+sears
+seas
+seascape
+sease
+seashell
+seashell's
+seashells
+seashore
+seashore's
+seashores
+seasick
+seasickness
+seaside
+season
+season's
+seasonable
+seasonableness
+seasonably
+seasonal
+seasonality
+seasonally
+seasoned
+seasoner
+seasoners
+seasoning
+seasonings
+seasonly
+seasons
+seastrand
+seat
+seated
+seater
+seating
+seatmate
+seatmate's
+seatmates
+seato
+Seaton
+seats
+Seattle
+Seattle's
+seawall
+seawan
+seaward
+seawards
+seaware
+seawater
+seawater's
+seaway
+seaweed
+seaweeds
+seaworthiness
+seaworthy
+seaworthyness
+sebaceous
+sebacic
+Sebastian
+Sebastopol
+sebiferous
+seborrhea
+seborrheic
+Sebring
+Sebring's
+sebum
+sec
+secam
+secant
+secants
+secateur
+secateurs
+secco
+secede
+seceded
+seceder
+secedes
+seceding
+secern
+secession
+secessionism
+secessionist
+sech
+seclude
+secluded
+secludedly
+secludedness
+secludes
+secluding
+seclusion
+seclusive
+seclusively
+seclusiveness
+secobarbital
+second
+secondaries
+secondarily
+secondariness
+secondary
+seconded
+seconder
+seconders
+secondhand
+seconding
+secondly
+secondo
+seconds
+secrecy
+secret
+secretarial
+secretariat
+secretaries
+secretary
+secretary's
+secretaryship
+secrete
+secreted
+secretes
+secretin
+secreting
+secretion
+secretionary
+secretions
+secretive
+secretively
+secretiveness
+secretly
+secretor
+secretory
+secrets
+sect
+sect's
+sectarian
+sectarianism
+sectarianization
+sectarianize
+sectarianized
+sectarianizes
+sectarianizing
+sectary
+sectile
+sectility
+section
+sectional
+sectionalism
+sectionalization
+sectionalization's
+sectionalizations
+sectionalize
+sectionalized
+sectionalizes
+sectionalizing
+sectionally
+sectioned
+sectioning
+sectionize
+sectionizes
+sections
+sector
+sector's
+sectoral
+sectored
+sectorial
+sectoring
+sectors
+sects
+secular
+secularism
+secularist
+secularistic
+secularists
+secularity
+secularization
+secularization's
+secularizations
+secularize
+secularized
+secularizer
+secularizers
+secularizes
+secularizing
+secularly
+secund
+Secunderabad
+secundine
+secundines
+secure
+secured
+securely
+securement
+secureness
+securer
+secures
+securing
+securings
+securities
+security
+sedan
+sedans
+sedate
+sedated
+sedately
+sedateness
+sedates
+sedating
+sedation
+sedative
+seddon
+sedentary
+seder
+sedge
+Sedgemoor
+sedgwick
+Sedgwick
+sedgy
+sedilia
+sediment
+sediment's
+sedimentary
+sedimentation
+sedimentologic
+sedimentological
+sedimentologically
+sedimentologist
+sedimentology
+sediments
+sedition
+seditious
+seditiously
+seditiousness
+seduce
+seduced
+seducement
+seducer
+seducers
+seduces
+seducing
+seduction
+seductions
+seductive
+seductively
+seductiveness
+seductress
+sedulity
+sedulous
+sedulously
+sedulousness
+sedum
+see
+seeable
+Seebeck
+seed
+seedbed
+seedbeds
+seedcake
+seedcakes
+seeded
+seeder
+seeders
+seedier
+seedily
+seediness
+seeding
+seedings
+seedless
+seedlike
+seedling
+seedling's
+seedlings
+seedpod
+seeds
+seedsman
+seedtime
+seedy
+Seeger
+seeing
+seek
+seeker
+seekers
+seeking
+seekingly
+seeks
+seel
+Seeland
+Seeley
+seeley
+seem
+seemed
+seeming
+seemingly
+seemlier
+seemliness
+seemly
+seems
+seen
+seep
+seepage
+seeped
+seeping
+seeps
+seepy
+seer
+seeress
+seerey
+seers
+seersucker
+sees
+seesaw
+seesawed
+seesawing
+seesaws
+seethe
+seethed
+seethes
+seething
+seferis
+seg
+segetal
+segment
+segmental
+segmentally
+segmentary
+segmentation
+segmentation's
+segmentations
+segmented
+segmenting
+segments
+segno
+segnos
+Segovia
+segregant
+segregate
+segregated
+segregates
+segregating
+segregation
+segregationist
+segregative
+segue
+segue's
+segued
+segueing
+segues
+seguidilla
+Segundo
+segur
+segura
+sei
+seicento
+seiche
+Seidel
+Seidlitz
+seif
+Seifert
+seigneur
+seigneurial
+seigneury
+seignior
+seigniorage
+seigniory
+seignorage
+seignorial
+seignory
+seine
+seiner
+seining
+seise
+seisin
+seisins
+seism
+seismic
+seismicity
+seismism
+seismogram
+seismogram's
+seismograms
+seismograph
+seismographer
+seismographic
+seismographs
+seismography
+seismological
+seismologist
+seismology
+seismometer
+seismometric
+seismometry
+seismoscope
+seizable
+seize
+seized
+seizer
+seizers
+seizes
+seizin
+seizing
+seizings
+seizins
+seizor
+seizors
+seizure
+seizure's
+seizures
+selachian
+selaginella
+selah
+selangor
+selden
+seldom
+select
+selectable
+selected
+selectedly
+selectee
+selecting
+selection
+selection's
+selectional
+selections
+selective
+selectively
+selectiveness
+selectivity
+selectman
+selectmen
+selectness
+selector
+selector's
+selectors
+Selectric
+selects
+Selena
+Selena's
+selenate
+Selene
+selenic
+selenide
+seleniferous
+selenious
+selenite
+selenium
+selenocentric
+selenodont
+selenographer
+selenographic
+selenographist
+selenography
+selenological
+selenologist
+selenologist's
+selenologists
+selenology
+selenomorphology
+selenosis
+seleucia
+Seleucid
+seleucus
+self
+selfadjoint
+selfdom
+selfheal
+selfhood
+selfish
+selfishly
+selfishness
+selfless
+selflessly
+selflessness
+selfness
+Selfridge
+selfsame
+selfsameness
+Selig
+Seljuk
+Selkirk
+Selkirk's
+sell
+sellable
+selle
+seller
+sellers
+selling
+sellotape
+sellout
+sells
+Selma
+selsyn
+seltzer
+selva
+selvage
+selvaged
+selvedge
+selvedged
+selves
+Selwyn
+Selwyn's
+semanteme
+semantic
+semantical
+semantically
+semanticist
+semanticist's
+semanticists
+semantics
+semaphore
+semaphore's
+semaphores
+semarang
+semasiological
+semasiologist
+semasiology
+sematic
+sematology
+semblable
+semblably
+semblance
+semeiology
+semele
+sememe
+semen
+sement
+semeru
+semester
+semester's
+semesters
+semestral
+semestrial
+semi
+semiabstract
+semiabstraction
+semiannual
+semiannually
+semiaquatic
+semiarboreal
+semiarid
+semiaridity
+semiautomated
+semiautomatic
+semiautomatically
+semiautonomous
+semibasement
+semibituminous
+semibold
+semibreve
+semicarbonize
+semicarbonizes
+semicentenary
+semicentennial
+semicircle
+semicircles
+semicircular
+semicivilization
+semicivilization's
+semicivilizations
+semicivilized
+semicivilized's
+semicivilizeds
+semiclassic
+semiclassical
+semicolon
+semicolon's
+semicolonial
+semicolonialism
+semicolons
+semicolony
+semicommercial
+semicompile
+semiconducting
+semiconductor
+semiconductor's
+semiconductors
+semiconscious
+semiconsciously
+semiconsciousness
+semiconservative
+semiconservatively
+semicrystalline
+semicylindrical
+semidarkness
+semidefinite
+semidesert
+semidetached
+semidiameter
+semidiurnal
+semidivine
+semidocumentary
+semidome
+semidomed
+semidomestic
+semidomesticated
+semidomestication
+semidominant
+semidouble
+semidry
+semidrying
+semiellipse
+semielliptic
+semielliptical
+semiempirical
+semierect
+semievergreen
+semifinal
+semifinalist
+semifinished
+semifitted
+semiflexible
+semifluid
+semiformal
+semifossil
+semifossilized
+semifossilized's
+semifossilizeds
+semigloss
+semigovernmental
+semigroup
+semihonor
+semihonor's
+semihonors
+semihumanized
+semihumanized's
+semihumanizeds
+semilegendary
+semilethal
+semiliquid
+semiliterate
+semilog
+semilogarithmic
+semilunar
+semilustrous
+semimanufactures
+semimercerized
+semimercerized's
+semimercerizeds
+semimetal
+semimetallic
+semimicro
+semimineralized
+semimineralized's
+semimineralizeds
+semimoist
+semimonastic
+semimonthly
+semimystical
+seminal
+seminally
+seminar
+seminar's
+seminarian
+seminarians
+seminaries
+seminarist
+seminarize
+seminarizes
+seminars
+seminary
+seminary's
+semination
+seminationalization
+seminationalization's
+seminationalizations
+seminiferous
+Seminole
+seminumerical
+semiofficial
+semiofficially
+semiological
+semiology
+semiopaque
+semiorganized
+semiorganized's
+semiorganizeds
+semiosis
+semiotic
+semiotical
+semiotician
+semiotics
+semioxidized
+semioxidized's
+semioxidizeds
+semioxygenized
+semioxygenized's
+semioxygenizeds
+Semipalatinsk
+semipalmate
+semipalmated
+semiparasitic
+semipermanent
+semipermanently
+semipermeability
+semipermeable
+semiphore
+semipolitical
+semiporcelain
+semipostal
+semiprecious
+semiprivate
+semipro
+semiprofessional
+semiprofessionalized
+semiprofessionalized's
+semiprofessionalizeds
+semiprofessionally
+semiprofessionals
+semipublic
+semiquantitative
+semiquantitatively
+semiquaver
+semiramis
+semireligious
+semiretired
+semiretirement
+semirigid
+semisacred
+semisecret
+semisedentary
+semishrub
+semishrubby
+semiskilled
+semisoft
+semisolid
+semistructured
+semisweet
+semisynthetic
+Semite
+semiterrestrial
+semitic
+Semiticize
+Semiticizes
+Semitics
+semitics
+Semitization
+Semitization's
+Semitizations
+Semitize
+Semitizes
+semitonal
+semitonally
+semitone
+semitonic
+semitonically
+semitrailer
+semitrance
+semitranslucent
+semitransparent
+semitropic
+semitropical
+semitropics
+semivitreous
+semivocal
+semivowel
+semivulcanized
+semivulcanized's
+semivulcanizeds
+semiweekly
+semiworks
+semiyearly
+semmes
+semolina
+sempach
+semper
+sempervivum
+sempiternal
+sempiternally
+sempiternity
+semple
+semplice
+sempre
+sempstress
+semra
+sen
+sena
+senarii
+senarius
+senarmontite
+senary
+senate
+senate's
+senates
+senator
+senator's
+senatorial
+senatorian
+senators
+senatorship
+send
+sendable
+sendai
+sendal
+sender
+senders
+sending
+sendoff
+sends
+Seneca
+Senechal
+senecio
+senectitude
+senega
+Senegal
+senegambia
+senesac
+senescence
+senescent
+seneschal
+senghor
+sengi
+senhor
+senhora
+senhores
+senhorita
+senile
+senilely
+senilis
+senility
+senilize
+senilizes
+senior
+senior's
+senioritatis
+seniority
+seniors
+seniti
+Senlac
+senna
+sennacherib
+sennar
+sennet
+sennight
+sennit
+senor
+Senora
+senorita
+sens
+sensa
+sensate
+sensately
+sensation
+sensation's
+sensational
+sensationalism
+sensationalist
+sensationalistic
+sensationalize
+sensationalized
+sensationalizes
+sensationalizing
+sensationally
+sensations
+sense
+sensed
+senseful
+senseless
+senselessly
+senselessness
+senses
+sensibilia
+sensibilities
+sensibility
+sensible
+sensibleness
+sensibly
+sensillum
+sensing
+sensitive
+sensitively
+sensitiveness
+sensitives
+sensitivities
+sensitivity
+sensitization
+sensitization's
+sensitizations
+sensitize
+sensitized
+sensitizer
+sensitizers
+sensitizes
+sensitizing
+sensitometer
+sensitometer's
+sensitometers
+sensitometric
+sensitometry
+sensize
+sensizes
+sensor
+sensor's
+sensorial
+sensorially
+sensorimotor
+sensorineural
+sensorium
+sensors
+sensory
+sensual
+sensualism
+sensualist
+sensualistic
+sensuality
+sensualization
+sensualization's
+sensualizations
+sensualize
+sensualized
+sensualizes
+sensualizing
+sensually
+sensum
+sensuosity
+sensuous
+sensuously
+sensuousness
+sent
+sentence
+sentenced
+sentences
+sentencing
+sententia
+sentential
+sententially
+sententious
+sententiously
+sententiousness
+senti
+sentience
+sentient
+sentiently
+sentiment
+sentiment's
+sentimental
+sentimentalism
+sentimentalist
+sentimentalists
+sentimentality
+sentimentalization
+sentimentalization's
+sentimentalizations
+sentimentalize
+sentimentalized
+sentimentalizer
+sentimentalizers
+sentimentalizes
+sentimentalizing
+sentimentally
+sentiments
+sentinel
+sentinel's
+sentineled
+sentineling
+sentinels
+sentries
+sentry
+sentry's
+senussi
+Seoul
+Sep
+sepal
+sepaled
+sepaloid
+separability
+separable
+separableness
+separably
+separate
+separated
+separately
+separateness
+separates
+separating
+separation
+separationist
+separations
+separatism
+separatist
+separatistic
+separative
+separator
+separator's
+separators
+Sephardi
+sepia
+sepiolite
+Sepoy
+seppuku
+sepses
+sepsis
+sept
+septa
+septal
+septarium
+septate
+septation
+septavalent
+September
+September's
+Septembers
+Septembrist
+septenarius
+septenary
+septendecillion
+septennial
+septennially
+septennium
+septentrion
+septentrional
+septet
+septic
+septicaemia
+septicemia
+septicemic
+septicidal
+septicization
+septicization's
+septicizations
+septifragal
+septilateral
+septillion
+septime
+septivalent
+septuagenarian
+septuagesima
+Septuagint
+septum
+septuple
+septuplet
+septuplicate
+sepuchral
+sepulcher
+sepulcher's
+sepulchered
+sepulchers
+sepulchral
+sepulchralize
+sepulchralizes
+sepulchrally
+sepulture
+seq
+sequacious
+sequaciously
+sequacity
+sequel
+sequel's
+sequela
+sequelae
+sequels
+sequence
+sequenced
+sequencer
+sequencers
+sequences
+sequencing
+sequencings
+sequency
+sequent
+sequential
+sequentiality
+sequentialize
+sequentialized
+sequentializes
+sequentializing
+sequentially
+sequester
+sequestered
+sequestering
+sequestrant
+sequestrate
+sequestration
+sequestrum
+sequin
+sequined
+sequinned
+sequins
+sequitur
+sequoia
+ser
+sera
+serac
+Serafin
+serafin
+seraglio
+serai
+serajevo
+seral
+seram
+serang
+serape
+seraph
+seraphic
+seraphically
+seraphim
+seraphs
+Serapis
+Serb
+serbantian
+Serbia
+Serbia's
+Serbian
+serbian
+Serbo
+sercq
+serdab
+sere
+serein
+seremban
+serenade
+serenaded
+serenader
+serenades
+serenata
+serendipitous
+serendipitously
+serendipity
+serene
+serenely
+sereneness
+serenity
+serenize
+serenizes
+serf
+serf's
+serfage
+serfdom
+serfs
+serge
+sergeancy
+sergeant
+sergeant's
+sergeants
+sergeanty
+Sergei
+Sergei's
+serging
+sergipe
+serial
+serialism
+serialist
+serializability
+serializable
+serialization
+serialization's
+serializations
+serialize
+serialized
+serializes
+serializing
+serially
+serials
+seriate
+seriately
+seriatim
+sericeous
+sericin
+sericultural
+sericulture
+sericulturist
+seriema
+series
+serieuses
+serif
+serigraph
+serigrapher
+serigraphy
+serin
+serine
+seringa
+seringapatam
+seriocomic
+seriocomically
+serious
+seriously
+seriousness
+serjeant
+serjeants
+serjeanty
+Serkin
+sermon
+sermon's
+sermonic
+sermonize
+sermonized
+sermonizer
+sermonizers
+sermonizes
+sermonizing
+sermons
+serodiagnosis
+serodiagnostic
+serologic
+serological
+serologically
+serologist
+serology
+seropurulent
+serosa
+serosal
+serotinal
+serotine
+serotinous
+serotonin
+serotype
+serous
+serow
+Serpens
+serpent
+serpent's
+serpentine
+serpentinely
+serpentinization
+serpentinization's
+serpentinizations
+serpentinize
+serpentinizes
+serpentize
+serpentizes
+serpents
+serpiginous
+serpiginously
+serpigo
+serpulid
+serra
+Serra
+serranid
+serranoid
+serrate
+serrated
+serrates
+serrating
+serration
+serratus
+serried
+serriedly
+serriedness
+serriform
+serrulate
+serrulation
+serry
+serrying
+serting
+sertive
+sertorius
+sertularian
+serum
+serum's
+serums
+serval
+servanda
+servant
+servant's
+servants
+servation
+servatius
+serve
+served
+server
+server's
+servers
+serves
+servetus
+servia
+service
+serviceability
+serviceable
+serviceableness
+serviceably
+serviceberry
+serviced
+serviceman
+servicemen
+servicer
+services
+servicewoman
+servicewomen
+servicing
+servient
+serviette
+serviettes
+servile
+servilely
+servileness
+servility
+servilize
+servilizes
+serving
+servings
+servitor
+servitors
+servitude
+servo
+servomechanism
+servomechanisms
+servomotor
+servos
+servosystem
+servosystems
+sesame
+sesamoid
+sesotho
+sesquialtera
+sesquicarbonate
+sesquicentenary
+sesquicentennial
+sesquioxide
+sesquipedalian
+sessed
+sesshu
+sessile
+sessility
+session
+session's
+sessional
+sessions
+sesterce
+sestertium
+sestet
+sestina
+sestos
+set
+set's
+seta
+setaceous
+setaceously
+setae
+setal
+setback
+setbacks
+Seth
+Seth's
+setiferous
+setiform
+setline
+setnm
+seto
+setoff
+setom
+Seton
+setose
+setout
+setpoint
+setpoints
+sets
+setscrew
+setscrews
+sett
+settable
+settee
+settees
+setter
+setter's
+setters
+setting
+settings
+settle
+settled
+settlement
+settlement's
+settlements
+settler
+settlers
+settles
+settling
+settlings
+settlor
+setup
+setups
+setz
+setzb
+setzm
+seurat
+sevan
+Sevastopol
+sevec
+seven
+sevenfold
+sevens
+seventeen
+seventeens
+seventeenth
+seventh
+sevenths
+seventies
+seventieth
+seventy
+seventyfold
+sever
+severability
+severable
+several
+severalfold
+severalize
+severalizes
+severally
+severals
+severalty
+severance
+severe
+severed
+severely
+severeness
+severer
+severest
+severing
+severities
+severity
+severity's
+severization
+severization's
+severizations
+severize
+severizes
+Severn
+Severn's
+severna
+Severnaya
+severs
+Severus
+sevigli
+Seville
+sew
+sewage
+sewan
+Seward
+sewed
+sewell
+sewer
+sewerage
+sewers
+sewickley
+sewing
+sewn
+sews
+sex
+sexagenarian
+Sexagesima
+sexagesimal
+sexangular
+sexcentenary
+sexdecillion
+sexed
+sexennial
+sexes
+sexier
+sexily
+sexiness
+sexism
+sexism's
+sexist
+sexist's
+sexists
+sexivalent
+sexless
+sexlessly
+sexlessness
+sexology
+sexpartite
+sexpot
+sext
+sextain
+sextan
+Sextans
+sextant
+sextet
+sextic
+sextile
+sextillion
+sexto
+sextodecimo
+sexton
+sextos
+sextuor
+sextuple
+sextupled
+sextuplet
+sextuplicate
+sextupling
+sexual
+sexuality
+sexualization
+sexualization's
+sexualizations
+sexualize
+sexualized
+sexualizes
+sexually
+sexy
+sey
+Seychelles
+seyfert
+seyhan
+Seymour
+sfax
+sforza
+sforzando
+sfumato
+sgraffito
+shaba
+Shaban
+shabbat
+shabbier
+shabbily
+shabbiness
+shabby
+Shabuoth
+shack
+shacked
+shackle
+shacklebone
+shackled
+shackler
+shackles
+Shackleton
+shackling
+shacks
+shad
+shadberry
+shadblow
+shadbush
+shaddock
+shade
+shaded
+shadeless
+shader
+shades
+shadflower
+shadier
+shadiest
+shadily
+shadiness
+shading
+shadings
+shadoof
+shadow
+shadowbox
+shadowed
+shadower
+shadowgraph
+shadowily
+shadowiness
+shadowing
+shadowless
+shadowlike
+shadows
+shadowy
+shadrach
+shaduf
+shadwell
+shady
+shaef
+Shafer
+Shafer's
+Shaffer
+Shaffer's
+shaft
+shaft's
+shafted
+shaftesbury
+shafting
+shafts
+shaftsbury
+shag
+shagbark
+shaggier
+shaggily
+shagginess
+shagging
+shaggy
+shaggymane
+shagreen
+shags
+shah
+shahaptin
+shahdom
+shahjahanpur
+shahn
+shaitan
+Shaka
+shakable
+shakably
+shake
+shakeable
+shakedown
+shaken
+shakeout
+shaker
+shakers
+shakes
+Shakespeare
+Shakespearean
+Shakespearian
+Shakespearize
+Shakespearizes
+shakhty
+shakier
+shakily
+shakiness
+shaking
+shako
+shakoes
+Shakta
+Shakti
+shaky
+shakya
+shale
+shales
+shall
+shalloon
+shallop
+shallot
+shallow
+shallower
+shallowly
+shallowness
+shallows
+shalom
+shalt
+sham
+sham's
+shaman
+shamanism
+shamanist
+shamanistic
+shamash
+shamba
+shamble
+shambled
+shambles
+shambling
+shame
+shamed
+shameface
+shamefaced
+shamefacedly
+shamefacedness
+shamefast
+shameful
+shamefully
+shamefulness
+shameless
+shamelessly
+shamelessness
+shames
+shaming
+shammer
+shammes
+shamming
+shammosim
+shammy
+shamo
+shampoo
+shampooer
+shampoos
+shamrock
+shams
+shamus
+shan
+shan't
+shandies
+shandrydan
+shandy
+shandygaff
+Shang
+shangaan
+Shanghai
+shanghaied
+shanghaier
+Shanghaiing
+shango
+shank
+Shankar
+Shankaracharya
+shanked
+shankpiece
+Shannon
+shanny
+shansi
+shantey
+shanties
+shantow
+Shantung
+shanty
+shanty's
+shantyman
+shantytown
+shapable
+shape
+shapeable
+shaped
+shapeless
+shapelessly
+shapelessness
+shapelier
+shapeliness
+shapely
+shapen
+shaper
+shapers
+shapes
+shaping
+Shapiro
+sharable
+shard
+shards
+share
+shareability
+shareable
+sharecrop
+sharecropper
+sharecropper's
+sharecroppers
+sharecropping
+shared
+sharefarmer
+sharefarmers
+shareholder
+shareholder's
+shareholders
+shareown
+sharer
+sharers
+shares
+Shari
+Shari's
+Sharia
+sharing
+shark
+shark's
+sharks
+sharkskin
+sharksucker
+Sharon
+sharp
+Sharpe
+sharped
+sharpen
+sharpened
+sharpener
+sharpening
+sharpens
+sharper
+sharpest
+sharpie
+sharpies
+sharping
+sharply
+sharpness
+sharps
+sharpshoot
+sharpshooter
+sharpshooters
+sharpshooting
+sharpy
+sharrow
+shashlick
+shashlik
+Shasta
+shatilov
+shatter
+shattered
+shattering
+shatteringly
+shatterproof
+shatters
+Shattuck
+Shattuck's
+shave
+shaved
+shaveling
+shaven
+shaver
+shaves
+shavetail
+Shavian
+shavie
+shaving
+shavings
+shavuot
+shaw
+Shaw
+Shawano
+shawano
+shawl
+shawl's
+shawls
+shawm
+Shawnee
+shawomet
+Shawwal
+shay
+shayne
+shayol
+shays
+Shchedrin
+Shcheglovsk
+Shcherbakov
+she
+she'd
+she'll
+she's
+Shea
+sheading
+sheaf
+sheaflike
+sheahe
+shear
+sheared
+shearer
+shearers
+shearing
+shearlegs
+shearling
+shearn
+shears
+shearwater
+sheatfish
+sheath
+sheathbill
+sheathe
+sheather
+sheathing
+sheaths
+sheave
+sheaves
+sheaving
+sheba
+shebang
+shebeen
+sheboygan
+Sheboygan
+Shechem
+shechina
+shed
+shedded
+shedder
+shedding
+Shedir
+sheds
+Sheehan
+Sheehan's
+sheen
+sheene
+sheeny
+sheep
+sheepcote
+sheepdog
+sheepfold
+sheepherder
+sheepherding
+sheepish
+sheepishly
+sheepishness
+sheepshank
+sheepshead
+sheepshearer
+sheepshearing
+sheepskin
+sheepwalk
+sheer
+sheeran
+sheered
+sheerlegs
+sheerly
+sheerness
+sheet
+sheeted
+sheeter
+sheetfed
+sheeting
+sheetlike
+sheets
+Sheffield
+Sheffielder
+Sheffielders
+sheik
+sheikdom
+sheikh
+sheikhdom
+Sheila
+shekel
+Shekinah
+shelagh
+Shelby
+Sheldon
+shelf
+shelfful
+shelflike
+shelfs
+shell
+shell's
+shellac
+shellacked
+shellacking
+shellback
+shellback's
+shellbacks
+shellbark
+shellcracker
+shelled
+sheller
+Shelley
+shellfire
+shellfish
+shelling
+shellproof
+shells
+shellwork
+shelly
+shelta
+shelter
+shelterbelt
+sheltered
+shelterer
+sheltering
+shelterless
+shelters
+sheltie
+shelties
+Shelton
+shelty
+shelve
+shelved
+shelver
+shelves
+shelving
+shem
+shema
+shembe
+Shemite
+Shemitic
+Shenandoah
+shenanigan
+shenanigans
+shend
+shending
+shensi
+shenyang
+Sheol
+shep
+Shepard
+shepherd
+shepherd's
+shepherded
+shepherdess
+shepherding
+shepherdize
+shepherdizes
+shepherds
+Sheppard
+Sheppard's
+sher
+Sheraton
+sherbert
+sherbet
+sherbrooke
+sherd
+Sheri
+Sheri's
+sheria
+Sheridan
+sherif
+sheriff
+sheriff's
+sheriffdom
+sheriffs
+sherlock
+Sherman
+Sherpa
+sherries
+Sherrill
+Sherrill's
+Sherrington
+sherris
+sherry
+sherwani
+Sherwin
+Sherwood
+shes
+Shetland
+shetlands
+shevelling
+shew
+shewbread
+shewe
+shewn
+shews
+shh
+Shiah
+shiai
+shibboleth
+shibboleths
+shicker
+shickered
+shied
+shiel
+shield
+shielded
+shielder
+shielding
+shields
+shieling
+shier
+shies
+shiest
+shietz
+shiflett
+shift
+shiftable
+shifted
+shifter
+shifters
+shiftier
+shiftiest
+shiftily
+shiftiness
+shifting
+shiftless
+shiftlessly
+shiftlessness
+shifts
+shifty
+shigella
+shih
+shihchiachuang
+Shiism
+Shiite
+Shiite's
+Shiites
+shikar
+shikari
+shikarred
+shikarring
+shikoku
+shiksa
+shikse
+shilingi
+shill
+shillalah
+shillelagh
+shilling
+shillings
+Shillong
+shillong
+shills
+shillyshally
+Shiloh
+shily
+shim
+shimmer
+shimmered
+shimmering
+shimmery
+shimmied
+shimmies
+shimming
+shimmy
+shimmying
+Shimonoseki
+shims
+shin
+shinar
+shinbone
+shindies
+shindig
+shindig's
+shindigs
+shindy
+shine
+shined
+shiner
+shiners
+shines
+shingle
+shingle's
+shingled
+shingler
+shingles
+shingling
+shingly
+shinier
+shininess
+shining
+shiningly
+shinkin
+shinleaf
+shinleafs
+shinnery
+shinney
+shinnied
+shinning
+shinny
+shinnying
+shinplaster
+shinsplints
+Shinto
+Shintoism
+Shintoize
+Shintoizes
+shinty
+shiny
+ship
+ship's
+shipboard
+shipboards
+shipborne
+shipbuild
+shipbuilder
+shipbuilding
+shipfitter
+shipka
+shiplap
+Shipley
+shipload
+shipman
+shipmaster
+shipmate
+shipmates
+shipmen
+shipment
+shipment's
+shipments
+shipowner
+shippable
+shipped
+shipper
+shipper's
+shippers
+shipping
+ships
+shipshape
+shipside
+shipway
+shipworm
+shipwreck
+shipwrecked
+shipwrecks
+shipwright
+shipyard
+shipyards
+shiralee
+Shiraz
+shire
+shires
+shirk
+shirker
+shirking
+shirks
+Shirley
+shirr
+shirring
+shirt
+shirting
+shirtmake
+shirtmaker
+shirts
+shirtsleeve
+shirttail
+shirtwaist
+shirtwaister
+shirty
+shish
+shit
+shitepoke
+shithead
+shittah
+shittim
+shiv
+shiva
+Shiva
+Shiva's
+shivaree
+shive
+shiver
+shivered
+shiverer
+shivering
+shivers
+shivery
+shizuoka
+shlemiehl
+shlock
+Shluh
+Shmuel
+sho
+Shoa
+shoal
+shoal's
+shoals
+shoat
+shock
+shocked
+shocker
+shockers
+shockheaded
+shocking
+shockingly
+Shockley
+Shockley's
+shockproof
+shocks
+shockstall
+shod
+shoddier
+shoddily
+shoddiness
+shoddy
+shoe
+shoebill
+shoeblack
+shoed
+shoehorn
+shoeing
+shoelace
+shoelaces
+shoemake
+shoemaker
+shoemakers
+shoepac
+shoepack
+shoer
+shoes
+shoeshine
+shoestring
+shoestrings
+shoetree
+shofar
+shogun
+shogunate
+sholapur
+Sholokhov
+sholom
+Shona
+shone
+shoo
+shoofly
+shoogle
+shooing
+shook
+shool
+shoon
+shoot
+shooter
+shooters
+shooting
+shootings
+shootout
+shootout's
+shootouts
+shoots
+shop
+shop's
+shopfloor
+shopfloors
+shophar
+shopkeep
+shopkeeper
+shopkeeper's
+shopkeepers
+shoplift
+shoplifter
+shoplifters
+shoplifting
+shoppe
+shopped
+shopper
+shopper's
+shoppers
+shopping
+shops
+shopsoiled
+shoptalk
+shopwalker
+shopwork
+shopworker
+shopworn
+shoran
+shore
+shore's
+shorebird
+shorebird's
+shorebirds
+shored
+shorefront
+shoreless
+shoreline
+shorelines
+shores
+shoreside
+shoreward
+shorewards
+Shorewood
+shoring
+shorn
+short
+shortage
+shortage's
+shortages
+shortbread
+shortcake
+shortchange
+shortchanger
+shortcoming
+shortcoming's
+shortcomings
+shortcut
+shortcut's
+shortcuts
+shorted
+shorten
+shortened
+shortener
+shortening
+shortens
+shorter
+shortest
+shortfall
+shortfalls
+shorthand
+shorthanded
+shorthands
+shorthorn
+shortie
+shorties
+shorting
+shortish
+shortliffe
+shortlist
+shortlisted
+shortlisting
+shortlists
+shortlived
+shortly
+shortness
+shorts
+shortsighted
+shortsightedly
+shortsightedness
+shortstop
+shorty
+Shoshone
+shoshone
+Shoshone's
+Shoshonean
+Shostakovich
+shot
+shot's
+shotbush
+shote
+shotgun
+shotgun's
+shotguns
+shotline
+shotlines
+shots
+shott
+shotten
+should
+shoulder
+shouldered
+shouldering
+shoulders
+shouldest
+shouldn't
+shouldst
+shoup
+shouse
+shout
+shouted
+shouter
+shouters
+shouting
+shouts
+shove
+shoved
+shovel
+shoveled
+shoveler
+shovelers
+shovelful
+shovelhead
+shoveling
+shovelman
+shovelnose
+shovels
+shovelsful
+shover
+shoves
+shoving
+show
+showboat
+showbread
+showcase
+showcase's
+showcased
+showcases
+showcasing
+showd
+showdown
+showed
+shower
+showered
+showering
+showerproof
+showers
+showery
+showgirl
+showier
+showily
+showiness
+showing
+showings
+showjumping
+showman
+showmanship
+showmen
+shown
+showpiece
+showplace
+showroom
+shows
+showstopper
+showy
+shrank
+shrapnel
+shred
+shred's
+shredded
+shredder
+shredder's
+shredders
+shredding
+shreds
+Shreveport
+shrew
+shrew's
+shrewd
+shrewdest
+shrewdie
+shrewdly
+shrewdness
+shrewish
+shrewishly
+shrewishness
+shrewmouse
+shrews
+Shrewsbury
+shriek
+shrieked
+shrieking
+shrieks
+shrieval
+shrievalty
+shrieve
+shrift
+shrike
+shrill
+shrilled
+shrilling
+shrillness
+shrilly
+shrimp
+shrimpy
+shrine
+shrine's
+shrines
+shrink
+shrinkable
+shrinkage
+shrinker
+shrinking
+shrinks
+shrive
+shrived
+shrivel
+shriveled
+shriveling
+shrivels
+shriven
+shriver
+shroff
+Shropshire
+shroud
+shrouded
+shrouding
+shrouds
+shrove
+Shrovetide
+shrub
+shrub's
+shrubbery
+shrubbier
+shrubby
+shrubs
+shrug
+shrugged
+shrugging
+shrugs
+shrunk
+shrunken
+shtetel
+shtetl
+shtetlach
+shtg
+shtick
+Shu
+Shu's
+shuck
+shucker
+shucks
+shudder
+shuddered
+shuddering
+shudders
+shuddery
+shuffle
+shuffleboard
+shuffled
+shuffler
+shuffles
+shuffling
+shufty
+shufu
+shuggy
+shuiski
+shul
+Shulamite
+shulde
+Shulman
+Shulman's
+shun
+shunned
+shunner
+shunning
+shunpike
+shunpiker
+shunpiking
+shuns
+shunt
+shunted
+shunter
+shunting
+shunts
+shush
+shushan
+shut
+shutdown
+shutdown's
+shutdowns
+shute
+shuteye
+shutoff
+shutout
+shuts
+shutter
+shutterbug
+shuttered
+shuttering
+shutterless
+shutters
+shutting
+shuttle
+shuttlecock
+shuttlecocks
+shuttled
+shuttles
+shuttling
+shuz
+shy
+shyer
+shyes
+shyest
+shying
+Shylock
+Shylockian
+shylockian
+shyly
+shyness
+shypoo
+shyster
+si
+sialagogue
+sialkot
+sialoid
+SIAM
+siamang
+Siamese
+Sian
+Sian's
+siang
+siangtan
+sib
+sibe
+Sibelius
+Siberia
+Siberian
+sibilant
+sibilantly
+sibilate
+sibilation
+sibiu
+Sibley
+sibling
+sibling's
+siblings
+sibly
+sibyl
+sibylic
+sibylla
+sibyllic
+sibylline
+sibyls
+sic
+Sicanian
+siccative
+siccing
+sicilia
+Sicilian
+Siciliana
+siciliana
+Sicilians
+Sicily
+sick
+sickbay
+sickbed
+sickbed's
+sickbeds
+sicken
+sickened
+sickener
+sickening
+sickeningly
+sicker
+sickerly
+sickert
+sickest
+sickie
+sicking
+sickish
+sickishly
+sickishness
+sickle
+sicklebill
+sickled
+sicklemia
+sicklewort
+sicklied
+sicklily
+sickliness
+sickling
+sickly
+sicklying
+sickness
+sickness's
+sicknesses
+sickroom
+sicks
+sicyon
+sid
+Siddhartha
+siddo
+siddons
+siddur
+siddurim
+side
+sidearm
+sidearms
+sideband
+sidebands
+sideboard
+sideboard's
+sideboards
+sideburned
+sideburns
+sidecar
+sidecars
+sidechain
+sidechains
+sided
+sidedness
+sidedress
+sideffect
+sideffects
+sidehill
+sidekick
+sidekicks
+sidelight
+sidelight's
+sidelights
+sideline
+sideliner
+sidelines
+sideling
+sidelong
+sideman
+sidemen
+sidency
+sident
+sidepiece
+sideplate
+sideplates
+sidereal
+siderealize
+siderealizes
+siderite
+sideritic
+siderolite
+siderophilin
+siderosis
+siderostat
+sides
+sidesaddle
+sideshow
+sideshows
+sideslip
+sideslips
+sidesman
+sidespin
+sidesplitting
+sidestep
+sidestepped
+sidestepper
+sidestepping
+sidesteps
+sidestroke
+sideswipe
+sidetrack
+sidetracked
+sidetracking
+sidetracks
+sidewalk
+sidewalk's
+sidewalks
+sidewall
+sideward
+sidewards
+sideway
+sideways
+sidewheel
+sidewheeler
+sidewinder
+sidewise
+sidi
+siding
+sidings
+sidle
+sidled
+sidles
+sidling
+Sidney
+sidon
+sidra
+SIDS
+sie
+sieben
+siebern
+siecle
+siecles
+siegbahn
+siege
+siege's
+Siegel
+Siegel's
+sieges
+Siegfried
+sieging
+siegler
+Sieglinda
+Sieglinda's
+sieglinde
+Siegmund
+Siegmund's
+Siemens
+Siena
+sienkiewicz
+sienna
+siepi
+Sierra
+sierra
+sierran
+sierras
+siesta
+sieux
+sieve
+sieve's
+sievers
+sieves
+sieving
+sifaka
+Sifford
+sift
+sifted
+sifter
+sifting
+siftings
+sifts
+sig
+SIGABRT
+SIGALRM
+SIGBUS
+SIGCHLD
+SIGCLD
+SIGCONT
+SIGEMT
+SIGFPE
+Siggraph
+sigh
+sighed
+sigher
+sighing
+sighs
+sight
+sighted
+sighter
+sighting
+sightings
+sightless
+sightlessness
+sightliness
+sightly
+sights
+sightscreen
+sightsee
+sightseeing
+sightseer
+sightseers
+SIGHUP
+Sigil
+sigil
+SIGILL
+SIGINT
+SIGIO
+SIGIOT
+sigismund
+SIGKILL
+sigla
+siglos
+sigma
+sigmas
+sigmate
+sigmoid
+sigmoidal
+sigmoidally
+sigmoidoscope
+Sigmund
+sign
+signac
+signal
+signaled
+signaler
+signalers
+signaling
+signalization
+signalize
+signalized
+signalizes
+signalizing
+signally
+signalman
+signalmen
+signalment
+signals
+signatories
+signatory
+signature
+signature's
+signatures
+signboard
+signed
+signer
+signers
+signet
+signifiable
+significance
+significances
+significancy
+significant
+significantly
+significants
+signification
+significative
+significatively
+significativeness
+significs
+signified
+signifier
+signifies
+signify
+signifying
+signing
+signior
+signiories
+signiory
+Signor
+Signora
+signore
+signorelli
+signori
+signories
+signorina
+signorino
+signory
+signpost
+signposted
+signposting
+signposts
+signs
+SIGPIPE
+SIGPROF
+SIGQUIT
+SIGSEGV
+SIGSTOP
+SIGSYS
+SIGTERM
+SIGTRAP
+SIGTSTP
+SIGTTIN
+SIGTTOU
+sigurd
+SIGURG
+SIGUSR
+SIGVTALRM
+SIGWINCH
+SIGXCPU
+SIGXFSZ
+Sihanouk
+Sika
+sikang
+sike
+Sikh
+Sikh's
+Sikhes
+Sikhs
+siking
+Sikkim
+Sikkim's
+Sikkimese
+Sikorsky
+silage
+silane
+Silas
+silastic
+sild
+silds
+sile
+silence
+silenced
+silencer
+silencers
+silences
+silencing
+silent
+silently
+silentness
+silents
+silenus
+silesia
+silex
+silhouette
+silhouetted
+silhouettes
+silica
+silicate
+silicates
+silicatization
+silicatization's
+silicatizations
+siliceous
+silicic
+silicicolous
+silicide
+silicidize
+silicidizes
+siliciferous
+silicification
+silicify
+silicious
+silicium
+silicle
+silicon
+silicone
+siliconize
+siliconizes
+silicons
+silicosis
+silicothermic
+silicotic
+siliculose
+siliqua
+silique
+silk
+silkaline
+silke
+silken
+silkier
+silkiest
+silkily
+silkiness
+silkoline
+silks
+silkweed
+silkworm
+silkworms
+silky
+sill
+sill's
+sillabub
+sillier
+silliest
+sillily
+sillimanite
+silliness
+sills
+silly
+silo
+siloam
+silone
+silos
+siloxane
+silt
+siltation
+silted
+silting
+silts
+siltstone
+siltstones
+silty
+Silures
+Silurian
+silurid
+siluroid
+silva
+silvan
+Silvanus
+silvas
+silver
+silvered
+silverer
+silverfish
+silveriness
+silvering
+silverize
+silverizer
+silverizers
+silverizes
+silverly
+Silverman
+silvern
+silverpoint
+silvers
+silverside
+silversides
+silversmith
+silversmiths
+Silverstein
+Silverstein's
+silvertail
+silverware
+silverweed
+silvery
+silvical
+silvicolous
+silvics
+silvicultural
+silviculturally
+silviculture
+silviculturist
+simar
+Simarouba
+simaroubaceous
+simazine
+simba
+Simbirsk
+simca
+simchath
+SIMD
+Simeon
+Simferopol
+simian
+similar
+similarities
+similarity
+similarize
+similarizes
+similarly
+simile
+similitude
+similize
+similizes
+simitar
+Simla
+simla
+simmel
+simmer
+simmered
+simmering
+simmers
+Simmons
+Simmonsville
+simms
+Simms
+simnel
+simoleon
+Simon
+simoniac
+simonides
+simonize
+Simonson
+Simonson's
+simony
+simoom
+simoon
+simp
+simpatico
+simper
+simpered
+simperer
+simpering
+simpers
+simple
+simpleminded
+simplemindedly
+simplemindedness
+simpleness
+simpler
+simples
+simplest
+simpleton
+simplex
+simplexes
+simplices
+simplicial
+simplicially
+simplicidentate
+simplicities
+simplicity
+simplicity's
+simplification
+simplifications
+simplifiction
+simplified
+simplifier
+simplifiers
+simplifies
+simplify
+simplifying
+simplism
+simplistic
+simplistically
+simplon
+simply
+Simpson
+Sims
+simsim
+simula
+simulacre
+simulacrum
+simulant
+simular
+simulate
+simulated
+simulates
+simulating
+simulation
+simulations
+simulative
+simulator
+simulator's
+simulators
+simulcast
+simultaneity
+simultaneous
+simultaneously
+simultaneousness
+sin
+sin's
+Sinai
+Sinaloa
+sinan
+sinanthropus
+sinapism
+sinarquist
+sinatra
+Sinatra
+Sinbad
+Sinbad's
+since
+sincere
+sincerely
+sincereness
+sincerest
+sincerity
+sincipita
+sincipital
+sinciput
+Sinclair
+sind
+Sindhi
+sine
+sinecure
+sines
+sinew
+sinew's
+sinews
+sinewy
+sinfonia
+sinfonietta
+sinful
+sinfully
+sinfulness
+sing
+singable
+Singapore
+Singapore's
+Singborg
+singe
+singed
+singeing
+singer
+singer's
+singers
+Singhalese
+singing
+singingly
+single
+singled
+singlehanded
+singlehandedly
+singleminded
+singleness
+singles
+singlestick
+singlet
+singleton
+singleton's
+singletons
+singletree
+singling
+singly
+sings
+singsong
+singsonged
+singsongy
+singspiel
+singular
+singularities
+singularity
+singularity's
+singularization
+singularization's
+singularizations
+singularize
+singularizes
+singularly
+singultus
+sinh
+sinhailien
+Sinhalese
+siniboia
+Sinicism
+sinicize
+sinicized
+sinicizes
+sinicizing
+sining
+sinister
+sinisterly
+sinisterness
+sinistral
+sinistrally
+sinistrodextral
+sinistrorse
+sinistrous
+Sinitic
+sink
+sinkable
+sinkage
+sinked
+sinker
+sinkers
+sinkhole
+sinkholes
+sinking
+sinks
+sinless
+sinlessly
+sinlessness
+sinn
+sinned
+sinner
+sinner's
+sinners
+sinning
+Sino
+sinoatrial
+sinological
+sinologist
+sinologue
+sinology
+sinopia
+Sinopoli
+sins
+sinsyne
+sint
+sinter
+sinterability
+sintered
+sinton
+Sintow
+sinuate
+sinuately
+sinuatrial
+sinuosity
+sinuous
+sinuousities
+sinuously
+sinuousness
+sinus
+sinuses
+sinusitis
+sinusoid
+sinusoidal
+sinusoidally
+sinusoids
+sion
+Siouan
+Sioux
+sip
+siphon
+siphon's
+siphoned
+siphoning
+siphonless
+siphonlesses
+siphonlike
+siphonlike's
+siphonlikes
+siphonophore
+siphonostele
+siphonostelic
+siphonostely
+siphons
+siple
+sipped
+sipper
+sippers
+sippet
+sipping
+sips
+siqueiros
+sir
+Siracusa
+sirdar
+sire
+sired
+siree
+siren
+sirenian
+sirenize
+sirenizes
+sirens
+sires
+siret
+siring
+Sirius
+sirloin
+sirocco
+sirra
+sirrah
+sirree
+sirs
+sirup
+sirupy
+sirvente
+sirventes
+sis
+sisal
+sisera
+siskin
+Sisley
+sismondi
+sissies
+sissified
+sissy
+sister
+sister's
+sistered
+sisterhood
+sistering
+sisterize
+sisterizes
+sisterly
+sisters
+Sistine
+sistrum
+Sisyphean
+Sisyphus
+sit
+Sitar
+sitar
+Sitarist
+sitcom
+site
+site's
+sited
+sitella
+sites
+sitfast
+sith
+sithole
+siting
+Sitka
+sitology
+sitosterol
+sits
+sitsang
+sitter
+sitter's
+sitters
+sitting
+sittings
+situ
+situate
+situated
+situates
+situating
+situation
+situational
+situationally
+situations
+situla
+situs
+sitwell
+sitz
+sitzkrieg
+sitzmark
+Siva
+siva
+Sivaism
+Sivan
+sivas
+Siwash
+six
+sixain
+sixes
+sixfold
+sixgun
+sixmo
+sixmos
+sixpence
+sixpences
+sixpenny
+sixte
+sixteen
+sixteenmo
+sixteens
+sixteenth
+sixth
+sixthly
+sixths
+sixties
+sixtieth
+Sixtus
+sixty
+sixtyfold
+sizable
+sizableness
+sizably
+sizar
+size
+sizeable
+sized
+sizer
+sizers
+sizes
+sizing
+sizings
+sizova
+sizzle
+sizzled
+sizzler
+sizzling
+sjambok
+skag
+skagen
+skagerrak
+skald
+skaldic
+skara
+skat
+skate
+skateboard
+skateboard's
+skateboarder
+skateboarding
+skateboards
+skated
+skatepark
+skater
+skater's
+skaters
+skates
+skating
+skatole
+skaw
+skean
+skedaddle
+skedaddled
+skedaddler
+skedaddles
+skedaddling
+skeet
+skeeter
+skeg
+skeigh
+skein
+skein's
+skeins
+skeleta
+skeletal
+skeletally
+skeleton
+skeleton's
+skeletonization
+skeletonization's
+skeletonizations
+skeletonize
+skeletonized
+skeletonizer
+skeletonizers
+skeletonizes
+skeletonizing
+skeletons
+skelf
+skellum
+skelly
+skelmersdale
+skelp
+skelping
+skelpit
+skelter
+skeltered
+skeltering
+Skelton
+sken
+skene
+skep
+skepsis
+skeptic
+skeptic's
+skeptical
+skeptically
+skepticism
+skepticize
+skepticizes
+skeptics
+skerrick
+skerries
+skers
+skery
+sket
+sketch
+sketchbook
+sketched
+sketcher
+sketches
+sketchier
+sketchily
+sketchiness
+sketching
+sketchpad
+sketchy
+skew
+skewback
+skewbald
+skewed
+skewer
+skewered
+skewering
+skewers
+skewing
+skewness
+skews
+skewwhiff
+ski
+skiable
+skiagram
+skiagram's
+skiagrams
+skiagraph
+skiagraphy
+skiamachy
+skiascope
+skiascopy
+skibob
+skid
+skidded
+skidder
+skiddier
+skidding
+skiddoo
+skiddy
+skidlid
+skidoo
+skidpan
+skidproof
+skids
+skidway
+skied
+skien
+skier
+skies
+skiff
+skiffle
+skiffs
+skiing
+Skijoring
+Skikda
+skilful
+skilfully
+skill
+skilled
+skilless
+skillet
+skillful
+skillfully
+skillfulness
+skilling
+skillion
+skills
+skilly
+skim
+skim's
+skimmed
+skimmer
+skimmer's
+skimmers
+Skimmia
+skimming
+skimmings
+skimobile
+skimp
+skimped
+skimpier
+skimpily
+skimpiness
+skimping
+skimps
+skimpy
+skims
+skin
+skin's
+skindive
+skindiving
+skinflint
+skinflint's
+skinflints
+skinful
+skinhead
+skink
+skinker
+skinless
+skinned
+skinner
+skinner's
+skinners
+skinnier
+skinniness
+skinning
+skinny
+skins
+skint
+skintight
+skip
+skipjack
+skiplane
+skipped
+skipper
+skipper's
+skippered
+skippering
+skippers
+skippet
+skipping
+Skippy
+skips
+Skipton
+skirl
+skirmish
+skirmished
+skirmisher
+skirmishers
+skirmishes
+skirmishing
+skirr
+skirret
+skirt
+skirted
+skirter
+skirting
+skirts
+skis
+skit
+skite
+skits
+skitter
+skittery
+skittish
+skittishly
+skittishness
+skittle
+skive
+skiver
+skiving
+skivvies
+skivvy
+skiway
+skiwear
+skoal
+Skokiaan
+Skolly
+Skopje
+Skrowaczewski
+Skua
+skulduggery
+skulk
+skulked
+skulker
+skulking
+skulks
+skull
+skull's
+skullcap
+skullduggery
+skulled
+skulls
+skunk
+skunk's
+skunks
+sky
+sky's
+skyborne
+skycap
+skydive
+skydiving
+Skye
+skyey
+skyhook
+skying
+skyjack
+skyjacked
+skyjacker
+skyjackers
+skyjacking
+skylab
+skylark
+skylarker
+skylarking
+skylarks
+skylight
+skylight's
+skylights
+skyline
+skylounge
+skyphoi
+skyphos
+skyrocket
+skyros
+skysail
+skyscape
+skyscrape
+skyscraper
+skyscraper's
+skyscrapers
+skyward
+skywave
+skyway
+skywrite
+skywriter
+skywriting
+slab
+slabber
+slabbered
+slabbering
+slabbing
+slabs
+slack
+slacked
+slacken
+slackened
+slackening
+slackens
+slacker
+slackest
+slacking
+slackly
+slackness
+slacks
+slade
+slag
+slain
+slaister
+slake
+slaked
+slaking
+slalom
+slaloms
+slam
+slammed
+slamming
+slams
+slander
+slandered
+slanderer
+slandering
+slanderous
+slanderously
+slanderousness
+slanders
+slang
+slangily
+slanginess
+slanging
+slangy
+slant
+slanted
+slanting
+slantingly
+slants
+slantways
+slantwise
+slap
+slapdash
+slaphappy
+slapjack
+slapped
+slapping
+slaps
+slapshot
+slapstick
+slash
+slashed
+slasher
+slashes
+slashing
+slashingly
+slat
+slat's
+slate
+slated
+slatelike
+slater
+slaters
+slates
+slather
+slathered
+slathering
+slathers
+slating
+Slatkin
+slats
+slatted
+slattern
+slatternliness
+slatternly
+slatting
+slaty
+slaughter
+slaughtered
+slaughterer
+slaughterhouse
+slaughterhouses
+slaughtering
+slaughterman
+slaughtermen
+slaughterous
+slaughterously
+slaughters
+Slav
+slave
+slaved
+slaveholder
+slaveholders
+slaveholding
+slaver
+slavered
+slavering
+slavery
+slaves
+slavey
+slaveys
+Slavic
+Slavicize
+Slavicizes
+slaving
+slavish
+slavishly
+slavishness
+Slavism
+Slavization
+Slavization's
+Slavizations
+Slavize
+Slavizes
+Slavkov
+slavocracy
+Slavonia
+Slavonic
+Slavonicize
+Slavonicizes
+Slavophile
+Slavophiles
+Slavs
+slavs
+slaw
+slay
+slayer
+slayers
+slaying
+slays
+sleave
+sleazier
+sleazily
+sleaziness
+sleazy
+sled
+sled's
+sledded
+sledder
+sledding
+sledge
+sledge's
+sledgehammer
+sledges
+sledging
+sleds
+sleek
+sleekit
+sleekly
+sleekness
+sleep
+sleeper
+sleepers
+sleepier
+sleepily
+sleepiness
+sleeping
+sleepless
+sleeplessess
+sleeplessly
+sleeplessness
+sleeplike
+sleeps
+sleepwalk
+sleepwalker
+sleepy
+sleepyhead
+sleet
+sleety
+sleeve
+sleeve's
+sleeved
+sleeveless
+sleevelet
+sleeves
+sleeving
+sleezy
+sleigh
+sleighs
+sleight
+sleken
+slekened
+slekening
+slender
+slenderer
+slenderize
+slenderized
+slenderizes
+slenderizing
+slenderly
+slenderness
+slept
+slesinger
+Slesinger
+Slesvig
+sleuth
+sleuthhound
+sleuthing
+slew
+slewed
+slewing
+slezsko
+slice
+sliced
+slicer
+slicers
+slices
+slicing
+slick
+slickenside
+slicker
+slickers
+slickly
+slickness
+slicks
+slid
+slidden
+slide
+slider
+sliders
+slides
+slideway
+sliding
+slier
+sliest
+slight
+slighted
+slighter
+slightest
+slighting
+slightingly
+slightly
+slightness
+slights
+sligo
+slily
+slim
+slime
+slimed
+slimes
+slimier
+slimily
+sliminess
+sliming
+slimly
+slimmed
+slimmer
+slimmers
+slimmest
+slimming
+slimness
+slimpsy
+slimsy
+slimy
+sling
+slingback
+slinger
+slinging
+slings
+slingshot
+slink
+slinked
+slinkier
+slinkily
+slinkiness
+slinking
+slinks
+slinky
+slip
+slip's
+slipcase
+slipcover
+slipform
+slipknot
+slipnoose
+slipover
+slippage
+slipped
+slipper
+slipper's
+slipperier
+slipperiness
+slippers
+slipperwort
+slippery
+slippier
+slipping
+slippy
+slips
+slipsheet
+slipshod
+slipslop
+slipsole
+slipstick
+slipstream
+slipup
+slipway
+slit
+slit's
+slither
+slithered
+slithering
+slithers
+slithery
+slitless
+slits
+slitter
+slitters
+slitting
+sliver
+slivered
+slivering
+slivers
+slivery
+slivovitz
+Sloan
+Sloane
+slob
+slobber
+slobbered
+slobberer
+slobbering
+slobbers
+slobbery
+slobbish
+Slocum
+Slocum's
+sloe
+slog
+slogan
+slogan's
+sloganeer
+sloganeering
+sloganize
+sloganizes
+slogans
+slogger
+slogging
+sloop
+sloops
+sloot
+slop
+slope
+sloped
+sloper
+slopers
+slopes
+sloping
+slopped
+sloppier
+sloppily
+sloppiness
+slopping
+sloppy
+slops
+slopwork
+slopworker
+slosh
+sloshed
+slot
+slot's
+slotback
+sloth
+slothful
+slothfully
+slothfulness
+sloths
+slots
+slotted
+slotting
+slouch
+slouched
+sloucher
+slouches
+slouchier
+slouchily
+slouchiness
+slouching
+slouchy
+slough
+sloughed
+sloughing
+sloughs
+sloughy
+Slovak
+Slovakia
+Slovakia's
+sloven
+Slovene
+Slovenia
+Slovenia's
+slovenliness
+slovenly
+slow
+slowcoach
+slowdown
+slowed
+slower
+slowest
+slowing
+slowish
+slowly
+slowness
+slowpoke
+slows
+slowworm
+slub
+slubber
+slubberdegullion
+slubbered
+slubbering
+slubbing
+sludge
+sludges
+sludgier
+sludgy
+slue
+sluff
+slug
+slugabed
+slugfest
+sluggard
+sluggardly
+sluggardness
+slugged
+slugger
+sluggers
+slugging
+sluggish
+sluggishly
+sluggishness
+slugs
+sluice
+sluiced
+sluices
+sluiceway
+sluicing
+sluicy
+sluing
+slum
+slum's
+slumber
+slumber's
+slumbered
+slumberer
+slumbering
+slumberous
+slumbers
+slumbery
+slumbrous
+slumgullion
+slumlord
+slummer
+slummier
+slumming
+slummy
+slump
+slumped
+slumps
+slums
+slung
+slungshot
+slunk
+slur
+slur's
+slurp
+slurped
+slurping
+slurps
+slurried
+slurries
+slurring
+slurry
+slurrying
+slurs
+slush
+slushier
+slushiness
+slushy
+slut
+sluttish
+sluttishly
+sluttishness
+sly
+slyboots
+slyer
+slyest
+slyly
+slyness
+slype
+smack
+smacked
+smacker
+smacking
+smacks
+small
+smallage
+smallboy
+smallclothes
+smaller
+smallest
+Smalley
+Smalley's
+smallholding
+smallish
+smallmouth
+smallness
+smallpox
+smallsword
+smalltime
+Smallwood
+smaltite
+smalto
+smaragd
+smaragdite
+smarm
+smarmy
+smart
+smarted
+smarten
+smartened
+smartening
+smarter
+smartest
+smartie
+smarties
+smarting
+smartly
+smartness
+smarts
+smartweed
+smarty
+smash
+smashed
+smasher
+smashers
+smashes
+smashing
+smashingly
+smashup
+smatch
+smatter
+smatterer
+smattering
+smatterings
+smear
+smearcase
+smeared
+smearer
+smearing
+smears
+smeary
+Smeaton
+smectic
+smegma
+smell
+smelled
+smeller
+smellier
+smelling
+smells
+smelly
+smelt
+smelter
+smeltery
+smelts
+Smetana
+smew
+smidgen
+smidgeon
+smilacaceous
+Smilax
+smile
+smiled
+smileless
+smilelessly
+smiler
+smiles
+smiley
+smiley's
+smilies
+smiling
+smilingly
+smirch
+smirk
+smirked
+smirky
+Smirnov
+smit
+smite
+smiter
+smith
+smith's
+smithereens
+smithery
+Smithfield
+smithies
+smiths
+Smithson
+Smithson's
+Smithsonian
+smithsonite
+Smithtown
+smithy
+smiting
+smitten
+smock
+smocking
+smocks
+smog
+smoggier
+smoggy
+smogless
+smokable
+smoke
+smokeable
+smokechaser
+smoked
+smokeho
+smokehouse
+smokejack
+smokeless
+smokelike
+smokeproof
+smoker
+smoker's
+smokers
+smokes
+smokescreen
+smokestack
+smokey
+smokier
+smokies
+smokily
+smokiness
+smoking
+smoko
+smoky
+smolder
+smoldered
+smoldering
+smolderingly
+smolders
+Smolensk
+Smollett
+smolt
+smooch
+smooching
+smoochy
+smoodge
+smooth
+smoothbore
+smoothed
+smoothen
+smoothened
+smoothening
+smoother
+smoothers
+smoothes
+smoothest
+smoothie
+smoothies
+smoothing
+smoothly
+smoothness
+smooths
+smoothy
+smorgasbord
+smote
+smother
+smothered
+smothering
+smothers
+smothery
+smoulder
+smriti
+SMSA
+smsa
+smsa's
+SMSA's
+SMSAs
+smsas
+SMTP
+Smucker
+smudge
+smudged
+smudgily
+smudginess
+smudging
+smudgy
+smug
+smugger
+smuggest
+smuggle
+smuggled
+smuggler
+smugglers
+smuggles
+smuggling
+smugly
+smugness
+smut
+smutch
+smutchy
+smuts
+smutted
+smuttier
+smuttily
+smuttiness
+smutting
+smutty
+Smyrna
+Smyrna's
+Smythe
+snack
+snackette
+snacks
+snaffle
+snaffled
+snaffling
+snafu
+snag
+snagged
+snagging
+snaggletooth
+snaggletoothed
+snaggy
+snags
+snail
+snail's
+snaillike
+snails
+snake
+snakebird
+snakebite
+snakebite's
+snakebites
+snaked
+snakelike
+snakemouth
+snakeroot
+snakes
+snakeskin
+snakestrike
+snakeweed
+snakily
+snaking
+snaky
+snap
+snapback
+snapdragon
+snapdragons
+snappe
+snapped
+snapper
+snapper's
+snappers
+snappier
+snappiest
+snappily
+snappiness
+snapping
+snappish
+snappishly
+snappishness
+snappy
+snaps
+snapshoot
+snapshooter
+snapshot
+snapshot's
+snapshots
+snare
+snared
+snarer
+snares
+snarf
+snarfed
+snarfing
+snarfings
+snarfs
+snaring
+snark
+snarks
+snarl
+snarled
+snarler
+snarling
+snarls
+snarly
+snash
+snatch
+snatched
+snatcher
+snatches
+snatching
+snatchy
+snath
+snathe
+snazzier
+snazzy
+SNCC
+sndmsg
+snead
+Snead
+sneak
+sneaked
+sneaker
+sneakered
+sneakers
+sneakier
+sneakiest
+sneakily
+sneakiness
+sneaking
+sneakingly
+sneaks
+sneaky
+sneap
+sneck
+sned
+Sneed
+sneed
+sneer
+sneered
+sneerer
+sneering
+sneers
+sneesh
+sneeze
+sneezed
+sneezer
+sneezes
+sneezeweed
+sneezewort
+sneezing
+sneezy
+snell
+snelling
+snib
+snick
+snicker
+snickered
+snickerer
+snickering
+snickersnee
+snickery
+snicket
+snide
+snidely
+snideness
+snider
+snidest
+sniff
+sniffed
+sniffer
+sniffily
+sniffiness
+sniffing
+sniffish
+sniffishly
+sniffishness
+sniffle
+sniffled
+sniffler
+sniffles
+sniffling
+sniffs
+sniffy
+snifter
+snigger
+sniggered
+sniggerer
+sniggering
+sniggle
+sniggled
+sniggling
+snip
+snipe
+sniped
+snipefish
+sniper
+sniper's
+snipers
+sniperscope
+snipes
+sniping
+snipped
+snipper
+snipper's
+snippers
+snippet
+snippety
+snippier
+snipping
+snippy
+snips
+snit
+snitch
+snitcher
+snivel
+sniveled
+sniveler
+snivelers
+sniveling
+snivelings
+snob
+snobbery
+snobbish
+snobbishly
+snobbishness
+snobbism
+snobby
+SNOBOL
+snobs
+snobsniveling
+snodgrass
+Snodgrass
+snog
+snollygoster
+snood
+snook
+snooker
+snookers
+snooks
+snoop
+snooped
+snooper
+snooperscope
+snoopily
+snooping
+snoops
+snoopy
+snoot
+snootier
+snootily
+snootiness
+snooty
+snooze
+snoozer
+snoozes
+snoozing
+snoozle
+snoozled
+snoozles
+snoozling
+snopes
+snore
+snored
+snorer
+snores
+snoring
+snorkel
+snorkeled
+snorkeler
+snorkeling
+snorri
+snort
+snorted
+snorter
+snorting
+snorts
+snot
+snotty
+snout
+snout's
+snouted
+snoutish
+snouts
+snouty
+snow
+snowball
+snowballed
+snowballing
+snowballs
+snowbank
+snowbank's
+snowbanks
+Snowbelt
+Snowbelt's
+snowberry
+snowbird
+snowblink
+snowblower
+snowblowers
+snowbound
+snowbrush
+snowcap
+snowcapped
+snowdon
+snowdonia
+snowdrift
+snowdrop
+snowed
+snowfall
+snowfield
+snowflake
+snowflakes
+snowier
+snowiest
+snowily
+snowiness
+snowing
+snowless
+snowmaker
+snowmaking
+snowman
+snowmelt
+snowmen
+snowmobile
+snowmobiler
+snowmobiling
+snowpack
+snowplough
+snowplow
+snows
+snowscape
+snowshed
+snowshoe
+snowshoe's
+snowshoed
+snowshoeing
+snowshoer
+snowshoes
+snowslide
+snowstorm
+snowsuit
+snowy
+snub
+snubbed
+snubber
+snubbiness
+snubbing
+snubby
+snubness
+snubs
+snuck
+snuff
+snuffbox
+snuffboxes
+snuffed
+snuffer
+snuffing
+snuffle
+snuffled
+snuffler
+snuffling
+snuffs
+snuffy
+snug
+snugged
+snugger
+snuggery
+snuggest
+snugging
+snuggle
+snuggled
+snuggles
+snuggling
+snuggly
+snugly
+snugness
+snugs
+Snyder
+snye
+so
+soak
+soakage
+soakaway
+soaked
+soaker
+soaking
+soaks
+soap
+soapbark
+soapberry
+soapbox
+soapboxes
+soaped
+soapier
+soapily
+soapiness
+soaping
+soapless
+soapmaking
+soapolallie
+soaps
+soapstone
+soapstones
+soapsud
+soapsuds
+soapwort
+soapy
+soar
+soared
+soarer
+soares
+soaring
+soars
+sob
+soba
+sobbed
+sobbing
+sobbingly
+sobe
+sobeit
+sober
+sobered
+soberer
+soberest
+sobering
+soberize
+soberized
+soberizes
+soberizing
+soberly
+soberness
+sobers
+sobersided
+sobersides
+sobf
+sobibor
+Sobranje
+sobriety
+sobriquet
+sobs
+Soc
+socage
+socager
+socal
+soccage
+soccer
+soche
+sochi
+sociability
+sociable
+sociableness
+sociably
+social
+socialism
+socialist
+socialist's
+socialistic
+socialistically
+socialists
+socialite
+sociality
+socialization
+socialization's
+socializations
+socialize
+socialized
+socializer
+socializes
+socializing
+socially
+societal
+societally
+Societe
+societies
+society
+society's
+Socinian
+socinianism
+socinus
+socio
+sociobiology
+sociocultural
+socioculturally
+sociodemographic
+socioeconomic
+socioeconomically
+socioeconomics
+sociolinguistic
+sociolinguistics
+sociologic
+sociological
+sociologically
+sociologist
+sociologists
+sociology
+sociometric
+sociometry
+sociopath
+sociopathic
+sociopolitical
+sociosexual
+sociosexuality
+sock
+sockdolager
+sockdologer
+sockdologizing
+socked
+socket
+socket's
+sockets
+sockeye
+socking
+socks
+socle
+socman
+socola
+soconoco
+Socrates
+Socratic
+socred
+sod
+sod's
+soda
+sodalist
+sodalite
+sodality
+sodamide
+sodbuster
+sodded
+sodden
+soddened
+soddening
+soddenly
+soddenness
+sodding
+Soddy
+soddy
+Soderblom
+Soderstrom
+sodic
+sodium
+Sodom
+sodomite
+sodomy
+sods
+soekarno
+soemba
+soembawa
+soenda
+soerabaja
+soeren
+soever
+sofa
+sofa's
+sofar
+sofas
+Soffel
+soffit
+Sofia
+soft
+softa
+softback
+softball
+softbound
+softcover
+soften
+softened
+softener
+softening
+softens
+softer
+softest
+softhead
+softheaded
+softheadedly
+softheadedness
+softhearted
+softheartedly
+softheartedness
+softie
+softies
+softish
+softly
+softness
+software
+software's
+softwares
+softwood
+softy
+sogat
+Sogdian
+sogdiana
+soggier
+soggily
+sogginess
+soggy
+soh
+sohn
+soho
+soign
+soignee
+soil
+soilage
+soilborne
+soiled
+soilge
+soiling
+soilless
+soils
+soilure
+soir
+soiree
+soirees
+soissons
+sojourn
+sojourner
+sojourners
+soke
+sokeman
+sokol
+sokolev
+sokolov
+sokolsky
+sokoto
+sokotra
+Sol
+sola
+solace
+solaced
+solacement
+solacer
+solacing
+solan
+solanaceous
+solander
+solanin
+solanine
+solanum
+solar
+solarimeter
+solarism
+solarium
+solarization
+solarization's
+solarizations
+solarize
+solarized
+solarizes
+solarizing
+solate
+solated
+solating
+solatium
+sold
+soldan
+solder
+solderability
+soldered
+solderer
+soldering
+solders
+soldi
+soldier
+soldiered
+soldiering
+soldierize
+soldierizes
+soldierly
+soldiers
+soldiership
+soldiery
+soldo
+sole
+solecism
+solecistic
+solecize
+solecized
+solecizes
+solecizing
+soled
+solely
+solemn
+solemnify
+solemnity
+solemnization
+solemnization's
+solemnizations
+solemnize
+solemnized
+solemnizer
+solemnizers
+solemnizes
+solemnizing
+solemnly
+solemnness
+soleness
+Solenodon
+solenoid
+solenoidal
+solenoids
+solent
+soleplate
+soleprint
+soles
+solesmes
+soleure
+solfatara
+solfeggio
+solferino
+soli
+solicit
+solicitant
+solicitation
+solicited
+soliciting
+solicitor
+solicitors
+solicitorship
+solicitous
+solicitously
+solicitousness
+solicits
+solicitude
+solid
+solidago
+solidarism
+solidarist
+solidaristic
+solidarity
+solidary
+solidification
+solidified
+solidifies
+solidify
+solidifying
+solidity
+solidly
+solidness
+solids
+solidus
+solifidian
+solifluction
+solihull
+soliloquist
+soliloquization
+soliloquize
+soliloquized
+soliloquizer
+soliloquizers
+soliloquizes
+soliloquizing
+soliloquizing's
+soliloquizingly
+soliloquizings
+soliloquy
+soliman
+soling
+solingen
+solipsism
+solipsist
+solipsistic
+solitaire
+solitarily
+solitariness
+solitary
+soliton
+solitude
+solitude's
+solitudes
+solitudinarian
+solitudinem
+solleret
+sollicker
+Solly
+solmization
+soln
+solo
+solo's
+soloed
+soloing
+soloist
+soloists
+Solomon
+Solon
+solonchak
+solonets
+solonetz
+solonetzic
+solos
+solothurn
+Soloviev
+solstice
+solstitial
+Solti
+solubility
+solubilization
+solubilize
+solubilized
+solubilizes
+solubilizing
+soluble
+solubleness
+solubly
+solum
+solus
+solute
+solution
+solution's
+solutions
+solutize
+solutizer
+solutizers
+solutizes
+Solutrean
+solvability
+solvable
+solvate
+solvated
+solvating
+solvation
+solvay
+solve
+solved
+solvency
+solvent
+solvent's
+solventless
+solvently
+solvents
+solver
+solvers
+solves
+solving
+solvolysis
+solvolytic
+solway
+solyman
+Solzhenitsyn
+soma
+Somali
+Somalia
+Somaliland
+Somalis
+somatic
+somatically
+somatogenic
+somatological
+somatology
+somatoplasm
+somatoplastic
+somatopleure
+somatopleuric
+somatosensory
+somatotrophin
+somatotropin
+somatotype
+somatotypic
+somatotypically
+somber
+somberly
+somberness
+sombre
+sombrero
+sombrous
+some
+somebodies
+somebody
+somebody'll
+somebody's
+someday
+somedeal
+somehow
+someone
+someone'll
+someone's
+someplace
+someplace's
+somers
+somersault
+somersaulting
+somersaults
+Somerset
+Somerville
+something
+sometime
+sometimes
+someway
+someways
+somewhat
+somewhen
+somewhere
+somewheres
+somewhither
+somewise
+somite
+somitic
+somme
+sommelier
+sommeliers
+Sommerfeld
+Sommerfeld's
+somnambulant
+somnambular
+somnambulate
+somnambulation
+somnambulator
+somnambulism
+somnambulist
+somnambulistic
+somnambulistically
+somnifacient
+somniferous
+somniferously
+somniloquy
+somnolence
+somnolency
+somnolent
+somnolently
+somnus
+son
+son's
+sonambula
+sonance
+sonant
+sonantized
+sonantized's
+sonantizeds
+sonar
+sonarman
+sonars
+sonata
+sonatas
+sonatina
+sondage
+sonde
+Sondheim
+sone
+Sonenberg
+song
+song's
+songau
+songbag
+songbird
+songbook
+songfest
+songful
+songfully
+songfulness
+Songhai
+songkok
+songless
+songlessly
+songs
+songsmith
+songster
+songtress
+songwriter
+songwriting
+sonic
+sonically
+sonicate
+sonicated
+sonication
+sonicator
+sonicators
+soniferous
+sonless
+sonly
+sonnet
+sonnet's
+sonneteer
+sonnetize
+sonnetizes
+sonnets
+sonnobuoy
+sonny
+sonobuoy
+sonofabitch
+sonogram
+sonogram's
+sonograms
+Sonoma
+Sonora
+sonorant
+sonorities
+sonority
+sonorous
+sonorously
+sonorousness
+sonovox
+sons
+sonship
+sonsie
+sonsy
+sonuvabitch
+Sony
+Sony's
+soo
+soochow
+sook
+soomed
+soon
+sooner
+soonest
+soong
+soot
+sooth
+soothe
+soothed
+soother
+soothes
+soothfast
+soothing
+soothingly
+soothingness
+soothly
+soothsay
+soothsayer
+soothsayers
+soothsaying
+sootier
+sootily
+sootiness
+sooty
+sop
+Sophia
+Sophias
+Sophie
+sophism
+sophist
+sophister
+sophistic
+sophistical
+sophistically
+sophisticate
+sophisticated
+sophisticatedly
+sophisticates
+sophistication
+sophistocated
+sophistry
+Sophoclean
+Sophocles
+sophomore
+sophomore's
+sophomores
+sophomoric
+sophy
+sopite
+sopited
+sopiting
+sopor
+soporiferous
+soporiferousness
+soporific
+soporific's
+soporifics
+soppier
+sopping
+soppy
+sopranino
+soprano
+sopranos
+sops
+sopsaisana
+sora
+sorata
+sorb
+sorbability
+sorbable
+sorbate
+sorbed
+sorbefacient
+sorbent
+Sorbian
+sorbic
+sorbitol
+Sorbonne
+sorcerer
+sorcerer's
+sorcerers
+sorceress
+sorcerous
+sorcery
+Sordello
+sordid
+sordidly
+sordidness
+sordino
+sore
+soredium
+sorehead
+soreheaded
+sorely
+soreness
+Sorensen
+Sorenson
+sorer
+sores
+sorest
+sorghum
+sorgo
+sori
+soricine
+sorites
+sorn
+sorocaba
+sororal
+sororate
+sororicide
+sororities
+sorority
+sorosis
+sorption
+sorptive
+sorrel
+sorrentine
+Sorrentine
+sorrentino
+sorrento
+sorrier
+sorriest
+sorrily
+sorriness
+sorrow
+sorrow's
+sorrower
+sorrowful
+sorrowfully
+sorrowfulness
+sorrows
+sorry
+sort
+sortable
+sorted
+sorter
+sorters
+sortie
+sortilege
+sorting
+sortition
+sorts
+sorus
+sos
+SOS
+sosnowiec
+sostenuto
+sot
+soteriological
+soteriology
+Sothic
+Sothis
+Sotho
+sotol
+sottish
+sottishly
+sottishness
+sotto
+sotun
+sou
+soubise
+soubrette
+soubriquet
+souchong
+soudan
+souffle
+sough
+sought
+soukhouma
+soul
+soul's
+soule
+souled
+soulful
+soulfully
+soulfulness
+soulless
+soullessly
+soullessness
+souls
+soult
+sound
+soundable
+soundboard
+soundbox
+sounded
+sounder
+soundest
+sounding
+sounding's
+soundingly
+soundings
+soundless
+soundlessly
+soundly
+soundness
+soundpost
+soundproof
+soundproofed
+soundproofing
+soundproofs
+sounds
+soup
+soup's
+soupfin
+Souphanourong
+soupier
+soups
+soupspoon
+soupy
+sour
+sourberry
+source
+source's
+sourceless
+sources
+sourdine
+sourdough
+soured
+sourer
+sourest
+souring
+sourish
+sourly
+sourness
+sourpuss
+sours
+soursop
+sourwood
+Sousa
+sousaphone
+souse
+sousing
+Souslik
+Sousse
+sout
+soutache
+soutane
+souter
+Souterrain
+south
+Southampton
+southbound
+Southdown
+southeast
+southeaster
+southeasterly
+southeastern
+southeasternmost
+southeastward
+southeastwards
+souther
+southerly
+Southern
+southern
+southerner
+southerners
+southernisms
+southernize
+southernizes
+southernly
+southernmost
+southernness
+Southernwood
+Southey
+Southfield
+southing
+southland
+southmost
+southpaw
+southpaws
+Southport
+Southron
+souths
+southward
+southwards
+Southwark
+southwest
+southwester
+southwesterly
+southwestern
+southwesternmost
+southwestward
+southwestwards
+soutine
+souvenir
+souvenirs
+sovereign
+sovereign's
+sovereignly
+sovereigns
+sovereignty
+Sovetsk
+Soviet
+soviet
+soviet's
+sovietism
+sovietization
+sovietization's
+sovietizations
+sovietize
+Sovietized
+sovietizes
+Sovietizing
+soviets
+sovkhoz
+sovkhozes
+sovran
+sovranty
+sow
+sowbelly
+sowbug
+sowbug's
+sowbugs
+sowens
+sower
+sowered
+Soweto
+sowing
+sown
+sox
+soxhlet
+soy
+soya
+soybean
+soybeans
+Soyinka
+Soyuz
+sozzled
+spa
+Spaak
+space
+spaceband
+spacecraft
+spaced
+spaceflight
+spaceless
+spaceman
+spaceport
+spacer
+spacers
+spaces
+spaceship
+spaceship's
+spaceships
+spacesuit
+spacesuits
+spacetime
+spacewalk
+spacewalker
+spacewalking
+Spacewar
+spacial
+spacing
+spacings
+spacious
+spaciously
+spaciousness
+spackle
+spackled
+spackling
+spacs
+spacward
+spada
+spade
+spaded
+spadefish
+spadeful
+spader
+spades
+spadework
+spadiceous
+spadices
+spadille
+spading
+spadix
+spaeing
+Spafford
+Spafford's
+spaghetti
+spagyric
+spahi
+spahn
+Spahn
+Spain
+Spain's
+spake
+spalato
+Spalding
+spalding
+spall
+spallable
+spallation
+spalled
+spalling
+spalpeen
+spam
+span
+span's
+spancel
+spandrel
+spandrels
+spandril
+spang
+spangle
+spangled
+spangles
+spangling
+Spaniard
+Spaniardization
+Spaniardization's
+Spaniardizations
+Spaniardize
+Spaniardizes
+Spaniards
+spaniel
+Spanish
+Spanish's
+Spanishize
+Spanishizes
+spank
+spanked
+spanker
+spanking
+spanks
+spanned
+spanner
+spanner's
+spanners
+spanning
+spans
+spanworm
+spar
+sparable
+sparce
+spare
+spareable
+spared
+sparely
+spareness
+sparer
+sparerib
+spareribs
+spares
+sparest
+sparge
+sparger
+sparging
+sparid
+sparing
+sparingly
+spark
+sparked
+sparker
+sparkier
+sparkily
+sparking
+sparkish
+sparkle
+sparkled
+sparkler
+sparkles
+sparkling
+Sparkman
+sparkplug
+sparks
+sparky
+sparling
+sparlings
+sparoid
+sparred
+sparring
+sparrow
+sparrow's
+sparrowgrass
+sparrowhawk
+sparrows
+sparry
+spars
+sparse
+sparsely
+sparseness
+sparser
+sparsest
+sparsity
+Sparta
+Spartacus
+spartan
+Spartan
+Spartanize
+Spartanizes
+sparteine
+spas
+spasm
+spasmodic
+spasmodical
+spasmodically
+spasmolytic
+spasmolytically
+spasms
+Spassky
+spastic
+spastically
+spasticity
+spat
+spatchcock
+spate
+spate's
+spates
+spathe
+spathic
+spathulate
+spatial
+spatiality
+spatialization
+spatialization's
+spatializations
+spatialize
+spatializes
+spatially
+spatiotemporal
+spatiotemporally
+spatlum
+spats
+spatted
+spatter
+spatterdash
+spatterdock
+spattered
+spatting
+spatula
+spatulate
+Spaulding
+Spaulding's
+spavin
+spavined
+spawn
+spawned
+spawner
+spawning
+spawns
+spay
+spayed
+spaying
+speak
+speakable
+speakeasy
+speaker
+speaker's
+Speakerphone
+speakers
+speakership
+speaking
+speaks
+spean
+spear
+speared
+spearer
+spearfish
+spearhead
+spearing
+spearman
+spearmint
+spears
+spearwort
+spec
+special
+specialism
+specialisms
+specialist
+specialist's
+specialistic
+specialists
+specialization
+specialization's
+specializations
+specialize
+specialized
+specializer
+specializers
+specializes
+specializing
+specially
+specialness
+specials
+specialties
+specialty
+specialty's
+speciate
+speciation
+speciational
+specie
+species
+specifiability
+specifiable
+specific
+specifically
+specification
+specifications
+specificities
+specificity
+specificize
+specificizes
+specifics
+specified
+specifier
+specifiers
+specifies
+specify
+specifying
+specimen
+specimen's
+specimenize
+specimenizes
+specimens
+speciosity
+specious
+speciously
+speciousness
+speck
+speck's
+speckle
+speckled
+speckles
+speckling
+specks
+specs
+specsartine
+spect
+spectacle
+spectacled
+spectacles
+spectacular
+spectacularly
+spectate
+spectated
+spectating
+spectator
+spectator's
+spectators
+spectatress
+specter
+specter's
+spectered
+specterlike
+specterlike's
+specterlikes
+specters
+spector
+Spector's
+spectra
+spectral
+spectrality
+spectrally
+spectralness
+spectrobolometer
+spectrofluorimeter
+spectrofluorimeter's
+spectrofluorimeters
+spectrofluorometer
+spectrofluorometer's
+spectrofluorometers
+spectrofluorometric
+spectrofluorometry
+spectrogram
+spectrogram's
+spectrograms
+spectrograph
+spectrographic
+spectrographically
+spectrography
+spectroheliogram
+spectroheliogram's
+spectroheliograms
+spectroheliograph
+spectroheliography
+spectrohelioscope
+spectrometer
+spectrometer's
+spectrometers
+spectrometric
+spectrometry
+spectrophotometer
+spectrophotometer's
+spectrophotometers
+spectrophotometric
+spectrophotometrical
+spectrophotometrically
+spectrophotometry
+spectroscope
+spectroscopic
+spectroscopical
+spectroscopically
+spectroscopist
+spectroscopy
+spectrum
+spectrums
+specular
+specularity
+specularly
+speculate
+speculated
+speculates
+speculating
+speculation
+speculations
+speculative
+speculatively
+speculator
+speculator's
+speculators
+speculum
+sped
+speech
+speech's
+speeches
+speechify
+speechless
+speechlessly
+speechlessness
+speed
+speedball
+speedboat
+speedboater
+speedboating
+speeded
+speeder
+speeders
+speedier
+speedily
+speediness
+speeding
+speedlight
+speedo
+speedometer
+speedometer's
+speedometers
+speeds
+speedster
+speedup
+speedup's
+speedups
+speedway
+speedwell
+speedwriting
+speedy
+speel
+Speenhamland
+speer
+speight
+speir
+speiss
+spelaean
+speleogenesis
+speleogenetic
+speleological
+speleologist
+speleology
+spelk
+spell
+spellbind
+spellbinder
+spellbound
+spelldown
+spelled
+speller
+spellers
+spellican
+spelling
+spellings
+spells
+spelt
+spelter
+spelunker
+spelunking
+Spenborough
+Spence
+Spencer
+Spencer's
+Spencerian
+spend
+spendable
+spender
+spenders
+spending
+spends
+spendthrift
+Spengler
+spenglerian
+Spenglerian
+Spenser
+Spenserian
+spent
+speos
+sperm
+spermaceti
+spermagonium
+spermary
+spermatheca
+spermathecal
+spermatial
+spermatic
+spermatid
+spermatium
+spermatocidal
+spermatocide
+spermatocyte
+spermatogenesis
+spermatogenetic
+spermatogenic
+spermatogonial
+spermatogonium
+spermatophore
+spermatophyte
+spermatophytic
+spermatorrhoea
+spermatozoa
+spermatozoal
+spermatozoan
+spermatozoid
+spermatozoon
+spermic
+spermicidal
+spermicide
+spermidine
+spermine
+spermiogenesis
+spermogonium
+spermophile
+spermophyte
+spermous
+sperms
+Sperry
+sperrylite
+spessartite
+spew
+spewer
+spewing
+spewings
+spey
+speyer
+sphagnous
+sphagnum
+sphalerite
+sphene
+sphenic
+sphenodon
+sphenodont
+sphenogram
+sphenoid
+sphenoidal
+sphenopsid
+spheral
+sphere
+sphere's
+spheres
+spheric
+spherical
+spherically
+sphericity
+spherics
+sphering
+spheroid
+spheroidal
+spheroidally
+spheroidicity
+spheroidize
+spheroidizes
+spherometer
+spherometer's
+spherometers
+spheroplast
+spherule
+spherules
+spherulite
+spherulitic
+sphery
+sphincter
+sphincteral
+sphinges
+sphingid
+sphingomyelin
+sphingosine
+sphinx
+sphinxes
+sphragistics
+sphygmic
+sphygmograph
+sphygmographic
+sphygmography
+sphygmoid
+sphygmomanometer
+sphygmomanometer's
+sphygmomanometers
+sphygmomanometric
+sphygmomanometrically
+sphygmomanometry
+spic
+Spica
+spicae
+Spicas
+spicate
+spiccato
+spice
+spiceberry
+spicebush
+spiced
+spicery
+spices
+spicier
+spicily
+spiciness
+spicing
+spicula
+spicular
+spiculate
+spiculation
+spicule
+spiculiferous
+spiculum
+spicy
+spider
+spider's
+spiderman
+spiders
+spiderweb
+spiderwort
+spidery
+spied
+Spiegel
+spiegeleisen
+spiel
+spieler
+spier
+spies
+spif
+spiffier
+spiffing
+spiffy
+spiflicate
+spignel
+spigot
+spigots
+spike
+spiked
+spikelet
+spikelike
+spikenard
+spiker
+spikes
+spikier
+spiking
+spiky
+spile
+spiled
+spiles
+spiling
+spill
+spillable
+spillage
+spillage's
+spillages
+spilled
+spiller
+spillikin
+spillikins
+spilling
+spillover
+spillover's
+spillovers
+spills
+spillway
+spilosite
+spilt
+spilth
+spin
+spina
+spinach
+spinal
+spinally
+spinco
+spindle
+spindled
+spindlelegs
+spindler
+spindles
+spindling
+spindly
+spindrift
+spine
+spinel
+spineless
+spinelessly
+spinelessness
+spinelle
+spines
+spinescent
+spinet
+spinier
+spiniferous
+spinifex
+spininess
+spinless
+spinnability
+spinnaker
+spinner
+spinner's
+spinneret
+spinnerette
+spinners
+spinney
+spinneys
+spinning
+spinodal
+spinoff
+spinor
+spinose
+spinosely
+spinosity
+spinous
+spinout
+Spinoza
+Spinozism
+spinrad
+spins
+spinse
+spinster
+spinsterhood
+spinsterish
+spinthariscope
+spinule
+spinulose
+spiny
+spiracle
+spiracular
+spiraea
+spiral
+spiraled
+spiraling
+spiralization
+spiralization's
+spiralizations
+spiralize
+spiralizes
+spirally
+spirals
+spirant
+spire
+spire's
+spirea
+spired
+spireme
+spires
+spirillum
+spiring
+spirit
+spirited
+spiritedly
+spiritedness
+spiriting
+spiritism
+spiritist
+spiritistic
+spiritize
+spiritizes
+spiritless
+spiritlessly
+spiritlessness
+spiritoso
+spiritous
+spirits
+spiritual
+spiritualism
+spiritualist
+spiritualistic
+spirituality
+spiritualization
+spiritualization's
+spiritualizations
+spiritualize
+spiritualized
+spiritualizer
+spiritualizers
+spiritualizes
+spiritualizing
+spiritually
+spiritualness
+spirituals
+spiritualty
+spirituel
+spirituelle
+spirituous
+spiritus
+spirketting
+Spiro
+Spiro's
+spirochetal
+spirochete
+spirochete's
+spirochetes
+spirochetosis
+spirograph
+spirographic
+spirography
+spirogyra
+spiroid
+spirometer
+spirometer's
+spirometers
+spirometric
+spirometry
+spironolactone
+spirt
+spirula
+spiry
+spit
+spital
+spitball
+spitchcock
+spite
+spited
+spiteful
+spitefully
+spitefulness
+spites
+spitfire
+spithead
+spiting
+spits
+Spitsbergen
+spitsticker
+spitted
+spitter
+spitting
+spittle
+spittoon
+spittoons
+Spitz
+spiv
+Spivakov
+splake
+splanchnic
+splash
+splashback
+splashbacks
+splashboard
+splashdown
+splashdowns
+splashed
+splasher
+splashers
+splashes
+splashier
+splashily
+splashiness
+splashing
+splashy
+splat
+splatter
+splattered
+splay
+splayed
+splayfoot
+splayfooted
+spleen
+spleenful
+spleenwort
+spleeny
+splendent
+splendid
+splendidly
+splendidness
+splendiferous
+splendiferously
+splendiferousness
+splendor
+splendor's
+splendorous
+splendors
+splendrous
+splenectomized
+splenectomy
+splenetic
+splenetically
+splenic
+splenitis
+splenius
+splenomegaly
+splent
+spleuchan
+splice
+spliced
+splicer
+splicers
+splices
+splicing
+splicings
+spline
+spline's
+splined
+splines
+splint
+splinted
+splinter
+splintered
+splintering
+splinters
+splintery
+splinting
+splints
+split
+split's
+splits
+splitter
+splitter's
+splitters
+splitting
+splittings
+splodge
+splore
+splotch
+splotched
+splotches
+splotchy
+splurge
+splurges
+splurging
+splutter
+splutterer
+spluttery
+spock
+spode
+spodumene
+spoil
+spoilable
+spoilables
+spoilage
+spoiled
+spoiler
+spoilers
+spoilfive
+spoiling
+spoils
+spoilsman
+spoilsport
+spoilt
+Spokane
+spoke
+spoked
+spoken
+spokes
+spokeshave
+spokesman
+spokesmen
+spokespeople
+spokesperson
+spokesperson's
+spokespersons
+spokeswoman
+spoking
+spoliate
+spoliation
+spoliator
+spondaic
+spondee
+spondulix
+spondylitis
+sponge
+sponged
+sponger
+spongers
+sponges
+spongier
+spongin
+sponginess
+sponging
+spongioblast
+spongy
+sponsion
+sponson
+sponsor
+sponsored
+sponsorial
+sponsoring
+sponsors
+sponsorship
+spontaneity
+spontaneous
+spontaneously
+spontaneousness
+spontoon
+spoof
+spook
+spookier
+spookily
+spookiness
+spookish
+spooky
+spool
+spooled
+spooler
+spoolers
+spooling
+spools
+spoon
+spoonbill
+spoondrift
+spooned
+spoonerism
+spooney
+spoonful
+spoonfuls
+spoonier
+spooning
+spoons
+spoonsful
+spoony
+spoor
+sporades
+sporadic
+sporadically
+sporadicly
+sporangial
+sporangiophore
+sporangium
+spore
+spore's
+spored
+spores
+sporicidal
+sporicide
+sporiferous
+sporing
+sporocarp
+sporocyst
+sporocystic
+sporocyte
+sporogenesis
+sporogenic
+sporogenous
+sporogonic
+sporogonium
+sporogonos
+sporogony
+sporophore
+sporophyll
+sporophyte
+sporophytic
+sporopollenin
+sporotrichosis
+sporozoan
+sporozoite
+sporran
+sport
+sported
+sportful
+sportfully
+sportfulness
+sportier
+sportiest
+sportily
+sportiness
+sporting
+sportingly
+sportive
+sportively
+sportiveness
+sports
+sportscast
+sportsman
+sportsmanlike
+sportsmanly
+sportsmanship
+sportsmen
+sportswear
+sportswoman
+sportswrite
+sportswriter
+sportswriting
+sporty
+sporulate
+sporulation
+sporulative
+sporule
+Sposato
+spot
+spot's
+spotless
+spotlessly
+spotlessness
+spotlight
+spotlight's
+spotlighted
+spotlighting
+spotlights
+spots
+spottable
+spotted
+spotter
+spotter's
+spotters
+spottier
+spottily
+spottiness
+spotting
+spotty
+spousal
+spouse
+spouse's
+spouses
+spousing
+spout
+spouted
+spouter
+spouting
+spouts
+sprag
+Sprague
+Sprague's
+sprain
+sprained
+sprains
+sprang
+sprat
+Spratly
+sprawl
+sprawled
+sprawling
+sprawls
+spray
+sprayed
+sprayer
+spraying
+sprays
+spread
+spreadability
+spreadable
+spreader
+spreaders
+spreading
+spreadings
+spreads
+spreadsheet
+spreadsheets
+sprechgesang
+sprechstimme
+spree
+spree's
+sprees
+sprent
+sprier
+spriest
+sprig
+sprigging
+sprightful
+sprightfully
+sprightfulness
+sprightlier
+sprightliness
+sprightly
+sprigtail
+spring
+springal
+springald
+springboard
+springbok
+springboks
+springe
+springer
+springers
+Springfield
+Springhaas
+springhalt
+springhead
+springhouse
+springier
+springiest
+springily
+springiness
+springing
+springlet
+springs
+springtail
+springtails
+springtide
+springtime
+springvale
+springwood
+springy
+sprinkle
+sprinkled
+sprinkler
+sprinklered
+sprinkles
+sprinkling
+sprint
+sprinted
+sprinter
+sprinters
+sprinting
+sprints
+sprit
+sprite
+spritsail
+sprocket
+sprocketed
+sprocketing
+sprockets
+Sproul
+Sproul's
+sprout
+sprouted
+sprouting
+sprouts
+spruce
+spruced
+sprucely
+spruceness
+sprucer
+sprucest
+sprucier
+sprucing
+sprucy
+sprue
+spruik
+sprung
+spry
+spryer
+spryest
+spryly
+spryness
+SPSS
+spss
+spud
+spudded
+spudding
+Spuds
+spue
+spuggy
+spume
+spumescent
+spuming
+spumone
+spumoni
+spumous
+spumy
+spun
+spunk
+spunkie
+spunkier
+spunkily
+spunkiness
+spunky
+spur
+spur's
+spurge
+spurious
+spuriously
+spuriousness
+spurn
+spurned
+spurner
+spurning
+spurns
+spurred
+spurrey
+spurreys
+spurrier
+spurring
+spurry
+spurs
+spurt
+spurted
+spurting
+spurtle
+spurts
+sputa
+sputnik
+sputniks
+sputter
+sputtered
+sputterer
+sputum
+spuyten
+spy
+spyglass
+spying
+sqrt
+squab
+squabble
+squabbled
+squabbler
+squabbles
+squabbling
+squabs
+squacco
+squad
+squad's
+squadded
+squadding
+squadron
+squadron's
+squadrons
+squads
+squalane
+squalene
+squalid
+squalidly
+squalidness
+squall
+squall's
+squaller
+squallier
+squalls
+squally
+squalor
+squama
+squamae
+squamate
+squamation
+squamosal
+squamose
+squamous
+squamously
+squamulose
+squander
+squandered
+squanderer
+squandering
+squanders
+square
+squared
+squarely
+squareness
+squarer
+squares
+squarest
+squaresville
+Squaresville
+squaring
+squarish
+squarishly
+squarishness
+squark
+squarrose
+squash
+squashberry
+squashed
+squasher
+squashes
+squashier
+squashily
+squashiness
+squashing
+squashy
+squat
+squatly
+squatness
+squats
+squatted
+squatter
+squatters
+squattest
+squattier
+squatting
+squattocracy
+squatty
+squaw
+squawbush
+squawk
+squawked
+squawker
+squawking
+squawks
+squawroot
+squeak
+squeaked
+squeaker
+squeaking
+squeaks
+squeaky
+squeal
+squealed
+squealer
+squealing
+squeals
+squeamish
+squeamishly
+squeamishness
+squeegee
+squeegeed
+squeegeeing
+squeegees
+squeezability
+squeezable
+squeeze
+squeezed
+squeezer
+squeezes
+squeezing
+squelch
+squelched
+squelcher
+squelches
+squelching
+squelchy
+squeteague
+squib
+Squibb
+Squibbing
+squibs
+squid
+squidded
+squidding
+squids
+squiffed
+squiffy
+squiggle
+squiggled
+squiggles
+squiggling
+squiggly
+squilgee
+squill
+squilla
+squillae
+squills
+squinch
+squinnied
+squinny
+squinnying
+squint
+squinted
+squinter
+squinting
+squintingly
+squints
+squinty
+squirarchy
+squire
+squire's
+squirearchy
+squireen
+squirehood
+squires
+squiring
+squirish
+squirm
+squirmed
+squirming
+squirms
+squirmy
+squirrel
+squirreled
+squirrelfish
+squirreling
+squirrelly
+squirrels
+squirt
+squirted
+squirter
+squirting
+squirts
+squish
+squished
+squishes
+squishier
+squishiest
+squishiness
+squishing
+squishy
+squit
+squiz
+squoosh
+Sr
+Srbija
+Sri
+Sri's
+srinagar
+SSE
+SST
+SSW
+st
+stab
+stabat
+stabbed
+stabber
+stabbing
+stabile
+stabilities
+stability
+stability's
+stabilizable
+stabilization
+stabilization's
+stabilizations
+stabilize
+stabilized
+stabilizer
+stabilizers
+stabilizes
+stabilizing
+stable
+stableboy
+stabled
+stableman
+stablemate
+stablemen
+stableness
+stabler
+stables
+stablest
+stabling
+stablish
+stablishment
+stably
+stabroek
+stabs
+staccato
+staccatos
+stack
+stack's
+stackable
+stacked
+stacker
+stackframe
+stacking
+stacks
+stacte
+Stacy
+Stacy's
+staddle
+staddlestone
+stade
+Stade
+stadholder
+stadia
+stadiometer
+stadium
+stadium's
+stadiums
+stadtholder
+stadtholderate
+stadtholdership
+staff
+staff's
+staffa
+staffed
+staffer
+staffers
+staffing
+staffman
+Stafford
+Staffordshire
+staffs
+stag
+stag's
+stage
+stagecoach
+stagecraft
+staged
+stagehand
+stager
+stagers
+stages
+stagestruck
+stagey
+stagflation
+staggard
+stagger
+staggerbush
+staggered
+staggerer
+staggering
+staggeringly
+staggers
+staggery
+stagging
+staggy
+staghound
+stagier
+stagily
+staginess
+staging
+stagira
+Stagirite
+stagnancy
+stagnant
+stagnantly
+stagnate
+stagnated
+stagnates
+stagnating
+stagnation
+stags
+stagy
+Stahl
+Stahl's
+staid
+staidly
+staidness
+stain
+stainability
+stainable
+stained
+stainer
+staines
+staining
+stainless
+stainlessly
+stains
+stair
+stair's
+staircase
+staircase's
+staircases
+stairhead
+stairs
+stairway
+stairway's
+stairways
+stairwell
+stairwells
+stake
+staked
+stakeholder
+stakeout
+stakes
+Stakhanovism
+staking
+stalactite
+stalactite's
+stalactites
+stalactitic
+stalag
+stalagmite
+stalagmite's
+stalagmites
+stalagmitic
+stale
+staled
+stalely
+stalemate
+staleness
+staler
+stales
+stalest
+Staley
+Staley's
+Stalin
+Stalin's
+Stalinabad
+staling
+Stalingrad
+Stalinism
+Stalinist
+Stalinogrod
+Stalins
+Stalinsk
+stalk
+stalked
+stalker
+stalking
+stalkless
+stalks
+stalky
+stall
+stallard
+stalled
+stalling
+stallings
+stallion
+stallionize
+stallionizes
+stalls
+stalwart
+stalwartize
+stalwartizes
+stalwartly
+stalwartness
+stalworth
+stambul
+stamen
+stamen's
+stamens
+Stamford
+stamina
+staminal
+staminate
+staminode
+staminodium
+staminody
+stammel
+stammer
+stammered
+stammerer
+stammering
+stammers
+stamp
+stamped
+stampede
+stampeded
+stampeder
+stampedes
+stampeding
+stamper
+stampers
+stamping
+stamps
+Stan
+Stan's
+stance
+stance's
+stances
+stanch
+stancher
+stanchest
+stanchion
+stanchioned
+stanchioning
+stanchions
+stand
+standalone
+standard
+standardbred
+standardizable
+standardizable's
+standardizables
+standardization
+standardization's
+standardizations
+standardize
+standardized
+standardizer
+standardizers
+standardizes
+standardizing
+standardly
+standards
+standaway
+standby
+standbys
+standee
+stander
+standeth
+standfast
+standing
+standings
+Standish
+Standish's
+standoff
+standoffish
+standoffishly
+standoffishness
+standout
+standpat
+standpatter
+standpattism
+standpipe
+standpoint
+standpoint's
+standpoints
+stands
+standstill
+stane
+Stanford
+Stanford's
+stang
+Stanhope
+Stanhope's
+Stanislavsky
+stanite
+stank
+Stanley
+Stanleyville
+stannard
+stannaries
+stannary
+stannic
+stanniferous
+stannite
+stannous
+stannum
+stanovoi
+Stans
+stans
+Stanton
+stanza
+stanza's
+stanzaic
+stanzas
+stapedectomized
+stapedectomy
+stapedes
+stapedial
+stapelia
+stapes
+staph
+staphylinid
+staphylococcal
+staphylococcic
+staphylococcus
+staphyloplasty
+staphylorrhaphy
+staple
+stapled
+stapler
+staplers
+staples
+Stapleton
+stapling
+star
+star's
+stara
+starbird
+starboard
+starboarded
+starboarding
+starboards
+starch
+starched
+starches
+starchier
+starchily
+starchiness
+starching
+starchy
+stardom
+stardust
+stare
+stared
+starer
+stares
+starets
+starfish
+starflower
+Stargate
+Stargate's
+stargaze
+stargazer
+stargazes
+stargazing
+staring
+stark
+Starker
+starkest
+Starkey
+starkly
+starkness
+starless
+starlet
+starlet's
+starlets
+starlight
+starlike
+starling
+starlings
+starlit
+Starr
+starre
+starred
+starrier
+starring
+starry
+stars
+starship
+start
+startc
+started
+starter
+starters
+starting
+startle
+startled
+startles
+startling
+startlingly
+startlingness
+starts
+startup
+startup's
+startups
+starvation
+starve
+starved
+starveling
+starver
+starves
+starving
+starwort
+stases
+stash
+stashed
+stashes
+stashing
+stasis
+statable
+statant
+state
+state's
+stateable
+statecraft
+stated
+statedly
+statehood
+statehouse
+stateless
+statelessness
+statelier
+stateliness
+stately
+statement
+statement's
+statements
+Staten
+stater
+stateroom
+states
+stateside
+statesman
+statesman's
+statesmanlike
+statesmanly
+statesmanship
+statesmen
+statewide
+static
+statical
+statically
+statice
+statics
+stating
+station
+stational
+stationaries
+stationarily
+stationarity
+stationary
+stationed
+stationer
+stationeries
+stationery
+stationing
+stationmaster
+stations
+statism
+statist
+statistic
+statistic's
+statistical
+statistically
+statistician
+statistician's
+statisticians
+statisticize
+statisticizes
+statistics
+statius
+stative
+Statler
+stato
+statoblast
+statocyst
+statolatry
+statolith
+stator
+stators
+statoscope
+statuary
+statue
+statue's
+statued
+statues
+statuesque
+statuesquely
+statuesqueness
+statuette
+stature
+status
+statuses
+statutable
+statute
+statute's
+statutes
+statutorily
+statutoriness
+statutory
+statz
+Stauffer
+staunch
+staunchest
+staunchly
+staunchness
+Staunton
+staurolite
+staurolitic
+stauroscope
+Stavanger
+stave
+staved
+staves
+stavesacre
+staving
+Stavropol
+stavropoulos
+stay
+stayed
+stayer
+stayers
+staying
+stays
+staysail
+stdio
+stead
+steadfast
+steadfastly
+steadfastness
+steadied
+steadier
+steadies
+steadiest
+steadily
+steadiness
+steading
+steady
+steadying
+steak
+steak's
+steakhouse
+steaks
+steal
+stealer
+stealing
+steals
+stealth
+stealthier
+stealthily
+stealthiness
+stealthy
+steam
+steamboat
+steamboat's
+steamboats
+steamed
+steamer
+steamers
+steamie
+steamier
+steamily
+steaminess
+steaming
+steamroll
+steamroller
+steams
+steamship
+steamship's
+steamships
+steamtight
+steamy
+steapsin
+stearate
+stearic
+stearin
+stearine
+Stearns
+stearoptene
+steatite
+steatitic
+steatolysis
+steatopygia
+steatopygic
+steatorrhoea
+Steber
+stecher
+stedfast
+steed
+steeds
+steel
+Steele
+Steele's
+steeled
+steelers
+steelhead
+steelie
+steelier
+steelies
+steeliness
+steeling
+steelmaker
+steels
+steelwork
+steelworker
+steelworks
+steely
+steelyard
+Steen
+Steen's
+steenbok
+steep
+steeped
+steepen
+steepened
+steepening
+steeper
+steepest
+steeping
+steeple
+steeple's
+steeplebush
+steeplechase
+steeplechaser
+steeplejack
+steeples
+steeply
+steepness
+steeps
+steer
+steerable
+steerage
+steerageway
+steered
+steerer
+steering
+steers
+steersman
+steeve
+steeves
+steeving
+Stefan
+Stefan's
+Stefansson
+steffens
+Stegodon
+Stegomyia
+stegosaur
+stegosaurus
+Stegosaurus
+steichen
+Steier
+Steiermark
+stein
+Stein
+Steinbeck
+Steinbecks
+steinbecks
+Steinberg
+steiner
+steiners
+Steinitz
+stela
+stelae
+stelar
+stele
+Stella
+stellar
+stellarator
+stellate
+stelliferous
+stelliform
+stellify
+Stellite
+stellular
+stem
+stem's
+stemhead
+stemless
+stemma
+stemmata
+stemmed
+stemmer
+stemmier
+stemming
+stemmy
+stems
+stemson
+stemware
+stench
+stench's
+stenches
+stenchful
+stenchy
+stencil
+stencil's
+stenciled
+stenciler
+stencilers
+stenciling
+stencilize
+stencils
+Stendhal
+stendhal
+Stendler
+steno
+stenobathic
+stenograph
+stenographer
+stenographer's
+stenographers
+stenographic
+stenographically
+stenography
+stenohaline
+stenopetalous
+stenophagous
+stenophyllous
+stenos
+stenosed
+stenosis
+stenotherm
+stenothermal
+stenothermy
+stenotic
+stenotopic
+stenotropic
+stenotype
+stenotypist
+stenotypy
+stentor
+stentorian
+stentorophonic
+step
+step's
+stepbrother
+stepchild
+stepchildren
+stepdame
+stepdaughter
+stepfather
+stephan
+Stephan
+Stephanie
+Stephanie's
+stephanotis
+Stephen
+Stephens
+Stephenson
+stepladder
+stepladders
+steplike
+stepmother
+stepmother's
+stepmothers
+stepparent
+steppe
+stepped
+stepper
+steppes
+stepping
+steprelation
+steps
+stepsister
+stepson
+stepwise
+steradian
+stercoraceous
+stercoricolous
+sterculiaceous
+stere
+stereo
+stereo's
+stereobate
+stereochemical
+stereochemically
+stereochemistry
+stereochrome
+stereochromy
+stereogram
+stereogram's
+stereograms
+stereograph
+stereographic
+stereographically
+stereography
+stereoisomer
+stereoisomeric
+stereoisomerism
+stereoisomers
+stereological
+stereologically
+stereology
+stereometric
+stereometry
+stereomicroscope
+stereomicroscopic
+stereomicroscopically
+stereophonic
+stereophonically
+stereophony
+stereophotographic
+stereophotography
+stereopsis
+stereopticon
+stereoregular
+stereoregularity
+stereos
+stereoscope
+stereoscopic
+stereoscopically
+stereoscopy
+stereospecific
+stereospecifically
+stereospecificity
+stereotape
+stereotaxic
+stereotaxically
+stereotaxis
+stereotomy
+stereotropism
+stereotype
+stereotyped
+stereotyper
+stereotypers
+stereotypes
+stereotypic
+stereotypical
+stereotypically
+stereotyping
+stereotypy
+stereovision
+steric
+sterically
+sterics
+sterigma
+sterilant
+sterile
+sterility
+sterilizabilities
+sterilizability
+sterilizability's
+sterilizable
+sterilizable's
+sterilizables
+sterilization
+sterilization's
+sterilizations
+sterilize
+sterilized
+sterilizer
+sterilizers
+sterilizes
+sterilizing
+sterios
+sterlet
+sterling
+sterlingly
+sterlingness
+sterlitamak
+stern
+Stern
+sterna
+sternal
+Sternberg
+Sternberg's
+sterne
+sternforemost
+sternite
+sternly
+sternmost
+sternness
+Sterno
+sternocostal
+sternpost
+sterns
+sternson
+sternum
+sternutation
+sternutator
+sternutatory
+sternward
+sternwards
+sternway
+steroid
+steroidal
+steroidogenesis
+steroidogenic
+steroids
+sterol
+stertor
+stertorous
+stertorously
+stet
+stethoscope
+stethoscopic
+stethoscopically
+Stetson
+Stetsons
+stetted
+stettin
+stetting
+Steuben
+Steve
+Steve's
+stevedore
+stevedores
+Steven
+Steven's
+stevenage
+stevengraph
+Stevens
+Stevenson
+Stevie
+stevie
+stew
+steward
+steward's
+stewardess
+stewardesses
+stewards
+stewardship
+Stewart
+Stewart's
+stewed
+stewing
+stewpan
+stews
+steyr
+sthenic
+stheno
+stibine
+stibium
+stibnite
+stich
+stichometry
+stichomythia
+stichomythic
+stichomythy
+stick
+stickball
+sticked
+sticker
+stickers
+stickful
+stickhandler
+stickier
+stickiest
+stickily
+stickiness
+sticking
+stickit
+stickle
+stickleback
+stickled
+stickler
+stickling
+stickpin
+sticks
+stickseed
+sticktight
+stickum
+stickup
+stickweed
+stickwork
+sticky
+stickybeak
+sticle
+sticy
+stidger
+stiff
+stiffen
+stiffened
+stiffener
+stiffeners
+stiffening
+stiffens
+stiffer
+stiffest
+stiffish
+stiffly
+stiffness
+stiffnesses
+stiffs
+stifle
+stifled
+stifler
+stifles
+stifling
+stiflingly
+stigma
+stigmal
+stigmas
+stigmasterol
+stigmata
+stigmatic
+stigmatically
+stigmatism
+stigmatist
+stigmatization
+stigmatization's
+stigmatizations
+stigmatize
+stigmatized
+stigmatizer
+stigmatizers
+stigmatizes
+stigmatizing
+Stijl
+stilbene
+stilbestrol
+stilbite
+stile
+stile's
+stiles
+stiletto
+stilicho
+still
+stillage
+stillbirth
+stillbirths
+stillborn
+stilled
+stiller
+stillest
+stillicide
+stilliform
+stilling
+stillman
+stillness
+stillroom
+stills
+Stillson
+Stillsons
+stillwater
+stillwell
+Stillwell
+stilly
+stilt
+stilted
+stiltedly
+stiltedness
+Stilton
+stilts
+Stilwell
+stime
+Stimson
+stimulant
+stimulant's
+stimulants
+stimulate
+stimulated
+stimulates
+stimulating
+stimulation
+stimulations
+stimulative
+stimulator
+stimulators
+stimulatory
+stimuli
+stimulus
+sting
+stingaree
+stinger
+stingier
+stingily
+stinginess
+stinging
+stingingly
+stingless
+stingo
+stingray
+stingray's
+stingrays
+stings
+stingy
+stink
+stinkard
+stinkbug
+stinkbug's
+stinkbugs
+stinker
+stinkers
+stinkhorn
+stinking
+stinkingly
+stinko
+stinkpot
+stinkpotters
+stinks
+stinkstone
+stinkweed
+stinkwood
+stinky
+stint
+stint's
+stinted
+stinter
+stinting
+stints
+stion
+stioning
+stipe
+stiped
+stipel
+stipellate
+stipend
+stipend's
+stipendiary
+stipends
+stipes
+stipitate
+stipites
+stipple
+stippled
+stippler
+stipples
+stippling
+stipular
+stipulate
+stipulated
+stipulates
+stipulating
+stipulation
+stipulations
+stipulator
+stipulatory
+stipule
+stipuled
+stir
+stirabout
+stirk
+Stirling
+stirp
+stirpes
+stirps
+stirred
+stirrer
+stirrer's
+stirrers
+stirring
+stirringly
+stirrings
+stirrup
+stirrups
+stirs
+stitch
+stitched
+stitcher
+stitchery
+stitches
+stitching
+stitchwort
+stithies
+stithy
+stiver
+stoa
+stoat
+stoat's
+stoats
+stob
+stochastic
+stochastically
+stochasticity
+stock
+stockade
+stockade's
+stockaded
+stockades
+stockading
+stockbreeder
+stockbroker
+stockbrokerage
+stockbroking
+stockcar
+stocked
+stocker
+stockers
+stockfish
+Stockhausen
+stockholder
+stockholder's
+stockholders
+Stockholm
+stockier
+stockily
+stockiness
+stockinet
+stockinette
+stocking
+stockinged
+stockings
+stockish
+stockist
+stockjobber
+stockkeeper
+stockman
+stockpile
+stockpiler
+stockpiling
+Stockport
+stockpot
+stockproof
+stockroom
+stocks
+stocktaking
+Stockton
+Stockwood
+stocky
+stockyard
+stockynges
+stodge
+stodgier
+stodgily
+stodginess
+stodging
+stodgy
+stogie
+stogies
+stogy
+stoic
+stoical
+stoically
+stoichiometric
+stoichiometrically
+stoichiometry
+stoicism
+stoics
+stoke
+stoked
+stokehold
+stokehole
+stoker
+stokes
+stokesia
+stoking
+Stokowski
+Stokys
+STOL
+stole
+stole's
+stoled
+stolen
+stoles
+stolid
+stolidity
+stolidly
+stoll
+stollen
+stollens
+stolon
+stolonate
+stoloniferous
+stoloniferously
+stolzenbach
+stoma
+stomach
+stomachache
+stomached
+stomacher
+stomaches
+stomachic
+stomachically
+stomaching
+stomachs
+stomachy
+stomack
+stomal
+stomas
+stomata
+stomatal
+stomate
+stomatic
+stomatitis
+stomatologic
+stomatological
+stomatologist
+stomatology
+stomatoplasty
+stomatopod
+stomodaeal
+stomodaeum
+stomodeal
+stomodeum
+stomp
+stomped
+stomping
+stomps
+stone
+Stone
+Stone's
+stone's
+stoneboat
+stonecast
+stonechat
+stonecrop
+stonecutter
+stonecutters
+stonecutting
+stoned
+stonefish
+stonefly
+stoneground
+Stonehenge
+stonemason
+stonemasonry
+stonemasons
+stoner
+stones
+stonewall
+stoneware
+stonework
+stoneworker
+stonewort
+stoney
+stonier
+stonily
+stoniness
+stoning
+stonk
+stonkered
+stony
+stonyhearted
+stonyheartedness
+stood
+stooge
+stooges
+stooging
+stook
+stool
+stoolie
+stools
+stoop
+stoopball
+stooped
+stooping
+stoops
+stop
+stop's
+stopband
+stopcock
+stopcocks
+stope
+stopes
+stopgap
+stopgap's
+stopgaps
+stoplight
+stoplights
+stopover
+stopovers
+stoppable
+stoppage
+stoppages
+stoppard
+stopped
+stopper
+stopper's
+stoppered
+stoppering
+stoppers
+stopping
+stopple
+stoppled
+stoppling
+stops
+stopwatch
+stopwatches
+storable
+storage
+storage's
+storages
+storax
+store
+stored
+storefront
+storefront's
+storefronts
+storehouse
+storehouse's
+storehouses
+storekeep
+storekeeper
+storekeepers
+storeria
+storeroom
+stores
+storeship
+storewide
+Storey
+Storeyed
+storeyed
+Storeys
+storiated
+storied
+stories
+storing
+stork
+stork's
+storks
+storksbill
+storm
+stormbound
+stormed
+stormier
+stormiest
+stormily
+storminess
+storming
+stormproof
+storms
+stormy
+stornoway
+storr
+storrs
+Storting
+story
+story's
+storyboard
+storyboards
+storybook
+storybooks
+storying
+storyteller
+storytellers
+storytelling
+storywriter
+stoss
+stot
+stotinka
+stotious
+stotter
+Stouffer
+stound
+stoup
+stour
+Stourbridge
+stoush
+stout
+stouten
+stoutened
+stoutening
+stouter
+stoutest
+stouthearted
+stoutheartedly
+stoutheartedness
+stoutish
+stoutly
+stoutness
+stove
+stove's
+stovepipe
+stovepipes
+stover
+stoves
+stow
+stowage
+stowages
+stowaway
+stowaway's
+stowaways
+stowe
+Stowe
+stowed
+stowey
+stowing
+stows
+strabismic
+strabismus
+strabo
+strabotomy
+strachey
+straddle
+straddled
+straddler
+straddlers
+straddles
+straddling
+Stradivari
+Stradivarius
+strafaci
+strafe
+strafer
+strafes
+Strafford
+strafing
+straggle
+straggled
+straggler
+stragglers
+straggles
+stragglier
+straggling
+straggly
+straight
+straightaway
+straightbred
+straightedge
+straighten
+straightened
+straightener
+straighteners
+straightening
+straightens
+straighter
+straightest
+straightforward
+straightforwardly
+straightforwardness
+straightforwards
+straightish
+straightjacket
+straightlaced
+straightly
+straightness
+straightway
+strain
+strained
+strainer
+strainers
+straining
+strainometer
+strainometer's
+strainometers
+strains
+strait
+straiten
+straitened
+straitening
+straitjacket
+straitlaced
+straitlacedly
+straitlacedness
+straitly
+straitness
+straits
+strake
+Stralsund
+stram
+stramash
+stramonium
+stranahan
+strand
+stranded
+strandedness
+strander
+stranding
+strandline
+strandloper
+strands
+strange
+strangely
+strangeness
+stranger
+stranger's
+strangers
+strangest
+strangle
+strangled
+stranglehold
+strangler
+stranglers
+strangles
+strangling
+stranglings
+strangulate
+strangulated
+strangulation
+strangulation's
+strangulations
+strangury
+Stranraer
+strap
+strap's
+straphang
+straphanger
+strapless
+strappado
+strapped
+strapper
+strapping
+straps
+Strasbourg
+strata
+stratagem
+stratagem's
+stratagems
+Stratas
+strategem
+strategems
+strategic
+strategical
+strategically
+strategics
+strategies
+strategist
+strategists
+strategy
+strategy's
+Stratford
+strath
+Strathclyde
+strathspey
+strathspeys
+strati
+straticulate
+stratification
+stratificational
+stratifications
+stratified
+stratifies
+stratiform
+stratify
+stratifying
+stratigraphic
+stratigraphical
+stratigraphically
+stratigraphy
+stratocracy
+stratocumulus
+stratopause
+stratosphere
+stratospheric
+Stratton
+Stratton's
+stratum
+stratus
+Straus
+Strauss
+stravage
+Stravaig
+Stravinsky
+stravinsky
+straw
+straw's
+strawberries
+strawberry
+strawberry's
+strawboard
+strawflower
+strawflowers
+strawman
+straws
+strawworm
+stray
+stray's
+strayed
+strayer
+straying
+strays
+streak
+streaked
+streakier
+streakiness
+streaking
+streaks
+streaky
+stream
+streambed
+streamed
+streamer
+streamers
+streaming
+streamlet
+streamline
+streamlined
+streamliner
+streamlines
+streamlining
+streams
+streamside
+streamy
+streek
+street
+streetcar
+streetcar's
+streetcars
+streeters
+streetlight
+streets
+streetwalker
+streetwalking
+Streisand
+Strelitzia
+strength
+strengthen
+strengthened
+strengthener
+strengthening
+strengthens
+strengthless
+strengthlessness
+strengths
+strenuosity
+strenuous
+strenuously
+strenuousness
+strep
+strepitous
+streptobacillus
+streptococcal
+streptococcic
+streptococcus
+streptokinase
+streptolysin
+streptomyces
+streptomycete
+streptomycin
+streptothricin
+stress
+stressed
+stresses
+stressful
+stressfully
+stressing
+stressless
+stresslessness
+stressor
+stretch
+stretchability
+stretchable
+stretched
+stretcher
+stretchers
+stretches
+stretching
+stretchy
+Stretford
+stretta
+stretti
+stretto
+strettos
+Streusel
+strew
+strewing
+strewment
+strewn
+strews
+strewth
+stria
+striae
+striate
+striated
+striates
+striating
+striation
+strick
+stricken
+Strickland
+Strickland's
+strickle
+strickled
+strickling
+strict
+stricter
+strictest
+striction
+strictly
+strictness
+stricture
+strictures
+stridden
+stride
+stridence
+stridency
+strident
+stridently
+strider
+strides
+striding
+stridor
+stridulate
+stridulation
+stridulatory
+stridulous
+stridulously
+strife
+strifeless
+strigiform
+strigil
+strigose
+strike
+strikebound
+strikebreak
+strikebreaker
+strikebreakers
+strikebreaking
+strikeless
+strikeout
+strikeover
+striker
+strikers
+strikes
+striking
+strikingly
+strimon
+Strindberg
+strine
+string
+string's
+stringboard
+stringcourse
+stringed
+stringency
+stringendo
+stringent
+stringently
+stringer
+stringers
+stringhalt
+stringhalted
+stringier
+stringiest
+stringiness
+stringing
+stringless
+stringpiece
+strings
+stringy
+strip
+strip's
+stripe
+striped
+stripeless
+striper
+stripes
+stripfilm
+stripier
+striping
+stripling
+strippable
+stripped
+stripper
+stripper's
+strippers
+stripping
+strips
+stript
+striptease
+stripteaser
+stripy
+strive
+striven
+striver
+strives
+striving
+strivings
+strobe
+strobe's
+strobed
+strobes
+strobic
+strobila
+strobilaceous
+strobilar
+strobilation
+strobile
+strobilization
+strobilus
+strobing
+stroboscope
+stroboscopic
+stroboscopically
+strobotron
+strode
+stroganoff
+Stroheim
+stroke
+stroked
+strokefinder
+stroker
+strokers
+strokes
+stroking
+stroll
+strolled
+stroller
+strolling
+strolls
+Strom
+Strom's
+stroma
+stromal
+stromata
+stromatal
+stromatic
+stromatolite
+stromatolitic
+Stromberg
+stromboli
+stromeyerite
+strong
+strongbox
+stronger
+strongest
+Strongheart
+strongheart
+stronghold
+strongish
+strongly
+strongman
+strongroom
+strongrooms
+strongyle
+strontia
+strontian
+strontianite
+strontic
+strontium
+strop
+strophanthin
+Strophanthus
+strophe
+strophes
+strophic
+strophoid
+stropped
+stropping
+stroppy
+strops
+stroud
+strouding
+strove
+strow
+strowing
+stroy
+struck
+structural
+structuralism
+structuralist
+structuralists
+structuralization
+structuralization's
+structuralizations
+structuralize
+structuralizes
+structurally
+structure
+structured
+structureless
+structurelessness
+structurer
+structures
+structuring
+strudel
+struggle
+struggled
+struggler
+struggles
+struggling
+strum
+struma
+strumae
+strumas
+strummer
+strumming
+strumose
+strumpet
+strung
+strunt
+strut
+struthious
+struts
+strutted
+strutter
+strutting
+strychnic
+strychnine
+strychninism
+strychninization
+strychninization's
+strychninizations
+strychninize
+strychninizes
+Strymon
+Stu
+Stuart
+stub
+stub's
+stubbed
+stubbing
+stubble
+stubblefield
+Stubblefield
+Stubblefields
+stubblefields
+stubbly
+stubborn
+stubbornly
+stubbornness
+stubbs
+stubby
+stubs
+stucco
+stuccoes
+stuccowork
+stuck
+stud
+stud's
+studbook
+studbooks
+studded
+studding
+studdingsail
+Studebaker
+student
+student's
+students
+studentship
+studentships
+studhorse
+studied
+studiedly
+studiedness
+studier
+studies
+studio
+studio's
+studios
+studious
+studiously
+studiousness
+studs
+studwork
+study
+studying
+stuff
+stuffed
+stuffer
+stuffier
+stuffiest
+stuffily
+stuffiness
+stuffing
+stuffings
+stuffless
+stuffs
+stuffy
+stull
+stultification
+stultify
+stultifying
+stum
+stumble
+stumblebum
+stumbled
+stumbler
+stumbles
+stumbling
+stumblingly
+stumer
+stumming
+stump
+stumpage
+stumped
+stumper
+stumping
+stumps
+stumpy
+stun
+stung
+stunk
+stunned
+stunner
+stunning
+stunningly
+stuns
+stunsail
+stunt
+stunt's
+stunted
+stuntedness
+stunting
+stunts
+stupa
+stupe
+stupefacient
+stupefaction
+stupefy
+stupefying
+stupendous
+stupendously
+stupendousness
+stupid
+stupider
+stupidest
+stupidities
+stupidity
+stupidly
+stupidness
+stupor
+stuporous
+Sturbridge
+Sturbridge's
+sturch
+sturdier
+sturdily
+sturdiness
+sturdy
+sturgeon
+sturley
+Sturm
+Sturm's
+sturmer
+sturt
+stutter
+stuttered
+stutterer
+stuttering
+stutters
+Stuttgart
+Stuyvesant
+sty
+stye
+styes
+Stygian
+stying
+styka
+Stylar
+style
+stylebook
+styled
+styleless
+stylelessness
+styler
+stylers
+styles
+stylet
+styli
+styliform
+styling
+stylish
+stylishly
+stylishness
+stylist
+stylistic
+stylistically
+stylistics
+stylite
+stylites
+stylitic
+stylization
+stylization's
+stylizations
+stylize
+stylized
+stylizer
+stylizers
+stylizes
+stylizing
+stylobate
+stylograph
+stylographic
+stylographical
+stylographically
+stylography
+styloid
+stylolite
+stylopodium
+Stylops
+stylostixis
+stylus
+styluses
+stymie
+stymied
+stymieing
+stymies
+stypsis
+styptic
+styracaceous
+styrax
+styrene
+styrenes
+styria
+Styrofoam
+Styx
+suability
+suable
+suably
+suakin
+suasion
+suasive
+suasively
+suasiveness
+suave
+suavely
+suaveness
+suavity
+sub
+subacetate
+subacid
+subacidly
+subacidness
+subacute
+subacutely
+subadar
+subadult
+subaerial
+subaerially
+subagency
+subagent
+subah
+subahdar
+subalpine
+subaltern
+subalternate
+subalternately
+subalternation
+subangular
+subantarctic
+subapical
+Subapically
+subapostolic
+subaqua
+subaquatic
+subaqueous
+subarctic
+subarea
+subareas
+subarid
+subarmor
+subarmor's
+subarmors
+subassemblage
+subassemblages
+subassembly
+subastral
+subatmospheric
+subatomic
+subaudible
+subaudition
+subauricular
+subaverage
+subaxillary
+subbase
+subbasement
+subbass
+subbing
+subcabinet
+subcalibre
+subcapsular
+subcartilaginous
+subcaste
+subcategorizing
+subcelestial
+subcellular
+subcenter
+subcentral
+subcentrally
+subception
+subchain
+subchannels
+subchaser
+subchloride
+subclass
+subclass's
+subclasses
+subclassifications
+subclavian
+subclimax
+subclinical
+subclinically
+subcluster
+subclusters
+subcollegiate
+subcommand
+subcommands
+subcommittee
+subcommittee's
+subcommittees
+subcommunity
+subcompact
+subcomponent
+subcomponent's
+subcomponents
+subcomputation
+subcomputation's
+subcomputations
+subconcept
+subconscious
+subconsciously
+subconsciousness
+subconstituent
+subcontinent
+subcontinental
+subcontract
+subcontracting
+subcontractor
+subcontraoctave
+subcontrariety
+subcontrary
+subcool
+subcordate
+subcortex
+subcortical
+subcritical
+subcrustal
+subcultural
+subculture
+subculture's
+subcultures
+subcutaneous
+subcutaneously
+subdeacon
+subdeb
+subdebutante
+subdelirium
+subdepot
+subdiaconate
+subdirectories
+subdirectory
+subdistrict
+subdividable
+subdivide
+subdivided
+subdivider
+subdivides
+subdividing
+subdivision
+subdivision's
+subdivisions
+subdominance
+subdominant
+subduct
+subdue
+subdued
+subduedly
+subduer
+subdues
+subduing
+subedit
+subeditor
+subeditorial
+subelement
+subelements
+subemployed
+subemployment
+subentries
+subentry
+subepidermal
+subepidermally
+subepidermis
+subequatorial
+suberect
+suberic
+suberin
+suberization
+suberization's
+suberizations
+suberize
+suberized
+suberizes
+suberizing
+suberose
+subexpression
+subexpression's
+subexpressions
+subfamilies
+subfamily
+subfield
+subfield's
+subfields
+subfile
+subfile's
+subfiles
+subfix
+subflavor
+subflavor's
+subflavors
+subfloor
+subfossil
+subfreezing
+subfusc
+subgenus
+subglacial
+subglacially
+subglottal
+subgoal
+subgoal's
+subgoals
+subgrade
+subgrammar
+subgraph
+subgraphs
+subgross
+subgroup
+subgroup's
+subgrouping
+subgroups
+subhead
+subheading
+subhuman
+subhumanity
+subi
+subic
+subindex
+subinfeud
+subinfeudate
+subinfeudation
+subinfeudatory
+subinstance
+subinstances
+subinterval
+subinterval's
+subintervals
+subirrigate
+subirrigation
+subito
+subj
+subjacency
+subjacent
+subjacently
+subject
+subject's
+subjected
+subjectify
+subjecting
+subjection
+subjective
+subjectively
+subjectiveness
+subjectivism
+subjectivist
+subjectivistic
+subjectivists
+subjectivity
+subjectivization
+subjectivize
+subjectivizes
+subjectless
+subjects
+subjoin
+subjugate
+subjugated
+subjugates
+subjugating
+subjugation
+subjugator
+subjunction
+subjunctive
+subkingdom
+sublanguage
+sublanguages
+sublapsarianism
+sublate
+sublated
+sublating
+sublation
+sublease
+sublet
+sublethal
+sublethally
+sublevel
+sublicense
+sublicensed
+sublicenser
+sublicenses
+sublicensing
+sublieutenant
+sublimable
+sublimate
+sublimated
+sublimates
+sublimating
+sublimation
+sublimations
+sublime
+sublimed
+sublimely
+sublimeness
+sublimer
+subliminal
+subliminally
+subliming
+sublimity
+sublimize
+sublimizes
+sublingual
+sublist
+sublist's
+sublists
+subliterary
+subliterature
+sublittoral
+sublunar
+sublunary
+subluxation
+submachine
+submandibular
+submarginal
+submarginally
+submarine
+submarined
+submariner
+submariners
+submarines
+submarining
+submaxilla
+submaxillary
+submediant
+submental
+submerge
+submerged
+submergence
+submerges
+submergible
+submerging
+submerse
+submersed
+submersible
+submersing
+submersion
+submicrogram
+submicrogram's
+submicrograms
+submicron
+submicroscopic
+submicroscopically
+subminiature
+subminiaturization
+subminiaturize
+subminiaturized
+subminiaturizes
+subminiaturizing
+submiss
+submission
+submission's
+submissions
+submissive
+submissively
+submissiveness
+submit
+submitochondrial
+submits
+submittal
+submitted
+submitter
+submitters
+submitting
+submode
+submodes
+submodule
+submodule's
+submodules
+submontane
+submucosa
+submucosal
+submucosally
+submucous
+submultiple
+subnational
+subnet
+subnets
+subnetwork
+subnetwork's
+subnetworks
+subnormal
+subnormality
+subnormally
+suboceanic
+subopposite
+suboptimal
+suboptimum
+suborbicular
+suborbital
+suborder
+subordinary
+subordinate
+subordinated
+subordinately
+subordinateness
+subordinates
+subordinating
+subordination
+subordinationism
+subordinative
+subordinator
+suborn
+subornation
+suborned
+suborner
+suborning
+suborns
+subotica
+subovate
+suboxide
+suboxides
+subpage
+subpanel
+subpanels
+subpar
+subparagraph
+subparallel
+subparameter
+subparameters
+subpart
+subparts
+subphylum
+subplot
+subplots
+subpoena
+subpoenaed
+subpoenas
+subpolar
+subpopulation
+subpopulations
+subpotency
+subpotent
+subprincipal
+subproblem
+subproblem's
+subproblems
+subprocess
+subprocess's
+subprocesses
+subprocessor
+subprofessional
+subprogram
+subprogram's
+subprograms
+subproject
+subproof
+subproof's
+subproofs
+subpulverizer
+subpulverizer's
+subpulverizers
+subquestion
+subquestion's
+subquestions
+subrange
+subrange's
+subranges
+subregion
+subregional
+subregionally
+subregions
+subreption
+subreptitious
+subreptitiously
+subring
+subrogate
+subrogation
+subroutine
+subroutine's
+subroutines
+subs
+subsaline
+subsample
+subsamples
+subsatellite
+subsaturated
+subsaturation
+subscan
+subscans
+subscapular
+subschema
+subschema's
+subschemas
+subscribe
+subscribed
+subscriber
+subscribers
+subscribes
+subscribing
+subscript
+subscripted
+subscripting
+subscription
+subscription's
+subscriptions
+subscripts
+subsectio
+subsection
+subsection's
+subsections
+subsegment
+subsegment's
+subsegments
+subsentence
+subsequence
+subsequence's
+subsequences
+subsequent
+subsequently
+subsequentness
+subserve
+subservience
+subserviency
+subservient
+subserviently
+subset
+subset's
+subsets
+subshrub
+subshrubby
+subside
+subsided
+subsidence
+subsides
+subsidiaries
+subsidiarily
+subsidiary
+subsidiary's
+subsidies
+subsiding
+subsidizable
+subsidizable's
+subsidizables
+subsidization
+subsidization's
+subsidizations
+subsidize
+subsidized
+subsidizer
+subsidizers
+subsidizes
+subsidizing
+subsidy
+subsidy's
+subsist
+subsisted
+subsistence
+subsistent
+subsisting
+subsists
+subsocial
+subsocietal
+subsoil
+subsoiler
+subsolar
+subsonic
+subsonically
+subspace
+subspace's
+subspaces
+subspecialize
+subspecializes
+subspecialties
+subspecialty
+subspecialty's
+subspecies
+subspecific
+substage
+substance
+substance's
+substanceless
+substances
+substandard
+substandardize
+substandardizes
+substantial
+substantialism
+substantiality
+substantialize
+substantializes
+substantially
+substantialness
+substantiate
+substantiated
+substantiates
+substantiating
+substantiation
+substantiations
+substantiative
+substantival
+substantivally
+substantive
+substantively
+substantiveness
+substantivity
+substantivize
+substantivizes
+substation
+substations
+substerilization
+substituent
+substituents
+substitutability
+substitutable
+substitute
+substituted
+substituter
+substitutes
+substituting
+substitution
+substitutional
+substitutionally
+substitutionary
+substitutions
+substitutive
+substitutively
+substomatal
+substrate
+substrate's
+substrates
+substratosphere
+substratospheric
+substratum
+substring
+substrings
+substructural
+substructure
+substructure's
+substructures
+subsume
+subsumed
+subsumes
+subsuming
+subsumption
+subsurface
+subsystem
+subsystem's
+subsystems
+subtable
+subtables
+subtangent
+subtask
+subtask's
+subtasks
+subteen
+subtemperate
+subtenancy
+subtenant
+subtend
+subtended
+subtends
+subterfuge
+subterfuges
+subterminal
+subternatural
+subterranean
+subterraneanize
+subterraneanizes
+subterraneanly
+subterraneous
+subtest
+subtetanic
+subthreshold
+subtile
+subtilely
+subtileness
+subtiler
+subtilest
+subtilis
+subtilisin
+subtilization
+subtilization's
+subtilizations
+subtilize
+subtilizer
+subtilizers
+subtilizes
+subtilty
+subtitle
+subtitle's
+subtitled
+subtitles
+subtitling
+subtle
+subtleness
+subtler
+subtlest
+subtleties
+subtlety
+subtly
+subtonic
+subtopic
+subtopic's
+subtopics
+subtorrid
+subtotal
+subtotaled
+subtotaling
+subtotals
+subtract
+subtracted
+subtracter
+subtracter's
+subtracters
+subtracting
+subtraction
+subtractions
+subtractive
+subtracts
+subtrahend
+subtrahend's
+subtrahends
+subtreasury
+subtree
+subtree's
+subtrees
+subtropic
+subtropical
+subtropics
+subtype
+subtypes
+subufd
+subufds
+subulate
+subunit
+subunit's
+subunits
+suburb
+suburb's
+suburban
+suburbanite
+suburbanites
+suburbanization
+suburbanization's
+suburbanizations
+suburbanize
+suburbanized
+suburbanizes
+suburbanizing
+suburbia
+suburbicarian
+suburbs
+subvene
+subvention
+subventionary
+subversion
+subversionary
+subversive
+subversively
+subversiveness
+subversives
+subvert
+subverted
+subverter
+subverting
+subverts
+subviral
+subvitalized
+subvitalized's
+subvitalizeds
+subvocal
+subvocally
+subway
+subway's
+subways
+subzero
+succedaneous
+succedaneum
+succedent
+succeed
+succeeded
+succeeder
+succeeding
+succeeds
+succentor
+succeptibility
+success
+successes
+successful
+successfully
+successfulness
+succession
+succession's
+successional
+successionally
+successions
+successive
+successively
+successiveness
+successor
+successor's
+successors
+successorship
+successsive
+succinate
+succinct
+succinctly
+succinctness
+succinic
+succinyl
+succinylcholine
+succor
+succorable
+succorable's
+succorables
+succored
+succorer
+succorer's
+succorers
+succoring
+succorless
+succorlesses
+succors
+succory
+succotash
+succoth
+succuba
+succubi
+succubus
+succulence
+succulent
+succulently
+succumb
+succumbed
+succumbing
+succumbs
+succursal
+succuss
+such
+suchlike
+suck
+sucked
+sucker
+suckered
+suckerfish
+suckering
+suckers
+sucking
+suckle
+suckled
+suckles
+suckling
+sucks
+sucrase
+sucre
+sucrose
+suction
+suctional
+suctorial
+suctorian
+Sudan
+Sudanese
+Sudanic
+sudanic
+sudarium
+sudatorium
+sudatory
+sudbury
+sudd
+sudden
+suddenly
+suddenness
+Sudetenland
+sudetes
+sudor
+sudoriferous
+sudorific
+Sudra
+suds
+sudser
+sudsier
+sudsing
+sudsless
+sudsy
+sue
+sued
+suede
+sueded
+sueding
+suer
+sues
+suet
+suetonius
+suey
+Suez
+suff
+suffer
+sufferable
+sufferableness
+sufferably
+sufferage
+sufferance
+suffered
+sufferer
+sufferers
+suffering
+sufferings
+suffers
+suffice
+sufficed
+sufficer
+suffices
+sufficiency
+sufficient
+sufficiently
+sufficing
+suffiency
+suffix
+suffixation
+suffixed
+suffixer
+suffixes
+suffixing
+sufflate
+suffocate
+suffocated
+suffocates
+suffocating
+suffocatingly
+suffocation
+suffocative
+Suffolk
+suffragan
+suffrage
+suffragette
+suffragettes
+suffragist
+suffragists
+suffruticose
+suffumigate
+suffuse
+suffused
+suffuses
+suffusing
+suffusion
+suffusive
+Sufi
+Sufism
+sufu
+sugar
+sugarcane
+sugarcoat
+sugared
+sugarhouse
+sugaring
+sugarings
+sugarloaf
+sugarplum
+sugars
+sugary
+suggest
+suggested
+suggester
+suggestibility
+suggestible
+suggestibly
+suggesting
+suggestion
+suggestion's
+suggestionize
+suggestionizes
+suggestions
+suggestive
+suggestively
+suggestiveness
+suggests
+suharto
+suicidal
+suicidally
+suicide
+suicide's
+suicided
+suicides
+suiciding
+suing
+suint
+suisse
+suit
+suit's
+suitability
+suitable
+suitableness
+suitably
+suitcase
+suitcase's
+suitcases
+suite
+suited
+suiters
+suites
+suiting
+suitor
+suitor's
+suitors
+suits
+sukarnapura
+Sukarno
+sukarno
+sukhumi
+sukiyaki
+sukkoth
+sulamite
+sulamith
+sulcate
+sulci
+sulcus
+suleiman
+sulfa
+sulfadiazine
+sulfanilamide
+sulfaquinoxaline
+sulfatase
+sulfate
+sulfated
+sulfatide
+sulfatides
+sulfating
+sulfatize
+sulfatizes
+sulfhydryl
+sulfide
+sulfinyl
+sulfite
+sulfitic
+sulfonamide
+sulfonamides
+sulfonate
+sulfonation
+sulfone
+sulfonic
+sulfonium
+sulfonmethane
+sulfonyl
+sulfonylurea
+sulfoxide
+sulfur
+sulfured
+sulfureous
+sulfureously
+sulfureousness
+sulfuret
+sulfuric
+sulfuring
+sulfurization
+sulfurization's
+sulfurizations
+sulfurize
+sulfurizes
+sulfurous
+sulfurously
+sulfurousness
+sulfuryl
+sulk
+sulked
+sulkies
+sulkily
+sulkiness
+sulking
+sulks
+sulky
+sulla
+sullage
+sullen
+sullenly
+sullenness
+sullied
+sullies
+Sullivan
+sully
+sullying
+sulphadiazine
+sulphanilamide
+sulphate
+sulphates
+sulphathiazole
+sulphide
+sulphinyl
+sulphisoxazole
+sulphite
+sulphonamide
+sulphonate
+sulphonated
+sulphone
+sulphonic
+sulphonium
+sulphonmethane
+sulphonyl
+sulphur
+sulphurate
+sulphured
+sulphuret
+sulphuretted
+sulphuric
+sulphurization
+sulphurization's
+sulphurizations
+sulphurize
+sulphurizes
+sulphurou
+sulphurous
+sulphuryl
+sultan
+sultan's
+sultana
+Sultanabad
+sultanate
+sultaness
+sultanize
+sultanizes
+sultans
+sultrier
+sultrily
+sultriness
+sultry
+Sulu
+sulzberger
+Sulzberger
+sum
+sum's
+sumac
+sumach
+Sumatra
+Sumba
+Sumbawa
+sumer
+Sumeria
+Sumerian
+summa
+summability
+summable
+summae
+summand
+summand's
+summands
+summaries
+summarily
+summarization
+summarization's
+summarizations
+summarize
+summarized
+summarizer
+summarizers
+summarizes
+summarizing
+summary
+summary's
+summated
+summates
+summating
+summation
+summation's
+summational
+summations
+summed
+summer
+summer's
+Summerdale
+summered
+summerhouse
+summering
+summerize
+summerizes
+summers
+Summers
+summersault
+summertime
+summerweight
+summerwood
+summery
+summing
+summit
+summitry
+summon
+summoned
+summoner
+summoners
+summoning
+summons
+summonses
+Sumner
+Sumner's
+Sumo
+sump
+sumpter
+sumptuary
+sumptuous
+sumptuously
+sumptuousness
+sums
+Sumter
+sumy
+sun
+sun's
+sunay
+sunbake
+sunbaked
+sunbath
+sunbathe
+sunbather
+sunbeam
+sunbeam's
+sunbeams
+Sunbelt
+Sunbelt's
+sunbird
+sunbonnet
+sunbow
+sunburn
+sunburnt
+sunburst
+sunbursts
+sundae
+sundaes
+Sunday
+Sunday's
+Sundays
+sunder
+sundered
+sundering
+Sunderland
+sunders
+sundew
+sundial
+sundials
+sundog
+sundown
+sundowner
+sundowners
+sundress
+sundresses
+sundries
+sundrops
+sundry
+sundsvall
+sunfast
+sunfish
+sunflower
+sung
+sungari
+sungkiang
+sunglass
+sunglasses
+sunglow
+sungrebe
+sunhat
+sunk
+sunken
+sunlamp
+sunless
+sunlight
+sunlights
+sunlit
+sunn
+sunna
+sunned
+Sunni
+sunnier
+sunnily
+sunniness
+sunning
+Sunnite
+sunny
+Sunnyvale
+sunray
+sunrise
+sunrises
+sunroof
+suns
+sunscald
+sunscreen
+sunscreen's
+sunscreening
+sunscreens
+sunset
+sunsets
+sunshade
+sunshades
+sunshine
+sunshines
+sunshiny
+sunspot
+sunstar
+sunstroke
+sunstruck
+sunsuit
+suntan
+suntanned
+suntanning
+suntrap
+sunup
+sunward
+sunwards
+sunwise
+SUNY
+suo
+Suomi
+sup
+super
+superable
+superableness
+superably
+superabound
+superabundance
+superabundant
+superabundantly
+superacknowledgment
+superacknowledgment's
+superacknowledgments
+superadd
+superaddition
+superagency
+superaltar
+superaltern
+superannuate
+superannuated
+superannuation
+superb
+superbazaar
+superblock
+superbly
+superbness
+supercalender
+supercanonization
+supercanonization's
+supercanonizations
+supercarbonization
+supercarbonization's
+supercarbonizations
+supercarbonize
+supercarbonizes
+supercargo
+supercede
+superceded
+supercedes
+supercharge
+supercharger
+superciliary
+supercilious
+superciliously
+superciliousness
+supercity
+supercivilization
+supercivilization's
+supercivilizations
+supercivilized
+supercivilized's
+supercivilizeds
+superclass
+superclass's
+supercolumnar
+supercomputer
+supercomputer's
+supercomputers
+supercomputing
+superconcept
+superconduct
+superconducting
+superconduction
+superconductive
+superconductivity
+superconductor
+superconductors
+supercool
+supercritical
+supercurrent
+superdense
+superdominant
+supered
+superego
+superego's
+superegos
+superelevate
+superelevation
+supereminence
+supereminent
+supereminently
+superemphasize
+superemphasizes
+superempirical
+superencipher
+superencipherment
+supererogate
+supererogation
+supererogatory
+superfamily
+superfecundation
+superfemale
+superfetation
+superficial
+superficiality
+superficialize
+superficializes
+superficially
+superficialness
+superficies
+superfine
+superfix
+superfluid
+superfluidity
+superfluities
+superfluity
+superfluity's
+superfluous
+superfluously
+superfluousness
+superfuse
+supergalaxy
+supergene
+supergiant
+superglacial
+superheat
+superheater
+superheats
+superhero
+superhet
+superheterodyne
+superhigh
+superhighway
+superhighways
+superhuman
+superhumanity
+superhumanize
+superhumanizes
+superhumanly
+superhumanness
+superhumeral
+superieure
+superimposable
+superimpose
+superimposed
+superimposes
+superimposing
+superimposition
+superincumbent
+superincumbently
+superindividual
+superinduce
+superinduction
+superinfection
+supering
+superintend
+superintendence
+superintendency
+superintendent
+superintendent's
+superintendents
+superior
+superior's
+superiority
+superiorly
+superiors
+superjacent
+superjet
+superlanguage
+superlative
+superlatively
+superlativeness
+superlatives
+superliner
+superload
+superluminal
+superlunar
+superlunary
+supermachine
+supermale
+superman
+Superman's
+supermarket
+supermarket's
+supermarkets
+supermodel
+supermodels
+supermundane
+supernal
+supernally
+supernatant
+supernational
+supernatural
+supernaturalism
+supernaturalist
+supernaturalistic
+supernaturalize
+supernaturalizes
+supernaturally
+supernaturalness
+supernormal
+supernormality
+supernormally
+supernova
+supernova's
+supernovae
+supernovas
+supernumerary
+superorder
+superordinate
+superorganic
+superorganism
+superorganization
+superorganization's
+superorganizations
+superorganize
+superorganizes
+superovulation
+superoxide
+superparasitism
+superpatriot
+superpatriotic
+superpatriotism
+superphosphate
+superphysical
+superposable
+superpose
+superposed
+superposes
+superposing
+superposition
+superpositions
+superpower
+superpowered
+superpowers
+superpredicate
+supersaturate
+supersaturated
+supersaturation
+superscribe
+superscript
+superscripted
+superscripting
+superscription
+superscripts
+supersede
+supersedeas
+superseded
+superseder
+supersedes
+superseding
+supersedure
+supersensible
+supersensitive
+supersensitiveness
+supersensitization
+supersensitization's
+supersensitizations
+supersensory
+superserviceable
+supersession
+supersessive
+superset
+superset's
+supersets
+supersex
+supersonic
+supersonically
+supersonics
+superspecialize
+superspecializes
+superstar
+superstition
+superstition's
+superstitions
+superstitious
+superstitiously
+superstitiousness
+superstratum
+superstruct
+superstructural
+superstructure
+superstructures
+supersubstantial
+supersubtilized
+supersubtilized's
+supersubtilizeds
+supersubtle
+supersubtlety
+supersulphurize
+supersulphurizes
+supersystem
+supertanker
+supertax
+supertitle
+supertitle's
+supertitled
+supertitles
+supertitling
+supertonic
+superuser
+superuser's
+superusers
+supervene
+supervened
+supervenience
+supervenient
+supervention
+supervise
+supervised
+supervisee
+supervises
+supervising
+supervision
+supervisions
+supervisor
+supervisor's
+supervisors
+supervisory
+supinate
+supination
+supinator
+supine
+supinely
+supineness
+suplex
+supper
+supper's
+suppers
+supping
+suppl
+supplant
+supplantation
+supplanted
+supplanter
+supplanting
+supplants
+supple
+suppled
+supplejack
+supplely
+supplement
+supplemental
+supplementaries
+supplementary
+supplementation
+supplemented
+supplementer
+supplementing
+supplements
+suppleness
+suppler
+suppletion
+suppletive
+suppletory
+suppliance
+suppliant
+suppliantly
+supplicant
+supplicant's
+supplicantly
+supplicants
+supplicate
+supplicating
+supplication
+supplicatory
+supplied
+supplier
+supplier's
+suppliers
+supplies
+suppling
+supply
+supply's
+supplying
+support
+supportability
+supportable
+supportableness
+supportably
+supported
+supporter
+supporters
+supporting
+supportingly
+supportive
+supportively
+supports
+supposable
+supposably
+supposal
+suppose
+supposed
+supposedly
+supposer
+supposes
+supposing
+supposition
+supposition's
+suppositional
+suppositionally
+suppositions
+suppositious
+supposititious
+supposititiously
+supposititiousness
+suppositive
+suppositively
+suppositories
+suppository
+suppress
+suppressant
+suppressed
+suppresses
+suppressibility
+suppressible
+suppressing
+suppression
+suppressions
+suppressive
+suppressiveness
+suppressor
+suppressors
+suppurate
+suppuration
+suppurative
+supr
+supra
+supraglottal
+supralapsarian
+supralaryngeal
+supraliminal
+supraliminally
+supramolecular
+supranational
+supranationalism
+supranationalist
+supranationality
+supraorbital
+supraprotest
+suprarational
+suprarenal
+suprasegmental
+supravital
+supravitally
+supremacist
+supremacy
+suprematism
+supreme
+supremely
+supremeness
+supremo
+supremum
+suqutra
+sur
+sura
+surah
+surakarta
+sural
+surat
+surbase
+surbased
+surcease
+surceased
+surceasing
+surcharge
+surcharged
+surcharges
+surcharging
+surcingle
+surcliffe
+surcoat
+surcoats
+surculose
+surd
+sure
+sured
+surefire
+surefooted
+surefootedly
+surefootedness
+surely
+sureness
+surer
+surest
+sureties
+surety
+suretyship
+surf
+surfable
+surface
+surfaced
+surfaceness
+surfacer
+surfacers
+surfaces
+surfacing
+surfactant
+surfactants
+surfbird
+surfbirds
+surfboard
+surfboarder
+surfboards
+surfboat
+surfboats
+surfcasting
+surfeit
+surfeited
+surfeiter
+surfeits
+surfer
+surfer's
+surfers
+surficial
+surfie
+surfing
+surfperch
+surg
+surge
+surged
+surgely
+surgeon
+surgeon's
+surgeoncy
+surgeonfish
+surgeons
+surgeries
+surgerize
+surgerizes
+surgery
+surges
+surgical
+surgically
+surging
+suribachi
+suricate
+Surinam
+Suriname
+surjection
+surjective
+surlier
+surlily
+surliness
+surly
+surmise
+surmised
+surmiser
+surmises
+surmising
+surmount
+surmountable
+surmounted
+surmounting
+surmounts
+surmullet
+surname
+surname's
+surnamed
+surnames
+surpass
+surpassable
+surpassed
+surpasses
+surpassing
+surpassingly
+surplice
+surplus
+surplus's
+surplusage
+surpluses
+surprint
+surprisal
+surprise
+surprise's
+surprised
+surpriser
+surprises
+surprising
+surprisingly
+surra
+surreal
+surrealism
+surrealist
+surrealistic
+surrealistically
+surrealists
+surrebuttal
+surrebutter
+surrejoinder
+surrender
+surrendered
+surrenderer
+surrendering
+surrenders
+surreptitious
+surreptitiously
+surreptitiousness
+surrey
+surreys
+surrogate
+surrogate's
+surrogates
+surrogation
+surround
+surrounded
+surrounding
+surroundings
+surrounds
+surroyal
+sursum
+surtax
+surtout
+surveil
+surveillance
+surveillances
+surveillant
+survey
+surveyed
+surveying
+surveyor
+surveyor's
+surveyors
+surveys
+survivability
+survivable
+survival
+survivalist
+survivalists
+survivals
+survivance
+survive
+survived
+surviver
+survives
+surviving
+survivor
+survivor's
+survivors
+survivorship
+Sus
+susa
+susah
+Susan
+Susan's
+Susanna
+Susanne
+Susanne's
+susceptance
+susceptibility
+susceptible
+susceptive
+susceptiveness
+susceptivity
+suseptible
+sushi
+Susian
+Susie
+Susie's
+suslik
+suspect
+suspected
+suspecter
+suspecting
+suspects
+suspend
+suspended
+suspender
+suspender's
+suspenders
+suspending
+suspends
+suspense
+suspenseful
+suspenses
+suspension
+suspensions
+suspensive
+suspensively
+suspensoid
+suspensor
+suspensory
+suspicion
+suspicion's
+suspicioned
+suspicioning
+suspicions
+suspicious
+suspiciously
+suspiciousness
+suspiration
+suspire
+suspired
+suspiring
+Susquehanna
+susquehanna
+Susquehanna's
+suss
+Sussex
+Sussex's
+susso
+sustain
+sustainable
+sustained
+sustainer
+sustaining
+sustainment
+sustains
+sustenance
+sustentacular
+sustentation
+sustentative
+sustention
+Susu
+susurrant
+susurrate
+susurration
+susurrous
+susurrus
+Sutcliffe
+Sutherland
+Sutherland's
+sutlej
+sutler
+sutra
+suttee
+Sutton
+Sutton's
+sutural
+suturally
+suture
+sutured
+sutures
+suturing
+suva
+Suvorov
+Suwanee
+Suwanee's
+Suwannee
+Suzanne
+Suzanne's
+suzerain
+suzerainty
+Suzuki
+Suzuki's
+Svalbard
+svelte
+sveltely
+svelteness
+Sverdlovsk
+sverige
+Svetlana
+Svetlana's
+Svetlanov
+svizzera
+SW
+swab
+swabbed
+swabber
+swabbie
+swabbies
+swabbing
+swabby
+Swabia
+Swabian
+Swabian's
+Swabians
+swabs
+swacked
+swaddle
+swaddled
+swaddling
+swadesh
+Swadeshi
+swag
+swage
+swagger
+swaggered
+swaggering
+swagging
+swaging
+swagman
+Swahili
+Swahili's
+swain
+swain's
+swainish
+swainishness
+swains
+swale
+swallow
+swallowable
+swallowed
+swallower
+swallowing
+swallows
+swallowtail
+swallowwort
+swam
+swami
+swamp
+swamped
+swamper
+swampier
+swampiness
+swamping
+swampland
+swampland's
+swamplands
+swamps
+swampy
+swan
+swan's
+swanage
+Swanee
+swang
+swanherd
+swank
+swanker
+swankier
+swankily
+swankiness
+swanky
+swanlike
+swannery
+swanning
+swans
+swansdown
+Swansea
+Swansea's
+swanskin
+Swanson
+swap
+swappable
+swapped
+swapper
+swapper's
+swappers
+swapping
+swaps
+swaraj
+sward
+swarf
+swarm
+swarmed
+swarmer
+swarming
+swarms
+swart
+swarthier
+swarthiness
+Swarthmore
+Swarthout
+Swarthout's
+swarthy
+swartness
+swartz
+Swartz
+swash
+swashbuckle
+swashbuckler
+swashbuckling
+swasher
+swastika
+swat
+swatch
+swatches
+swath
+swath's
+swathe
+swathed
+swather
+swathes
+swathing
+swathings
+Swatow
+swats
+swatted
+swatter
+swatting
+sway
+swayback
+swaybacked
+swayed
+swayer
+swaying
+sways
+Swazi
+Swaziland
+swear
+swearer
+swearing
+swears
+swearword
+sweat
+sweatband
+sweatbox
+sweated
+sweater
+sweaters
+sweatier
+sweatily
+sweatiness
+sweating
+sweatpants
+sweats
+sweatshirt
+sweatshop
+sweatshop's
+sweatshops
+sweatsocks
+sweaty
+sweazey
+Swede
+Sweden
+Swedenborg
+Swedenborgianism
+Swedes
+Swedish
+sweelinck
+Sweeney
+Sweeneys
+Sweeny
+sweep
+sweepback
+sweeper
+sweepers
+sweepier
+sweeping
+sweepingly
+sweepingness
+sweepings
+sweeps
+sweepstake
+sweepstakes
+sweepy
+sweet
+sweetbread
+sweetbread's
+sweetbreads
+sweetbrier
+sweeten
+sweetened
+sweetener
+sweeteners
+sweetening
+sweetenings
+sweetens
+sweeter
+sweetest
+sweetheart
+sweetheart's
+sweethearts
+sweetie
+sweetie's
+sweeties
+sweetiewife
+sweeting
+sweetish
+sweetishly
+sweetly
+sweetman
+sweetmeal
+sweetmeat
+sweetness
+sweets
+sweetshop
+sweetsop
+swell
+swelled
+swellhead
+swellheaded
+swellheadedness
+swelling
+swellings
+swells
+swelter
+sweltered
+sweltering
+swelteringly
+Swenson
+swept
+sweptback
+sweptwing
+swerve
+swerved
+swerves
+swerving
+sweven
+sweyn
+swidden
+swift
+swifter
+swiftest
+swiftie
+swiftlet
+swiftly
+swiftness
+swig
+swigger
+swigging
+swill
+swiller
+swim
+swimmable
+swimmer
+swimmer's
+swimmeret
+swimmers
+swimmier
+swimmily
+swimminess
+swimming
+swimmingly
+swimmy
+swims
+swimsuit
+swimsuit's
+swimsuits
+swinburne
+Swinburne
+swindle
+swindled
+swindler
+swindles
+swindling
+swindon
+swine
+swineherd
+swinepox
+swing
+swingable
+swingably
+swingboat
+swinge
+swingeing
+swinger
+swingers
+swingier
+swinging
+swingingly
+swingle
+swingletree
+swingometer
+swingometers
+swings
+swingy
+swinish
+swinishly
+swinishness
+Swink
+swipe
+swiped
+swipes
+swiping
+swirl
+swirled
+swirler
+swirlier
+swirling
+swirlingly
+swirls
+swirly
+swish
+swished
+swisher
+swishier
+swishingly
+swishy
+swiss
+switch
+switch's
+switchable
+switchback
+switchback's
+switchbacks
+switchblade
+switchboard
+switchboard's
+switchboards
+switched
+switcher
+switcheroo
+switchers
+switches
+switchgear
+switchgirl
+switchgrass
+switching
+switchings
+switchman
+switchmen
+switchmen's
+switchyard
+swith
+swither
+Swithin
+Switzer
+Switzerland
+swivel
+swiveled
+swiveling
+swivels
+swivet
+swizzle
+swizzled
+swizzler
+swizzling
+swob
+swollen
+swoon
+swooned
+swooner
+swooning
+swooningly
+swoons
+swoop
+swooped
+swooper
+swooping
+swoops
+swoosh
+swop
+sword
+sword's
+swordbill
+swordcraft
+swordfight
+swordfight's
+swordfights
+swordfish
+swordlike
+swordplay
+swordplayer
+swords
+swordsman
+swordsmanship
+swordsmen
+swordstick
+swordsticks
+swordtail
+swore
+sworn
+swot
+swots
+swotted
+swotting
+swound
+swounds
+swum
+swung
+swy
+sybaris
+sybarite
+sybaritically
+sybert
+Sybil
+sycamine
+sycamore
+syce
+sycee
+syconium
+sycophancy
+sycophant
+sycophantic
+sycophantically
+sycophantish
+sycophantishly
+sycophantism
+sycophantize
+sycophantizes
+sycophantly
+sycophants
+sycosis
+Sydney
+sydneysider
+syene
+syenite
+syenitic
+Sykes
+syktyvkar
+syllabarium
+syllabary
+syllabi
+syllabic
+syllabically
+syllabicate
+syllabication
+syllabicity
+syllabification
+syllabify
+syllabism
+syllable
+syllable's
+syllabled
+syllables
+syllabling
+syllabogram
+syllabography
+syllabub
+syllabus
+syllepsis
+sylleptic
+syllogism
+syllogism's
+syllogisms
+syllogist
+syllogistic
+syllogistically
+syllogize
+Sylow
+sylph
+sylphid
+sylphlike
+sylva
+sylvan
+Sylvan
+Sylvania
+sylvanite
+sylvanize
+sylvanizes
+sylvanus
+sylvatic
+Sylvester
+Sylvia
+sylviculture
+sylvie
+Sylvie
+Sylvie's
+sylvine
+sylvite
+sym
+symbiont
+symbiontic
+symbiosis
+symbiote
+symbiotic
+symbiotically
+symbol
+symbol's
+symboled
+symbolic
+symbolic's
+symbolical
+symbolically
+symbolics
+symboling
+symbolism
+symbolisms
+symbolist
+symbolistic
+symbolists
+symbolization
+symbolization's
+symbolizations
+symbolize
+symbolized
+symbolizer
+symbolizers
+symbolizes
+symbolizing
+symbology
+symbols
+symington
+Symington
+symmetallism
+symmetric
+symmetrical
+symmetrically
+symmetricalness
+symmetries
+symmetrization
+symmetrization's
+symmetrizations
+symmetrize
+symmetrized
+symmetrizes
+symmetrizing
+symmetry
+symmetry's
+symonds
+Symons
+sympathectomy
+sympathetic
+sympathetically
+sympathies
+sympathin
+sympathize
+sympathized
+sympathizer
+sympathizers
+sympathizes
+sympathizing
+sympathizing's
+sympathizingly
+sympathizings
+sympatholytic
+sympathomimetic
+sympathy
+sympathy's
+sympatric
+sympatrically
+sympatry
+sympetalous
+sympetaly
+symphile
+symphonic
+symphonically
+symphonies
+symphonious
+symphoniously
+symphonist
+symphony
+symphony's
+symphyseal
+symphysial
+symphysis
+symplectic
+sympodial
+sympodially
+sympodium
+symposia
+symposiac
+symposiarch
+symposiast
+symposium
+symposiums
+symptom
+symptom's
+symptomatic
+symptomatically
+symptomatologic
+symptomatological
+symptomatologically
+symptomatology
+symptomize
+symptomizes
+symptomless
+symptoms
+synaeresis
+synaesthesis
+synagog
+synagogal
+synagogue
+synagogues
+synalepha
+synaloepha
+synapse
+synapse's
+synapsed
+synapses
+synapsing
+synapsis
+synaptic
+synaptically
+synaptosomal
+synaptosome
+synarchy
+synarthrodial
+synarthrodially
+synarthrosis
+sync
+syncarp
+syncarpous
+syncarpy
+synch
+synching
+synchro
+synchrocyclotron
+synchroflash
+synchromesh
+synchrometer
+synchronal
+synchroneity
+synchronic
+synchronical
+synchronically
+synchronism
+synchronistic
+synchronizable
+synchronizable's
+synchronizables
+synchronization
+synchronization's
+synchronizations
+synchronize
+synchronized
+synchronizer
+synchronizers
+synchronizes
+synchronizing
+synchronous
+synchronously
+synchronousness
+synchrony
+synchros
+synchroscope
+synchrotron
+syncing
+synclastic
+synclinal
+syncline
+synclinorium
+syncom
+syncopal
+syncopate
+syncopated
+syncopation
+syncopative
+syncopator
+syncope
+syncretic
+syncretism
+syncretist
+syncretistic
+syncretize
+syncretized
+syncretizes
+syncretizing
+syncrisis
+syncytial
+syncytium
+syndactyl
+syndactylism
+syndactyly
+syndesis
+syndesmosis
+syndesmotic
+syndetic
+syndetically
+syndic
+syndical
+syndicalism
+syndicalist
+syndicalize
+syndicalizes
+syndicate
+syndicated
+syndicates
+syndicating
+syndication
+syndicator
+syndics
+syndrome
+syndrome's
+syndromes
+syne
+synecdoche
+synecdochic
+synecdochical
+synecdochically
+synecious
+synecologic
+synecological
+synecologically
+synecology
+synectic
+synectically
+synectics
+synephrine
+syneresis
+synergetic
+synergic
+synergically
+synergid
+synergism
+synergist
+synergistic
+synergistically
+synergy
+synesis
+synesthesia
+synesthetic
+syngamy
+Synge
+syngeneic
+synizesis
+synkaryon
+synod
+synodal
+synodic
+synodical
+synods
+synonym
+synonym's
+synonymic
+synonymical
+synonymist
+synonymity
+synonymize
+synonymizes
+synonymous
+synonymously
+synonyms
+synonymy
+synopses
+synopsis
+synopsize
+synoptic
+synoptical
+synoptically
+synostosis
+synovia
+synovial
+synovitis
+synsepalous
+syntactic
+syntactical
+syntactically
+syntacticly
+syntactics
+syntagma
+syntax
+syntaxes
+syntheses
+synthesis
+synthesist
+synthesization
+synthesization's
+synthesizations
+synthesize
+synthesized
+synthesizer
+synthesizers
+synthesizes
+synthesizing
+synthetase
+synthetic
+synthetical
+synthetically
+synthetics
+synthetism
+syntonic
+syntonically
+sypher
+syphilis
+syphilitic
+syphilologist
+syphilology
+syphiloma
+syr
+Syracuse
+syren
+Syria
+Syriac
+Syrian
+Syrian's
+Syrianize
+Syrianizes
+Syrians
+syringa
+syringe
+syringed
+syringes
+syringing
+syringomyelia
+syringomyelic
+syrinx
+syrinxes
+syrphid
+Syrtis
+syrup
+syrupy
+sys
+sysgt
+syssarcosis
+syst
+systaltic
+systat
+system
+system's
+systematic
+systematical
+systematically
+systematicness
+systematics
+systematism
+systematist
+systematization
+systematization's
+systematizations
+systematize
+systematized
+systematizer
+systematizers
+systematizes
+systematizing
+systematology
+systemic
+systemically
+systemizable
+systemizable's
+systemizables
+systemization
+systemization's
+systemizations
+systemize
+systemizer
+systemizers
+systemizes
+systemless
+systems
+systemwide
+systole
+systolic
+sytactic
+syzran
+syzygial
+syzygy
+Szabadka
+Szczecin
+Szechwan
+Szeged
+Szell
+Szerying
+Szeryng
+Szewinska
+Szilard
+Szombathely
+Szymanowski
+TA
+taata
+tab
+tabac
+tabanid
+tabard
+tabaret
+Tabasco
+tabbed
+tabbies
+tabbing
+tabby
+tabellen
+tabernacle
+tabernacle's
+tabernacled
+tabernacles
+tabernacling
+tabernacular
+tabes
+tabescent
+tabetic
+tabla
+tablature
+table
+tableau
+tableau's
+tableaus
+tableaux
+tablecloth
+tablecloths
+tabled
+tableful
+tableland
+tables
+tablespoon
+tablespoon's
+tablespoonful
+tablespoonful's
+tablespoonfuls
+tablespoons
+tablespoonsful
+tablet
+tablet's
+tabletop
+tabletop's
+tabletops
+tablets
+tableware
+tabling
+tabloid
+tabloids
+taboo
+taboo's
+taboos
+tabor
+tabored
+taborer
+taborers
+taboret
+taborets
+taborin
+taboring
+taborins
+tabors
+Tabriz
+tabs
+tabu
+tabula
+tabular
+tabularization
+tabularization's
+tabularizations
+tabularize
+tabularizes
+tabularly
+tabulate
+tabulated
+tabulates
+tabulating
+tabulation
+tabulations
+tabulator
+tabulator's
+tabulators
+Tacamahac
+Tacchino
+tace
+tacet
+tach
+Tachina
+tachinid
+tachism
+tachist
+tachiste
+tachistoscope
+tachistoscopic
+tachistosopically
+tachograph
+tachometer
+tachometer's
+tachometers
+tachometry
+tachs
+tachycardia
+tachygraphic
+tachygraphical
+tachygraphy
+tachylite
+tachylyte
+tachymeter
+tachymeter's
+tachymeters
+tachymetry
+tachyon
+tachyon's
+tachyons
+tachyphylaxis
+tacit
+tacitly
+tacitness
+taciturn
+taciturnity
+Tacitus
+tack
+tackboard
+tacked
+tacker
+tacket
+tackier
+tackies
+tackifier
+tackify
+tackily
+tackiness
+tacking
+tackle
+tackle's
+tackled
+tackler
+tackles
+tackling
+tacks
+tacky
+tacloban
+tacmahack
+taco
+Tacoma
+taconite
+tacos
+tact
+tactful
+tactfully
+tactfulness
+tactic
+tactical
+tactically
+tactician
+tactics
+tactile
+tactilely
+tactility
+taction
+tactless
+tactlessly
+tactlessness
+tactual
+tactually
+tad
+tadmor
+tadpole
+tadpoles
+Tadzhiki
+taegu
+taejon
+tael
+taenia
+taeniacide
+taeniafuge
+taeniasis
+taffeta
+taffetized
+taffies
+taffrail
+taffy
+tafia
+tafilelt
+Taft
+tag
+tag's
+Tagalog
+tagalong
+taganrog
+tagboard
+tagged
+taggers
+tagging
+tagine
+tagines
+tagliatelle
+tagmeme
+tagmemics
+tagore
+tags
+tagus
+tahina
+Tahiti
+Tahoe
+tahr
+tahsil
+tahsildar
+Tai
+Taichung
+taig
+taiga
+tail
+tailback
+tailboard
+tailbone
+tailcoat
+tailcoated
+tailed
+tailer
+tailgate
+tailgated
+tailgater
+tailgating
+tailing
+tailings
+taille
+tailless
+taillight
+taillight's
+taillights
+taillike
+tailor
+tailorbird
+tailored
+tailoress
+tailoring
+tailorization
+tailorization's
+tailorizations
+tailorize
+tailorizes
+tailors
+tailpiece
+tailpipe
+tailplane
+tailrace
+tails
+tailskid
+tailspin
+tailspin's
+tailspins
+tailstock
+tailwater
+tailwind
+tailwind's
+tailwinds
+taimyr
+tain
+Tainan
+taine
+Taino
+taint
+tainted
+taintless
+taints
+taipan
+Taipei
+Taiping
+Taisho
+Taiwan
+taiwanese
+Taiwanese
+taiyuan
+taj
+Tajik
+tajo
+taka
+takahe
+takamatsu
+takao
+take
+takeaway
+takedown
+taken
+takeoff
+takeoffs
+takeout
+takeover
+takeovers
+taker
+takers
+takes
+taketh
+takin
+taking
+takings
+takoradi
+Talaing
+talapoin
+talaria
+talavera
+talbot
+talc
+talca
+talcahuano
+talcose
+talcum
+tale
+tale's
+talebearer
+talebearing
+talent
+talented
+talentless
+talents
+taler
+tales
+talesman
+taleysim
+tali
+taliesin
+taligrade
+talion
+taliped
+talipes
+talipot
+talisman
+talismanic
+talismanically
+talk
+talkathon
+talkative
+talkatively
+talkativeness
+talked
+talker
+talkers
+talkie
+talking
+talks
+talky
+tall
+Talladega
+talladega
+tallage
+Tallahassee
+tallahatchie
+Tallahatchie
+tallahoosa
+Tallahoosa
+tallboy
+tallchief
+Tallchief
+taller
+tallest
+talleyrand
+Talleyrand
+tallied
+tallies
+tallinn
+tallis
+tallish
+tallith
+tallithim
+tallness
+tallow
+tallowy
+tally
+tallyho
+tallying
+tallyman
+Talmud
+talmudic
+talmudical
+Talmudism
+Talmudist
+Talmudization
+Talmudization's
+Talmudizations
+Talmudize
+Talmudizes
+talon
+taloned
+talons
+talos
+taluk
+talus
+Talvela
+talweg
+tam
+tamable
+tamale
+tamandua
+tamarack
+tamarau
+tamarin
+tamarind
+tamarisk
+tamasha
+tamatave
+tamaulipas
+tambac
+tambala
+tambora
+tambour
+tambourer
+tambourine
+Tambov
+tambura
+tamburitza
+tamburlaine
+tame
+tameable
+tamed
+tameless
+tamely
+tameness
+tamer
+Tamerlane
+tames
+tamest
+Tamil
+taming
+tamis
+Tammany
+Tammanyize
+Tammanyizes
+tammerfors
+tammuz
+tammy
+tamp
+Tampa
+tampala
+tamper
+tampere
+tampered
+tamperer
+tampering
+tamperproof
+tampers
+tampico
+tamping
+tampion
+tampon
+Tamworth
+tan
+tana
+tanager
+Tanagra
+Tanaka
+Tanaka's
+tanana
+Tananarive
+tanbark
+tance
+tancred
+tandem
+tandemize
+tandemizes
+tandjungpriok
+tandoori
+tang
+tanga
+Tanganyika
+Tanganyika's
+tanged
+tangelo
+tangency
+tangent
+tangent's
+tangential
+tangentially
+tangents
+tangere
+tangerine
+tangibility
+tangible
+tangibleness
+tangibly
+tangier
+tangle
+tangleberry
+tangled
+tanglement
+tangles
+tangling
+tangly
+tango
+tangos
+tangram
+tangshan
+tanguy
+tangy
+tanh
+tanis
+tanist
+tanjore
+Tanjungpriok
+tank
+tanka
+tankage
+tankard
+tanked
+tanker
+tankers
+tankful
+tanking
+tanks
+tannage
+tannate
+tanned
+Tannenbaum
+tannenbaum
+Tannenberg
+tanner
+tanner's
+tanners
+tannery
+tannest
+tannic
+tannin
+tanning
+tannish
+tans
+tansies
+tansy
+tanta
+tantalate
+tantalic
+tantalite
+tantalization
+tantalization's
+tantalizations
+tantalize
+tantalized
+tantalizer
+tantalizers
+tantalizes
+tantalizing
+tantalizinglies
+tantalizingly
+tantalizingness
+tantalizingnesses
+tantalous
+tantalum
+Tantalus
+tantamount
+tantara
+tantivy
+tanto
+tantra
+tantric
+tantrism
+tantrum
+tantrum's
+tantrums
+Tanya
+Tanzania
+tao
+taoism
+taoist
+taoists
+taos
+tap
+tap's
+tapa
+tapadera
+Tapdance
+tape
+taped
+tapeline
+tapemark
+tapemarks
+taper
+tapered
+taperer
+tapering
+tapers
+tapes
+tapestried
+tapestries
+tapestry
+tapestry's
+tapeta
+tapetum
+tapeworm
+taphole
+taphouse
+taping
+tapings
+tapioca
+tapir
+tapirs
+tapis
+tapley
+tappa
+tapped
+tapper
+tapper's
+tappers
+tappet
+tappets
+tapping
+taproom
+taprooms
+taproot
+taproot's
+taproots
+taps
+tapster
+tapsters
+tar
+Tara
+tara
+tarabulus
+taraday
+taradiddle
+taramasalata
+tarantara
+tarantass
+tarantella
+tarantism
+taranto
+tarantula
+tarantulas
+taras
+tarawa
+taraxacum
+Tarbell
+Tarbell's
+tarbes
+tarboosh
+tarbush
+Tardenoisian
+tardier
+tardies
+tardigrade
+tardily
+tardiness
+tardo
+tardy
+tare
+tarentum
+targe
+target
+targeted
+targeting
+targets
+targo
+Targum
+tarheelia
+tariff
+tariff's
+tariffize
+tariffizes
+tariffs
+tarim
+taring
+Tarkington
+tarlatan
+tarmac
+tarmacadam
+tarn
+tarnal
+tarnation
+tarnish
+tarnishable
+tarnished
+tarnishes
+tarnishing
+tarnishs
+Tarnopol
+taro
+tarok
+taros
+tarot
+tarp
+tarpan
+tarpaper
+tarpapered
+tarpaulin
+tarpaulins
+Tarpeia
+Tarpeian
+tarpon
+tarpons
+Tarquin
+tarradiddle
+tarragon
+tarragona
+tarrant
+tarrasa
+tarre
+tarred
+tarriance
+tarried
+tarries
+tarring
+tarry
+tarrying
+Tarrytown
+tars
+tarsal
+tarshish
+tarsi
+tarsia
+tarsier
+tarsometatarsus
+tarsus
+tart
+tartan
+tartar
+Tartarean
+Tartaric
+tartarization
+tartarization's
+tartarizations
+tartarize
+tartarized
+tartarizes
+tartarous
+tartarughe
+Tartarus
+Tartary
+tartish
+tartishly
+tartlet
+tartlets
+tartly
+tartness
+tartrate
+tartrated
+tartrates
+tarts
+tartu
+tartuffe
+Tartuffe
+taruffi
+Tarzan
+tashi
+tashkent
+tasimeter
+task
+tasked
+tasking
+taskmaster
+taskmistress
+tasks
+taskwork
+tasman
+Tasmania
+Tasmanian
+Tass
+tasse
+tassel
+tassel's
+tasseled
+tasseling
+tassels
+tasset
+tassie
+tassle
+tasso
+taste
+tasted
+tasteful
+tastefully
+tastefulness
+tasteless
+tastelessly
+tastelessness
+tastemaker
+taster
+tasters
+tastes
+tastier
+tastily
+tastiness
+tasting
+tasty
+tat
+tatami
+Tatar
+Tatary
+tatchell
+Tate
+tate
+tater
+tati
+tatian
+tatler
+tatouay
+tatra
+tatras
+tatted
+tatter
+tatterdemalion
+tattered
+tattersall
+tattier
+tatting
+tattle
+tattled
+tattler
+tattles
+tattletale
+tattling
+tattoo
+tattooed
+tattooer
+tattooist
+tattoos
+tatty
+Tatum
+tau
+taught
+taui
+taunt
+taunted
+taunter
+taunting
+tauntingly
+Taunton
+taunts
+taupe
+taupo
+tauranga
+taurine
+taurocholate
+taurocholic
+taurog
+tauromachy
+Taurus
+taussig
+taut
+tauten
+tautened
+tautening
+tautly
+tautness
+tautog
+tautological
+tautologically
+tautologies
+tautologous
+tautologously
+tautology
+tautology's
+tautomer
+tautomeric
+tautomerism
+tautonym
+tautonymic
+tautonymous
+tautonymy
+tav
+tavel
+tavern
+tavern's
+taverna
+taverner
+tavernize
+tavernizes
+taverns
+taw
+tawdrier
+tawdrily
+tawdriness
+tawdry
+tawes
+tawie
+Tawney
+tawney
+tawnier
+tawnies
+tawniness
+tawny
+tawpie
+taws
+tawse
+tax
+taxa
+taxability
+taxable
+taxably
+taxaceous
+taxation
+taxed
+taxeme
+taxemic
+taxer
+taxes
+taxi
+taxi's
+taxicab
+taxicab's
+taxicabs
+taxidermic
+taxidermist
+taxidermist's
+taxidermists
+taxidermy
+taxied
+taxies
+taxiing
+taximan
+taximeter
+taximeter's
+taximeters
+taxing
+taxingly
+taxiplane
+taxiplanes
+taxis
+taxiway
+taxiway's
+taxiways
+taxon
+taxonomic
+taxonomically
+taxonomist
+taxonomist's
+taxonomists
+taxonomy
+taxons
+taxpayer
+taxpayer's
+taxpayers
+taxpaying
+taxus
+taxying
+Tay
+Taylor
+Taylorize
+Taylorizes
+Taylors
+Taymyr
+Tayra
+Tayside
+tazza
+Tbilisi
+Tchad
+tchaikovsky
+Tchaikovsky
+TCP
+Te
+tea
+teacake
+teacart
+teach
+teachability
+teachable
+teachableness
+teachably
+teacher
+teacher's
+teachers
+teachership
+teaches
+teaching
+teachings
+teacup
+teacupful
+teahouse
+teahouses
+teak
+teak's
+teakettle
+teaks
+teakwood
+teal
+Teal
+teals
+team
+team's
+teamed
+teaming
+teammate
+teammates
+teams
+teamster
+teamsters
+teamwork
+teapot
+teapots
+teapoy
+Tear
+tear
+tear's
+teardown
+teardrop
+teardrops
+teared
+tearer
+tearful
+tearfully
+tearfulness
+teargas
+tearier
+tearily
+tearing
+tearjerker
+tearle
+tearless
+tearlessly
+tearlessnss
+tearoom
+tearooms
+tears
+tearstain
+tearstained
+teary
+teas
+tease
+teased
+teasel
+teaseled
+teaseler
+teaselers
+teaseling
+teaser
+teases
+teashop
+teasing
+teasingly
+teaspoon
+teaspoon's
+teaspoonful
+teaspoonful's
+teaspoonfuls
+teaspoons
+teaspoonsful
+teat
+teated
+teatime
+teatro
+teats
+teazel
+teazeled
+teazeling
+teazle
+teazled
+Tebaldi
+tech
+teched
+technetium
+technetronic
+technic
+technical
+technicalities
+technicality
+technicality's
+technicalization
+technicalize
+technicalizes
+technically
+technicalness
+technician
+technician's
+technicians
+Technicolor
+technics
+technion
+Technion
+technique
+technique's
+techniques
+technocommercial
+technocracy
+technocrat
+technocratic
+technography
+technol
+technologic
+technological
+technologically
+technologies
+technologist
+technologist's
+technologists
+technologize
+technology
+technology's
+technostructure
+techy
+tecta
+tectal
+tectonic
+tectonics
+tectonism
+tectorial
+tectum
+tecum
+tecumseh
+ted
+tedded
+tedder
+tedding
+Teddy
+tedious
+tediously
+tediousness
+tedium
+teds
+tee
+teeing
+teem
+teemed
+teeming
+teemingly
+teemingness
+teems
+teen
+teenage
+teenaged
+teenager
+teenagers
+teener
+teenie
+teenier
+teens
+teensier
+teensy
+teentsier
+teentsy
+teeny
+teenybopper
+teepee
+tees
+teesside
+teet
+teeter
+teeterboard
+teetering
+teeth
+teethe
+teethed
+teether
+teethes
+teething
+teetotal
+teetotaled
+teetotaler
+teetotaling
+teetotalism
+teetotalist
+teetotum
+tef
+Teflon
+Teflon's
+teg
+tegmen
+tegmental
+tegmentum
+Tegucigalpa
+Tegucigalpa's
+tegular
+tegument
+tegumental
+tegumentary
+Teheran
+Tehran
+tehuantepec
+teide
+teiid
+teilhard
+tejo
+tektite
+tektites
+tektitic
+Tektronix
+Tektronix's
+tel
+Tel
+tela
+telamon
+telamones
+telanaipura
+telangiectasia
+telangiectasis
+telangiectatic
+telautograph
+tele
+telecamera
+telecast
+telecaster
+telecom
+telecommunicate
+telecommunication
+telecommunications
+telecomunications
+teleconference
+teleconference's
+teleconferenced
+teleconferences
+teleconferencing
+telecourse
+teledu
+Teledyne
+telefacsimile
+telefilm
+Telefunken
+teleg
+telega
+telegenic
+telegnosis
+telegonus
+telegony
+telegram
+telegram's
+telegrams
+telegraph
+telegraphed
+telegrapher
+telegraphers
+telegraphese
+telegraphic
+telegraphically
+telegraphing
+telegraphist
+telegraphs
+telegraphy
+Telegu
+telekinesis
+telekinetic
+telekinetically
+telemachus
+teleman
+Telemann
+telemann
+telemark
+telemeter
+telemeter's
+telemeters
+telemetric
+telemetrically
+telemetry
+telencephalic
+telencephalon
+teleologic
+teleological
+teleologically
+teleologist
+teleology
+teleost
+teleostean
+teleostome
+telepathic
+telepathically
+telepathy
+telephone
+telephoned
+telephoner
+telephoners
+telephones
+telephonic
+telephonically
+telephoning
+telephonist
+telephonists
+telephony
+telephoto
+telephotographic
+telephotography
+teleplay
+teleprinter
+teleprocessing
+teleprompter
+teleran
+telescope
+telescoped
+telescopes
+telescopic
+telescopically
+telescoping
+Telescopium
+telescopy
+telescript
+telesis
+telespectroscope
+telestereoscope
+telesthesia
+telesthetic
+telestich
+teletext
+telethermoscope
+telethon
+teletranscription
+teletube
+teletype
+teletype's
+teletypes
+teletypesetter
+teletypesetting
+teletypewrite
+teletypewriter
+teletypist
+teleutospore
+teleutosporic
+televideo
+teleview
+televiewer
+televise
+televised
+televises
+televising
+television
+televisionally
+televisionary
+televisions
+televisor
+televisor's
+televisors
+televisual
+telewriter
+Telex
+telexed
+telexes
+telexing
+telfer
+telferage
+Telford
+telia
+telial
+telic
+telically
+teliospore
+teliosporic
+telium
+tell
+teller
+tellers
+telli
+telling
+tellingly
+tellings
+tells
+telltale
+telltale's
+telltales
+tellurate
+tellurian
+telluric
+telluride
+tellurion
+tellurite
+tellurium
+tellurize
+tellurized
+tellurizes
+tellurizing
+tellurometer
+tellurometer's
+tellurometers
+tellurous
+tellus
+telly
+telnet
+telnets
+telocentric
+teloic
+telome
+telomeric
+telophase
+telos
+telotaxis
+telpher
+telpherage
+telson
+Telstar
+Telugu
+Tema
+temblor
+temerarious
+temerariously
+temerariousness
+temerity
+Temne
+temp
+Tempe
+tempeh
+temper
+tempera
+temperable
+temperament
+temperamental
+temperamentally
+temperaments
+temperance
+temperate
+temperately
+temperateness
+temperature
+temperature's
+temperatures
+tempered
+temperer
+tempering
+tempers
+tempest
+tempests
+tempestuous
+tempestuously
+tempestuousness
+tempi
+Templar
+template
+template's
+templates
+temple
+temple's
+templed
+Templeman
+templeman
+temples
+templet
+Templeton
+templize
+templizes
+tempo
+temporal
+temporality
+temporalize
+temporalized
+temporalizes
+temporalizing
+temporally
+temporaries
+temporarily
+temporariness
+temporary
+temporization
+temporization's
+temporizations
+temporize
+temporized
+temporizer
+temporizer's
+temporizers
+temporizes
+temporizing
+temporizing's
+temporizingly
+temporizings
+tempos
+tempt
+temptable
+temptation
+temptation's
+temptations
+tempted
+tempter
+tempters
+tempting
+temptingly
+temptress
+tempts
+tempura
+temuco
+ten
+ten's
+tenability
+tenable
+tenableness
+tenably
+tenace
+tenacious
+tenaciously
+tenaciousness
+tenacity
+tenaculum
+tenaille
+tenancies
+tenancy
+tenant
+tenant's
+tenantable
+tenantless
+tenantry
+tenants
+tench
+tenches
+tend
+tenda
+tendance
+tended
+tendencies
+tendencious
+tendency
+tendentious
+tendentiously
+tendentiousness
+tender
+tendered
+tenderfoot
+tenderhearted
+tenderheartedly
+tenderheartedness
+tendering
+tenderization
+tenderize
+tenderized
+tenderizer
+tenderizes
+tenderizing
+tenderloin
+tenderly
+tenderness
+tenderometer
+tenderometer's
+tenderometers
+tenders
+tending
+tendinous
+tendon
+tendons
+tendresse
+tendril
+tendriled
+tendrilous
+tendrils
+tends
+Tenebrae
+tenebrific
+tenebrionid
+tenebrious
+tenebrism
+tenebrist
+tenebrous
+tenedos
+tenement
+tenement's
+tenementary
+tenementization
+tenementization's
+tenementizations
+tenementize
+tenementizes
+tenements
+tenenbaum
+Tenerife
+tenesmus
+tenet
+tenets
+Tenex
+tenex
+tenfold
+teng
+tengri
+tenia
+teniacide
+teniafuge
+teniasis
+teniers
+Tenneco
+tenner
+Tennessee
+Tennessee's
+Tenney
+tenniel
+tennis
+tennist
+tenno
+Tennstedt
+Tennyson
+tenon
+tenor
+tenor's
+tenorite
+tenorrhaphy
+tenors
+tenosynovitis
+tenotomy
+tenour
+tenpenny
+tenpin
+tenpins
+tenpounder
+tenrec
+tens
+tense
+tensed
+tensely
+tenseness
+tenser
+tenses
+tensest
+tensible
+tensile
+tensility
+tensimeter
+tensimeter's
+tensimeters
+tensing
+tensiometer
+tensiometer's
+tensiometers
+tensiometric
+tensiometry
+tension
+tensional
+tensioned
+tensioner
+tensioning
+tensionless
+tensions
+tensity
+tensive
+tensometer
+tensometer's
+tensometers
+tensor
+tensor's
+tensorial
+tensors
+tenspot
+tent
+tentacle
+tentacled
+tentacles
+tentacular
+tentage
+tentation
+tentative
+tentatively
+tentativeness
+tented
+tenter
+tenterhook
+tenterhooks
+tenth
+tenthes
+tenths
+tentie
+tenting
+tentless
+tentmaker
+tents
+tenty
+tenuis
+tenuity
+tenuous
+tenuously
+tenuousness
+tenure
+tenured
+tenures
+tenurial
+tenurially
+tenuto
+Tenzi
+tenzing
+teocalli
+teonanacatl
+teosinte
+tepa
+tepal
+tepee
+tepees
+tepefy
+tephra
+tephrite
+tepic
+tepid
+tepidity
+tepidly
+tepidness
+tequila
+tequila's
+ter
+terai
+teraph
+teraphim
+teratism
+teratogen
+teratogenesis
+teratogenic
+teratogenicity
+teratoid
+teratologic
+teratological
+teratologies
+teratologist
+teratology
+teratoma
+teratomatous
+terbia
+terbium
+terce
+terceira
+tercel
+tercentenary
+tercentennial
+tercept
+tercet
+terebene
+terebic
+terebinth
+terebinthine
+tered
+teredines
+teredo
+Terence
+terephthalate
+terephthalic
+Teresa
+tereshkova
+Teresina
+terest
+terete
+Tereus
+terga
+tergal
+tergite
+tergiversate
+tergiversation
+tergiversator
+tergum
+teriyaki
+term
+termagant
+termagantly
+termcap
+termed
+termer
+terminable
+terminableness
+terminably
+terminal
+terminal's
+terminalization
+terminalization's
+terminalizations
+terminalized
+terminalized's
+terminalizeds
+terminally
+terminals
+terminate
+terminated
+terminates
+terminating
+termination
+terminational
+terminations
+terminative
+terminatively
+terminator
+terminator's
+terminators
+termined
+terming
+termini
+termining
+terminism
+terminological
+terminologically
+terminologies
+terminology
+terminosity
+terminus
+termitarium
+termite
+termites
+termless
+termly
+termor
+terms
+termtime
+tern
+ternary
+ternate
+ternately
+terne
+terneplate
+terni
+ternion
+ternize
+ternizes
+Ternopol
+terotechnology
+terpene
+terpeneless
+terpenic
+terpenoid
+terpineol
+terpolymer
+Terpsichore
+Terpsichore's
+terpsichorean
+terr
+Terra
+terrace
+terraced
+terraces
+terracing
+terrae
+terrain
+terrain's
+terrains
+terram
+terramycin
+Terran
+terrane
+Terrani
+terrapin
+terrapins
+terraqueous
+terrarium
+terrazzo
+Terre
+Terre's
+terrene
+terreplein
+terrestial
+terrestrial
+terrestrial's
+terrestrialize
+terrestrializes
+terrestrially
+terrestrials
+terret
+terrible
+terribleness
+terribly
+terricolous
+terrier
+terrier's
+terriers
+terries
+terrific
+terrifically
+terrificly
+terrified
+terrifies
+terrify
+terrifying
+terrifyingly
+terrigenous
+terrine
+territorial
+territorialism
+territorialist
+territoriality
+territorialization
+territorialization's
+territorializations
+territorialize
+territorializes
+territorially
+territorian
+territories
+territory
+territory's
+terror
+terror's
+terrorism
+terrorist
+terrorist's
+terroristic
+terrorists
+terrorization
+terrorization's
+terrorizations
+terrorize
+terrorized
+terrorizer
+terrorizers
+terrorizes
+terrorizing
+terrorless
+terrors
+terry
+terse
+tersely
+terseness
+terser
+tersest
+tertial
+tertian
+tertiaries
+tertiary
+tertium
+tertre
+tertullian
+teruel
+tervalent
+tery
+terylene
+terza
+terzetto
+tesla
+Tess
+tessellate
+tessellated
+tessellates
+tessellation
+tessera
+Tesseract
+tesseract
+Tessie
+tessie
+tessin
+tessitura
+test
+test's
+testa
+testability
+testable
+testacean
+testaceous
+testacy
+testae
+testament
+testament's
+testamentary
+testaments
+testate
+testator
+testator's
+testators
+testatrix
+testbed
+testcross
+tested
+tester
+tester's
+testers
+testes
+testicle
+testicle's
+testicles
+testicular
+testiculate
+testier
+testified
+testifier
+testifiers
+testifies
+testify
+testifying
+testily
+testimonial
+testimonialization
+testimonialization's
+testimonializations
+testimonialize
+testimonializer
+testimonializers
+testimonializes
+testimonials
+testimonies
+testimony
+testimony's
+testiness
+testing
+testings
+testis
+teston
+testoon
+testosterone
+tests
+testudinal
+testudo
+testy
+tetanal
+tetanic
+tetanically
+tetanization
+tetanize
+tetanized
+tetanizes
+tetanizing
+tetanus
+tetany
+tetartohedral
+tetched
+tetchier
+tetchy
+tete
+teter
+teth
+tether
+tetherball
+tethered
+tethering
+tethers
+Tethys
+Teton
+tetra
+tetrabasic
+tetrabasicity
+tetrabrach
+tetrabutylammonium
+tetracaine
+tetrachlorethylene
+tetrachloride
+tetrachord
+tetracid
+tetracyclic
+tetracycline
+tetrad
+tetradecyl
+tetradic
+tetradrachm
+tetradymite
+tetradynamous
+tetraethyl
+tetraethyllead
+tetrafluoride
+tetragonal
+tetragonally
+tetragonolobus
+tetragram
+tetragrammaton
+tetrahalides
+tetrahedra
+tetrahedral
+tetrahedrally
+tetrahedrite
+tetrahedron
+tetrahydrate
+tetrahydrated
+tetrahydrocannabinol
+tetrahydrofuran
+tetrahydroxy
+tetrahymena
+tetralogy
+tetramer
+tetramer's
+tetrameric
+tetrameron
+tetramerous
+tetramers
+tetrameter
+tetramethyl
+tetramethyllead
+tetraphenyl
+tetraplegia
+tetraploid
+tetraploidy
+tetrapod
+tetrapody
+tetrapterous
+tetrapyrrole
+tetrarch
+tetrarchic
+tetrarchy
+tetrasodium
+tetraspore
+tetrasporic
+tetrastich
+tetrastichous
+tetrasyllable
+tetratomic
+tetravalent
+tetrazolium
+tetrazzini
+tetrode
+tetrodes
+tetrodotoxin
+tetroxide
+tetrxide
+tetryl
+tetter
+tetzel
+Teucer
+Teucrian
+teutoburger
+Teuton
+Teutonic
+Teutonism
+teutonize
+tevere
+tevet
+tewfik
+Tewkesbury
+TeX
+Tex
+TeX's
+Texaco
+Texan
+Texans
+Texas
+Texas's
+Texases
+text
+text's
+textbook
+textbook's
+textbookish
+textbooks
+textile
+textile's
+textiles
+Textron
+texts
+textual
+textualism
+textually
+textuary
+textural
+texturally
+texture
+textured
+textures
+texturing
+texturized
+teyde
+tezel
+th
+thackeray
+thaddeus
+thadentsonyane
+Thai
+Thailand
+thalamencephalon
+thalamic
+thalamically
+thalamus
+thalassemia
+thalassemic
+thalassic
+thalassocracy
+thalassocrat
+thaler
+thales
+Thalia
+Thalia's
+thalidomide
+thalli
+thallic
+thallium
+thalloid
+thallophyte
+thallophytic
+thallous
+thallus
+thalluses
+thalweg
+Thames
+thames
+thammuz
+than
+thanatopsis
+Thanatos
+thane
+thaneship
+thanet
+thanjavur
+thank
+thanked
+thanker
+thankful
+thankfully
+thankfulness
+thanking
+thankless
+thanklessly
+thanklessness
+thanks
+thanksgiving
+thanksgiving's
+thanksgivings
+thankworthy
+thapsus
+thar
+that
+that'd
+that'll
+that's
+thatch
+thatched
+thatcher
+thatcherism
+thatches
+thatching
+thats
+thaumatology
+thaumatrope
+thaumaturge
+thaumaturgic
+thaumaturgist
+thaumaturgy
+thaw
+thawed
+thawing
+thaws
+Thayer
+Thayer's
+the
+Thea
+Thea's
+theaceous
+theanthropism
+thearchy
+theast
+theat
+theater
+theater's
+theatergoer
+theatergoer's
+theatergoers
+theatergoing
+theatergoing's
+theatergoings
+theaterless
+theaterlesses
+theaterlike
+theaterlike's
+theaterlikes
+theaters
+theatric
+theatrical
+theatricalism
+theatricality
+theatricalization
+theatricalization's
+theatricalizations
+theatricalize
+theatricalized
+theatricalizes
+theatricalizing
+theatrically
+theatricals
+theatricize
+theatricizes
+theatrics
+Thebaid
+thebaine
+Thebes
+theca
+thecae
+thecal
+thecate
+thecodont
+thee
+theelin
+theelol
+theft
+theft's
+thefts
+thegn
+theine
+their
+their's
+theirs
+theism
+theist
+theist's
+theistic
+theistical
+theistically
+theists
+Thelma
+them
+thematic
+thematically
+theme
+theme's
+themes
+Themis
+themistocles
+themselves
+then
+thenar
+thenardite
+thence
+thenceforth
+thenceforward
+thenceforwards
+theobromine
+theocentric
+theocentricity
+theocentrism
+theocracy
+theocrasy
+theocrat
+theocratic
+theocratical
+theocratically
+theocritus
+theodicy
+theodolite
+theodolitic
+Theodora
+theodorakis
+Theodore
+Theodoric
+Theodosian
+theodosius
+Theodosius
+theogonic
+theogony
+theol
+theolog
+theologian
+theologian's
+theologians
+theologic
+theological
+theologically
+theologies
+theologization
+theologize
+theologized
+theologizer
+theologizes
+theologizing
+theologue
+theology
+theomachy
+theomancy
+theomania
+theomorphic
+theonomous
+theonomously
+theonomy
+theopathy
+theophagy
+theophanic
+theophany
+Theophilus
+theophobia
+theophrastus
+theophylline
+theorbo
+theorem
+theorem's
+theorematic
+theorems
+theoretic
+theoretical
+theoretically
+theoretician
+theoreticians
+theoretics
+theories
+theorist
+theorist's
+theorists
+theorization
+theorization's
+theorizations
+theorize
+theorized
+theorizer
+theorizers
+theorizes
+theorizing
+theory
+theory's
+theosophical
+theosophically
+theosophist
+theosophy
+therapeusis
+therapeutic
+therapeutically
+therapeutics
+therapeutist
+therapies
+therapist
+therapist's
+therapists
+therapsid
+therapy
+therapy's
+theravada
+there
+there'd
+there'll
+there's
+thereabout
+thereabouts
+thereafter
+thereat
+thereby
+therefor
+therefore
+therefrom
+therein
+thereinafter
+thereinto
+thereof
+thereon
+Theresa
+thereto
+theretofore
+thereunder
+thereunto
+thereupon
+therewith
+therewithal
+therezina
+therfore
+theriac
+theriaca
+theriacal
+therianthropic
+theriomorphic
+therm
+thermae
+thermaesthesia
+thermal
+thermalization
+thermalize
+thermalized
+thermalizes
+thermalizing
+thermally
+thermals
+thermic
+thermically
+thermion
+thermionic
+thermionics
+thermistor
+thermistors
+Thermit
+thermite
+thermite's
+thermo
+thermoanesthesia
+thermoanesthesia's
+thermoanesthesias
+thermobarograph
+thermobarometer
+thermochemical
+thermochemist
+thermochemistry
+thermocline
+thermocoagulation
+thermocouple
+thermocouples
+thermoduric
+thermodynamic
+thermodynamical
+thermodynamically
+thermodynamicist
+thermodynamics
+thermoelastic
+thermoelectric
+thermoelectricity
+thermoelectron
+thermoelement
+Thermofax
+thermoform
+thermoformable
+thermoformed
+thermoforming
+thermogenesis
+thermogram
+thermogram's
+thermograms
+thermograph
+thermographic
+thermographically
+thermography
+thermogravimetric
+thermohaline
+thermojunction
+thermolabile
+thermolability
+thermoluminescence
+thermoluminescent
+thermolysis
+thermolytic
+thermomagnetic
+thermomagnetically
+thermometer
+thermometer's
+thermometerize
+thermometerizes
+thermometers
+thermometric
+thermometrically
+thermometry
+thermomotor
+thermonuclear
+thermoperiodicity
+thermoperiodism
+thermophile
+thermophilic
+thermophilous
+thermophysical
+thermopile
+thermoplastic
+thermoplasticity
+thermopolymerization
+thermopolymerization's
+thermopolymerizations
+thermopower
+thermopylae
+thermoreceptor
+thermoregularity
+thermoregulation
+thermoregulator
+thermoregulatory
+thermoremanence
+thermoremanent
+thermos
+thermoscope
+thermoset
+thermosetting
+thermosiphon
+thermosiphon's
+thermosiphons
+thermosphere
+thermospheric
+thermostability
+thermostable
+thermostat
+thermostat's
+thermostated
+thermostatic
+thermostatical
+thermostatically
+thermostatics
+thermostats
+thermotactic
+thermotaxis
+thermotensile
+thermotherapy
+thermotropic
+thermotropism
+theroelectricity
+theroid
+theropod
+Thersites
+thersitical
+thesaural
+thesauri
+thesaurus
+these
+theses
+Theseus
+thesis
+thespian
+thespians
+thespis
+Thessalonian
+Thessalonians
+Thessaly
+theta
+thetas
+Thetford
+thetic
+thetically
+Thetis
+theurgic
+theurgical
+theurgist
+theurgy
+thew
+they
+they'd
+they'll
+they're
+they've
+thiabendazole
+thiamin
+thiaminase
+thiamine
+thiazide
+thiazine
+thiazole
+thick
+thicken
+thickened
+thickener
+thickeners
+thickening
+thickens
+thicker
+thickest
+thicket
+thicket's
+thicketed
+thickets
+thickety
+thickhead
+thickheaded
+thickish
+thickleaf
+thickly
+thickness
+thicknesses
+thicks
+thickset
+thief
+Thiensville
+thieve
+thievery
+thieves
+thieving
+thievish
+thievishly
+thievishness
+thigh
+thighbone
+thighed
+thighs
+thigmotaxis
+thigmotropism
+thill
+thills
+thimble
+thimble's
+thimbleberry
+thimbleful
+thimbleful's
+thimblerig
+thimblerigger
+thimbles
+thimblesful
+thimbleweed
+thimblewit
+thimerosal
+thin
+thinclad
+thine
+thiner
+thinest
+thing
+thingamabob
+thingamajig
+thingamajig's
+thingamajigs
+thingness
+things
+thingumabob
+thingumajig
+thingummy
+think
+thinkable
+thinkableness
+thinkably
+thinker
+thinkers
+thinking
+thinkingly
+thinkingness
+thinks
+thinly
+thinned
+thinner
+thinners
+thinness
+thinnest
+thinning
+thinnish
+thins
+thioalcohol
+thiocarbamide
+thiocyanate
+thiocyanic
+thiofuran
+thioguanine
+thiol
+thiolic
+thionate
+thionic
+thionine
+thionyl
+thiopental
+thiopentone
+thiophen
+thiophene
+thiophosphate
+thiosinamine
+thiosulfate
+thiosulfuric
+thiosulphate
+thiosulphuric
+thiotepa
+thiouracid
+thiouracil
+thiourea
+thir
+thiram
+third
+thirdhand
+thirdly
+thirds
+thirdstream
+thirl
+thirlage
+thirlmere
+thirst
+thirsted
+thirster
+thirstier
+thirstily
+thirstiness
+thirsts
+thirsty
+thirteen
+thirteens
+thirteenth
+thirties
+thirtieth
+thirty
+thirtyfold
+this
+this'll
+thisbe
+thistle
+thistledown
+thistly
+thither
+thitherto
+thitherward
+thixotropic
+thixotropy
+tho
+thod
+tholdy
+thole
+tholed
+tholeiite
+tholeiitic
+tholepin
+tholer
+tholes
+tholing
+tholos
+Thomas
+Thomism
+Thomistic
+Thomistic's
+Thompson
+Thompson's
+Thomson
+thonburi
+thong
+thonged
+Thor
+thoraces
+thoracic
+thoracically
+thoracoplasty
+thoracotomy
+thorax
+thoraxes
+Thoreau
+thoria
+thorianite
+thoriate
+thoriated
+thoric
+thorite
+thorium
+thorn
+thorn's
+thornback
+thornbill
+Thornburg
+thornbush
+Thorndike
+thornier
+thorniness
+thornless
+thornlike
+thorns
+Thornton
+thorny
+thoron
+thorough
+thoroughbred
+thoroughfare
+thoroughfare's
+thoroughfares
+thoroughgoing
+thoroughly
+thoroughness
+thoroughpaced
+thoroughpin
+thoroughwort
+thorp
+Thorpe
+thorshavn
+Thorstein
+Thorvaldsen
+those
+thoth
+thou
+though
+thought
+thought's
+thoughtful
+thoughtfully
+thoughtfulness
+thoughtless
+thoughtlessly
+thoughtlessness
+thoughts
+thoughtway
+thous
+thousand
+thousandfold
+thousands
+thousandth
+thousandths
+Thrace
+Thrace's
+Thracian
+thraldom
+thrall
+thralldom
+thrash
+thrashed
+thrasher
+thrashes
+thrashing
+thrasonical
+thrasonically
+thrave
+thraw
+thrawart
+thrawn
+thrawnly
+thread
+threadbare
+threadbareness
+threaded
+threader
+threaders
+threadfin
+threadiness
+threading
+threadless
+threadlike
+threadneedle
+threads
+threadworm
+thready
+threap
+threat
+threaten
+threatened
+threatener
+threatening
+threateningly
+threatens
+threats
+three
+three's
+threefold
+threepence
+threepences
+threepenny
+threes
+threescore
+threesome
+thremmatology
+threnode
+threnodic
+threnodist
+threnody
+threonine
+thresh
+threshed
+thresher
+threshing
+threshold
+threshold's
+thresholded
+thresholding
+thresholds
+threw
+thrice
+thrift
+thriftier
+thriftily
+thriftiness
+thriftless
+thriftlessly
+thriftlessness
+thrifty
+thrill
+thrilled
+thriller
+thrillers
+thrilling
+thrillingly
+thrills
+thrips
+thrive
+thrived
+thriven
+thriver
+thrives
+thriving
+thrivingly
+thro
+throat
+throated
+throatier
+throatily
+throatiness
+throating
+throatlash
+throatlatch
+throats
+throaty
+throb
+throbbed
+throbber
+throbbing
+throbs
+throe
+throes
+thrombi
+thrombin
+thrombocyte
+thrombocytic
+thrombocytopenia
+thrombocytopenic
+thromboembolic
+thromboembolism
+thrombogen
+thrombokinase
+thrombophlebitis
+thromboplastic
+thromboplastically
+thromboplastin
+thrombose
+thrombosed
+thromboses
+thrombosis
+thrombospondin
+thrombotic
+thrombus
+throne
+throne's
+Throneberry
+throneberry
+thrones
+throng
+throng's
+thronging
+throngs
+throning
+thronize
+thronizes
+throstle
+throttle
+throttleable
+throttled
+throttlehold
+throttler
+throttles
+throttling
+through
+throughither
+throughly
+throughother
+throughout
+throughput
+throughway
+throve
+throw
+throwaway
+throwback
+thrower
+throwing
+thrown
+throws
+throwster
+thru
+thrum
+thrumming
+thrush
+thrushes
+thrust
+thruster
+thrusters
+thrustful
+thrustfulness
+thrusting
+thrustor
+thrusts
+Thruway
+Thruways
+Thu
+Thuban
+Thuban's
+Thucydides
+thud
+thudded
+thudding
+thuds
+thug
+thug's
+thuggee
+thugs
+Thuja
+Thule
+thulium
+thumb
+thumbed
+thumbhole
+thumbing
+thumbnail
+thumbnut
+thumbprint
+thumbprint's
+thumbprints
+thumbs
+thumbscrew
+thumbstall
+thumbtack
+thumbtack's
+thumbtacked
+thumbtacking
+thumbtacks
+thummim
+thump
+thumped
+thumper
+thumping
+thumps
+thun
+thunder
+thunderbird
+thunderbolt
+thunderbolt's
+thunderbolts
+thunderbox
+thunderclap
+thunderclaps
+thundercloud
+thundercloud's
+thunderclouds
+thundered
+thunderer
+thunderers
+thunderflower
+thunderhead
+thundering
+thunderingly
+thunderous
+thunderously
+thunderpeal
+thunders
+thundershower
+thundershower's
+thundershowers
+thunderstone
+thunderstorm
+thunderstorm's
+thunderstorms
+thunderstrike
+thunderstroke
+thunderstruck
+thundery
+thuner
+thunk
+Thurber
+thurber
+Thurgau
+thurible
+thurifer
+Thuringia
+Thuringian
+thurl
+Thurman
+Thurn
+Thursday
+Thursday's
+Thursdays
+thus
+thusly
+thuya
+thwack
+thwart
+thwarted
+thwarter
+thwarting
+thwartly
+thwarts
+thwartwise
+thwump
+thy
+Thyestes
+thylacine
+thylakoid
+thyme
+thyme's
+thymectomize
+thymectomy
+thymelaeaceous
+thymes
+thymey
+thymic
+thymidine
+thymine
+thymocyte
+thymol
+thymus
+thymy
+thyratron
+thyrglobulin
+thyristor
+thyrocalcitonin
+thyroglobulin
+thyroid
+thyroidal
+thyroidectomized
+thyroidectomy
+thyroiditis
+thyroidization
+thyroidization's
+thyroidizations
+thyroids
+thyronine
+thyrotoxic
+thyrotoxicosis
+thyrotrophic
+thyrotrophin
+thyrotropic
+thyrotropin
+thyroxin
+thyroxine
+thyrse
+thyrsi
+thyrsus
+thysanopteran
+thysanuran
+thyself
+ti
+tia
+tial
+tiality
+tian
+tiara
+tiated
+Tiber
+tiberias
+Tiberius
+tibesti
+Tibet
+Tibetan
+tibia
+tibial
+tibiotarsus
+tibullus
+tibur
+tiburon
+Tiburon
+tic
+tical
+ticino
+ticism
+tick
+ticked
+ticker
+tickers
+ticket
+ticket's
+ticketed
+ticketing
+tickets
+tickicide
+ticking
+tickle
+ticklebrush
+tickled
+tickler
+tickles
+tickling
+ticklish
+ticklishly
+ticklishness
+ticks
+tickseed
+ticktack
+ticktacktoe
+ticktock
+Ticonderoga
+ticonderoga
+tictac
+tidal
+tidally
+tidbit
+tidbits
+tiddledywinks
+tiddler
+tiddly
+tiddlywinks
+tide
+tided
+tideland
+tidelands
+tideless
+tidemark
+tides
+tidewaiter
+tidewater
+tideway
+tidied
+tidier
+tidies
+tidily
+tidiness
+tiding
+tidings
+tidy
+tidying
+tie
+tieback
+tiebreaker
+Tieck
+tieck
+tied
+tieing
+tieless
+tiemannite
+tien
+Tientsin
+Tientsin's
+tiepin
+tiepolo
+tier
+tierce
+tiercel
+tiered
+tierra
+tiers
+ties
+tiff
+tiffany
+tiffin
+tiflis
+tiger
+tiger's
+tigerish
+tigerishly
+tigerishness
+tigerlike
+tigers
+tight
+tighten
+tightened
+tightener
+tighteners
+tightening
+tightenings
+tightens
+tighter
+tightest
+tightfisted
+tightknit
+tightly
+tightness
+tightrope
+tights
+tightwad
+tightwad's
+tightwads
+tightwire
+tiglic
+tiglon
+tigon
+tigress
+tigrinya
+Tigris
+tihwa
+tijuana
+Tijuana
+tike
+tiki
+tikoloshe
+til
+tilapia
+Tilburg
+Tilbury
+tilde
+tildes
+tile
+tiled
+tilefish
+tiler
+tiles
+tiliaceous
+tiling
+till
+tillable
+tillage
+tillandsia
+tilled
+tiller
+tillered
+tillering
+tillerman
+tillers
+tillich
+Tillich
+tillicum
+tillie
+Tillie
+tilling
+tills
+tilly
+Tilsit
+tilt
+tiltable
+tilted
+tilter
+tilters
+tilth
+tilting
+tiltmeter
+tiltmeter's
+tiltmeters
+tilts
+tiltyard
+Tim
+Tim's
+timaru
+timbal
+timbale
+timber
+timbered
+timberhead
+timbering
+timberland
+timberlands
+timberline
+timberman
+timbers
+timberwork
+timberyard
+timbral
+timbre
+timbrel
+timbrelled
+timbuktu
+time
+timecard
+timed
+timekeeper
+timekeeping
+timeless
+timelessly
+timelessness
+timelier
+timeliness
+timely
+timeous
+timeously
+timeout
+timeouts
+timepiece
+timepleaser
+timer
+timers
+times
+timesaving
+timescale
+timescales
+timeserver
+timeservers
+timeserving
+timeshare
+timeshared
+timeshares
+timesharing
+timeslice
+timeslices
+timestamp
+timestamped
+timestamping
+timestamps
+timetable
+timetable's
+timetabled
+timetables
+timetabling
+timework
+timeworker
+timeworn
+Timex
+timid
+timidity
+timidly
+timidness
+timing
+timings
+Timmy
+timmy
+timocracy
+timocratic
+timocratical
+Timon
+Timonize
+Timonizes
+Timor
+timorous
+timorously
+timorousness
+Timoshenko
+timothy
+Timour
+timpani
+timpanist
+Tims
+tin
+tin's
+Tina
+Tina's
+tinamou
+tinc
+tincal
+tinct
+tinctorial
+tinctorially
+tincture
+tinctured
+tincturing
+tindal
+tinder
+tinderbox
+tine
+tine's
+tinea
+tineal
+tineau
+tineid
+tines
+tinfoil
+tinful
+ting
+tinge
+tinged
+tingeing
+tingen
+tinging
+tingle
+tingled
+tingles
+tingling
+tinglingly
+tingly
+tinhorn
+tinier
+tiniest
+tinily
+tininess
+tinker
+tinkered
+tinkerer
+tinkering
+tinkers
+tinkle
+tinkled
+tinkles
+tinkling
+tinkly
+tinman
+tinned
+tinner
+tinnier
+tinniest
+tinnily
+tinniness
+tinning
+tinnitus
+tinny
+tinplate
+tinpot
+tins
+tinsel
+tinseled
+tinselier
+tinseliest
+tinseling
+tinselly
+Tinseltown
+Tinseltown's
+tinsmith
+tinsmiths
+tinstone
+tint
+tintable
+Tintagel
+tinted
+tinter
+tinting
+tintinnabulary
+tintinnabulation
+tintinnabulum
+tintless
+tintoretto
+tints
+tintype
+tinware
+tinwork
+tinworks
+tiny
+Tioga
+tip
+tip's
+tipcart
+tipcat
+tipi
+tipoff
+Tippecanoe
+tippecanoe
+tipped
+tipper
+tipper's
+Tipperary
+tippers
+tippet
+Tippett
+tippier
+tipping
+tipple
+tippled
+tippler
+tipples
+tippling
+tippy
+tips
+tipsier
+tipsily
+tipsiness
+tipstaff
+tipstaves
+tipster
+tipstock
+tipsy
+tiptoe
+tiptoed
+tiptoeing
+tiptop
+tipu
+tirade
+tirades
+tiran
+Tirana
+Tirana's
+tire
+tire's
+tired
+tiredly
+tiredness
+tireless
+tirelessly
+tirelessness
+tires
+tiresias
+tiresome
+tiresomely
+tiresomeness
+tirewoman
+tirich
+tiring
+tiro
+Tirol
+tiros
+tirpitz
+tirso
+Tiruchirapalli
+Tirunelveli
+Tisa
+tisane
+Tishab
+Tisiphone
+tissue
+tissue's
+tissued
+tissues
+tissuey
+tissuing
+tisza
+tit
+tit's
+titan
+titanate
+Titanesque
+titaness
+titania
+titanic
+titanically
+titaniferous
+titanism
+titanite
+titanium
+Titanomachy
+titanosaur
+titanothere
+titanous
+titans
+titbit
+titer
+titers
+titfer
+tithable
+tithe
+tithe's
+tither
+tithes
+tithing
+tithonia
+tithonus
+titi
+titian
+titicaca
+titillate
+titillating
+titillatingly
+titillation
+titillative
+titivate
+titivation
+titlark
+title
+titled
+titleholder
+titleholders
+titles
+titling
+titlist
+titman
+titmice
+titmouse
+titmouse's
+tito
+Tito
+Tito's
+Titograd
+Titoism
+titrant
+titratable
+titrate
+titrated
+titrates
+titrating
+titration
+titrator
+titrimetric
+titrimetrically
+tits
+titter
+tittered
+tittering
+titters
+tittie
+tittivate
+tittle
+tittup
+tittuped
+tittuping
+tittupy
+titubation
+titular
+titularly
+Titus
+tiu
+tiv
+Tivoli
+tizzies
+tizzy
+Tjirebon
+TKO
+Tlaxcala
+Tlemcen
+Tlingit
+Tmesis
+TN
+TNT
+to
+toad
+toad's
+toadeater
+toadeater's
+toadeaters
+toadfish
+toadfish's
+toadfishes
+toadflax
+toadied
+toadies
+toads
+toadstone
+toadstone's
+toadstones
+toadstool
+toady
+toadying
+toadyism
+toast
+toasted
+toaster
+toasters
+toastier
+toasting
+toastmaster
+toastmaster's
+toastmasters
+toastmistress
+toasts
+toasty
+tobacco
+tobacconist
+tobacconist's
+tobacconists
+tobaggon
+tobaggon's
+tobaggons
+Tobago
+Tobey
+tobies
+tobit
+toboggan
+toboggan's
+tobogganer
+tobogganing
+tobogganist
+toboggans
+tobol
+Tobolsk
+Tobruk
+Toby
+Toby's
+tocantins
+toccata
+Tocharian
+tocher
+tocology
+tocopherol
+Tocqueville
+tocsin
+tod
+today
+today'll
+today's
+todays
+Todd
+Todd's
+toddies
+toddle
+toddled
+toddler
+toddlers
+toddles
+toddling
+toddy
+toddy's
+todies
+tody
+toe
+toe's
+toea
+toecap
+toed
+TOEFL
+toehold
+toehold's
+toeholds
+toeing
+toeless
+toenail
+toenails
+toepiece
+toeplate
+toes
+toey
+toff
+toffee
+toffies
+toffy
+toft
+tofu
+tog
+toga
+togaed
+together
+togetherness
+toggery
+togging
+toggle
+toggled
+toggles
+toggling
+Togliatti
+Togo
+Togoland
+togs
+togue
+toheroa
+toil
+toile
+toiled
+toiler
+toilet
+toilet's
+toiletry
+toilets
+toilette
+toilful
+toilfully
+toiling
+toils
+toilsome
+toilsomely
+toilsomeness
+toilworn
+Tojo
+tokamak
+Tokay
+toke
+Tokelau
+token
+token's
+tokenism
+tokens
+Tokharian
+Tokoloshe
+tokonoma
+Tokugawa
+Tokyo
+tola
+Tolan
+Toland
+toland
+Tolbert
+tolbooth
+tolbutamide
+told
+tole
+Toledo
+tolerability
+tolerable
+tolerably
+tolerance
+tolerances
+tolerant
+tolerantly
+tolerate
+tolerated
+tolerates
+tolerating
+toleration
+tolerative
+tolerator
+tolidine
+Tolima
+toling
+Tolkien
+toll
+tollbooth
+tollbooth's
+tollbooths
+tolled
+Toller
+Tolley
+tolley
+tollgate
+tollhouse
+tolling
+tollman
+tolls
+tollway
+Tolly
+tolpuddle
+Tolstoy
+Toltec
+tolu
+toluate
+Toluca
+toluene
+toluic
+toluidine
+toluol
+toluyl
+tolyl
+tolylene
+tolylphosphine
+Tom
+tom
+Tom's
+tom's
+tomahawk
+tomahawk's
+tomahawks
+tomalley
+toman
+tomato
+tomatoes
+tomb
+tomb's
+tombac
+tombigbee
+Tombigbee
+tombless
+tomblike
+tombola
+tombolo
+tombouctou
+tomboy
+tomboyish
+tomboyishness
+tombs
+tombstone
+tombstones
+tomcat
+tomcod
+Tome
+tome
+tomentose
+tomentum
+tomes
+tomfool
+tomfoolery
+Tomlinson
+Tomlinson's
+Tommie
+tommy
+tommyrot
+tomogram
+tomogram's
+tomograms
+tomograph
+tomography
+tomorrow
+tomorrow's
+tomorrows
+Tomowa
+tompion
+Tompkins
+toms
+Tomsk
+tomtit
+ton
+ton's
+tonal
+tonalities
+tonality
+tonally
+Tonbridge
+tondi
+tondo
+tone
+toned
+toneless
+tonelessly
+tonelessness
+toneme
+tonemic
+toner
+tones
+tonetic
+tonetically
+tonetics
+tonette
+tong
+tonga
+Tonga
+tonger
+tongs
+tongue
+tongued
+tongueless
+tonguelike
+tongues
+tonguing
+Toni
+tonic
+tonic's
+tonically
+tonicity
+tonicize
+tonicizes
+tonics
+tonier
+tonight
+toning
+tonio
+Tonio
+tonk
+Tonka
+Tonkin
+tonks
+tonle
+tonn
+tonnage
+tonne
+tonneau
+tonneaus
+tonner
+tonnes
+tonometer
+tonometer's
+tonometers
+tonometric
+tonometry
+tonoplast
+tons
+tonsil
+tonsillar
+tonsillectomy
+tonsillitis
+tonsillotomy
+tonsorial
+tonsure
+tonsured
+tonsuring
+tontine
+tonus
+tony
+too
+toodle
+took
+tool
+toolbox
+toolboxes
+tooled
+tooler
+toolers
+toolhead
+toolholder
+toolhouse
+tooling
+toolkit
+toolkit's
+toolkits
+toolmake
+toolmaker
+toolmakers
+toolmaking
+toolroom
+tools
+toolshed
+toolsmith
+toom
+Toomey
+toomey
+toon
+toot
+tooted
+tooter
+tooth
+toothache
+toothache's
+toothaches
+toothbrush
+toothbrush's
+toothbrushes
+toothbrushing
+toothed
+toothier
+toothily
+toothing
+toothless
+toothlike
+toothpaste
+toothpick
+toothpick's
+toothpicks
+tooths
+toothsome
+toothsomely
+toothsomeness
+toothwort
+toothy
+tooting
+tootle
+tootled
+tootler
+tootling
+toots
+tootsie
+tootsies
+tootsy
+toowoomba
+top
+toparch
+topaz
+topazolite
+topcoat
+topcoats
+topcross
+topdressing
+tope
+toped
+topee
+Topeka
+toper
+topes
+topflight
+topful
+topfull
+topgallant
+topheavy
+Tophet
+tophi
+tophus
+topi
+topiary
+topic
+topic's
+topical
+topicality
+topically
+topics
+toping
+topkick
+topknot
+topless
+toploftical
+toploftily
+toploftiness
+toplofty
+topmast
+topminnow
+topmost
+topnotch
+topnotcher
+topocentric
+topograph
+topographer
+topographic
+topographical
+topographically
+topographies
+topography
+topoi
+topological
+topologically
+topologies
+topologise
+topologist
+topology
+toponym
+toponymic
+toponymical
+toponymy
+topos
+topotype
+topped
+topper
+toppers
+topping
+toppings
+topple
+toppled
+topples
+toppling
+tops
+topsail
+topside
+topsides
+topsoil
+topspin
+topstitch
+Topsy
+topwork
+toque
+tor
+Torah
+torbay
+torc
+torch
+torch's
+torchbearer
+torches
+torchier
+torchlight
+torchon
+torchwood
+tore
+toreador
+torero
+toreutic
+toreutics
+tori
+toric
+Tories
+tories
+torii
+torino
+torment
+tormented
+tormenter
+tormenters
+tormentil
+tormenting
+tormentor
+torments
+torn
+tornadic
+tornado
+tornadoes
+tornados
+tornillo
+toroid
+toroidal
+toroidally
+toroids
+Toronto
+torose
+torpedo
+torpedoed
+torpedoes
+torpedoing
+torpedos
+torpid
+torpidity
+torpidly
+torpor
+torporize
+torporizes
+torquate
+torquay
+torque
+torquemada
+Torquemada
+torquer
+torquers
+torques
+torquing
+torr
+Torrance
+Torrance's
+torre
+torrefy
+torrence
+torrens
+torrent
+torrent's
+torrential
+torrentially
+torrents
+torres
+torricelli
+Torricellian
+torrid
+torridity
+torridly
+torridness
+torsade
+torsi
+torsibility
+torsion
+torsional
+torsionally
+Torsk
+torso
+torsos
+tort
+torte
+tortelier
+tortellini
+torten
+tortes
+torticollis
+tortile
+tortilla
+tortious
+tortiously
+tortoise
+tortoise's
+tortoises
+tortoiseshell
+tortola
+tortoni
+tortricid
+tortrix
+tortuga
+tortuosity
+tortuous
+tortuously
+torture
+tortured
+torturer
+torturers
+tortures
+torturing
+torturous
+torturously
+torula
+torus
+torus's
+toruses
+tory
+Tory
+Toryize
+Toryizes
+Tosca
+Tosca's
+toscana
+toscanini
+Toscanini
+Toscanini's
+tosh
+Toshiba
+Toshiba's
+toss
+tossed
+tosser
+tosses
+tossing
+tosspot
+tot
+total
+total's
+totaled
+totaler
+totaler's
+totalers
+totaling
+totalism
+totalistic
+totalitarian
+totalitarianism
+totalitarianize
+totalities
+totality
+totality's
+totalization
+totalization's
+totalizations
+totalizator
+totalize
+totalized
+totalizer
+totalizers
+totalizes
+totalizing
+totally
+totals
+totaquina
+totaquine
+tote
+toted
+totem
+totemic
+totemically
+totemism
+totemist
+totemistic
+totemite
+totemization
+totemization's
+totemizations
+toter
+totes
+tother
+toting
+totipotency
+totipotent
+toto
+Toto
+tots
+totted
+totter
+tottered
+tottering
+totteringly
+totters
+tottery
+totting
+toucan
+touch
+touchable
+touchback
+touchdown
+touchdowns
+touched
+toucher
+touches
+touchhole
+touchier
+touchiest
+touchily
+touchiness
+touching
+touchingly
+touchline
+touchmark
+touchstone
+touchstones
+touchwood
+touchy
+tough
+toughen
+toughened
+toughening
+toughens
+tougher
+toughest
+toughie
+toughies
+toughly
+toughness
+toughs
+toughy
+toul
+toulon
+Toulouse
+toulouse
+toupee
+tour
+touraco
+touraine
+tourane
+tourbillion
+tourbillon
+tourcoing
+toured
+Tourel
+tourer
+touring
+tourism
+tourist
+tourist's
+touristic
+touristically
+tourists
+touristy
+tourize
+tourizes
+tourmaline
+tournai
+tournament
+tournament's
+tournaments
+tournedos
+tourneur
+tourney
+tourneyed
+tourneying
+tourneys
+tourniquet
+tourniquets
+tours
+touse
+tousing
+tousle
+tousled
+tousles
+tousling
+toussaint
+tout
+touted
+touter
+touting
+touts
+touzle
+tovarich
+tovarish
+tow
+towage
+toward
+towardliness
+towardly
+towards
+towbar
+towboat
+towboats
+towed
+towel
+towel's
+toweled
+toweling
+towelings
+towels
+tower
+towered
+towering
+toweringly
+towerlike
+towers
+towhead
+towheaded
+towhee
+towie
+towing
+towkay
+towline
+towmond
+town
+town's
+townee
+towner
+townhall
+townhouse
+townies
+townlet
+townley
+Townley
+towns
+townscape
+Townsend
+townsfolk
+townshend
+township
+township's
+townships
+townsman
+townsmen
+townspeople
+Townsville
+townswoman
+townwear
+towny
+towpath
+towrope
+tows
+towsley
+Towsley
+toxaemia
+toxalbumin
+toxaphene
+toxemia
+toxemic
+toxic
+toxicant
+toxicity
+toxicogenic
+toxicologic
+toxicological
+toxicologically
+toxicologist
+toxicology
+toxicosis
+toxigenic
+toxigenicity
+toxin
+toxin's
+toxins
+toxoid
+toxophilite
+toxophilites
+toxophily
+toxoplasma
+toxoplasmic
+toxoplasmosis
+toy
+toyama
+toyed
+toyer
+toying
+toylike
+toynbee
+Toynbee
+toyon
+Toyota
+toys
+TP
+trabeate
+trabeated
+trabeation
+trabecula
+trabecular
+trabeculate
+trabzon
+tracasserie
+trace
+traceability
+traceable
+traceableness
+traceably
+traceback
+traceback's
+tracebacks
+traced
+traceless
+tracelessly
+tracepoint
+tracepoint's
+tracepoints
+tracer
+traceried
+tracers
+tracery
+traces
+trachea
+tracheae
+tracheal
+tracheary
+tracheate
+tracheated
+tracheid
+tracheidal
+tracheitis
+tracheobronchial
+tracheolar
+tracheole
+tracheophyte
+tracheostomy
+tracheotomy
+trachoma
+trachomatous
+trachyte
+trachytic
+tracing
+tracings
+track
+trackage
+tracked
+tracker
+trackers
+tracking
+tracklayer
+tracklaying
+trackless
+trackman
+tracks
+trackside
+tracksuit
+trackwalker
+tract
+tract's
+tractability
+tractable
+tractableness
+tractably
+Tractarianism
+Tractarians
+tractarians
+tractate
+tractile
+traction
+tractional
+tractive
+tractor
+tractor's
+tractorization
+tractorization's
+tractorizations
+tractorize
+tractorizes
+tractors
+tracts
+Tracy
+trad
+tradable
+trade
+tradeability
+tradeable
+traded
+trademark
+trademark's
+trademarks
+tradeoff
+tradeoffs
+trader
+traders
+trades
+tradescantia
+tradesman
+tradesmen
+tradespeople
+tradevman
+trading
+tradition
+tradition's
+traditional
+traditionalism
+traditionalistic
+traditionalists
+traditionalize
+traditionalized
+traditionalizes
+traditionally
+traditionary
+traditionize
+traditionizes
+traditionless
+traditions
+traditor
+tradtionalist
+traduce
+traduced
+traducement
+traducer
+traducianism
+traducing
+trafalgar
+traffic
+traffic's
+trafficable
+trafficked
+trafficker
+trafficker's
+traffickers
+trafficking
+traffics
+tragacanth
+tragedian
+tragedians
+tragedienne
+tragedies
+tragedy
+tragedy's
+tragi
+tragic
+tragical
+tragically
+tragicize
+tragicizes
+tragicomedy
+tragicomic
+tragicomical
+tragopan
+tragus
+traherne
+trail
+trailblaze
+trailblazer
+trailblazer's
+trailblazers
+trailblazing
+trailbreaker
+trailed
+trailer
+trailerable
+trailerist
+trailerite
+trailers
+trailership
+trailhead
+trailhead's
+trailheads
+trailing
+trailings
+trailless
+trails
+trailside
+train
+trainability
+trainable
+trainband
+trainbearer
+trained
+trainee
+trainee's
+trainees
+traineeship
+traineeships
+trainer
+trainers
+trainferry
+trainful
+training
+trainload
+trainload's
+trainloads
+trainman
+trainman's
+trainmen
+trains
+trainsick
+traipse
+traipsing
+trait
+trait's
+traitor
+traitor's
+traitoress
+traitorize
+traitorizes
+traitorous
+traitorously
+traitors
+traitress
+traits
+trajan
+traject
+trajection
+trajectories
+trajectory
+trajectory's
+tral
+tralee
+tram
+tramcar
+tramline
+trammel
+trammeled
+trammeler
+trammelers
+trammeling
+trammels
+trammie
+tramming
+tramontane
+tramp
+tramped
+tramper
+tramping
+trample
+trampled
+trampler
+tramples
+trampling
+trampoline
+trampoliner
+trampolining
+trampolinist
+tramps
+tramroad
+tramway
+trance
+trance's
+trancelike
+trances
+trancing
+tranformed
+trangam
+tranmission
+tranmitted
+trannie
+tranquil
+tranquility
+tranquilization
+tranquilization's
+tranquilizations
+tranquilize
+tranquilized
+tranquilizer
+tranquilizer's
+tranquilizers
+tranquilizes
+tranquilizing
+tranquilizing's
+tranquilizingly
+tranquilizings
+tranquillity
+tranquillization
+tranquillize
+tranquillized
+tranquillizer
+tranquillizers
+tranquillizes
+tranquillizing
+tranquilly
+tranquilness
+transact
+transacted
+transacting
+transactinide
+transaction
+transaction's
+transactional
+transactions
+transactor
+transacts
+transalpine
+transaminase
+transamination
+transatlantic
+transaxle
+transcalent
+Transcaucasia
+transceiver
+transceiver's
+transceivers
+transcend
+transcended
+transcendence
+transcendency
+transcendent
+transcendental
+transcendentalism
+transcendentalist
+transcendentalists
+transcendentalize
+transcendentalizes
+transcendentally
+transcendently
+transcending
+transcends
+transconductance
+transcontinental
+transcribe
+transcribed
+transcriber
+transcribers
+transcribes
+transcribing
+transcript
+transcript's
+transcription
+transcription's
+transcriptional
+transcriptionally
+transcriptions
+transcripts
+transcultural
+transculturation
+transcurrent
+transcutaneous
+transduced
+transducer
+transducers
+transducing
+transduction
+transductional
+transect
+transected
+transecting
+transection
+transects
+transept
+transeptal
+transepts
+transfer
+transfer's
+transferability
+transferable
+transferal
+transferal's
+transferals
+transferase
+transfered
+transferee
+transference
+transferential
+transferor
+transferors
+transferral
+transferral's
+transferrals
+transferred
+transferrer
+transferrer's
+transferrers
+transferring
+transfers
+transfiguration
+transfigure
+transfinite
+transfix
+transfixed
+transfixes
+transfixing
+transfixion
+transform
+transformable
+transformant
+transformants
+transformation
+transformation's
+transformational
+transformationalist
+transformations
+transformative
+transformed
+transformer
+transformers
+transforming
+transformism
+transforms
+transfusable
+transfuse
+transfused
+transfusible
+transfusing
+transfusion
+transfusional
+transfusions
+transglottal
+transgranular
+transgress
+transgressed
+transgresses
+transgressing
+transgression
+transgression's
+transgressions
+transgressive
+transgressor
+transgressors
+tranship
+transhumance
+transhumant
+transience
+transiency
+transient
+transiently
+transients
+transilient
+transilluminate
+transillumination
+transilluminator
+transistor
+transistor's
+transistorization
+transistorize
+transistorized
+transistorizes
+transistorizing
+transistors
+transit
+Transite
+Transite's
+transitio
+transition
+transitional
+transitionally
+transitioned
+transitions
+transitive
+transitively
+transitiveness
+transitivity
+transitorily
+transitoriness
+transitory
+transkei
+translatability
+translatable
+translate
+translated
+translates
+translating
+translation
+translational
+translations
+translative
+translator
+translator's
+translators
+translatory
+transliterate
+transliteration
+transliterator
+translocate
+translocation
+translucence
+translucency
+translucent
+translucently
+translunar
+transmarine
+transmembrane
+transmigrant
+transmigrate
+transmigration
+transmigrator
+transmigratory
+transmissibility
+transmissible
+transmission
+transmission's
+transmissions
+transmissive
+transmissivity
+transmissometer
+transmissometer's
+transmissometers
+transmit
+transmits
+transmittable
+transmittal
+transmittance
+transmittancy
+transmitted
+transmitter
+transmitter's
+transmitters
+transmitting
+transmogrification
+transmogrify
+transmontane
+transmountain
+transmundane
+transmutable
+transmutation
+transmutative
+transmute
+transmuted
+transmutes
+transmuting
+transnational
+transnatural
+transoceanic
+transom
+transoms
+transonic
+transpacific
+transpadane
+transparence
+transparencies
+transparency
+transparency's
+transparent
+transparentize
+transparentizes
+transparently
+transparentness
+transpassive
+transpersonal
+transpicuous
+transpierce
+transpiration
+transpirations
+transpire
+transpired
+transpires
+transpiring
+transplacental
+transplacentally
+transplant
+transplantability
+transplantable
+transplantation
+transplanted
+transplanter
+transplanting
+transplants
+transpolar
+transpond
+transponder
+transponders
+transpontine
+transport
+transportability
+transportable
+transportaion
+transportation
+transportational
+transportations
+transported
+transporter
+transporters
+transporting
+transports
+transposable
+transpose
+transposed
+transposes
+transposing
+transposition
+transpositional
+transput
+transputer
+Transputer
+transputers
+transsexual
+transsexualism
+transshape
+transship
+transshipment
+transshipped
+transshipping
+transships
+transthoracic
+transthoracically
+transubstantial
+transubstantiate
+transubstantiation
+transudate
+transudation
+transude
+transuded
+transuding
+transuranic
+transuranium
+Transvaal
+Transvaal's
+transvaluate
+transvaluation
+transvalue
+transversal
+transversally
+transverse
+transversely
+transverses
+transvestism
+transvestite
+transvestitism
+transylvania
+Transylvania
+Transylvania's
+Transylvanian
+tranverse
+trap
+trap's
+trapan
+trapani
+trapdoor
+trapdoors
+trapes
+trapeze
+trapeziform
+trapezist
+trapezium
+trapezius
+trapezohedron
+trapezoid
+trapezoid's
+trapezoidal
+trapezoids
+trapnest
+trappean
+trapped
+trapper
+trapper's
+trappers
+trapping
+trappings
+Trappist
+traprock
+traps
+trapshooter
+trapshooting
+trapunto
+trash
+trashed
+trasher
+trashes
+trashier
+trashiness
+trashing
+trashman
+trashy
+trasimene
+trass
+trattoria
+trauma
+traumas
+traumata
+traumatic
+traumatically
+traumatism
+traumatization
+traumatize
+traumatized
+traumatizes
+traumatizing
+travail
+travails
+travancore
+trave
+travel
+traveled
+traveler
+traveler's
+travelers
+traveling
+travelings
+travelog
+travelog's
+travelogs
+travels
+traversable
+traversal
+traversal's
+traversals
+traverse
+traversed
+traverser
+traverses
+traversing
+travertine
+travesties
+travesty
+travesty's
+Travis
+travois
+travoises
+trawl
+trawler
+trawlerman
+tray
+tray's
+trayal
+trayful
+traymobile
+trays
+treacheries
+treacherous
+treacherously
+treacherousness
+treachery
+treachery's
+treacle
+treacly
+tread
+treaded
+treader
+treading
+treadle
+treadled
+treadless
+treadling
+treadmill
+treads
+treadwell
+Treadwell
+treason
+treasonable
+treasonably
+treasonous
+treasurable
+treasure
+treasured
+treasurer
+treasurership
+treasures
+treasuries
+treasuring
+treasury
+treasury's
+treat
+treatability
+treatable
+treated
+treater
+treaters
+treaties
+treating
+treatise
+treatise's
+treatises
+treatment
+treatment's
+treatments
+treats
+treaty
+treaty's
+trebizond
+treble
+trebled
+trebles
+trebling
+Treblinka
+trebly
+trebuchet
+trebucket
+trecento
+tred
+tredecillion
+tree
+tree's
+treece
+treed
+treehopper
+treeing
+treeless
+treelike
+treen
+treenail
+treename
+treenames
+treenware
+trees
+treetop
+treetop's
+treetops
+tref
+trefoil
+trehala
+trehalase
+trehalose
+treillage
+treitschke
+trek
+trek's
+trekked
+trekker
+trekking
+treks
+trellis
+trellised
+trellises
+trelliswork
+trematode
+tremble
+trembled
+trembler
+trembles
+trembling
+trembly
+tremendous
+tremendously
+tremendousness
+tremolant
+tremolite
+tremolitic
+tremolo
+tremor
+tremor's
+tremors
+tremulant
+tremulous
+tremulously
+tremulousness
+trenail
+trench
+trenchancy
+trenchant
+trenchantly
+trenched
+trencher
+trencherman
+trenchermen
+trenchers
+trenches
+trend
+trendier
+trendily
+trendiness
+trending
+trends
+trendy
+trengganu
+Trent
+trente
+trento
+Trenton
+trepan
+trepanation
+trepang
+trepanned
+trepanning
+trepans
+trephination
+trephine
+trephined
+trephining
+trepid
+trepidant
+trepidation
+treponema
+treponemal
+treponematosis
+treponematous
+treponeme
+trespass
+trespassed
+trespasser
+trespassers
+trespasses
+tress
+tress's
+tressed
+tressel
+tresses
+tressure
+trestle
+trestles
+trestletree
+trestlework
+tret
+trevally
+Trevelyan
+Trevino
+Treviso
+trevithick
+Trevor
+trews
+trey
+treys
+tri
+triable
+triableness
+triac
+triacetate
+triacid
+triad
+triadic
+triadically
+triage
+trial
+trial's
+trialization
+trialogue
+trials
+triamcinolone
+triangle
+triangle's
+triangles
+triangular
+triangularity
+triangularization
+triangularizations
+triangularize
+triangularized
+triangularizes
+triangularizing
+triangularly
+triangulate
+triangulated
+triangulately
+triangulation
+Triangulum
+Trianon
+triarchy
+Triassic
+triatomic
+triaxial
+triaxiality
+triazine
+triazines
+triazole
+trib
+tribade
+tribal
+tribalism
+tribally
+tribasic
+tribe
+tribe's
+tribes
+tribesman
+tribesmen
+triblet
+triboelectric
+triboelectricity
+tribological
+tribologist
+tribology
+triboluminescence
+triboluminescent
+tribophysics
+tribrach
+tribrachic
+tribromide
+tribromoethanol
+tribulate
+tribulation
+tribulation's
+tribulations
+tribunal
+tribunal's
+tribunals
+tribunate
+tribune
+tribune's
+tribunes
+tribuneship
+tributary
+tribute
+tribute's
+tributes
+tributing
+tricarbonyl
+tricarboxylic
+tricarpellary
+tricarpellate
+trice
+tricentenary
+triceps
+tricepses
+triceratops
+trichiasis
+trichina
+trichinal
+Trichinella
+Trichinella's
+trichinize
+trichinopoly
+trichinosis
+trichinous
+trichite
+trichlorfon
+trichloride
+trichloro
+trichloroacetic
+trichloroethane
+trichloroethanol
+trichloroethylene
+trichocyst
+trichocystic
+trichogyne
+trichoid
+trichology
+trichome
+trichomic
+trichomonacidal
+trichomonacide
+trichomonad
+trichomonadal
+trichomonal
+trichomoniasis
+trichopteran
+trichosis
+trichotomous
+trichotomously
+trichotomy
+trichroism
+trichromat
+trichromatic
+trichromatism
+trichrome
+trichuriasis
+tricing
+trick
+tricked
+tricker
+trickeries
+trickery
+trickier
+trickiest
+trickily
+trickiness
+tricking
+trickish
+trickishly
+trickishness
+trickle
+trickled
+trickles
+trickling
+tricks
+tricksier
+tricksiness
+trickster
+tricksy
+tricktrack
+tricky
+triclad
+triclinic
+triclinium
+tricolette
+tricolor
+tricolor's
+tricolored
+tricolors
+tricorn
+tricorne
+tricornered
+tricostate
+tricot
+tricotine
+tricotyledonous
+tricritical
+tricriticality
+tricrotic
+trictrac
+tricuspid
+tricycle
+tricycles
+tricyclic
+tricyclohexyl
+tridactyl
+trident
+tridentate
+Tridentine
+tridents
+tridentum
+tridiagonal
+tridimensional
+tridimensionality
+triduum
+triecious
+tried
+triene
+triennial
+triennially
+triennium
+trier
+trierarch
+trierarchy
+triers
+tries
+trieste
+triethyl
+trifacial
+trifid
+trifle
+trifled
+trifler
+trifles
+trifling
+trifluoride
+trifluralin
+trifocal
+trifold
+trifoliate
+trifoliolate
+trifolium
+triforium
+triform
+trifurcate
+trifurcation
+trig
+trigeminal
+trigger
+triggered
+triggerfish
+triggering
+triggerman
+triggers
+trigging
+triglyceride
+triglycerides
+triglyph
+triglyphic
+triglyphical
+trigon
+trigonal
+trigonally
+trigonometric
+trigonometrical
+trigonometrically
+trigonometry
+trigonous
+trigram
+trigrams
+trigraph
+trigraphic
+trihedral
+trihedron
+trihybrid
+trihydrate
+trihydric
+trihydroxy
+triiodomethane
+triiodothyronine
+trijet
+trike
+trilateral
+trilaterality
+trilaterally
+trilateration
+trilbies
+trilby
+trilemma
+trilinear
+trilingual
+trilingually
+triliteral
+triliteralism
+trilithon
+trill
+trilled
+triller
+trillion
+trillionize
+trillionizes
+trillions
+trillionth
+trillium
+trilobate
+trilobation
+trilobed
+trilobite
+trilocular
+triloculate
+trilogy
+trim
+trimaran
+Trimble
+trimble
+trimer
+trimeric
+trimerization
+trimerization's
+trimerizations
+trimerous
+trimester
+trimestral
+trimestrial
+trimeter
+trimethadione
+trimetric
+trimetrogon
+trimly
+trimmed
+trimmer
+trimmest
+trimming
+trimmings
+trimness
+trimolecular
+trimonthly
+trimorph
+trimorphic
+trimorphism
+trimorphous
+trimotor
+trims
+trimurti
+trinacria
+trinal
+trinary
+trincomalee
+trindle
+trindled
+trindling
+trine
+Trinidad
+Trinil
+trinitarian
+trinitarians
+trinitrobenzene
+trinitrocresol
+trinitroglycerin
+trinitrophenol
+trinitrotoluene
+trinity
+trinket
+trinket's
+trinketed
+trinketer
+trinketry
+trinkets
+trinkums
+trinocular
+trinomial
+trinucleotide
+trio
+triode
+triodes
+trioecious
+triol
+triolein
+triolet
+trios
+triose
+trioxide
+trip
+trip's
+tripack
+tripalmitin
+tripartite
+tripartition
+tripe
+tripersonal
+triphammer
+triphammer's
+triphammers
+triphenyl
+triphenylarsine
+triphenylmethane
+triphenylphosphine
+triphenylstibine
+triphibian
+triphibious
+triphosphate
+triphosphopyridine
+triphthong
+triphthongal
+tripinnate
+tripinnately
+Tripitaka
+triplane
+triple
+tripled
+triples
+triplet
+triplet's
+tripletail
+triplets
+Triplett
+Triplett's
+triplex
+triplicate
+triplication
+triplicity
+tripling
+triplite
+triploblastic
+triploid
+triploidy
+triply
+tripod
+tripodal
+tripods
+tripody
+tripoli
+tripolitania
+tripolyphosphate
+tripos
+tripped
+tripper
+trippet
+tripping
+trippingly
+trips
+triptane
+tripterous
+triptolemus
+triptych
+triptyque
+tripura
+tripwire
+triquetrous
+triradiate
+trireme
+tris
+trisaccharide
+trisect
+trisection
+trisector
+triserial
+triskaidekaphobia
+triskele
+triskelion
+trismegistus
+trismus
+trisoctahedron
+trisodium
+trisome
+trisomic
+trisomy
+Tristan
+tristate
+triste
+tristearin
+tristeza
+tristful
+tristfully
+tristfulness
+tristich
+tristichous
+tristimulus
+trisubstituted
+trisulfide
+trisulphide
+trisyllabic
+trisyllabicall
+trisyllable
+trit
+tritanopia
+trite
+tritely
+triteness
+triter
+tritest
+tritheism
+tritheist
+tritheistic
+tritheistical
+trithing
+tritiate
+tritiated
+triticale
+Triticum
+tritium
+tritium's
+tritoma
+triton
+tritone
+triturable
+triturate
+trituration
+triturator
+triumph
+triumphal
+triumphant
+triumphantly
+triumphed
+triumphing
+triumphs
+triumvir
+triumviral
+triumvirate
+triune
+triunitarian
+trivalent
+trivalve
+trivandrum
+trivet
+trivia
+trivial
+trivialities
+triviality
+trivialization
+trivialize
+trivialized
+trivializes
+trivializing
+trivially
+trivium
+triweekly
+troas
+troat
+trobriand
+Trobriand
+trocar
+trochaic
+trochal
+trochanter
+trochanteral
+trochanteric
+trochar
+troche
+trochee
+trochelminth
+trochilus
+trochlea
+trochlear
+trochoid
+trochoidal
+trochophore
+trod
+trodden
+trode
+troff
+troff's
+troffer
+trog
+troglodyte
+troglodytic
+trogon
+trograd
+troika
+troilism
+troilite
+troilus
+trois
+Trojan
+troll
+troll's
+trolley
+trolley's
+trolleybus
+trolleyed
+trolleys
+trollied
+trollies
+trollop
+trollope
+trolls
+trolly
+tromba
+trombidiasis
+trombone
+trombone's
+trombones
+trombonist
+Tromelin
+trommel
+tromp
+trona
+Trondheim
+trone
+troop
+trooped
+trooper
+troopers
+trooping
+troops
+troopship
+troopships
+troostite
+trop
+tropaeolin
+tropaeolum
+trope
+Tropez
+tropez
+trophallaxis
+trophic
+trophically
+trophied
+trophies
+trophoblast
+trophoblastic
+trophoplasm
+trophozoite
+trophy
+trophy's
+trophying
+tropic
+tropic's
+tropical
+tropicalization
+tropicalization's
+tropicalizations
+tropicalize
+tropicalized
+tropicalizes
+tropicalizing
+tropically
+tropicbird
+tropics
+tropidoclonion
+tropine
+tropism
+tropisms
+tropistic
+tropocollagen
+tropologic
+tropological
+tropologically
+tropology
+tropomyosin
+tropopause
+tropophilous
+tropophyte
+troposphere
+tropospheric
+tropotaxis
+troppo
+tropylium
+trossachs
+trot
+troth
+trothplight
+trotline
+trots
+Trotsky
+trotsky
+trotskyism
+trotskyist
+trotted
+trotter
+trotting
+trotyl
+troubador
+troubadour
+troubadour's
+troubadours
+trouble
+troubled
+troublemaker
+troublemaker's
+troublemakers
+troubler
+troubles
+troubleshoot
+troubleshooted
+troubleshooter
+troubleshooters
+troubleshooting
+troubleshoots
+troubleshot
+troublesome
+troublesomely
+troublesomeness
+troubling
+troublous
+troublously
+troublousness
+trough
+troughs
+trounce
+trounced
+trounces
+trouncing
+troupe
+trouper
+troupes
+troupial
+trouping
+trouse
+trouser
+trousered
+trousers
+trousseau
+trousseaus
+trousseaux
+trout
+troutier
+Troutman
+trouts
+trouty
+trove
+trover
+trow
+Trowbridge
+trowel
+trowel's
+troweled
+troweler
+trowelers
+troweling
+trowels
+Troy
+troy
+Troyanos
+troyes
+truancy
+truant
+truant's
+truantry
+truants
+truce
+trucial
+trucing
+truck
+truckage
+trucked
+Truckee
+truckee
+trucker
+truckers
+truckie
+trucking
+truckle
+truckled
+truckler
+truckline
+truckling
+truckload
+truckload's
+truckloads
+truckman
+truckmaster
+trucks
+truculence
+truculency
+truculent
+truculently
+Trudeau
+Trudeau's
+trudge
+trudged
+trudgen
+trudger
+trudges
+trudging
+Trudy
+true
+trueborn
+trued
+truehearted
+trueheartedness
+trueing
+truelove
+trueness
+truepenny
+truer
+trues
+truest
+Truffaut
+truffle
+truffle's
+truffled
+truffles
+trug
+trugs
+truing
+truism
+truism's
+truisms
+truistic
+Trujillo
+trujillo
+Truk
+truk
+trull
+truly
+Truman
+Trumbull
+trumeau
+trump
+trumped
+trumpery
+trumpet
+trumpeted
+trumpeter
+trumpeting
+trumpetlike
+trumpets
+trumpetweed
+trumps
+truncate
+truncated
+truncates
+truncating
+truncation
+truncation's
+truncations
+truncheon
+truncheons
+trundle
+trundled
+trundler
+trundles
+trundling
+trunk
+trunk's
+trunked
+trunkfish
+trunkful
+trunks
+trunnel
+trunnion
+trunnions
+Truro
+truss
+trusser
+trusses
+trussing
+trust
+trustability
+trustable
+trustbuster
+trusted
+trustee
+trustee's
+trusteed
+trusteeing
+trustees
+trusteeship
+truster
+trustful
+trustfully
+trustfulness
+trustier
+trusties
+trustiness
+trusting
+trustingly
+trustless
+trusts
+trustworthily
+trustworthiness
+trustworthy
+trusty
+truth
+truthful
+truthfully
+truthfulness
+truths
+TRW
+try
+trying
+tryingly
+tryma
+tryout
+trypanosome
+trypanosomiasis
+tryparsamide
+trypsin
+trypsinize
+trypsinizes
+trypsinogen
+tryptamine
+tryptic
+tryptophan
+tryptophane
+tryptophanyl
+trysail
+tryst
+trytophan
+tryworks
+tsade
+tsana
+tsar
+tsarevich
+tsarevitch
+tsarevna
+tsarina
+tsarism
+tsarist
+tsaritsyn
+tselinograd
+tset
+tsetse
+tsetses
+tshiluba
+tshombe
+tsinan
+tsinghai
+tsingtao
+tsingyuan
+tso
+tsonga
+tsotsi
+tsugaru
+tsukahara
+tsunami
+tsunamic
+Tsunematsu
+tsunematsu
+tsushima
+tsutsugamushi
+tswana
+TTL
+TTY
+tty
+tty's
+ttys
+Tuamotu
+Tuareg
+tuart
+tuatara
+tub
+tub's
+tuba
+tubal
+tubate
+tubbable
+tubbed
+tubber
+tubbier
+tubbing
+tubby
+tube
+tubed
+tubeless
+tubelike
+tuber
+tubercle
+tubercled
+tubercular
+tubercularly
+tuberculate
+tuberculated
+tuberculation
+tuberculin
+tuberculinization
+tuberculinization's
+tuberculinizations
+tuberculinize
+tuberculinizes
+tuberculoid
+tuberculosis
+tuberculous
+tuberculously
+tuberization
+tuberization's
+tuberizations
+tuberize
+tuberizes
+tuberose
+tuberosity
+tuberous
+tubers
+tubes
+tubful
+tubifex
+tubifexes
+tubificid
+tubing
+tubman
+tubocurarine
+tubs
+tubuai
+tubular
+tubularity
+tubularly
+tubule
+tubules
+tubuliflorous
+tubulization
+tubulization's
+tubulizations
+tubulous
+Tucana
+tuchun
+tuck
+tuckahoe
+tucked
+tucker
+Tucker
+tuckered
+tuckering
+tucket
+tucking
+tucks
+Tuckwell
+tucotuco
+Tucson
+Tudor
+Tue
+tuebor
+tuel
+Tuesday
+Tuesday's
+Tuesdays
+tufa
+tufaceous
+tuff
+tuffaceous
+tuffet
+tuft
+tuft's
+tufted
+tufter
+tufts
+tufty
+tug
+tugboat
+tugela
+tugged
+tugger
+tugging
+tugrik
+tugs
+tui
+tuileries
+tuille
+tuition
+tuitional
+tuitions
+tula
+Tulane
+tularaemia
+tularemia
+tularemic
+tulation
+tulatory
+tule
+tulip
+tulip's
+tulips
+tulipwood
+tull
+tulle
+tullibee
+tully
+Tulsa
+tum
+tumble
+tumblebug
+tumbled
+tumbledown
+tumblehome
+tumbler
+tumblerful
+tumblers
+tumbles
+tumbleweed
+tumbling
+tumbrel
+tumbrels
+tumbril
+tumefaciens
+tumefacient
+tumefaction
+tumefactive
+tumefy
+tumescence
+tumescent
+tumid
+tumidity
+tumidly
+tummies
+tummy
+tummy's
+tumor
+tumor's
+tumoral
+tumored
+tumorigenic
+tumorigenicity
+tumorlike
+tumorlike's
+tumorlikes
+tumorous
+tumors
+tump
+tumpline
+tumular
+tumulose
+tumult
+tumult's
+tumults
+tumultuary
+tumultuous
+tumultuously
+tumultuousness
+tumulus
+tun
+tuna
+tunability
+tunable
+tunableness
+tunably
+tunas
+Tunbridge
+tundish
+tundra
+tune
+tuneable
+tuned
+tuneful
+tunefully
+tunefulness
+tuneless
+tunelessly
+tuner
+tuners
+tunes
+tunesmith
+tung
+tungstate
+tungsten
+tungstic
+tungstite
+tungstous
+tungting
+Tungus
+Tungusic
+tunguska
+tunic
+tunic's
+tunica
+tunicae
+tunicate
+tunicated
+tunicle
+tunics
+tuning
+tuning's
+tunings
+Tunis
+Tunisia
+Tunisian
+tunnage
+tunnel
+tunneled
+tunneler
+tunnelers
+tunneling
+tunnelings
+tunnellike
+tunnels
+tunny
+tup
+tupamaro
+tupelo
+Tupi
+tuple
+tuple's
+tuples
+tuppence
+tuppenny
+tupping
+tupungato
+tuque
+turaco
+tural
+Turanian
+turban
+turban's
+turbaned
+turbanned
+turbans
+turbary
+turbellarian
+turbid
+turbidimeter
+turbidimeter's
+turbidimeters
+turbidimetric
+turbidimetrically
+turbidimetry
+turbidite
+turbidity
+turbidly
+turbidness
+turbinal
+turbinate
+turbinated
+turbinates
+turbine
+turbines
+turbit
+turbjet
+turbo
+turbocar
+turbocharge
+turbocharger
+turboelectric
+turbofan
+turbogenerator
+turbojet
+turboprop
+turbos
+turboshaft
+turbosupercharged
+turbosupercharger
+turbot
+turbots
+turbulence
+turbulence's
+turbulency
+turbulent
+turbulently
+Turco
+turd
+turdine
+ture
+tured
+tureen
+turenne
+turf
+turfman
+turfski
+turfskiing
+turfy
+turgenev
+turgent
+turgescence
+turgescent
+turgid
+turgidity
+turgidly
+turgidness
+turgite
+turgor
+turgot
+Turin
+Turing
+Turing's
+turion
+turishcheva
+turk
+turkestan
+turkey
+Turkey
+turkey's
+turkeys
+Turki
+Turkic
+Turkish
+Turkism
+Turkize
+Turkizes
+Turkmen
+Turkoman
+turks
+Turks
+turku
+turmeric
+turmoil
+turmoil's
+turmoils
+turn
+turnable
+turnabout
+turnaround
+turnarounds
+turnbuckle
+turncoat
+turncock
+turndown
+turned
+turner
+turners
+turnery
+turning
+turnings
+turnip
+turnip's
+turnips
+turnkey
+turnkeys
+turnoff
+turnout
+turnouts
+turnover
+turnovers
+turnpike
+turnpikes
+turnround
+turns
+turnsole
+turnspit
+turnstile
+turnstone
+turntable
+turnup
+turnverein
+turpentine
+turpentinic
+turpentinous
+turpeth
+turpin
+turpitude
+turps
+turquois
+turquoise
+turret
+turret's
+turreted
+turrets
+turtle
+turtle's
+turtleback
+turtlebacks
+turtledove
+turtlehead
+turtleneck
+turtles
+turtling
+turves
+turvy
+Tuscaloosa
+Tuscan
+Tuscanize
+Tuscanizes
+Tuscany
+tusche
+tusculum
+tush
+tusk
+Tuskegee
+tusker
+tuskers
+tusklike
+tusks
+tussah
+tussaud
+tussis
+tussive
+tussle
+tussled
+tussles
+tussling
+tussock
+tussocks
+tussocky
+tussore
+tut
+Tutankhamen
+tutankhamen
+tutee
+tutees
+tutelage
+tutelar
+tutelary
+Tutenkhamon
+tutiorism
+tutor
+tutorage
+tutored
+tutoress
+tutorial
+tutorial's
+tutorials
+tutoring
+tutorization
+tutorization's
+tutorizations
+tutorize
+tutorizes
+tutors
+tutorship
+tutoyer
+tutsan
+tutsi
+tutti
+Tuttle
+tutty
+tutu
+tutuila
+tuva
+Tuvalu
+tux
+tuxedo
+tuxedo's
+tuxedoed
+tuxedos
+tuxtla
+tuyere
+TV
+TV's
+TVA
+tver
+TWA
+twaddle
+twaddled
+twaddler
+twaddles
+twaddling
+twae
+twain
+twang
+twanging
+twangy
+twas
+twat
+twattle
+twayblade
+tweak
+tweaked
+tweaker
+tweaking
+tweaks
+twee
+tweed
+tweeddale
+tweedier
+tweediness
+tweedledum
+tweedsmuir
+tweedy
+tween
+tweeny
+tweet
+tweeter
+tweeze
+tweezed
+tweezer
+tweezers
+tweezing
+twelfth
+twelfths
+Twelfthtide
+twelve
+twelvefold
+twelvemo
+twelvemonth
+twelves
+twenties
+twentieth
+twenty
+twentyfold
+twerp
+Twi
+twice
+Twickenham
+twiddle
+twiddled
+twiddles
+twiddling
+twig
+twig's
+twigged
+twigging
+twiggy
+twigs
+twilight
+twilight's
+twilights
+twilit
+twill
+twilled
+twilling
+twin
+twin's
+twinberry
+twinborn
+twine
+twined
+twiner
+twines
+twinflower
+twinge
+twingeing
+twinges
+twinging
+twining
+twinkle
+twinkled
+twinkler
+twinkles
+twinkling
+twinkly
+twinning
+twins
+twinship
+twiny
+twirl
+twirled
+twirler
+twirling
+twirlingly
+twirls
+twirly
+twirp
+twist
+twisted
+twister
+twisters
+twisting
+twists
+twisty
+twit
+twitch
+twitched
+twitcher
+twitchily
+twitching
+twitchy
+twite
+twitted
+twitter
+twittered
+twitterer
+twittering
+twittery
+twitting
+twixt
+two
+two's
+twofer
+twofold
+twohandedness
+Twombly
+Twombly's
+twopence
+twopences
+twopenny
+twos
+twosome
+TWP
+TWX
+TX
+Tyburn
+Tyburn's
+Tyche
+tychism
+tycho
+tycoon
+tye
+tying
+tyke
+tyke's
+tykes
+Tyler
+Tylerize
+Tylerizes
+tylopod
+tylosis
+tymbal
+tympan
+tympani
+tympani's
+tympanic
+tympanis
+tympanist
+tympanites
+tympanitic
+tympanitis
+tympanum
+tympanum's
+tympany
+tyndall
+tyndareus
+tynemouth
+tyneside
+Tynwald
+typal
+type
+type's
+typeable
+typeahead
+typebar
+typecase
+typecast
+typed
+typedef
+typedefs
+typeface
+typefounder
+typefounding
+typefoundry
+typeout
+typer
+types
+typescript
+typeset
+typesets
+typesetter
+typesetters
+typesetting
+typewrite
+typewriter
+typewriter's
+typewriters
+typewriting
+typewritten
+typey
+typhlitis
+typhlology
+typhlosole
+typhoeus
+typhogenic
+typhoid
+typhoidin
+Typhon
+typhoon
+typhus
+typic
+typical
+typicality
+typically
+typicalness
+typier
+typification
+typified
+typifies
+typify
+typifying
+typing
+typist
+typist's
+typists
+typo
+typograph
+typographer
+typographic
+typographical
+typographically
+typography
+typological
+typologically
+typologies
+typologist
+typology
+typos
+typothetae
+typy
+tyr
+tyramine
+tyrannic
+tyrannical
+tyrannically
+tyrannicalness
+tyrannicide
+tyrannize
+tyrannized
+tyrannizer
+tyrannizers
+tyrannizes
+tyrannizing
+tyrannizing's
+tyrannizingly
+tyrannizings
+tyrannosaur
+Tyrannosaurus
+tyrannosaurus
+Tyrannosaurus's
+tyrannous
+tyrannously
+tyranny
+tyrant
+tyrant's
+tyrants
+Tyrian
+tyro
+tyrocidin
+tyrocidine
+Tyrol
+Tyrolienne
+Tyrone
+tyros
+tyrosinase
+tyrosine
+tyrothricin
+Tyrr
+Tyrrhenian
+Tyson
+tyumen
+tzaddik
+tzaddikim
+tzar
+tzekung
+Tzeltal
+tzetze
+tzigane
+tzimmes
+tzitzis
+UART
+Ubangi
+ubbelohde
+ubiety
+Ubiquitarian
+ubiquitous
+ubiquitously
+ubiquitousness
+ubiquity
+ucayali
+ucca
+uccello
+UCLA
+udaipur
+udal
+Udall
+udall
+udder
+Ude
+udine
+udmurt
+udo
+udometer
+uele
+ufa
+ufd
+ufo
+ufology
+ugali
+Uganda
+ugaritic
+ugh
+ugli
+uglier
+ugliest
+uglification
+uglify
+uglily
+ugliness
+ugly
+Ugrian
+Ugric
+UHF
+uhlan
+Uhland
+Uhuru
+Uigur
+Uinta
+uintathere
+Uitlander
+Ujamaa
+Ujiji
+Ujjain
+Ujung
+UK
+Ukase
+Ukiyoe
+Ukraine
+Ukraine's
+Ukrainian
+Ukrainians
+ukulele
+ulama
+Ulan
+Ulbricht
+ulcer
+ulcer's
+ulcerate
+ulcerated
+ulcerates
+ulceration
+ulcerations
+ulcerative
+ulcered
+ulcering
+ulcerogenic
+ulcerous
+ulcers
+uldered
+ulema
+ulexite
+ulfilas
+ullage
+Ullman
+Ullswater
+Ulm
+ulmaceous
+ulna
+ulna's
+ulnar
+ulotrichous
+ulotrichy
+ulpian
+ulster
+Ulsterman
+ulterior
+ulteriorly
+ultima
+ultimacy
+ultimate
+ultimately
+ultimateness
+ultimatum
+ultimo
+ultimogeniture
+ultra
+ultrabasic
+ultracentralizer
+ultracentralizer's
+ultracentralizers
+ultracentrifugal
+ultracentrifugally
+ultracentrifugation
+ultracentrifuge
+ultraconservative
+ultrafashionable
+ultrafast
+ultrafiche
+ultrafilter
+ultrafiltration
+ultrahigh
+ultrahonorable
+ultrahonorable's
+ultrahonorables
+ultraism
+ultraist
+ultraistic
+ultramafic
+ultramarine
+ultramicro
+ultramicrometer
+ultramicrometers
+ultramicroscope
+ultramicroscopes
+ultramicroscopic
+ultramicrotome
+ultramicrotomes
+ultramicrotomy
+ultramodern
+ultramodernist
+ultramontane
+ultramontanism
+ultramundane
+ultranationalism
+ultranationalist
+ultrapure
+ultrapurely
+ultrared
+ultrasecret
+ultrashort
+ultrasonic
+ultrasonically
+ultrasonicate
+ultrasonicated
+ultrasonicates
+ultrasonicating
+ultrasonics
+ultrasound
+ultraspecialization
+ultraspecialization's
+ultraspecializations
+ultrastandardization
+ultrastandardization's
+ultrastandardizations
+ultrastructural
+ultrastructurally
+ultrastructure
+ultrathin
+ultraviolet
+ultravirus
+ultrawet
+Ultrix
+Ultrix's
+ululant
+ululate
+ululation
+ulva
+Ulyanovsk
+Ulysses
+umayyad
+umbel
+umbellate
+umbellifer
+umbelliferous
+umbellule
+umber
+umbered
+umbering
+umberto
+umbilical
+umbilicate
+umbilicated
+umbilication
+umbilici
+umbilicus
+umbilicuses
+umbles
+umbo
+umbonate
+umbones
+umbos
+umbra
+umbrae
+umbrage
+umbrageous
+umbrageously
+umbrageousness
+umbral
+umbrella
+umbrella's
+umbrellas
+umbria
+Umbrian
+Umbriel
+umiak
+umlaut
+ump
+umpirage
+umpire
+umpire's
+umpired
+umpires
+umpiring
+umpteen
+umpteenth
+umpy
+umrcc
+umtali
+un
+UN
+unabashed
+unabashedly
+unabated
+unabatedly
+unabbreviated
+unable
+unabridged
+unaccelerated
+unacceptability
+unacceptable
+unacceptably
+unaccessible
+unacclimatized
+unaccommodated
+unaccompanied
+unaccomplished
+unaccountability
+unaccountable
+unaccountably
+unaccounted
+unaccustomed
+unaccustomedly
+unachievable
+unachieved
+unacknowledged
+unacquainted
+unadaptable
+unadapted
+unadjustable
+unadjusted
+unadopted
+unadorned
+unadulterated
+unadulteratedly
+unadventurous
+unadvised
+unadvisedly
+unaesthetic
+unaffected
+unaffectedly
+unaffectedness
+unaffectionate
+unaffectionately
+unafraid
+unageing
+unaggregated
+unaggressive
+unagonize
+unaided
+Unalaska
+unalcoholized
+unalcoholized's
+unalcoholizeds
+unalienability
+unalienable
+unaligned
+unallocable
+unallocated
+unallocateed
+unalloyed
+unalterability
+unalterable
+unalterableness
+unalterably
+unaltered
+unamazed
+unambiguity
+unambiguous
+unambiguously
+unambitious
+unamortization
+unamortization's
+unamortizations
+unamortized
+unamuno
+unamused
+unamusing
+unanalyzable
+unanalyzed
+unanchor
+unanchored
+unaneled
+unanimalized
+unanimalized's
+unanimalizeds
+unanimity
+unanimous
+unanimously
+unannounced
+unanswerable
+unanswerably
+unanswered
+unantagonizable
+unantagonizable's
+unantagonizables
+unantagonized
+unantagonizing
+unanticipated
+unanticipatedly
+unapologetic
+unapologetically
+unapologizing
+unapostatized
+unapostatized's
+unapostatizeds
+unappealable
+unappealing
+unappealingly
+unappeasable
+unappeasably
+unappetizing
+unappetizingly
+unappreciated
+unappreciation
+unapproachability
+unapproachable
+unapproachably
+unappropriated
+unapt
+unaptly
+unaptness
+unarguable
+unarguably
+unarm
+unarmed
+unarmored
+unarticulated
+unary
+unashamed
+unashamedly
+unaskable
+unasked
+unassailability
+unassailable
+unassailableness
+unassailably
+unassembled
+unassertive
+unassign
+unassigned
+unassigns
+unassisted
+unassuageable
+unassuming
+unassumingness
+unasterisked
+unattach
+unattached
+unattainability
+unattainable
+unattended
+unattenuated
+unattractive
+unattractively
+unattractiveness
+unattributed
+unauthentic
+unauthenticated
+unauthorize
+unauthorized
+unauthorizedly
+unauthorizedness
+unauthorizes
+unavailability
+unavailable
+unavailing
+unavailingly
+unavailingness
+unaverage
+unavoidable
+unavoidably
+unaware
+unawarely
+unawareness
+unawares
+unbacked
+unbalance
+unbalanced
+unbalancedness
+unballasted
+unban
+unbandage
+unbanned
+unbanning
+unbans
+unbaptize
+unbaptized
+unbaptizes
+unbar
+unbarbered
+unbarred
+unbastardized
+unbated
+unbearable
+unbearably
+unbeatable
+unbeatably
+unbeaten
+unbeautiful
+unbeautifully
+unbecome
+unbecoming
+unbecomingly
+unbecomingness
+unbeknown
+unbeknownst
+unbelief
+unbelievable
+unbelievably
+unbeliever
+unbelieving
+unbelievingly
+unbelt
+unbelted
+unbend
+unbendable
+unbending
+unbent
+unbeseeming
+unbetrothed
+unbiased
+unbiasedness
+unbiblical
+unbid
+unbidden
+unbind
+unbirthday
+unbitted
+unblemished
+unblenched
+unblessed
+unblest
+unblinded
+unblinking
+unblinkingly
+unblock
+unblocked
+unblocking
+unblocks
+unblown
+unblushing
+unblushingly
+unbodied
+unbolt
+unbolted
+unboned
+unbonnet
+unbonneted
+unborn
+unbosom
+unbound
+unbounded
+unboundedness
+unbowed
+unbox
+unbrace
+unbraid
+unbranched
+unbreakable
+unbreathable
+unbred
+unbridle
+unbridled
+unbroke
+unbroken
+unbrutalize
+unbrutalized
+unbrutalizes
+unbrutize
+unbrutizes
+unbuckle
+unbudgeable
+unbudgeably
+unbudging
+unbudgingly
+unbuffered
+unbuild
+unbuilt
+unbundle
+unbundled
+unburden
+unburdened
+unbureaucratic
+unburied
+unburned
+unbuttered
+unbutton
+unbuttoned
+unbuttoning
+unbuttons
+uncage
+uncaged
+uncalculated
+uncalculating
+uncalculatingly
+uncalled
+uncanceled
+uncandid
+uncandidly
+uncannily
+uncanniness
+uncanny
+uncanonize
+uncanonized
+uncanonizes
+uncantonized
+uncantonized's
+uncantonizeds
+uncap
+uncapitalized
+uncared
+uncaring
+uncatchable
+uncatechized
+uncatechized's
+uncatechizedness
+uncatechizeds
+uncategorized
+uncatholicize
+uncatholicizes
+uncaught
+uncaused
+uncauterized
+uncauterized's
+uncauterizeds
+unceasing
+unceasingly
+uncelebrated
+uncelestialized
+uncelestialized's
+uncelestializeds
+uncensored
+unceremonious
+unceremoniously
+unceremoniousness
+uncertain
+uncertainly
+uncertainness
+uncertainties
+uncertainty
+uncertified
+unchain
+unchallengeable
+unchallenged
+unchancy
+unchangeability
+unchangeable
+unchangeably
+unchangealeness
+unchanged
+unchanging
+unchangingly
+unchangingness
+uncharacteristic
+uncharacteristically
+uncharacterized
+uncharge
+uncharged
+uncharitable
+uncharitableness
+uncharitably
+uncharted
+unchartered
+unchaste
+unchastely
+unchasteness
+unchastity
+uncheckable
+unchecked
+unchivalrous
+unchivalrously
+unchloridized
+unchloridized's
+unchloridizeds
+unchoke
+unchosen
+unchristian
+unchristianize
+unchristianized
+unchristianizes
+unchurch
+uncial
+uncially
+unciform
+uncil
+uncinaria
+uncinariasis
+uncinate
+uncinus
+uncircularized
+uncircularized's
+uncircularizeds
+uncircumcised
+uncircumcision
+uncivil
+uncivilizable
+uncivilizable's
+uncivilizables
+uncivilize
+uncivilized
+uncivilizedly
+uncivilizedness
+uncivilizes
+uncivilly
+unclad
+unclaimed
+unclamorous
+unclamorously
+unclamorousness
+unclamp
+unclarity
+unclasp
+unclasping
+unclassical
+unclassified
+uncle
+uncle's
+unclean
+uncleanliness
+uncleanly
+uncleanness
+unclear
+uncleared
+unclench
+unclenched
+unclericalize
+unclericalizes
+uncles
+unclimbable
+unclimbableness
+unclinch
+unclipped
+uncloak
+unclog
+unclose
+unclosed
+unclothe
+unclothed
+unclouded
+uncloudedly
+unclustered
+unclutter
+uncluttered
+unco
+uncoated
+uncock
+uncodable
+uncodeable
+uncoded
+uncoffin
+uncoffined
+uncoil
+uncoiled
+uncoiling
+uncoined
+uncolonize
+uncolonized
+uncolonizes
+uncolorable
+uncolorable's
+uncolorables
+uncolorablies
+uncolorably
+uncolored
+uncoloredly
+uncoloredness
+uncoloreds
+uncombable
+uncomfortable
+uncomfortably
+uncomforted
+uncomment
+uncommented
+uncommenting
+uncomments
+uncommercial
+uncommitted
+uncommon
+uncommonly
+uncommonness
+uncommunicable
+uncommunicative
+uncompassionate
+uncompetitive
+uncompetitiveness
+uncomplaining
+uncomplainingly
+uncompleted
+uncomplicated
+uncomplimentary
+uncomprehending
+uncomprehendingly
+uncompress
+uncompressed
+uncompresses
+uncompressing
+uncompromisable
+uncompromising
+uncompromisingly
+uncomputable
+unconceivable
+unconcern
+unconcerned
+unconcernedly
+unconcernedness
+unconditional
+unconditionally
+unconditioned
+unconfined
+unconfirmed
+unconformable
+unconformably
+unconformity
+uncongenial
+uncongeniality
+unconnected
+unconquerable
+unconquerably
+unconscionability
+unconscionable
+unconscionableness
+unconscionably
+unconscious
+unconsciously
+unconsciousness
+unconservative
+unconsidered
+unconsolidated
+unconstitutional
+unconstitutionality
+unconstitutionally
+unconstrained
+unconstraint
+uncontaminated
+uncontested
+uncontrollability
+uncontrollable
+uncontrollably
+uncontrolled
+uncontroversial
+unconventional
+unconventionality
+unconventionalize
+unconventionalizes
+unconventionally
+unconvertible
+unconvinced
+unconvincing
+unconvincingly
+unconvincingness
+uncool
+uncooled
+uncooperative
+uncoordinated
+uncork
+uncorked
+uncorrectable
+uncorrected
+uncorrelated
+uncorseted
+uncountable
+uncountably
+uncounted
+uncouple
+uncoupler
+uncourageous
+uncousinly
+uncouth
+uncouthly
+uncouthness
+uncovenanted
+uncover
+uncovered
+uncovering
+uncovers
+uncreated
+uncritical
+uncritically
+uncriticizable
+uncriticizable's
+uncriticizables
+uncriticized
+uncriticizing
+uncriticizingly
+uncross
+uncrown
+uncrowned
+uncrumple
+uncrushable
+uncrystallizabilities
+uncrystallizability
+uncrystallizability's
+uncrystallizable
+uncrystallizable's
+uncrystallizables
+uncrystallized
+unction
+unctuous
+unctuously
+unctuousness
+uncured
+uncurl
+uncurled
+uncurricularized
+uncurricularized's
+uncurricularizeds
+uncus
+uncut
+uncynical
+uncynically
+undamaged
+undamped
+undated
+undauntable
+undaunted
+undauntedly
+undebatable
+undebatably
+undecagon
+undeceive
+undecidable
+undecided
+undecillion
+undeclared
+undecomposable
+undecorated
+undedicated
+undefended
+undefense
+undefense's
+undefenses
+undefinability
+undefinable
+undefine
+undefined
+undefinedness
+undeflected
+undeformed
+undelete
+undeleted
+undeliverability
+undeliverable
+undemagnetizable
+undemagnetizable's
+undemagnetizables
+undemocratic
+undemocratically
+undemocratize
+undemocratizes
+undemonstrative
+undemonstratively
+undemonstrativeness
+undeniable
+undeniableness
+undeniably
+undenominationalize
+undenominationalizes
+undependable
+undepicted
+under
+underachieve
+underachievers
+underact
+underactivity
+underadjusting
+underage
+underarm
+underbedding
+underbelly
+underbid
+underbidder
+underbody
+underbracing
+underbred
+underbrim
+underbrush
+underbuy
+undercapitalization
+undercapitalization's
+undercapitalizations
+undercapitalize
+undercapitalized
+undercapitalizes
+undercapitalizing
+undercarriage
+undercart
+undercharge
+underclass
+underclassman
+underclassmen
+underclay
+underclothes
+underclothing
+undercoat
+undercoating
+undercolor
+undercolor's
+undercolored
+undercoloring
+undercolorings
+undercolors
+underconsumption
+undercook
+undercooked
+undercool
+undercount
+undercounts
+undercover
+undercroft
+undercurrent
+undercut
+undercutting
+underdevelop
+underdeveloped
+underdevelopment
+underdo
+underdog
+underdone
+underdrawers
+underdress
+underdressed
+undereducated
+undereducation
+underemphasis
+underemphasize
+underemphasized
+underemphasizes
+underemphasizing
+underemployed
+underemployment
+underenumerated
+underenumeration
+underestimate
+underestimated
+underestimates
+underestimating
+underestimation
+underestimations
+underexpose
+underexposure
+underfeed
+underfelt
+underfilled
+underfloor
+underflow
+underflowed
+underflowing
+underflows
+underfoot
+underfur
+undergarment
+undergarments
+undergird
+undergirding
+underglaze
+undergo
+undergoes
+undergoing
+undergone
+undergrad
+undergrad's
+undergrads
+undergraduate
+undergraduate's
+undergraduates
+underground
+undergrounder
+undergrown
+undergrowth
+underhand
+underhanded
+underhandedly
+underhandedness
+underheat
+underhung
+underinsurance
+underivable
+underived
+underlaborer
+underlaborer's
+underlaborers
+underlaid
+underlay
+underlayment
+underlet
+underletting
+underlie
+underlies
+underline
+underlined
+underlinen
+underlines
+underling
+underling's
+underlings
+underlining
+underlinings
+underlip
+underly
+underlying
+undermanned
+undermentioned
+undermine
+undermined
+undermines
+undermining
+undermost
+underneath
+undernourish
+undernourished
+undernourishment
+undernutrition
+underorganization
+underorganization's
+underorganizations
+underoxidize
+underoxidizes
+underpaid
+underpainting
+underpants
+underpart
+underpass
+underpasses
+underpay
+underpayment
+underpayment's
+underpayments
+underpin
+underpinned
+underpinning
+underpinnings
+underpins
+underpitch
+underpitched
+underpitches
+underpitching
+underplay
+underplayed
+underplaying
+underplays
+underplot
+underplots
+underpopulated
+underpowered
+underprice
+underpriced
+underprices
+underpricing
+underprivileged
+underproduction
+underproductive
+underproof
+underprop
+underquote
+underrate
+underrated
+underrealize
+underrealizes
+underregistration
+underreport
+underreported
+underreporting
+underrepresentation
+underrepresented
+underripe
+underrun
+undersaturated
+undersavior
+undersavior's
+undersaviors
+underscore
+underscored
+underscores
+undersea
+underseal
+underseas
+undersecretariat
+undersecretaries
+undersecretary
+undersecretary's
+undersell
+underset
+undersexed
+undersheriff
+undershirt
+undershirt's
+undershirts
+undershoot
+undershooting
+undershoots
+undershorts
+undershot
+undershrub
+underside
+underside's
+undersides
+undersigned
+undersize
+undersized
+undersizes
+undersizing
+underskirt
+underslung
+undersmooth
+undersmoothed
+undersmoothing
+undersmooths
+undersong
+underspent
+underspin
+understaff
+understaffed
+understand
+understandability
+understandable
+understandably
+understanding
+understandingly
+understandings
+understands
+understate
+understated
+understatement
+understatements
+understates
+understating
+understeer
+understood
+understory
+understrapper
+understrength
+understructure
+understructure's
+understructures
+understudies
+understudy
+understudy's
+undersupply
+undersurface
+undertake
+undertaken
+undertaker
+undertaker's
+undertakers
+undertakes
+undertaking
+undertakings
+undertenant
+underthrust
+undertint
+undertone
+undertook
+undertow
+undertow's
+undertows
+undertrick
+undertrump
+undertype
+underused
+underutilization
+underutilize
+underutilized
+undervaluation
+undervalue
+undervalued
+undervaluing
+undervitalized
+undervitalized's
+undervitalizeds
+underwaist
+underwater
+underway
+underwear
+underweight
+underwent
+underwhelm
+underwhelmed
+underwhelming
+underwhelms
+underwing
+underwood
+underwool
+underworld
+underwrite
+underwriter
+underwriters
+underwrites
+underwriting
+undescended
+undeserved
+undesigned
+undesigning
+undesirability
+undesirable
+undesirableness
+undesirably
+undesired
+undetectability
+undetectable
+undetected
+undetermined
+undeveloped
+undeviated
+undeviating
+undeviatingly
+undialectical
+undialyzed
+undialyzed's
+undialyzeds
+undid
+undies
+undifferentiated
+undigested
+undignified
+undiluted
+undiminished
+undimmed
+undine
+undiphthongize
+undiphthongizes
+undiplomatic
+undiplomatically
+undirected
+undirectional
+undisciplined
+undisclosed
+undiscolored
+undiscolored's
+undiscoloreds
+undiscovered
+undiscussed
+undisguised
+undisguisedly
+undishonored
+undismayed
+undisorganized
+undisputed
+undisrupted
+undissociated
+undistinguished
+undistorted
+undistributed
+undisturbed
+undivided
+undo
+undock
+undocumented
+undoer
+undoes
+undogmatic
+undogmatically
+undoing
+undoings
+undomesticated
+undone
+undouble
+undoubled
+undoubted
+undoubtedly
+undrained
+undramatic
+undramatically
+undramatizable
+undramatizable's
+undramatizables
+undramatized
+undramatized's
+undramatizeds
+undrape
+undraw
+undreamed
+undreamt
+undress
+undressed
+undresses
+undressing
+undried
+undrinkable
+undro
+undrunk
+undset
+undualize
+undualizes
+undue
+undulant
+undulate
+undulated
+undulates
+undulating
+undulation
+undulations
+undulatory
+unduly
+undumper
+undumper's
+undutiful
+undutifully
+undutifulness
+undying
+une
+unearned
+unearth
+unearthed
+unearthing
+unearthliness
+unearthly
+unease
+uneasily
+uneasiness
+uneasy
+uneconomic
+uneconomical
+uneconomizing
+unedited
+uneducated
+unelected
+unembellished
+unemotional
+unemotionally
+unemphatic
+unemphatically
+unemployability
+unemployable
+unemployed
+unemployment
+unenamored
+unenamored's
+unenamoreds
+unencroachable
+unencumbered
+unendeavored
+unending
+unendingly
+unendurable
+unendurableness
+unendurably
+unenergized
+unenergized's
+unenergizeds
+unenforcable
+unenforceable
+unenforcible
+unenlightening
+unenthusiastic
+unenthusiastically
+unenumerated
+unenunciated
+unenviable
+unenvied
+unepitomized
+unequal
+unequaled
+unequalize
+unequalized
+unequalizes
+unequally
+unequivocably
+unequivocal
+unequivocally
+unerring
+unerringly
+UNESCO
+unessential
+unethically
+uneulogized
+uneulogized's
+uneulogizeds
+unevaluated
+unevangelized
+unevangelized's
+unevangelizeds
+uneven
+unevenly
+unevenness
+uneventful
+uneventfully
+unexamined
+unexampled
+unexceptionable
+unexceptionableness
+unexceptionably
+unexceptional
+unexceptionally
+unexcited
+unexcused
+unexpanded
+unexpected
+unexpectedly
+unexpectedness
+unexpended
+unexperienced
+unexplainable
+unexplained
+unexploited
+unexplored
+unexpressed
+unexpressive
+unextended
+unfaded
+unfading
+unfadingly
+unfailing
+unfailingly
+unfailingness
+unfair
+unfairly
+unfairness
+unfaith
+unfaithful
+unfaithfully
+unfaithfulness
+unfaltering
+unfalteringly
+unfamiliar
+unfamiliarity
+unfamiliarized
+unfamiliarly
+unfancy
+unfashionable
+unfashionably
+unfasten
+unfastened
+unfathered
+unfathomable
+unfavorable
+unfavorable's
+unfavorableness
+unfavorables
+unfavorably
+unfavored
+unfavored's
+unfavoring
+unfavoring's
+unfavorings
+unfavorite
+unfavorite's
+unfavorites
+unfeathered
+unfederated
+unfeeling
+unfeelingly
+unfeelingness
+unfeigned
+unfeignedly
+unfelt
+unfenced
+unfertile
+unfertilizable
+unfertilizable's
+unfertilizables
+unfertilized
+unfetter
+unfettered
+unfeudalize
+unfeudalized
+unfeudalizes
+unfilial
+unfilially
+unfilled
+unfindable
+unfinished
+unfired
+unfit
+unfitly
+unfitness
+unfitted
+unfitting
+unfix
+unfixable
+unfixed
+unflagging
+unflaggingly
+unflappability
+unflappable
+unflattering
+unflatteringly
+unflavored
+unfledged
+unflinching
+unflinchingly
+unfocused
+unfold
+unfolded
+unfolding
+unfoldment
+unfolds
+unforced
+unforeseen
+unforgeable
+unforgettability
+unforgettable
+unforgettably
+unforgivable
+unforgiveable
+unforgiveably
+unforgiving
+unforgivingness
+unformalized
+unformatted
+unformed
+unforseen
+unforthcoming
+unfortunate
+unfortunately
+unfortunates
+unfossilized
+unfossilized's
+unfossilizeds
+unfounded
+unfraternizing
+unfraternizing's
+unfraternizings
+unfreeze
+unfrequented
+unfriended
+unfriendliness
+unfriendly
+unfrock
+unfrocking
+unfrosted
+unfrozen
+unfruitful
+unfruitfully
+unfruitfulness
+unfulfilled
+unfunded
+unfunnily
+unfurl
+unfurled
+unfurnished
+unfussy
+ungainliness
+ungainly
+ungallant
+ungallantly
+ungalvanized
+ungalvanized's
+ungalvanizeds
+ungaretti
+ungava
+ungelatinizable
+ungelatinizable's
+ungelatinizables
+ungelatinized
+ungelatinized's
+ungelatinizeds
+ungeneralized
+ungenerosity
+ungenerous
+ungenerously
+ungentilize
+ungentilizes
+ungentlemanize
+ungentlemanizes
+ungird
+ungirt
+unglamorous
+unglazed
+unglue
+unglued
+ungodliness
+ungodly
+ungospelized
+ungospelized's
+ungospelizeds
+ungot
+ungotten
+ungovernable
+ungoverned
+ungraceful
+ungracefully
+ungracefulness
+ungracious
+ungraciously
+ungraded
+ungrammatical
+ungrammaticality
+ungraphitized
+ungraphitized's
+ungraphitizeds
+ungrateful
+ungratefully
+ungratefulness
+ungratified
+ungrounded
+ungrudging
+ungual
+unguard
+unguarded
+unguardedly
+unguardedness
+unguent
+unguessable
+unguessed
+unguiculate
+unguided
+unguinous
+unguis
+ungula
+ungulate
+unguligrade
+unhair
+unhallow
+unhallowed
+unhampered
+unhand
+unhandily
+unhandiness
+unhandsome
+unhandsomely
+unhandy
+unhappier
+unhappiest
+unhappily
+unhappiness
+unhappy
+unharbor
+unharbor's
+unharbored
+unharmed
+unharmonious
+unharmonize
+unharmonized
+unharmonizes
+unharness
+unhealthily
+unhealthiness
+unhealthy
+unheard
+unheated
+unheeded
+unheeding
+unhelm
+unhelpful
+unhelpfully
+unheralded
+unheroize
+unheroizes
+unhesitant
+unhesitating
+unhesitatingly
+unhinge
+unhinged
+unhitch
+unhitched
+unhitches
+unhitching
+unholiness
+unholy
+unhonorable
+unhonorable's
+unhonorables
+unhonorablies
+unhonorably
+unhonored
+unhood
+unhook
+unhooked
+unhooking
+unhooks
+unhoped
+unhorse
+unhorsed
+unhouseled
+unhumored
+unhurried
+unhurriedly
+unhurt
+unhydrolyzed
+unhydrolyzed's
+unhydrolyzeds
+unhypnotizable
+unhypnotizable's
+unhypnotizables
+unhypnotize
+unhypnotizes
+unhysterical
+unhysterically
+uni
+unialgal
+Uniat
+uniaxial
+uniaxially
+unibus
+Unibus
+unibuss
+unicameral
+unicamerally
+unicef
+unicellular
+unicellularity
+unicolour
+unicorn
+unicorn's
+unicorns
+unicostate
+unicycle
+unicyclist
+unideal
+unidealized
+unidentifiable
+unidentified
+unidimensional
+unidirection
+unidirectional
+unidirectionality
+unidirectionally
+unidolized
+unidolized's
+unidolizeds
+unifactorial
+unifiable
+unification
+unifications
+unified
+unifier
+unifiers
+unifies
+unifilar
+unifoliate
+unifoliolate
+uniform
+uniformally
+uniformed
+uniforming
+uniformitarian
+uniformitarianism
+uniformities
+uniformity
+uniformization
+uniformization's
+uniformizations
+uniformize
+uniformizes
+uniformly
+uniformness
+uniforms
+unify
+unifying
+unijugate
+unilateral
+unilateralist
+unilateralists
+unilateralization
+unilateralization's
+unilateralizations
+unilateralize
+unilateralizes
+unilaterally
+unilinear
+unilingual
+uniliteral
+unilluminating
+unillusioned
+unilocular
+unimaginable
+unimaginably
+unimaginative
+unimaginatively
+unimak
+unimmortalize
+unimmortalized
+unimmortalizes
+unimodal
+unimodular
+unimpaired
+unimpassioned
+unimpeachable
+unimpeachably
+unimpeded
+unimplemented
+unimportance
+unimportant
+unimposing
+unimpressed
+unimpressive
+unimproved
+unincorporated
+unindented
+unindividualize
+unindividualized
+unindividualizes
+unindustrialized
+unindustrialized's
+unindustrializeds
+uninfected
+uninfluenced
+uninfluential
+uninformative
+uninformatively
+uninformed
+uninhabited
+uninhibited
+uninhibitedly
+uninhibitedness
+uninitializable
+uninitialized
+uninitiate
+uninitiated
+uninjectable
+uninjured
+uninominal
+uninspired
+uninspiring
+uninstantiated
+uninsulated
+unintelligence
+unintelligent
+unintelligently
+unintelligibility
+unintelligible
+unintelligibleness
+unintelligibly
+unintended
+unintentional
+unintentionally
+uninterested
+uninteresting
+uninterestingly
+uninterpretable
+uninterpreted
+uninterruptable
+uninterrupted
+uninterruptedly
+uninterruptedness
+uninterviewed
+uninucleate
+uninvaginated
+uninvited
+uninvolved
+union
+Union
+union's
+unionism
+unionist
+unionists
+unionization
+unionization's
+unionizations
+unionize
+unionized
+unionizer
+unionizers
+unionizes
+unionizing
+unions
+uniparental
+uniparentally
+uniparous
+unipersonal
+uniplanar
+uniplex
+UniPlus
+UniPlus's
+unipod
+unipolar
+unipolarity
+uniprocessor
+uniprocessor's
+uniprocessors
+unique
+uniquely
+uniqueness
+uniramous
+Uniroyal
+uniseptate
+uniserial
+unisex
+unisexual
+unisexuality
+unisexually
+UniSoft
+UniSoft's
+unison
+Unisys
+unit
+unit's
+unitage
+unital
+unitalicized
+unitarian
+unitarianism
+Unitarianize
+Unitarianizes
+unitarians
+unitarily
+unitarity
+unitary
+unite
+united
+United
+unitedly
+unitemized
+uniter
+uniterm
+unites
+unities
+uniting
+unitive
+unitization
+unitize
+unitized
+unitizes
+unitizing
+units
+unity
+unity's
+Univac
+univalent
+univalve
+univalve's
+univalves
+univariate
+universal
+universalism
+universalist
+universalistic
+universality
+universalization
+universalization's
+universalizations
+universalize
+universalized
+universalizer
+universalizers
+universalizes
+universalizing
+universally
+universalness
+universals
+universe
+universe's
+universes
+universities
+university
+university's
+univocal
+univocally
+Unix
+Unix's
+UNIX's
+unjacketed
+unjam
+unjammed
+unjamming
+unjoined
+unjournalized
+unjust
+unjustifiable
+unjustified
+unjustly
+unjustness
+unkempt
+unkenned
+unkennel
+unkenneled
+unkenneling
+unkind
+unkindliness
+unkindly
+unkindness
+unkink
+unknit
+unknowable
+unknowing
+unknowingly
+unknown
+unknowns
+unlabeled
+unlabialize
+unlabializes
+unlaborable
+unlaborable's
+unlaborables
+unlabored
+unlabored's
+unlaboring
+unlaboring's
+unlaborings
+unlace
+unlaced
+unlacing
+unlade
+unlamented
+unlash
+unlashed
+unlatch
+unlaundered
+unlawful
+unlawfully
+unlawfulness
+unlay
+unlead
+unleaded
+unlearn
+unlearned
+unleash
+unleashed
+unleashes
+unleashing
+unleavened
+unlegalized
+unless
+unlettable
+unlettered
+unleveled
+unleveling
+unliberalized
+unlicensed
+unlicked
+unlike
+unlikelihood
+unlikelihoods
+unlikeliness
+unlikely
+unlikeness
+unlimber
+unlimbered
+unlimbering
+unlimbers
+unlimited
+unlimitedly
+unlined
+unlink
+unlinked
+unlinking
+unlinks
+unlisted
+unliterary
+unlive
+unload
+unloaded
+unloader
+unloaders
+unloading
+unloads
+unlocalizable
+unlocalizable's
+unlocalizables
+unlocalize
+unlocalized
+unlocalizes
+unlock
+unlocked
+unlocking
+unlocks
+unlogged
+unloose
+unloosen
+unloved
+unloveliness
+unlovely
+unluckily
+unluckiness
+unlucky
+unmade
+unmagnetized
+unmagnetized's
+unmagnetizeds
+unmagnified
+unmaintainable
+unmaintained
+unmake
+unmalicious
+unmaliciously
+unman
+unmanageable
+unmanageably
+unmanaged
+unmanliness
+unmanly
+unmanned
+unmannered
+unmanneredly
+unmannerliness
+unmannerly
+unmapped
+unmaps
+unmarked
+unmarred
+unmarried
+unmarrieds
+unmask
+unmasked
+unmatchable
+unmatched
+unmate
+unmated
+unmates
+unmating
+unmeaning
+unmeant
+unmeasurable
+unmeasured
+unmechanize
+unmechanized
+unmechanizes
+unmediatized
+unmediatized's
+unmediatizeds
+unmeet
+unmemorable
+unmemorably
+unmemorialized
+unmemorialized's
+unmemorializeds
+unmemorized
+unmentionable
+unmentionables
+unmentioned
+unmercerized
+unmercerized's
+unmercerizeds
+unmerciful
+unmercifully
+unmeritorious
+unmeshed
+unmesmerize
+unmesmerized
+unmesmerizes
+unmet
+unmetalized
+unmetalized's
+unmetalizeds
+unmethodical
+unmethodized
+unmethodized's
+unmethodizeds
+unmethodizing
+unmethodizing's
+unmethodizings
+unmindful
+unmineralized
+unmineralized's
+unmineralizeds
+unminimized
+unmissionized
+unmissionized's
+unmissionizeds
+unmistakable
+unmistakably
+unmitigatd
+unmitigated
+unmitigatedly
+unmitigatedness
+unmixed
+unmobilized
+unmobilized's
+unmobilizeds
+unmodeled
+unmoderated
+unmodernize
+unmodernized
+unmodernizes
+unmodifiable
+unmodified
+unmolested
+unmonopolize
+unmonopolized
+unmonopolizes
+unmonopolizing
+unmonopolizings
+unmoor
+unmoral
+unmorality
+unmoralize
+unmoralized
+unmoralizes
+unmoralizing
+unmoralizings
+unmotivated
+unmotorized
+unmount
+unmountable
+unmounted
+unmoved
+unmoving
+unmuffle
+unmunicipalized
+unmunicipalized's
+unmunicipalizeds
+unmurmuring
+unmusical
+unmutualized
+unmutualized's
+unmutualizeds
+unmuzzle
+unmyelinated
+unmysticize
+unmysticizes
+unnail
+unnameable
+unnamed
+unnationalized
+unnatural
+unnaturalizable
+unnaturalizable's
+unnaturalizables
+unnaturalize
+unnaturalized
+unnaturalizes
+unnaturally
+unnaturalness
+unnecessarily
+unnecessary
+unneeded
+unnegated
+unneighbored
+unneighborlike
+unneighborlike's
+unneighborlikes
+unneighborliness
+unneighborly
+unnerve
+unnerved
+unnerves
+unnerving
+unnervingly
+unneutralized
+unnitrogenized
+unnitrogenized's
+unnitrogenizeds
+unnormalize
+unnormalized
+unnormalizes
+unnormalizing
+unnoticed
+unnourished
+unnumbered
+uno
+unobservable
+unobservables
+unobserved
+unobtainable
+unobtrusive
+unobtrusively
+unobtrusiveness
+unoccupied
+unofficial
+unofficially
+unopenable
+unopened
+unoptimize
+unoptimized
+unoptimizes
+unoptimizing
+unordered
+unorganizable
+unorganizable's
+unorganizables
+unorganized
+unorganizedly
+unorganizedness
+unoriginals
+unorthodox
+unorthodoxly
+unorthodoxy
+unoxidizable
+unoxidizable's
+unoxidizables
+unoxidized
+unoxygenized
+unoxygenized's
+unoxygenizeds
+unpack
+unpackage
+unpackaged
+unpackages
+unpackaging
+unpacked
+unpacker
+unpacking
+unpacks
+unpaddable
+unpadded
+unpaganize
+unpaganizes
+unpaged
+unpaid
+unpaintable
+unpainted
+unpaired
+unpalatability
+unpalatable
+unparagonized
+unparagonized's
+unparagonizeds
+unparalleled
+unparalyzed
+unparalyzed's
+unparalyzeds
+unparameterized
+unparceled
+unparliamentary
+unparsed
+unparticularized
+unparticularized's
+unparticularizeds
+unparticularizing
+unparticularizing's
+unparticularizings
+unpartisan
+unpartitioned
+unpatriotic
+unpatronizable
+unpatronizable's
+unpatronizables
+unpatronized
+unpatronizing
+unpatronizing's
+unpauperized
+unpauperized's
+unpauperizeds
+unpaved
+unpeg
+unpenalized
+unpeople
+unperceived
+unperfect
+unperforated
+unperformed
+unperson
+unperturbed
+unperturbedly
+unphilosophize
+unphilosophized
+unphilosophizes
+unphosphatized
+unphosphatized's
+unphosphatizeds
+unphysical
+unpick
+unpicturesque
+unpile
+unpin
+unplaced
+unplagiarized
+unplagiarized's
+unplagiarizeds
+unplagued
+unplanned
+unpleasant
+unpleasantly
+unpleasantness
+unpleased
+unplowed
+unplug
+unplugged
+unplugging
+unplugs
+unplumbed
+unpoeticized
+unpoeticized's
+unpoeticizeds
+unpoetize
+unpoetized
+unpoetizes
+unpolarizable
+unpolarizable's
+unpolarizables
+unpolarized
+unpolarized's
+unpolarizeds
+unpolitic
+unpolitical
+unpolled
+unpolluted
+unpolymerized
+unpolymerized's
+unpolymerizeds
+unpopular
+unpopularity
+unpopularize
+unpopularizes
+unpracticed
+unprecedented
+unprecedentedly
+unpredictability
+unpredictable
+unpredictably
+unpredicted
+unpreemphasized
+unpregnant
+unprejudiced
+unpremeditated
+unprepared
+unprepossessing
+unprescribed
+unpreserved
+unpretending
+unpretentious
+unpretentiously
+unpretentiousness
+unpriced
+unprimed
+unprincipled
+unprincipledness
+unprintable
+unprinted
+unprivileged
+unproblematic
+unproblematical
+unproblematically
+unprocessed
+unprocurable
+unproductive
+unprofessed
+unprofessional
+unprofitable
+unprofitableness
+unprofitably
+unprojected
+unpromising
+unpromisingly
+unprompted
+unpronounceable
+unpronounced
+unpropagated
+unpropertied
+unprotected
+unprotectedly
+unprotestantize
+unprotestantizes
+unprovability
+unprovable
+unproved
+unproven
+unprovided
+unprovocative
+unpublished
+unpulverize
+unpulverized
+unpulverizes
+unpunched
+unpunished
+unqualified
+unqualifiedly
+unquantifiable
+unquenched
+unquestionable
+unquestionably
+unquestioned
+unquestioning
+unquestioningly
+unquiet
+unquietly
+unquietness
+unquote
+unquoted
+unradicalize
+unradicalizes
+unrancored
+unrancored's
+unrancoreds
+unranked
+unrated
+unravel
+unraveled
+unraveler
+unravelers
+unraveling
+unravels
+unreachable
+unreacted
+unreactive
+unread
+unreadability
+unreadable
+unreadiness
+unready
+unreal
+unrealism
+unrealistic
+unrealistically
+unreality
+unrealizable
+unrealizable's
+unrealizables
+unrealize
+unrealized
+unrealizes
+unrealizing
+unrealizings
+unreason
+unreasonable
+unreasonableness
+unreasonably
+unreasoning
+unreasoningly
+unreassuringly
+unreceptive
+unreckonable
+unrecognizable
+unrecognized
+unrecognizing
+unrecognizingly
+unreconnoitered
+unreconnoitered's
+unreconnoitereds
+unreconstructed
+unrecordable
+unrecorded
+unrecoverable
+unredeemable
+unredeemed
+unreel
+unreeling
+unreeve
+unreferenced
+unrefined
+unreflected
+unreflective
+unregenerate
+unregister
+unregistered
+unregistering
+unregisters
+unregulated
+unrehearsed
+unreinforced
+unrelated
+unreleased
+unrelenting
+unrelentingly
+unreliabilities
+unreliability
+unreliable
+unreliably
+unrelieved
+unreligious
+unremarkable
+unremarked
+unremitting
+unremittingly
+unremunerated
+unreorganized
+unrepair
+unrepentant
+unreported
+unrepresentable
+unrepresentative
+unrepresented
+unrequested
+unrequited
+unreserve
+unreserved
+unreservedly
+unreservedness
+unresisted
+unresisting
+unresolved
+unresponsive
+unresponsively
+unresponsiveness
+unrest
+unrestrained
+unrestrainedly
+unrestrainedness
+unrestraint
+unrestricted
+unrestrictedly
+unrestrictive
+unreturned
+unrevealing
+unrevelationize
+unrevelationizes
+unrewarding
+unriddle
+unrifled
+unrig
+unrighteous
+unrighteously
+unrighteousness
+unrip
+unripe
+unripeness
+unrivaled
+unrobe
+unroll
+unrolled
+unrolling
+unrolls
+unromantic
+unromantically
+unromanticized
+unromanticized's
+unromanticizeds
+unroof
+unroot
+unrotate
+unrotated
+unround
+unrounded
+unroyalized
+unroyalized's
+unroyalizeds
+unruffled
+unruled
+unruliness
+unruly
+unrumored
+unrwa
+unsabered
+unsaddle
+unsafe
+unsafely
+unsafety
+unsaid
+unsalted
+unsanitary
+unsatirize
+unsatirized
+unsatirizes
+unsatisfactorily
+unsatisfactory
+unsatisfiability
+unsatisfiable
+unsatisfied
+unsatisfying
+unsaturate
+unsaturated
+unsaved
+unsavored
+unsavoredly
+unsavoredness
+unsavories
+unsavorilies
+unsavorily
+unsavoriness
+unsavory
+unsavory's
+unsay
+unsayable
+unscandalize
+unscandalized
+unscandalizes
+unscathed
+unscepter
+unscepter's
+unsceptered
+unscepters
+unscheduled
+unschematized
+unschematized's
+unschematizeds
+unschooled
+unscientific
+unscientifically
+unscramble
+unscrambled
+unscrambler
+unscrambles
+unscrambling
+unscratched
+unscreened
+unscrew
+unscrewed
+unscrewing
+unscrews
+unscripted
+unscrupulous
+unscrupulously
+unscrupulousness
+unscrutinized
+unscrutinizing
+unscrutinizingly
+unseal
+unsealed
+unsealing
+unseals
+unseam
+unsearchable
+unsearchably
+unseasonable
+unseasonableness
+unseasonably
+unseasoned
+unseat
+unsectarianize
+unsectarianizes
+unsecularize
+unsecularized
+unsecularizes
+unsecured
+unsee
+unseeded
+unseeing
+unseemly
+unseen
+unsegmented
+unsegregated
+unsel
+unselected
+unselective
+unselfconscious
+unselfconsciousness
+unselfish
+unselfishly
+unselfishness
+unsensitize
+unsensitized
+unsensitizes
+unsensualize
+unsensualized
+unsensualizes
+unsent
+unsentimentalize
+unsentimentalizes
+unsepulcher
+unsepulchered
+unsepulchers
+unserved
+unserviceable
+unserviced
+unservile
+unset
+unsettle
+unsettled
+unsettledness
+unsettlement
+unsettling
+unsettlingly
+unsew
+unsex
+unshackle
+unshaded
+unshakable
+unshakeable
+unshaken
+unshapen
+unshared
+unsharpened
+unshaved
+unshaven
+unsheathe
+unsheathing
+unshed
+unshell
+unshelled
+unsheltered
+unshielded
+unshift
+unship
+unshockability
+unshockable
+unshod
+unshped
+unsight
+unsighted
+unsightly
+unsignalized
+unsignalized's
+unsignalizeds
+unsigned
+unsimplified
+unsinkable
+unsiphon
+unsiphon's
+unsiphons
+unsized
+unskilful
+unskilled
+unskillful
+unskillfully
+unskillfulness
+unslaked
+unsling
+unslinged
+unslinging
+unslings
+unsloped
+unslung
+unsmiling
+unsmilingly
+unsnap
+unsnapped
+unsnapping
+unsnaps
+unsnarl
+unsociability
+unsociable
+unsociableness
+unsociably
+unsocial
+unsocialized
+unsocially
+unsold
+unsolder
+unsolemnize
+unsolemnized
+unsolemnizes
+unsolicited
+unsolvable
+unsolved
+unsophisticated
+unsophistication
+unsorted
+unsought
+unsound
+unsounded
+unsoundly
+unsoundness
+unsparing
+unsparingly
+unspeak
+unspeakable
+unspeakably
+unspeaking
+unspecialized
+unspecializing
+unspecifed
+unspecific
+unspecified
+unspecify
+unspectacular
+unspecterlike
+unspecterlike's
+unspecterlikes
+unspent
+unsphere
+unspiritualize
+unspiritualized
+unspiritualizes
+unspoiled
+unspoken
+unsportsmanlike
+unspotted
+unsprayed
+unsprocketed
+unsprung
+unstable
+unstableness
+unstably
+unstacked
+unstacks
+unstained
+unstandardized
+unstapled
+unstaring
+unstate
+unstated
+unsteadily
+unsteadiness
+unsteady
+unsteel
+unstemmed
+unstep
+unsterilized
+unstick
+unstigmatized
+unstigmatized's
+unstigmatizeds
+unstilted
+unstinting
+unstintingly
+unstoicize
+unstoicizes
+unstop
+unstoppable
+unstoppably
+unstopped
+unstrained
+unstrap
+unstratified
+unstreamed
+unstressed
+unstriated
+unstring
+unstriped
+unstructured
+unstrung
+unstuck
+unstudied
+unstuffy
+unsubscripted
+unsubsidized
+unsubstantial
+unsubstantiality
+unsubstantialize
+unsubstantializes
+unsubstantially
+unsubstantiated
+unsubstituted
+unsubtle
+unsuccess
+unsuccessful
+unsuccessfully
+unsuccorable
+unsuccorable's
+unsuccorables
+unsuccored
+unsuffixed
+unsuggestive
+unsuitability
+unsuitable
+unsuitably
+unsuited
+unsulphurized
+unsulphurized's
+unsulphurizeds
+unsummarized
+unsung
+unsupernaturalize
+unsupernaturalized
+unsupernaturalizes
+unsupportable
+unsupported
+unsupportive
+unsure
+unsurmountable
+unsurpassed
+unsurprised
+unsurprising
+unsurprisingly
+unsuspected
+unsuspecting
+unsuspended
+unswathe
+unswear
+unswerving
+unsymbolized
+unsymmetrical
+unsymmetrically
+unsymmetrized
+unsymmetrized's
+unsymmetrizeds
+unsympathetic
+unsympathizabilities
+unsympathizability
+unsympathizability's
+unsympathizable
+unsympathizable's
+unsympathizables
+unsympathized
+unsympathizing
+unsympathizing's
+unsympathizingly
+unsympathizings
+unsynchronized
+unsynthesized
+unsystematic
+unsystematized
+unsystematizedly
+unsystematizing
+unsystemizable
+unsystemizable's
+unsystemizables
+untamed
+untampered
+untangle
+untantalized
+untantalizing
+untantalizing's
+untantalizings
+untaped
+untapped
+untartarized
+untartarized's
+untartarizeds
+untaught
+unteach
+untechnicalize
+untechnicalizes
+untellable
+untemporizing
+untemporizing's
+untemporizings
+untenability
+untenable
+untenanted
+untented
+unter
+unterminated
+unterrorized
+unterwalden
+untestable
+untested
+untether
+unthaw
+unthematic
+untheorizable
+untheorizable's
+untheorizables
+unthink
+unthinkability
+unthinkable
+unthinkably
+unthinking
+unthinkingly
+unthought
+unthread
+unthrone
+untidily
+untidiness
+untidy
+untie
+untied
+unties
+until
+untimeliness
+untimely
+untimeous
+untitled
+unto
+untold
+untouchability
+untouchable
+untouchable's
+untouchables
+untouched
+untoward
+untowardly
+untowardness
+untraceability
+untraceable
+untraced
+untracked
+untraditional
+untrained
+untrammeled
+untranquilized
+untransformed
+untranslated
+untransposed
+untravelled
+untread
+untreated
+untried
+untrod
+untrodden
+untroubled
+untrue
+untruly
+untruss
+untrusted
+untrustworthiness
+untruth
+untruthful
+untruthfully
+untruthfulness
+untuck
+untune
+untutored
+untwine
+untwist
+untwisted
+untying
+untyped
+untypical
+unusable
+unused
+unusual
+unusually
+unusualness
+unutilizable
+unutilizable's
+unutilizables
+unutterable
+unutterably
+unuttered
+unvacuolated
+unvalued
+unvaporized
+unvaporized's
+unvaporizeds
+unvarnished
+unvarying
+unvectorizable
+unveil
+unveiled
+unveiling
+unveils
+unventilated
+unverbalized
+unverified
+unvictimized
+unvisited
+unvisualized
+unvitalized
+unvitalized's
+unvitalizeds
+unvitriolized
+unvitriolized's
+unvitriolizeds
+unvocal
+unvocalized
+unvocalized's
+unvocalizeds
+unvoice
+unvoiced
+unvolatilize
+unvolatilized
+unvolatilizes
+unvulcanized
+unvulcanized's
+unvulcanizeds
+unvulgarize
+unvulgarized
+unvulgarizes
+unwaged
+unwaivering
+unwanted
+unwarily
+unwariness
+unwarrant
+unwarrantable
+unwarrantably
+unwarranted
+unwary
+unwashed
+unwashedness
+unwatched
+unwavering
+unwaveringly
+unwearied
+unweariedly
+unweave
+unwed
+unweeting
+unweetingly
+unweighed
+unweight
+unweighted
+unwelcome
+unwell
+unwept
+unwesternized
+unwesternized's
+unwesternizeds
+unwholesome
+unwholesomely
+unwieldily
+unwieldiness
+unwieldy
+unwilled
+unwilling
+unwillingly
+unwillingness
+unwind
+unwinder
+unwinders
+unwinding
+unwinds
+unwinking
+unwinnable
+unwire
+unwired
+unwisdom
+unwise
+unwisely
+unwiser
+unwisest
+unwish
+unwished
+unwitnessed
+unwitting
+unwittingly
+unwomanize
+unwomanized
+unwomanizes
+unwomanly
+unwonted
+unwontedly
+unwontedness
+unworkable
+unworldliness
+unworldly
+unworn
+unworthily
+unworthiness
+unworthy
+unwound
+unwounded
+unwoven
+unwrap
+unwrapped
+unwrapping
+unwraps
+unwreathe
+unwrinkled
+unwritable
+unwritten
+unyielded
+unyielding
+unyieldingly
+unyoke
+unzio
+unzip
+up
+upanishad
+uparrow
+upas
+upbeat
+upbraid
+upbraider
+upbring
+upbringing
+upbuild
+upbuilder
+upcast
+upchuck
+upcome
+upcoming
+upcountry
+update
+updated
+updater
+updates
+updating
+updo
+updos
+updraft
+upend
+upfield
+upgrade
+upgraded
+upgrades
+upgrading
+upgrowth
+upheaval
+upheavals
+upheave
+upheaver
+upheld
+uphill
+uphold
+upholder
+upholders
+upholding
+upholds
+upholster
+upholstered
+upholsterer
+upholsterers
+upholstering
+upholsters
+upholstery
+uphoster
+uphroe
+upkeep
+upland
+uplander
+uplands
+uplift
+uplifted
+uplifter
+uplifting
+uplifts
+upload
+uploaded
+uploading
+uploads
+upmanship
+upmost
+upolu
+upon
+upped
+upper
+upperbound
+upperbounds
+uppercase
+uppercased
+uppercases
+uppercasing
+upperclassman
+upperclassmen
+uppercut
+uppermost
+upperpart
+uppers
+upping
+uppish
+uppishly
+uppishness
+uppity
+uppityness
+uppsala
+upraise
+upraised
+uprear
+upright
+uprightly
+uprightness
+uprise
+upriser
+uprising
+uprising's
+uprisings
+upriver
+uproar
+uproarious
+uproariously
+uproariousness
+uproot
+uprooted
+uprooter
+uprooting
+uproots
+uprouse
+uprush
+ups
+upsadaisy
+upsala
+upset
+upsets
+upsetter
+upsetting
+upshift
+upshot
+upshot's
+upshots
+upside
+upsides
+upsilon
+upslope
+upspring
+upstage
+upstaged
+upstages
+upstaging
+upstairs
+upstand
+upstanding
+upstandingness
+upstart
+upstate
+upstater
+upstream
+upstretched
+upstroke
+upsurge
+upsweep
+upswell
+upswept
+upswing
+upswings
+uptake
+upthrow
+upthrust
+uptight
+uptightness
+uptilt
+uptime
+upto
+Upton
+uptown
+uptrend
+upturn
+upturned
+upturning
+upturns
+upward
+upwardly
+upwardness
+upwards
+upwell
+upwind
+uracil
+uraei
+uraemia
+uraeus
+Ural
+Uralic
+uralite
+uralitic
+uranalysis
+Urania
+Uranian
+uranic
+uranide
+uraninite
+uranism
+uranite
+uranium
+uranographic
+uranographical
+uranography
+uranological
+uranology
+uranometry
+uranous
+Uranus
+uranyl
+urate
+uratic
+urban
+Urbana
+urbane
+urbanely
+urbanism
+urbanist
+urbanistic
+urbanistically
+urbanite
+urbanites
+urbanity
+urbanization
+urbanization's
+urbanizations
+urbanize
+urbanized
+urbanizes
+urbanizing
+urbanologist
+urbanology
+urbiculture
+urceolate
+urchin
+urchin's
+urchins
+Urdu
+ure
+urea
+urease
+uredinial
+uredinium
+urediospore
+uredium
+Uredo
+uredosorus
+uredospore
+uredostage
+ureide
+uremia
+uremic
+ureotelic
+ureotelism
+ureter
+ureteral
+ureteric
+urethan
+urethane
+urethanes
+urethra
+urethral
+urethritis
+urethroscope
+uretic
+urey
+urfa
+urga
+urge
+urged
+urgencies
+urgency
+urgent
+urgently
+urger
+urges
+urging
+urgings
+Uri
+Uriah
+uric
+uricosuric
+uricotelic
+uricotelism
+uridine
+Uriel
+urim
+urinal
+urinals
+urinalysis
+urinant
+urinary
+urinate
+urinated
+urinates
+urinating
+urination
+urine
+uriniferous
+urinogenital
+urinometer
+urinometer's
+urinometers
+urinous
+Uris
+urmia
+Urmston
+urn
+urn's
+Urnfield
+urning
+urns
+urochord
+urochordal
+urochordate
+urochrome
+urodele
+urogenital
+urogenous
+urokinase
+urol
+urolith
+urolithiasis
+urologic
+urological
+urologist
+urology
+uropod
+uropygial
+uropygium
+uroscopy
+urostyle
+Urquhart
+urquhart
+Ursa
+ursine
+Ursula
+Ursuline
+urticaceous
+urticaria
+urticarial
+urticate
+urtication
+uruapan
+Uruguay
+urumchi
+urundi
+urus
+urushiol
+us
+USA
+usability
+usable
+usableness
+usably
+USAF
+usage
+usages
+usance
+USART
+USC
+USC's
+USDA
+use
+useably
+used
+useful
+usefully
+usefulness
+useless
+uselessly
+uselessness
+Usenet
+Usenet's
+Usenix
+Usenix's
+user
+user's
+username
+usernames
+users
+uses
+useway
+USG
+USG's
+USGS
+ushant
+ushas
+usher
+ushered
+usherette
+ushering
+ushers
+USIA
+using
+USN
+usnach
+usnea
+uspallata
+USPS
+usquebaugh
+usrio
+ussher
+USSR
+ussuri
+ustashi
+Ustinov
+ustulation
+ustyurt
+usual
+usually
+usualness
+usufruct
+usufructuary
+usumbura
+usurer
+usurious
+usuriously
+usuriousness
+usurp
+usurpation
+usurped
+usurper
+usury
+UT
+Utah
+Utah's
+utamaro
+ute
+uteca
+utensil
+utensil's
+utensils
+utep
+uterine
+uterus
+uteruses
+utgard
+uther
+Utica
+utile
+utilitarian
+utilitarianism
+utilitarianize
+utilitarianizes
+utilities
+utility
+utility's
+utilizabilities
+utilizability
+utilizable
+utilizable's
+utilizables
+utilization
+utilize
+utilized
+utilizer
+utilizers
+utilizes
+utilizing
+utiny
+utmost
+utopia
+utopian
+utopian's
+utopianism
+Utopianize
+utopianizer
+utopianizer's
+utopianizers
+Utopianizes
+utopians
+utopias
+utopism
+utopist
+utopistic
+Utrecht
+Utrecht's
+utricle
+utricular
+utricularia
+utriculitis
+utriculus
+utrillo
+uttar
+utter
+utterable
+utterance
+utterance's
+utterances
+uttered
+utterer
+uttering
+utterly
+uttermost
+utters
+uttium
+uucp
+uucp's
+UV
+uvarovite
+uvea
+uveal
+uvedale
+uveitis
+uvula
+uvular
+uvularly
+uvulitis
+Uxbridge
+uxmal
+uxorial
+uxoricide
+uxorious
+uxoriously
+uxoriousness
+Uzbek
+Uzi
+Uzi's
+VA
+Vaal
+Vaasa
+VAC
+vacancies
+vacancy
+vacancy's
+vacant
+vacantly
+vacantness
+vacate
+vacated
+vacates
+vacating
+vacation
+vacationed
+vacationer
+vacationers
+vacationing
+vacationist
+vacationland
+vacationless
+vacations
+vaccinal
+vaccinate
+vaccinated
+vaccinates
+vaccinating
+vaccination
+vaccinations
+vaccinator
+vaccinators
+vaccine
+vaccines
+vaccinia
+vaccinial
+vaccinization
+vaccinization's
+vaccinizations
+vacherin
+vacillate
+vacillated
+vacillates
+vacillating
+vacillatingly
+vacillation
+vacillations
+vacillator
+vacillator's
+vacillators
+vacua
+vacuity
+vacuo
+vacuolar
+vacuolate
+vacuolated
+vacuolates
+vacuolating
+vacuolation
+vacuole
+vacuoles
+vacuolization
+vacuolization's
+vacuolizations
+vacuous
+vacuously
+vacuousness
+vacuum
+vacuumed
+vacuuming
+vacuumize
+vacuumized
+vacuumizes
+vacuumizing
+vacuums
+vadodara
+vadose
+Vaduz
+VAG
+vagabond
+vagabond's
+vagabondage
+vagabondish
+vagabondism
+vagabondize
+vagabondizer
+vagabondizers
+vagabondizes
+vagabonds
+vagal
+vagally
+vagaries
+vagarious
+vagariously
+vagary
+vagary's
+vagile
+vagility
+vagina
+vagina's
+vaginal
+vaginally
+vaginas
+vaginate
+vaginectomy
+vaginismus
+vaginitis
+vagotomy
+vagotonia
+vagotonic
+vagotropic
+vagrancy
+vagrant
+vagrantize
+vagrantizes
+vagrantly
+vagrants
+vague
+vaguely
+vagueness
+vaguer
+vaguest
+vagus
+vahana
+Vail
+vain
+vainglorious
+vaingloriously
+vaingloriousness
+vainglory
+vainly
+vainness
+Vaishnava
+vaisya
+valais
+valance
+valanced
+valances
+valdai
+valdemar
+valdivia
+vale
+vale's
+valediction
+valedictorian
+valedictorian's
+valedictory
+valence
+valence's
+valences
+Valencia
+Valenciennes
+valencies
+valency
+valens
+valentine
+valentine's
+valentines
+Valentinian
+valera
+valerian
+valerianaceous
+valeric
+Valerie
+Valery
+Valery's
+vales
+valet
+valet's
+valeta
+valets
+valetta
+valetudinarian
+valetudinarianism
+valetudinary
+valgus
+Valhalla
+valiance
+valiancy
+valiant
+valiantly
+valiantness
+valid
+validate
+validated
+validates
+validating
+validation
+validations
+validity
+validly
+validness
+valine
+valise
+valises
+Valjakka
+Valkyrie
+valladolid
+vallation
+valle
+vallecula
+vallecular
+Valletta
+Valletta's
+valley
+valley's
+valleys
+vallombrosa
+Valois
+valona
+valonia
+valor
+valor's
+valorization
+valorization's
+valorizations
+valorize
+valorized
+valorizes
+valorizing
+valorous
+valorously
+valors
+Valparaiso
+valuable
+valuableness
+valuables
+valuably
+valuate
+valuated
+valuates
+valuating
+valuation
+valuation's
+valuational
+valuationally
+valuations
+valuator
+valuators
+value
+valued
+valueless
+valuelessness
+valuer
+valuers
+values
+valuing
+valuta
+valvate
+valve
+valve's
+valved
+valves
+valving
+valvular
+valvule
+valvulitis
+vambrace
+vamoose
+vamoosed
+vamooses
+vamoosing
+vamp
+vamper
+vampire
+vampires
+vampirism
+vampirize
+vampirizes
+vampish
+van
+van's
+vanadate
+vanadic
+vanadinite
+vanadium
+vanadous
+vanaspati
+vanbrugh
+Vance
+Vancement
+Vancouver
+Vanda
+vandal
+vandalism
+vandalistic
+vandalization
+vandalization's
+vandalizations
+vandalize
+vandalized
+vandalizes
+vandalizing
+vandals
+Vandenberg
+Vanderbilt
+vanderburgh
+Vanderburgh
+Vanderpoel
+Vanderpoel's
+Vandyke
+vandyked
+vane
+vane's
+vaned
+vanes
+Vanessa
+Vanessa's
+vang
+vanguard
+vanguardism
+vanguardist
+vanilla
+vanillic
+vanillin
+Vanir
+vanish
+vanished
+vanisher
+vanishes
+vanishing
+vanishingly
+vanities
+vanity
+vanquish
+vanquishable
+vanquished
+vanquisher
+vanquishes
+vanquishing
+vanquishment
+vans
+vansittart
+vantage
+vantages
+vanua
+Vanuatu
+vanward
+vanzetti
+vapid
+vapidity
+vapidly
+vapidness
+vapor
+vapor's
+vaporabilities
+vaporability
+vaporability's
+vaporable
+vaporable's
+vaporables
+vapored
+vaporer
+vaporer's
+vaporers
+vaporescence
+vaporetto
+vaporier
+vaporiest
+vaporific
+vaporimeter
+vaporing
+vaporing's
+vaporingly
+vaporings
+vaporish
+vaporishness
+vaporizable
+vaporizable's
+vaporizables
+vaporization
+vaporization's
+vaporizations
+vaporize
+vaporized
+vaporizer
+vaporizers
+vaporizes
+vaporizing
+vaporless
+vaporlesses
+vaporlike
+vaporlike's
+vaporlikes
+vaporous
+vaporously
+vaporousness
+vapors
+vapory
+vaquero
+VAR
+vara
+varactor
+Varady
+varanasi
+Varangian
+vardar
+vardon
+varec
+varese
+Varga
+vargas
+varia
+variability
+variable
+variable's
+variableness
+variables
+variablity
+variably
+variac
+Varian
+variance
+variance's
+variances
+variant
+variantly
+variants
+variate
+variated
+variates
+variating
+variation
+variation's
+variational
+variationally
+variations
+varicella
+varicellate
+varicelloid
+varices
+varicocele
+varicolored
+varicolored's
+varicoloreds
+varicose
+varicosed
+varicosis
+varicosity
+varicotomy
+varied
+variedly
+variegate
+variegated
+variegation
+variegator
+varier
+varies
+varietal
+varietally
+varieties
+variety
+variety's
+variform
+variocoupler
+variola
+variolate
+variole
+variolite
+varioloid
+variolous
+variometer
+variometer's
+variometers
+variorum
+various
+variously
+variousness
+variscite
+varisized
+varistor
+Varitype
+Varitype's
+varityper
+Varityping
+varix
+varlet
+varletry
+varmint
+varna
+varnish
+varnish's
+varnished
+varnisher
+varnishers
+varnishes
+varnishing
+varnishy
+varro
+varsity
+Varuna
+varus
+varve
+varved
+vary
+varying
+varyingly
+varyings
+vas
+vasal
+vasari
+vasco
+vascular
+vascularity
+vascularization
+vascularization's
+vascularizations
+vascularize
+vascularized
+vascularizes
+vascularizing
+vasculature
+vasculum
+vase
+vase's
+vasectomies
+vasectomy
+vaselike
+Vaseline
+vases
+vashti
+vasiform
+vasoactive
+vasoactivity
+vasoconstriction
+vasoconstrictive
+vasoconstrictor
+vasodilatation
+vasodilation
+vasodilator
+vasoinhibitor
+vasomotor
+vasopressin
+vasopressor
+vasoregulatory
+vasospasm
+vasospastic
+vasotocin
+Vasquez
+Vasquez's
+vassal
+vassalage
+vassalization
+vassalize
+vassalized
+vassalizes
+vassalizing
+vassals
+Vassar
+Vassar's
+vast
+vaster
+vastest
+vastitude
+vastity
+vastly
+vastness
+vasty
+vat
+vat's
+vatic
+Vatican
+Vaticanism
+Vaticanization
+Vaticanization's
+Vaticanizations
+Vaticanize
+Vaticanizes
+vaticide
+vaticinal
+vaticinate
+vaticination
+vaticinator
+vats
+vatted
+vatting
+vauban
+vaucluse
+vaud
+vaudeville
+vaudevillian
+Vaudois
+Vaughan
+Vaughan's
+Vaughn
+vault
+vaulted
+vaulter
+vaulting
+vaults
+vaulty
+vaunt
+vaunted
+vaunter
+vauntful
+vauntingly
+vaunty
+vav
+vavasor
+vaward
+Vax
+VAX
+Vax's
+VCR
+VDU
+veal
+vealer
+vealing
+vealy
+Veasy
+Veblen
+vectograph
+vectographic
+vector
+vector's
+vectorcardiogram
+vectorcardiogram's
+vectorcardiograms
+vectorcardiographic
+vectorcardiography
+vectored
+vectorial
+vectoring
+vectorizable
+vectorization
+vectorize
+vectorized
+vectorizer
+vectorizers
+vectorizes
+vectorizing
+vectors
+Veda
+Veda's
+Vedalia
+Vedanta
+Vedda
+Veddoid
+Vedernikov
+vedette
+Vedic
+vee
+veep
+veer
+veered
+veeries
+veering
+veeringly
+veers
+veery
+veg
+Vega
+vegan
+Veganism
+Vegas
+vegetable
+vegetable's
+vegetables
+vegetablize
+vegetablizes
+vegetably
+vegetal
+vegetarian
+vegetarian's
+vegetarianism
+vegetarians
+vegetate
+vegetated
+vegetates
+vegetating
+vegetation
+vegetational
+vegetationally
+vegetative
+vegetatively
+vegetativeness
+vegete
+vegetive
+vehemence
+vehement
+vehemently
+vehicle
+vehicle's
+vehicles
+vehicular
+veii
+veil
+veiled
+veiling
+veils
+vein
+veinal
+veined
+veiner
+veining
+veinlet
+veins
+veinstone
+veinule
+veiny
+vela
+velamen
+velamentous
+velamina
+velar
+velarium
+velarization
+velarize
+velarized
+velarizes
+velarizing
+Velasquez
+velate
+velcro
+veld
+veldskoen
+veldt
+veldt's
+veldts
+veleta
+veliger
+velitation
+velites
+Vella
+Vella's
+velleity
+vellicate
+vellore
+vellum
+veloce
+velocimeter
+velocimeter's
+velocimeters
+velocipede
+velocities
+velocity
+velocity's
+velodrome
+velopment
+velour
+velours
+Velsen
+velum
+velure
+velutinous
+velvet
+velveteen
+velvety
+vena
+venae
+venal
+venality
+venalization
+venalization's
+venalizations
+venalize
+venalizes
+venally
+venatic
+venation
+venational
+vend
+Venda
+vendable
+vendace
+vendaces
+vendee
+vender
+vendetta
+vendibility
+vendible
+vendibly
+vending
+vendition
+vendor
+vendor's
+vendors
+vendue
+veneeal
+veneer
+veneerer
+veneering
+venenate
+venenation
+venenose
+venepuncture
+venerability
+venerable
+venerableness
+venerably
+venerate
+venerated
+venerates
+venerating
+veneration
+venerations
+venerator
+venereal
+venereological
+venereologist
+venereology
+venerology
+venery
+venesection
+Veneti
+Venetia
+venetian
+Venetian
+Venetian's
+Venetians
+Venetic
+Veneto
+Veneto's
+Venezia
+Venezuela
+Venezuelan
+venge
+vengeance
+vengeful
+vengefully
+vengefulness
+venging
+venial
+venially
+venialness
+Venice
+venin
+venipuncture
+venire
+venireman
+venisection
+venison
+Venizelos
+venlo
+Venn
+venography
+venom
+venomization
+venomization's
+venomizations
+venomize
+venomizes
+venomous
+venomously
+venomousness
+Venora
+venose
+venosity
+venous
+venously
+vent
+ventage
+ventail
+vented
+venter
+ventilate
+ventilated
+ventilates
+ventilating
+ventilation
+ventilations
+ventilative
+ventilator
+ventilatory
+venting
+ventless
+ventral
+ventrally
+ventricle
+ventricle's
+ventricles
+ventricose
+ventricular
+ventriculus
+ventriloquial
+ventriloquially
+ventriloquism
+ventriloquist
+ventriloquist's
+ventriloquistic
+ventriloquists
+ventriloquize
+ventriloquized
+ventriloquizes
+ventriloquizing
+ventriloquy
+ventris
+ventrolateral
+ventrolaterally
+ventromedial
+vents
+Ventura
+ventura
+Ventura's
+venture
+ventured
+venturer
+venturers
+ventures
+venturesome
+venturesomely
+venturesomeness
+venturi
+venturing
+venturings
+venturis
+venturous
+venturously
+venturousness
+venue
+venue's
+venues
+venule
+Venus
+Venusberg
+Venusian
+Venusians
+Vera
+veracious
+veraciously
+veraciousness
+veracity
+Veracruz
+veranda
+veranda's
+verandaed
+verandah
+verandahed
+verandas
+veratrine
+veratrum
+verb
+verb's
+verbal
+verbalism
+verbalist
+verbalistic
+verbalization
+verbalization's
+verbalizations
+verbalize
+verbalized
+verbalizer
+verbalizers
+verbalizes
+verbalizing
+verbally
+verbatim
+verbena
+verbenaceous
+verbenas
+verbiage
+verbicide
+verbid
+verbify
+verbigeration
+verbile
+verbose
+verbosely
+verboseness
+verbosity
+verbs
+vercelli
+vercingetorix
+verdancy
+verdant
+verdantly
+Verde
+Verde's
+Verderer
+verderer
+verderor
+Verdi
+Verdi's
+verdict
+verdicts
+verdigris
+verdin
+verdun
+verdure
+verdured
+verdurous
+verdurousness
+verecund
+vereeniging
+verge
+vergeboard
+verger
+verges
+vergil
+Vergil
+verglas
+veridic
+veridical
+veridicality
+veridically
+verier
+veriest
+verifiability
+verifiable
+verifiableness
+verifiably
+verification
+verifications
+verified
+verifier
+verifier's
+verifiers
+verifies
+verify
+verifying
+verily
+verisimilar
+verisimilarly
+verisimilitude
+verisimilitudinous
+verism
+verismo
+verist
+veristic
+veritable
+veritableness
+veritably
+verity
+verjuice
+verkrampte
+Verlag
+verlaine
+verligte
+vermeer
+vermeil
+vermeiled
+vermeiles
+vermeiling
+vermian
+vermicelli
+vermicide
+vermicular
+vermiculate
+vermiculated
+vermiculation
+vermiculite
+vermiform
+vermifuge
+vermilion
+vermilionize
+vermilionizes
+vermillion
+vermin
+vermination
+verminosis
+verminous
+verminously
+vermis
+vermivorous
+Vermont
+vermouth
+Vern
+vern
+Verna
+Verna's
+vernacle
+vernacular
+vernacularism
+vernacularization
+vernacularization's
+vernacularizations
+vernacularize
+vernacularizes
+vernacularly
+vernal
+vernalization
+vernalization's
+vernalizations
+vernalize
+vernalized
+vernalizes
+vernalizing
+vernally
+vernation
+Verne
+vernicle
+vernier
+vernissage
+Vernoleninsk
+Vernon
+verny
+Verona
+Veronal
+Veronese
+Veronica
+verrazano
+Verrett
+verrocchio
+verruca
+verrucae
+verrucose
+versa
+versabraille
+Versailles
+versal
+versant
+versatec
+Versatec
+Versatec's
+versatile
+versatilely
+versatileness
+versatility
+verse
+versed
+verseman
+verser
+verses
+verset
+versicle
+versicolor
+versicolored
+versicular
+versification
+versifier
+versify
+versine
+versing
+version
+versional
+versionize
+versionizes
+versions
+verso
+versos
+verst
+versus
+vert
+vertebra
+vertebrae
+vertebral
+vertebrally
+vertebrate
+vertebrate's
+vertebrates
+vertebration
+vertex
+vertexes
+vertical
+verticality
+vertically
+verticalness
+verticals
+vertices
+verticil
+verticillaster
+verticillate
+verticillte
+vertiginous
+vertiginously
+vertigo
+vertu
+Vertumnus
+verulamium
+vervain
+verve
+vervet
+verwoerd
+very
+vesalius
+vesical
+vesicant
+vesicate
+vesication
+vesicle
+vesicles
+vesicular
+vesicularity
+vesicularly
+vesiculate
+vesiculation
+vespasian
+vesper
+vesperal
+vespers
+vespertilionine
+vespertinal
+vespertine
+vespiary
+vespid
+vespine
+vespucci
+vessel
+vessel's
+vessels
+vest
+vesta
+vestal
+vestally
+vested
+vestee
+vestiary
+vestibular
+vestibule
+vestibuled
+vestige
+vestige's
+vestiges
+vestigial
+vestigially
+vesting
+vestlike
+vestment
+vestmental
+vestments
+vestries
+vestry
+vestryize
+vestryizes
+vestryman
+vests
+vesture
+vestured
+vestures
+vesturing
+vesuvian
+vesuvianite
+Vesuvius
+vesuvius
+vet
+vetch
+vetchling
+veteran
+veteran's
+veteranize
+veteranizes
+veterans
+veterinarian
+veterinarian's
+veterinarians
+veterinary
+vetiver
+veto
+vetoed
+vetoer
+vetoes
+vetoing
+vetted
+vetting
+vex
+vexation
+vexatious
+vexatiously
+vexatiousness
+vexed
+vexedly
+vexes
+vexillary
+vexillologic
+vexillological
+vexillologist
+vexillology
+vexillum
+vexing
+VGA
+VHF
+vi
+vi's
+via
+viability
+viable
+viably
+viaduct
+viaducts
+vial
+vial's
+vialed
+vialing
+vials
+viand
+viands
+viareggio
+viaticum
+viator
+vibes
+vibist
+vibraculum
+vibraharp
+vibraharpist
+vibrance
+vibrancy
+vibrant
+vibrantly
+vibraphone
+vibraphonist
+vibrate
+vibrated
+vibrates
+vibratile
+vibratility
+vibrating
+vibration
+vibrational
+vibrationless
+vibrations
+vibrato
+vibrator
+vibratory
+vibrio
+vibrion
+vibrionic
+vibriosis
+vibrissa
+vibrissae
+vibronic
+viburnum
+Vic
+vic
+Vic's
+vicar
+vicarage
+vicarate
+vicarial
+vicariate
+vicarious
+vicariously
+vicariousness
+vicarship
+vice
+vice's
+vicegerency
+vicegerent
+vicenary
+vicennial
+vicenza
+viceregal
+viceregally
+vicereine
+viceroy
+viceroyalty
+viceroyship
+vices
+Vichy
+Vichy's
+vichyssoise
+vicinage
+vicinal
+vicing
+vicinities
+vicinity
+vicious
+viciously
+viciousness
+vicissitude
+vicissitude's
+vicissitudes
+vicissitudinous
+Vickers
+vickers
+Vickie
+Vickie's
+Vicksburg
+Vicksburg's
+Vicky
+Vicky's
+vico
+vicomte
+victim
+victim's
+victimizable
+victimizable's
+victimizables
+victimization
+victimization's
+victimizations
+victimize
+victimized
+victimizer
+victimizers
+victimizes
+victimizing
+victims
+victor
+victor's
+Victoria
+Victoria's
+Victorian
+victoriana
+Victorianize
+Victorianizes
+Victorians
+victories
+victorious
+victoriously
+victoriousness
+victors
+victory
+victory's
+victress
+Victrola
+Victrola's
+Victrolas
+victual
+victualage
+victualed
+victualer
+victualers
+victualess
+victualing
+victuals
+vicuna
+Vida
+Vida's
+Vidal
+vidal
+Vidal's
+vide
+videlicet
+video
+videophone
+videos
+videotape
+videotape's
+videotaped
+videotapes
+videotaping
+videotex
+vidette
+vidhan
+vidicon
+viduity
+vie
+vied
+Vienna
+Vienna's
+vienne
+Viennese
+Viennese's
+Vientiane
+Vientiane's
+vier
+Vierne
+vies
+Viet
+Vietcong
+Vietminh
+Vietnam
+Vietnam's
+Vietnamese
+Vietnamese's
+Vietnamization
+Vietnamize
+Vietnamized
+Vietnamizes
+Vietnamizing
+view
+viewable
+viewed
+viewer
+viewers
+viewfinder
+viewfinder's
+viewfinders
+viewgraph
+viewgraph's
+viewgraphes
+viewing
+viewings
+viewless
+viewlessly
+viewpoint
+viewpoint's
+viewpoints
+viewport
+viewport's
+viewports
+views
+viewscan
+viewy
+vigesimal
+vigil
+vigilance
+vigilant
+vigilante
+vigilante's
+vigilantes
+vigilantism
+vigilantly
+vigintillion
+vignette
+vignette's
+vignetted
+vignetter
+vignettes
+vignetting
+vignettist
+vignola
+vigny
+vigo
+vigor
+vigor's
+vigorish
+vigorist
+vigorist's
+vigorists
+vigorless
+vigoroso
+vigorous
+vigorously
+vigorousness
+vigors
+Vihuela
+vii
+viii
+Viipuri
+Vijayawada
+Viking
+Vikings
+Vikram
+Vilayet
+vile
+vilely
+vileness
+viler
+vilest
+vilification
+vilifications
+vilified
+vilifier
+vilifies
+vilify
+vilifying
+vilipend
+villa
+villa's
+Villach
+villadom
+village
+village's
+villager
+villagers
+villagery
+villages
+Villahermosa
+villain
+villain's
+Villainage
+villainess
+villainous
+villainously
+villainousness
+villains
+villainy
+villanella
+villanelle
+Villanovan
+Villars
+villas
+villatic
+villein
+villenage
+Villeneuve
+Villeurbanne
+villi
+Villiers
+villiform
+Villon
+villosity
+villous
+villus
+Vilnius
+vim
+vimen
+Viminal
+vimineous
+vina
+vinaceous
+vinaigrette
+vinal
+vinasse
+vinblastine
+vinca
+Vince
+Vincennes
+Vincent
+Vincent's
+Vinci
+Vinci's
+vincible
+vincristine
+vinculum
+Vindhya
+vindicable
+vindicate
+vindicated
+vindicates
+vindicating
+vindication
+vindicative
+vindicator
+vindicators
+vindicatory
+vindictive
+vindictively
+vindictiveness
+vine
+vine's
+vineal
+vinedresser
+vinedressers
+vinegar
+vinegarette
+vinegarish
+vinegarroon
+vinegars
+vinegary
+Vineland
+vinery
+vines
+vineyard
+vineyard's
+vineyardist
+vineyards
+vinic
+viniculture
+vinier
+viniferous
+vinification
+vinificator
+vining
+Vinland
+vinnitsa
+vino
+vinosity
+vinous
+vinously
+Vinson
+vintage
+vintager
+vintages
+vintner
+viny
+vinyl
+vinylic
+vinylidene
+viol
+viola
+violability
+violable
+violableness
+violably
+violaceous
+violaceously
+violate
+violated
+violates
+violating
+violation
+violations
+violative
+violator
+violator's
+violators
+violence
+violent
+violently
+violet
+violet's
+violets
+violin
+violin's
+violinist
+violinist's
+violinists
+violins
+violist
+violoncello
+violone
+viomycin
+viosterol
+viper
+viper's
+viperine
+viperish
+viperous
+viperously
+vipers
+viraginous
+virago
+viral
+virally
+Virchow
+virelay
+viremia
+viremic
+viren
+vireo
+vires
+virescence
+virescent
+virga
+virgate
+Virgil
+Virgil's
+virgin
+virgin's
+virginal
+virginally
+Virginia
+Virginia's
+Virginian
+Virginians
+virginity
+virginium
+virgins
+Virgo
+Virgo's
+Virgos
+virgulate
+virgule
+virial
+viricidal
+viricide
+virid
+viridescent
+viridian
+viridity
+virile
+virilism
+virility
+virion
+virologic
+virological
+virologically
+virologist
+virology
+viroses
+virosis
+virtu
+virtual
+virtuality
+virtualize
+virtualizes
+virtually
+virtue
+virtue's
+virtueless
+virtues
+virtuosa
+virtuosi
+virtuosic
+virtuosity
+virtuoso
+virtuoso's
+virtuosos
+virtuous
+virtuously
+virtuousness
+virucidal
+virucide
+virulence
+virulency
+virulent
+virulently
+viruliferous
+virus
+virus's
+viruses
+virustatic
+vis
+visa
+visaed
+visage
+visaged
+visaing
+Visakhapatnam
+visas
+Visayan
+Visby
+viscacha
+viscera
+visceral
+viscerally
+viscerogenic
+visceromotor
+viscid
+viscidity
+viscidly
+viscoelastic
+viscoelasticity
+viscoid
+viscometer
+viscometer's
+viscometers
+viscometric
+viscometry
+Visconti
+viscose
+viscosimeter
+viscosimeter's
+viscosimeters
+viscosimetric
+viscosities
+viscosity
+viscount
+viscount's
+viscountcy
+viscountess
+viscounts
+viscounty
+viscous
+viscously
+viscousness
+viscus
+vise
+vised
+viselike
+Viseu
+Vishakhapatnam
+Vishinsky
+Vishnu
+visibilities
+visibility
+visible
+visibleness
+visibly
+Visigoth
+Visigoths
+vising
+vision
+vision's
+visional
+visionally
+visionariness
+visionary
+visioned
+visioning
+visionize
+visionizes
+visionless
+visions
+visit
+visitable
+visitant
+visitation
+visitation's
+visitational
+visitations
+visitatorial
+visited
+visiting
+visitor
+visitor's
+visitors
+visits
+visive
+visor
+visor's
+visored
+visorless
+visors
+vista
+vista's
+vistaed
+vistas
+vistula
+visual
+visualization
+visualization's
+visualizations
+visualize
+visualized
+visualizer
+visualizers
+visualizes
+visualizing
+visually
+visuals
+vita
+vitaceous
+vitae
+vital
+vitalism
+vitalist
+vitalistic
+vitality
+vitalization
+vitalization's
+vitalizations
+vitalize
+vitalized
+vitalizer
+vitalizers
+vitalizes
+vitalizing
+vitalizing's
+vitalizingly
+vitalizings
+vitally
+vitals
+vitamer
+vitameric
+vitamin
+vitamin's
+vitaminization
+vitaminize
+vitaminizes
+vitamins
+vitaphone
+vitascope
+Vitebsk
+vitellin
+vitelline
+vitellogenesis
+vitellus
+vitiate
+vitiated
+vitiates
+vitiating
+vitiation
+vitiator
+viticultural
+viticulture
+viticulturist
+vitiligo
+vitiosity
+vitite
+Vito
+Vito's
+vitoria
+vitrain
+vitreous
+vitreously
+vitreousness
+vitrescence
+vitrescent
+vitric
+vitrifiable
+vitrification
+vitriform
+vitrify
+vitrine
+vitriol
+vitriolic
+vitriolizable
+vitriolizable's
+vitriolizables
+vitriolization
+vitriolization's
+vitriolizations
+vitriolize
+vitriolizer
+vitriolizers
+vitriolizes
+vitro
+vitruvius
+vitta
+vittae
+vittate
+vittle
+vittles
+vituline
+vituperate
+vituperation
+vituperative
+vituperatively
+vituperator
+vituperatory
+Vitus
+vitus
+viva
+vivace
+vivacious
+vivaciously
+vivaciousness
+vivacity
+Vivaldi
+vivarium
+vive
+viverrid
+viverrine
+vivers
+Vivian
+vivid
+vividly
+vividness
+vivific
+vivification
+vivified
+vivifier
+vivify
+viviparity
+viviparous
+viviparously
+viviparousness
+vivisect
+vivisection
+vivisectional
+vivisectionally
+vivisectionist
+vivisector
+vivo
+vixen
+vixenish
+vixenishly
+vixenishness
+viyella
+viz
+Vizagapatam
+vizard
+Vizcacha
+vizier
+vizierate
+vizierial
+viziership
+vizor
+Vizsla
+Vlaardingen
+Vlach
+Vladikavkaz
+Vladimir
+Vladivostok
+Vlaminck
+Vlei
+VLF
+Vlissingen
+VLSI
+Vltava
+VMS
+vms
+VMS's
+vocable
+vocabular
+vocabularian
+vocabularianism
+vocabularies
+vocabulary
+vocal
+vocalic
+vocalically
+vocalism
+vocalist
+vocalists
+vocality
+vocalization
+vocalization's
+vocalizations
+vocalize
+vocalized
+vocalizer
+vocalizers
+vocalizes
+vocalizing
+vocally
+vocals
+vocate
+vocation
+vocation's
+vocational
+vocationalism
+vocationalist
+vocationalization
+vocationalization's
+vocationalizations
+vocationalize
+vocationalizes
+vocationally
+vocations
+vocative
+vocatively
+vociferant
+vociferate
+vociferation
+vociferator
+vociferous
+vociferously
+vociferousness
+vocoded
+vocoder
+vodka
+vodka's
+Voetsek
+Voetstoots
+Vogel
+Vogelweide
+vogue
+voguish
+voguishness
+Vogul
+voice
+voiceband
+voiced
+voicedness
+voiceful
+voicefulness
+voiceless
+voicelessly
+voicelessness
+voiceprint
+voicer
+voicers
+voices
+voicing
+void
+voidable
+voidableness
+voidage
+voidance
+voided
+voider
+voiding
+voidness
+voids
+voila
+voile
+voiotia
+voir
+voix
+vojvodina
+Vol
+Volans
+volant
+volante
+Volapuk
+volar
+volatile
+volatileness
+volatiles
+volatilities
+volatility
+volatilizable
+volatilizable's
+volatilizables
+volatilization
+volatilization's
+volatilizations
+volatilize
+volatilized
+volatilizer
+volatilizers
+volatilizes
+volatilizing
+volcanic
+volcanically
+volcanicity
+volcanism
+volcano
+volcano's
+volcanoes
+volcanologic
+volcanological
+volcanologist
+volcanology
+volcanos
+vole
+voles
+Volga
+Volgograd
+volitant
+volition
+volitional
+volitionality
+volitionally
+volitive
+volkslied
+volkslieder
+Volkswagen
+Volkswagens
+volley
+volleyball
+volleyball's
+volleyballs
+volleyed
+volleyer
+volleying
+volleys
+vologda
+volost
+volplane
+volplaned
+volplaning
+Volsci
+Volscian
+Volstead
+volsung
+volsunga
+volt
+Volta
+voltage
+voltages
+voltaic
+Voltaire
+voltaism
+voltameter
+voltameter's
+voltameters
+voltametric
+voltammeter
+Volterra
+Volterra's
+voltize
+voltizes
+voltmeter
+voltmeter's
+voltmeters
+volts
+volturno
+volubility
+voluble
+volubleness
+volubly
+volume
+volume's
+volumed
+volumes
+volumeter
+volumeter's
+volumeters
+volumetric
+volumetrically
+voluming
+voluminosity
+voluminous
+voluminously
+voluminousness
+voluntarily
+voluntariness
+voluntarism
+voluntarist
+voluntaristic
+voluntary
+voluntaryism
+voluntaryist
+volunteer
+volunteered
+volunteering
+volunteerism
+volunteers
+voluptuary
+voluptuous
+voluptuously
+volute
+voluted
+volutin
+volution
+volva
+volvement
+Volvo
+volvox
+volvulus
+vomer
+vomerine
+vomit
+vomited
+vomiter
+vomiting
+vomitory
+vomits
+vomiturition
+vomitus
+Von
+von
+voodoo
+voodooism
+voodooist
+voodooistic
+voodoos
+voortrekker
+voracious
+voraciously
+voraciousness
+voracity
+Vorarlberg
+vored
+Voronezh
+Voroshilov
+Voroshilovgrad
+Voroshilovsk
+vorster
+vortex
+vortexes
+vortical
+vortically
+vorticella
+vortices
+vorticism
+vorticist
+vorticity
+vorticose
+vortiginous
+Vortumnus
+vosges
+Voss
+vostok
+votaress
+votarist
+votary
+vote
+voted
+voteless
+voter
+voters
+votes
+voting
+votive
+votively
+votiveness
+votress
+Votyak
+vouch
+vouchee
+voucher
+vouchers
+vouches
+vouching
+vouchsafe
+vouchsafed
+vouchsafement
+vouchsafes
+vouchsafing
+vouge
+Vought
+Vought's
+voussoir
+Vouvray
+vow
+vowed
+vowel
+vowel's
+vowelization
+vowelization's
+vowelizations
+vowelize
+vowelized
+vowelizes
+vowelizing
+vowels
+vower
+vowing
+vows
+vox
+voyage
+voyaged
+voyager
+voyagers
+voyages
+voyageur
+voyageurs
+voyaging
+voyagings
+voyeur
+voyeurism
+voyeuristic
+voyeuristically
+voyeurs
+Vreeland
+Vreeland's
+Vries
+vroom
+vs
+VT
+VTOL
+Vuelta
+vuillard
+Vulcan
+vulcanian
+vulcanicity
+Vulcanism
+Vulcanite
+vulcanizable
+vulcanizable's
+vulcanizables
+vulcanizate
+vulcanization
+vulcanization's
+vulcanizations
+vulcanize
+vulcanized
+vulcanizer
+vulcanizers
+vulcanizes
+vulcanizing
+vulcanologist
+vulcanology
+vulgar
+vulgarian
+vulgaris
+vulgarism
+vulgarity
+vulgarization
+vulgarization's
+vulgarizations
+vulgarize
+vulgarized
+vulgarizer
+vulgarizers
+vulgarizes
+vulgarizing
+vulgarly
+vulgate
+vulgus
+vulnerabilities
+vulnerability
+vulnerable
+vulnerableness
+vulnerably
+vulnerary
+Vulpecula
+vulpine
+vulterine
+vulture
+vulture's
+vulturelike
+vultures
+vulturine
+vulturous
+vulva
+vulvae
+vulval
+vulvar
+vulviform
+vulvitis
+vulvovaginitis
+Vyatka
+vyborg
+vying
+Vyshinsky
+Vyvyan
+WA
+WAAC
+WAAF
+Waals
+Waart
+Wabash
+wabble
+wabbled
+wabbles
+wabbling
+WAC
+wace
+wackier
+wackily
+wackiness
+wacko
+wacko's
+wackos
+wacky
+Waco
+wad
+wadable
+wadai
+wadded
+Waddenzee
+wadder
+waddie
+waddied
+waddies
+wadding
+Waddington
+waddle
+waddled
+waddler
+waddles
+waddling
+waddy
+waddying
+wade
+Wade's
+wadeable
+waded
+wader
+waders
+wades
+wadi
+wading
+wadmal
+wads
+wadset
+Wadsworth
+Wadsworth's
+wafer
+wafer's
+wafered
+wafering
+wafers
+waffle
+waffle's
+waffled
+waffles
+waffling
+waft
+waftage
+wafter
+wafture
+wag
+wage
+waged
+wageless
+wager
+wagered
+wagerer
+wagering
+wagers
+wages
+wageworker
+wagged
+wagger
+waggery
+wagging
+waggish
+waggishly
+waggishness
+waggle
+waggled
+waggles
+waggling
+waggly
+waging
+Wagner
+Wagnerian
+Wagnerize
+Wagnerizes
+wagon
+wagon's
+wagoneer
+wagoneer's
+wagoneers
+wagoner
+wagoner's
+wagoners
+wagonette
+wagonette's
+wagonettes
+wagonload
+wagonload's
+wagonloads
+wagons
+wagram
+wags
+wagtail
+wah
+Wahhabi
+wahine
+Wahl
+Wahl's
+wahoo
+wahoos
+waif
+Waikato
+Waikiki
+wail
+wailed
+wailer
+wailful
+wailfully
+wailing
+wails
+wain
+wained
+wainscot
+wainscoted
+wainscoting
+wainscots
+wainscotting
+Wainwright
+waist
+waist's
+waistband
+waistcloth
+waistcoat
+waistcoat's
+waistcoated
+waistcoats
+waisted
+waister
+waistline
+waists
+wait
+Waite
+Waite's
+waited
+waiter
+waiter's
+waiters
+waiting
+waitress
+waitress's
+waitresses
+waits
+waive
+waived
+waiver
+waiverable
+waivers
+waives
+waiving
+Wajda
+Wakashan
+Wakayama
+wake
+waked
+Wakefield
+wakeful
+wakefully
+wakefulness
+wakeless
+waken
+wakened
+wakener
+wakening
+waker
+Wakerife
+wakerobin
+wakes
+wakeup
+waking
+Waksman
+Walach
+Walachia
+Walbridge
+Walbrzych
+Walcheren
+Walcott
+Waldemar
+Walden
+Waldenburg
+Waldensian
+Waldgrave
+Waldheim
+Waldo
+Waldorf
+Waldron
+Waldron's
+wale
+waler
+wales
+Waley
+walfish
+Walford
+Walgreen
+walhalla
+waling
+walk
+walkable
+walkabout
+walkaway
+walked
+walker
+walkers
+walkie
+walking
+walkingstick
+walkley
+walkout
+walkover
+walks
+walkway
+walkway's
+walkways
+wall
+wall's
+wallaby
+Wallace
+Wallachia
+wallah
+wallaroo
+wallasey
+wallboard
+walled
+Wallenstein
+wallenstein
+waller
+wallet
+wallet's
+wallets
+walleye
+walleyed
+wallflower
+wallies
+walling
+Wallis
+Walloon
+wallop
+walloped
+walloper
+walloping
+wallops
+wallow
+wallowed
+wallower
+wallowing
+wallows
+wallpaper
+wallpapers
+walls
+Wallsend
+wally
+Wally's
+walnut
+walnut's
+walnuts
+Walpole
+Walpurgis
+walrus
+walrus's
+walruses
+Walsall
+Walsh
+Walsingham
+Walt
+Walter
+Walters
+Waltham
+Waltham's
+Walther
+Walton
+waltz
+waltzed
+waltzer
+waltzes
+waltzing
+Walvis
+Walworth
+wamble
+wambled
+wambling
+wame
+wampum
+wan
+Wand
+wand
+wander
+wandered
+wanderer
+wanderers
+wandering
+wanderings
+wanderlust
+wanderoo
+wanders
+wandoo
+Wandsworth
+wane
+waned
+wanes
+waney
+Wang
+wanganui
+wangle
+wangled
+wangler
+wangles
+wangling
+wanhsien
+wanier
+waning
+wank
+wankel
+wankie
+wanly
+wanna
+wanner
+wanness
+wannest
+wanning
+Wansee
+wansee
+wansley
+Wansley
+want
+wanted
+wanter
+wanting
+wanton
+wantoner
+wantonly
+wantonness
+wants
+wany
+Wapentake
+wapiti
+wapitis
+Wappenshaw
+Wappinger
+Wappinger's
+war
+war's
+Waragi
+Warangal
+waratah
+Warbeck
+warble
+warbled
+warbler
+warbles
+warbling
+warbonnet
+Warburton
+ward
+Ward
+warded
+warden
+wardens
+wardenship
+warder
+wardership
+wardian
+warding
+wardle
+wardmote
+wardress
+wardrobe
+wardrobe's
+wardrobes
+wardroom
+wardrooms
+wards
+wardship
+ware
+warehouse
+warehoused
+warehouseman
+warehousemen
+warehouser
+warehouses
+warehousing
+wareroom
+wares
+warfare
+Warfarin
+Warfield
+Warfield's
+warhead
+warheads
+Warhol
+warhorse
+warhorses
+warier
+wariest
+warily
+wariness
+waring
+Warison
+warless
+Warley
+warlike
+warlock
+warlord
+warlordism
+warlords
+warm
+warmed
+warmer
+warmers
+warmest
+warmhearted
+warmheartedly
+warmheartedness
+warming
+warmish
+warmly
+warmness
+warmonger
+warmongering
+warmongers
+warms
+warmth
+warmup
+warn
+warned
+warner
+warning
+warningly
+warnings
+Warnock
+Warnock's
+warns
+warp
+warp's
+warpage
+warpath
+warped
+warper
+warping
+warplane
+warplane's
+warplanes
+warps
+warrant
+warrantable
+warrantableness
+warrantably
+warranted
+warrantee
+warrantees
+warranter
+warranties
+warranting
+warrantless
+warrantor
+warrantors
+warrants
+warranty
+warranty's
+warred
+warren
+Warren
+warrener
+warreners
+warrens
+warrigal
+warring
+Warrington
+warrior
+warrior's
+warriors
+wars
+Warsaw
+Warsaw's
+warship
+warship's
+warships
+warsle
+wart
+wart's
+warta
+Wartburg
+warted
+wartime
+wartimes
+warts
+warty
+Warwick
+Warwick's
+Warwickshire
+wary
+was
+Wasatch
+wash
+washability
+washable
+washaway
+washbasin
+washboard
+washbowl
+Washburn
+washcloth
+washcloths
+washday
+washdays
+washed
+washer
+washerman
+washers
+washerwoman
+washerwomen
+washery
+washes
+washhouse
+washier
+washin
+washing
+washings
+Washington
+Washington's
+washoe
+Washoe
+washout
+washrag
+washroom
+washrooms
+washstand
+washstands
+washtub
+washtubs
+washwoman
+washwomen
+washy
+wasn't
+wasp
+wasp's
+waspish
+waspishly
+waspishness
+wasplike
+wasps
+wassail
+wassailer
+Wasserman
+wassermann
+wast
+wastage
+wastages
+waste
+wastebasket
+wastebaskets
+wasted
+wasteful
+wastefully
+wastefulness
+wasteland
+wastelands
+wastepaper
+waster
+wastes
+wastewater
+wasteweir
+wasting
+wastingly
+wastrel
+wastrels
+Watanabe
+Watanabe's
+watap
+watch
+watchband
+watchcase
+watchdog
+watched
+watcher
+watchers
+watches
+watcheye
+watchful
+watchfully
+watchfulness
+watching
+watchings
+watchmake
+watchmaker
+watchmakers
+watchmaking
+watchman
+watchmen
+watchpoints
+watchstrap
+watchtower
+watchword
+watchword's
+watchwords
+watchworks
+water
+waterage
+waterborne
+waterbrain
+waterbuck
+Waterbury
+watercolor
+watercolor's
+watercolored
+watercoloring
+watercolorist
+watercolorists
+watercolors
+watercourse
+watercraft
+watercress
+watered
+waterer
+waterfall
+waterfall's
+waterfalls
+waterflood
+Waterford
+waterfowl
+waterfowl's
+waterfowler
+waterfront
+Watergate
+waterhole
+waterhole's
+waterholes
+Waterhouse
+waterily
+wateriness
+watering
+waterings
+waterish
+waterishness
+waterless
+waterlessly
+waterlessness
+waterline
+waterlines
+waterlog
+waterlogged
+waterloo
+waterman
+watermanship
+watermark
+watermelon
+waterpower
+waterproof
+waterproofed
+waterproofer
+waterproofing
+waterproofness
+waterproofs
+waters
+waterscape
+watershed
+watersheds
+waterside
+watersider
+waterspout
+watertight
+watertightness
+watertower
+Watertown
+waterway
+waterway's
+waterways
+waterweed
+waterwheel
+waterworks
+waterworn
+watery
+Watford
+Watkins
+Watling
+Watson
+Watson's
+watt
+wattage
+wattages
+Watteau
+Wattenberg
+Wattenscheid
+Watterson
+wattle
+wattlebird
+wattled
+wattles
+wattling
+wattmeter
+wattmeter's
+wattmeters
+Watts
+watts
+Watusi
+Waugh
+waught
+Waukesha
+waukesha
+waul
+Waunona
+waunona
+Waupaca
+waupaca
+Waupun
+waupun
+Wausau
+wausau
+wauwatosa
+Wauwatosa
+wave
+waveband
+wavebands
+waved
+waveform
+waveform's
+waveforms
+wavefront
+wavefront's
+wavefronts
+wavefunction
+wavefunctions
+waveguide
+waveguides
+Waveland
+waveland
+wavelength
+wavelengths
+waveless
+wavelessly
+wavelet
+wavelets
+wavelike
+wavellite
+wavemeter
+wavenumber
+waveoff
+waver
+wavered
+waverer
+wavering
+waveringly
+wavers
+wavery
+waves
+wavier
+wavily
+waviness
+waving
+wavy
+waw
+wawa
+wawl
+wax
+waxberry
+waxbill
+waxed
+waxen
+waxer
+waxers
+waxes
+waxier
+waxiness
+waxing
+waxlike
+waxplant
+waxwing
+waxwing's
+waxwings
+waxwork
+waxworks
+waxy
+way
+way's
+waybill
+wayfarer
+wayfaring
+waygoing
+waylaid
+Wayland
+waylay
+wayless
+Wayne
+Waynesboro
+ways
+wayside
+waysides
+wayward
+waywardly
+waywardness
+wayworn
+wayzgoose
+waziristan
+we
+we'd
+we'll
+we're
+we've
+weak
+weaken
+weakened
+weakener
+weakening
+weakens
+weaker
+weakest
+weakfish
+weakhearted
+weakish
+weakliness
+weakling
+weakly
+weakness
+weakness's
+weaknesses
+weal
+weald
+wealth
+wealthier
+wealthiest
+wealthily
+wealthiness
+wealths
+wealthy
+wean
+weaned
+weaner
+weaning
+weanling
+weapon
+weapon's
+weaponed
+weaponeer
+weaponless
+weaponry
+weapons
+wear
+wearability
+wearable
+wearer
+wearied
+wearier
+wearies
+weariest
+weariful
+wearifully
+wearifulness
+weariless
+wearilessly
+wearily
+weariness
+wearing
+wearingly
+wearisome
+wearisomely
+wearisomeness
+wearproof
+wears
+weary
+wearying
+weasand
+weasel
+weasel's
+weaseled
+weaseling
+weasels
+weather
+weatherability
+weatherbeaten
+weatherboard
+weatherboarding
+weathercock
+weathercock's
+weathercocks
+weathered
+weatherer
+Weatherford
+weatherglass
+weathering
+weatherly
+weatherman
+weatherproof
+weatherproofness
+weathers
+weatherstrip
+weatherstripping
+weatherworn
+weathery
+weave
+weaver
+weaverbird
+weavers
+weaves
+weaving
+web
+web's
+Webb
+Webb's
+webbed
+Webber
+webber
+webbing
+webbs
+webby
+weber
+Webern
+webfoot
+weblike
+webs
+Webster
+Webster's
+Websterville
+webwheel
+wed
+wedded
+weddell
+wedder
+wedding
+wedding's
+weddings
+wedekind
+wedeling
+wedge
+wedged
+wedges
+wedging
+Wedgwood
+wedgy
+wedlock
+Wednesday
+Wednesday's
+Wednesdays
+weds
+wee
+weed
+weeded
+weeder
+weediness
+weeding
+weedkiller
+weedless
+weeds
+weedy
+week
+week's
+weekday
+weekday's
+weekdays
+weekend
+weekend's
+weekender
+weekends
+weeklies
+weekly
+weeknight
+weeknights
+weeks
+weelkes
+ween
+weeny
+weep
+weeped
+weeper
+weepers
+weeping
+weeps
+weepy
+weet
+weever
+weevil
+weeviled
+weevilly
+weevily
+weft
+wefts
+Wehr
+Wehr's
+Wei
+Wei's
+Weibull
+Weibull's
+weider
+Weider
+weidman
+Weidman
+Weierstrass
+Weigela
+weigh
+weighable
+weighbridge
+weighbridges
+weighed
+weigher
+weighing
+weighings
+weighs
+weight
+weighted
+weighter
+weightier
+weightily
+weightiness
+weighting
+weightings
+weightless
+weightlessly
+weightlessness
+weightlifter
+weightlifting
+weights
+weighty
+weihai
+Weikert
+Weikl
+Weill
+Weimar
+weimaraner
+Weinberg
+weiner
+Weiner
+Weinstein
+weir
+weird
+weirdie
+weirdies
+weirdly
+weirdness
+weirdo
+weirdos
+weirs
+Weisenheimer
+Weismannism
+Weiss
+Weisshorn
+Weissman
+Weissmuller
+Weizmann
+weka
+Welch
+Welcher
+Welches
+welcome
+welcomed
+welcomely
+welcomeness
+welcomer
+welcomes
+welcoming
+weld
+weldable
+welded
+welder
+welders
+welding
+weldings
+weldment
+Weldon
+weldor
+welds
+weldwood
+Weldwood
+welfare
+welfarism
+welfarist
+welkin
+welkom
+well
+welland
+wellaway
+wellbeing
+wellborn
+welled
+Weller
+Welles
+Wellesley
+wellesz
+wellhead
+wellies
+welling
+Wellingborough
+wellington
+Wellington
+Wellingtonia
+Wellman
+wellman
+wellness
+wells
+Wellsville
+wellwisher
+wellwisher's
+wellwishers
+Welmers
+welmers
+Welsbach
+welsh
+welsher
+Welshman
+welt
+welter
+weltered
+weltering
+welterweight
+Welton
+welts
+weltschmerz
+Welwitschia
+welwyn
+Wembley
+wen
+Wenceslaus
+wench
+wench's
+wencher
+wenches
+wend
+Wendell
+Wendish
+Wendy
+Wenkel
+Wensleydale
+went
+wentletrap
+Wentworth
+wept
+were
+weren't
+werewolf
+werewolf's
+werewolves
+Werner
+wernerite
+wersh
+wert
+Werther
+Werther's
+weser
+wesker
+weskit
+Wesley
+Wesleyan
+wessex
+Wesson
+west
+westbound
+Westbrook
+Westchester
+wester
+westered
+westering
+westerlies
+westerly
+western
+westerner
+westerners
+Westernism
+westernization
+westernization's
+westernizations
+westernize
+westernized
+westernizes
+westernizing
+westernmost
+Westfalen
+Westfield
+Westhampton
+westing
+Westinghouse
+Westmeath
+Westminster
+Westmore
+Westmorland
+westmost
+Weston
+Westphalia
+Westport
+westward
+westwards
+Westwood
+wet
+wetback
+wetland
+wetlands
+wetly
+wetness
+wets
+wettable
+wetted
+wetter
+Wetterhorn
+wettest
+wetting
+wettish
+Wexford
+Weyerhauser
+Weymouth
+WFF
+wff
+whack
+whacked
+whacker
+whacking
+whacko
+whacks
+whacky
+whale
+whaleback
+whaleboat
+whalebone
+whalebone's
+whalebones
+Whalen
+Whalen's
+whaler
+whales
+whaling
+wham
+whammies
+whamming
+whammy
+whang
+whangarei
+whangee
+whap
+whare
+wharf
+wharfage
+wharfie
+wharfinger
+wharfmaster
+wharfs
+Wharton
+wharve
+wharves
+what
+what'd
+what're
+what's
+whatchamacallit
+whatchamacallit's
+whatchamacallits
+whatever
+Whatley
+Whatley's
+whatnot
+whats
+whatsit
+whatsoever
+whaup
+wheal
+wheat
+wheatear
+wheaten
+Wheatland
+wheatland
+Wheaton
+wheaton
+Wheatstone
+wheatworm
+whee
+wheedle
+wheedled
+wheedles
+wheedling
+wheel
+wheelbarrow
+wheelbarrow's
+wheelbarrows
+wheelbase
+wheelchair
+wheelchair's
+wheeled
+wheeler
+wheelers
+wheelhorse
+wheelhouse
+wheelie
+wheeling
+wheelings
+wheelless
+wheelman
+wheelock
+Wheelock
+wheels
+wheelsman
+wheelwork
+wheelwright
+wheen
+wheeze
+wheezed
+wheezes
+wheezier
+wheezily
+wheeziness
+wheezing
+wheezy
+Whelan
+whelk
+Wheller
+whelm
+whelp
+when
+whenas
+whence
+whencesoever
+whenever
+whens
+whensoever
+where
+where'd
+where're
+where's
+whereabout
+whereabouts
+whereafter
+whereas
+whereat
+whereby
+wherefore
+wherefores
+wherefrom
+wherein
+whereinto
+whereness
+whereof
+whereon
+wheres
+wheresoever
+wheresomever
+wherethrough
+whereto
+whereunto
+whereupon
+wherever
+wherewith
+wherewithal
+wherries
+wherrit
+wherry
+whet
+whether
+whets
+whetstone
+whetted
+whetter
+whetting
+whew
+whey
+wheyface
+which
+whichever
+whichsoever
+whicker
+whickered
+whickering
+whidah
+whidding
+whiff
+whiffle
+whiffled
+whiffler
+whiffles
+whiffletree
+whiffling
+whig
+whigmaleerie
+whigs
+Whikehart
+while
+whiled
+whiles
+whiling
+whilom
+whilst
+whim
+whim's
+whimbrel
+whimper
+whimpered
+whimpering
+whimpers
+whims
+whimsey
+whimseys
+whimsical
+whimsicality
+whimsically
+whimsicalness
+whimsied
+whimsies
+whimsy
+whimsy's
+whin
+whinchat
+whine
+whined
+whiner
+whines
+whiney
+whinge
+whining
+whiningly
+whinnied
+whinnies
+whinny
+whinnying
+whinstone
+whip
+whip's
+whipcord
+whiplash
+whiplashes
+whiplike
+Whippany
+whipped
+whipper
+whipper's
+whippers
+whippersnapper
+whippet
+whippier
+whipping
+whipping's
+whippings
+Whipple
+whippletree
+whippoorwill
+whippy
+whips
+whipsaw
+whipsawed
+whipstall
+whipstitch
+whipstock
+whipworm
+whir
+whirl
+whirlabout
+whirled
+whirler
+whirlies
+whirligig
+whirling
+whirlpool
+whirlpool's
+whirlpools
+whirls
+whirlwind
+whirly
+whirlybird
+whirr
+whirried
+whirring
+whirry
+whirrying
+whish
+whisht
+whisk
+whisked
+whisker
+whiskered
+whiskers
+whiskery
+whiskey
+whiskey's
+whiskeys
+whiskies
+whisking
+whisks
+whisper
+whispered
+whisperer
+whispering
+whisperingly
+whisperings
+whispers
+whispery
+whist
+whistle
+whistleable
+whistled
+whistler
+whistlers
+whistles
+whistling
+whit
+Whitaker
+Whitaker's
+whitby
+Whitcomb
+White
+white
+whitebait
+whitebeam
+whitebeard
+Whiteboy
+whitecap
+Whitechapel
+whited
+whitedamp
+whiteface
+Whitefield
+whitefish
+whitefly
+Whitehall
+whitehead
+Whitehorse
+Whitehorse's
+whiteleaf
+Whiteleaf
+Whiteley
+whiteley
+whitely
+whiten
+whitened
+whitener
+whiteners
+whiteness
+whitening
+whitens
+whiteout
+whiter
+whites
+whitesmith
+whitespace
+whitest
+whitetail
+whitethorn
+whitethroat
+whitewall
+whitewash
+whitewashed
+whitewasher
+whitewashing
+Whitewater
+whitewater
+whitewing
+whitewood
+whitey
+Whitfield
+whither
+whithersoever
+whitherward
+whiting
+whitish
+Whitlam
+Whitley
+Whitlock
+Whitlow
+Whitman
+Whitmanize
+Whitmanizes
+Whitney
+Whitsun
+Whitsuntide
+Whittaker
+Whittier
+Whittington
+whittle
+whittled
+whittler
+whittles
+whittling
+whittlings
+whity
+whiz
+whizbang
+whizz
+whizzbang
+whizzed
+whizzer
+whizzes
+whizzing
+who
+who'd
+who'll
+who's
+who've
+whoa
+whodunit
+whodunit's
+whodunits
+whoever
+whole
+wholefood
+wholehearted
+wholeheartedly
+wholemeal
+wholeness
+wholes
+wholesale
+wholesaled
+wholesaler
+wholesalers
+wholesales
+wholesaling
+wholesome
+wholesomely
+wholesomeness
+wholism
+wholly
+whom
+whomever
+whomp
+whomsoever
+whoop
+whooped
+whoopee
+whooper
+whooping
+whoopla
+whoops
+whoosh
+whop
+whopper
+whoppers
+whopping
+whore
+whore's
+whoredom
+whorehouse
+whoremaster
+whoremonger
+whores
+whoreson
+whoring
+whorish
+whorl
+whorl's
+whorled
+whorls
+whort
+whortle
+whortleberry
+whose
+whosesoever
+whoso
+whosoever
+whump
+whup
+why
+whyalla
+whydah
+whys
+WI
+Wichita
+wick
+wicked
+wickedly
+wickedness
+wicker
+Wickersley
+wickerwork
+wicket
+wicketkeeper
+wicketkeepers
+wicketkeeping
+wickets
+wicking
+wickiup
+Wickliffe
+Wicklow
+wicks
+wickthing
+wicopy
+widdershins
+wide
+widely
+widemouthed
+widen
+widened
+widener
+wideness
+widening
+widens
+wider
+widespread
+widest
+widgeon
+widgeons
+widgery
+widget
+widget's
+widgets
+widgie
+widish
+widnes
+Widor
+widow
+widowed
+widower
+widowerhood
+widowers
+widowhood
+widows
+width
+widths
+widthways
+widthwise
+widukind
+wieland
+Wieland
+wield
+wielded
+wielder
+wielding
+wields
+wieldy
+wien
+wiener
+wieners
+wienerwurst
+wienie
+Wiesbaden
+wife
+wife's
+wifehood
+wifeless
+wifelike
+wifeliness
+wifely
+wig
+wig's
+wigan
+wigeon
+wigeons
+wigged
+wigging
+Wiggins
+wiggle
+wiggled
+wiggler
+wiggles
+wiggling
+wiggly
+wight
+Wightman
+Wightman's
+wiglet
+wigmaker
+Wigner
+wigs
+Wigtown
+wigwag
+wigwam
+Wijngaarden
+wikiup
+Wilberforce
+Wilbur
+Wilbur's
+wilco
+Wilcox
+wild
+wildcard
+wildcarded
+wildcarding
+wildcards
+wildcat
+wildcat's
+wildcats
+wildcatted
+wildcatter
+wildcatting
+wilde
+wildebeest
+wildebeest's
+wilder
+wilderment
+wilderness
+wildest
+wildfire
+wildflower
+wildflower's
+wildflowers
+wildfowl
+wildfowler
+wildfowling
+wilding
+wildish
+wildlife
+wildling
+wildly
+wildness
+wildwood
+wile
+wiled
+wiles
+Wiley
+Wilfred
+wilful
+wilfully
+Wilhelm
+Wilhelmina
+wilhelmshaven
+wilhelmstrasse
+wilier
+wilily
+wiliness
+wiling
+Wilkes
+Wilkie
+Wilkie's
+Wilkins
+Wilkinson
+will
+Willa
+Willa's
+willable
+Willamette
+Willard
+Willcocks
+Willcox
+willed
+Willem
+willemite
+willemstad
+willer
+willet
+willful
+willfully
+willfulness
+William
+Williams
+Williamsburg
+Williamson
+Willie
+Willied
+willies
+Willies
+willing
+willingly
+willingness
+willings
+Willis
+Willisson
+Willisson's
+williwaw
+Willoughby
+willow
+willow's
+willower
+willowherb
+willowlike
+willows
+willowware
+willowy
+willpower
+wills
+willy
+Willy
+willying
+Wilma
+wilmette
+Wilmette
+Wilmington
+wilmslow
+wilno
+Wilshire
+Wilson
+Wilson's
+Wilsonian
+wilt
+wilted
+wilting
+Wilton
+wilts
+Wiltshire
+Wiltshire's
+wily
+wimble
+wimbled
+Wimbledon
+wimbles
+wimbling
+wimp
+wimp's
+wimpier
+wimpiest
+wimple
+wimpled
+wimpling
+wimps
+wimpy
+Wimshurst
+win
+wince
+winced
+winces
+wincey
+Winceyette
+winch
+winched
+Winchell
+winchell
+wincher
+winches
+Winchester
+winchester
+Winchesters
+winching
+wincing
+Winckelmann
+wind
+windage
+windbag
+windbags
+windblown
+windbound
+windbreak
+windbreaks
+windburn
+windburned
+windcheater
+windcheaters
+windchill
+winded
+winder
+windermere
+winders
+windfall
+windflaw
+windflower
+windgall
+windhoek
+windhover
+windier
+windily
+windiness
+winding
+windjammer
+windlass
+windlassed
+windlasses
+windlassing
+windlassly
+windless
+windlessly
+windlessness
+windlestraw
+windmill
+windmill's
+windmilling
+windmills
+window
+window's
+windowed
+windowing
+windowless
+windowpane
+windowpanes
+windows
+windowsill
+windpipe
+windproof
+windrow
+winds
+windsail
+windscreen
+windshield
+windsock
+Windsor
+windstorm
+windsurf
+windsurfed
+windsurfing
+windsurfs
+windswept
+windup
+windward
+windwardly
+windway
+windy
+wine
+winebibber
+wined
+wineglass
+winegrower
+winehead
+Winehead
+winemake
+winemaster
+winepress
+winer
+winers
+winery
+wines
+wineshop
+wineskin
+winey
+Winfield
+wing
+wingback
+wingbeat
+wingbeat's
+wingbeats
+wingding
+winged
+winger
+wingers
+winging
+wingless
+winglessness
+winglet
+winglike
+wingman
+wingmen
+wingover
+wings
+wingspan
+wingspread
+wingspread's
+wingspreads
+wingtip
+wingy
+Winifred
+wining
+winism
+wink
+winked
+winkelried
+winker
+winking
+winkle
+winkled
+winkles
+winkling
+winks
+winless
+winnable
+winnebago
+Winnebago
+winned
+winner
+winner's
+winners
+Winnetka
+Winnie
+winning
+winningly
+winnings
+Winnipeg
+winnipegosis
+winnow
+winnower
+wino
+Winograd
+winooski
+Winooski
+winos
+wins
+Winsborough
+Winsett
+winsett
+Winslow
+winsome
+winsomely
+winsomeness
+Winston
+winter
+wintered
+winterer
+winterfeed
+wintergreen
+wintering
+winterization
+winterization's
+winterizations
+winterize
+winterized
+winterizes
+winterizing
+winterkill
+winterly
+winters
+winterthur
+wintertide
+wintertime
+winterweight
+wintery
+Winthrop
+wintle
+wintrier
+wintrily
+wintriness
+wintry
+winy
+winze
+wipe
+wiped
+wiper
+wipers
+wipes
+wiping
+wipo
+wirable
+wire
+wired
+wiredraw
+wiredrawer
+wiredrawn
+wirehair
+wirehaired
+wireless
+wirelike
+wireman
+wiremen
+wirepuller
+wirer
+wires
+wiretap
+wiretap's
+wiretapper
+wiretapping
+wiretaps
+wirewalker
+wireway
+wirework
+wireworks
+wireworm
+wirier
+wirily
+wiriness
+wiring
+wirings
+wirra
+wirral
+wiry
+wis
+Wisconsin
+Wisconsin's
+wisdom
+wisdoms
+wise
+wiseacre
+wisecrack
+wisecracked
+wisecracker
+wised
+wisely
+Wiseman
+wiseness
+Wisenheimer
+wisenheimer
+wisent
+wiser
+wises
+wisest
+wisewoman
+wish
+wisha
+wishbone
+wished
+wisher
+wishers
+wishes
+wishful
+wishfully
+wishfulness
+wishing
+wishlist
+wishlists
+wishy
+wising
+wislany
+wismar
+wisp
+wisp's
+wispish
+wisps
+wispy
+wist
+wistaria
+wisteria
+wistful
+wistfully
+wistfulness
+wit
+wit's
+witan
+witch
+witchcraft
+witchery
+witches
+witchetty
+witching
+witchlike
+witchy
+wite
+witenagemot
+with
+withal
+withdraw
+withdrawable
+withdrawal
+withdrawal's
+withdrawals
+withdrawer
+withdrawing
+withdrawn
+withdrawnness
+withdraws
+withdrew
+withe
+wither
+withered
+withering
+witheringly
+witherite
+withers
+withershins
+Witherspoon
+witherspoon
+withheld
+withhold
+withholder
+withholders
+withholding
+withholdings
+withholds
+withies
+within
+withindoors
+without
+withoutdoors
+withstand
+withstanding
+withstands
+withstood
+withy
+witless
+witling
+witness
+witnessed
+witnesses
+witnessing
+wits
+Witt
+Witt's
+witted
+Wittenberg
+witter
+Wittgenstein
+Wittgenstein's
+witticism
+wittier
+wittiest
+wittily
+wittiness
+witting
+wittingly
+wittol
+witty
+Witwatersrand
+wive
+wivern
+wives
+wiving
+Wixell
+wiz
+wizard
+wizard's
+wizardly
+wizardry
+wizards
+wizen
+wizened
+woad
+woaded
+woadwaxen
+woald
+Wobbegong
+wobble
+wobbled
+wobbler
+wobbles
+wobbliness
+wobbling
+wobbly
+Wodehouse
+Woden
+wodge
+wodges
+woe
+woebegone
+woebegoneness
+woeful
+woefully
+woeness
+wog
+woggle
+wok
+woke
+woken
+Woking
+Wokingham
+Wolcott
+wold
+Wolds
+wolf
+wolfbane
+Wolfe
+Wolfe's
+wolfenden
+wolfer
+Wolff
+Wolff's
+Wolffian
+wolffish
+Wolfgang
+wolfhound
+wolfish
+wolfishly
+wolfishness
+wolfit
+wolflike
+Wolfram
+wolframite
+wolfsbane
+Wolfsburg
+wollastonite
+Wollongong
+wolly
+Wolof
+wolsey
+wolve
+wolver
+Wolverhampton
+wolverine
+wolverine's
+wolverines
+wolverton
+Wolverton
+wolves
+woman
+woman's
+womanhood
+womanish
+womanishly
+womanishness
+womanization
+womanization's
+womanizations
+womanize
+womanized
+womanizer
+womanizers
+womanizes
+womanizing
+womankind
+womanless
+womanlike
+womanliness
+womanly
+womanpower
+womb
+womb's
+wombat
+wombat's
+wombats
+wombed
+wombs
+women
+women's
+womenfolk
+womenfolks
+womenkind
+womens
+womera
+won
+won't
+wonder
+wondered
+wonderer
+wonderful
+wonderfully
+wonderfulness
+wondering
+wonderingly
+wonderland
+wonderland's
+wonderment
+wonders
+wonderwork
+wondrous
+wondrously
+wondrousness
+Wong
+Wong's
+wonky
+wonning
+wonsan
+wont
+wonted
+wontedly
+wontedness
+wonting
+wonton
+woo
+wood
+wood's
+Woodard
+Woodberry
+woodberry
+woodborer
+Woodbury
+woodcarver
+woodcarving
+woodchat
+woodchopper
+woodchoppers
+woodchuck
+woodchuck's
+woodchucks
+woodcock
+woodcock's
+woodcockize
+woodcockizes
+woodcocks
+woodcraft
+woodcut
+woodcutter
+woodcutters
+woodcutting
+wooded
+wooden
+woodenhead
+woodenheaded
+woodenly
+woodenness
+woodenware
+woodgrain
+woodgraining
+woodgrouse
+woodhen
+woodhook
+woodier
+woodiness
+wooding
+woodland
+woodlander
+woodlark
+Woodlawn
+woodlore
+woodlot
+woodlouse
+woodman
+woodnote
+woodpecker
+woodpecker's
+woodpeckers
+woodpile
+Woodrow
+woodruff
+woodrush
+woods
+woodscrew
+woodseats
+woodser
+woodshed
+Woodsia
+woodside
+woodsman
+Woodstock
+Woodstock's
+woodsy
+Woodward
+Woodwards
+woodwaxen
+woodwind
+woodwork
+woodworker
+woodworking
+woodworm
+Woody
+woody
+Woody's
+woodyard
+wooed
+wooer
+woof
+woofed
+woofer
+woofers
+woofing
+woofs
+wooing
+wool
+wooled
+woolen
+woolenization
+woolenization's
+woolenizations
+woolenize
+woolenizes
+woolens
+woolf
+woolfell
+woolgather
+woolgatherer
+woolgathering
+woolgrower
+woolie
+woolley
+woollier
+woollies
+woolliness
+woolly
+woollybutt
+woolpack
+wools
+woolsack
+woolshed
+woolskin
+Woolworth
+wooly
+Woomera
+Woonsocket
+woop
+woops
+woorali
+woos
+Wooster
+woozier
+woozily
+wooziness
+woozy
+wop
+wops
+Worcester
+Worcestershire
+Worcestershire's
+word
+word's
+wordage
+wordages
+wordbook
+worded
+wordier
+wordily
+wordiness
+wording
+wordings
+wordless
+wordlessly
+wordlessness
+wordmonger
+wordplay
+words
+Wordsworth
+wordy
+wore
+work
+workability
+workable
+workableness
+workably
+workaday
+workaround
+workaround's
+workarounds
+workbag
+workbasket
+workbench
+workbench's
+workbenches
+workboat
+workbook
+workbook's
+workbooks
+workbox
+workday
+worked
+worker
+worker's
+workers
+workfile
+workfiles
+workfolk
+workfolks
+workforce
+workforce's
+workforces
+workgroup
+workgroups
+workhorse
+workhorse's
+workhorses
+workhouse
+workhouses
+working
+workingman
+workingmen
+workings
+workless
+worklessness
+workload
+workloads
+workman
+workmanlike
+workmanly
+workmanship
+workmate
+workmates
+workmen
+workmen's
+workout
+workouts
+workpeople
+workperson
+workpiece
+workpieces
+workplace
+workplace's
+workplaces
+workroom
+workrooms
+works
+worksheet
+worksheets
+workshop
+workshop's
+workshops
+workshy
+worksop
+workspace
+workspaces
+workstation
+workstation's
+workstations
+worktable
+workweek
+workwoman
+world
+world's
+worlders
+worldliness
+worldling
+worldly
+worlds
+worldwide
+worm
+wormcast
+wormed
+wormer
+wormhole
+wormier
+worming
+wormlike
+worms
+wormseed
+wormwood
+wormy
+worn
+worried
+worriedly
+worrier
+worriers
+worries
+worriment
+worrisome
+worrisomely
+worrisomeness
+worry
+worrying
+worryingly
+worrywart
+worse
+worsen
+worsened
+worsening
+worsens
+worser
+worship
+worshiped
+worshiper
+worshiper's
+worshipers
+worshipful
+worshipfully
+worshipfulness
+worshiping
+worshipless
+worships
+worsley
+worst
+worsted
+wort
+worth
+worthful
+worthier
+worthies
+worthiest
+worthily
+worthiness
+worthing
+Worthington
+worthless
+worthlessly
+worthlessness
+worths
+worthwhile
+worthwhileness
+worthy
+wot
+Wotan
+Wotan's
+wotted
+Wotton
+would
+would've
+wouldest
+wouldn't
+wouldst
+Woulfe
+wound
+wounded
+wounding
+woundless
+wounds
+woundwort
+wove
+woven
+wow
+wowser
+Wraac
+wrack
+wracked
+wracking
+wracks
+wraith
+wraiths
+wran
+wrangle
+wrangled
+wrangler
+wranglers
+wrangles
+wrangling
+wrap
+wrap's
+wraparound
+wrapover
+wrapped
+wrapper
+wrapper's
+wrappers
+wrapping
+wrappings
+wrapround
+wraps
+wrapup
+wrasse
+wrath
+wrathful
+wrathfully
+wrathfulness
+wrathy
+wreak
+wreaks
+wreath
+wreathe
+wreathed
+wreathes
+wreathing
+wreaths
+wreathy
+wreck
+wreckage
+wrecked
+wrecker
+wreckers
+wreckfish
+wreckful
+wrecking
+wrecks
+wrekin
+wren
+wren's
+wrench
+wrenched
+wrenches
+wrenching
+wrenchingly
+wrens
+wrest
+wrested
+wrester
+wresting
+wrestle
+wrestled
+wrestler
+wrestles
+wrestling
+wrestlings
+wrests
+wretch
+wretched
+wretchedly
+wretchedness
+wretches
+Wrexham
+wrier
+wriest
+wriggle
+wriggled
+wriggler
+wriggles
+wriggling
+wriggly
+wright
+Wrigley
+wring
+wringer
+wringing
+wrings
+wrinkle
+wrinkled
+wrinkles
+wrinkling
+wrinkly
+wrist
+wrist's
+wristband
+wristlet
+wristlock
+wrists
+wristwatch
+wristwatch's
+wristwatches
+wristy
+writ
+writ's
+writable
+write
+writer
+writer's
+writers
+writes
+writeup
+writeup's
+writeups
+writhe
+writhed
+writhen
+writhes
+writhing
+writing
+writings
+writs
+written
+wroclaw
+wrong
+wrongdo
+wrongdoer
+wrongdoers
+wrongdoing
+wronged
+wronger
+wrongest
+wrongful
+wrongfully
+wrongfulness
+wrongheaded
+wrongheadedly
+wrongheadedness
+wronging
+wrongly
+wrongness
+wrongs
+Wronskian
+wrote
+wroth
+wrought
+wrung
+wry
+wrybill
+wryly
+wryneck
+Wu
+Wu's
+wuchang
+wuhsien
+wuhu
+wulfenite
+wulfila
+wunderkind
+Wunderlich
+wundt
+wuppertal
+wurley
+wurst
+wus
+wusih
+wuthering
+wutsin
+WV
+WWW
+WY
+Wyatt
+Wyatt's
+wycherley
+wycliffe
+Wycliffite
+wye
+Wyeth
+Wyeth's
+Wykeham
+Wylie
+Wylie's
+Wyman
+wynd
+Wynn
+Wynn's
+Wyoming
+wysiwyg
+wyvern
+xanthate
+xanthein
+xanthene
+xanthic
+xanthin
+xanthine
+xanthippe
+xanthochroid
+xanthochroism
+xanthoma
+xanthophyll
+xanthous
+Xanthus
+xanthus
+Xavier
+xci
+xcii
+xciv
+xcix
+xcvi
+xcvii
+Xenakis
+xenakis
+Xenia
+xenia
+Xenix
+Xenix's
+xenocrates
+xenocryst
+xenogamy
+xenogenesis
+xenoglossia
+xenolith
+xenomania
+xenomorphic
+xenon
+xenophanes
+xenophile
+xenophilous
+xenophobe
+xenophobia
+xenophobic
+xenophon
+xerarch
+Xeres
+xeric
+xerically
+xeroderma
+xerographic
+xerographically
+xerography
+xeromorphic
+xerophile
+xerophilous
+xerophily
+xerophthalmia
+xerophyte
+xerosere
+xerosis
+Xerox
+Xerox's
+Xeroxed
+Xeroxes
+Xeroxing
+Xerxes
+xhosa
+Xhosa
+xi
+xii
+xiii
+xiphisternum
+xiphoid
+xiphosuran
+xiv
+xix
+Xmas
+XOR
+xterm
+xterm's
+xuthus
+xv
+xvi
+xvii
+xviii
+xx
+xxi
+xxii
+xxiii
+xxiv
+xxix
+xxv
+xxvi
+xxvii
+xxviii
+xxx
+xxxi
+xxxii
+xxxiii
+xxxiv
+xxxix
+xxxv
+xxxvi
+xxxvii
+xxxviii
+xylan
+xylem
+xylene
+xylidine
+xylocarp
+xylograph
+xylography
+xyloid
+xylol
+xylophagous
+xylophone
+xylophones
+xylophonist
+xylose
+xylotomic
+xylotomical
+xylotomous
+xylotomy
+xylyl
+xyst
+xyster
+yabber
+yabby
+Yablonovy
+yacc
+yacc's
+yacht
+yachters
+yachting
+yachts
+yachtsman
+yachtsmen
+yack
+yacking
+yaffle
+yafo
+yagi
+yah
+yahata
+Yahoo
+Yahweh
+yak
+Yakima
+yakking
+yaks
+Yakut
+Yakutsk
+Yale
+Yalies
+yalies
+Yalta
+Yalu
+yam
+yamagata
+Yamaha
+Yamaha's
+yamani
+yamashita
+yamen
+yammer
+yang
+Yangtze
+yanina
+yank
+yanked
+Yankee
+Yankeeism
+Yankees
+yanking
+yanks
+Yankton
+Yankton's
+Yaounde
+Yaounde's
+yap
+yapok
+yapon
+yapping
+Yaqui
+Yarborough
+yard
+yard's
+yardage
+yardarm
+yardbird
+yarded
+yarding
+yardman
+yardmaster
+yards
+yardstick
+yardstick's
+yardsticks
+yare
+yarely
+Yarkand
+yarmelke
+Yarmouth
+Yarmouth's
+yarmulke
+yarn
+yarn's
+yarned
+yarning
+yarns
+Yaroslavl
+yarrow
+yarwood
+Yashmak
+yataghan
+yate
+Yates
+yauld
+yaunde
+yaup
+yaupon
+yautia
+yaw
+yawata
+yawed
+yawing
+yawl
+yawn
+yawner
+yawning
+yawningly
+yawns
+yawp
+yaws
+yazd
+ycleped
+yclept
+ye
+yea
+Yeager
+yeah
+yean
+yeanling
+year
+year's
+yearbook
+yearling
+yearlong
+yearly
+yearn
+yearned
+yearner
+yearning
+yearningly
+yearnings
+yearns
+years
+yeas
+yeast
+yeast's
+yeastier
+yeastily
+yeastiness
+yeasts
+yeasty
+Yeats
+yecch
+yegg
+Yekaterinburg
+Yekaterinodar
+Yekaterinoslav
+yeld
+Yelisavetgrad
+Yelisavetpol
+Yelizaveta
+yelk
+yell
+yelled
+yeller
+yellerish
+yelling
+yellow
+yellowbark
+yellowbird
+yellowed
+yellower
+yellowest
+yellowhammer
+yellowing
+yellowish
+Yellowknife
+Yellowknife's
+yellowlegs
+yellowness
+yellows
+Yellowstone
+Yellowstone's
+yellowtail
+yellowweed
+yellowwood
+yells
+yelp
+yelped
+yelper
+yelping
+yelps
+Yemen
+yen
+yenan
+Yenisei
+yentai
+Yentl
+Yentl's
+yeoman
+yeomanly
+yeomanry
+yeomen
+yep
+Yerba
+yerevan
+Yerkes
+yes
+yeses
+yeshiva
+yester
+yesterday
+yesterday's
+yesterdays
+yesteryear
+yestreen
+yet
+yeti
+yeuk
+Yevtushenko
+yew
+yezd
+ygerne
+Yid
+Yiddish
+yield
+yielded
+yielder
+yielding
+yields
+yike
+yin
+yingkow
+yip
+yippee
+yipping
+yirr
+ylem
+YMCA
+ymir
+yob
+yod
+yodel
+yodeled
+yodeler
+yodeling
+yodels
+yodle
+yoga
+yogh
+yoghurt
+yoghurt's
+yogi
+yogic
+yogin
+yogurt
+yogurt's
+yohimbine
+yoicks
+yoke
+yoke's
+yokefellow
+yokel
+yokels
+yokes
+yoking
+Yoknapatawpha
+yoknapatawpha
+Yokohama
+yola
+yolk
+yolks
+yolky
+yom
+yon
+yond
+yonder
+yoni
+Yonkers
+yonne
+yonnie
+yore
+Yorick
+York
+York's
+Yorke
+Yorker
+Yorkers
+Yorkist
+Yorkists
+Yorks
+Yorkshire
+Yorkshire's
+Yorktown
+Yoruba
+Yosemite
+Yoshihito
+Yost
+Yost's
+you
+you'd
+you'll
+you're
+you've
+young
+Youngberry
+younger
+youngest
+youngish
+youngling
+youngly
+youngness
+youngster
+youngster's
+youngsters
+Youngstown
+Younker
+your
+your's
+yours
+yourself
+yourselves
+youth
+youth's
+youthes
+youthful
+youthfully
+youthfulness
+youths
+yow
+yowl
+Ypres
+Ypsilanti
+Yquem
+yr
+Yresko
+Ysaye
+Yser
+Yseult
+Yssel
+ytterbia
+ytterbite
+ytterbium
+yttria
+yttriferous
+yttrium
+yuba
+Yuba
+Yucatan
+yucca
+yuck
+Yuga
+Yugoslav
+Yugoslavia
+yuk
+Yukawa
+Yukon
+yulan
+yule
+yuletide
+Yuman
+yummier
+yummy
+yup
+yuppie
+yuppie's
+yuppies
+Yurev
+Yuri
+yuri
+Yurlov
+yurt
+Yuzovka
+yvelines
+Yves
+Yvette
+YWCA
+ywis
+Zaandam
+zabaglione
+Zabrze
+Zacatecas
+Zaccaria
+Zacharias
+Zachary
+zacynthus
+zaffer
+zag
+zagazig
+zagged
+zagging
+Zagreb
+Zagreb's
+zagreus
+zagros
+zags
+Zaibatsu
+Zaire
+Zakai
+Zakuski
+zama
+Zambezi
+Zambia
+Zambia's
+Zamboanga
+Zamenhof
+Zamia
+zamindar
+zamindari
+zamora
+Zan
+Zan's
+Zanasi
+zanier
+zanies
+zanily
+zaniness
+zante
+Zanthoxylum
+zanu
+zany
+Zanzibar
+zap
+zapata
+zaporozhye
+Zapotec
+zappa
+zapped
+zapping
+zaps
+zapu
+zaqaziq
+zaragoza
+zarathustra
+zaratite
+zareba
+zarf
+zarga
+zaria
+zarzuela
+zastruga
+zayin
+zazen
+zeal
+Zealand
+Zealand's
+zealot
+zealotry
+zealous
+zealously
+zealousness
+zeami
+zebec
+zebedee
+zebra
+zebra's
+zebras
+zebrawood
+zebu
+zebulun
+zecchino
+zechariah
+zed
+zedekiah
+zedoary
+zee
+Zeebrugge
+Zeeland
+Zeeman
+zeffirelli
+Zeffirelli
+zein
+Zeiss
+zeist
+zeitgeist
+Zellerbach
+zemindar
+Zemstvo
+Zen
+zenana
+Zend
+zener
+zenith
+zenithal
+Zennist
+Zenobia
+zeolite
+zeolitic
+zephaniah
+zephyr
+zephyrus
+zeppelin
+Zepperitz
+Zermatt
+zero
+zeroed
+zeroes
+zeroing
+zeroize
+zeroized
+zeroizes
+zeroizing
+zeros
+zeroth
+zest
+zestful
+zestfully
+zestfulness
+zestier
+zesty
+zeta
+zetas
+Zetland
+zeugma
+Zeus
+Zeus's
+zeuxis
+Zhdanov
+Zhitomir
+Zhivkov
+Zho
+Zhukov
+zia
+ziaur
+zibeline
+zibet
+Ziegfeld
+Ziegfeld's
+Ziegfelds
+Ziegler
+Ziegler's
+ziff
+zig
+zigged
+zigging
+ziggurat
+ziggy
+Ziggy
+zigzag
+zigzagged
+zigzagger
+zigzagging
+zila
+zilch
+zillion
+zilpah
+Zimbabwe
+Zimmerman
+Zimmerman's
+zinc
+zinc's
+zincate
+zincic
+zinciferous
+zincite
+zinckenite
+zincograph
+zincography
+Zindabad
+zinfandel
+zing
+zinger
+zingiberaceous
+zingier
+zings
+zingy
+zinjanthropus
+zinkenite
+Zinman
+zinnia
+Zinovievsk
+Zinzendorf
+Zion
+Zion's
+Zionism
+Zionist
+Zionist's
+Zionists
+Zions
+zip
+zipangu
+zipped
+zipper
+zippered
+zippers
+zippier
+zipping
+zippy
+zips
+zircalloy
+zircon
+zirconia
+zirconic
+zirconium
+ziska
+zither
+zitherist
+zithers
+zizith
+zlatoust
+zloty
+zlotys
+Zoa
+zoaea
+zoan
+zoantharian
+zoarial
+zoarium
+zobrist
+zodiac
+zodiacal
+zodiacs
+Zoe
+Zoe's
+zoea
+zoffany
+zohar
+zola
+zombi
+zombie
+zombies
+zombiism
+zonal
+zonally
+zonate
+zonated
+zonation
+zond
+zone
+zoned
+zonely
+zoner
+zones
+zoning
+zonk
+zonked
+zonking
+zonks
+zonule
+zoo
+zoo's
+zoochemistry
+zoochore
+zoogenic
+zoogenous
+zoogeographer
+zoogeographic
+zoogeography
+zoogloea
+zoography
+zooid
+zooks
+zoolatry
+zoologic
+zoological
+zoologically
+zoologist
+zoologists
+zoology
+zoom
+zoomed
+zoometry
+zooming
+zoomorphic
+zoomorphism
+zooms
+zoonosis
+zoonotic
+zooparasite
+zooparasitic
+zoophagous
+zoophile
+zoophilia
+zoophilic
+zoophilism
+zoophilous
+zoophobia
+zoophyte
+zoophytic
+zooplankton
+zooplasty
+zoos
+zoosperm
+zoosporal
+zoosporangium
+zoospore
+zoosterol
+zootechnics
+zootomy
+zootoxin
+zootoxins
+zori
+zorilla
+Zorn
+Zoroaster
+Zoroastrian
+Zoroastrianism
+Zoroastrians
+zorrilla
+zoster
+Zouave
+zoug
+zounds
+Zoysia
+zsigmondy
+zucchetto
+zucchini
+zugzwang
+Zuider
+Zuidholland
+Zukerman
+Zulu
+Zulu's
+Zulus
+Zurich
+Zurich's
+Zwilich
+zwitterion
+zwitterionic
+zwitterions
+zygote
+zygote's
+zygotes
+zymurgy
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/README b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/README
new file mode 100644
index 00000000000..d9ee38b3ca5
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/README
@@ -0,0 +1,45 @@
+
+This file contains the contents of the Ispell (ver 3.1.20) word list after
+being expand from there affix compressed form used by Ispell.
+
+Ispell can be found at http://fmg-www.cs.ucla.edu/geoff/ispell.html.
+This wordlist can be found at http://wordlist.sourceforge.net/
+
+These word lists are under the same copyright as Ispell itself:
+
+ Copyright 1993, Geoff Kuenning, Granada Hills, CA
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All modifications to the source code must be clearly marked as
+ such. Binary redistributions based on modified source code
+ must be clearly marked as modified versions in the documentation
+ and/or other materials provided with the distribution.
+ 4. All advertising materials mentioning features or use of this software
+ must display the following acknowledgment:
+ This product includes software developed by Geoff Kuenning and
+ other unpaid contributors.
+ 5. The name of Geoff Kuenning may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GEOFF
+ KUENNING OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/README.txt b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/README.txt
new file mode 100644
index 00000000000..81a5e002701
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/README.txt
@@ -0,0 +1,5 @@
+Acceptable open source dictionary as per
+https://dev.eclipse.org/ipzilla/show_bug.cgi?id=1416
+
+File AllWords.txt has been created out of american.*, english.* files as a convenience
+so only one file can be opened and read versus 6. \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.0 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.0
new file mode 100644
index 00000000000..aec70b51d95
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.0
@@ -0,0 +1,239 @@
+acknowledgement
+acknowledgement's
+acknowledgements
+appal
+appals
+apparelled
+archeological
+archeologically
+archeologist
+archeologist's
+archeologists
+archeology
+autodialler
+barrelled
+barrelling
+bevelled
+bevelling
+canalled
+canalling
+cancelled
+canceller
+cancelling
+channelled
+channeller
+channeller's
+channellers
+channelling
+chiselled
+chiseller
+chisellers
+councilor
+councilor's
+counselled
+counselling
+counsellor
+counsellor's
+counsellors
+crystalize
+crystalized
+crystalizer
+crystalizes
+crystalizing
+dialled
+dialler
+dialling
+draught
+draught's
+draughts
+duelled
+dueller
+duelling
+enamelled
+enameller
+enamellers
+enamelling
+enrol
+enrols
+equalled
+equalling
+eviller
+evillest
+focussable
+focussed
+focusser
+focusses
+focussing
+fuelled
+fueller
+fuelling
+fulfil
+fulfils
+funnelled
+funnelling
+glamor
+glamored
+glamoring
+glamors
+glamourize
+glamourized
+glamourizer
+glamourizers
+glamourizes
+glamourizing
+gospeller
+gospellers
+gravelled
+gravelling
+grovelled
+groveller
+grovelling
+grovellingly
+imperilled
+initialled
+initialler
+initialling
+jewelled
+jeweller
+jewellers
+jewelling
+judgement
+judgement's
+judgements
+kidnapped
+kidnapper
+kidnapper's
+kidnappers
+kidnapping
+kidnapping's
+kidnappings
+labelled
+labeller
+labeller's
+labellers
+labelling
+laurelled
+levelled
+leveller
+levellest
+levelling
+marshalled
+marvelled
+marvelling
+marvellous
+marvellously
+marvellousness
+medalled
+medalling
+metalled
+metalling
+misjudgement
+modelled
+modeller
+modelling
+modellings
+multilevelled
+nickelled
+nickelling
+panelled
+panelling
+parametrizable
+parametrization
+parametrization's
+parametrizations
+parametrize
+parametrized
+parametrizes
+parametrizing
+parcelled
+parcelling
+pencilled
+pencilling
+petalled
+pretence
+pretences
+pretencion
+pretencions
+pretencive
+quarrelled
+quarreller
+quarrelling
+queueing
+recrystalized
+recrystalizes
+redialled
+redialling
+refocussed
+refocusses
+refocussing
+refuelled
+refuelling
+relabelled
+relabeller
+relabellers
+relabelling
+remodelled
+remodelling
+revelled
+reveller
+revellers
+revelling
+revellings
+rivalled
+rivalling
+shovelled
+shoveller
+shovelling
+shrivelled
+shrivelling
+signalled
+signaller
+signalling
+spiralled
+spiralling
+squirrelled
+squirrelling
+stencilled
+stenciller
+stencilling
+symbolled
+symbolling
+syphon
+syphon's
+syphoned
+syphoning
+syphons
+totalled
+totaller
+totaller's
+totallers
+totalling
+towelled
+towelling
+travelled
+traveller
+traveller's
+travellers
+travelling
+travellings
+troweller
+tunnelled
+tunneller
+tunnelling
+uncancelled
+uncrystalized
+unequalled
+unfocussed
+unlabelled
+unlevelled
+unparametrized
+unravelled
+unravelling
+unrivalled
+unsyphons
+victualler
+worshipped
+worshipper
+worshipper's
+worshippers
+worshipping
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.1 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.1
new file mode 100644
index 00000000000..615dc5474ed
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.1
@@ -0,0 +1,51 @@
+cancellate
+caviller
+cigaret
+defocussing
+dishevelled
+dowelling
+duellist
+enthral
+enthrals
+gimballed
+glamourous
+glamourously
+glamourousness
+gruelling
+gruellingly
+libeller
+libellous
+pedalled
+pedalling
+programability
+programable
+programed
+programer
+programer's
+programers
+programing
+pummelled
+recrystalize
+recrystalizing
+reprogramed
+reprogramer
+reprogramer's
+reprogramers
+reprograming
+snivelled
+sniveller
+snivelling
+snivellings
+swivelled
+swivelling
+teaselled
+teaselling
+teetotaller
+tinselled
+tinselling
+tyne
+tynes
+untrammelled
+yodelled
+yodeller
+yodelling
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.2 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.2
new file mode 100644
index 00000000000..ba386139468
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/altamer.2
@@ -0,0 +1,90 @@
+asafoetida
+bemedalled
+bimetallist
+bimetallistic
+calliper
+cancellable
+cancellous
+chiselling
+corbelling
+counsellee
+counsellorship
+crenellate
+crenellated
+crenellation
+crystalographical
+crystalographically
+cupellation
+cupeller
+disenthral
+disenthrals
+driveller
+enamellist
+frivolled
+frivoller
+frivolling
+gambolled
+gambolling
+gavelled
+gruelled
+hiccupped
+hiccupping
+hovelled
+judgemental
+kennelled
+kernelled
+labellable
+lapelled
+libellant
+libellee
+marshall
+marshalling
+marshalls
+medallist
+medallists
+metallization
+metallization's
+metallizations
+metallize
+metallized
+metallizes
+metallizing
+microcrystaline
+microcrystalinity
+miocrystaline
+mislabelled
+monometallism
+monometallist
+penciller
+perilled
+photolabelled
+photolabeller
+photolabelling
+precancellation
+prejudgement
+programmist
+programmist's
+programmistic
+programmistics
+programmists
+raveller
+ravelling
+semicrystaline
+snobsnivelling
+subtotalled
+subtotalling
+teazelling
+tendrilled
+trammelled
+trammelling
+trowelled
+trowelling
+unhouselled
+weevilled
+woollen
+woollenization
+woollenization's
+woollenizations
+woollenize
+woollenizes
+woollens
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.0 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.0
new file mode 100644
index 00000000000..935ff42c75e
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.0
@@ -0,0 +1,1835 @@
+acclimatization
+acclimatization's
+acclimatizations
+acclimatized
+accouterment
+accouterment's
+accouterments
+acknowledgment
+acknowledgment's
+acknowledgments
+actualization
+actualization's
+actualizations
+aerosolize
+aerosolized
+agonize
+agonized
+agonizedlies
+agonizedly
+agonizer
+agonizers
+agonizes
+agonizing
+agonizingly
+airfoil
+airfoils
+airplane
+airplane's
+airplanes
+alphabetize
+alphabetized
+alphabetizer
+alphabetizers
+alphabetizes
+alphabetizing
+aluminum
+aluminum's
+aluminums
+amenorrhea
+amortize
+amortized
+amortizes
+amortizing
+amphitheater
+amphitheater's
+amphitheaters
+analog
+analog's
+analogs
+analyzable
+analyze
+analyzed
+analyzer
+analyzers
+analyzes
+analyzing
+anemia
+anemia's
+anemias
+anemic
+anemics
+anesthesia
+anesthesia's
+anesthesias
+anesthetic
+anesthetic's
+anesthetically
+anesthetics
+anesthetize
+anesthetized
+anesthetizer
+anesthetizer's
+anesthetizers
+anesthetizes
+anesthetizing
+anodize
+anodized
+anodizes
+anodizing
+antagonize
+antagonized
+antagonizer
+antagonizers
+antagonizes
+antagonizing
+apologize
+apologized
+apologizer
+apologizers
+apologizes
+apologizing
+appall
+appalls
+appareled
+appetizer
+appetizing
+appetizingly
+arbor
+arbor's
+arbored
+arbors
+archaize
+archaized
+archaizer
+archaizers
+archaizes
+archaizing
+ardor
+ardor's
+ardors
+arithmetize
+arithmetized
+arithmetizes
+armor
+armor's
+armored
+armorer
+armorer's
+armorers
+armoried
+armories
+armoring
+armors
+armory
+armory's
+atomization
+atomization's
+atomizations
+atomize
+atomized
+atomizer
+atomizers
+atomizes
+atomizing
+authorization
+authorization's
+authorizations
+authorize
+authorized
+authorizer
+authorizers
+authorizes
+authorizing
+autodialer
+axiomatization
+axiomatization's
+axiomatizations
+axiomatize
+axiomatized
+axiomatizes
+axiomatizing
+balkanize
+balkanized
+balkanizing
+baptize
+baptized
+baptizer
+baptizers
+baptizes
+baptizing
+barreled
+barreling
+bastardize
+bastardized
+bastardizes
+bastardizing
+bedeviled
+bedeviling
+behavior
+behavior's
+behavioral
+behaviorally
+behaviored
+behaviorism
+behaviorism's
+behaviorisms
+behavioristic
+behavioristics
+behaviors
+behoove
+behoove's
+behooved
+behooves
+behooving
+behooving's
+behoovingly
+behoovings
+belabor
+belabor's
+belabored
+belaboring
+belabors
+beveled
+beveling
+bevelings
+bowdlerize
+bowdlerized
+bowdlerizer
+bowdlerizes
+bowdlerizing
+brutalize
+brutalized
+brutalizes
+brutalizing
+burglarize
+burglarized
+burglarizes
+burglarizing
+busheled
+busheling
+bushelings
+caliber
+calibers
+canaled
+canaling
+canceled
+canceler
+canceling
+candor
+candor's
+candors
+cannibalize
+cannibalized
+cannibalizes
+cannibalizing
+canonicalization
+canonicalize
+canonicalized
+canonicalizes
+canonicalizing
+capitalization
+capitalization's
+capitalizations
+capitalize
+capitalized
+capitalizer
+capitalizers
+capitalizes
+capitalizing
+carbonization
+carbonization's
+carbonizations
+carbonize
+carbonized
+carbonizer
+carbonizers
+carbonizes
+carbonizing
+catalog
+catalog's
+cataloged
+cataloger
+cataloging
+catalogs
+categorization
+categorization's
+categorizations
+categorize
+categorized
+categorizer
+categorizers
+categorizes
+categorizing
+center
+center's
+centered
+centerer
+centerers
+centering
+centerings
+centerpiece
+centerpiece's
+centerpieces
+centers
+centimeter
+centimeter's
+centimeters
+centralization
+centralization's
+centralizations
+centralize
+centralized
+centralizer
+centralizers
+centralizes
+centralizing
+channeled
+channeler
+channeler's
+channelers
+channeling
+characterizable
+characterizable's
+characterizables
+characterization
+characterization's
+characterizations
+characterize
+characterized
+characterizer
+characterizers
+characterizes
+characterizing
+checkbook
+checkbook's
+checkbooks
+chiseled
+chiseler
+chiselers
+civilization
+civilization's
+civilizations
+civilize
+civilized
+civilizedness
+civilizer
+civilizers
+civilizes
+civilizing
+clamor
+clamored
+clamorer
+clamorer's
+clamorers
+clamoring
+clamors
+cognizance
+cognizant
+colonization
+colonization's
+colonizations
+colonize
+colonized
+colonizer
+colonizers
+colonizes
+colonizing
+color
+color's
+colored
+coloreds
+colorer
+colorer's
+colorers
+colorful
+colorfully
+colorfulness
+coloring
+colorings
+colorless
+colorlessly
+colorlessness
+colors
+columnize
+columnized
+columnizes
+columnizing
+compartmentalize
+compartmentalized
+compartmentalizes
+compartmentalizing
+computerize
+computerized
+computerizes
+computerizing
+conceptualization
+conceptualization's
+conceptualizations
+conceptualize
+conceptualized
+conceptualizer
+conceptualizes
+conceptualizing
+counseled
+counseling
+counselor
+counselor's
+counselors
+criticize
+criticized
+criticizer
+criticizers
+criticizes
+criticizing
+criticizinglies
+criticizingly
+crystallize
+crystallized
+crystallizer
+crystallizers
+crystallizes
+crystallizing
+customizable
+customization
+customization's
+customizations
+customize
+customized
+customizer
+customizers
+customizes
+customizing
+decentralization
+decentralization's
+decentralizations
+decentralized
+defense
+defense's
+defensed
+defenseless
+defenselessly
+defenselessness
+defenses
+defensing
+demeanor
+demeanor's
+demeanors
+demoralize
+demoralized
+demoralizer
+demoralizers
+demoralizes
+demoralizing
+demoralizingly
+dialed
+dialer
+dialers
+dialing
+dialings
+dichotomize
+dichotomized
+dichotomizes
+dichotomizing
+digitize
+digitized
+digitizer
+digitizer's
+digitizers
+digitizes
+digitizing
+dishonor
+dishonored
+dishonorer
+dishonorer's
+dishonorers
+dishonoring
+dishonors
+disorganized
+draftsman
+dueled
+dueler
+duelers
+dueling
+duelings
+economize
+economized
+economizer
+economizers
+economizes
+economizing
+editorialize
+editorialized
+editorializer
+editorializes
+editorializing
+enameled
+enameler
+enamelers
+enameling
+enamelings
+endeavor
+endeavor's
+endeavored
+endeavorer
+endeavorer's
+endeavorers
+endeavoring
+endeavors
+enroll
+enrollment
+enrollment's
+enrollments
+enrolls
+epitomize
+epitomized
+epitomizer
+epitomizers
+epitomizes
+epitomizing
+equaled
+equaling
+equalization
+equalization's
+equalizations
+equalize
+equalized
+equalizer
+equalizer's
+equalizers
+equalizes
+equalizing
+equalizings
+esthetic
+esthetic's
+esthetically
+esthetics
+eviler
+evilest
+factorization
+factorization's
+factorizations
+familiarization
+familiarization's
+familiarizations
+familiarize
+familiarized
+familiarizer
+familiarizers
+familiarizes
+familiarizing
+familiarizingly
+fantasize
+fantasized
+fantasizer
+fantasizes
+fantasizing
+favor
+favor's
+favorable
+favorable's
+favorableness
+favorables
+favorably
+favored
+favored's
+favoredly
+favoredness
+favoreds
+favorer
+favorer's
+favorers
+favoring
+favoring's
+favoringly
+favorings
+favorite
+favorite's
+favorites
+favors
+fertilization
+fertilization's
+fertilizations
+fertilize
+fertilized
+fertilizer
+fertilizers
+fertilizes
+fertilizing
+fervor
+fervor's
+fervors
+fiber
+fiber's
+fibered
+fiberglass
+fibers
+finalization
+finalizations
+finalize
+finalized
+finalizes
+finalizing
+flavor
+flavor's
+flavored
+flavorer
+flavorer's
+flavorers
+flavoring
+flavorings
+flavors
+formalization
+formalization's
+formalizations
+formalize
+formalized
+formalizer
+formalizers
+formalizes
+formalizing
+fueled
+fueler
+fuelers
+fueling
+fulfill
+fulfillment
+fulfillment's
+fulfillments
+fulfills
+funneled
+funneling
+generalization
+generalization's
+generalizations
+generalize
+generalized
+generalizer
+generalizers
+generalizes
+generalizing
+glamorize
+glamorized
+glamorizer
+glamorizers
+glamorizes
+glamorizing
+gospeler
+gospelers
+gossiped
+gossiping
+gram
+gram's
+grams
+graveled
+graveling
+groveled
+groveler
+grovelers
+groveling
+grovelingly
+harbor
+harbor's
+harbored
+harborer
+harborer's
+harborers
+harboring
+harbors
+harmonize
+harmonized
+harmonizer
+harmonizers
+harmonizes
+harmonizing
+honor
+honorable
+honorable's
+honorableness
+honorables
+honorablies
+honorably
+honored
+honorer
+honorer's
+honorers
+honoring
+honors
+hospitalize
+hospitalized
+hospitalizes
+hospitalizing
+humor
+humor's
+humored
+humorer
+humorers
+humoring
+humors
+hypothesize
+hypothesized
+hypothesizer
+hypothesizers
+hypothesizes
+hypothesizing
+idealization
+idealization's
+idealizations
+idealize
+idealized
+idealizer
+idealizers
+idealizes
+idealizing
+imperiled
+incognizance
+incognizant
+individualize
+individualized
+individualizer
+individualizers
+individualizes
+individualizing
+individualizingly
+industrialization
+industrialization's
+industrializations
+informalizes
+initialed
+initialer
+initialing
+initialization
+initialization's
+initializations
+initialize
+initialized
+initializer
+initializers
+initializes
+initializing
+institutionalize
+institutionalized
+institutionalizes
+institutionalizing
+internalization
+internalization's
+internalizations
+internalize
+internalized
+internalizes
+internalizing
+italicize
+italicized
+italicizes
+italicizing
+itemization
+itemization's
+itemizations
+itemize
+itemized
+itemizer
+itemizers
+itemizes
+itemizing
+jeopardize
+jeopardized
+jeopardizes
+jeopardizing
+jeweled
+jeweler
+jewelers
+jeweling
+journalize
+journalized
+journalizer
+journalizers
+journalizes
+journalizing
+judgment
+judgment's
+judgments
+kidnaped
+kidnaper
+kidnaper's
+kidnapers
+kidnaping
+kidnaping's
+kidnapings
+kilogram
+kilogram's
+kilograms
+kilometer
+kilometer's
+kilometers
+labeled
+labeler
+labeler's
+labelers
+labeling
+labor
+labored
+labored's
+laboredly
+laboredness
+laborer
+laborer's
+laborers
+laboring
+laboring's
+laboringly
+laborings
+labors
+laureled
+legalization
+legalization's
+legalizations
+legalize
+legalized
+legalizes
+legalizing
+leveled
+leveler
+levelers
+levelest
+leveling
+liberalize
+liberalized
+liberalizer
+liberalizers
+liberalizes
+liberalizing
+license's
+linearizable
+linearize
+linearized
+linearizes
+linearizing
+linearizion
+liter
+liters
+localization
+localization's
+localizations
+localize
+localized
+localizer
+localizers
+localizes
+localizing
+luster
+lustered
+lustering
+lusters
+magnetization
+magnetization's
+magnetizations
+maneuver
+maneuvered
+maneuverer
+maneuvering
+maneuvers
+marveled
+marveling
+marvelous
+marvelously
+marvelousness
+materialize
+materialized
+materializer
+materializers
+materializes
+materializing
+maximize
+maximized
+maximizer
+maximizers
+maximizes
+maximizing
+mechanization
+mechanization's
+mechanizations
+mechanize
+mechanized
+mechanizer
+mechanizers
+mechanizes
+mechanizing
+medaled
+medaling
+memorization
+memorization's
+memorizations
+memorize
+memorized
+memorizer
+memorizers
+memorizes
+memorizing
+metaled
+metaling
+millimeter
+millimeter's
+millimeters
+miniaturization
+miniaturizations
+miniaturize
+miniaturized
+miniaturizes
+miniaturizing
+minimization
+minimization's
+minimizations
+minimize
+minimized
+minimizer
+minimizers
+minimizes
+minimizing
+misjudgment
+misjudgment's
+misjudgments
+miter
+mitered
+miterer
+mitering
+modeled
+modeler
+modelers
+modeling
+modelings
+modernize
+modernized
+modernizer
+modernizers
+modernizes
+modernizing
+modularization
+modularize
+modularized
+modularizes
+modularizing
+motorize
+motorized
+motorizes
+motorizing
+multileveled
+mustache
+mustached
+mustaches
+nationalization
+nationalization's
+nationalizations
+nationalize
+nationalized
+nationalizer
+nationalizers
+nationalizes
+nationalizing
+naturalization
+naturalization's
+naturalizations
+neighbor
+neighbor's
+neighbored
+neighborer
+neighborer's
+neighborers
+neighborhood
+neighborhood's
+neighborhoods
+neighboring
+neighborings
+neighborliness
+neighborly
+neighbors
+neutralize
+neutralized
+neutralizer
+neutralizers
+neutralizes
+neutralizing
+nickeled
+nickeling
+normalization
+normalization's
+normalizations
+normalize
+normalized
+normalizer
+normalizers
+normalizes
+normalizing
+notarize
+notarized
+notarizes
+notarizing
+odor
+odor's
+odored
+odors
+offense
+offense's
+offenses
+optimization
+optimization's
+optimizations
+optimize
+optimized
+optimizer
+optimizer's
+optimizers
+optimizes
+optimizing
+organizable
+organizable's
+organizables
+organization
+organization's
+organizational
+organizational's
+organizationally
+organizationals
+organizations
+organize
+organized
+organizer
+organizers
+organizes
+organizing
+oxidize
+oxidized
+oxidizer
+oxidizers
+oxidizes
+oxidizing
+oxidizings
+pajama
+pajama's
+pajamaed
+pajamas
+paneled
+paneling
+panelings
+paralleled
+paralleling
+parallelization
+parallelization's
+parallelizations
+parallelize
+parallelized
+parallelizer
+parallelizers
+parallelizes
+parallelizing
+paralyze
+paralyzed
+paralyzedlies
+paralyzedly
+paralyzer
+paralyzer's
+paralyzers
+paralyzes
+paralyzing
+paralyzinglies
+paralyzingly
+parameterizable
+parameterization
+parameterization's
+parameterizations
+parameterize
+parameterized
+parameterizes
+parameterizing
+parceled
+parceling
+parenthesized
+parlor
+parlor's
+parlors
+patronize
+patronized
+patronizer
+patronizers
+patronizes
+patronizing
+patronizing's
+patronizingly
+patronizings
+penalize
+penalized
+penalizes
+penalizing
+penciled
+penciling
+pencilings
+personalization
+personalization's
+personalizations
+personalize
+personalized
+personalizes
+personalizing
+petaled
+philosophize
+philosophized
+philosophizer
+philosophizers
+philosophizes
+philosophizing
+plow
+plowed
+plower
+plowing
+plowman
+plows
+pluralization
+pluralization's
+pluralizations
+pluralize
+pluralized
+pluralizer
+pluralizers
+pluralizes
+pluralizing
+polarization
+polarization's
+polarizations
+popularization
+popularization's
+popularizations
+popularize
+popularized
+popularizer
+popularizers
+popularizes
+popularizing
+practiced
+practicer
+practicing
+preinitialize
+preinitialized
+preinitializes
+preinitializing
+pressurize
+pressurized
+pressurizer
+pressurizers
+pressurizes
+pressurizing
+pretense
+pretenses
+pretension
+pretensions
+pretensive
+prioritize
+prioritized
+prioritizer
+prioritizers
+prioritizes
+prioritizing
+prioritizings
+productize
+productized
+productizer
+productizers
+productizes
+productizing
+proselytize
+proselytized
+proselytizer
+proselytizers
+proselytizes
+proselytizing
+publicize
+publicized
+publicizes
+publicizing
+pulverize
+pulverized
+pulverizer
+pulverizers
+pulverizes
+pulverizing
+quantization
+quantization's
+quantizations
+quantize
+quantized
+quantizer
+quantizer's
+quantizers
+quantizes
+quantizing
+quarreled
+quarreler
+quarrelers
+quarreling
+queuing
+randomize
+randomized
+randomizer
+randomizes
+randomizing
+rationalize
+rationalized
+rationalizer
+rationalizers
+rationalizes
+rationalizing
+reacclimatization
+reacclimatization's
+reacclimatizations
+reacknowledgment
+reacknowledgment's
+reacknowledgments
+reactualization
+reactualization's
+reactualizations
+reanalyze
+reanalyzed
+reanalyzer
+reanalyzers
+reanalyzes
+reanalyzing
+reapologizes
+reauthorization
+reauthorization's
+reauthorizations
+reauthorizes
+rebrutalizes
+recapitalization
+recapitalization's
+recapitalizations
+recapitalized
+recapitalizes
+recarbonization
+recarbonization's
+recarbonizations
+recarbonizer
+recarbonizers
+recarbonizes
+recategorized
+recentralization
+recentralization's
+recentralizations
+recentralizes
+recivilization
+recivilization's
+recivilizations
+recivilizes
+recognizability
+recognizable
+recognizably
+recognizance
+recognize
+recognized
+recognizedlies
+recognizedly
+recognizer
+recognizers
+recognizes
+recognizing
+recognizinglies
+recognizingly
+recolonization
+recolonization's
+recolonizations
+recolonizes
+recolored
+recolors
+reconceptualizing
+recriticizes
+recrystallized
+recrystallizes
+redialed
+refavors
+refertilization
+refertilization's
+refertilizations
+refertilizes
+refueled
+refueling
+reharmonizes
+rehonors
+reinitialize
+reinitialized
+reinitializes
+reinitializing
+reitemizes
+relabeled
+relabeler
+relabelers
+relabeling
+remagnetization
+remagnetization's
+remagnetizations
+rematerializes
+rememorizes
+remodeled
+remodeling
+renormalized
+renormalizes
+reorganization
+reorganization's
+reorganizations
+reorganize
+reorganized
+reorganizer
+reorganizers
+reorganizes
+reorganizing
+reoxidizes
+repatronizes
+reprogram
+reprograms
+repulverizes
+resepulchers
+restandardization
+restandardization's
+restandardizations
+restandardizes
+resterilizes
+resymbolization
+resymbolization's
+resymbolizations
+resymbolizes
+resynchronizations
+resynchronized
+resynchronizes
+resynthesizes
+retranquilizes
+reutilization
+reutilizes
+reveled
+reveler
+revelers
+reveling
+revelings
+revisualizes
+revolutionize
+revolutionized
+revolutionizer
+revolutionizers
+revolutionizes
+revolutionizing
+rigor
+rigor's
+rigors
+rivaled
+rivaling
+ruble
+ruble's
+rubles
+rumor
+rumor's
+rumored
+rumorer
+rumorer's
+rumorers
+rumoring
+rumors
+saber
+saber's
+sabered
+sabering
+sabers
+sanitize
+sanitized
+sanitizer
+sanitizes
+sanitizing
+savior
+savior's
+saviors
+savor
+savored
+savorer
+savorer's
+savorers
+savorier
+savories
+savoriest
+savoriness
+savoring
+savoringlies
+savoringly
+savors
+savory
+savory's
+scepter
+scepter's
+sceptered
+sceptering
+scepters
+scrutinize
+scrutinized
+scrutinizer
+scrutinizers
+scrutinizes
+scrutinizing
+scrutinizinglies
+scrutinizingly
+sepulcher
+sepulcher's
+sepulchered
+sepulchers
+sequentialize
+sequentialized
+sequentializes
+sequentializing
+serialization
+serialization's
+serializations
+serialize
+serialized
+serializes
+serializing
+shoveled
+shoveler
+shovelers
+shoveling
+shriveled
+shriveling
+signaled
+signaler
+signalers
+signaling
+siphon
+siphon's
+siphoned
+siphoning
+siphons
+socialize
+socialized
+socializer
+socializes
+socializing
+specialization
+specialization's
+specializations
+specialize
+specialized
+specializer
+specializers
+specializes
+specializing
+specialties
+specialty
+specialty's
+specter
+specter's
+spectered
+specters
+spiraled
+spiraling
+splendor
+splendor's
+splendors
+squirreled
+squirreling
+stabilize
+stabilized
+stabilizer
+stabilizers
+stabilizes
+stabilizing
+standardization
+standardization's
+standardizations
+standardize
+standardized
+standardizer
+standardizers
+standardizes
+standardizing
+stenciled
+stenciler
+stencilers
+stenciling
+sterilization
+sterilization's
+sterilizations
+sterilize
+sterilized
+sterilizer
+sterilizers
+sterilizes
+sterilizing
+stylized
+subsidize
+subsidized
+subsidizer
+subsidizers
+subsidizes
+subsidizing
+succor
+succored
+succorer
+succorer's
+succorers
+succoring
+succors
+summarization
+summarization's
+summarizations
+summarize
+summarized
+summarizer
+summarizers
+summarizes
+summarizing
+symboled
+symboling
+symbolization
+symbolization's
+symbolizations
+symbolize
+symbolized
+symbolizer
+symbolizers
+symbolizes
+symbolizing
+sympathize
+sympathized
+sympathizer
+sympathizers
+sympathizes
+sympathizing
+sympathizing's
+sympathizingly
+sympathizings
+synchronization
+synchronization's
+synchronizations
+synchronize
+synchronized
+synchronizer
+synchronizers
+synchronizes
+synchronizing
+synthesize
+synthesized
+synthesizer
+synthesizers
+synthesizes
+synthesizing
+systematize
+systematized
+systematizer
+systematizers
+systematizes
+systematizing
+tantalize
+tantalized
+tantalizer
+tantalizers
+tantalizes
+tantalizing
+tantalizinglies
+tantalizingly
+tantalizingness
+tantalizingnesses
+terrorize
+terrorized
+terrorizer
+terrorizers
+terrorizes
+terrorizing
+theater
+theater's
+theaters
+theorization
+theorization's
+theorizations
+theorize
+theorized
+theorizer
+theorizers
+theorizes
+theorizing
+tire's
+titer
+titers
+totaled
+totaler
+totaler's
+totalers
+totaling
+toweled
+toweling
+towelings
+tranquilize
+tranquilized
+tranquilizer
+tranquilizer's
+tranquilizers
+tranquilizes
+tranquilizing
+tranquilizing's
+tranquilizingly
+tranquilizings
+transistorize
+transistorized
+transistorizes
+transistorizing
+traveled
+traveler
+traveler's
+travelers
+traveling
+travelings
+trivialize
+trivialized
+trivializes
+trivializing
+troweler
+trowelers
+tumor
+tumor's
+tumored
+tumors
+tunneled
+tunneler
+tunnelers
+tunneling
+tunnelings
+unacclimatized
+unamortized
+unanalyzable
+unanalyzed
+unantagonized
+unantagonizing
+unapologizing
+unappetizing
+unappetizingly
+unarmored
+unauthorized
+unauthorizedly
+unauthorizedness
+unauthorizes
+unbaptized
+unbaptizes
+unbastardized
+unbrutalized
+unbrutalizes
+uncanceled
+uncapitalized
+uncategorized
+uncharacterized
+uncivilized
+uncivilizedly
+uncivilizedness
+uncivilizes
+uncolonized
+uncolonizes
+uncolored
+uncoloredly
+uncoloredness
+uncoloreds
+uncriticized
+uncriticizing
+uncriticizingly
+uncrystallized
+undefenses
+undishonored
+undisorganized
+uneconomizing
+unendeavored
+unepitomized
+unequaled
+unequalized
+unequalizes
+unfamiliarized
+unfavorable
+unfavorable's
+unfavorableness
+unfavorables
+unfavorably
+unfavored
+unfavored's
+unfavorings
+unfavorite
+unfavorite's
+unfavorites
+unfertilized
+unflavored
+unformalized
+ungeneralized
+unharmonized
+unharmonizes
+unhonorables
+unhonorablies
+unhonorably
+unhonored
+unhumored
+unidealized
+unindividualized
+unindividualizes
+uninitialized
+unionization
+unionize
+unionized
+unionizer
+unionizers
+unionizes
+unionizing
+unitalicized
+unitemized
+unjournalized
+unlabeled
+unlabored
+unlabored's
+unlaborings
+unlegalized
+unleveled
+unleveling
+unliberalized
+unlocalized
+unlocalizes
+unmechanized
+unmechanizes
+unmemorized
+unminimized
+unmodernized
+unmodernizes
+unmotorized
+unnationalized
+unneighbored
+unneighborliness
+unneighborly
+unneutralized
+unnormalized
+unnormalizes
+unoptimized
+unoptimizes
+unorganizable
+unorganizable's
+unorganizables
+unorganized
+unorganizedly
+unorganizedness
+unoxidized
+unparalleled
+unparameterized
+unparceled
+unpatronized
+unpatronizing's
+unpenalized
+unphilosophized
+unphilosophizes
+unpopularizes
+unpracticed
+unpulverized
+unpulverizes
+unraveled
+unraveling
+unrecognizable
+unrecognized
+unrecognizing
+unrecognizingly
+unreorganized
+unrivaled
+unrumored
+unsabered
+unsavored
+unsavoredly
+unsavoredness
+unscepters
+unscrutinized
+unscrutinizing
+unscrutinizingly
+unsepulchers
+unsiphons
+unsocialized
+unspecialized
+unspecializing
+unstandardized
+unsterilized
+unsubsidized
+unsuccored
+unsummarized
+unsymbolized
+unsympathized
+unsympathizing
+unsympathizing's
+unsympathizingly
+unsympathizings
+unsynchronized
+unsynthesized
+unsystematized
+unsystematizedly
+unsystematizing
+untantalized
+unterrorized
+untranquilized
+unverbalized
+unvictimized
+unvisualized
+unwomanized
+unwomanizes
+utilization
+utilize
+utilized
+utilizer
+utilizers
+utilizes
+utilizing
+valor
+valor's
+valors
+vandalize
+vandalized
+vandalizes
+vandalizing
+vapor
+vapor's
+vapored
+vaporer
+vaporer's
+vaporers
+vaporing
+vaporing's
+vaporingly
+vaporings
+vapors
+vectorization
+vectorizing
+verbalize
+verbalized
+verbalizer
+verbalizers
+verbalizes
+verbalizing
+victimize
+victimized
+victimizer
+victimizers
+victimizes
+victimizing
+victualer
+victualers
+vigor
+vigor's
+vigors
+visualize
+visualized
+visualizer
+visualizers
+visualizes
+visualizing
+wagoner
+wagoner's
+wagoners
+weaseled
+weaseling
+womanize
+womanized
+womanizer
+womanizers
+womanizes
+womanizing
+worshiped
+worshiper
+worshiper's
+worshipers
+worshiping
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.1 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.1
new file mode 100644
index 00000000000..eb0e6c806ee
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.1
@@ -0,0 +1,741 @@
+Christianizing
+Europeanization
+Europeanization's
+Europeanizations
+Europeanized
+Sanskritize
+acclimatize
+acclimatizer
+acclimatizers
+acclimatizes
+acclimatizing
+actualize
+actualized
+actualizes
+actualizing
+aggrandizement
+aggrandizement's
+aggrandizements
+americanized
+amortization
+amortization's
+amortizations
+animized
+annualized
+asshole
+asshole's
+assholes
+balkanization
+biosynthesized
+bucketfuls
+bureaucratization
+bureaucratization's
+bureaucratizations
+caliper
+calipers
+cancelate
+cancelated
+canonized
+cauterize
+cauterized
+cauterizes
+cauterizing
+caviler
+cavilers
+centerline
+centerlines
+civilizational
+civilizational's
+civilizationals
+cognizable
+colorimeter
+colorimeter's
+colorimeters
+colorimetry
+commercialization
+commercialization's
+commercializations
+communize
+communized
+communizes
+communizing
+computerization
+conventionalized
+crystallization
+crystallization's
+crystallizations
+decentralizing
+deemphasize
+deemphasized
+deemphasizer
+deemphasizers
+deemphasizes
+deemphasizing
+deglycerolized
+dehumanize
+dehumanized
+dehumanizes
+dehumanizing
+demineralization
+demineralization's
+demineralizations
+democratization
+democratization's
+democratizations
+democratize
+democratized
+democratizer
+democratizes
+democratizing
+demoralization
+demoralization's
+demoralizations
+demythologization
+demythologize
+demythologized
+demythologizer
+demythologizes
+demythologizing
+depersonalization
+depersonalization's
+depersonalizations
+depersonalized
+deputized
+destabilize
+destabilized
+destabilizes
+destabilizing
+destigmatization
+desynchronize
+desynchronized
+desynchronizes
+desynchronizing
+detribalize
+detribalized
+detribalizes
+detribalizing
+diagonalizable
+dialyzed
+diarrhea
+diarrhea's
+diarrheal
+diarrheas
+dichotomization
+digitalization
+digitalization's
+digitalizations
+digitization
+diopter
+discolored
+discolored's
+discoloredness
+discoloreds
+discolors
+disfavor
+disfavored
+disfavorer
+disfavorer's
+disfavorers
+disfavoring
+disfavors
+disheveled
+disorganization
+disorganization's
+disorganizations
+doweling
+downdraft
+draftier
+draftiness
+draftsperson
+drafty
+dramatization
+dramatization's
+dramatizations
+dramatize
+dramatized
+dramatizer
+dramatizers
+dramatizes
+dramatizing
+duelist
+duelists
+dynamized
+edema
+edema's
+edemas
+edematous
+emphasize
+emphasized
+emphasizer
+emphasizers
+emphasizes
+emphasizing
+energized
+energizes
+enthrall
+enthralls
+epicenter
+epicenter's
+epicenters
+esthete
+esthetes
+eulogize
+eulogized
+eulogizer
+eulogizers
+eulogizes
+eulogizing
+exorcize
+exorcized
+exorcizes
+exorcizing
+extemporize
+extemporized
+extemporizer
+extemporizers
+extemporizes
+extemporizing
+externalization
+externalization's
+externalizations
+favoritism
+favoritism's
+favoritisms
+federalize
+federalized
+federalizes
+federalizing
+fetid
+fetidly
+fetidness
+fetus
+fetus's
+fetuses
+fiberboard
+fossilized
+fraternize
+fraternized
+fraternizer
+fraternizers
+fraternizes
+fraternizing
+galvanizing
+generalizable
+generalizable's
+generalizables
+germanized
+gimbaled
+glottalization
+glycerolized
+grueling
+gruelingly
+gynecological
+gynecological's
+gynecologicals
+gynecologist
+gynecologist's
+gynecologists
+harmonization
+harmonization's
+harmonizations
+homeomorph
+homeopath
+homogenization
+homogenization's
+homogenizations
+homogenize
+homogenized
+homogenizer
+homogenizers
+homogenizes
+homogenizing
+honoree
+hospitalization
+hospitalization's
+hospitalizations
+humanize
+humanized
+humanizer
+humanizers
+humanizes
+humanizing
+hydrolyzed
+hypnotized
+hypophysectomized
+idolize
+idolized
+idolizer
+idolizers
+idolizes
+idolizing
+immobilize
+immobilized
+immobilizer
+immobilizes
+immobilizing
+immortalized
+immunization
+immunization's
+immunizations
+impersonalized
+industrialized
+industrializing
+inhumanizes
+institutionalization
+institutionalization's
+institutionalizations
+internationalization
+internationalization's
+internationalizations
+internationalized
+ionize
+ionized
+ionizer
+ionizers
+ionizes
+ionizing
+ionizings
+ionizion
+ionizions
+kinesthesis
+kinesthetic
+kinesthetically
+kinesthetics
+legitimize
+legitimized
+legitimizer
+legitimizes
+legitimizing
+libeler
+libelers
+libelous
+libelously
+liberalization
+liberalization's
+liberalizations
+licensable
+lionize
+lionized
+lionizer
+lionizers
+lionizes
+lionizing
+magnetized
+maneuverability
+maneuverable
+marbleized
+marbleizing
+maximization
+maximization's
+maximizations
+memorialized
+mesmerized
+metabolized
+metalization
+metalization's
+metalizations
+metropolitanization
+milligram
+milligram's
+milligrams
+milliliter
+milliliter's
+milliliters
+mineralized
+misbehavior
+misbehavior's
+misbehaviors
+misdemeanor
+misdemeanor's
+misdemeanors
+mobilization
+mobilization's
+mobilizations
+mobilize
+mobilized
+mobilizer
+mobilizes
+mobilizing
+modernization
+modernization's
+modernizations
+monetization
+monetize
+monetized
+monetizes
+monetizing
+monopolization
+monopolization's
+monopolizations
+monopolize
+monopolized
+monopolizer
+monopolizers
+monopolizes
+monopolizing
+multicolor
+multicolor's
+multicolored
+multicolors
+narcotizes
+nasalization
+nasalization's
+nasalizations
+nasalized
+naturalized
+neutralization
+neutralization's
+neutralizations
+nominalized
+novelized
+ocher
+ocher's
+ochers
+operationalization
+operationalizations
+operationalize
+operationalized
+orthogonalization
+orthogonalized
+orthopedic
+orthopedics
+ostracized
+outmaneuver
+outmaneuvered
+outmaneuvering
+outmaneuvers
+overemphasize
+overemphasized
+overemphasizer
+overemphasizers
+overemphasizes
+overemphasizing
+palatalization
+palatalize
+palatalized
+palatalizes
+palatalizing
+palletized
+panelization
+panelized
+parenthesize
+parenthesizes
+parenthesizing
+pasteurization
+pasteurizations
+pedaled
+pedaling
+peptizing
+platinize
+platinized
+platinizes
+platinizing
+plowshare
+plowshare's
+plowshares
+polarize
+polarized
+polarizer
+polarizers
+polarizes
+polarizing
+politicized
+polymerizations
+proletarianization
+proletarianized
+pronominalization
+pronominalize
+pummeled
+pyorrhea
+pyorrhea's
+pyorrheas
+pyrolyze
+pyrolyze's
+pyrolyzer
+pyrolyzes
+radiopasteurization
+radiosterilization
+radiosterilized
+rancor
+rancor's
+rancors
+randomization
+randomization's
+randomizations
+rationalization
+rationalization's
+rationalizations
+reacclimatizes
+reactualizes
+realizabilities
+realizability
+realizability's
+reconceptualization
+recrystallization
+recrystallization's
+recrystallizations
+recrystallize
+recrystallizing
+reemphasize
+reemphasized
+reemphasizer
+reemphasizers
+reemphasizes
+reemphasizing
+regularizing
+reharmonization
+rehumanizes
+remobilization
+remobilization's
+remobilizations
+remobilizes
+remonetization
+remonetize
+remonetized
+remonetizes
+remonetizing
+repopularize
+revaporization
+revaporization's
+revaporizations
+revisualization
+revisualization's
+revisualizations
+revitalization
+revitalize
+revitalized
+revitalizer
+revitalizers
+revitalizes
+revitalizing
+ritualized
+romanticize
+romanticizes
+romanticizing
+rubberized
+satirizes
+scandalized
+scandalizing
+sectionalized
+secularization
+secularization's
+secularizations
+secularized
+sensitized
+sentimentalize
+sentimentalized
+sentimentalizer
+sentimentalizers
+sentimentalizes
+sentimentalizing
+sexualized
+signalizes
+sniveled
+sniveler
+snivelers
+sniveling
+snivelings
+socialization
+socialization's
+socializations
+stabilization
+stabilization's
+stabilizations
+stigmatization
+stigmatization's
+stigmatizations
+stigmatized
+stylization
+stylization's
+stylizations
+subcategorizing
+subsidization
+subsidization's
+subsidizations
+substerilization
+suburbanization
+suburbanization's
+suburbanizations
+suburbanized
+suburbanizing
+swiveled
+swiveling
+systematization
+systematization's
+systematizations
+systemization
+systemization's
+systemizations
+teaseled
+teaseling
+teetotaler
+temporize
+temporized
+temporizer
+temporizer's
+temporizers
+temporizes
+temporizing
+temporizing's
+temporizingly
+temporizings
+theatergoer
+theatergoer's
+theatergoers
+theatergoing
+theatergoing's
+theatergoings
+thru
+tine's
+tinseled
+tinseling
+traditionalized
+travelog
+travelog's
+travelogs
+trialization
+triangularization
+triangularizations
+tricolor
+tricolor's
+tricolored
+tricolors
+tyrannize
+tyrannized
+tyrannizer
+tyrannizers
+tyrannizes
+tyrannizing
+tyrannizing's
+tyrannizingly
+tyrannizings
+unamortization
+unamortization's
+unamortizations
+uncanonized
+uncauterized
+uncauterized's
+uncauterizeds
+undemocratizes
+underutilization
+underutilized
+undialyzed
+undialyzed's
+undialyzeds
+undiscoloreds
+undramatized
+undramatized's
+undramatizeds
+unenergized
+unenergized's
+unenergizeds
+uneulogized
+uneulogized's
+uneulogizeds
+unfossilized
+unfossilized's
+unfossilizeds
+unfraternizing
+unfraternizing's
+unfraternizings
+unhydrolyzed
+unhydrolyzed's
+unhydrolyzeds
+unidolized
+unidolized's
+unidolizeds
+unimmortalized
+unindustrialized
+unindustrialized's
+unindustrializeds
+unitized
+universalize
+universalized
+universalizer
+universalizers
+universalizes
+universalizing
+unmagnetized
+unmagnetized's
+unmagnetizeds
+unmemorialized
+unmemorialized's
+unmemorializeds
+unmesmerized
+unmineralized
+unmineralized's
+unmineralizeds
+unmobilized
+unmobilized's
+unmobilizeds
+unmonopolized
+unmonopolizes
+unnaturalized
+unpatronizing
+unpolarized
+unpolarized's
+unpolarizeds
+unsatirizes
+unsavories
+unsavoriness
+unsavory
+unsavory's
+unscandalized
+unsecularized
+unsensitized
+unsentimentalizes
+unstigmatized
+unstigmatized's
+unstigmatizeds
+untemporizings
+untrammeled
+unvocalized
+unvocalized's
+unvocalizeds
+unvulcanized
+unvulcanized's
+unvulcanizeds
+updraft
+urbanization
+urbanization's
+urbanizations
+urbanized
+vacuolization
+vacuolization's
+vacuolizations
+vaporization
+vaporization's
+vaporizations
+varicolored
+varicolored's
+varicoloreds
+velarize
+velarized
+velarizes
+velarizing
+visualization
+visualization's
+visualizations
+vocalization
+vocalization's
+vocalizations
+vocalize
+vocalized
+vocalizer
+vocalizers
+vocalizes
+vocalizing
+volatilization
+volatilization's
+volatilizations
+vulcanized
+watercolor
+watercolor's
+watercolored
+watercoloring
+watercolorist
+watercolorists
+watercolors
+yodeled
+yodeler
+yodeling
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.2 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.2
new file mode 100644
index 00000000000..133e19e3675
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/american.2
@@ -0,0 +1,6767 @@
+Africanization
+Africanization's
+Africanizations
+Africanize
+Africanized
+Africanizes
+Africanizing
+Afrikanerization
+Afrikanerize
+Afrikanerized
+Afrikanerizes
+Afrikanerizing
+Americanization
+Americanization's
+Americanizations
+Americanize
+Americanizer
+Americanizers
+Americanizes
+Americanizing
+Anglicanize
+Anglicanizes
+Arabianize
+Arabianizes
+Arabicize
+Arabicizes
+Aryanization
+Aryanize
+Aryanized
+Aryanizes
+Aryanizing
+Asiaticization
+Asiaticization's
+Asiaticizations
+Asiaticize
+Asiaticizes
+Assyrianize
+Assyrianizes
+Australianize
+Australianizes
+Austrianize
+Austrianizes
+Babelize
+Babelizes
+Babylonize
+Babylonizes
+Balkanization
+Balkanization's
+Balkanizations
+Balkanize
+Balkanizes
+Berlinize
+Berlinizes
+Bessemerize
+Bessemerizes
+Birminghamize
+Birminghamizes
+Boswellize
+Boswellizes
+Byronize
+Byronizes
+Byzantinize
+Byzantinizes
+Caesarize
+Caesarizes
+Calvinize
+Calvinizes
+Canadianization
+Canadianization's
+Canadianizations
+Canadianize
+Canadianizes
+Caponization
+Catholicization
+Catholicized
+Catholicizing
+Celticize
+Celticizes
+Chablises
+Christianization
+Christianization's
+Christianizations
+Christianize
+Christianizer
+Christianizers
+Christianizes
+Ciceronianize
+Ciceronianizes
+Continentalize
+Continentalizes
+Corinthianize
+Corinthianizes
+Creolization
+Creolize
+Creolized
+Creolizes
+Creolizing
+Cubanize
+Cubanizes
+Czechization
+Czechization's
+Czechizations
+Danization
+Danization's
+Danizations
+Danize
+Danizes
+Darwinize
+Darwinizes
+Doricize
+Doricizes
+Edenization
+Edenization's
+Edenizations
+Edenize
+Edenizes
+Egyptianization
+Egyptianization's
+Egyptianizations
+Egyptianize
+Egyptianizes
+Egyptize
+Egyptizes
+Elizabethanize
+Elizabethanizes
+Englishize
+Englishizes
+Epicurize
+Epicurizes
+Episcopalianize
+Episcopalianizes
+Eskimoized
+Eskimoized's
+Eskimoizeds
+Essenize
+Essenizes
+Etna
+Europeanize
+Europeanizes
+Europeanizing
+Fletcherize
+Fletcherizes
+Francize
+Francizes
+Franklinization
+Franklinization's
+Franklinizations
+Frenchize
+Frenchizes
+Gaelicization
+Gaelicization's
+Gaelicizations
+Gaelicize
+Gaelicizes
+Gallicization
+Gallicize
+Gallicized
+Gallicizes
+Gallicizing
+Gothicize
+Gothicized
+Gothicizer
+Gothicizers
+Gothicizes
+Gothicizing
+Grecianize
+Grecianizes
+Greekize
+Greekizes
+Hanoverianize
+Hanoverianizes
+Hanoverize
+Hanoverizes
+Harvardize
+Harvardizes
+Harveyize
+Harveyizes
+Hattize
+Hattizes
+Hebraicize
+Hebraicizes
+Hegelianize
+Hegelianizes
+Hellenization
+Hellenizations
+Hellenize
+Hellenized
+Hellenizes
+Hellenizing
+Hispanicization
+Hispanicize
+Hispanicized
+Hispanicizes
+Hispanicizing
+Hollywoodize
+Hollywoodizes
+Hoosierize
+Hoosierizes
+Hooverize
+Hooverizes
+Iliadize
+Iliadizes
+Illuminize
+Illuminizes
+Ionicization
+Ionicization's
+Ionicizations
+Ionicize
+Ionicizes
+Iranize
+Iranizes
+Irishize
+Irishizes
+Islamization
+Islamization's
+Islamizations
+Islamize
+Islamized
+Islamizes
+Islamizing
+Israelitize
+Israelitizes
+Italianism
+Italianization
+Italianization's
+Italianizations
+Italianize
+Italianized
+Italianizer
+Italianizers
+Italianizes
+Italianizing
+Jacobinize
+Japanization
+Japanization's
+Japanizations
+Japanize
+Japanized
+Japanizes
+Japanizing
+Jesuitize
+Jesuitized
+Jesuitizes
+Jesuitizing
+Jonathanization
+Jonathanization's
+Jonathanizations
+Latinization
+Latinization's
+Latinizations
+Latinize
+Latinized
+Latinizer
+Latinizers
+Latinizes
+Latinizing
+Lilliputianize
+Lilliputianizes
+Listerize
+Listerizes
+Londonization
+Londonization's
+Londonizations
+Londonize
+Londonizes
+Lutheranize
+Lutheranizer
+Lutheranizers
+Lutheranizes
+Malayize
+Malayizes
+Manhattanize
+Manhattanizes
+Mediterraneanization
+Mediterraneanization's
+Mediterraneanizations
+Mediterraneanize
+Mediterraneanizes
+Melampus
+Mendelize
+Mendelizes
+Mexicanize
+Mexicanizes
+Midlandize
+Midlandizes
+Miltonize
+Miltonized
+Miltonizes
+Miltonizing
+Mohammedanization
+Mohammedanization's
+Mohammedanizations
+Mohammedanize
+Mohammedanized
+Mohammedanizes
+Mohammedanizing
+Molochize
+Molochizes
+Moravianized
+Moravianized's
+Moravianizeds
+Moslemize
+Moslemizes
+Napoleonize
+Napoleonizes
+Negroization
+Negroization's
+Negroizations
+Negroize
+Negroizes
+Newmanize
+Newmanizes
+Nipponize
+Nipponizes
+Normanization
+Normanization's
+Normanizations
+Normanize
+Normanized
+Normanizer
+Normanizers
+Normanizes
+Normanizing
+Occidentalization
+Occidentalization's
+Occidentalizations
+Occidentalize
+Occidentalized
+Occidentalizes
+Occidentalizing
+Olympianize
+Olympianizes
+Ottomanization
+Ottomanization's
+Ottomanizations
+Ottomanize
+Ottomanizes
+Parisianization
+Parisianization's
+Parisianizations
+Parisianize
+Parisianizes
+Pasteurizers
+Paulinize
+Paulinizes
+Paynize
+Paynizes
+Persianization
+Persianization's
+Persianizations
+Persianize
+Persianizes
+Peruvianize
+Peruvianizes
+Philistinize
+Philistinizes
+Presbyterianize
+Presbyterianizes
+Procrusteanize
+Procrusteanizes
+Protestantize
+Protestantizes
+Prussianization
+Prussianization's
+Prussianizations
+Prussianize
+Prussianized
+Prussianizer
+Prussianizers
+Prussianizes
+Prussianizing
+Pullmanize
+Pullmanizes
+Puritanize
+Puritanizer
+Puritanizers
+Puritanizes
+Pythagoreanize
+Pythagoreanizes
+Quakerization
+Quakerization's
+Quakerizations
+Quakerize
+Quakerizes
+Romania
+Romanization
+Romanization's
+Romanizations
+Romanize
+Romanized
+Romanizer
+Romanizers
+Romanizes
+Romanizing
+Russianization's
+Russianizations
+Russianized
+Russianizes
+Russianizing
+Sabbathize
+Sabbathizes
+Saxonization
+Saxonization's
+Saxonizations
+Saxonize
+Saxonizes
+Semiticize
+Semiticizes
+Semitization
+Semitization's
+Semitizations
+Semitize
+Semitizes
+Shakespearize
+Shakespearizes
+Shintoize
+Shintoizes
+Slavicize
+Slavicizes
+Slavization
+Slavization's
+Slavizations
+Slavize
+Slavizes
+Slavonicize
+Slavonicizes
+Sovietized
+Sovietizing
+Spaniardization
+Spaniardization's
+Spaniardizations
+Spaniardize
+Spaniardizes
+Spanishize
+Spanishizes
+Spartanize
+Spartanizes
+Syrianize
+Syrianizes
+Talmudization
+Talmudization's
+Talmudizations
+Talmudize
+Talmudizes
+Tammanyize
+Tammanyizes
+Taylorize
+Taylorizes
+Timonize
+Timonizes
+Toryize
+Toryizes
+Turkize
+Turkizes
+Tuscanize
+Tuscanizes
+Tylerize
+Tylerizes
+Unitarianize
+Unitarianizes
+Utopianize
+Utopianizes
+Vaticanization
+Vaticanization's
+Vaticanizations
+Vaticanize
+Vaticanizes
+Victorianize
+Victorianizes
+Vietnamization
+Vietnamize
+Vietnamized
+Vietnamizes
+Vietnamizing
+Wagnerize
+Wagnerizes
+Whitmanize
+Whitmanizes
+abnormalize
+abnormalizes
+abolitionize
+abolitionizes
+absolutization
+absolutization's
+absolutizations
+absolutize
+absolutizes
+accessorize
+acclimatizable
+acclimatizable's
+acclimatizables
+accouter
+accoutered
+accoutering
+accouters
+acculturize
+acetonization
+acetonization's
+acetonizations
+acetonize
+acetonizes
+achromatization
+achromatize
+achromatized
+achromatizes
+achromatizing
+acidize
+acidizes
+acronymize
+acronymizes
+actionize
+actionizes
+activize
+activizes
+adrenalize
+adrenalizes
+adulterize
+adulterizes
+adverbialize
+adverbializes
+aerosolization
+aestheticize
+aestheticizes
+agatize
+agatizes
+agenize
+aggrandizable
+aggrandizable's
+aggrandizables
+aggrandization
+aggrandize
+aggrandized
+aggrandizer
+aggrandizers
+aggrandizes
+aggrandizing
+agnize
+agnized
+agnizes
+agnizing
+agrarianize
+agrarianizes
+albumenization
+albumenize
+albumenized
+albumenizes
+albumenizing
+albuminization
+albuminization's
+albuminizations
+albuminize
+albuminizes
+alchemize
+alcoholizable
+alcoholizable's
+alcoholizables
+alcoholization
+alcoholization's
+alcoholizations
+alcoholize
+alcoholizes
+algebraization
+algebraization's
+algebraizations
+algebraize
+algebraizes
+alienize
+alienizes
+alkalinization
+alkalinization's
+alkalinizations
+alkalinize
+alkalinizes
+alkalization
+alkalize
+alkalized
+alkalizes
+alkalizing
+allegorization
+allegorize
+allegorized
+allegorizer
+allegorizes
+allegorizing
+alphabetization
+alphabetization's
+alphabetizations
+alternize
+alternizes
+aluminization
+aluminize
+aluminized
+aluminizes
+aluminizing
+amalgamatize
+amalgamatizes
+amalgamization
+amalgamization's
+amalgamizations
+amalgamize
+amalgamizes
+amor
+amor's
+amoralize
+amoralizes
+amorism
+amorism's
+amorisms
+amoristic
+amoristics
+amorphization
+amorphize
+amors
+amortizable
+amortizable's
+amortizables
+amortizement
+amortizement's
+amortizements
+anagrammatization
+anagrammatize
+analogism
+analogism's
+analogisms
+analogize
+analogizes
+analyzation
+anarchize
+anarchizes
+anathematization
+anathematize
+anathematized
+anathematizes
+anathematizing
+anatomize
+anemically
+anesthesiologist
+anesthesiology
+anesthetist
+anesthetization
+anesthetization's
+anesthetizations
+angelicize
+angelicizes
+angelize
+angelizes
+anglicization
+anglicization's
+anglicizations
+anglicize
+anglicized
+anglicizes
+angularization
+angularization's
+angularizations
+angularize
+angularizes
+anhydridization
+anhydridization's
+anhydridizations
+anhydridize
+anhydridizes
+animalization
+animalization's
+animalizations
+animalize
+animalized
+animalizes
+animalizing
+annalize
+annalizes
+annualization
+annualize
+annualizes
+annualizing
+anodization
+antagonization
+antagonization's
+antagonizations
+anthologization
+anthologize
+anthologized
+anthologizer
+anthologizes
+anthologizing
+anthracitization
+anthracitization's
+anthracitizations
+anthropomorphization
+anthropomorphize
+anthropomorphized
+anthropomorphizes
+anthropomorphizing
+anticatalyzer
+anticatalyzer's
+anticatalyzers
+anticentralization
+anticentralization's
+anticentralizations
+anticize
+anticizes
+antiepicenter
+antiepicenter's
+antiepicenters
+antifertilizer
+antifertilizer's
+antifertilizers
+antilabor
+antilabor's
+antilabors
+antioxidizer
+antioxidizer's
+antioxidizers
+antioxidizing
+antioxidizing's
+antioxidizings
+antipathize
+antipathizes
+antiquarianize
+antiquarianizes
+antirumor
+antirumor's
+antirumors
+antisensitize
+antisensitizer
+antisensitizer's
+antisensitizers
+antisensitizes
+antisepticize
+antisepticizes
+antiseptize
+antiseptizes
+antisiphon
+antisiphon's
+antisiphons
+antithesize
+antithesizes
+anviled
+anviling
+aphorize
+aphorized
+aphorizer
+aphorizers
+aphorizes
+aphorizing
+apostatization
+apostatize
+apostatized
+apostatizes
+apostatizing
+apostrophize
+apostrophized
+apostrophizes
+apostrophizing
+apotheosize
+appareling
+appetize
+appetized
+appetizement
+appetizement's
+appetizements
+appetizers
+appetizes
+arabization
+arabize
+arabized
+arabizes
+arabizing
+arbores
+arborization
+arborize
+arborized
+arborizes
+arborizing
+arcticize
+arcticizes
+arithmetization
+arithmetization's
+arithmetizations
+aromatization
+aromatize
+aromatized
+aromatizes
+aromatizing
+arsenicize
+arsenicizes
+arterialization
+arterialization's
+arterializations
+arterialize
+arterialized
+arterializes
+arterializing
+artificialize
+artificializes
+asafetida
+asepticize
+asepticizes
+astigmatizer
+astigmatizer's
+astigmatizers
+asynchronize
+asynchronized
+asynchronizes
+asynchronizing
+atomizability
+atomizable
+atticize
+atticizes
+attitudinization
+attitudinize
+attitudinized
+attitudinizes
+attitudinizing
+autoimmunization
+autoionization
+automatization
+automatization's
+automatizations
+automatize
+automatizes
+autotomize
+avianize
+azotization
+azotize
+azotized
+azotizes
+azotizing
+bachelorize
+bachelorizes
+baconize
+baconizes
+bacterize
+balladize
+balladizes
+balsamize
+balsamizes
+bantamize
+bantamizes
+baptizable
+baptizable's
+baptizables
+baptizement
+baptizement's
+baptizements
+barbarianize
+barbarianizes
+barbarization
+barbarize
+barbarized
+barbarizes
+barbarizing
+baronize
+baronizes
+bastardization
+bastardization's
+bastardizations
+beaverize
+beaverizes
+beclamor
+beclamored
+beclamoring
+beclamors
+becudgeled
+becudgeling
+bedlamize
+bedlamizes
+bedriveled
+bedriveling
+bejeweled
+bejeweling
+bemedaled
+bestialize
+bestialized
+bestializes
+bestializing
+beveler
+bevelers
+bichromatize
+bichromatizes
+bicolor
+bicolored
+bimetalist
+bimetalistic
+biographize
+biographizes
+biologize
+biologizes
+bipolarization
+bipolarize
+bipolarizes
+bister
+bistered
+bituminization
+bituminize
+bituminized
+bituminizes
+bituminizing
+bolshevize
+bonderize
+borize
+borizes
+botanize
+botanized
+botanizes
+botanizing
+boulevardize
+boulevardizes
+bourbonize
+bourbonizes
+bowdlerization
+boweled
+boweling
+brominize
+brominizes
+brutalization
+brutalization's
+brutalizations
+bureaucratize
+bureaucratized
+bureaucratizes
+busheler
+bushelers
+cadaverize
+cadaverizes
+cadmiumize
+cadmiumizes
+canaler
+canalers
+canalization
+canalization's
+canalizations
+canalize
+canalized
+canalizes
+canalizing
+cancelable
+cancelous
+cannibalization
+cannibalization's
+cannibalizations
+canonization
+canonization's
+canonizations
+canonize
+canonizer
+canonizers
+canonizes
+canonizing
+capitalizable
+capitalizable's
+capitalizables
+caponize
+caponized
+caponizes
+caponizing
+capsulization
+capsulize
+capsulized
+capsulizes
+capsulizing
+caracoled
+caracoling
+caramelization
+caramelization's
+caramelizations
+caramelize
+caramelized
+caramelizes
+caramelizing
+carbolization
+carbolize
+carbolized
+carbolizes
+carbolizing
+carbonatization
+carbonatization's
+carbonatizations
+carbonizable
+carbonizable's
+carbonizables
+carburization
+carburize
+carburized
+carburizes
+carburizing
+carnalize
+carnalizes
+caroled
+caroler
+carolers
+caroling
+cartelization
+cartelization's
+cartelizations
+cartelize
+cartelizes
+castorized
+castorized's
+castorizeds
+catabolize
+cataloguize
+cataloguizes
+catalyze
+catalyzer
+catalyzer's
+catalyzers
+catalyzes
+catechizable
+catechizable's
+catechizables
+catechization
+catechization's
+catechizations
+catechize
+catechized
+catechizer
+catechizers
+catechizes
+catechizing
+catheterization
+catheterization's
+catheterizations
+catheterize
+catheterizes
+catheti
+catheti's
+cathetis
+catholicize
+catholicizer
+catholicizers
+catholicizes
+causticization
+causticization's
+causticizations
+causticize
+causticizer
+causticizers
+causticizes
+cauterization
+cauterization's
+cauterizations
+cavilation
+caviled
+caviling
+cavilings
+celestialize
+celestializes
+centerable
+centerable's
+centerables
+centerboard
+centerless
+centigram
+centigram's
+centigrams
+centiliter
+centrifugalization
+centrifugalization's
+centrifugalizations
+centrifugalize
+centrifugalizes
+cephalization
+cerebralization
+cerebralization's
+cerebralizations
+cerebralize
+cerebralizes
+ceremonialize
+ceremonializes
+chameleonize
+chameleonizes
+championize
+championizes
+channelization
+channelization's
+channelizations
+channelize
+channelizes
+chattelization
+chattelization's
+chattelizations
+chattelize
+chattelizes
+cheerfulize
+cheerfulizes
+chemicalization
+chemicalization's
+chemicalizations
+chemicalize
+chemicalizes
+chiseling
+chiselings
+chloridize
+chloridizes
+chlorinize
+chlorinizes
+chloroformization
+chloroformization's
+chloroformizations
+chloroformize
+chloroformizes
+chorization
+chorization's
+chorizations
+chromatize
+chromatizes
+chromicize
+chromicizes
+chromize
+chromized
+chromizes
+chromizing
+chronologize
+chronologizes
+cinchonize
+cinematize
+circularization
+circularization's
+circularizations
+circularize
+circularized
+circularizer
+circularizers
+circularizes
+circularizing
+citizenize
+citizenizes
+civilianization
+civilianizations
+civilianize
+civilianized
+civilianizes
+civilianizing
+civilizable
+civilizable's
+civilizables
+clangor
+clangor's
+clangored
+clangoring
+clangors
+classicalize
+classicalizes
+classicization
+classicize
+classicized
+classicizes
+classicizing
+clericalize
+clericalizes
+climatize
+climatizes
+coalize
+coalizer
+coalizers
+coalizes
+cocainization
+cocainization's
+cocainizations
+cocainize
+cocainizes
+coeducationalize
+coeducationalizes
+coenamor
+coenamored
+coenamoring
+coenamors
+coequalize
+coequalizes
+cognizably
+cognize
+cognized
+cognizer
+cognizers
+cognizes
+cognizing
+collateralize
+collectivization
+collectivization's
+collectivizations
+collectivize
+collectivized
+collectivizes
+colloquialize
+colloquializes
+colonialize
+colonializes
+colonizabilities
+colonizability
+colonizability's
+colonizable
+colonizable's
+colonizables
+colonizationist
+colonizationist's
+colonizationists
+colorabilities
+colorability
+colorability's
+colorable
+colorable's
+colorableness
+colorables
+colorablies
+colorably
+colorama
+colorant
+colorants
+colorcast
+colorcaster
+colorcasters
+colorfast
+colorfastness
+colorific
+colorimetric
+colorimetrically
+colorism
+colorisms
+colorist
+colorist's
+coloristic
+coloristically
+coloristics
+colorists
+colorization
+colorization's
+colorizations
+colorize
+colorizes
+colorman
+colormap
+colormap's
+colormaps
+colormen
+columnization
+columnization's
+columnizations
+commercialize
+commercialized
+commercializes
+commercializing
+commonize
+commonizes
+communalization
+communalization's
+communalizations
+communalize
+communalized
+communalizer
+communalizers
+communalizes
+communalizing
+communization
+communization's
+communizations
+companionize
+companionizes
+compartmentalization
+compartmentalization's
+compartmentalizations
+compartmentize
+compartmentizes
+complementizer
+computerizable
+concenter
+concertize
+concertizer
+concertizers
+concertizes
+concretization
+concretizations
+concretize
+concretized
+concretizes
+concretizing
+conditionalize
+conditionalizes
+confederatize
+confederatizes
+congenialize
+congenializes
+congregationalize
+congregationalizes
+conservatize
+conservatized
+conservatizes
+conservatizing
+consonantize
+consonantizes
+constitutionalization
+constitutionalization's
+constitutionalizations
+constitutionalize
+constitutionalizes
+containerization
+containerize
+containerized
+containerizes
+containerizing
+contemporization
+contemporize
+contemporized
+contemporizes
+contemporizing
+controversialize
+controversializes
+conundrumize
+conundrumizes
+conventionalization
+conventionalization's
+conventionalizations
+conventionalize
+conventionalizes
+conventionalizing
+conventionize
+conventionizes
+conversationize
+conversationizes
+conveyorize
+conveyorized
+conveyorizes
+conveyorizing
+convivialize
+convivializes
+copolymerization
+copolymerization's
+copolymerizations
+copolymerize
+copolymerized
+copolymerizes
+copolymerizing
+copperization
+copperization's
+copperizations
+copperize
+copperizes
+coraled
+corbeled
+corbeling
+corbelings
+cordialize
+cordializes
+corporealization
+corporealization's
+corporealizations
+corporealize
+corporealizes
+cosmopolitanization
+cosmopolitanization's
+cosmopolitanizations
+cosmopolitanize
+cosmopolitanizes
+cottonization
+cottonization's
+cottonizations
+cottonize
+cottonizes
+councilorship
+counselee
+counselorship
+crawlerize
+crawlerizes
+creaturize
+creaturizes
+crenelate
+crenelated
+crenelates
+crenelation
+creneled
+creneling
+cretinization
+cretinization's
+cretinizations
+cretinize
+cretinizes
+criminalization
+criminalization's
+criminalize
+criticizable
+criticizable's
+criticizables
+crofterization
+crofterization's
+crofterizations
+crofterize
+crofterizes
+cruelize
+cruelizes
+crystallizabilities
+crystallizability
+crystallizability's
+crystallizable
+crystallizable's
+crystallizables
+cudgeled
+cudgeler
+cudgelers
+cudgeling
+cudgelings
+culturization
+culturization's
+culturizations
+culturize
+culturizes
+cupelation
+cupeled
+cupeler
+cupelers
+cupeling
+curarize
+curarized
+curarizes
+curarizing
+curatize
+curatizes
+curricularization
+curricularization's
+curricularizations
+curricularize
+curricularizes
+cutinize
+cutinized
+cutinizes
+cutinizing
+cutization
+cutization's
+cutizations
+cyclization
+cyclization's
+cyclizations
+cyclize
+cyclized
+cyclizes
+cyclizing
+dandyize
+dandyizes
+dastardize
+dastardizes
+deaconize
+deaconizes
+deaminize
+decaliter
+decaliters
+decameter
+decameter's
+decameters
+decarbonization
+decarbonize
+decarbonized
+decarbonizer
+decarbonizes
+decarbonizing
+decarburization
+decarburize
+decarburized
+decarburizes
+decarburizing
+decasualization
+decentralizationist
+decentralize
+decentralizes
+decigram
+decigram's
+decigrams
+deciliter
+deciliters
+decimalization
+decimalization's
+decimalizations
+decimalize
+decimalized
+decimalizes
+decimalizing
+decimeter
+decimeter's
+decimeters
+decolonization
+decolonize
+decolonized
+decolonizes
+decolonizing
+decolor
+decolorant
+decolorants
+decolorate
+decolorated
+decolorates
+decolored
+decoloring
+decolorise
+decolorised
+decolorises
+decolorization
+decolorize
+decolorized
+decolorizer
+decolorizes
+decolors
+decriminalization
+decriminalization's
+decriminalize
+deemphasization
+deemphasization's
+deenergize
+deenergized
+deenergizer
+deenergizes
+deenergizing
+defeminize
+defeminized
+defeminizes
+defeminizing
+defenseman
+definitization
+definitization's
+definitizations
+definitize
+definitized
+definitizes
+definitizing
+deflectionization
+deflectionization's
+deflectionizations
+deflectionize
+deflectionizes
+deformalize
+defunctionalization
+defunctionalization's
+defunctionalizations
+defunctionalize
+defunctionalizes
+dehumanization
+dehumanization's
+dehumanizations
+dehypnotization
+dehypnotize
+dehypnotized
+dehypnotizes
+dehypnotizing
+deindustrialization
+deindustrialize
+deionization
+deionize
+deionizes
+dekagram
+dekagram's
+dekagrams
+dekaliter
+dekameter
+dekameter's
+dekameters
+delimitize
+delimitizes
+delocalization
+delocalize
+deluster
+demagnetizable
+demagnetizable's
+demagnetizables
+demagnetization
+demagnetization's
+demagnetizations
+demagnetize
+demagnetized
+demagnetizer
+demagnetizers
+demagnetizes
+demagnetizing
+dematerialization
+dematerialize
+dematerialized
+dematerializes
+dematerializing
+demilitarization
+demilitarize
+demilitarized
+demilitarizes
+demilitarizing
+demineralize
+demineralized
+demineralizer
+demineralizes
+demineralizing
+demobilization
+demobilize
+demobilized
+demobilizes
+demobilizing
+demonetization
+demonetize
+demonetized
+demonetizes
+demonetizing
+demonization
+demonize
+demonized
+demonizes
+demonizing
+denationalization
+denationalize
+denationalized
+denationalizes
+denationalizing
+denaturalization
+denaturalize
+denaturalized
+denaturalizes
+denaturalizing
+denaturization
+denaturization's
+denaturizations
+denaturize
+denaturizer
+denaturizers
+denaturizes
+denicotinize
+denizenize
+denizenizes
+denominationalize
+denominationalizes
+denormalize
+dentalization
+dentalization's
+dentalizations
+dentalize
+dentalizes
+denuclearization
+denuclearize
+denuclearized
+denuclearizes
+denuclearizing
+deodorize
+deodorized
+deodorizes
+deodorizing
+deoxidizer
+departmentalization
+departmentalization's
+departmentalizations
+departmentalize
+departmentalizes
+departmentization
+departmentization's
+departmentizations
+departmentize
+departmentizes
+depersonalize
+depersonalizes
+depersonalizing
+depolarization
+depolarization's
+depolarizations
+depolarize
+depolarized
+depolarizer
+depolarizers
+depolarizes
+depolarizing
+depoliticization
+depoliticize
+depoliticized
+depoliticizes
+depoliticizing
+depolymerization
+depolymerize
+depolymerized
+depolymerizes
+depolymerizing
+depressurization
+depressurize
+depressurized
+depressurizes
+depressurizing
+deputationize
+deputationizes
+deputization
+deputize
+deputizes
+deputizing
+derationalization
+derationalization's
+derationalizations
+derationalize
+derationalizes
+deratization
+deratization's
+deratizations
+derealization
+deregulationize
+deregulationizes
+desalinization
+desalinize
+desensitization
+desensitization's
+desensitizations
+desensitize
+desensitized
+desensitizer
+desensitizers
+desensitizes
+desensitizing
+desexualization
+desexualize
+desexualized
+desexualizes
+desexualizing
+despiritualization
+despiritualize
+despotize
+despotizes
+destabilization
+destalinize
+destalinized
+destalinizes
+destalinizing
+desterilize
+desulfurization
+desulfurize
+desulphurization
+desulphurize
+desulphurized
+desulphurizes
+desulphurizing
+desynchronization
+detribalization
+detribalization's
+detribalizations
+develed
+develing
+deviled
+deviling
+devilize
+devilizes
+devitalization
+devitalize
+devitalized
+devitalizes
+devitalizing
+devocalize
+devolatilization
+devolatilize
+devolatilized
+devolatilizes
+devolatilizing
+diabolization
+diabolize
+diabolized
+diabolizes
+diabolizing
+diagonalization
+diagonalize
+diagonalizes
+dialecticize
+dialecticizes
+dialist
+dialists
+dialyzabilities
+dialyzability
+dialyzability's
+dialyzable
+dialyzable's
+dialyzables
+dialyze
+dialyzer
+dialyzer's
+dialyzers
+dialyzes
+diamondize
+diamondizes
+diarrheic
+diarrhetic
+dieselization
+dieselization's
+dieselizations
+dieselize
+dieselizes
+differentialize
+differentializes
+digitalize
+digitalized
+digitalizes
+digitalizing
+dimensionalization
+dimensionalize
+dimensionalized
+dimensionalizes
+dimensionalizing
+dimerization
+dimerization's
+dimerizations
+dimerize
+dimerized
+dimerizes
+dimerizing
+diminutivize
+diminutivizes
+diphthongization
+diphthongization's
+diphthongizations
+diphthongize
+diphthongizes
+diplomatize
+diplomatizes
+disangularize
+disangularizes
+disauthorize
+disauthorizes
+disboweled
+disboweling
+discanonization
+discanonization's
+discanonizations
+discanonize
+discanonizes
+discolor
+discolor's
+discoloration
+discoloring
+discolorization
+discolorization's
+discolorizations
+discolorment
+discolorment's
+discolorments
+discretization
+discretize
+disdenominationalize
+disdenominationalizes
+disdiplomatize
+disdiplomatizes
+disemboweled
+disemboweling
+disenamor
+disenamor's
+disenamors
+disenthrall
+disenthralls
+disharmonize
+disharmonizes
+disheveler
+disheveling
+dishonorable
+dishonorable's
+dishonorableness
+dishonorables
+dishonorablies
+dishonorably
+dishumanize
+dishumanizes
+dishumor
+dishumored
+dishumors
+disillusionize
+disillusionizer
+disillusionizers
+disillusionizes
+disindividualize
+disindividualizes
+dismalize
+dismalizes
+disnaturalization
+disnaturalization's
+disnaturalizations
+disnaturalize
+disnaturalizes
+disorganize
+disorganizer
+disorganizers
+disorganizes
+disorganizing
+disozonize
+disozonizes
+dispapalize
+dispapalizes
+dispauperize
+dispauperizes
+dispersonalize
+dispersonalizes
+dispopularize
+dispopularizes
+disrealize
+disrealizes
+disscepter
+disscepter's
+disscepters
+disseize
+disseized
+disseizes
+disseizin
+disseizing
+disseizins
+disseizor
+disseizors
+dissensualize
+dissensualizes
+dissocialize
+dissympathize
+dissympathizes
+disutilize
+disutilizes
+divinization
+divinization's
+divinizations
+divinize
+divinized
+divinizes
+divinizing
+dizequalise
+dizequalise's
+dizequaliser
+dizequalisers
+dizequalises
+dizorganisation
+dizorganise
+dockization
+dockization's
+dockizations
+dockize
+dockizes
+doctorization
+doctorization's
+doctorizations
+doctorize
+doctorizes
+doctrinization
+doctrinization's
+doctrinizations
+doctrinize
+doctrinizes
+documentize
+documentizes
+dogmatization
+dogmatize
+dogmatizer
+dognaped
+dognaping
+dolomitization
+dolomitization's
+dolomitizations
+dolomitize
+dolomitizes
+dolor
+domesticize
+domesticizes
+doweled
+doweler
+draftboard
+draftily
+draftsmanship
+dragonize
+dragonizes
+dramatizable
+dramatizable's
+dramatizables
+driveled
+driveler
+drivelers
+driveling
+dualization
+dualization's
+dualizations
+dualize
+dualizes
+ductilize
+ductilizes
+easternize
+ebonization
+ebonize
+ebonized
+ebonizes
+ebonizing
+ecclesiasticize
+ecclesiasticizes
+echoize
+echoizes
+eclecticize
+eclecticizes
+economization
+economization's
+economizations
+ecstaticize
+ecstaticizes
+editorialization
+effectualize
+effectualizes
+effeminatize
+effeminatizes
+egoize
+egoizer
+egoizers
+egoizes
+egyptus
+elasticization
+elasticize
+elasticized
+elasticizer
+elasticizers
+elasticizes
+elasticizing
+electricalize
+electricalizes
+electricize
+electricizes
+electroanesthesia
+electroanesthesia's
+electroanesthesias
+electrocauterization
+electrocauterization's
+electrocauterizations
+electrodialyze
+electrodialyzer
+electrodialyzer's
+electrodialyzers
+electrodialyzes
+electrogalvanize
+electrogalvanizes
+electrohomeopathies
+electrohomeopathy
+electrohomeopathy's
+electrolyze
+electrolyzed
+electrolyzes
+electrolyzing
+electromagnetizable
+electrotonize
+electrotonizes
+elegize
+elegized
+elegizes
+elegizing
+elementalize
+elementalizes
+emblematicize
+emblematicizes
+emblematization
+emblematize
+emblematized
+emblematizes
+emblematizing
+emblemize
+emblemizes
+embolization
+emboweled
+emboweling
+emotionalization
+emotionalization's
+emotionalizations
+emotionalize
+emotionalized
+emotionalizes
+emotionalizing
+emotionize
+emotionizes
+empaneled
+empaneling
+empathize
+empathized
+empathizes
+empathizing
+emulsionize
+emulsionizes
+enamelist
+enamelists
+enamor
+enamor's
+enamored
+enamored's
+enamoredness
+enamoreds
+enamoring
+enamorment
+enamorment's
+enamorments
+enamors
+enarbor
+enarbor's
+enarbors
+encarnalization
+encarnalize
+encarnalized
+encarnalizes
+encarnalizing
+encolor
+encolor's
+encolored
+encoloring
+encolors
+energization
+energize
+energizer
+energizers
+energizing
+engram
+engram's
+engrams
+engrandize
+engrandizement
+engrandizement's
+engrandizements
+engrandizes
+enhypostatize
+enhypostatizes
+enolization
+enolization's
+enolizations
+enolize
+enolizes
+ensepulcher
+ensepulcher's
+ensepulchers
+ensorceled
+ensorcels
+enthrallment
+enthrallment's
+enthrallments
+enthronization
+enthronization's
+enthronizations
+enthronize
+enthronizes
+entomologize
+entomologized
+entomologizes
+entomologizing
+envapor
+envapor's
+envapors
+envenomization
+eonism
+eonism's
+eonisms
+epigrammatization
+epigrammatize
+epigrammatized
+epigrammatizer
+epigrammatizes
+epigrammatizing
+epitaphize
+epitaphizes
+epithetize
+epithetizes
+epitomization
+epitomization's
+epitomizations
+epoches
+equestrianize
+equestrianizes
+ergotized
+ergotizes
+eroticization
+eroticize
+eroticized
+eroticizes
+eroticizing
+esophagus
+essentialize
+essentializes
+esterization
+esterization's
+esterizations
+esterize
+esterizes
+esthesia
+esthesiometer
+esthesiometer's
+esthesiometers
+esthesis
+eternalization
+eternalization's
+eternalizations
+eternalize
+eternalized
+eternalizes
+eternalizing
+eternize
+eternized
+eternizes
+eternizing
+etherealization
+etherealization's
+etherealizations
+etherealize
+etherealized
+etherealizes
+etherealizing
+etherization
+etherization's
+etherizations
+etherize
+etherized
+etherizer
+etherizers
+etherizes
+etherizing
+ethicization
+ethicize
+ethicized
+ethicizes
+ethicizing
+ethnicize
+ethnicizes
+etiologies
+etiology
+etiology's
+etymologization
+etymologize
+etymologized
+etymologizes
+etymologizing
+euhemerize
+eulogization
+eulogization's
+eulogizations
+euphemize
+euphemized
+euphemizer
+euphemizes
+euphemizing
+euphonization
+euphonize
+euphonized
+euphonizes
+euphonizing
+evangelization
+evangelization's
+evangelizations
+evangelize
+evangelized
+evangelizer
+evangelizers
+evangelizes
+evangelizing
+eventualize
+eventualizes
+evolutionize
+evolutionizes
+excursionize
+excursionizes
+exhibitionize
+exhibitionizes
+existentialize
+existentializes
+experimentalize
+experimentalizes
+experimentize
+experimentizes
+extemporization
+extemporization's
+extemporizations
+exteriorization
+exteriorization's
+exteriorizations
+exteriorize
+exteriorized
+exteriorizes
+exteriorizing
+externalize
+externalized
+externalizes
+externalizing
+facsimilize
+facsimilizes
+factorize
+factorized
+factorizes
+factorizing
+fanaticize
+fanaticized
+fanaticizes
+fanaticizing
+faradization
+faradization's
+faradizations
+faradize
+faradized
+faradizer
+faradizers
+faradizes
+faradizing
+fascisticization
+fascisticization's
+fascisticizations
+fascisticize
+fascisticizes
+fascistization
+fascistization's
+fascistizations
+fascistize
+fascistized
+fascistizes
+fascistizing
+fashionize
+fashionizes
+fatalize
+fatalizes
+favorless
+favorlesses
+fecundize
+fecundizes
+federalization
+federalization's
+federalizations
+femalize
+femalizes
+feminization
+feminizations
+feminize
+feminized
+feminizes
+feminizing
+ferreled
+ferreling
+ferritization
+ferritization's
+ferritizations
+fertilizable
+fertilizable's
+fertilizables
+fertilizational
+fertilizational's
+fertilizationals
+fervorless
+fervorlesses
+fetalization
+fetalization's
+fetalizations
+fetishization
+fetishization's
+fetishizations
+fetishize
+fetishized
+fetishizes
+fetishizing
+feudalizable
+feudalizable's
+feudalizables
+feudalization
+feudalization's
+feudalizations
+feudalize
+feudalized
+feudalizes
+feudalizing
+fiberization
+fiberize
+fiberized
+fiberizer
+fiberizer's
+fiberizers
+fiberizes
+fiberizing
+fiberless
+fiberlesses
+fibrize
+fibrizer
+fibrizers
+fibrizes
+fictionalization
+fictionalize
+fictionalized
+fictionalizes
+fictionalizing
+fictionization
+fictionization's
+fictionizations
+fictionize
+fictionizes
+figurize
+figurizes
+filmize
+filmizes
+fiscalization
+fiscalization's
+fiscalizations
+fiscalize
+fiscalizes
+flamboyantize
+flamboyantizes
+flanneled
+flanneling
+flavorful
+flavorfully
+flavorless
+flavorlesses
+flavorsome
+flavory
+floralize
+floralizes
+fluidization
+fluidization's
+fluidizations
+fluidize
+fluidized
+fluidizer
+fluidizes
+fluidizing
+fluoridization
+fluoridization's
+fluoridizations
+fluoridize
+fluoridizes
+focalization
+focalization's
+focalizations
+focalize
+focalized
+focalizes
+focalizing
+foreignization
+foreignization's
+foreignizations
+foreignize
+foreignizes
+forejudgment
+forejudgment's
+forejudgments
+formalizable
+formularization
+formularizations
+formularize
+formularized
+formularizer
+formularizes
+formularizing
+formulization
+formulizations
+formulize
+formulized
+formulizes
+formulizing
+forumize
+forumizes
+fossiled
+fossilizable
+fossilizable's
+fossilizables
+fossilization
+fossilization's
+fossilizations
+fossilize
+fossilizes
+fossilizing
+fractionalization
+fractionalize
+fractionalized
+fractionalizes
+fractionalizing
+fractionization
+fractionization's
+fractionizations
+fractionize
+fractionizes
+fragmentize
+fragmentized
+fragmentizer
+fragmentizes
+fragmentizing
+fraternization
+fraternization's
+fraternizations
+frictionize
+frictionizes
+frivoled
+frivoler
+frivoling
+fuelizer
+fuelizer's
+fuelizers
+functionalize
+functionalizes
+functionize
+functionizes
+funeralize
+funeralizes
+funneler
+futilize
+futilizes
+futurize
+futurizes
+gallantize
+gallantizes
+galvanization
+galvanization's
+galvanizations
+galvanize
+galvanized
+galvanizer
+galvanizers
+galvanizes
+gamboled
+gamboling
+gardenize
+gardenizes
+gaveled
+gaveler
+gaveling
+gelatinizabilities
+gelatinizability
+gelatinizability's
+gelatinizable
+gelatinizable's
+gelatinizables
+gelatinization
+gelatinization's
+gelatinizations
+gelatinize
+gelatinized
+gelatinizer
+gelatinizers
+gelatinizes
+gelatinizing
+generalizability
+generalizational
+genialize
+genializes
+genteelize
+genteelizes
+gentilization
+gentilization's
+gentilizations
+gentilize
+gentilizes
+gentlemanize
+gentlemanizes
+geologize
+geologized
+geologizes
+geologizing
+geometricize
+geometricizes
+geometrize
+geometrized
+geometrizes
+geometrizing
+germanization
+germanization's
+germanizations
+germanize
+germanizer
+germanizers
+germanizes
+germanizing
+ghettoization
+ghettoization's
+ghettoizations
+ghettoize
+ghettoized
+ghettoizes
+ghettoizing
+giantize
+giantizes
+gimbaling
+glacialize
+glacializes
+glamorization
+glamorizations
+glamorless
+globalization
+globalizations
+globalize
+globalized
+globalizes
+globalizing
+glottalize
+glottalizes
+gluttonize
+gluttonizes
+glycerinize
+glycerinizes
+glycerolize
+glycerolizes
+glycogenize
+glycogenizes
+gnosticize
+gnosticizer
+gnosticizers
+gnosticizes
+goddize
+goddizes
+goiter
+goiters
+gonorrhea
+gonorrheal
+gorgonize
+gorgonized
+gorgonizes
+gorgonizing
+gormandize
+gormandized
+gormandizer
+gormandizes
+gormandizing
+gospelize
+gospelizes
+gourmandize
+gourmandized
+gourmandizes
+gourmandizing
+governmentalize
+governmentalized
+governmentalizes
+governmentalizing
+grammaticize
+grammaticizes
+grangerize
+grangerized
+grangerizer
+grangerizes
+grangerizing
+granitization
+granitization's
+granitizations
+granitize
+granitizes
+granulize
+granulizes
+graphitizable
+graphitization
+graphitization's
+graphitizations
+graphitize
+graphitizes
+grecize
+grecized
+grecizing
+grueled
+grueler
+gruelers
+gutturalization
+gutturalization's
+gutturalizations
+gutturalize
+gutturalized
+gutturalizes
+gutturalizing
+gynecocrat
+gynecocratic
+gynecologic
+gynecologics
+gynecologies
+gynecology
+gynecology's
+gyrostabilizer
+habitualize
+habitualizes
+hamletization
+hamletization's
+hamletizations
+hamletize
+hamletizes
+handseled
+handseling
+hanseled
+hanseling
+harborage
+harborages
+harborful
+harborless
+harborlesses
+harmonizable
+harmonizable's
+harmonizables
+hatcheled
+hatcheling
+hazardize
+hazardizes
+heathenization
+heathenize
+heathenized
+heathenizes
+heathenizing
+heavenize
+heavenizes
+hebraization
+hebraizations
+hebraize
+hebraized
+hebraizes
+hebraizing
+hectogram
+hectogram's
+hectograms
+hectoliter
+hectometer
+hectometer's
+hectometers
+heparinize
+hepatize
+hepatized
+hepatizes
+hepatizing
+heraldize
+heraldizes
+hereticize
+hereticizes
+heroinize
+heroinizes
+heroization
+heroization's
+heroizations
+heroize
+heroized
+heroizes
+heroizing
+hiccup
+hiccuped
+hiccuping
+hiccups
+hirseled
+hirseling
+historicize
+historicized
+historicizes
+historicizing
+homeopathic
+homeopathically
+homeopathies
+homeopathy
+homeopathy's
+homeostasis
+homeostatic
+homeotypic
+hominization
+hominized
+homologization
+homologize
+homologized
+homologizer
+homologizes
+homologizing
+honorabilities
+honorability
+honorability's
+honorableship
+honorableship's
+honorableships
+honorless
+honorlesses
+hoodlumize
+hoodlumizes
+hooliganize
+hooliganizes
+horizontalization
+horizontalization's
+horizontalizations
+horizontalize
+horizontalizes
+hormonize
+hormonizes
+horrorize
+horrorizes
+hostilize
+hostilizes
+hotelization
+hotelization's
+hotelizations
+hotelize
+hotelizes
+houseled
+houseling
+houselings
+hoveled
+hoveler
+hovelers
+hoveling
+hucksterize
+hucksterizes
+humanitarianize
+humanitarianizes
+humanization
+humanization's
+humanizations
+humoral
+humorize
+humorizes
+humorless
+humorlesses
+humorlessness
+humorsome
+hurricanize
+hurricanizes
+hyalinization
+hyalinization's
+hyalinizations
+hyalinize
+hyalinizes
+hybridizable
+hybridizable's
+hybridizables
+hybridization
+hybridization's
+hybridizations
+hybridize
+hybridized
+hybridizer
+hybridizers
+hybridizes
+hybridizing
+hydrocaryaceous
+hydrocaryaceouses
+hydrogenization
+hydrogenization's
+hydrogenizations
+hydrogenize
+hydrogenized
+hydrogenizes
+hydrogenizing
+hydrolyzable
+hydrolyzable's
+hydrolyzables
+hydrolyze
+hydrolyze's
+hydrolyzes
+hydroxylization
+hydroxylization's
+hydroxylizations
+hydroxylize
+hydroxylizes
+hygienization
+hygienization's
+hygienizations
+hygienize
+hygienizes
+hyperbolize
+hyperbolized
+hyperbolizes
+hyperbolizing
+hypercatharsises
+hypercivilization
+hypercivilization's
+hypercivilizations
+hypercivilized
+hypercivilized's
+hypercivilizeds
+hypercriticize
+hypercriticizes
+hyperemphasize
+hyperemphasizes
+hyperesthesia
+hyperesthetic
+hyperimmunization
+hyperimmunization's
+hyperimmunizations
+hyperimmunize
+hyperimmunizes
+hyperinsulinization
+hyperinsulinization's
+hyperinsulinizations
+hyperinsulinize
+hyperinsulinizes
+hyperoxygenize
+hyperoxygenizes
+hyperparasitize
+hyperparasitizes
+hyperrealize
+hyperrealizes
+hypersensitization
+hypersensitization's
+hypersensitizations
+hypersensitize
+hypersensitized
+hypersensitizes
+hypersensitizing
+hyperspiritualizing
+hyperspiritualizing's
+hyperspiritualizings
+hyperthyroidization
+hyperthyroidization's
+hyperthyroidizations
+hyperthyroidize
+hyperthyroidizes
+hypervitalization
+hypervitalization's
+hypervitalizations
+hypervitalize
+hypervitalizes
+hyphenization
+hyphenization's
+hyphenizations
+hyphenize
+hyphenizes
+hypnotizabilities
+hypnotizability
+hypnotizability's
+hypnotizable
+hypnotizable's
+hypnotizables
+hypnotization
+hypnotization's
+hypnotizations
+hypnotize
+hypnotizer
+hypnotizers
+hypnotizes
+hypnotizing
+hypocenter
+hyposensitization
+hyposensitize
+hypostatization
+hypostatization's
+hypostatizations
+hypostatize
+hypostatizes
+hysterectomize
+hysterectomized
+hysterectomizes
+hysterectomizing
+ichneumonized
+ichneumonized's
+ichneumonizeds
+idiotize
+idiotizes
+idolatrize
+idolatrized
+idolatrizes
+idolatrizing
+idolization
+idolization's
+idolizations
+illegalization
+illegalize
+illegalized
+illegalizes
+illegalizing
+illegitimatize
+illegitimatizes
+illutation
+illutation's
+illutations
+immaterialization
+immaterialize
+immaterialized
+immaterializes
+immaterializing
+immobilization
+immobilization's
+immobilizations
+immoralize
+immoralizes
+immortalizable
+immortalizable's
+immortalizables
+immortalization
+immortalization's
+immortalizations
+immortalize
+immortalizer
+immortalizers
+immortalizes
+immortalizing
+immunize
+immunized
+immunizes
+immunizing
+impactionize
+impactionizes
+impaneled
+impaneling
+imperialization
+imperialization's
+imperializations
+imperialize
+imperializes
+imperiling
+impersonalization
+impersonalization's
+impersonalizations
+impersonalize
+impersonalizes
+impersonalizing
+improvizatorize
+improvizatorizes
+individualization
+individualization's
+individualizations
+indraft
+industrialize
+industrializes
+inferiorize
+inferiorizes
+infernalize
+infernalizes
+infidelize
+infidelizes
+infinitize
+infinitizes
+informalize
+inhumanize
+initializable
+insolubilization
+insolubilize
+institutionize
+institutionizes
+instrumentalize
+instrumentalizes
+insularize
+insularizes
+insurrectionize
+insurrectionizes
+integralization
+integralization's
+integralizations
+integralize
+integralizes
+intellectualization
+intellectualization's
+intellectualizations
+intellectualize
+intellectualized
+intellectualizer
+intellectualizers
+intellectualizes
+intellectualizing
+intercivilization
+intercivilization's
+intercivilizations
+intercolonization
+intercolonization's
+intercolonizations
+intercrystallization
+intercrystallization's
+intercrystallizations
+intercrystallize
+intercrystallizes
+interhybridize
+interhybridizes
+interiorization
+interiorize
+interiorized
+interiorizes
+interiorizing
+interjectionalize
+interjectionalizes
+interjectionize
+interjectionizes
+interjudgment
+interjudgment's
+interjudgments
+internationalize
+internationalizes
+internationalizing
+interorganizational
+intraorganization
+intraorganization's
+intraorganizations
+iodization
+iodize
+iodized
+iodizer
+iodizers
+iodizes
+iodizing
+ionizable
+ionizable's
+ionizables
+ionization
+ionization's
+ionizations
+ironize
+ironizes
+irrationalize
+irrationalizes
+irregularize
+irregularizes
+isochronization
+isochronize
+isochronized
+isochronizes
+isochronizing
+isoimmunization
+isoimmunization's
+isoimmunizations
+isoimmunize
+isoimmunizes
+isomerization
+isomerization's
+isomerizations
+isomerize
+isomerized
+isomerizeparabolization
+isomerizes
+isomerizing
+italicization
+italicization's
+italicizations
+jargonization
+jargonization's
+jargonizations
+jargonize
+jargonized
+jargonizes
+jargonizing
+jasperize
+jasperizes
+jeopardization
+jeweleries
+jewelery
+journalization
+journalization's
+journalizations
+jovialize
+jovializes
+judgmental
+judicialize
+judicializes
+juvenilize
+juvenilizes
+kaolinization
+kaolinization's
+kaolinizations
+kaolinize
+kaolinizes
+kenneled
+kenneling
+keratinization
+keratinize
+keratinized
+keratinizes
+keratinizing
+kerneled
+kerneling
+ketonization
+ketonization's
+ketonizations
+ketonize
+ketonizes
+kiloliter
+kiloliter's
+kiloliters
+kinesthesia
+kyanize
+kyanized
+kyanizes
+kyanizing
+labelable
+labialization
+labialization's
+labializations
+labialize
+labialized
+labializes
+labializing
+labilization
+labilization's
+labilizations
+labilize
+labilizes
+laborabilities
+laborability
+laborability's
+laborable
+laborable's
+laborables
+laborhood
+laborhood's
+laborhoods
+laborism
+laborism's
+laborisms
+laborist
+laborist's
+laborists
+laborite
+laborite's
+laborites
+laborless
+laborlesses
+labour's
+lackluster
+laconize
+laconized
+laconizes
+laconizing
+lactonized
+laicization
+laicizations
+laicize
+laicized
+laicizes
+laicizing
+lapeled
+latentize
+latentizes
+lateralization
+lateralization's
+lateralizations
+lateralize
+lateralizes
+laterization
+laterization's
+laterizations
+laureling
+leatherize
+leatherizes
+legitimatize
+legitimatized
+legitimatizes
+legitimatizing
+legitimization
+legitimization's
+legitimizations
+lethalize
+lethalizes
+leukemia
+lexiconize
+lexiconizes
+libelant
+libelants
+libeled
+libelee
+libelees
+libeling
+lichenization
+lichenization's
+lichenizations
+lichenize
+lichenizes
+lignitize
+lignitizes
+linearization
+linearization's
+linearizations
+linenize
+linenizer
+linenizers
+linenizes
+lingualize
+lingualizes
+lionizable
+lionizable's
+lionizables
+lionization
+lionization's
+lionizations
+liquidization
+liquidize
+liquidized
+liquidizer
+liquidizers
+liquidizes
+liquidizing
+literalization
+literalization's
+literalizations
+literalize
+literalized
+literalizer
+literalizers
+literalizes
+lithographize
+lithographizes
+localizable
+localizable's
+localizables
+logicalization
+logicalization's
+logicalizations
+logicalize
+logicalizes
+logicize
+logicized
+logicizes
+logicizing
+logorrhea
+logorrhea's
+logorrheas
+louver
+louvered
+louvers
+loyalize
+loyalizes
+lumbarization
+lumbarization's
+lumbarizations
+lunatize
+lunatizes
+lusterless
+lusterware
+luteinization
+luteinize
+lyophilization
+lyophilize
+lyophilized
+lyophilizer
+lyricize
+lyricized
+lyricizes
+lyricizing
+lysogenization
+lysogenize
+macadamization
+macadamize
+macadamized
+macadamizes
+macadamizing
+macarize
+macarized
+macarizes
+macarizing
+machinization
+machinization's
+machinizations
+machinize
+machinizes
+magicalize
+magicalizes
+magnetizabilities
+magnetizability
+magnetizability's
+magnetizable
+magnetizable's
+magnetizables
+magnetize
+magnetizer
+magnetizers
+magnetizes
+magnetizing
+mahoganize
+mahoganized
+mahoganizes
+mahoganizing
+majorize
+majorizes
+malleablize
+malleablizes
+malodor
+mandarinize
+mandarinizes
+mannerize
+mannerizes
+marbleize
+marbleizes
+marginalization
+marginalize
+marginalized
+marginalizes
+marginalizing
+marsupialization
+marsupialization's
+marsupializations
+marsupialize
+marsupializes
+martialization
+martialization's
+martializations
+martialize
+martializes
+martyrization
+martyrization's
+martyrizations
+martyrize
+martyrized
+martyrizer
+martyrizers
+martyrizes
+martyrizing
+marveler
+masculinization
+masculinization's
+masculinizations
+masculinize
+masculinized
+masculinizes
+masculinizing
+materialization
+materialization's
+materializations
+maternalize
+maternalizes
+mathematicize
+mathematicizes
+mathematization
+matronize
+matronized
+matronizes
+matronizing
+maudlinize
+maudlinizes
+mazurka
+mazurka's
+mazurkas
+mechanicalization
+mechanicalization's
+mechanicalizations
+mechanicalize
+mechanicalizes
+mechanizable
+medalist
+medalists
+medalize
+medalizes
+medialization
+medialization's
+medializations
+medialize
+medializes
+mediatization
+mediatization's
+mediatizations
+mediatize
+mediatized
+mediatizes
+mediatizing
+medievalize
+medievalizes
+mediumization
+mediumization's
+mediumizations
+mediumize
+mediumizes
+melanization
+melanize
+melanized
+melanizes
+melanizing
+melodization
+melodize
+melodized
+melodizer
+melodizes
+melodizing
+melodramatization
+melodramatize
+melodramatized
+melodramatizes
+melodramatizing
+memorialization
+memorialization's
+memorializations
+memorialize
+memorializer
+memorializers
+memorializes
+memorializing
+memorizable
+memorizable's
+memorizables
+mentalization
+mentalization's
+mentalizations
+mentalize
+mentalizes
+mercerization
+mercerization's
+mercerizations
+mercerize
+mercerized
+mercerizer
+mercerizers
+mercerizes
+mercerizing
+mercurialization
+mercurialization's
+mercurializations
+mercurialize
+mercurializes
+mesmerizabilities
+mesmerizability
+mesmerizability's
+mesmerizable
+mesmerizable's
+mesmerizables
+mesmerization
+mesmerization's
+mesmerizations
+mesmerize
+mesmerizer
+mesmerizers
+mesmerizes
+mesmerizing
+metabolizable
+metabolizable's
+metabolizables
+metabolize
+metabolizes
+metabolizing
+metacenter
+metagram
+metagram's
+metagrams
+metalize
+metalized
+metalizes
+metalizing
+metallicize
+metallicizes
+metamerization
+metamerization's
+metamerizations
+metamerized
+metamerized's
+metamerizeds
+metaphonize
+metaphonizes
+metaphorize
+metaphorizes
+metaphysicize
+metaphysicizes
+metastasize
+metastasized
+metastasizes
+metastasizing
+meteorization
+meteorization's
+meteorizations
+meteorize
+meteorizes
+methodization
+methodization's
+methodizations
+methodize
+methodized
+methodizer
+methodizers
+methodizes
+methodizing
+metricize
+metricized
+metricizes
+metricizing
+metropolitanize
+metropolitanizes
+microgram
+microgram's
+micrograms
+microliter
+microliter's
+microliters
+micromillimeter
+micromillimeter's
+micromillimeters
+microminiaturization
+microminiaturize
+microminiaturized
+microminiaturizer
+microminiaturizers
+microminiaturizes
+microminiaturizing
+micronization
+micronization's
+micronizations
+micronize
+micronizes
+micropolarization
+micropolarization's
+micropolarizations
+microscopize
+microscopizes
+militarization
+militarizations
+militarize
+militarized
+militarizes
+militarizing
+millionize
+millionizes
+mineralizable
+mineralizable's
+mineralizables
+mineralization
+mineralization's
+mineralizations
+mineralize
+mineralizer
+mineralizers
+mineralizes
+mineralizing
+miraculize
+miraculized
+miraculizes
+miraculizing
+mirrorize
+mirrorizes
+misalphabetize
+misalphabetizes
+misanthropize
+misanthropized
+misanthropizes
+misanthropizing
+misauthorization
+misauthorization's
+misauthorizations
+misauthorize
+misauthorizes
+misbaptize
+misbaptizes
+miscanonize
+miscanonizes
+mischaracterization
+mischaracterization's
+mischaracterizations
+mischaracterize
+mischaracterizes
+miscolor
+miscolor's
+miscolored
+miscoloring
+miscolors
+misendeavor
+misendeavor's
+misendeavors
+mislabeled
+mislabeling
+mislabor
+mislabor's
+mislabored
+mislaboring
+mislabors
+misorganization
+misorganization's
+misorganizations
+misorganize
+misorganizes
+misrealize
+misrealizes
+misrecognize
+misrecognizes
+misrouting
+missionarize
+missionarizes
+missionization
+missionize
+missionized
+missionizer
+missionizers
+missionizes
+missionizing
+mizanthropise
+mizanthropises
+mobilizable
+mobilizable's
+mobilizables
+modalize
+modalizes
+modernizable
+modernizable's
+modernizables
+moisturization
+moisturize
+moisturized
+moisturizer
+moisturizers
+moisturizes
+moisturizing
+molarization
+molarizations
+monarchize
+monarchizer
+monarchizers
+monarchizes
+monasticize
+monasticizes
+mongrelization
+mongrelizations
+mongrelize
+mongrelized
+mongrelizer
+mongrelizes
+mongrelizing
+monochordize
+monochordizes
+monologize
+monologized
+monologizes
+monologizing
+monometalism
+monometalist
+monopolizable
+monopolizable's
+monopolizables
+monotonize
+monotonizes
+monumentalization
+monumentalization's
+monumentalizations
+monumentalize
+monumentalized
+monumentalizes
+monumentalizing
+moralization
+moralization's
+moralizations
+moralize
+moralized
+moralizer
+moralizers
+moralizes
+moralizing
+moralizinglies
+moralizingly
+morbidize
+morbidizes
+morphinization
+morphinization's
+morphinizations
+morphinize
+morphinizes
+morseled
+morseling
+morselization
+morselization's
+morselizations
+morselize
+morselizes
+mortalize
+mortalizes
+mortarize
+mortarizes
+motorization
+motorization's
+motorizations
+multifibered
+multifibered's
+multifibereds
+municipalization
+municipalization's
+municipalizations
+municipalize
+municipalized
+municipalizer
+municipalizers
+municipalizes
+municipalizing
+muscularize
+muscularizes
+museumize
+museumizes
+musicalization
+musicalization's
+musicalizations
+musicalize
+musicalizes
+mutualization
+mutualization's
+mutualizations
+mutualize
+mutualized
+mutualizes
+mutualizing
+myelinization
+myelinization's
+myelinizations
+mysticize
+mysticizes
+mythicization
+mythicize
+mythicized
+mythicizer
+mythicizers
+mythicizes
+mythicizing
+mythize
+mythizes
+mythologization
+mythologize
+mythologized
+mythologizer
+mythologizes
+mythologizing
+nakedize
+nakedizes
+nanogram
+nanograms
+nanometer
+nanometers
+narcotization
+narcotize
+narcotized
+narcotizing
+nasalize
+nasalizes
+nasalizing
+naturalize
+naturalizer
+naturalizers
+naturalizes
+naturalizing
+naturize
+naturizes
+nebularization
+nebularization's
+nebularizations
+nebularize
+nebularizes
+nebulization
+nebulizations
+nebulize
+nebulized
+nebulizer
+nebulizes
+nebulizing
+necrotize
+necrotized
+necrotizes
+necrotizing
+nectarize
+nectarizes
+neighborless
+neighborlesses
+neighborlike
+neighborlike's
+neighborlikes
+neighborship
+neighborship's
+neighborships
+neologization
+neologize
+neologized
+neologizes
+neologizing
+neuroticize
+neuroticizes
+newspaperized
+newspaperized's
+newspaperizeds
+nickelization
+nickelization's
+nickelizations
+nickelize
+nickelizes
+nicotinize
+nicotinizes
+nightingalize
+nightingalizes
+niter
+nitridization
+nitridization's
+nitridizations
+nitridize
+nitridizes
+nitrogenization
+nitrogenization's
+nitrogenizations
+nitrogenize
+nitrogenized
+nitrogenizes
+nitrogenizing
+nodulize
+nodulizes
+nomadization
+nomadization's
+nomadizations
+nomadize
+nomadized
+nomadizes
+nomadizing
+nominalize
+nominalizes
+nominalizing
+nonacknowledgment
+nonacknowledgment's
+nonacknowledgments
+nonanesthetized
+nonapostatizing
+nonapostatizing's
+nonapostatizings
+noncanonization
+noncanonization's
+noncanonizations
+noncartelized
+noncartelized's
+noncartelizeds
+noncatechizable
+noncatechizable's
+noncatechizables
+noncivilized
+noncivilized's
+noncivilizeds
+noncoloring
+noncoloring's
+noncolorings
+noncrystallizable
+noncrystallizable's
+noncrystallizables
+noncrystallized
+noncrystallized's
+noncrystallizeds
+noncrystallizing
+noncrystallizing's
+noncrystallizings
+nondemobilization
+nondemobilization's
+nondemobilizations
+nondialyzing
+nondialyzing's
+nondialyzings
+nondimensionalize
+nondimensionalized
+nonfavorite
+nonfavorite's
+nonfavorites
+nonfulfillment
+nonfulfillment's
+nonfulfillments
+nongalvanized
+nongalvanized's
+nongalvanizeds
+nongelatinizing
+nongelatinizing's
+nongelatinizings
+nonhydrolyzable
+nonhydrolyzable's
+nonhydrolyzables
+nonimmunized
+nonimmunized's
+nonimmunizeds
+nonionized
+nonionized's
+nonionizeds
+nonionizing
+nonionizing's
+nonionizings
+nonlocalized
+nonlocalized's
+nonlocalizeds
+nonmagnetizable
+nonmagnetizable's
+nonmagnetizables
+nonnitrogenized
+nonnitrogenized's
+nonnitrogenizeds
+nonorganization
+nonorganization's
+nonorganizations
+nonoxidizable
+nonoxidizable's
+nonoxidizables
+nonoxidizing
+nonoxidizing's
+nonoxidizings
+nonparlor
+nonparlor's
+nonparlors
+nonpenalized
+nonpenalized's
+nonpenalizeds
+nonphosphorized
+nonphosphorized's
+nonphosphorizeds
+nonpolarizable
+nonpolarizable's
+nonpolarizables
+nonpolarized
+nonpolarizing
+nonpolarizing's
+nonpolarizings
+nonrationalized
+nonrationalized's
+nonrationalizeds
+nonrealization
+nonrealization's
+nonrealizations
+nonrecognized
+nonrecognized's
+nonrecognizeds
+nonschematized
+nonschematized's
+nonschematizeds
+nonsensitized
+nonsensitized's
+nonsensitizeds
+nonspecialized
+nonspecialized's
+nonspecializeds
+nonstandardized
+nonstandardized's
+nonstandardizeds
+nonstylized
+nonstylized's
+nonstylizeds
+nonsympathizer
+nonsympathizer's
+nonsympathizers
+nonsynthesized
+nonsynthesized's
+nonsynthesizeds
+nontemporizing
+nontemporizing's
+nontemporizings
+nonutilized
+nonutilized's
+nonutilizeds
+nonvisualized
+nonvisualized's
+nonvisualizeds
+nonvolatilized
+nonvolatilized's
+nonvolatilizeds
+nonvulcanizable
+nonvulcanizable's
+nonvulcanizables
+normalizable
+northernize
+northernizes
+nosize
+notarization
+notarizations
+nothingize
+nothingizes
+nounize
+nounizes
+novelization
+novelization's
+novelizations
+novelize
+novelizer
+novelizers
+novelizes
+novelizing
+nuptialize
+nuptializes
+obelize
+obelized
+obelizes
+obelizing
+objectivize
+objectivizes
+objectization
+objectization's
+objectizations
+objectize
+objectizes
+oblivionize
+oblivionizes
+ocherous
+odorful
+odorize
+odorized
+odorizer
+odorizes
+odorizing
+odorless
+odorlesses
+offenseless
+offenselesses
+offenselessly
+officialization
+officialization's
+officializations
+officialize
+officializes
+onionized
+onionized's
+onionizeds
+opaled
+opalize
+opalizes
+operatize
+operatizes
+optionalize
+optionalizes
+oralization
+oralization's
+oralizations
+oralize
+oralizes
+orangize
+orangizes
+oratorize
+oratorizes
+organizabilities
+organizability
+organizability's
+organizationist
+organizationist's
+organizationists
+orientalization
+orientalization's
+orientalizations
+orientalize
+orientalized
+orientalizes
+orientalizing
+orientization
+orientization's
+orientizations
+orientize
+orientizes
+ornamentalize
+ornamentalizes
+orphanize
+orphanizes
+orthocenter
+orthogonalize
+orthogonalizes
+orthogonalizing
+orthopedically
+orthopedist
+ostracizable
+ostracizable's
+ostracizables
+ostracization
+ostracization's
+ostracizations
+ostracize
+ostracizer
+ostracizers
+ostracizes
+ostracizing
+outcaviled
+outcaviling
+outclamor
+outclamor's
+outclamors
+outhumor
+outhumor's
+outhumored
+outhumoring
+outhumors
+outhyperbolize
+outhyperbolizes
+outlabor
+outlabor's
+outlabors
+outrivaled
+outrivaling
+outsavor
+outsavor's
+outsavoring
+outsavors
+outsplendor
+outsplendor's
+outsplendors
+outtyrannize
+outtyrannizes
+ovalization
+ovalization's
+ovalizations
+ovalize
+ovalizes
+ovariectomized
+overagonize
+overagonizes
+overbrutalize
+overbrutalizes
+overcapitalization
+overcapitalization's
+overcapitalizations
+overcapitalize
+overcapitalized
+overcapitalizes
+overcapitalizing
+overcentralization
+overcentralization's
+overcentralizations
+overcentralize
+overcentralizes
+overcivilization
+overcivilization's
+overcivilizations
+overcivilize
+overcivilizes
+overclamor
+overclamor's
+overclamors
+overcolor
+overcolor's
+overcolors
+overcriticize
+overcriticizes
+overdoctrinize
+overdoctrinizes
+overemotionalize
+overemotionalizes
+overfavor
+overfavor's
+overfavorable
+overfavorable's
+overfavorables
+overfavorablies
+overfavorably
+overfavors
+overfertilization
+overgeneralize
+overgeneralizes
+overhonor
+overhonor's
+overhonors
+overhumanize
+overhumanizes
+overindustrialization
+overindustrialization's
+overindustrializations
+overindustrialize
+overindustrializes
+overjudgment
+overjudgment's
+overjudgments
+overlabor
+overlabor's
+overlabors
+overnationalization
+overnationalization's
+overnationalizations
+overrapturize
+overrapturizes
+overrationalize
+overrationalizes
+oversentimentalize
+oversentimentalizes
+overspecialization
+overspecialization's
+overspecializations
+overspecialize
+overspecialized
+overspecializes
+oversystematize
+oversystematizes
+overunionized
+overunionized's
+overunionizeds
+overurbanization
+overurbanization's
+overurbanizations
+overwomanize
+overwomanizes
+oxidizabilities
+oxidizability
+oxidizability's
+oxidizable
+oxidizable's
+oxidizables
+oxidization
+oxidization's
+oxidizations
+oxidizement
+oxidizement's
+oxidizements
+oxygenizable
+oxygenizable's
+oxygenizables
+oxygenize
+oxygenizement
+oxygenizement's
+oxygenizements
+oxygenizer
+oxygenizers
+oxygenizes
+ozonization
+ozonization's
+ozonizations
+ozonize
+ozonized
+ozonizer
+ozonizers
+ozonizes
+ozonizing
+packetization
+packetize
+packetized
+packetizer
+packetizer's
+packetizers
+packetizes
+packetizing
+paeanize
+paeanizes
+paganization
+paganization's
+paganizations
+paganize
+paganized
+paganizer
+paganizers
+paganizes
+paganizing
+palatization
+palatization's
+palatizations
+palatize
+palatizes
+palladiumize
+palladiumizes
+palletization
+palletizations
+palletize
+palletizer
+palletizes
+palletizing
+pamperize
+pamperizes
+pamphletize
+pamphletizes
+panderize
+panderizes
+pantheonization
+pantheonization's
+pantheonizations
+pantheonize
+pantheonizes
+papalization
+papalization's
+papalizations
+papalize
+papalizer
+papalizers
+papalizes
+parabolize
+parabolized
+parabolizes
+parabolizing
+paraffinize
+paraffinizes
+paragraphize
+paragraphizes
+paralyzation
+parasitization
+parasitize
+parasitized
+parasitizes
+parasitizing
+parathyroidectomize
+parathyroidectomized
+parathyroidectomizes
+parathyroidectomizing
+parceler
+parchmentize
+parchmentizes
+parenthesization
+parfocalization
+parfocalize
+parochialization
+parochialization's
+parochializations
+parochialize
+parochializes
+parrotize
+parrotizes
+parsonize
+parsonizes
+partialize
+partializes
+particularization
+particularization's
+particularizations
+particularize
+particularized
+particularizes
+particularizing
+partisanize
+partisanizes
+pasteurize
+pasteurized
+pasteurizer
+pasteurizes
+pasteurizing
+pastoralize
+pastoralizes
+pastorize
+pastorizes
+paternalize
+paternalizes
+patronizable
+patronizable's
+patronizables
+patronization
+patronization's
+patronizations
+patternize
+patternizes
+pauperization
+pauperization's
+pauperizations
+pauperize
+pauperized
+pauperizer
+pauperizers
+pauperizes
+pauperizing
+pavior
+pearlization
+pearlize
+pearlized
+pearlizes
+pearlizing
+peasantize
+peasantizes
+pectization
+pectize
+pectized
+pectizes
+pectizing
+peculiarize
+peculiarizes
+pedaler
+pedalers
+pedantize
+pedantizes
+pedestaled
+pedestaling
+pedestrianization
+pedestrianize
+pedestrianized
+pedestrianizes
+pedestrianizing
+pelletization
+pelletizations
+pelletize
+pelletized
+pelletizer
+pelletizes
+pelletizing
+pemmicanization
+pemmicanization's
+pemmicanizations
+pemmicanize
+pemmicanizes
+penalizable
+penalizable's
+penalizables
+penalization
+penalization's
+penalizations
+penciler
+pencilers
+peptizable
+peptizable's
+peptizables
+peptization
+peptization's
+peptizations
+peptize
+peptized
+peptizer
+peptizers
+peptizes
+peptonization
+peptonize
+peptonized
+peptonizes
+peptonizing
+percussionize
+percussionizes
+perennialize
+perennializes
+perfectivize
+perfectivizes
+periled
+periling
+periodicalize
+periodicalizes
+periodization
+periodizations
+periodize
+periodized
+periodizes
+periodizing
+peroxidize
+peroxidizement
+peroxidizement's
+peroxidizements
+peroxidizes
+personization
+personization's
+personizations
+personize
+personizes
+petrolization
+petrolization's
+petrolizations
+petrolize
+petrolizes
+phagocytize
+phagocytizes
+phantomize
+phantomizer
+phantomizers
+phantomizes
+phenolization
+phenolization's
+phenolizations
+phenolize
+phenolizes
+phenomenalization
+phenomenalization's
+phenomenalizations
+phenomenalize
+phenomenalizes
+philanthropize
+philanthropizes
+philosophization
+philosophization's
+philosophizations
+phlebotomization
+phlebotomize
+phlebotomized
+phlebotomizes
+phlebotomizing
+phoneticization
+phoneticization's
+phoneticizations
+phoneticize
+phoneticizes
+phosphatization
+phosphatization's
+phosphatizations
+phosphatize
+phosphatized
+phosphatizes
+phosphatizing
+phosphorize
+phosphorizes
+photocatalyzer
+photocatalyzer's
+photocatalyzers
+photographize
+photographizes
+photoionization
+photoionization's
+photoionizations
+photoisomerization
+photoisomerization's
+photoisomerizations
+photolabeled
+photolabeler
+photolabeling
+photolyzable
+photolyze
+photolyzed
+photolyzes
+photolyzing
+photopolymerization
+photopolymerization's
+photopolymerizations
+photosensitization
+photosensitization's
+photosensitizations
+photosensitize
+photosensitized
+photosensitizer
+photosensitizers
+photosensitizes
+photosensitizing
+photosynthesize
+photosynthesized
+photosynthesizes
+photosynthesizing
+piaster
+picogram
+picogram's
+picograms
+picometer
+picometer's
+picometers
+pictorialization
+pictorialization's
+pictorializations
+pictorialize
+pictorialized
+pictorializes
+pictorializing
+picturization
+picturization's
+picturizations
+picturize
+picturized
+picturizes
+picturizing
+pidginization
+pidginize
+pidginized
+pidginizes
+pidginizing
+pigmentize
+pigmentizes
+pilgrimize
+pilgrimizes
+pillarize
+pillarizes
+piratize
+piratizes
+pistoled
+pistoling
+plagiarization
+plagiarization's
+plagiarizations
+plagiarize
+plagiarized
+plagiarizer
+plagiarizers
+plagiarizes
+plagiarizing
+plasmolyze
+plasticization
+plasticization's
+plasticizations
+plasticize
+plasticized
+plasticizer
+plasticizers
+plasticizes
+plasticizing
+platinization
+platinization's
+platinizations
+platitudinization
+platitudinize
+platitudinized
+platitudinizes
+platitudinizing
+platonization
+platonize
+platonized
+platonizes
+platonizing
+plebeianize
+plebeianizes
+plowable
+plowboy
+plowhead
+poeticization
+poeticize
+poeticized
+poeticizes
+poeticizing
+poetization
+poetization's
+poetizations
+poetize
+poetized
+poetizer
+poetizers
+poetizes
+poetizing
+pogromize
+pogromizes
+polarizabilities
+polarizability
+polarizability's
+polarizable
+polarizable's
+polarizables
+polemicize
+polemicized
+polemicizes
+polemicizing
+polemize
+polemized
+polemizes
+polemizing
+policize
+policizer
+policizers
+policizes
+politicalize
+politicalizes
+politicization
+politicize
+politicizer
+politicizers
+politicizes
+politicizing
+politize
+politizes
+pollenizer
+pollinize
+pollinized
+pollinizer
+pollinizes
+pollinizing
+polychromatize
+polychromatizes
+polychromize
+polychromizes
+polygamize
+polygamizes
+polymerization
+polymerization's
+polymerize
+polymerizes
+polysulphurization
+polysulphurization's
+polysulphurizations
+pommeled
+pommeling
+porcelainization
+porcelainization's
+porcelainizations
+porcelainize
+porcelainizes
+portionize
+portionizes
+positivize
+positivizes
+posterize
+posterizes
+postsynchronization
+posturize
+posturizes
+potentialization
+potentialization's
+potentializations
+potentialize
+potentializes
+potentize
+potentizes
+powderization
+powderization's
+powderizations
+powderize
+powderizer
+powderizers
+powderizes
+practicalization
+practicalization's
+practicalizations
+practicalize
+practicalizer
+practicalizers
+practicalizes
+preacherize
+preacherizes
+preacknowledgment
+preacknowledgment's
+preacknowledgments
+preanesthetic
+preanesthetics
+prebaptize
+prebaptizes
+precancelation
+precisionize
+precisionizes
+precivilization
+precivilization's
+precivilizations
+precolor
+precolor's
+precolorable
+precolorable's
+precolorables
+precoloring
+precolorings
+precolors
+preconization
+preconization's
+preconizations
+preconize
+preconizer
+preconizers
+preconizes
+precriticize
+precriticizes
+prefavor
+prefavor's
+prefavorable
+prefavorable's
+prefavorables
+prefavorablies
+prefavorably
+prefavorite
+prefavorite's
+prefavorites
+prefavors
+prefertilization
+prefertilization's
+prefertilizations
+prefertilize
+prefertilizes
+preflavor
+preflavor's
+preflavoring
+preflavorings
+preflavors
+pregalvanize
+pregalvanizes
+prehumor
+prehumor's
+prehumors
+prejudgment
+prejudgment's
+prejudgments
+prelabor
+prelabor's
+prelabors
+prelatize
+prelatizes
+prelocalization
+prelocalization's
+prelocalizations
+preludize
+preludizes
+premonopolize
+premonopolizes
+preoffense
+preoffense's
+preoffenses
+preorganization
+preorganization's
+preorganizations
+preorganize
+preorganizes
+preoxidize
+preoxidized
+preoxidizes
+preoxidizing
+preprogram
+prerecognize
+prerecognizes
+prespecialize
+prespecializes
+presplendor
+presplendor's
+presplendors
+pressurization
+prestandardization
+prestandardization's
+prestandardizations
+prestandardize
+prestandardizes
+presympathize
+presympathizes
+preutilizable
+preutilizable's
+preutilizables
+preutilization
+preutilization's
+preutilizations
+preutilize
+preutilizes
+prioritization
+priorization
+priorizations
+priorize
+priorized
+priorizes
+priorizing
+privatization
+privatize
+privatized
+privatizing
+problemize
+problemizes
+processionize
+processionizes
+proctorization
+proctorization's
+proctorizations
+proctorize
+proctorizes
+prodigalize
+prodigalizes
+profanize
+profanizes
+professionalization
+professionalization's
+professionalizations
+professionalize
+professionalized
+professionalizes
+professionalizing
+professionize
+professionizes
+programist
+programist's
+programistic
+programistics
+programists
+proletarianize
+proletarianizes
+proletarianizing
+prologize
+prologuize
+prologuizer
+prologuizers
+prologuizes
+prolusionize
+prolusionizes
+propagandize
+propagandized
+propagandizes
+propagandizing
+prophetize
+prophetizes
+propositionize
+propositionizes
+propretor
+proselytization
+proselytization's
+proselytizations
+protectionize
+protectionizes
+protocoled
+protocoling
+protocolization
+protocolization's
+protocolizations
+protocolize
+protocolizes
+proverbialize
+proverbializes
+proverbize
+proverbizes
+provincialization
+provincialization's
+provincializations
+provincialize
+provincializes
+pseudoanemia
+pseudoanemia's
+pseudoanemias
+pseudoanemic
+pseudoanemics
+pseudoedema
+pseudoedema's
+pseudoedemas
+pseudographize
+pseudographizes
+psychoanalyze
+psychoanalyzer
+psychoanalyzer's
+psychoanalyzers
+psychoanalyzes
+psychologization
+psychologize
+psychologized
+psychologizes
+psychologizing
+psycoanalyze
+puebloization
+puebloization's
+puebloizations
+puebloize
+puebloizes
+pulpitize
+pulpitizes
+pulverizable
+pulverizable's
+pulverizables
+pulverization
+pulverization's
+pulverizations
+pummeler
+pummeling
+pupilize
+pupilizes
+puppetize
+puppetizes
+pyorrheal
+pyramidize
+pyramidizes
+pyridinize
+pyridinizes
+pyritization
+pyritization's
+pyritizations
+pyritize
+pyritizes
+pyrolyzable
+pyrolyzate
+pythonize
+pythonizes
+quarrelous
+quarterization
+quarterization's
+quarterizations
+quininize
+quininizes
+racemization
+racemize
+racemized
+racemizes
+racemizing
+racialization
+racialization's
+racializations
+racialize
+racializes
+radialization
+radialization's
+radializations
+radialize
+radializes
+radicalization
+radicalization's
+radicalizations
+radicalize
+radicalized
+radicalizes
+radicalizing
+radiosterilize
+radiosterilizes
+radiosterilizing
+radiumization
+radiumization's
+radiumizations
+radiumize
+radiumizes
+rapturize
+rapturizes
+rascalize
+rascalizes
+rationalizable
+rationalizable's
+rationalizables
+raveled
+raveler
+ravelers
+raveling
+ravelings
+reacclimatize
+reactualize
+realisticize
+realisticizes
+reanimalize
+reanimalizes
+reapologize
+reauthorize
+rebaptization
+rebaptization's
+rebaptizations
+rebourbonize
+rebourbonizes
+rebrutalize
+recanalization
+recapitalize
+recarbonize
+recausticize
+recausticizes
+recentralize
+reciprocalize
+reciprocalizes
+recivilize
+recolonize
+recolor
+recolor's
+recoloring
+reconnoiter
+reconnoitered
+reconnoiterer
+reconnoiterer's
+reconnoiterers
+reconnoitering
+reconnoiters
+recriticize
+redialer
+redialing
+refavor
+refavor's
+refertilize
+reflectorize
+reflectorized
+reflectorizes
+reflectorizing
+reforestization
+reforestization's
+reforestize
+reforestizes
+regalize
+regalizes
+regalvanization
+regalvanization's
+regalvanizations
+regalvanize
+regalvanizes
+regionalization
+regionalization's
+regionalizations
+regionalize
+regionalized
+regionalizes
+regionalizing
+regularization
+regularization's
+regularizations
+regularize
+regularized
+regularizer
+regularizers
+regularizes
+reharmonize
+rehonor
+rehonor's
+rehumanization
+rehumanize
+rehybridize
+rehybridizes
+reinitialization
+reitemize
+relativization
+relativization's
+relativizations
+relativize
+relativized
+relativizes
+relativizing
+religionize
+religionizes
+remagnetize
+remagnetizes
+rematerialize
+rememorize
+remilitarization
+remilitarize
+remineralization
+remineralization's
+remineralizations
+remineralize
+remineralizes
+remobilize
+rencounter
+renormalization
+renormalize
+renormalizing
+reobjectivization
+reobjectivization's
+reobjectivizations
+reobjectivize
+reobjectivizes
+reorganizational
+reorganizationist
+reorganizationist's
+reorganizationists
+reoxidize
+reoxygenize
+reoxygenizes
+repaganization
+repaganization's
+repaganizations
+repaganize
+repaganizer
+repaganizers
+repaganizes
+repatronize
+repersonalize
+rephosphorization
+rephosphorization's
+rephosphorizations
+rephosphorize
+rephosphorizes
+repolymerization
+repolymerization's
+repolymerizations
+repolymerize
+repolymerizes
+reprivatization
+reprivatization's
+reprivatizations
+reprivatize
+reprivatizes
+republicanization
+republicanization's
+republicanizations
+republicanize
+republicanized
+republicanizer
+republicanizers
+republicanizes
+republicanizing
+repulverize
+reroyalize
+reroyalizes
+resensitization
+resensitization's
+resensitizations
+resensitize
+resensitizes
+resepulcher
+resinize
+resinizes
+resolemnize
+resolemnizes
+restandardize
+resterilize
+restigmatize
+restigmatizes
+resurrectionize
+resurrectionizes
+resymbolize
+resynchronization
+resynchronize
+resynchronizing
+resynthesize
+retinize
+retinizes
+retranquilize
+reutilize
+revalorization
+revalorization's
+revalorizations
+revalorize
+revalorized
+revalorizes
+revalorizing
+revaporize
+revaporizes
+revelationize
+revelationizes
+revisualize
+revitalization's
+revitalizations
+revivalize
+revivalizes
+revolatilize
+revolatilizes
+revolutionizement
+revolutionizement's
+revolutionizements
+rhapsodize
+rhapsodized
+rhapsodizes
+rhapsodizing
+rhythmicize
+rhythmicizes
+rhythmizable
+rhythmizable's
+rhythmizables
+rhythmization
+rhythmization's
+rhythmizations
+rhythmize
+rhythmizes
+ridiculize
+ridiculizes
+ritualization
+ritualize
+ritualizes
+ritualizing
+rivaless
+rivalesses
+rivalize
+rivalizes
+robotization
+robotization's
+robotizations
+robotize
+robotizes
+roentgenize
+romanticization
+routinization
+routinization's
+routinizations
+routinize
+routinizes
+roweled
+roweling
+royalization
+royalization's
+royalizations
+royalize
+royalizes
+rubberization
+rubberize
+rubberizes
+rubberizing
+rubricize
+rubricizes
+ruffianize
+ruffianizes
+ruggedization
+ruggedize
+ruggedized
+ruggedizes
+ruggedizing
+rumormonger
+rumormonger's
+rumormongers
+ruralization
+ruralization's
+ruralizations
+ruralize
+ruralized
+ruralizes
+ruralizing
+russianization
+russianize
+rusticize
+rusticizes
+saberlike
+saberlike's
+saberlikes
+sabertooth
+sacralization
+sacralization's
+sacralizations
+sacramentize
+sacramentizes
+sailorizing
+sailorizing's
+sailorizings
+salinization
+salinize
+salinizes
+saltpeter
+saltpeter's
+saltpeters
+sandaled
+sandaling
+sanitization
+sapientize
+sapientizes
+satanize
+satanizes
+satinize
+satinizes
+satirizable
+satirizable's
+satirizables
+satirize
+satirized
+satirizer
+satirizers
+satirizing
+savagize
+savagizes
+saviorhood
+saviorhood's
+saviorhoods
+saviorship
+saviorship's
+saviorships
+savorilies
+savorily
+savorless
+savorlesses
+savorous
+scandaled
+scandaling
+scandalization
+scandalization's
+scandalizations
+scandalize
+scandalizer
+scandalizers
+scandalizes
+scenarioization
+scenarioization's
+scenarioizations
+scenarioize
+scenarioizes
+scenarization
+scenarization's
+scenarizations
+scenarize
+scenarizes
+scepterless
+scepterlesses
+schedulize
+schedulizes
+schematization
+schematization's
+schematizations
+schematize
+schematized
+schematizer
+schematizers
+schematizes
+schematizing
+schismatize
+schismatized
+schismatizes
+schismatizing
+sclerotization
+sclerotized
+scripturalize
+scripturalizes
+scrutinization
+scrutinization's
+scrutinizations
+seborrhea
+seborrheic
+sectarianization
+sectarianize
+sectarianized
+sectarianizes
+sectarianizing
+sectionalization
+sectionalization's
+sectionalizations
+sectionalize
+sectionalizes
+sectionalizing
+sectionize
+sectionizes
+secularize
+secularizer
+secularizers
+secularizes
+secularizing
+semicarbonize
+semicarbonizes
+semicivilization
+semicivilization's
+semicivilizations
+semicivilized
+semicivilized's
+semicivilizeds
+semifossilized
+semifossilized's
+semifossilizeds
+semihonor
+semihonor's
+semihonors
+semihumanized
+semihumanized's
+semihumanizeds
+semimercerized
+semimercerized's
+semimercerizeds
+semimineralized
+semimineralized's
+semimineralizeds
+seminarize
+seminarizes
+seminationalization
+seminationalization's
+seminationalizations
+semiorganized
+semiorganized's
+semiorganizeds
+semioxidized
+semioxidized's
+semioxidizeds
+semioxygenized
+semioxygenized's
+semioxygenizeds
+semiprofessionalized
+semiprofessionalized's
+semiprofessionalizeds
+semivulcanized
+semivulcanized's
+semivulcanizeds
+senilize
+senilizes
+sensationalize
+sensationalized
+sensationalizes
+sensationalizing
+sensitization
+sensitization's
+sensitizations
+sensitize
+sensitizer
+sensitizers
+sensitizes
+sensitizing
+sensize
+sensizes
+sensualization
+sensualization's
+sensualizations
+sensualize
+sensualized
+sensualizes
+sensualizing
+sentimentalization
+sentimentalization's
+sentimentalizations
+sentineled
+sentineling
+sepaled
+septicization
+septicization's
+septicizations
+sepulchralize
+sepulchralizes
+serenize
+serenizes
+serializability
+serializable
+sermonize
+sermonized
+sermonizer
+sermonizers
+sermonizes
+sermonizing
+serpentinization
+serpentinization's
+serpentinizations
+serpentinize
+serpentinizes
+serpentize
+serpentizes
+servilize
+servilizes
+severalize
+severalizes
+severization
+severization's
+severizations
+severize
+severizes
+sexualization
+sexualization's
+sexualizations
+sexualize
+sexualizes
+shepherdize
+shepherdizes
+siderealize
+siderealizes
+signalization
+signalize
+signalized
+signalizing
+signatories
+silicatization
+silicatization's
+silicatizations
+silicidize
+silicidizes
+siliconize
+siliconizes
+silverize
+silverizer
+silverizers
+silverizes
+similarize
+similarizes
+similize
+similizes
+simonize
+singularization
+singularization's
+singularizations
+singularize
+singularizes
+sinicize
+sinicized
+sinicizes
+sinicizing
+siphonless
+siphonlesses
+siphonlike
+siphonlike's
+siphonlikes
+siphonophore
+siphonostele
+siphonostelic
+siphonostely
+sirenize
+sirenizes
+sisterize
+sisterizes
+skeletonization
+skeletonization's
+skeletonizations
+skeletonize
+skeletonized
+skeletonizer
+skeletonizers
+skeletonizes
+skeletonizing
+skepticize
+skepticizes
+slenderize
+slenderized
+slenderizes
+slenderizing
+sloganize
+sloganizes
+snobsniveling
+soberize
+soberized
+soberizes
+soberizing
+sockdologizing
+solarization
+solarization's
+solarizations
+solarize
+solarized
+solarizes
+solarizing
+soldierize
+soldierizes
+solecize
+solecized
+solecizes
+solecizing
+solemnization
+solemnization's
+solemnizations
+solemnize
+solemnized
+solemnizer
+solemnizers
+solemnizes
+solemnizing
+soliloquization
+soliloquize
+soliloquized
+soliloquizer
+soliloquizers
+soliloquizes
+soliloquizing
+soliloquizing's
+soliloquizingly
+soliloquizings
+solmization
+solubilization
+solubilize
+solubilized
+solubilizes
+solubilizing
+solutize
+solutizer
+solutizers
+solutizes
+sonantized
+sonantized's
+sonantizeds
+sonnetize
+sonnetizes
+southernize
+southernizes
+sovietization
+sovietization's
+sovietizations
+sovietize
+sovietizes
+spatialization
+spatialization's
+spatializations
+spatialize
+spatializes
+specificize
+specificizes
+specimenize
+specimenizes
+specterlike
+specterlike's
+specterlikes
+spheroidize
+spheroidizes
+spiralization
+spiralization's
+spiralizations
+spiralize
+spiralizes
+spiritize
+spiritizes
+spiritualization
+spiritualization's
+spiritualizations
+spiritualize
+spiritualized
+spiritualizer
+spiritualizers
+spiritualizes
+spiritualizing
+spirochetal
+spirochete
+spirochete's
+spirochetes
+spirochetosis
+splenectomized
+stabilizable
+stallionize
+stallionizes
+stalwartize
+stalwartizes
+standardizable
+standardizable's
+standardizables
+stapedectomized
+statisticize
+statisticizes
+stencilize
+sterilizabilities
+sterilizability
+sterilizability's
+sterilizable
+sterilizable's
+sterilizables
+stigmatize
+stigmatizer
+stigmatizers
+stigmatizes
+stigmatizing
+strobilization
+structuralization
+structuralization's
+structuralizations
+structuralize
+structuralizes
+strychninization
+strychninization's
+strychninizations
+strychninize
+strychninizes
+stylize
+stylizer
+stylizers
+stylizes
+stylizing
+subarmor
+subarmor's
+subarmors
+subcenter
+suberization
+suberization's
+suberizations
+suberize
+suberized
+suberizes
+suberizing
+subflavor
+subflavor's
+subflavors
+subjectivization
+subjectivize
+subjectivizes
+sublimize
+sublimizes
+subminiaturization
+subminiaturize
+subminiaturized
+subminiaturizes
+subminiaturizing
+subpulverizer
+subpulverizer's
+subpulverizers
+subsidizable
+subsidizable's
+subsidizables
+subspecialize
+subspecializes
+subspecialties
+subspecialty
+subspecialty's
+substandardize
+substandardizes
+substantialize
+substantializes
+substantivize
+substantivizes
+subterraneanize
+subterraneanizes
+subtilization
+subtilization's
+subtilizations
+subtilize
+subtilizer
+subtilizers
+subtilizes
+subtotaled
+subtotaling
+suburbanize
+suburbanizes
+subvitalized
+subvitalized's
+subvitalizeds
+succorable
+succorable's
+succorables
+succorless
+succorlesses
+suggestionize
+suggestionizes
+sulfatize
+sulfatizes
+sulfurization
+sulfurization's
+sulfurizations
+sulfurize
+sulfurizes
+sulphurization
+sulphurization's
+sulphurizations
+sulphurize
+sulphurizes
+sultanize
+sultanizes
+summerize
+summerizes
+superacknowledgment
+superacknowledgment's
+superacknowledgments
+supercanonization
+supercanonization's
+supercanonizations
+supercarbonization
+supercarbonization's
+supercarbonizations
+supercarbonize
+supercarbonizes
+supercivilization
+supercivilization's
+supercivilizations
+supercivilized
+supercivilized's
+supercivilizeds
+superemphasize
+superemphasizes
+superficialize
+superficializes
+superhumanize
+superhumanizes
+supernaturalize
+supernaturalizes
+superorganization
+superorganization's
+superorganizations
+superorganize
+superorganizes
+supersensitization
+supersensitization's
+supersensitizations
+superspecialize
+superspecializes
+supersubtilized
+supersubtilized's
+supersubtilizeds
+supersulphurize
+supersulphurizes
+surgerize
+surgerizes
+sycophantize
+sycophantizes
+syllogize
+sylvanize
+sylvanizes
+symmetrization
+symmetrization's
+symmetrizations
+symmetrize
+symmetrized
+symmetrizes
+symmetrizing
+symptomize
+symptomizes
+synchronizable
+synchronizable's
+synchronizables
+syncretize
+syncretized
+syncretizes
+syncretizing
+syndicalize
+syndicalizes
+synesthesia
+synesthetic
+synonymize
+synonymizes
+synopsize
+synthesization
+synthesization's
+synthesizations
+systemizable
+systemizable's
+systemizables
+systemize
+systemizer
+systemizers
+systemizes
+taboret
+taborets
+tabularization
+tabularization's
+tabularizations
+tabularize
+tabularizes
+taffetized
+tailorization
+tailorization's
+tailorizations
+tailorize
+tailorizes
+tambura
+tandemize
+tandemizes
+tantalization
+tantalization's
+tantalizations
+tariffize
+tariffizes
+tartarization
+tartarization's
+tartarizations
+tartarize
+tartarized
+tartarizes
+tasseled
+tasseling
+tassels
+tavernize
+tavernizes
+teaseler
+teaselers
+teazeled
+teazeling
+technicalization
+technicalize
+technicalizes
+technologize
+teetotaled
+teetotaling
+telesthesia
+telesthetic
+tellurize
+tellurized
+tellurizes
+tellurizing
+templize
+templizes
+temporalize
+temporalized
+temporalizes
+temporalizing
+temporization
+temporization's
+temporizations
+tenderization
+tenderize
+tenderized
+tenderizer
+tenderizes
+tenderizing
+tendriled
+tenementization
+tenementization's
+tenementizations
+tenementize
+tenementizes
+terminalization
+terminalization's
+terminalizations
+terminalized
+terminalized's
+terminalizeds
+ternize
+ternizes
+terrestrialize
+terrestrializes
+territorialization
+territorialization's
+territorializations
+territorialize
+territorializes
+terrorization
+terrorization's
+terrorizations
+testimonialization
+testimonialization's
+testimonializations
+testimonialize
+testimonializer
+testimonializers
+testimonializes
+tetanization
+tetanize
+tetanized
+tetanizes
+tetanizing
+teutonize
+texturized
+theaterless
+theaterlesses
+theaterlike
+theaterlike's
+theaterlikes
+theatricalization
+theatricalization's
+theatricalizations
+theatricalize
+theatricalized
+theatricalizes
+theatricalizing
+theatricize
+theatricizes
+theologization
+theologize
+theologized
+theologizer
+theologizes
+theologizing
+thermoanesthesia
+thermoanesthesia's
+thermoanesthesias
+thermometerize
+thermometerizes
+thermopolymerization
+thermopolymerization's
+thermopolymerizations
+thermosiphon
+thermosiphon's
+thermosiphons
+thronize
+thronizes
+thymectomize
+thyroidectomized
+thyroidization
+thyroidization's
+thyroidizations
+tinselier
+tinseliest
+tittuped
+tittuping
+tittupy
+tonicize
+tonicizes
+torporize
+torporizes
+totalitarianize
+totalization
+totalization's
+totalizations
+totalizator
+totalize
+totalized
+totalizer
+totalizers
+totalizes
+totalizing
+totemization
+totemization's
+totemizations
+tourize
+tourizes
+tractorization
+tractorization's
+tractorizations
+tractorize
+tractorizes
+traditionalize
+traditionalizes
+traditionize
+traditionizes
+tragicize
+tragicizes
+traitorize
+traitorizes
+trammeled
+trammeler
+trammelers
+trammeling
+tranquilization
+tranquilization's
+tranquilizations
+tranquillization
+tranquillize
+tranquillized
+tranquillizer
+tranquillizers
+tranquillizes
+tranquillizing
+transcendentalize
+transcendentalizes
+transistorization
+transparentize
+transparentizes
+traumatization
+traumatize
+traumatized
+traumatizes
+traumatizing
+triangularize
+triangularized
+triangularizes
+triangularizing
+trichinize
+trillionize
+trillionizes
+trimerization
+trimerization's
+trimerizations
+trivialization
+tropicalization
+tropicalization's
+tropicalizations
+tropicalize
+tropicalized
+tropicalizes
+tropicalizing
+troweled
+troweling
+trypsinize
+trypsinizes
+tuberculinization
+tuberculinization's
+tuberculinizations
+tuberculinize
+tuberculinizes
+tuberization
+tuberization's
+tuberizations
+tuberize
+tuberizes
+tubulization
+tubulization's
+tubulizations
+tutorization
+tutorization's
+tutorizations
+tutorize
+tutorizes
+ultracentralizer
+ultracentralizer's
+ultracentralizers
+ultrahonorable
+ultrahonorable's
+ultrahonorables
+ultraspecialization
+ultraspecialization's
+ultraspecializations
+ultrastandardization
+ultrastandardization's
+ultrastandardizations
+unagonize
+unalcoholized
+unalcoholized's
+unalcoholizeds
+unanimalized
+unanimalized's
+unanimalizeds
+unantagonizable
+unantagonizable's
+unantagonizables
+unapostatized
+unapostatized's
+unapostatizeds
+unauthorize
+unbaptize
+unbrutalize
+unbrutize
+unbrutizes
+uncanonize
+uncanonizes
+uncantonized
+uncantonized's
+uncantonizeds
+uncatechized
+uncatechized's
+uncatechizedness
+uncatechizeds
+uncatholicize
+uncatholicizes
+uncelestialized
+uncelestialized's
+uncelestializeds
+unchloridized
+unchloridized's
+unchloridizeds
+unchristianize
+unchristianized
+unchristianizes
+uncircularized
+uncircularized's
+uncircularizeds
+uncivilizable
+uncivilizable's
+uncivilizables
+uncivilize
+unclericalize
+unclericalizes
+uncolonize
+uncolorable
+uncolorable's
+uncolorables
+uncolorablies
+uncolorably
+unconventionalize
+unconventionalizes
+uncriticizable
+uncriticizable's
+uncriticizables
+uncrystallizabilities
+uncrystallizability
+uncrystallizability's
+uncrystallizable
+uncrystallizable's
+uncrystallizables
+uncurricularized
+uncurricularized's
+uncurricularizeds
+undefense
+undefense's
+undemagnetizable
+undemagnetizable's
+undemagnetizables
+undemocratize
+undenominationalize
+undenominationalizes
+undercapitalization
+undercapitalization's
+undercapitalizations
+undercapitalize
+undercapitalized
+undercapitalizes
+undercapitalizing
+undercolor
+undercolor's
+undercolored
+undercoloring
+undercolorings
+undercolors
+underemphasize
+underemphasized
+underemphasizes
+underemphasizing
+underlaborer
+underlaborer's
+underlaborers
+underorganization
+underorganization's
+underorganizations
+underoxidize
+underoxidizes
+underrealize
+underrealizes
+undersavior
+undersavior's
+undersaviors
+underutilize
+undervitalized
+undervitalized's
+undervitalizeds
+undiphthongize
+undiphthongizes
+undiscolored
+undiscolored's
+undramatizable
+undramatizable's
+undramatizables
+undualize
+undualizes
+unenamored
+unenamored's
+unenamoreds
+unequalize
+unevangelized
+unevangelized's
+unevangelizeds
+unfavoring
+unfavoring's
+unfertilizable
+unfertilizable's
+unfertilizables
+unfeudalize
+unfeudalized
+unfeudalizes
+ungalvanized
+ungalvanized's
+ungalvanizeds
+ungelatinizable
+ungelatinizable's
+ungelatinizables
+ungelatinized
+ungelatinized's
+ungelatinizeds
+ungentilize
+ungentilizes
+ungentlemanize
+ungentlemanizes
+ungospelized
+ungospelized's
+ungospelizeds
+ungraphitized
+ungraphitized's
+ungraphitizeds
+unharbor
+unharbor's
+unharbored
+unharmonize
+unheroize
+unheroizes
+unhonorable
+unhonorable's
+unhouseled
+unhypnotizable
+unhypnotizable's
+unhypnotizables
+unhypnotize
+unhypnotizes
+uniformization
+uniformization's
+uniformizations
+uniformize
+uniformizes
+unilateralization
+unilateralization's
+unilateralizations
+unilateralize
+unilateralizes
+unimmortalize
+unimmortalizes
+unindividualize
+uninitializable
+unionization's
+unionizations
+unitization
+unitize
+unitizes
+unitizing
+universalization
+universalization's
+universalizations
+unkenneled
+unkenneling
+unlabialize
+unlabializes
+unlaborable
+unlaborable's
+unlaborables
+unlaboring
+unlaboring's
+unlocalizable
+unlocalizable's
+unlocalizables
+unlocalize
+unmechanize
+unmediatized
+unmediatized's
+unmediatizeds
+unmercerized
+unmercerized's
+unmercerizeds
+unmesmerize
+unmesmerizes
+unmetalized
+unmetalized's
+unmetalizeds
+unmethodized
+unmethodized's
+unmethodizeds
+unmethodizing
+unmethodizing's
+unmethodizings
+unmissionized
+unmissionized's
+unmissionizeds
+unmodernize
+unmonopolize
+unmonopolizing
+unmonopolizings
+unmoralize
+unmoralized
+unmoralizes
+unmoralizing
+unmoralizings
+unmunicipalized
+unmunicipalized's
+unmunicipalizeds
+unmutualized
+unmutualized's
+unmutualizeds
+unmysticize
+unmysticizes
+unnaturalizable
+unnaturalizable's
+unnaturalizables
+unnaturalize
+unnaturalizes
+unneighborlike
+unneighborlike's
+unneighborlikes
+unnitrogenized
+unnitrogenized's
+unnitrogenizeds
+unnormalize
+unnormalizing
+unoptimize
+unoptimizing
+unoxidizable
+unoxidizable's
+unoxidizables
+unoxygenized
+unoxygenized's
+unoxygenizeds
+unpaganize
+unpaganizes
+unparagonized
+unparagonized's
+unparagonizeds
+unparalyzed
+unparalyzed's
+unparalyzeds
+unparticularized
+unparticularized's
+unparticularizeds
+unparticularizing
+unparticularizing's
+unparticularizings
+unpatronizable
+unpatronizable's
+unpatronizables
+unpauperized
+unpauperized's
+unpauperizeds
+unphilosophize
+unphosphatized
+unphosphatized's
+unphosphatizeds
+unplagiarized
+unplagiarized's
+unplagiarizeds
+unpoeticized
+unpoeticized's
+unpoeticizeds
+unpoetize
+unpoetized
+unpoetizes
+unpolarizable
+unpolarizable's
+unpolarizables
+unpolymerized
+unpolymerized's
+unpolymerizeds
+unpopularize
+unprotestantize
+unprotestantizes
+unpulverize
+unradicalize
+unradicalizes
+unrancored
+unrancored's
+unrancoreds
+unraveler
+unravelers
+unrealizable
+unrealizable's
+unrealizables
+unrealize
+unrealizing
+unrealizings
+unreconnoitered
+unreconnoitered's
+unreconnoitereds
+unrevelationize
+unrevelationizes
+unromanticized
+unromanticized's
+unromanticizeds
+unroyalized
+unroyalized's
+unroyalizeds
+unsatirize
+unsatirized
+unsavorilies
+unsavorily
+unscandalize
+unscandalizes
+unscepter
+unscepter's
+unsceptered
+unschematized
+unschematized's
+unschematizeds
+unsectarianize
+unsectarianizes
+unsecularize
+unsecularizes
+unsensitize
+unsensitizes
+unsensualize
+unsensualized
+unsensualizes
+unsentimentalize
+unsepulcher
+unsepulchered
+unsignalized
+unsignalized's
+unsignalizeds
+unsiphon
+unsiphon's
+unsolemnize
+unsolemnized
+unsolemnizes
+unspecterlike
+unspecterlike's
+unspecterlikes
+unspiritualize
+unspiritualized
+unspiritualizes
+unstoicize
+unstoicizes
+unsubstantialize
+unsubstantializes
+unsuccorable
+unsuccorable's
+unsuccorables
+unsulphurized
+unsulphurized's
+unsulphurizeds
+unsupernaturalize
+unsupernaturalized
+unsupernaturalizes
+unsymmetrized
+unsymmetrized's
+unsymmetrizeds
+unsympathizabilities
+unsympathizability
+unsympathizability's
+unsympathizable
+unsympathizable's
+unsympathizables
+unsystemizable
+unsystemizable's
+unsystemizables
+untantalizing
+untantalizing's
+untantalizings
+untartarized
+untartarized's
+untartarizeds
+untechnicalize
+untechnicalizes
+untemporizing
+untemporizing's
+untheorizable
+untheorizable's
+untheorizables
+unutilizable
+unutilizable's
+unutilizables
+unvaporized
+unvaporized's
+unvaporizeds
+unvectorizable
+unvitalized
+unvitalized's
+unvitalizeds
+unvitriolized
+unvitriolized's
+unvitriolizeds
+unvolatilize
+unvolatilized
+unvolatilizes
+unvulgarize
+unvulgarized
+unvulgarizes
+unwesternized
+unwesternized's
+unwesternizeds
+unwomanize
+urbanize
+urbanizes
+urbanizing
+utilitarianize
+utilitarianizes
+utilizabilities
+utilizability
+utilizable
+utilizable's
+utilizables
+utopianizer
+utopianizer's
+utopianizers
+vaccinization
+vaccinization's
+vaccinizations
+vacuumize
+vacuumized
+vacuumizes
+vacuumizing
+vagabondize
+vagabondizer
+vagabondizers
+vagabondizes
+vagrantize
+vagrantizes
+valorization
+valorization's
+valorizations
+valorize
+valorized
+valorizes
+valorizing
+vampirize
+vampirizes
+vandalization
+vandalization's
+vandalizations
+vaporabilities
+vaporability
+vaporability's
+vaporable
+vaporable's
+vaporables
+vaporier
+vaporiest
+vaporish
+vaporishness
+vaporizable
+vaporizable's
+vaporizables
+vaporize
+vaporized
+vaporizer
+vaporizers
+vaporizes
+vaporizing
+vaporless
+vaporlesses
+vaporlike
+vaporlike's
+vaporlikes
+vapory
+vascularization
+vascularization's
+vascularizations
+vascularize
+vascularized
+vascularizes
+vascularizing
+vassalization
+vassalize
+vassalized
+vassalizes
+vassalizing
+vectorizable
+vectorize
+vectorized
+vectorizer
+vectorizers
+vectorizes
+vegetablize
+vegetablizes
+velarization
+venalization
+venalization's
+venalizations
+venalize
+venalizes
+venomization
+venomization's
+venomizations
+venomize
+venomizes
+ventriloquize
+ventriloquized
+ventriloquizes
+ventriloquizing
+verbalization
+verbalization's
+verbalizations
+vermeiled
+vermeiles
+vermeiling
+vermilionize
+vermilionizes
+vernacularization
+vernacularization's
+vernacularizations
+vernacularize
+vernacularizes
+vernalization
+vernalization's
+vernalizations
+vernalize
+vernalized
+vernalizes
+vernalizing
+versicolor
+versicolored
+versionize
+versionizes
+vestryize
+vestryizes
+veteranize
+veteranizes
+vialed
+vialing
+victimizable
+victimizable's
+victimizables
+victimization
+victimization's
+victimizations
+victualage
+victualed
+victualess
+victualing
+vigorless
+virtualize
+virtualizes
+visionize
+visionizes
+vitalization
+vitalization's
+vitalizations
+vitalize
+vitalized
+vitalizer
+vitalizers
+vitalizes
+vitalizing
+vitalizing's
+vitalizingly
+vitalizings
+vitaminization
+vitaminize
+vitaminizes
+vitriolizable
+vitriolizable's
+vitriolizables
+vitriolization
+vitriolization's
+vitriolizations
+vitriolize
+vitriolizer
+vitriolizers
+vitriolizes
+vocationalization
+vocationalization's
+vocationalizations
+vocationalize
+vocationalizes
+volatilizable
+volatilizable's
+volatilizables
+volatilize
+volatilized
+volatilizer
+volatilizers
+volatilizes
+volatilizing
+voltize
+voltizes
+vowelization
+vowelization's
+vowelizations
+vowelize
+vowelized
+vowelizes
+vowelizing
+vulcanizable
+vulcanizable's
+vulcanizables
+vulcanizate
+vulcanization
+vulcanization's
+vulcanizations
+vulcanize
+vulcanizer
+vulcanizers
+vulcanizes
+vulcanizing
+vulgarization
+vulgarization's
+vulgarizations
+vulgarize
+vulgarized
+vulgarizer
+vulgarizers
+vulgarizes
+vulgarizing
+weeviled
+westernization
+westernization's
+westernizations
+westernize
+westernized
+westernizes
+westernizing
+winterization
+winterization's
+winterizations
+winterize
+winterized
+winterizes
+winterizing
+womanization
+womanization's
+womanizations
+woodcockize
+woodcockizes
+woolenization
+woolenization's
+woolenizations
+woolenize
+woolenizes
+zeroize
+zeroized
+zeroizes
+zeroizing
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.0 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.0
new file mode 100644
index 00000000000..4c1d2cc1f08
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.0
@@ -0,0 +1,1899 @@
+acclimatisation
+acclimatisations
+acclimatised
+accoutrement
+accoutrement's
+accoutrements
+acknowledgement
+acknowledgement's
+acknowledgements
+actualisation
+actualisation's
+actualisations
+aerofoil
+aerofoils
+aeroplane
+aeroplane's
+aeroplanes
+aerosolise
+aerosolised
+aesthetic
+aesthetic's
+aesthetically
+aesthetics
+agonise
+agonised
+agonisedly
+agoniser
+agonisers
+agonises
+agonising
+agonisinglies
+agonisingly
+alphabetise
+alphabetised
+alphabetiser
+alphabetisers
+alphabetises
+alphabetising
+aluminium
+aluminium's
+aluminiums
+amenorrhoea
+amorist
+amorist's
+amorists
+amortise
+amortised
+amortises
+amortising
+amphitheatre
+amphitheatre's
+amphitheatres
+anaemia
+anaemia's
+anaemias
+anaemic
+anaemics
+anaesthesia
+anaesthesia's
+anaesthesias
+anaesthetic
+anaesthetic's
+anaesthetically
+anaesthetics
+anaesthetise
+anaesthetised
+anaesthetiser
+anaesthetisers
+anaesthetises
+anaesthetising
+analogue
+analogue's
+analogues
+analysable
+analyse
+analysed
+analyser
+analysers
+analyses
+analysing
+anodise
+anodised
+anodises
+anodising
+antagonise
+antagonised
+antagoniser
+antagonisers
+antagonises
+antagonising
+apologise
+apologised
+apologiser
+apologisers
+apologises
+apologising
+appal
+appals
+apparelled
+appetiser
+appetising
+appetisingly
+arbour
+arbour's
+arboured
+arbours
+archaise
+archaised
+archaiser
+archaisers
+archaises
+archaising
+ardour
+ardour's
+ardours
+arithmetise
+arithmetised
+arithmetises
+armour
+armour's
+armoured
+armourer
+armourer's
+armourers
+armouried
+armouries
+armouring
+armours
+armoury
+armoury's
+atomisation
+atomisation's
+atomisations
+atomise
+atomised
+atomiser
+atomisers
+atomises
+atomising
+authorisation
+authorisation's
+authorisations
+authorise
+authorised
+authoriser
+authorisers
+authorises
+authorising
+autodialler
+axiomatisation
+axiomatisation's
+axiomatisations
+axiomatise
+axiomatised
+axiomatises
+axiomatising
+balkanise
+balkanised
+balkanising
+baptise
+baptised
+baptiser
+baptisers
+baptises
+baptising
+barrelled
+barrelling
+bastardise
+bastardised
+bastardises
+bastardising
+bedevilled
+bedevilling
+behaviour
+behaviour's
+behavioural
+behaviourally
+behavioured
+behaviourism
+behaviourism's
+behaviourisms
+behaviouristic
+behaviouristics
+behaviours
+behove
+behoved
+behoves
+behoving
+behoving's
+behovingly
+behovings
+belabour
+belabour's
+belaboured
+belabouring
+belabours
+bevelled
+bevelling
+bevellings
+bowdlerise
+bowdlerised
+bowdleriser
+bowdlerises
+bowdlerising
+brutalise
+brutalised
+brutalises
+brutalising
+bushelled
+bushelling
+bushellings
+calibre
+calibres
+canalled
+canalling
+cancelled
+canceller
+cancelling
+candour
+candour's
+candours
+cannibalise
+cannibalised
+cannibalises
+cannibalising
+canonicalisation
+canonicalise
+canonicalised
+canonicalises
+canonicalising
+capitalisation
+capitalisation's
+capitalisations
+capitalise
+capitalised
+capitaliser
+capitalisers
+capitalises
+capitalising
+carbonisation
+carbonisation's
+carbonisations
+carbonise
+carbonised
+carboniser
+carbonisers
+carbonises
+carbonising
+catalogue
+catalogue's
+catalogued
+cataloguer
+catalogues
+cataloguing
+categorisation
+categorisation's
+categorisations
+categorise
+categorised
+categoriser
+categorisers
+categorises
+categorising
+centimetre
+centimetre's
+centimetres
+centralisation
+centralisation's
+centralisations
+centralise
+centralised
+centraliser
+centralisers
+centralises
+centralising
+centre
+centre's
+centred
+centrepiece
+centrepiece's
+centrepieces
+centres
+centring
+channelled
+channeller
+channeller's
+channellers
+channelling
+characterisable
+characterisables
+characterisation
+characterisation's
+characterisations
+characterise
+characterised
+characteriser
+characterisers
+characterises
+characterising
+cheque
+cheque's
+chequebook
+chequebook's
+chequebooks
+chequer
+chequered
+chequers
+cheques
+chiselled
+chiseller
+chisellers
+civilisation
+civilisation's
+civilisations
+civilise
+civilised
+civilisedness
+civiliser
+civilisers
+civilises
+civilising
+clamour
+clamoured
+clamourer
+clamourer's
+clamourers
+clamouring
+clamours
+cognisance
+cognisant
+colonisation
+colonisation's
+colonisations
+colonise
+colonised
+coloniser
+colonisers
+colonises
+colonising
+colour
+colour's
+coloured
+coloureds
+colourer
+colourer's
+colourers
+colourful
+colourfully
+colourfulness
+colouring
+colourings
+colourless
+colourlessly
+colourlessness
+colours
+columnise
+columnised
+columnises
+columnising
+compartmentalise
+compartmentalised
+compartmentalises
+compartmentalising
+computerise
+computerised
+computerises
+computerising
+conceptualisation
+conceptualisation's
+conceptualisations
+conceptualise
+conceptualised
+conceptualiser
+conceptualises
+conceptualising
+counselled
+counselling
+counsellor
+counsellor's
+counsellors
+criticise
+criticised
+criticiser
+criticisers
+criticises
+criticising
+criticisinglies
+criticisingly
+crystallise
+crystallised
+crystalliser
+crystallisers
+crystallises
+crystallising
+customisable
+customisation
+customisation's
+customisations
+customise
+customised
+customiser
+customisers
+customises
+customising
+decentralisation
+decentralisation's
+decentralisations
+decentralised
+defence
+defence's
+defenced
+defenceless
+defencelessly
+defencelessness
+defences
+defencing
+defencive
+demeanour
+demeanour's
+demeanours
+demoralise
+demoralised
+demoraliser
+demoralisers
+demoralises
+demoralising
+demoralisingly
+dialled
+dialler
+diallers
+dialling
+diallings
+dichotomise
+dichotomised
+dichotomises
+dichotomising
+digitise
+digitised
+digitiser
+digitiser's
+digitisers
+digitises
+digitising
+dishonour
+dishonoured
+dishonourer
+dishonourer's
+dishonourers
+dishonouring
+dishonours
+disorganised
+draught
+draught's
+draughts
+draughtsman
+duelled
+dueller
+duellers
+duelling
+duellings
+economise
+economised
+economiser
+economisers
+economises
+economising
+editorialise
+editorialised
+editorialiser
+editorialises
+editorialising
+enamelled
+enameller
+enamellers
+enamelling
+enamellings
+encyclopaedia
+encyclopaedia's
+encyclopaedias
+endeavour
+endeavoured
+endeavourer
+endeavourer's
+endeavourers
+endeavouring
+endeavours
+enrol
+enrolment
+enrolment's
+enrolments
+enrols
+epitomise
+epitomised
+epitomiser
+epitomisers
+epitomises
+epitomising
+equalisation
+equalisation's
+equalisations
+equalise
+equalised
+equaliser
+equaliser's
+equalisers
+equalises
+equalising
+equalisings
+equalled
+equalling
+eviller
+evillest
+factorisation
+factorisation's
+factorisations
+familiarisation
+familiarisation's
+familiarisations
+familiarise
+familiarised
+familiariser
+familiarisers
+familiarises
+familiarising
+familiarisingly
+fantasise
+fantasised
+fantasiser
+fantasises
+fantasising
+favour
+favourable
+favourableness
+favourables
+favourably
+favoured
+favoured's
+favouredly
+favouredness
+favoureds
+favourer
+favourer's
+favourers
+favouring
+favouring's
+favouringly
+favourings
+favourite
+favourite's
+favourites
+favours
+fertilisation
+fertilisation's
+fertilisations
+fertilise
+fertilised
+fertiliser
+fertilisers
+fertilises
+fertilising
+fervour
+fervour's
+fervours
+fibre
+fibre's
+fibred
+fibreglass
+fibres
+finalisation
+finalisations
+finalise
+finalised
+finalises
+finalising
+flavour
+flavour's
+flavoured
+flavourer
+flavourer's
+flavourers
+flavouring
+flavourings
+flavours
+formalisation
+formalisation's
+formalisations
+formalise
+formalised
+formaliser
+formalisers
+formalises
+formalising
+fuelled
+fueller
+fuellers
+fuelling
+fulfil
+fulfilment
+fulfilment's
+fulfilments
+fulfils
+funnelled
+funnelling
+gaol
+generalisation
+generalisation's
+generalisations
+generalise
+generalised
+generaliser
+generalisers
+generalises
+generalising
+glamorise
+glamorised
+glamoriser
+glamorisers
+glamorises
+glamorising
+gospeller
+gospellers
+gossipped
+gossipping
+gramme
+gramme's
+grammes
+gravelled
+gravelling
+grovelled
+groveller
+grovellers
+grovelling
+grovellingly
+harbour
+harbour's
+harboured
+harbourer
+harbourer's
+harbourers
+harbouring
+harbours
+harmonise
+harmonised
+harmoniser
+harmonisers
+harmonises
+harmonising
+honour
+honourable
+honourableness
+honourables
+honourablies
+honourably
+honoured
+honourer
+honourer's
+honourers
+honouring
+honours
+hospitalise
+hospitalised
+hospitalises
+hospitalising
+humour
+humour's
+humoured
+humourer
+humourers
+humouring
+humours
+hypothesise
+hypothesised
+hypothesiser
+hypothesisers
+hypothesises
+hypothesising
+idealisation
+idealisation's
+idealisations
+idealise
+idealised
+idealiser
+idealisers
+idealises
+idealising
+imperilled
+incognisance
+incognisant
+individualise
+individualised
+individualiser
+individualisers
+individualises
+individualising
+individualisingly
+industrialisation
+industrialisation's
+industrialisations
+informalises
+initialisation
+initialisation's
+initialisations
+initialise
+initialised
+initialiser
+initialisers
+initialises
+initialising
+initialled
+initialler
+initialling
+institutionalise
+institutionalised
+institutionalises
+institutionalising
+internalisation
+internalisation's
+internalisations
+internalise
+internalised
+internalises
+internalising
+italicise
+italicised
+italicises
+italicising
+itemisation
+itemisation's
+itemisations
+itemise
+itemised
+itemiser
+itemisers
+itemises
+itemising
+jeopardise
+jeopardised
+jeopardises
+jeopardising
+jewelled
+jeweller
+jewellers
+jewelling
+journalise
+journalised
+journaliser
+journalisers
+journalises
+journalising
+judgement
+judgement's
+judgements
+kidnapped
+kidnapper
+kidnapper's
+kidnappers
+kidnapping
+kidnapping's
+kidnappings
+kilogramme
+kilogramme's
+kilogrammes
+kilometre
+kilometre's
+kilometres
+labelled
+labeller
+labeller's
+labellers
+labelling
+labour
+laboured
+laboured's
+labouredly
+labouredness
+labourer
+labourer's
+labourers
+labouring
+labouring's
+labouringly
+labourings
+labours
+laurelled
+legalisation
+legalisation's
+legalisations
+legalise
+legalised
+legalises
+legalising
+levelled
+leveller
+levellers
+levellest
+levelling
+liberalise
+liberalised
+liberaliser
+liberalisers
+liberalises
+liberalising
+licence
+licence's
+licences
+linearisable
+linearise
+linearised
+linearises
+linearising
+linearision
+litre
+litres
+localisation
+localisation's
+localisations
+localise
+localised
+localiser
+localisers
+localises
+localising
+lustre
+lustred
+lustres
+lustring
+magnetisation
+magnetisation's
+magnetisations
+manoeuvre
+manoeuvred
+manoeuvrer
+manoeuvres
+manoeuvring
+marvelled
+marvelling
+marvellous
+marvellously
+marvellousness
+materialise
+materialised
+materialiser
+materialisers
+materialises
+materialising
+maximise
+maximised
+maximiser
+maximisers
+maximises
+maximising
+mechanisation
+mechanisation's
+mechanisations
+mechanise
+mechanised
+mechaniser
+mechanisers
+mechanises
+mechanising
+medalled
+medalling
+mediaeval
+mediaeval's
+mediaevally
+mediaevals
+memorisation
+memorisation's
+memorisations
+memorise
+memorised
+memoriser
+memorisers
+memorises
+memorising
+metalled
+metalling
+metallisation
+metallisation's
+metallisations
+metre
+metre's
+metred
+metres
+metring
+millimetre
+millimetre's
+millimetres
+miniaturisation
+miniaturisations
+miniaturise
+miniaturised
+miniaturises
+miniaturising
+minimisation
+minimisation's
+minimisations
+minimise
+minimised
+minimiser
+minimisers
+minimises
+minimising
+misjudgement
+mitre
+mitred
+mitrer
+mitring
+modelled
+modeller
+modellers
+modelling
+modellings
+modernise
+modernised
+moderniser
+modernisers
+modernises
+modernising
+modularisation
+modularise
+modularised
+modularises
+modularising
+motorise
+motorised
+motorises
+motorising
+moustache
+moustached
+moustaches
+multilevelled
+nationalisation
+nationalisation's
+nationalisations
+nationalise
+nationalised
+nationaliser
+nationalisers
+nationalises
+nationalising
+naturalisation
+naturalisation's
+naturalisations
+neighbour
+neighbour's
+neighboured
+neighbourer
+neighbourer's
+neighbourers
+neighbourhood
+neighbourhood's
+neighbourhoods
+neighbouring
+neighbourings
+neighbourliness
+neighbourly
+neighbours
+neutralise
+neutralised
+neutraliser
+neutralisers
+neutralises
+neutralising
+nickelled
+nickelling
+normalisation
+normalisation's
+normalisations
+normalise
+normalised
+normaliser
+normalisers
+normalises
+normalising
+notarise
+notarised
+notarises
+notarising
+nought
+noughts
+odour
+odour's
+odoured
+odours
+offence
+offence's
+offences
+offencive
+optimisation
+optimisation's
+optimisations
+optimise
+optimised
+optimiser
+optimiser's
+optimisers
+optimises
+optimising
+organisable
+organisables
+organisation
+organisation's
+organisational
+organisational's
+organisationally
+organisationals
+organisations
+organise
+organised
+organiser
+organisers
+organises
+organising
+oxidise
+oxidised
+oxidiser
+oxidisers
+oxidises
+oxidising
+oxidisings
+panelled
+panelling
+panellings
+parallelisation
+parallelisation's
+parallelisations
+parallelise
+parallelised
+paralleliser
+parallelisers
+parallelises
+parallelising
+parallelled
+parallelling
+paralyse
+paralysed
+paralysedlies
+paralysedly
+paralyser
+paralyser's
+paralysers
+paralyses
+paralysing
+paralysinglies
+paralysingly
+parameterisable
+parameterisation
+parameterisation's
+parameterisations
+parameterise
+parameterised
+parameterises
+parameterising
+parametrisable
+parametrisation
+parametrisation's
+parametrisations
+parametrise
+parametrised
+parametrises
+parametrising
+parcelled
+parcelling
+parenthesised
+parlour
+parlour's
+parlours
+patronise
+patronised
+patroniser
+patronisers
+patronises
+patronising
+patronising's
+patronisingly
+patronisings
+penalise
+penalised
+penalises
+penalising
+pencilled
+pencilling
+pencillings
+personalisation
+personalisation's
+personalisations
+personalise
+personalised
+personalises
+personalising
+petalled
+philosophise
+philosophised
+philosophiser
+philosophisers
+philosophises
+philosophising
+plough
+ploughed
+plougher
+ploughes
+ploughing
+ploughman
+pluralisation
+pluralisation's
+pluralisations
+pluralise
+pluralised
+pluraliser
+pluralisers
+pluralises
+pluralising
+polarisation
+polarisation's
+polarisations
+popularisation
+popularisation's
+popularisations
+popularise
+popularised
+populariser
+popularisers
+popularises
+popularising
+practician
+practise
+practised
+practiser
+practises
+practising
+preinitialise
+preinitialised
+preinitialises
+preinitialising
+pressurise
+pressurised
+pressuriser
+pressurisers
+pressurises
+pressurising
+pretence
+pretences
+pretencion
+pretencions
+pretencive
+prioritise
+prioritised
+prioritiser
+prioritisers
+prioritises
+prioritising
+prioritisings
+productise
+productised
+productiser
+productisers
+productises
+productising
+programme
+programme's
+programmes
+proselytise
+proselytised
+proselytiser
+proselytisers
+proselytises
+proselytising
+publicise
+publicised
+publicises
+publicising
+pulverise
+pulverised
+pulveriser
+pulverisers
+pulverises
+pulverising
+pyjama
+pyjama's
+pyjamaed
+pyjamas
+quantisation
+quantisation's
+quantisations
+quantise
+quantised
+quantiser
+quantiser's
+quantisers
+quantises
+quantising
+quarrelled
+quarreller
+quarrellers
+quarrelling
+queueing
+randomise
+randomised
+randomiser
+randomises
+randomising
+rationalise
+rationalised
+rationaliser
+rationalisers
+rationalises
+rationalising
+reacclimatisation
+reacclimatisation's
+reacclimatisations
+reacknowledgement
+reacknowledgement's
+reacknowledgements
+reactualisation
+reactualisation's
+reactualisations
+realisable
+realisableness
+realisables
+realisablies
+realisably
+realisation
+realisation's
+realisations
+realise
+realised
+realiser
+realisers
+realises
+realising
+realising's
+realisingly
+realisings
+reanalyse
+reanalysed
+reanalyser
+reanalysers
+reanalyses
+reanalysing
+reapologises
+reauthorisation
+reauthorisation's
+reauthorisations
+reauthorises
+rebrutalises
+recapitalisation
+recapitalisation's
+recapitalisations
+recapitalised
+recapitalises
+recarbonisation
+recarbonisation's
+recarbonisations
+recarboniser
+recarbonisers
+recarbonises
+recategorised
+recentralisation
+recentralisation's
+recentralisations
+recentralises
+recivilisation
+recivilisation's
+recivilisations
+recivilises
+recognisability
+recognisable
+recognisably
+recognisance
+recognise
+recognised
+recognisedlies
+recognisedly
+recogniser
+recognisers
+recognises
+recognising
+recognisinglies
+recognisingly
+recolonisation
+recolonisation's
+recolonisations
+recolonises
+recoloured
+recolours
+reconceptualising
+recriticises
+recrystallised
+recrystallises
+redialled
+refavours
+refertilisation
+refertilisation's
+refertilisations
+refertilises
+refuelled
+refuelling
+reharmonises
+rehonours
+reinitialise
+reinitialised
+reinitialises
+reinitialising
+reitemises
+relabelled
+relabeller
+relabellers
+relabelling
+remagnetisation
+remagnetisation's
+remagnetisations
+rematerialises
+rememorises
+remodelled
+remodelling
+renationalised
+renationalises
+renormalised
+renormalises
+reorganisation
+reorganisation's
+reorganisations
+reorganise
+reorganised
+reorganiser
+reorganisers
+reorganises
+reorganising
+reoxidises
+repatronises
+reprogramme
+reprogrammes
+repulverises
+resepulchres
+restandardisation
+restandardisation's
+restandardisations
+restandardises
+resterilises
+resymbolisation
+resymbolisation's
+resymbolisations
+resymbolises
+resynchronisations
+resynchronised
+resynchronises
+resynthesises
+retranquilises
+reutilisation
+reutilises
+revelled
+reveller
+revellers
+revelling
+revellings
+revisualises
+revolutionise
+revolutionised
+revolutioniser
+revolutionisers
+revolutionises
+revolutionising
+rigour
+rigour's
+rigours
+rivalled
+rivalling
+rouble
+rouble's
+roubles
+routeing
+rumour
+rumour's
+rumoured
+rumourer
+rumourer's
+rumourers
+rumouring
+rumours
+sabre
+sabre's
+sabred
+sabres
+sabring
+sanitise
+sanitised
+sanitiser
+sanitises
+sanitising
+saviour
+saviour's
+saviours
+savour
+savoured
+savourer
+savourer's
+savourers
+savourier
+savouries
+savouriest
+savouriness
+savouring
+savouringlies
+savouringly
+savours
+savoury
+savoury's
+sceptre
+sceptre's
+sceptred
+sceptres
+sceptring
+scrutinise
+scrutinised
+scrutiniser
+scrutinisers
+scrutinises
+scrutinising
+scrutinisinglies
+scrutinisingly
+sepulchre
+sepulchre's
+sepulchred
+sepulchres
+sequentialise
+sequentialised
+sequentialises
+sequentialising
+serialisation
+serialisation's
+serialisations
+serialise
+serialised
+serialises
+serialising
+shovelled
+shoveller
+shovellers
+shovelling
+shrivelled
+shrivelling
+signalled
+signaller
+signallers
+signalling
+socialise
+socialised
+socialiser
+socialises
+socialising
+specialisation
+specialisation's
+specialisations
+specialise
+specialised
+specialiser
+specialisers
+specialises
+specialising
+specialities
+speciality
+speciality's
+spectre
+spectre's
+spectred
+spectres
+spiralled
+spiralling
+splendour
+splendour's
+splendours
+squirrelled
+squirrelling
+stabilise
+stabilised
+stabiliser
+stabilisers
+stabilises
+stabilising
+standardisation
+standardisation's
+standardisations
+standardise
+standardised
+standardiser
+standardisers
+standardises
+standardising
+stencilled
+stenciller
+stencillers
+stencilling
+sterilisation
+sterilisation's
+sterilisations
+sterilise
+sterilised
+steriliser
+sterilisers
+sterilises
+sterilising
+stylised
+subsidise
+subsidised
+subsidiser
+subsidisers
+subsidises
+subsidising
+succour
+succoured
+succourer
+succourer's
+succourers
+succouring
+succours
+summarisation
+summarisation's
+summarisations
+summarise
+summarised
+summariser
+summarisers
+summarises
+summarising
+symbolisation
+symbolisation's
+symbolisations
+symbolise
+symbolised
+symboliser
+symbolisers
+symbolises
+symbolising
+symbolled
+symbolling
+sympathise
+sympathised
+sympathiser
+sympathisers
+sympathises
+sympathising
+sympathising's
+sympathisingly
+sympathisings
+synchronisation
+synchronisation's
+synchronisations
+synchronise
+synchronised
+synchroniser
+synchronisers
+synchronises
+synchronising
+synthesise
+synthesised
+synthesiser
+synthesisers
+synthesises
+synthesising
+syphon
+syphon's
+syphoned
+syphoning
+syphons
+systematise
+systematised
+systematiser
+systematisers
+systematises
+systematising
+tantalise
+tantalised
+tantaliser
+tantalisers
+tantalises
+tantalising
+tantalisinglies
+tantalisingly
+tantalisingness
+tantalisingnesses
+terrorise
+terrorised
+terroriser
+terrorisers
+terrorises
+terrorising
+theatre
+theatre's
+theatres
+theorisation
+theorisation's
+theorisations
+theorise
+theorised
+theoriser
+theorisers
+theorises
+theorising
+titre
+titres
+totalled
+totaller
+totaller's
+totallers
+totalling
+towelled
+towelling
+towellings
+tranquilise
+tranquilised
+tranquiliser
+tranquiliser's
+tranquilisers
+tranquilises
+tranquilising
+tranquilising's
+tranquilisingly
+tranquilisings
+transistorise
+transistorised
+transistorises
+transistorising
+travelled
+traveller
+traveller's
+travellers
+travelling
+travellings
+trivialise
+trivialised
+trivialises
+trivialising
+troweller
+trowellers
+tumour
+tumour's
+tumoured
+tumours
+tunnelled
+tunneller
+tunnellers
+tunnelling
+tunnellings
+tyre
+tyre's
+tyres
+unacclimatised
+unaesthetically
+unamortised
+unanalysable
+unanalysed
+unantagonised
+unantagonising
+unapologising
+unappetising
+unappetisingly
+unarmoured
+unauthorised
+unauthorisedly
+unauthorisedness
+unauthorises
+unbaptised
+unbaptises
+unbastardised
+unbrutalised
+unbrutalises
+uncancelled
+uncapitalised
+uncategorised
+uncharacterised
+uncivilised
+uncivilisedly
+uncivilisedness
+uncivilises
+uncolonised
+uncolonises
+uncoloured
+uncolouredly
+uncolouredness
+uncoloureds
+uncriticised
+uncriticising
+uncriticisingly
+uncrystallised
+undefences
+undishonoured
+undisorganised
+uneconomising
+unendeavoured
+unepitomised
+unequalised
+unequalises
+unequalled
+unfamiliarised
+unfavourable
+unfavourableness
+unfavourables
+unfavourably
+unfavoured
+unfavoured's
+unfavourings
+unfavourite
+unfavourite's
+unfavourites
+unfertilised
+unflavoured
+unformalised
+ungeneralised
+unharmonised
+unharmonises
+unhonourables
+unhonourablies
+unhonourably
+unhonoured
+unhumoured
+unidealised
+unindividualised
+unindividualises
+uninitialised
+unionisation
+unionise
+unionised
+unioniser
+unionisers
+unionises
+unionising
+unitalicised
+unitemised
+unjournalised
+unlabelled
+unlaboured
+unlaboured's
+unlabourings
+unlegalised
+unlevelled
+unlevelling
+unliberalised
+unlocalised
+unlocalises
+unmechanised
+unmechanises
+unmemorised
+unminimised
+unmodernised
+unmodernises
+unmotorised
+unnationalised
+unneighboured
+unneighbourliness
+unneighbourly
+unneutralised
+unnormalised
+unnormalises
+unoptimised
+unoptimises
+unorganisable
+unorganisables
+unorganised
+unoxidised
+unparallelled
+unparameterised
+unparametrised
+unparcelled
+unpatronised
+unpatronising's
+unpenalised
+unphilosophised
+unphilosophises
+unpopularises
+unpractised
+unpulverised
+unpulverises
+unravelled
+unravelling
+unrealisables
+unrealised
+unrealises
+unrecognisable
+unrecognised
+unrecognising
+unrecognisingly
+unreorganised
+unrivalled
+unrumoured
+unsabred
+unsavoured
+unsavouredly
+unsavouredness
+unsceptred
+unsceptres
+unscrutinised
+unscrutinising
+unscrutinisingly
+unsepulchred
+unsepulchres
+unsocialised
+unspecialised
+unspecialising
+unstandardised
+unsterilised
+unsubsidised
+unsuccoured
+unsummarised
+unsymbolised
+unsympathised
+unsympathising
+unsympathising's
+unsympathisingly
+unsympathisings
+unsynchronised
+unsynthesised
+unsyphons
+unsystematised
+unsystematisedly
+unsystematising
+untantalised
+unterrorised
+untranquilised
+unverbalised
+unvictimised
+unvisualised
+unwomanised
+unwomanises
+utilisation
+utilise
+utilised
+utiliser
+utilisers
+utilises
+utilising
+valour
+valour's
+valours
+vandalise
+vandalised
+vandalises
+vandalising
+vapour
+vapour's
+vapoured
+vapourer
+vapourers
+vapouring
+vapouringly
+vapourings
+vapours
+vectorisation
+vectorising
+verbalise
+verbalised
+verbaliser
+verbalisers
+verbalises
+verbalising
+victimise
+victimised
+victimiser
+victimisers
+victimises
+victimising
+victualler
+victuallers
+vigour
+vigour's
+vigours
+visualise
+visualised
+visualiser
+visualisers
+visualises
+visualising
+waggon
+waggon's
+waggoner
+waggoner's
+waggoners
+waggons
+wagonner
+wagonner's
+wagonners
+weaselled
+weaselling
+whisky
+whisky's
+whiskys
+womanise
+womanised
+womaniser
+womanisers
+womanises
+womanising
+woollen
+woollens
+worshipped
+worshipper
+worshipper's
+worshippers
+worshipping
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.1 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.1
new file mode 100644
index 00000000000..54c88ee7a30
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.1
@@ -0,0 +1,743 @@
+Christianising
+Europeanisation
+Europeanisation's
+Europeanisations
+Europeanised
+Sanskritise
+acclimatise
+acclimatiser
+acclimatisers
+acclimatises
+acclimatising
+actualise
+actualised
+actualises
+actualising
+aesthete
+aesthetes
+aggrandisement
+aggrandisement's
+aggrandisements
+americanised
+amortisation
+amortisation's
+amortisations
+animised
+annualised
+arsehole
+arsehole's
+arseholes
+balkanisation
+biosynthesised
+bureaucratisation
+bureaucratisation's
+bureaucratisations
+calliper
+callipers
+cancellate
+cancellated
+canonised
+cauterise
+cauterised
+cauterises
+cauterising
+caviller
+cavillers
+centreline
+centrelines
+civilisational
+civilisational's
+civilisationals
+cognisable
+colouration
+colourimeter
+colourimeter's
+colourimeters
+colourimetry
+commercialisation
+commercialisation's
+commercialisations
+communise
+communised
+communises
+communising
+computerisation
+conventionalised
+crystallisation
+crystallisation's
+crystallisations
+decentralising
+deemphasise
+deemphasised
+deemphasiser
+deemphasisers
+deemphasises
+deemphasising
+deglycerolised
+dehumanise
+dehumanised
+dehumanises
+dehumanising
+demineralisation
+demineralisation's
+demineralisations
+democratisation
+democratisation's
+democratisations
+democratise
+democratised
+democratiser
+democratises
+democratising
+demoralisation
+demoralisation's
+demoralisations
+demythologisation
+demythologise
+demythologised
+demythologiser
+demythologises
+demythologising
+depersonalisation
+depersonalisation's
+depersonalisations
+depersonalised
+deputised
+destabilise
+destabilised
+destabilises
+destabilising
+destigmatisation
+desynchronise
+desynchronised
+desynchronises
+desynchronising
+detribalise
+detribalised
+detribalises
+detribalising
+diagonalisable
+dialysed
+diarrhoea
+diarrhoea's
+diarrhoeal
+diarrhoeas
+dichotomisation
+digitalisation
+digitalisation's
+digitalisations
+digitisation
+dioptre
+discoloured
+discoloured's
+discolouredness
+discoloureds
+discolours
+disfavour
+disfavoured
+disfavourer
+disfavourer's
+disfavourers
+disfavouring
+disfavours
+dishevelled
+disorganisation
+disorganisation's
+disorganisations
+dowelling
+downdraught
+dramatisation
+dramatisation's
+dramatisations
+dramatise
+dramatised
+dramatiser
+dramatisers
+dramatises
+dramatising
+draughtier
+draughtiness
+draughtsperson
+draughty
+duellist
+duellists
+dynamised
+emphasise
+emphasised
+emphasiser
+emphasisers
+emphasises
+emphasising
+energised
+energises
+enthral
+enthrals
+epicentre
+epicentre's
+epicentres
+eulogise
+eulogised
+eulogiser
+eulogisers
+eulogises
+eulogising
+exorcise
+exorcised
+exorcises
+exorcising
+extemporise
+extemporised
+extemporiser
+extemporisers
+extemporises
+extemporising
+externalisation
+externalisation's
+externalisations
+favouritism
+favouritism's
+favouritisms
+federalise
+federalised
+federalises
+federalising
+fibreboard
+foetid
+foetidly
+foetidness
+foetus
+foetus's
+foetuses
+fossilised
+fraternise
+fraternised
+fraterniser
+fraternisers
+fraternises
+fraternising
+galvanising
+generalisable
+generalisables
+germanised
+gimballed
+glottalisation
+glycerolised
+gruelling
+gruellingly
+gruellings
+gynaecological
+gynaecological's
+gynaecologicals
+gynaecologist
+gynaecologist's
+gynaecologists
+harmonisation
+harmonisation's
+harmonisations
+homoeomorph
+homoeopath
+homogenisation
+homogenisation's
+homogenisations
+homogenise
+homogenised
+homogeniser
+homogenisers
+homogenises
+homogenising
+honouree
+hospitalisation
+hospitalisation's
+hospitalisations
+humanise
+humanised
+humaniser
+humanisers
+humanises
+humanising
+hydrolysed
+hypnotised
+hypophysectomised
+idolise
+idolised
+idoliser
+idolisers
+idolises
+idolising
+immobilise
+immobilised
+immobiliser
+immobilises
+immobilising
+immortalised
+immunisation
+immunisation's
+immunisations
+impersonalised
+industrialised
+industrialising
+inhumanises
+institutionalisation
+institutionalisation's
+institutionalisations
+internationalisation
+internationalisation's
+internationalisations
+internationalised
+ionise
+ionised
+ioniser
+ionisers
+ionises
+ionising
+ionisings
+ionision
+ionisions
+kinaesthesis
+kinaesthetic
+kinaesthetically
+kinaesthetics
+learnt
+legitimise
+legitimised
+legitimiser
+legitimises
+legitimising
+libeller
+libellers
+libellous
+libellously
+liberalisation
+liberalisation's
+liberalisations
+licenseable
+lionise
+lionised
+lioniser
+lionisers
+lionises
+lionising
+magnetised
+manoeuvrability
+manoeuvrable
+marbleised
+marbleising
+maximisation
+maximisation's
+maximisations
+mediaevalist
+mediaevalist's
+mediaevalists
+memorialised
+mesmerised
+metabolised
+metropolitanisation
+milligramme
+milligramme's
+milligrammes
+millilitre
+millilitre's
+millilitres
+mineralised
+misbehaviour
+misbehaviour's
+misbehaviours
+misdemeanour
+misdemeanour's
+misdemeanours
+mobilisation
+mobilisation's
+mobilisations
+mobilise
+mobilised
+mobiliser
+mobilises
+mobilising
+modernisation
+modernisation's
+modernisations
+monetisation
+monetise
+monetised
+monetises
+monetising
+monopolisation
+monopolisation's
+monopolisations
+monopolise
+monopolised
+monopoliser
+monopolisers
+monopolises
+monopolising
+multicolour
+multicolour's
+multicoloured
+multicolours
+narcotises
+nasalisation
+nasalisation's
+nasalisations
+nasalised
+naturalised
+neutralisation
+neutralisation's
+neutralisations
+nominalised
+novelised
+ochre
+ochre's
+ochres
+oedema
+oedema's
+oedemas
+oedematous
+operationalisation
+operationalisations
+operationalise
+operationalised
+orthogonalisation
+orthogonalised
+orthopaedic
+orthopaedics
+ostracised
+outmanoeuvre
+outmanoeuvred
+outmanoeuvres
+outmanoeuvring
+overemphasise
+overemphasised
+overemphasiser
+overemphasisers
+overemphasises
+overemphasising
+palatalisation
+palatalise
+palatalised
+palatalises
+palatalising
+palletised
+panelisation
+panelised
+parenthesise
+parenthesises
+parenthesising
+pasteurisation
+pasteurisations
+pedalled
+pedalling
+peptising
+platinise
+platinised
+platinises
+platinising
+ploughshare
+ploughshare's
+ploughshares
+polarise
+polarised
+polariser
+polarisers
+polarises
+polarising
+politicised
+polymerisations
+proletarianisation
+proletarianised
+pronominalisation
+pronominalise
+pummelled
+pyorrhoea
+pyorrhoea's
+pyorrhoeas
+pyrolyse
+pyrolyse's
+pyrolyser
+pyrolyses
+radiopasteurisation
+radiosterilisation
+radiosterilised
+rancour
+rancour's
+rancours
+randomisation
+randomisation's
+randomisations
+rationalisation
+rationalisation's
+rationalisations
+reacclimatises
+reactualises
+realisabilities
+realisability
+realisability's
+reconceptualisation
+recrystallisation
+recrystallisation's
+recrystallisations
+recrystallise
+recrystallising
+reemphasise
+reemphasised
+reemphasiser
+reemphasisers
+reemphasises
+reemphasising
+regularising
+reharmonisation
+rehumanises
+remobilisation
+remobilisation's
+remobilisations
+remobilises
+remonetisation
+remonetise
+remonetised
+remonetises
+remonetising
+repopularise
+revaporisation
+revaporisation's
+revaporisations
+revisualisation
+revisualisation's
+revisualisations
+revitalisation
+revitalise
+revitalised
+revitaliser
+revitalisers
+revitalises
+revitalising
+ritualised
+romanticise
+romanticises
+romanticising
+rubberised
+satirises
+scandalised
+scandalising
+sectionalised
+secularisation
+secularisation's
+secularisations
+secularised
+sensitised
+sentimentalise
+sentimentalised
+sentimentaliser
+sentimentalisers
+sentimentalises
+sentimentalising
+sexualised
+signalises
+snivelled
+sniveller
+snivellers
+snivelling
+snivellings
+socialisation
+socialisation's
+socialisations
+stabilisation
+stabilisation's
+stabilisations
+stigmatisation
+stigmatisation's
+stigmatisations
+stigmatised
+stylisation
+stylisation's
+stylisations
+subcategorising
+subsidisation
+subsidisation's
+subsidisations
+substerilisation
+suburbanisation
+suburbanisation's
+suburbanisations
+suburbanised
+suburbanising
+swivelled
+swivelling
+systematisation
+systematisation's
+systematisations
+systemisation
+systemisation's
+systemisations
+teaselled
+teaselling
+teetotaller
+temporise
+temporised
+temporiser
+temporiser's
+temporisers
+temporises
+temporising
+temporising's
+temporisingly
+temporisings
+theatregoer
+theatregoer's
+theatregoers
+theatregoing
+tinselled
+tinselling
+traditionalised
+travelogue
+travelogue's
+travelogues
+trialisation
+triangularisation
+triangularisations
+tricolour
+tricolour's
+tricoloured
+tricolours
+tyne
+tyne's
+tynes
+tyrannise
+tyrannised
+tyranniser
+tyrannisers
+tyrannises
+tyrannising
+tyrannising's
+tyrannisingly
+tyrannisings
+unamortisation
+unamortisation's
+unamortisations
+uncanonised
+uncauterised
+uncauterised's
+uncauteriseds
+undemocratises
+underutilisation
+underutilised
+undialysed
+undialysed's
+undialyseds
+undiscoloureds
+undramatised
+undramatised's
+undramatiseds
+unenergised
+unenergised's
+unenergiseds
+uneulogised
+uneulogised's
+uneulogiseds
+unfossilised
+unfossilised's
+unfossiliseds
+unfraternising
+unfraternising's
+unfraternisings
+unhydrolysed
+unhydrolysed's
+unhydrolyseds
+unidolised
+unidolised's
+unidoliseds
+unimmortalised
+unindustrialised
+unindustrialised's
+unindustrialiseds
+unitised
+universalise
+universalised
+universaliser
+universalisers
+universalises
+universalising
+unlearnt
+unmagnetised
+unmagnetised's
+unmagnetiseds
+unmemorialised
+unmemorialised's
+unmemorialiseds
+unmesmerised
+unmineralised
+unmineralised's
+unmineraliseds
+unmobilised
+unmobilised's
+unmobiliseds
+unmonopolised
+unmonopolises
+unnaturalised
+unpatronising
+unpolarised
+unpolarised's
+unpolariseds
+unsatirises
+unsavouries
+unsavouriness
+unsavoury
+unsavoury's
+unscandalised
+unsecularised
+unsensitised
+unsentimentalises
+unstigmatised
+unstigmatised's
+unstigmatiseds
+untemporisings
+untrammelled
+unvocalised
+unvocalised's
+unvocaliseds
+unvulcanised
+unvulcanised's
+unvulcaniseds
+updraught
+urbanisation
+urbanisation's
+urbanisations
+urbanised
+vacuolisation
+vacuolisation's
+vacuolisations
+vaporisation
+vaporisation's
+vaporisations
+varicoloured
+varicoloured's
+varicoloureds
+velarise
+velarised
+velarises
+velarising
+visualisation
+visualisation's
+visualisations
+vocalisation
+vocalisation's
+vocalisations
+vocalise
+vocalised
+vocaliser
+vocalisers
+vocalises
+vocalising
+volatilisation
+volatilisation's
+volatilisations
+vulcanised
+waggoneer
+watercolour
+watercolour's
+watercoloured
+watercolouring
+watercolourist
+watercolourists
+watercolours
+yodelled
+yodeller
+yodelling
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.2 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.2
new file mode 100644
index 00000000000..096e6785460
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/british.2
@@ -0,0 +1,6688 @@
+Aetna
+Africanisation
+Africanisation's
+Africanisations
+Africanise
+Africanised
+Africanises
+Africanising
+Afrikanerisation
+Afrikanerise
+Afrikanerised
+Afrikanerises
+Afrikanerising
+Americanisation
+Americanisation's
+Americanisations
+Americanise
+Americaniser
+Americanisers
+Americanises
+Americanising
+Anglicanise
+Anglicanises
+Arabianise
+Arabianises
+Arabicise
+Arabicises
+Aryanisation
+Aryanise
+Aryanised
+Aryanises
+Aryanising
+Asiaticisation
+Asiaticisation's
+Asiaticisations
+Asiaticise
+Asiaticises
+Assyrianise
+Assyrianises
+Australianise
+Australianises
+Austrianise
+Austrianises
+Babelise
+Babelises
+Babylonise
+Babylonises
+Balkanisation
+Balkanisation's
+Balkanisations
+Balkanise
+Balkanises
+Berlinise
+Berlinises
+Bessemerise
+Bessemerises
+Birminghamise
+Birminghamises
+Boswellise
+Boswellises
+Byronise
+Byronises
+Byzantinise
+Byzantinises
+Caesarise
+Caesarises
+Calvinise
+Calvinises
+Canadianisation
+Canadianisation's
+Canadianisations
+Canadianise
+Canadianises
+Caponisation
+Catholicisation
+Catholicised
+Catholicising
+Celticise
+Celticises
+Christianisation
+Christianisation's
+Christianisations
+Christianise
+Christianiser
+Christianisers
+Christianises
+Ciceronianise
+Ciceronianises
+Continentalise
+Continentalises
+Corinthianise
+Corinthianises
+Creolisation
+Creolise
+Creolised
+Creolises
+Creolising
+Cubanise
+Cubanises
+Czechisation
+Czechisation's
+Czechisations
+Danisation
+Danisation's
+Danisations
+Danise
+Danises
+Darwinise
+Darwinises
+Doricise
+Doricises
+Edenisation
+Edenisation's
+Edenisations
+Edenise
+Edenises
+Egyptianisation
+Egyptianisation's
+Egyptianisations
+Egyptianise
+Egyptianises
+Egyptise
+Egyptises
+Elizabethanise
+Elizabethanises
+Englishise
+Englishises
+Epicurise
+Epicurises
+Episcopalianise
+Episcopalianises
+Eskimoised
+Eskimoised's
+Eskimoiseds
+Essenise
+Essenises
+Europeanise
+Europeanises
+Europeanising
+Fletcherise
+Fletcherises
+Francise
+Francises
+Franklinisation
+Franklinisation's
+Franklinisations
+Frenchise
+Frenchises
+Gaelicisation
+Gaelicisation's
+Gaelicisations
+Gaelicise
+Gaelicises
+Gallicisation
+Gallicise
+Gallicised
+Gallicises
+Gallicising
+Gothicise
+Gothicised
+Gothiciser
+Gothicisers
+Gothicises
+Gothicising
+Grecianise
+Grecianises
+Greekise
+Greekises
+Hanoverianise
+Hanoverianises
+Hanoverise
+Hanoverises
+Harvardise
+Harvardises
+Harveyise
+Harveyises
+Hattise
+Hattises
+Hebraicise
+Hebraicises
+Hegelianise
+Hegelianises
+Hellenisation
+Hellenisations
+Hellenise
+Hellenised
+Hellenises
+Hellenising
+Hispanicisation
+Hispanicise
+Hispanicised
+Hispanicises
+Hispanicising
+Hollywoodise
+Hollywoodises
+Hoosierise
+Hoosierises
+Hooverise
+Hooverises
+Iliadise
+Iliadises
+Illuminise
+Illuminises
+Ionicisation
+Ionicisation's
+Ionicisations
+Ionicise
+Ionicises
+Iranise
+Iranises
+Irishise
+Irishises
+Islamisation
+Islamisation's
+Islamisations
+Islamise
+Islamised
+Islamises
+Islamising
+Israelitise
+Israelitises
+Italianisation
+Italianisation's
+Italianisations
+Italianise
+Italianised
+Italianiser
+Italianisers
+Italianises
+Italianising
+Jacobinise
+Japanisation
+Japanisation's
+Japanisations
+Japanise
+Japanised
+Japanises
+Japanising
+Jesuitise
+Jesuitised
+Jesuitises
+Jesuitising
+Jonathanisation
+Jonathanisation's
+Jonathanisations
+Latinisation
+Latinisation's
+Latinisations
+Latinise
+Latinised
+Latiniser
+Latinisers
+Latinises
+Latinising
+Lilliputianise
+Lilliputianises
+Listerise
+Listerises
+Londonisation
+Londonisation's
+Londonisations
+Londonise
+Londonises
+Lutheranise
+Lutheraniser
+Lutheranisers
+Lutheranises
+Malayise
+Malayises
+Manhattanise
+Manhattanises
+Mediterraneanisation
+Mediterraneanisation's
+Mediterraneanisations
+Mediterraneanise
+Mediterraneanises
+Mendelise
+Mendelises
+Mexicanise
+Mexicanises
+Midlandise
+Midlandises
+Miltonise
+Miltonised
+Miltonises
+Miltonising
+Mohammedanisation
+Mohammedanisation's
+Mohammedanisations
+Mohammedanise
+Mohammedanised
+Mohammedanises
+Mohammedanising
+Molochise
+Molochises
+Moravianised
+Moravianiseds
+Moslemise
+Moslemises
+Napoleonise
+Napoleonises
+Negroisation
+Negroisation's
+Negroisations
+Negroise
+Negroises
+Newmanise
+Newmanises
+Nipponise
+Nipponises
+Normanisation
+Normanisation's
+Normanisations
+Normanise
+Normanised
+Normaniser
+Normanisers
+Normanises
+Normanising
+Occidentalisation
+Occidentalisation's
+Occidentalisations
+Occidentalise
+Occidentalised
+Occidentalises
+Occidentalising
+Olympianise
+Olympianises
+Ottomanisation
+Ottomanisation's
+Ottomanisations
+Ottomanise
+Ottomanises
+Parisianisation
+Parisianisation's
+Parisianisations
+Parisianise
+Parisianises
+Pasteurisers
+Paulinise
+Paulinises
+Paynise
+Paynises
+Persianisation
+Persianisation's
+Persianisations
+Persianise
+Persianises
+Peruvianise
+Peruvianises
+Philistinise
+Philistinises
+Presbyterianise
+Presbyterianises
+Procrusteanise
+Procrusteanises
+Protestantise
+Protestantises
+Prussianisation
+Prussianisation's
+Prussianisations
+Prussianise
+Prussianised
+Prussianiser
+Prussianisers
+Prussianises
+Prussianising
+Pullmanise
+Pullmanises
+Puritanise
+Puritaniser
+Puritanisers
+Puritanises
+Pythagoreanise
+Pythagoreanises
+Quakerisation
+Quakerisation's
+Quakerisations
+Quakerise
+Quakerises
+Romanisation
+Romanisation's
+Romanisations
+Romanise
+Romanised
+Romaniser
+Romanisers
+Romanises
+Romanising
+Roumania
+Russianisation's
+Russianisations
+Russianised
+Russianises
+Russianising
+Sabbathise
+Sabbathises
+Saxonisation
+Saxonisation's
+Saxonisations
+Saxonise
+Saxonises
+Semiticise
+Semiticises
+Semitisation
+Semitisation's
+Semitisations
+Semitise
+Semitises
+Shakespearise
+Shakespearises
+Shintoise
+Shintoises
+Slavicise
+Slavicises
+Slavisation
+Slavisation's
+Slavisations
+Slavise
+Slavises
+Slavonicise
+Slavonicises
+Sovietised
+Sovietising
+Spaniardisation
+Spaniardisation's
+Spaniardisations
+Spaniardise
+Spaniardises
+Spanishise
+Spanishises
+Spartanise
+Spartanises
+Syrianise
+Syrianises
+Talmudisation
+Talmudisation's
+Talmudisations
+Talmudise
+Talmudises
+Tammanyise
+Tammanyises
+Taylorise
+Taylorises
+Timonise
+Timonises
+Toryise
+Toryises
+Turkise
+Turkises
+Tuscanise
+Tuscanises
+Tylerise
+Tylerises
+Unitarianise
+Unitarianises
+Utopianise
+Utopianises
+Vaticanisation
+Vaticanisation's
+Vaticanisations
+Vaticanise
+Vaticanises
+Victorianise
+Victorianises
+Vietnamisation
+Vietnamise
+Vietnamised
+Vietnamises
+Vietnamising
+Wagnerise
+Wagnerises
+Whitmanise
+Whitmanises
+abnormalise
+abnormalises
+abolitionise
+abolitionises
+absolutisation
+absolutisation's
+absolutisations
+absolutise
+absolutises
+accessorise
+acclimatisable
+acclimatisables
+accoutre
+accoutred
+accoutres
+accoutring
+acculturise
+acetonisation
+acetonisation's
+acetonisations
+acetonise
+acetonises
+achromatisation
+achromatise
+achromatised
+achromatises
+achromatising
+acidise
+acidises
+acronymise
+acronymises
+actionise
+actionises
+activise
+activises
+adrenalise
+adrenalises
+adulterise
+adulterises
+adverbialise
+adverbialises
+aegyptus
+aeon
+aeon's
+aeonism
+aeonism's
+aeonisms
+aeons
+aerodonetics
+aerodrome
+aerogel
+aeromechanic
+aerometry
+aerophagia
+aerophobia
+aerophyte
+aeropropulsion
+aerosolisation
+aerostation
+aesthesia
+aesthesis
+aesthetical
+aesthetician
+aestheticise
+aestheticises
+aestival
+aestivate
+aestivation
+aetiologies
+aetiology
+aetiology's
+agatise
+agatises
+agenise
+aggrandisable
+aggrandisable's
+aggrandisables
+aggrandisation
+aggrandise
+aggrandised
+aggrandiser
+aggrandisers
+aggrandises
+aggrandising
+agnise
+agnised
+agnises
+agnising
+agrarianise
+agrarianises
+alarum
+albumenisation
+albumenise
+albumenised
+albumenises
+albumenising
+albuminisation
+albuminisation's
+albuminisations
+albuminise
+albuminises
+alchemise
+alcoholisable
+alcoholisables
+alcoholisation
+alcoholisation's
+alcoholisations
+alcoholise
+alcoholises
+algebraisation
+algebraisation's
+algebraisations
+algebraise
+algebraises
+alienise
+alienises
+alkalinisation
+alkalinisation's
+alkalinisations
+alkalinise
+alkalinises
+alkalisation
+alkalise
+alkalised
+alkalises
+alkalising
+allegorisation
+allegorise
+allegorised
+allegoriser
+allegorises
+allegorising
+alphabetisation
+alphabetisation's
+alphabetisations
+alternise
+alternises
+aluminisation
+aluminise
+aluminised
+aluminises
+aluminising
+amalgamatise
+amalgamatises
+amalgamisation
+amalgamisation's
+amalgamisations
+amalgamise
+amalgamises
+amoralise
+amoralises
+amorphisation
+amorphise
+amortisable
+amortisables
+amortisement
+amortisement's
+amortisements
+amourism
+amourism's
+amourisms
+amouristic
+amouristics
+anaemically
+anaesthesiologist
+anaesthesiology
+anaesthetisation
+anaesthetisation's
+anaesthetisations
+anaesthetist
+anaesthetization
+anaesthetization's
+anaesthetizations
+anagrammatisation
+anagrammatise
+analogise
+analogises
+analysation
+anarchise
+anarchises
+anathematisation
+anathematise
+anathematised
+anathematises
+anathematising
+anatomise
+angelicise
+angelicises
+angelise
+angelises
+anglicisation
+anglicisation's
+anglicisations
+anglicise
+anglicised
+anglicises
+angularisation
+angularisation's
+angularisations
+angularise
+angularises
+anhydridisation
+anhydridisation's
+anhydridisations
+anhydridise
+anhydridises
+animalisation
+animalisation's
+animalisations
+animalise
+animalised
+animalises
+animalising
+annalise
+annalises
+annualisation
+annualise
+annualises
+annualising
+anodisation
+antagonisation
+antagonisation's
+antagonisations
+anthologisation
+anthologise
+anthologised
+anthologiser
+anthologises
+anthologising
+anthracitisation
+anthracitisation's
+anthracitisations
+anthropomorphisation
+anthropomorphise
+anthropomorphised
+anthropomorphises
+anthropomorphising
+anticatalyser
+anticatalyser's
+anticatalysers
+anticentralisation
+anticentralisation's
+anticentralisations
+anticise
+anticises
+antiepicentre
+antiepicentre's
+antiepicentres
+antifertiliser
+antifertiliser's
+antifertilisers
+antilabour
+antilabour's
+antilabours
+antimediaeval
+antimediaeval's
+antimediaevals
+antioxidiser
+antioxidiser's
+antioxidisers
+antioxidising
+antioxidising's
+antioxidisings
+antipathise
+antipathises
+antiquarianise
+antiquarianises
+antirumour
+antirumour's
+antirumours
+antisensitise
+antisensitiser
+antisensitiser's
+antisensitisers
+antisensitises
+antisepticise
+antisepticises
+antiseptise
+antiseptises
+antisyphon
+antisyphon's
+antisyphons
+antithesise
+anvilled
+anvilling
+aphorise
+aphorised
+aphoriser
+aphorisers
+aphorises
+aphorising
+apostatisation
+apostatise
+apostatised
+apostatises
+apostatising
+apostrophise
+apostrophised
+apostrophises
+apostrophising
+apotheosise
+apparelling
+appetise
+appetised
+appetisement
+appetisement's
+appetisements
+appetisers
+appetises
+arabisation
+arabise
+arabised
+arabises
+arabising
+arborisation
+arborise
+arborised
+arborises
+arborising
+arboures
+arcticise
+arcticises
+arithmetisation
+arithmetisation's
+arithmetisations
+armourless
+aromatisation
+aromatise
+aromatised
+aromatises
+aromatising
+arsenicise
+arsenicises
+arterialisation
+arterialisation's
+arterialisations
+arterialise
+arterialised
+arterialises
+arterialising
+artificialise
+artificialises
+asafoetida
+asepticise
+asepticises
+astigmatiser
+astigmatiser's
+astigmatisers
+asynchronise
+asynchronised
+asynchronises
+asynchronising
+atomisability
+atomisable
+atticise
+atticises
+attitudinisation
+attitudinise
+attitudinised
+attitudinises
+attitudinising
+autoimmunisation
+autoionisation
+automatisation
+automatisation's
+automatisations
+automatise
+automatises
+autotomise
+avianise
+azotisation
+azotise
+azotised
+azotises
+azotising
+bachelorise
+bachelorises
+baconise
+baconises
+bacterise
+balladise
+balladises
+balsamise
+balsamises
+bantamise
+bantamises
+baptisable
+baptisables
+baptisement
+baptisement's
+baptisements
+barbarianise
+barbarianises
+barbarisation
+barbarise
+barbarised
+barbarises
+barbarising
+baronise
+baronises
+bastardisation
+bastardisation's
+bastardisations
+beaverise
+beaverises
+beclamour
+beclamoured
+beclamouring
+beclamours
+becudgelled
+becudgelling
+bedlamise
+bedlamises
+bedrivelled
+bedrivelling
+bejewelled
+bejewelling
+bemedalled
+bestialise
+bestialised
+bestialises
+bestialising
+beveller
+bevellers
+bichromatise
+bichromatises
+bicolour
+bicoloured
+bimetallist
+bimetallistic
+biographise
+biographises
+biologise
+biologises
+bipolarisation
+bipolarise
+bipolarises
+bistre
+bistred
+bituminisation
+bituminise
+bituminised
+bituminises
+bituminising
+bolshevise
+bonderise
+borise
+borises
+botanise
+botanised
+botanises
+botanising
+boulevardise
+boulevardises
+bourbonise
+bourbonises
+bowdlerisation
+bowelled
+bowelling
+brominise
+brominises
+brutalisation
+brutalisation's
+brutalisations
+bureaucratise
+bureaucratised
+bureaucratises
+busheller
+bushellers
+cadaverise
+cadaverises
+cadmiumise
+cadmiumises
+canalisation
+canalisation's
+canalisations
+canalise
+canalised
+canalises
+canalising
+canaller
+canallers
+cancellable
+cancellous
+cannibalisation
+cannibalisation's
+cannibalisations
+canonisation
+canonisation's
+canonisations
+canonise
+canoniser
+canonisers
+canonises
+canonising
+capitalisable
+capitalisables
+caponise
+caponised
+caponises
+caponising
+capsulisation
+capsulise
+capsulised
+capsulises
+capsulising
+caracolled
+caracolling
+caramelisation
+caramelisation's
+caramelisations
+caramelise
+caramelised
+caramelises
+caramelising
+carbolisation
+carbolise
+carbolised
+carbolises
+carbolising
+carbonatisation
+carbonatisation's
+carbonatisations
+carbonisable
+carbonisables
+carburisation
+carburise
+carburised
+carburises
+carburising
+carnalise
+carnalises
+carolled
+caroller
+carollers
+carolling
+cartelisation
+cartelisation's
+cartelisations
+cartelise
+cartelises
+castorised
+castorised's
+castoriseds
+catabolise
+cataloguise
+cataloguises
+catalyse
+catalyser
+catalyser's
+catalysers
+catalyses
+catechisable
+catechisables
+catechisation
+catechisation's
+catechisations
+catechise
+catechised
+catechiser
+catechisers
+catechises
+catechising
+catheterisation
+catheterisation's
+catheterisations
+catheterise
+catheterises
+catholicise
+catholiciser
+catholicisers
+catholicises
+causticisation
+causticisation's
+causticisations
+causticise
+causticiser
+causticisers
+causticises
+cauterisation
+cauterisation's
+cauterisations
+cavillation
+cavilled
+cavilling
+cavillings
+celestialise
+celestialises
+centigramme
+centigramme's
+centigrammes
+centilitre
+centreboard
+centrifugalisation
+centrifugalisation's
+centrifugalisations
+centrifugalise
+centrifugalises
+cephalisation
+cerebralisation
+cerebralisation's
+cerebralisations
+cerebralise
+cerebralises
+ceremonialise
+ceremonialises
+chameleonise
+chameleonises
+championise
+championises
+channelisation
+channelisation's
+channelisations
+channelise
+channelises
+chattelisation
+chattelisation's
+chattelisations
+chattelise
+chattelises
+cheerfulise
+cheerfulises
+chemicalisation
+chemicalisation's
+chemicalisations
+chemicalise
+chemicalises
+chequerboard
+chiselling
+chisellings
+chloridise
+chloridises
+chlorinise
+chlorinises
+chloroformisation
+chloroformisation's
+chloroformisations
+chloroformise
+chloroformises
+chorisation
+chorisation's
+chorisations
+chromatise
+chromatises
+chromicise
+chromicises
+chromise
+chromised
+chromises
+chromising
+chronologise
+chronologises
+cinchonise
+cinematise
+circularisation
+circularisation's
+circularisations
+circularise
+circularised
+circulariser
+circularisers
+circularises
+circularising
+citizenise
+citizenises
+civilianisation
+civilianisations
+civilianise
+civilianised
+civilianises
+civilianising
+civilisable
+civilisables
+clangour
+clangour's
+clangoured
+clangouring
+clangours
+classicalise
+classicalises
+classicisation
+classicise
+classicised
+classicises
+classicising
+clericalise
+clericalises
+climatise
+climatises
+coalise
+coaliser
+coalisers
+coalises
+cocainisation
+cocainisation's
+cocainisations
+cocainise
+cocainises
+coeducationalise
+coeducationalises
+coenamour
+coenamoured
+coenamouring
+coenamours
+coequalise
+coequalises
+cognisably
+cognise
+cognised
+cogniser
+cognisers
+cognises
+cognising
+collateralise
+collectivisation
+collectivisation's
+collectivisations
+collectivise
+collectivised
+collectivises
+colloquialise
+colloquialises
+colonialise
+colonialises
+colonisabilities
+colonisability
+colonisability's
+colonisable
+colonisables
+colonisationist
+colonisationist's
+colonisationists
+colourabilities
+colourability
+colourability's
+colourable
+colourableness
+colourables
+colourablies
+colourably
+colourama
+colourant
+colourants
+colourcast
+colourcaster
+colourcasters
+colourfast
+colourfastness
+colourific
+colourimetric
+colourimetrically
+colourisation
+colourisation's
+colourisations
+colourise
+colourises
+colourism
+colourisms
+colourist
+colourist's
+colouristic
+colouristically
+colouristics
+colourists
+colourman
+colourmap
+colourmap's
+colourmaps
+colourmen
+coloury
+columnisation
+columnisation's
+columnisations
+commercialise
+commercialised
+commercialises
+commercialising
+commonise
+commonises
+communalisation
+communalisation's
+communalisations
+communalise
+communalised
+communaliser
+communalisers
+communalises
+communalising
+communisation
+communisation's
+communisations
+companionise
+companionises
+compartmentalisation
+compartmentalisation's
+compartmentalisations
+compartmentise
+compartmentises
+complementiser
+computerisable
+concentre
+concertise
+concertiser
+concertisers
+concertises
+concretisation
+concretisations
+concretise
+concretised
+concretises
+concretising
+conditionalise
+conditionalises
+confederatise
+confederatises
+congenialise
+congenialises
+congregationalise
+congregationalises
+connexion
+conservatise
+conservatised
+conservatises
+conservatising
+consonantise
+consonantises
+constitutionalisation
+constitutionalisation's
+constitutionalisations
+constitutionalise
+constitutionalises
+containerisation
+containerise
+containerised
+containerises
+containerising
+contemporisation
+contemporise
+contemporised
+contemporises
+contemporising
+controversialise
+controversialises
+conundrumise
+conundrumises
+conventionalisation
+conventionalisation's
+conventionalisations
+conventionalise
+conventionalises
+conventionalising
+conventionise
+conventionises
+conversationise
+conversationises
+conveyorise
+conveyorised
+conveyorises
+conveyorising
+convivialise
+convivialises
+copolymerisation
+copolymerisation's
+copolymerisations
+copolymerise
+copolymerised
+copolymerises
+copolymerising
+copperisation
+copperisation's
+copperisations
+copperise
+copperises
+coralled
+corbelled
+corbelling
+corbellings
+cordialise
+cordialises
+corporealisation
+corporealisation's
+corporealisations
+corporealise
+corporealises
+cosmopolitanisation
+cosmopolitanisation's
+cosmopolitanisations
+cosmopolitanise
+cosmopolitanises
+cottonisation
+cottonisation's
+cottonisations
+cottonise
+cottonises
+councillorship
+counsellee
+counsellorship
+crawlerise
+crawlerises
+creaturise
+creaturises
+crenellate
+crenellated
+crenellates
+crenellation
+crenelled
+crenelling
+cretinisation
+cretinisation's
+cretinisations
+cretinise
+cretinises
+criminalisation
+criminalisation's
+criminalise
+criticisable
+criticisables
+crofterisation
+crofterisation's
+crofterisations
+crofterise
+crofterises
+cruelise
+cruelises
+crystallisabilities
+crystallisability
+crystallisability's
+crystallisable
+crystallisables
+crystallographical
+crystallographically
+cudgelled
+cudgeller
+cudgellers
+cudgelling
+cudgellings
+culturisation
+culturisation's
+culturisations
+culturise
+culturises
+cupellation
+cupelled
+cupeller
+cupellers
+cupelling
+curarise
+curarised
+curarises
+curarising
+curatise
+curatises
+curricularisation
+curricularisation's
+curricularisations
+curricularise
+curricularises
+cutinise
+cutinised
+cutinises
+cutinising
+cutisation
+cutisation's
+cutisations
+cyclisation
+cyclisation's
+cyclisations
+cyclise
+cyclised
+cyclises
+cyclising
+dandyise
+dandyises
+dastardise
+dastardises
+deaconise
+deaconises
+deaminise
+decalitre
+decalitres
+decametre
+decametre's
+decametres
+decarbonisation
+decarbonise
+decarbonised
+decarboniser
+decarbonises
+decarbonising
+decarburisation
+decarburise
+decarburised
+decarburises
+decarburising
+decasualisation
+decentralisationist
+decentralise
+decentralises
+decigramme
+decigramme's
+decigrammes
+decilitre
+decilitres
+decimalisation
+decimalisation's
+decimalisations
+decimalise
+decimalised
+decimalises
+decimalising
+decimetre
+decimetre's
+decimetres
+decolonisation
+decolonised
+decolonises
+decolonising
+decolour
+decolourant
+decolourants
+decolourate
+decolourated
+decolourates
+decoloured
+decolouring
+decolourisation
+decolourise
+decolourised
+decolouriser
+decolourises
+decolours
+decriminalisation
+decriminalisation's
+decriminalise
+deemphasisation
+deemphasisation's
+deenergise
+deenergised
+deenergiser
+deenergises
+deenergising
+defeminise
+defeminised
+defeminises
+defeminising
+defenceman
+definitisation
+definitisation's
+definitisations
+definitise
+definitised
+definitises
+definitising
+deflectionisation
+deflectionisation's
+deflectionisations
+deflectionise
+deflectionises
+deformalise
+defunctionalisation
+defunctionalisation's
+defunctionalisations
+defunctionalise
+defunctionalises
+dehumanisation
+dehumanisation's
+dehumanisations
+dehypnotisation
+dehypnotise
+dehypnotised
+dehypnotises
+dehypnotising
+deindustrialisation
+deindustrialise
+deionisation
+deionise
+deionises
+dekagramme
+dekagramme's
+dekagrammes
+dekalitre
+dekametre
+dekametre's
+dekametres
+delimitise
+delimitises
+delocalisation
+delocalise
+delustre
+demagnetisable
+demagnetisables
+demagnetisation
+demagnetisation's
+demagnetisations
+demagnetise
+demagnetised
+demagnetiser
+demagnetisers
+demagnetises
+demagnetising
+dematerialisation
+dematerialise
+dematerialised
+dematerialises
+dematerialising
+demilitarisation
+demilitarise
+demilitarised
+demilitarises
+demilitarising
+demineralise
+demineralised
+demineraliser
+demineralises
+demineralising
+demobilisation
+demobilise
+demobilised
+demobilises
+demobilising
+demonetisation
+demonetise
+demonetised
+demonetises
+demonetising
+demonisation
+demonise
+demonised
+demonises
+demonising
+denationalisation
+denationalise
+denationalised
+denationalises
+denationalising
+denaturalisation
+denaturalise
+denaturalised
+denaturalises
+denaturalising
+denaturisation
+denaturisation's
+denaturisations
+denaturise
+denaturiser
+denaturisers
+denaturises
+denicotinise
+denizenise
+denizenises
+denominationalise
+denominationalises
+denormalise
+dentalisation
+dentalisation's
+dentalisations
+dentalise
+dentalises
+denuclearisation
+denuclearise
+denuclearised
+denuclearises
+denuclearising
+deodorise
+deodorised
+deodorises
+deodorising
+deoxidiser
+departmentalisation
+departmentalisation's
+departmentalisations
+departmentalise
+departmentalises
+departmentisation
+departmentisation's
+departmentisations
+departmentise
+departmentises
+depersonalise
+depersonalises
+depersonalising
+depolarisation
+depolarisation's
+depolarisations
+depolarise
+depolarised
+depolariser
+depolarisers
+depolarises
+depolarising
+depoliticisation
+depoliticise
+depoliticised
+depoliticises
+depoliticising
+depolymerisation
+depolymerise
+depolymerised
+depolymerises
+depolymerising
+depressurisation
+depressurise
+depressurised
+depressurises
+depressurising
+deputationise
+deputationises
+deputisation
+deputise
+deputises
+deputising
+derationalisation
+derationalisation's
+derationalisations
+derationalise
+derationalises
+deratisation
+deratisation's
+deratisations
+derealisation
+deregulationise
+deregulationises
+desalinisation
+desalinise
+desensitisation
+desensitisation's
+desensitisations
+desensitise
+desensitised
+desensitiser
+desensitisers
+desensitises
+desensitising
+desexualisation
+desexualise
+desexualised
+desexualises
+desexualising
+despiritualisation
+despiritualise
+despotise
+despotises
+destabilisation
+destalinise
+destalinised
+destalinises
+destalinising
+desterilise
+desulphurisation
+desulphurise
+desulphurised
+desulphurises
+desulphurising
+desynchronisation
+detribalisation
+detribalisation's
+detribalisations
+develled
+develling
+devilise
+devilises
+devilled
+devilling
+devitalisation
+devitalise
+devitalised
+devitalises
+devitalising
+devocalise
+devolatilisation
+devolatilise
+devolatilised
+devolatilises
+devolatilising
+diabolisation
+diabolise
+diabolised
+diabolises
+diabolising
+diagonalisation
+diagonalise
+diagonalises
+dialecticise
+dialecticises
+diallist
+diallists
+dialysabilities
+dialysability
+dialysability's
+dialysable
+dialysables
+dialyse
+dialyser
+dialyser's
+dialysers
+dialyses
+diamondise
+diamondises
+diarrhoeic
+diarrhoetic
+dieselisation
+dieselisation's
+dieselisations
+dieselise
+dieselises
+differentialise
+differentialises
+digitalise
+digitalised
+digitalises
+digitalising
+dimensionalisation
+dimensionalise
+dimensionalised
+dimensionalises
+dimensionalising
+dimerisation
+dimerisation's
+dimerisations
+dimerise
+dimerised
+dimerises
+dimerising
+diminutivise
+diminutivises
+diphthongisation
+diphthongisation's
+diphthongisations
+diphthongise
+diphthongises
+diplomatise
+diplomatises
+disangularise
+disangularises
+disauthorise
+disauthorises
+disbowelled
+disbowelling
+discanonisation
+discanonisation's
+discanonisations
+discanonise
+discanonises
+discolour
+discolour's
+discolouration
+discolouring
+discolourisation
+discolourisation's
+discolourisations
+discolourment
+discolourment's
+discolourments
+discretisation
+discretise
+disdenominationalise
+disdenominationalises
+disdiplomatise
+disdiplomatises
+disembowelled
+disembowelling
+disenamour
+disenamour's
+disenamours
+disenthral
+disenthrals
+disequalise
+disequaliser
+disequalisers
+disequalises
+disharmonise
+disharmonises
+disheveller
+dishevelling
+dishonourable
+dishonourableness
+dishonourables
+dishonourablies
+dishonourably
+dishumanise
+dishumanises
+dishumour
+dishumoured
+dishumours
+disillusionise
+disillusioniser
+disillusionisers
+disillusionises
+disindividualise
+disindividualises
+dismalise
+dismalises
+disnaturalisation
+disnaturalisation's
+disnaturalisations
+disnaturalise
+disnaturalises
+disorganise
+disorganiser
+disorganisers
+disorganises
+disorganising
+disorientate
+disorientated
+disorientates
+disorientating
+disozonise
+disozonises
+dispapalise
+dispapalises
+dispauperise
+dispauperises
+dispersonalise
+dispersonalises
+dispopularise
+dispopularises
+disrealise
+disrealises
+dissceptre
+dissceptre's
+dissceptres
+disseise
+disseised
+disseises
+disseisin
+disseising
+disseisins
+disseisor
+disseisors
+dissensualise
+dissensualises
+dissocialise
+dissympathise
+dissympathises
+disutilise
+disutilises
+divinisation
+divinisation's
+divinisations
+divinise
+divinised
+divinises
+divinising
+dockisation
+dockisation's
+dockisations
+dockise
+dockises
+doctorisation
+doctorisation's
+doctorisations
+doctorise
+doctorises
+doctrinisation
+doctrinisation's
+doctrinisations
+doctrinise
+doctrinises
+documentise
+documentises
+dogmatisation
+dogmatise
+dogmatiser
+dognapped
+dognapping
+dolomitisation
+dolomitisation's
+dolomitisations
+dolomitise
+dolomitises
+dolour
+domesticise
+domesticises
+dowelled
+doweller
+dragonise
+dragonises
+dramatisable
+dramatisables
+draughtboard
+draughtily
+draughtsmanship
+drivelled
+driveller
+drivellers
+drivelling
+dualisation
+dualisation's
+dualisations
+dualise
+dualises
+ductilise
+ductilises
+easternise
+ebonisation
+ebonise
+ebonised
+ebonises
+ebonising
+ecclesiasticise
+ecclesiasticises
+echoise
+echoises
+eclecticise
+eclecticises
+economisation
+economisation's
+economisations
+ecstaticise
+ecstaticises
+editorialisation
+effectualise
+effectualises
+effeminatise
+effeminatises
+egoise
+egoiser
+egoisers
+egoises
+elasticisation
+elasticise
+elasticised
+elasticiser
+elasticisers
+elasticises
+elasticising
+electricalise
+electricalises
+electricise
+electricises
+electroanaesthesia
+electroanaesthesia's
+electroanaesthesias
+electrocauterisation
+electrocauterisation's
+electrocauterisations
+electrodialyse
+electrodialyser
+electrodialyser's
+electrodialysers
+electrodialyses
+electrogalvanise
+electrogalvanises
+electrohomoeopathies
+electrohomoeopathy
+electrohomoeopathy's
+electrolyse
+electrolysed
+electrolyses
+electrolysing
+electromagnetisable
+electrotonise
+electrotonises
+elegise
+elegised
+elegises
+elegising
+elementalise
+elementalises
+emblematicise
+emblematicises
+emblematisation
+emblematise
+emblematised
+emblematises
+emblematising
+emblemise
+emblemises
+embolisation
+embowelled
+embowelling
+emotionalisation
+emotionalisation's
+emotionalisations
+emotionalise
+emotionalised
+emotionalises
+emotionalising
+emotionise
+emotionises
+empanelled
+empanelling
+empathise
+empathised
+empathises
+empathising
+emulsionise
+emulsionises
+enamellist
+enamellists
+enamour
+enamour's
+enamoured
+enamoured's
+enamouredness
+enamoureds
+enamouring
+enamourment
+enamourment's
+enamourments
+enamours
+enarbour
+enarbour's
+enarbours
+encarnalisation
+encarnalise
+encarnalised
+encarnalises
+encarnalising
+encolour
+encolour's
+encoloured
+encolouring
+encolours
+encyclopaedic
+encyclopaedically
+encyclopaedism
+encyclopaedist
+energisation
+energise
+energiser
+energisers
+energising
+engramme
+engramme's
+engrammes
+engrandise
+engrandisement
+engrandisement's
+engrandisements
+engrandises
+enhypostatise
+enhypostatises
+enolisation
+enolisation's
+enolisations
+enolise
+enolises
+ensepulchre
+ensepulchre's
+ensepulchres
+ensorcelled
+ensorcells
+enthralment
+enthralment's
+enthralments
+enthronisation
+enthronisation's
+enthronisations
+enthronise
+enthronises
+entomologise
+entomologised
+entomologises
+entomologising
+envapour
+envapour's
+envapours
+envenomisation
+epigrammatisation
+epigrammatise
+epigrammatised
+epigrammatiser
+epigrammatises
+epigrammatising
+epitaphise
+epitaphises
+epithetise
+epithetises
+epitomisation
+epitomisation's
+epitomisations
+equestrianise
+equestrianises
+ergotised
+ergotises
+eroticisation
+eroticise
+eroticised
+eroticises
+eroticising
+essentialise
+essentialises
+esterisation
+esterisation's
+esterisations
+esterise
+esterises
+eternalisation
+eternalisation's
+eternalisations
+eternalise
+eternalised
+eternalises
+eternalising
+eternise
+eternised
+eternises
+eternising
+etherealisation
+etherealisation's
+etherealisations
+etherealise
+etherealised
+etherealises
+etherealising
+etherisation
+etherisation's
+etherisations
+etherise
+etherised
+etheriser
+etherisers
+etherises
+etherising
+ethicisation
+ethicise
+ethicised
+ethicises
+ethicising
+ethnicise
+ethnicises
+etymologisation
+etymologise
+etymologised
+etymologises
+etymologising
+euhemerise
+eulogisation
+eulogisation's
+eulogisations
+euphemise
+euphemised
+euphemiser
+euphemises
+euphemising
+euphonisation
+euphonise
+euphonised
+euphonises
+euphonising
+evangelisation
+evangelisation's
+evangelisations
+evangelise
+evangelised
+evangeliser
+evangelisers
+evangelises
+evangelising
+eventualise
+eventualises
+evolutionise
+evolutionises
+excursionise
+excursionises
+exhibitionise
+exhibitionises
+existentialise
+existentialises
+experimentalise
+experimentalises
+experimentise
+experimentises
+extemporisation
+extemporisation's
+extemporisations
+exteriorisation
+exteriorisation's
+exteriorisations
+exteriorise
+exteriorised
+exteriorises
+exteriorising
+externalise
+externalised
+externalises
+externalising
+facsimilise
+facsimilises
+factorise
+factorised
+factorises
+factorising
+fanaticise
+fanaticised
+fanaticises
+fanaticising
+faradisation
+faradisation's
+faradisations
+faradise
+faradised
+faradiser
+faradisers
+faradises
+faradising
+fascisticisation
+fascisticisation's
+fascisticisations
+fascisticise
+fascisticises
+fascistisation
+fascistisation's
+fascistisations
+fascistise
+fascistised
+fascistises
+fascistising
+fashionise
+fashionises
+fatalise
+fatalises
+favourless
+favourlesses
+fecundise
+fecundises
+federalisation
+federalisation's
+federalisations
+femalise
+femalises
+feminisation
+feminisations
+feminise
+feminised
+feminises
+feminising
+ferrelled
+ferrelling
+ferritisation
+ferritisation's
+ferritisations
+fertilisable
+fertilisables
+fertilisational
+fertilisational's
+fertilisationals
+fervourless
+fervourlesses
+fetishisation
+fetishisation's
+fetishisations
+fetishise
+fetishised
+fetishises
+fetishising
+feudalisable
+feudalisables
+feudalisation
+feudalisation's
+feudalisations
+feudalise
+feudalised
+feudalises
+feudalising
+fibreless
+fibrelesses
+fibrisation
+fibrise
+fibrised
+fibriser
+fibrisers
+fibrises
+fibrising
+fictionalisation
+fictionalise
+fictionalised
+fictionalises
+fictionalising
+fictionisation
+fictionisation's
+fictionisations
+fictionise
+fictionises
+figurise
+figurises
+filmise
+filmises
+fiscalisation
+fiscalisation's
+fiscalisations
+fiscalise
+fiscalises
+flamboyantise
+flamboyantises
+flannelled
+flannelling
+flavourful
+flavourfully
+flavourless
+flavourlesses
+flavoursome
+flavoury
+floralise
+floralises
+fluidisation
+fluidisation's
+fluidisations
+fluidise
+fluidised
+fluidiser
+fluidises
+fluidising
+fluoridisation
+fluoridisation's
+fluoridisations
+fluoridise
+fluoridises
+focalisation
+focalisation's
+focalisations
+focalise
+focalised
+focalises
+focalising
+foetalisation
+foetalisation's
+foetalisations
+foreignisation
+foreignisation's
+foreignisations
+foreignise
+foreignises
+forejudgement
+forejudgement's
+forejudgements
+formalisable
+formularisation
+formularisations
+formularise
+formularised
+formulariser
+formularises
+formularising
+formulisation
+formulisations
+formulise
+formulised
+formulises
+formulising
+forumise
+forumises
+fossilisable
+fossilisables
+fossilisation
+fossilisation's
+fossilisations
+fossilise
+fossilises
+fossilising
+fossilled
+fractionalisation
+fractionalise
+fractionalised
+fractionalises
+fractionalising
+fractionisation
+fractionisation's
+fractionisations
+fractionise
+fractionises
+fragmentise
+fragmentised
+fragmentiser
+fragmentises
+fragmentising
+fraternisation
+fraternisation's
+fraternisations
+frictionise
+frictionises
+frivolled
+frivoller
+frivolling
+fueliser
+fueliser's
+fuelisers
+functionalise
+functionalises
+functionise
+functionises
+funeralise
+funeralises
+funneller
+furore
+furore's
+furores
+futilise
+futilises
+futurise
+futurises
+gallantise
+gallantises
+galvanisation
+galvanisation's
+galvanisations
+galvanise
+galvanised
+galvaniser
+galvanisers
+galvanises
+gambolled
+gambolling
+gardenise
+gardenises
+gavelled
+gaveller
+gavelling
+gelatinisabilities
+gelatinisability
+gelatinisability's
+gelatinisable
+gelatinisables
+gelatinisation
+gelatinisation's
+gelatinisations
+gelatinise
+gelatinised
+gelatiniser
+gelatinisers
+gelatinises
+gelatinising
+generalisability
+generalisational
+genialise
+genialises
+genteelise
+genteelises
+gentilisation
+gentilisation's
+gentilisations
+gentilise
+gentilises
+gentlemanise
+gentlemanises
+geologise
+geologised
+geologises
+geologising
+geometricise
+geometricises
+geometrise
+geometrised
+geometrises
+geometrising
+germanisation
+germanisation's
+germanisations
+germanise
+germaniser
+germanisers
+germanises
+germanising
+ghettoisation
+ghettoisation's
+ghettoisations
+ghettoise
+ghettoised
+ghettoises
+ghettoising
+giantise
+giantises
+gimballing
+glacialise
+glacialises
+glamorisation
+glamorisations
+glamourless
+globalisation
+globalisations
+globalise
+globalised
+globalises
+globalising
+glottalise
+glottalises
+gluttonise
+gluttonises
+glycerinise
+glycerinises
+glycerolise
+glycerolises
+glycogenise
+glycogenises
+gnosticise
+gnosticiser
+gnosticisers
+gnosticises
+goddise
+goddises
+goitre
+goitres
+gonorrhoea
+gonorrhoeal
+gorgonise
+gorgonised
+gorgonises
+gorgonising
+gormandise
+gormandised
+gormandiser
+gormandises
+gormandising
+gospelise
+gospelises
+gourmandise
+gourmandised
+gourmandises
+gourmandising
+governmentalise
+governmentalised
+governmentalises
+governmentalising
+grammaticise
+grammaticises
+grangerise
+grangerised
+grangeriser
+grangerises
+grangerising
+granitisation
+granitisation's
+granitisations
+granitise
+granitises
+granulise
+granulises
+graphitisable
+graphitisation
+graphitisation's
+graphitisations
+graphitise
+graphitises
+grecise
+grecised
+grecising
+gruelled
+grueller
+gruellers
+gutturalisation
+gutturalisation's
+gutturalisations
+gutturalise
+gutturalised
+gutturalises
+gutturalising
+gynaecocrat
+gynaecocratic
+gynaecologic
+gynaecologics
+gynaecologies
+gynaecology
+gynaecology's
+gyrostabiliser
+habitualise
+habitualises
+hamletisation
+hamletisation's
+hamletisations
+hamletise
+hamletises
+handselled
+handselling
+hanselled
+hanselling
+harbourage
+harbourages
+harbourful
+harbourless
+harbourlesses
+harmonisable
+harmonisables
+hatchelled
+hatchelling
+hazardise
+hazardises
+heathenisation
+heathenise
+heathenised
+heathenises
+heathenising
+heavenise
+heavenises
+hebraisation
+hebraisations
+hebraise
+hebraised
+hebraises
+hebraising
+hectogramme
+hectogramme's
+hectogrammes
+hectolitre
+hectometre
+hectometre's
+hectometres
+heparinise
+hepatise
+hepatised
+hepatises
+hepatising
+heraldise
+heraldises
+hereticise
+hereticises
+heroinise
+heroinises
+heroisation
+heroisation's
+heroisations
+heroise
+heroised
+heroises
+heroising
+hiccough
+hiccoughed
+hiccoughes
+hiccoughing
+hirselled
+hirselling
+historicise
+historicised
+historicises
+historicising
+hominisation
+hominised
+homoeopathic
+homoeopathically
+homoeopathies
+homoeopathy
+homoeopathy's
+homoeostasis
+homoeostatic
+homoeotypic
+homologisation
+homologise
+homologised
+homologiser
+homologises
+homologising
+honourabilities
+honourability
+honourability's
+honourableship
+honourableship's
+honourableships
+honourless
+honourlesses
+hoodlumise
+hoodlumises
+hooliganise
+hooliganises
+horizontalisation
+horizontalisation's
+horizontalisations
+horizontalise
+horizontalises
+hormonise
+hormonises
+horrorise
+horrorises
+hostilise
+hostilises
+hotelisation
+hotelisation's
+hotelisations
+hotelise
+hotelises
+houselled
+houselling
+housellings
+hovelled
+hoveller
+hovellers
+hovelling
+hucksterise
+hucksterises
+humanisation
+humanisation's
+humanisations
+humanitarianise
+humanitarianises
+humorise
+humorises
+humoural
+humourless
+humourlesses
+humourlessness
+humoursome
+hurricanise
+hurricanises
+hyalinisation
+hyalinisation's
+hyalinisations
+hyalinise
+hyalinises
+hybridisable
+hybridisables
+hybridisation
+hybridisation's
+hybridisations
+hybridise
+hybridised
+hybridiser
+hybridisers
+hybridises
+hybridising
+hydrogenisation
+hydrogenisation's
+hydrogenisations
+hydrogenise
+hydrogenised
+hydrogenises
+hydrogenising
+hydrolyse
+hydrolyse's
+hydrolyses
+hydroxylisation
+hydroxylisation's
+hydroxylisations
+hydroxylise
+hydroxylises
+hygienisation
+hygienisation's
+hygienisations
+hygienise
+hygienises
+hyperaesthesia
+hyperaesthetic
+hyperbolise
+hyperbolised
+hyperbolises
+hyperbolising
+hypercatharses
+hypercivilisation
+hypercivilisation's
+hypercivilisations
+hypercivilised
+hypercivilised's
+hyperciviliseds
+hypercriticise
+hypercriticises
+hyperemphasise
+hyperemphasises
+hyperimmunisation
+hyperimmunisation's
+hyperimmunisations
+hyperimmunise
+hyperimmunises
+hyperinsulinisation
+hyperinsulinisation's
+hyperinsulinisations
+hyperinsulinise
+hyperinsulinises
+hyperoxygenise
+hyperoxygenises
+hyperparasitise
+hyperparasitises
+hyperrealise
+hyperrealises
+hypersensitisation
+hypersensitisation's
+hypersensitisations
+hypersensitise
+hypersensitised
+hypersensitises
+hypersensitising
+hyperspiritualising
+hyperspiritualising's
+hyperspiritualisings
+hyperthyroidisation
+hyperthyroidisation's
+hyperthyroidisations
+hyperthyroidise
+hyperthyroidises
+hypervitalisation
+hypervitalisation's
+hypervitalisations
+hypervitalise
+hypervitalises
+hyphenisation
+hyphenisation's
+hyphenisations
+hyphenise
+hyphenises
+hypnotisabilities
+hypnotisability
+hypnotisability's
+hypnotisable
+hypnotisables
+hypnotisation
+hypnotisation's
+hypnotisations
+hypnotise
+hypnotiser
+hypnotisers
+hypnotises
+hypnotising
+hypocentre
+hyposensitisation
+hyposensitise
+hypostatisation
+hypostatisation's
+hypostatisations
+hypostatise
+hypostatises
+hysterectomise
+hysterectomised
+hysterectomises
+hysterectomising
+ichneumonised
+ichneumonised's
+ichneumoniseds
+idiotise
+idiotises
+idolatrise
+idolatrised
+idolatrises
+idolatrising
+idolisation
+idolisation's
+idolisations
+illegalisation
+illegalise
+illegalised
+illegalises
+illegalising
+illegitimatise
+illegitimatises
+immaterialisation
+immaterialise
+immaterialised
+immaterialises
+immaterialising
+immobilisation
+immobilisation's
+immobilisations
+immoralise
+immoralises
+immortalisable
+immortalisables
+immortalisation
+immortalisation's
+immortalisations
+immortalise
+immortaliser
+immortalisers
+immortalises
+immortalising
+immunise
+immunised
+immunises
+immunising
+impactionise
+impactionises
+impanelled
+impanelling
+imperialisation
+imperialisation's
+imperialisations
+imperialise
+imperialises
+imperilling
+impersonalisation
+impersonalisation's
+impersonalisations
+impersonalise
+impersonalises
+impersonalising
+improvisatorise
+improvisatorises
+individualisation
+individualisation's
+individualisations
+indraught
+industrialise
+industrialises
+inferiorise
+inferiorises
+infernalise
+infernalises
+infidelise
+infidelises
+infinitise
+infinitises
+informalise
+inhumanise
+initialisable
+initially
+insolubilisation
+insolubilise
+institutionise
+institutionises
+instrumentalise
+instrumentalises
+insularise
+insularises
+insurrectionise
+insurrectionises
+integralisation
+integralisation's
+integralisations
+integralise
+integralises
+intellectualisation
+intellectualisation's
+intellectualisations
+intellectualise
+intellectualised
+intellectualiser
+intellectualisers
+intellectualises
+intellectualising
+intercivilisation
+intercivilisation's
+intercivilisations
+intercolonisation
+intercolonisation's
+intercolonisations
+intercrystallisation
+intercrystallisation's
+intercrystallisations
+intercrystallise
+intercrystallises
+interhybridise
+interhybridises
+interiorisation
+interiorise
+interiorised
+interiorises
+interiorising
+interjectionalise
+interjectionalises
+interjectionise
+interjectionises
+interjudgement
+interjudgement's
+interjudgements
+internationalise
+internationalises
+internationalising
+interorganisational
+intraorganisation
+intraorganisation's
+intraorganisations
+iodisation
+iodise
+iodised
+iodiser
+iodisers
+iodises
+iodising
+ionisable
+ionisables
+ionisation
+ionisation's
+ionisations
+ironise
+ironises
+irrationalise
+irrationalises
+irregularise
+irregularises
+isochronisation
+isochronise
+isochronised
+isochronises
+isochronising
+isoimmunisation
+isoimmunisation's
+isoimmunisations
+isoimmunise
+isoimmunises
+isomerisation
+isomerisation's
+isomerisations
+isomerise
+isomerised
+isomerises
+isomerising
+italicisation
+italicisation's
+italicisations
+jargonisation
+jargonisation's
+jargonisations
+jargonise
+jargonised
+jargonises
+jargonising
+jasperise
+jasperises
+jeopardisation
+jewelleries
+jewellery
+journalisation
+journalisation's
+journalisations
+jovialise
+jovialises
+judgemental
+judicialise
+judicialises
+juvenilise
+juvenilises
+kaolinisation
+kaolinisation's
+kaolinisations
+kaolinise
+kaolinises
+kennelled
+kennelling
+keratinisation
+keratinise
+keratinised
+keratinises
+keratinising
+kernelled
+kernelling
+ketonisation
+ketonisation's
+ketonisations
+ketonise
+ketonises
+kilolitre
+kilolitre's
+kilolitres
+kinaesthesia
+kyanise
+kyanised
+kyanises
+kyanising
+labellable
+labialisation
+labialisation's
+labialisations
+labialise
+labialised
+labialises
+labialising
+labilisation
+labilisation's
+labilisations
+labilise
+labilises
+labourabilities
+labourability
+labourability's
+labourable
+labourables
+labourhood
+labourhood's
+labourhoods
+labourism
+labourism's
+labourisms
+labourist
+labourist's
+labourists
+labourite
+labourite's
+labourites
+labourless
+labourlesses
+lacklustre
+laconise
+laconised
+laconises
+laconising
+lactonised
+laicisation
+laicisations
+laicise
+laicised
+laicises
+laicising
+lapelled
+latentise
+latentises
+lateralisation
+lateralisation's
+lateralisations
+lateralise
+lateralises
+laterisation
+laterisation's
+laterisations
+laurelling
+leatherise
+leatherises
+legitimatise
+legitimatised
+legitimatises
+legitimatising
+legitimisation
+legitimisation's
+legitimisations
+lethalise
+lethalises
+leukaemia
+lexiconise
+lexiconises
+libellant
+libellants
+libelled
+libellee
+libellees
+libelling
+licenceless
+licencelesses
+lichenisation
+lichenisation's
+lichenisations
+lichenise
+lichenises
+lignitise
+lignitises
+linearisation
+linearisation's
+linearisations
+linenise
+lineniser
+linenisers
+linenises
+lingualise
+lingualises
+lionisable
+lionisables
+lionisation
+lionisation's
+lionisations
+liquidisation
+liquidise
+liquidised
+liquidiser
+liquidisers
+liquidises
+liquidising
+literalisation
+literalisation's
+literalisations
+literalise
+literalised
+literaliser
+literalisers
+literalises
+lithographise
+lithographises
+localisable
+localisables
+logicalisation
+logicalisation's
+logicalisations
+logicalise
+logicalises
+logicise
+logicised
+logicises
+logicising
+logorrhoea
+logorrhoea's
+logorrhoeas
+louvre
+louvred
+louvres
+loyalise
+loyalises
+lumbarisation
+lumbarisation's
+lumbarisations
+lunatise
+lunatises
+lustreless
+lustreware
+luteinisation
+luteinise
+lyophilisation
+lyophilise
+lyophilised
+lyophiliser
+lyricise
+lyricised
+lyricises
+lyricising
+lysogenisation
+lysogenise
+macadamisation
+macadamise
+macadamised
+macadamises
+macadamising
+macarise
+macarised
+macarises
+macarising
+machinisation
+machinisation's
+machinisations
+machinise
+machinises
+magicalise
+magicalises
+magnetisabilities
+magnetisability
+magnetisability's
+magnetisable
+magnetisables
+magnetise
+magnetiser
+magnetisers
+magnetises
+magnetising
+mahoganise
+mahoganised
+mahoganises
+mahoganising
+majorise
+majorises
+malleablise
+malleablises
+malodour
+mandarinise
+mandarinises
+mannerise
+mannerises
+marbleise
+marbleises
+marginalisation
+marginalise
+marginalised
+marginalises
+marginalising
+marsupialisation
+marsupialisation's
+marsupialisations
+marsupialise
+marsupialises
+martialisation
+martialisation's
+martialisations
+martialise
+martialises
+martyrisation
+martyrisation's
+martyrisations
+martyrise
+martyrised
+martyriser
+martyrisers
+martyrises
+martyrising
+marveller
+masculinisation
+masculinisation's
+masculinisations
+masculinise
+masculinised
+masculinises
+masculinising
+materialisation
+materialisation's
+materialisations
+maternalise
+maternalises
+mathematicise
+mathematicises
+mathematisation
+matronise
+matronised
+matronises
+matronising
+maudlinise
+maudlinises
+mazourka
+mazourka's
+mazourkas
+mechanicalisation
+mechanicalisation's
+mechanicalisations
+mechanicalise
+mechanicalises
+mechanisable
+medalise
+medalises
+medallist
+medallists
+mediaevalise
+mediaevalises
+mediaevalism
+mediaevalism's
+mediaevalisms
+mediaevalistic
+mediaevalistics
+medialisation
+medialisation's
+medialisations
+medialise
+medialises
+mediatisation
+mediatisation's
+mediatisations
+mediatise
+mediatised
+mediatises
+mediatising
+mediumisation
+mediumisation's
+mediumisations
+mediumise
+mediumises
+melanisation
+melanise
+melanised
+melanises
+melanising
+melodisation
+melodise
+melodised
+melodiser
+melodises
+melodising
+melodramatisation
+melodramatise
+melodramatised
+melodramatises
+melodramatising
+memorialisation
+memorialisation's
+memorialisations
+memorialise
+memorialiser
+memorialisers
+memorialises
+memorialising
+memorisable
+memorisables
+mentalisation
+mentalisation's
+mentalisations
+mentalise
+mentalises
+mercerisation
+mercerisation's
+mercerisations
+mercerise
+mercerised
+merceriser
+mercerisers
+mercerises
+mercerising
+mercurialisation
+mercurialisation's
+mercurialisations
+mercurialise
+mercurialises
+mesmerisabilities
+mesmerisability
+mesmerisability's
+mesmerisable
+mesmerisables
+mesmerisation
+mesmerisation's
+mesmerisations
+mesmerise
+mesmeriser
+mesmerisers
+mesmerises
+mesmerising
+metabolisable
+metabolisables
+metabolise
+metabolises
+metabolising
+metacentre
+metallicise
+metallicises
+metallise
+metallised
+metallises
+metallising
+metamerisation
+metamerisation's
+metamerisations
+metamerised
+metamerised's
+metameriseds
+metaphonise
+metaphonises
+metaphorise
+metaphorises
+metaphysicise
+metaphysicises
+metastasise
+metastasised
+metastasises
+metastasising
+meteorisation
+meteorisation's
+meteorisations
+meteorise
+meteorises
+methodisation
+methodisation's
+methodisations
+methodise
+methodised
+methodiser
+methodisers
+methodises
+methodising
+metricise
+metricised
+metricises
+metricising
+metropolitanise
+metropolitanises
+miaow
+miaowed
+miaowing
+miaows
+microgramme
+microgramme's
+microgrammes
+microlitre
+microlitre's
+microlitres
+micrometre
+micrometre's
+micrometres
+micromillimetre
+micromillimetre's
+micromillimetres
+microminiaturisation
+microminiaturise
+microminiaturised
+microminiaturiser
+microminiaturisers
+microminiaturises
+microminiaturising
+micronisation
+micronisation's
+micronisations
+micronise
+micronises
+micropolarisation
+micropolarisation's
+micropolarisations
+microscopise
+microscopises
+militarisation
+militarisations
+militarise
+militarised
+militarises
+militarising
+millionise
+millionises
+mineralisable
+mineralisables
+mineralisation
+mineralisation's
+mineralisations
+mineralise
+mineraliser
+mineralisers
+mineralises
+mineralising
+miraculise
+miraculised
+miraculises
+miraculising
+mirrorise
+mirrorises
+misalphabetise
+misalphabetises
+misanthropise
+misanthropised
+misanthropises
+misanthropising
+misauthorisation
+misauthorisation's
+misauthorisations
+misauthorise
+misauthorises
+misbaptise
+misbaptises
+miscanonise
+miscanonises
+mischaracterisation
+mischaracterisation's
+mischaracterisations
+mischaracterise
+mischaracterises
+miscolour
+miscolour's
+miscoloured
+miscolouring
+miscolours
+misemphases
+misemphasise
+misemphasises
+misendeavour
+misendeavour's
+misendeavours
+mislabelled
+mislabelling
+mislabour
+mislabour's
+mislaboured
+mislabouring
+mislabours
+misorganisation
+misorganisation's
+misorganisations
+misorganise
+misorganises
+misprise
+misprised
+misprises
+misprising
+misrealise
+misrealises
+misrecognise
+misrecognises
+misrouteing
+missionarise
+missionarises
+missionisation
+missionise
+missionised
+missioniser
+missionisers
+missionises
+missionising
+mobilisable
+mobilisables
+modalise
+modalises
+modernisable
+modernisables
+moisturisation
+moisturise
+moisturised
+moisturiser
+moisturisers
+moisturises
+moisturising
+molarisation
+molarisations
+monarchise
+monarchiser
+monarchisers
+monarchises
+monasticise
+monasticises
+mongrelisation
+mongrelisations
+mongrelise
+mongrelised
+mongreliser
+mongrelises
+mongrelising
+monochordise
+monochordises
+monologise
+monologised
+monologises
+monologising
+monometallism
+monometallist
+monopolisable
+monopolisables
+monotonise
+monotonises
+monumentalisation
+monumentalisation's
+monumentalisations
+monumentalise
+monumentalised
+monumentalises
+monumentalising
+moralisation
+moralisation's
+moralisations
+moralise
+moralised
+moraliser
+moralisers
+moralises
+moralising
+moralisinglies
+moralisingly
+morbidise
+morbidises
+morphinisation
+morphinisation's
+morphinisations
+morphinise
+morphinises
+morselisation
+morselisation's
+morselisations
+morselise
+morselises
+morselled
+morselling
+mortalise
+mortalises
+mortarise
+mortarises
+motorisation
+motorisation's
+motorisations
+multifibred
+multifibred's
+multifibreds
+municipalisation
+municipalisation's
+municipalisations
+municipalise
+municipalised
+municipaliser
+municipalisers
+municipalises
+municipalising
+muscularise
+muscularises
+museumise
+museumises
+musicalisation
+musicalisation's
+musicalisations
+musicalise
+musicalises
+mutualisation
+mutualisation's
+mutualisations
+mutualise
+mutualised
+mutualises
+mutualising
+myelinisation
+myelinisation's
+myelinisations
+mysticise
+mysticises
+mythicisation
+mythicise
+mythicised
+mythiciser
+mythicisers
+mythicises
+mythicising
+mythise
+mythises
+mythologisation
+mythologise
+mythologised
+mythologiser
+mythologises
+mythologising
+nakedise
+nakedises
+nanogramme
+nanogrammes
+nanometre
+nanometres
+narcotisation
+narcotise
+narcotised
+narcotising
+nasalise
+nasalises
+nasalising
+naturalise
+naturaliser
+naturalisers
+naturalises
+naturalising
+naturise
+naturises
+nebularisation
+nebularisation's
+nebularisations
+nebularise
+nebularises
+nebulisation
+nebulisations
+nebulise
+nebulised
+nebuliser
+nebulises
+nebulising
+necrotise
+necrotised
+necrotises
+necrotising
+nectarise
+nectarises
+neighbourless
+neighbourlesses
+neighbourlike
+neighbourlike's
+neighbourlikes
+neighbourship
+neighbourship's
+neighbourships
+neologisation
+neologise
+neologised
+neologises
+neologising
+neuroticise
+neuroticises
+newspaperised
+newspaperised's
+newspaperiseds
+nickelisation
+nickelisation's
+nickelisations
+nickelise
+nickelises
+nicotinise
+nicotinises
+nightingalise
+nightingalises
+nitre
+nitridisation
+nitridisation's
+nitridisations
+nitridise
+nitridises
+nitrogenisation
+nitrogenisation's
+nitrogenisations
+nitrogenise
+nitrogenised
+nitrogenises
+nitrogenising
+nodulise
+nodulises
+nomadisation
+nomadisation's
+nomadisations
+nomadise
+nomadised
+nomadises
+nomadising
+nominalise
+nominalises
+nominalising
+nonacknowledgement
+nonacknowledgement's
+nonacknowledgements
+nonanaesthetised
+nonapostatising
+nonapostatising's
+nonapostatisings
+noncanonisation
+noncanonisation's
+noncanonisations
+noncartelised
+noncartelised's
+noncarteliseds
+noncatechisable
+noncatechisables
+noncivilised
+noncivilised's
+nonciviliseds
+noncolouring
+noncolouring's
+noncolourings
+noncrystallisable
+noncrystallisables
+noncrystallised
+noncrystallised's
+noncrystalliseds
+noncrystallising
+noncrystallising's
+noncrystallisings
+nondemobilisation
+nondemobilisation's
+nondemobilisations
+nondialysing
+nondialysing's
+nondialysings
+nondimensionalise
+nondimensionalised
+nonfavourite
+nonfavourite's
+nonfavourites
+nonfulfilment
+nonfulfilment's
+nonfulfilments
+nongalvanised
+nongalvanised's
+nongalvaniseds
+nongelatinising
+nongelatinising's
+nongelatinisings
+nonhydrolysable
+nonhydrolysables
+nonimmunised
+nonimmunised's
+nonimmuniseds
+nonionised
+nonionised's
+nonioniseds
+nonionising
+nonionising's
+nonionisings
+nonlocalised
+nonlocalised's
+nonlocaliseds
+nonmagnetisable
+nonmagnetisables
+nonnitrogenised
+nonnitrogenised's
+nonnitrogeniseds
+nonorganisation
+nonorganisation's
+nonorganisations
+nonoxidisable
+nonoxidisables
+nonoxidising
+nonoxidising's
+nonoxidisings
+nonparlour
+nonparlour's
+nonparlours
+nonpenalised
+nonpenalised's
+nonpenaliseds
+nonphosphorised
+nonphosphorised's
+nonphosphoriseds
+nonpolarisable
+nonpolarisables
+nonpolarised
+nonpolarising
+nonpolarising's
+nonpolarisings
+nonrationalised
+nonrationalised's
+nonrationaliseds
+nonrealisation
+nonrealisation's
+nonrealisations
+nonrecognised
+nonrecognised's
+nonrecogniseds
+nonschematised
+nonschematised's
+nonschematiseds
+nonsensitised
+nonsensitised's
+nonsensitiseds
+nonspecialised
+nonspecialised's
+nonspecialiseds
+nonstandardised
+nonstandardised's
+nonstandardiseds
+nonstylised
+nonstylised's
+nonstyliseds
+nonsympathiser
+nonsympathiser's
+nonsympathisers
+nonsynthesised
+nonsynthesised's
+nonsynthesiseds
+nontemporising
+nontemporising's
+nontemporisings
+nonutilised
+nonutilised's
+nonutiliseds
+nonvisualised
+nonvisualised's
+nonvisualiseds
+nonvolatilised
+nonvolatilised's
+nonvolatiliseds
+nonvulcanisable
+nonvulcanisables
+normalisable
+northernise
+northernises
+nosise
+notarisation
+notarisations
+nothingise
+nothingises
+nounise
+nounises
+novelisation
+novelisation's
+novelisations
+novelise
+noveliser
+novelisers
+novelises
+novelising
+nuptialise
+nuptialises
+obelise
+obelised
+obelises
+obelising
+objectisation
+objectisation's
+objectisations
+objectise
+objectises
+objectivise
+objectivises
+oblivionise
+oblivionises
+ochreous
+odorise
+odorised
+odoriser
+odorises
+odorising
+odourful
+odourless
+odourlesses
+oesophagus
+offenceless
+offencelesses
+offencelessly
+officialisation
+officialisation's
+officialisations
+officialise
+officialises
+onionised
+onionised's
+onioniseds
+opalise
+opalises
+opalled
+operatise
+operatises
+optionalise
+optionalises
+oralisation
+oralisation's
+oralisations
+oralise
+oralises
+orangise
+orangises
+oratorise
+oratorises
+organisabilities
+organisability
+organisability's
+organisationist
+organisationist's
+organisationists
+orientalisation
+orientalisation's
+orientalisations
+orientalise
+orientalised
+orientalises
+orientalising
+orientate
+orientated
+orientates
+orientating
+orientisation
+orientisation's
+orientisations
+orientise
+orientises
+ornamentalise
+ornamentalises
+orphanise
+orphanises
+orthocentre
+orthogonalise
+orthogonalises
+orthogonalising
+orthopaedically
+orthopaedist
+ostracisable
+ostracisables
+ostracisation
+ostracisation's
+ostracisations
+ostracise
+ostraciser
+ostracisers
+ostracises
+ostracising
+outcavilled
+outcavilling
+outclamour
+outclamour's
+outclamours
+outhumour
+outhumour's
+outhumoured
+outhumouring
+outhumours
+outhyperbolise
+outhyperbolises
+outlabour
+outlabour's
+outlabours
+outrivalled
+outrivalling
+outsavour
+outsavour's
+outsavouring
+outsavours
+outsplendour
+outsplendour's
+outsplendours
+outtyrannise
+outtyrannises
+ovalisation
+ovalisation's
+ovalisations
+ovalise
+ovalises
+ovariectomised
+overagonise
+overagonises
+overbrutalise
+overbrutalises
+overcapitalisation
+overcapitalisation's
+overcapitalisations
+overcapitalise
+overcapitalised
+overcapitalises
+overcapitalising
+overcentralisation
+overcentralisation's
+overcentralisations
+overcentralise
+overcentralises
+overcivilisation
+overcivilisation's
+overcivilisations
+overcivilise
+overcivilises
+overclamour
+overclamour's
+overclamours
+overcolour
+overcolour's
+overcolours
+overcriticise
+overcriticises
+overdoctrinise
+overdoctrinises
+overemotionalise
+overemotionalises
+overfavour
+overfavour's
+overfavourable
+overfavourables
+overfavourablies
+overfavourably
+overfavours
+overfertilisation
+overgeneralise
+overgeneralises
+overhonour
+overhonour's
+overhonours
+overhumanise
+overhumanises
+overindustrialisation
+overindustrialisation's
+overindustrialisations
+overindustrialise
+overindustrialises
+overjudgement
+overjudgement's
+overjudgements
+overlabour
+overlabour's
+overlabours
+overnationalisation
+overnationalisation's
+overnationalisations
+overrapturise
+overrapturises
+overrationalise
+overrationalises
+oversentimentalise
+oversentimentalises
+overspecialisation
+overspecialisation's
+overspecialisations
+overspecialise
+overspecialised
+overspecialises
+oversystematise
+oversystematises
+overunionised
+overunionised's
+overunioniseds
+overurbanisation
+overurbanisation's
+overurbanisations
+overwomanise
+overwomanises
+oxidisabilities
+oxidisability
+oxidisability's
+oxidisable
+oxidisables
+oxidisation
+oxidisation's
+oxidisations
+oxidisement
+oxidisement's
+oxidisements
+oxygenisable
+oxygenisables
+oxygenise
+oxygenisement
+oxygenisement's
+oxygenisements
+oxygeniser
+oxygenisers
+oxygenises
+ozonisation
+ozonisation's
+ozonisations
+ozonise
+ozonised
+ozoniser
+ozonisers
+ozonises
+ozonising
+packetisation
+packetise
+packetised
+packetiser
+packetiser's
+packetisers
+packetises
+packetising
+paeanise
+paeanises
+paganisation
+paganisation's
+paganisations
+paganise
+paganised
+paganiser
+paganisers
+paganises
+paganising
+palatisation
+palatisation's
+palatisations
+palatise
+palatises
+palladiumise
+palladiumises
+palletisation
+palletisations
+palletise
+palletiser
+palletises
+palletising
+pamperise
+pamperises
+pamphletise
+pamphletises
+panderise
+panderises
+pantheonisation
+pantheonisation's
+pantheonisations
+pantheonise
+pantheonises
+papalisation
+papalisation's
+papalisations
+papalise
+papaliser
+papalisers
+papalises
+parabolisation
+parabolise
+parabolised
+parabolises
+parabolising
+paraffinise
+paraffinises
+paragraphise
+paragraphises
+paralysation
+parasitisation
+parasitise
+parasitised
+parasitises
+parasitising
+parathyroidectomise
+parathyroidectomised
+parathyroidectomises
+parathyroidectomising
+parceller
+parchmentise
+parchmentises
+parenthesisation
+parfocalisation
+parfocalise
+parochialisation
+parochialisation's
+parochialisations
+parochialise
+parochialises
+parrotise
+parrotises
+parsonise
+parsonises
+partialise
+partialises
+particularisation
+particularisation's
+particularisations
+particularise
+particularised
+particularises
+particularising
+partisanise
+partisanises
+pasteurise
+pasteurised
+pasteuriser
+pasteurises
+pasteurising
+pastoralise
+pastoralises
+pastorise
+pastorises
+paternalise
+paternalises
+patronisable
+patronisables
+patronisation
+patronisation's
+patronisations
+patternise
+patternises
+pauperisation
+pauperisation's
+pauperisations
+pauperise
+pauperised
+pauperiser
+pauperisers
+pauperises
+pauperising
+paviour
+pearlisation
+pearlise
+pearlised
+pearlises
+pearlising
+peasantise
+peasantises
+pectisation
+pectise
+pectised
+pectises
+pectising
+peculiarise
+peculiarises
+pedaller
+pedallers
+pedantise
+pedantises
+pedestalled
+pedestalling
+pedestrianisation
+pedestrianise
+pedestrianised
+pedestrianises
+pedestrianising
+pelletisation
+pelletisations
+pelletise
+pelletised
+pelletiser
+pelletises
+pelletising
+pemmicanisation
+pemmicanisation's
+pemmicanisations
+pemmicanise
+pemmicanises
+penalisable
+penalisables
+penalisation
+penalisation's
+penalisations
+penciller
+pencillers
+peptisable
+peptisables
+peptisation
+peptisation's
+peptisations
+peptise
+peptised
+peptiser
+peptisers
+peptises
+peptonisation
+peptonise
+peptonised
+peptonises
+peptonising
+percussionise
+percussionises
+perennialise
+perennialises
+perfectivise
+perfectivises
+perilled
+perilling
+periodicalise
+periodicalises
+periodisation
+periodisations
+periodise
+periodised
+periodises
+periodising
+peroxidise
+peroxidisement
+peroxidisement's
+peroxidisements
+peroxidises
+personisation
+personisation's
+personisations
+personise
+personises
+petrolisation
+petrolisation's
+petrolisations
+petrolise
+petrolises
+phagocytise
+phagocytises
+phantomise
+phantomiser
+phantomisers
+phantomises
+phenolisation
+phenolisation's
+phenolisations
+phenolise
+phenolises
+phenomenalisation
+phenomenalisation's
+phenomenalisations
+phenomenalise
+phenomenalises
+philanthropise
+philanthropises
+philosophisation
+philosophisation's
+philosophisations
+phlebotomisation
+phlebotomise
+phlebotomised
+phlebotomises
+phlebotomising
+phoneticisation
+phoneticisation's
+phoneticisations
+phoneticise
+phoneticises
+phosphatisation
+phosphatisation's
+phosphatisations
+phosphatise
+phosphatised
+phosphatises
+phosphatising
+phosphorise
+phosphorises
+photocatalyser
+photocatalyser's
+photocatalysers
+photographise
+photographises
+photoionisation
+photoionisation's
+photoionisations
+photoisomerisation
+photoisomerisation's
+photoisomerisations
+photolabelled
+photolabeller
+photolabelling
+photolysable
+photolyse
+photolysed
+photolyses
+photolysing
+photopolymerisation
+photopolymerisation's
+photopolymerisations
+photosensitisation
+photosensitisation's
+photosensitisations
+photosensitise
+photosensitised
+photosensitiser
+photosensitisers
+photosensitises
+photosensitising
+photosynthesise
+photosynthesised
+photosynthesises
+photosynthesising
+piastre
+picogramme
+picogramme's
+picogrammes
+picometre
+picometre's
+picometres
+pictorialisation
+pictorialisation's
+pictorialisations
+pictorialise
+pictorialised
+pictorialises
+pictorialising
+picturisation
+picturisation's
+picturisations
+picturise
+picturised
+picturises
+picturising
+pidginisation
+pidginise
+pidginised
+pidginises
+pidginising
+pigmentise
+pigmentises
+pilgrimise
+pilgrimises
+pillarise
+pillarises
+piratise
+piratises
+pistolled
+pistolling
+plagiarisation
+plagiarisation's
+plagiarisations
+plagiarise
+plagiarised
+plagiariser
+plagiarisers
+plagiarises
+plagiarising
+plasmolyse
+plasticisation
+plasticisation's
+plasticisations
+plasticise
+plasticised
+plasticiser
+plasticisers
+plasticises
+plasticising
+platinisation
+platinisation's
+platinisations
+platitudinisation
+platitudinise
+platitudinised
+platitudinises
+platitudinising
+platonisation
+platonise
+platonised
+platonises
+platonising
+plebeianise
+plebeianises
+ploughable
+ploughboy
+ploughhead
+poeticisation
+poeticise
+poeticised
+poeticises
+poeticising
+poetisation
+poetisation's
+poetisations
+poetise
+poetised
+poetiser
+poetisers
+poetises
+poetising
+pogromise
+pogromises
+polarisabilities
+polarisability
+polarisability's
+polarisable
+polarisables
+polemicise
+polemicised
+polemicises
+polemicising
+polemise
+polemised
+polemises
+polemising
+policise
+policiser
+policisers
+policises
+politicalise
+politicalises
+politicisation
+politicise
+politiciser
+politicisers
+politicises
+politicising
+politise
+politises
+polleniser
+pollinise
+pollinised
+polliniser
+pollinises
+pollinising
+polychromatise
+polychromatises
+polychromise
+polychromises
+polygamise
+polygamises
+polymerisation
+polymerisation's
+polymerise
+polymerises
+polysulphurisation
+polysulphurisation's
+polysulphurisations
+pommelled
+pommelling
+porcelainisation
+porcelainisation's
+porcelainisations
+porcelainise
+porcelainises
+portionise
+portionises
+positivise
+positivises
+posterise
+posterises
+postsynchronisation
+posturise
+posturises
+potentialisation
+potentialisation's
+potentialisations
+potentialise
+potentialises
+potentise
+potentises
+powderisation
+powderisation's
+powderisations
+powderise
+powderiser
+powderisers
+powderises
+preacherise
+preacherises
+preacknowledgement
+preacknowledgement's
+preacknowledgements
+preanaesthetic
+preanaesthetics
+prebaptise
+prebaptises
+precancellation
+precisionise
+precisionises
+precivilisation
+precivilisation's
+precivilisations
+precolour
+precolour's
+precolourable
+precolourables
+precolouring
+precolourings
+precolours
+preconisation
+preconisation's
+preconisations
+preconise
+preconiser
+preconisers
+preconises
+precriticise
+precriticises
+prefavour
+prefavour's
+prefavourable
+prefavourables
+prefavourablies
+prefavourably
+prefavourite
+prefavourite's
+prefavourites
+prefavours
+prefertilisation
+prefertilisation's
+prefertilisations
+prefertilise
+prefertilises
+preflavour
+preflavour's
+preflavouring
+preflavourings
+preflavours
+pregalvanise
+pregalvanises
+prehumour
+prehumour's
+prehumours
+prejudgement
+prelabour
+prelabour's
+prelabours
+prelatise
+prelatises
+prelocalisation
+prelocalisation's
+prelocalisations
+preludise
+preludises
+premediaeval
+premediaeval's
+premediaevalism
+premediaevalism's
+premediaevalisms
+premediaevals
+premonopolise
+premonopolises
+preoffence
+preoffence's
+preoffences
+preorganisation
+preorganisation's
+preorganisations
+preorganise
+preorganises
+preoxidise
+preoxidised
+preoxidises
+preoxidising
+preprogramme
+prerealisation
+prerealisation's
+prerealisations
+prerealise
+prerealises
+prerecognise
+prerecognises
+prespecialise
+prespecialises
+presplendour
+presplendour's
+presplendours
+pressurisation
+prestandardisation
+prestandardisation's
+prestandardisations
+prestandardise
+prestandardises
+presympathise
+presympathises
+preutilisable
+preutilisables
+preutilisation
+preutilisation's
+preutilisations
+preutilise
+preutilises
+priorisation
+priorisations
+priorise
+priorised
+priorises
+priorising
+prioritisation
+privatisation
+privatise
+privatised
+privatising
+problemise
+problemises
+processionise
+processionises
+proctorisation
+proctorisation's
+proctorisations
+proctorise
+proctorises
+prodigalise
+prodigalises
+profanise
+profanises
+professionalisation
+professionalisation's
+professionalisations
+professionalise
+professionalised
+professionalises
+professionalising
+professionise
+professionises
+programmist
+programmist's
+programmistic
+programmistics
+programmists
+proletarianise
+proletarianises
+proletarianising
+prologuise
+prologuiser
+prologuisers
+prologuises
+prolusionise
+prolusionises
+propagandise
+propagandised
+propagandises
+propagandising
+prophetise
+prophetises
+propositionise
+propositionises
+propraetor
+proselytisation
+proselytisation's
+proselytisations
+protectionise
+protectionises
+protocolisation
+protocolisation's
+protocolisations
+protocolise
+protocolises
+protocolled
+protocolling
+proverbialise
+proverbialises
+proverbise
+proverbises
+provincialisation
+provincialisation's
+provincialisations
+provincialise
+provincialises
+pseudoanaemia
+pseudoanaemia's
+pseudoanaemias
+pseudoanaemic
+pseudoanaemics
+pseudographise
+pseudographises
+pseudomediaeval
+pseudomediaeval's
+pseudomediaevals
+pseudooedema
+pseudooedema's
+pseudooedemas
+psychoanalyse
+psychoanalyser
+psychoanalyser's
+psychoanalysers
+psychoanalyses
+psychologisation
+psychologise
+psychologised
+psychologises
+psychologising
+puebloisation
+puebloisation's
+puebloisations
+puebloise
+puebloises
+pulpitise
+pulpitises
+pulverisable
+pulverisables
+pulverisation
+pulverisation's
+pulverisations
+pummeller
+pummelling
+pupilise
+pupilises
+puppetise
+puppetises
+pyorrhoeal
+pyramidise
+pyramidises
+pyridinise
+pyridinises
+pyritisation
+pyritisation's
+pyritisations
+pyritise
+pyritises
+pyrolysable
+pyrolysate
+pythonise
+pythonises
+quarrellous
+quarterisation
+quarterisation's
+quarterisations
+quininise
+quininises
+racemisation
+racemise
+racemised
+racemises
+racemising
+racialisation
+racialisation's
+racialisations
+racialise
+racialises
+radialisation
+radialisation's
+radialisations
+radialise
+radialises
+radicalisation
+radicalisation's
+radicalisations
+radicalise
+radicalised
+radicalises
+radicalising
+radiosterilise
+radiosterilises
+radiosterilising
+radiumisation
+radiumisation's
+radiumisations
+radiumise
+radiumises
+rapturise
+rapturises
+rascalise
+rascalises
+rationalisable
+rationalisables
+ravelled
+raveller
+ravellers
+ravelling
+ravellings
+reacclimatise
+reactualise
+realisticise
+realisticises
+reanimalise
+reanimalises
+reapologise
+reauthorise
+rebaptisation
+rebaptisation's
+rebaptisations
+rebourbonise
+rebourbonises
+rebrutalise
+recanalisation
+recapitalise
+recarbonise
+recausticise
+recausticises
+recentralise
+reciprocalise
+reciprocalises
+recivilise
+recolonise
+recolour
+recolour's
+recolouring
+reconnoitre
+reconnoitre's
+reconnoitred
+reconnoitres
+reconnoitring
+recriticise
+redialler
+redialling
+refavour
+refavour's
+refertilise
+reflectorise
+reflectorised
+reflectorises
+reflectorising
+reforestisation
+reforestisation's
+reforestise
+reforestises
+regalise
+regalises
+regalvanisation
+regalvanisation's
+regalvanisations
+regalvanise
+regalvanises
+regionalisation
+regionalisation's
+regionalisations
+regionalise
+regionalised
+regionalises
+regionalising
+regularisation
+regularisation's
+regularisations
+regularise
+regularised
+regulariser
+regularisers
+regularises
+reharmonise
+rehonour
+rehonour's
+rehumanisation
+rehumanise
+rehybridise
+rehybridises
+reinitialisation
+reitemise
+relativisation
+relativisation's
+relativisations
+relativise
+relativised
+relativises
+relativising
+religionise
+religionises
+remagnetise
+remagnetises
+rematerialise
+rememorise
+remilitarisation
+remilitarise
+remineralisation
+remineralisation's
+remineralisations
+remineralise
+remineralises
+remobilise
+renationalise
+renationalising
+rencontre
+renormalisation
+renormalise
+renormalising
+reobjectivisation
+reobjectivisation's
+reobjectivisations
+reobjectivise
+reobjectivises
+reorganisational
+reorganisationist
+reorganisationist's
+reorganisationists
+reoxidise
+reoxygenise
+reoxygenises
+repaganisation
+repaganisation's
+repaganisations
+repaganise
+repaganiser
+repaganisers
+repaganises
+repatronise
+repersonalise
+rephosphorisation
+rephosphorisation's
+rephosphorisations
+rephosphorise
+rephosphorises
+repolymerisation
+repolymerisation's
+repolymerisations
+repolymerise
+repolymerises
+reprivatisation
+reprivatisation's
+reprivatisations
+reprivatise
+reprivatises
+republicanisation
+republicanisation's
+republicanisations
+republicanise
+republicanised
+republicaniser
+republicanisers
+republicanises
+republicanising
+repulverise
+reroyalise
+reroyalises
+resensitisation
+resensitisation's
+resensitisations
+resensitise
+resensitises
+resepulchre
+resinise
+resinises
+resolemnise
+resolemnises
+restandardise
+resterilise
+restigmatise
+restigmatises
+resurrectionise
+resurrectionises
+resymbolise
+resynchronisation
+resynchronise
+resynchronising
+resynthesise
+retinise
+retinises
+retranquilise
+reutilise
+revalorisation
+revalorisation's
+revalorisations
+revalorise
+revalorised
+revalorises
+revalorising
+revaporise
+revaporises
+revelationise
+revelationises
+revisualise
+revitalisation's
+revitalisations
+revivalise
+revivalises
+revolatilise
+revolatilises
+revolutionisement
+revolutionisement's
+revolutionisements
+rhapsodise
+rhapsodised
+rhapsodises
+rhapsodising
+rhythmicise
+rhythmicises
+rhythmisable
+rhythmisables
+rhythmisation
+rhythmisation's
+rhythmisations
+rhythmise
+rhythmises
+ridiculise
+ridiculises
+ritualisation
+ritualise
+ritualises
+ritualising
+rivalise
+rivalises
+rivalless
+rivallesses
+robotisation
+robotisation's
+robotisations
+robotise
+robotises
+roentgenise
+romanticisation
+routinisation
+routinisation's
+routinisations
+routinise
+routinises
+rowelled
+rowelling
+royalisation
+royalisation's
+royalisations
+royalise
+royalises
+rubberisation
+rubberise
+rubberises
+rubberising
+rubricise
+rubricises
+ruffianise
+ruffianises
+ruggedisation
+ruggedise
+ruggedised
+ruggedises
+ruggedising
+rumourmonger
+rumourmonger's
+rumourmongers
+ruralisation
+ruralisation's
+ruralisations
+ruralise
+ruralised
+ruralises
+ruralising
+russianisation
+russianise
+rusticise
+rusticises
+sabrelike
+sabrelike's
+sabrelikes
+sabretooth
+sacralisation
+sacralisation's
+sacralisations
+sacramentise
+sacramentises
+sailorising
+sailorising's
+sailorisings
+salinisation
+salinise
+salinises
+saltpetre
+saltpetre's
+saltpetres
+sandalled
+sandalling
+sanitisation
+sapientise
+sapientises
+satanise
+satanises
+satinise
+satinises
+satirisable
+satirisables
+satirise
+satirised
+satiriser
+satirisers
+satirising
+savagise
+savagises
+saviourhood
+saviourhood's
+saviourhoods
+saviourship
+saviourship's
+saviourships
+savourilies
+savourily
+savourless
+savourlesses
+savourous
+scandalisation
+scandalisation's
+scandalisations
+scandalise
+scandaliser
+scandalisers
+scandalises
+scandalled
+scandalling
+scenarioisation
+scenarioisation's
+scenarioisations
+scenarioise
+scenarioises
+scenarisation
+scenarisation's
+scenarisations
+scenarise
+scenarises
+sceptreless
+sceptrelesses
+schedulise
+schedulises
+schematisation
+schematisation's
+schematisations
+schematise
+schematised
+schematiser
+schematisers
+schematises
+schematising
+schismatise
+schismatised
+schismatises
+schismatising
+sclerotisation
+sclerotised
+scripturalise
+scripturalises
+scrutinisation
+scrutinisation's
+scrutinisations
+seborrhoea
+seborrhoeic
+sectarianisation
+sectarianise
+sectarianised
+sectarianises
+sectarianising
+sectionalisation
+sectionalisation's
+sectionalisations
+sectionalise
+sectionalises
+sectionalising
+sectionise
+sectionises
+secularise
+seculariser
+secularisers
+secularises
+secularising
+semicarbonise
+semicarbonises
+semicivilisation
+semicivilisation's
+semicivilisations
+semicivilised
+semicivilised's
+semiciviliseds
+semifossilised
+semifossilised's
+semifossiliseds
+semihonour
+semihonour's
+semihonours
+semihumanised
+semihumanised's
+semihumaniseds
+semimercerised
+semimercerised's
+semimerceriseds
+semimineralised
+semimineralised's
+semimineraliseds
+seminarise
+seminarises
+seminationalisation
+seminationalisation's
+seminationalisations
+semiorganised
+semiorganised's
+semiorganiseds
+semioxidised
+semioxidised's
+semioxidiseds
+semioxygenised
+semioxygenised's
+semioxygeniseds
+semiprofessionalised
+semiprofessionalised's
+semiprofessionaliseds
+semivulcanised
+semivulcanised's
+semivulcaniseds
+senilise
+senilises
+sensationalise
+sensationalised
+sensationalises
+sensationalising
+sensise
+sensises
+sensitisation
+sensitisation's
+sensitisations
+sensitise
+sensitiser
+sensitisers
+sensitises
+sensitising
+sensualisation
+sensualisation's
+sensualisations
+sensualise
+sensualised
+sensualises
+sensualising
+sentimentalisation
+sentimentalisation's
+sentimentalisations
+sentinelled
+sentinelling
+sepalled
+septicisation
+septicisation's
+septicisations
+sepulchralise
+sepulchralises
+serenise
+serenises
+serialisability
+serialisable
+sermonise
+sermonised
+sermoniser
+sermonisers
+sermonises
+sermonising
+serpentinisation
+serpentinisation's
+serpentinisations
+serpentinise
+serpentinises
+serpentise
+serpentises
+servilise
+servilises
+severalise
+severalises
+severisation
+severisation's
+severisations
+severise
+severises
+sexualisation
+sexualisation's
+sexualisations
+sexualise
+sexualises
+shepherdise
+shepherdises
+siderealise
+siderealises
+signalisation
+signalise
+signalised
+signalising
+silicatisation
+silicatisation's
+silicatisations
+silicidise
+silicidises
+siliconise
+siliconises
+silverise
+silveriser
+silverisers
+silverises
+similarise
+similarises
+similise
+similises
+simonise
+singularisation
+singularisation's
+singularisations
+singularise
+singularises
+sinicise
+sinicised
+sinicises
+sinicising
+sirenise
+sirenises
+sisterise
+sisterises
+skeletonisation
+skeletonisation's
+skeletonisations
+skeletonise
+skeletonised
+skeletoniser
+skeletonisers
+skeletonises
+skeletonising
+skepticise
+skepticises
+slenderise
+slenderised
+slenderises
+slenderising
+sloganise
+sloganises
+snobsnivelling
+soberise
+soberised
+soberises
+soberising
+sockdologising
+solarisation
+solarisation's
+solarisations
+solarise
+solarised
+solarises
+solarising
+soldierise
+soldierises
+solecise
+solecised
+solecises
+solecising
+solemnisation
+solemnisation's
+solemnisations
+solemnise
+solemnised
+solemniser
+solemnisers
+solemnises
+solemnising
+soliloquisation
+soliloquise
+soliloquised
+soliloquiser
+soliloquisers
+soliloquises
+soliloquising
+soliloquising's
+soliloquisingly
+soliloquisings
+solmisation
+solubilisation
+solubilise
+solubilised
+solubilises
+solubilising
+solutise
+solutiser
+solutisers
+solutises
+sonantised
+sonantised's
+sonantiseds
+sonnetise
+sonnetises
+southernise
+southernises
+sovietisation
+sovietisation's
+sovietisations
+sovietise
+sovietises
+spatialisation
+spatialisation's
+spatialisations
+spatialise
+spatialises
+specificise
+specificises
+specimenise
+specimenises
+spectrelike
+spectrelike's
+spectrelikes
+spheroidise
+spheroidises
+spiralisation
+spiralisation's
+spiralisations
+spiralise
+spiralises
+spiritise
+spiritises
+spiritualisation
+spiritualisation's
+spiritualisations
+spiritualise
+spiritualised
+spiritualiser
+spiritualisers
+spiritualises
+spiritualising
+spirochaetal
+spirochaete
+spirochaete's
+spirochaetes
+spirochaetosis
+splenectomised
+stabilisable
+stallionise
+stallionises
+stalwartise
+stalwartises
+standardisable
+standardisables
+stapedectomised
+statisticise
+statisticises
+stencilise
+sterilisabilities
+sterilisability
+sterilisability's
+sterilisable
+sterilisables
+stigmatise
+stigmatiser
+stigmatisers
+stigmatises
+stigmatising
+strobilisation
+structuralisation
+structuralisation's
+structuralisations
+structuralise
+structuralises
+strychninisation
+strychninisation's
+strychninisations
+strychninise
+strychninises
+stylise
+styliser
+stylisers
+stylises
+stylising
+subarmour
+subarmour's
+subarmours
+subcentre
+suberisation
+suberisation's
+suberisations
+suberise
+suberised
+suberises
+suberising
+subflavour
+subflavour's
+subflavours
+subjectivisation
+subjectivise
+subjectivises
+sublimise
+sublimises
+subminiaturisation
+subminiaturise
+subminiaturised
+subminiaturises
+subminiaturising
+subpulveriser
+subpulveriser's
+subpulverisers
+subsidisable
+subsidisables
+subspecialise
+subspecialises
+subspecialities
+subspeciality
+subspeciality's
+substandardise
+substandardises
+substantialise
+substantialises
+substantivise
+substantivises
+subterraneanise
+subterraneanises
+subtilisation
+subtilisation's
+subtilisations
+subtilise
+subtiliser
+subtilisers
+subtilises
+subtotalled
+subtotalling
+suburbanise
+suburbanises
+subvitalised
+subvitalised's
+subvitaliseds
+succourable
+succourables
+succourless
+succourlesses
+suggestionise
+suggestionises
+sulfatise
+sulfatises
+sulphurisation
+sulphurisation's
+sulphurisations
+sulphurise
+sulphurises
+sultanise
+sultanises
+summerise
+summerises
+superacknowledgement
+superacknowledgement's
+superacknowledgements
+supercanonisation
+supercanonisation's
+supercanonisations
+supercarbonisation
+supercarbonisation's
+supercarbonisations
+supercarbonise
+supercarbonises
+supercivilisation
+supercivilisation's
+supercivilisations
+supercivilised
+supercivilised's
+superciviliseds
+superemphasise
+superemphasises
+superficialise
+superficialises
+superhumanise
+superhumanises
+supernaturalise
+supernaturalises
+superorganisation
+superorganisation's
+superorganisations
+superorganise
+superorganises
+supersensitisation
+supersensitisation's
+supersensitisations
+superspecialise
+superspecialises
+supersubtilised
+supersubtilised's
+supersubtiliseds
+supersulphurise
+supersulphurises
+surgerise
+surgerises
+sycophantise
+sycophantises
+syllogise
+sylvanise
+sylvanises
+symmetrisation
+symmetrisation's
+symmetrisations
+symmetrise
+symmetrised
+symmetrises
+symmetrising
+symptomise
+symptomises
+synaesthesia
+synaesthetic
+synchronisable
+synchronisables
+syncretise
+syncretised
+syncretises
+syncretising
+syndicalise
+syndicalises
+synonymise
+synonymises
+synopsise
+synthesisation
+synthesisation's
+synthesisations
+syphonless
+syphonlesses
+syphonlike
+syphonlike's
+syphonlikes
+syphonophore
+syphonostele
+syphonostelic
+syphonostely
+systemisable
+systemisables
+systemise
+systemiser
+systemisers
+systemises
+tabouret
+tabourets
+tabularisation
+tabularisation's
+tabularisations
+tabularise
+tabularises
+taffetised
+tailorisation
+tailorisation's
+tailorisations
+tailorise
+tailorises
+tamboura
+tandemise
+tandemises
+tantalisation
+tantalisation's
+tantalisations
+tariffise
+tariffises
+tartarisation
+tartarisation's
+tartarisations
+tartarise
+tartarised
+tartarises
+tasselled
+tasselling
+tassells
+tavernise
+tavernises
+teaseller
+teasellers
+teazelled
+teazelling
+technicalisation
+technicalise
+technicalises
+technologise
+teetotalled
+teetotalling
+telaesthesia
+telaesthetic
+tellurise
+tellurised
+tellurises
+tellurising
+templise
+templises
+temporalise
+temporalised
+temporalises
+temporalising
+temporisation
+temporisation's
+temporisations
+tenderisation
+tenderise
+tenderised
+tenderiser
+tenderises
+tenderising
+tendrilled
+tenementisation
+tenementisation's
+tenementisations
+tenementise
+tenementises
+terminalisation
+terminalisation's
+terminalisations
+terminalised
+terminalised's
+terminaliseds
+ternise
+ternises
+terrestrialise
+terrestrialises
+territorialisation
+territorialisation's
+territorialisations
+territorialise
+territorialises
+terrorisation
+terrorisation's
+terrorisations
+testimonialisation
+testimonialisation's
+testimonialisations
+testimonialise
+testimonialiser
+testimonialisers
+testimonialises
+tetanisation
+tetanise
+tetanised
+tetanises
+tetanising
+teutonise
+texturised
+theatreless
+theatrelesses
+theatrelike
+theatrelike's
+theatrelikes
+theatricalisation
+theatricalisation's
+theatricalisations
+theatricalise
+theatricalised
+theatricalises
+theatricalising
+theatricise
+theatricises
+theologisation
+theologise
+theologised
+theologiser
+theologises
+theologising
+thermoanaesthesia
+thermoanaesthesia's
+thermoanaesthesias
+thermometerise
+thermometerises
+thermopolymerisation
+thermopolymerisation's
+thermopolymerisations
+thermosyphon
+thermosyphon's
+thermosyphons
+thronise
+thronises
+thymectomise
+thyroidectomised
+thyroidisation
+thyroidisation's
+thyroidisations
+tined
+tining
+tinsellier
+tinselliest
+tittupped
+tittupping
+tittuppy
+tonicise
+tonicises
+torporise
+torporises
+totalisation
+totalisation's
+totalisations
+totalisator
+totalise
+totalised
+totaliser
+totalisers
+totalises
+totalising
+totalitarianise
+totemisation
+totemisation's
+totemisations
+tourise
+tourises
+tractorisation
+tractorisation's
+tractorisations
+tractorise
+tractorises
+traditionalise
+traditionalises
+traditionise
+traditionises
+tragicise
+tragicises
+traitorise
+traitorises
+trammelled
+trammeller
+trammellers
+trammelling
+tranquilisation
+tranquilisation's
+tranquilisations
+tranquillisation
+tranquillise
+tranquillised
+tranquilliser
+tranquillisers
+tranquillises
+tranquillising
+transcendentalise
+transcendentalises
+transistorisation
+transparentise
+transparentises
+traumatisation
+traumatise
+traumatised
+traumatises
+traumatising
+triangularise
+triangularised
+triangularises
+triangularising
+trichinise
+trillionise
+trillionises
+trimerisation
+trimerisation's
+trimerisations
+trivialisation
+tropicalisation
+tropicalisation's
+tropicalisations
+tropicalise
+tropicalised
+tropicalises
+tropicalising
+trowelled
+trowelling
+trypsinise
+trypsinises
+tuberculinisation
+tuberculinisation's
+tuberculinisations
+tuberculinise
+tuberculinises
+tuberisation
+tuberisation's
+tuberisations
+tuberise
+tuberises
+tubulisation
+tubulisation's
+tubulisations
+tutorisation
+tutorisation's
+tutorisations
+tutorise
+tutorises
+ultracentraliser
+ultracentraliser's
+ultracentralisers
+ultrahonourable
+ultrahonourables
+ultraspecialisation
+ultraspecialisation's
+ultraspecialisations
+ultrastandardisation
+ultrastandardisation's
+ultrastandardisations
+unagonise
+unalcoholised
+unalcoholised's
+unalcoholiseds
+unanimalised
+unanimalised's
+unanimaliseds
+unantagonisable
+unantagonisables
+unapostatised
+unapostatised's
+unapostatiseds
+unauthorise
+unbaptise
+unbrutalise
+unbrutise
+unbrutises
+uncanonise
+uncanonises
+uncantonised
+uncantonised's
+uncantoniseds
+uncatechised
+uncatechised's
+uncatechisedness
+uncatechiseds
+uncatholicise
+uncatholicises
+uncelestialised
+uncelestialised's
+uncelestialiseds
+unchloridised
+unchloridised's
+unchloridiseds
+unchristianise
+unchristianised
+unchristianises
+uncircularised
+uncircularised's
+uncirculariseds
+uncivilisable
+uncivilisables
+uncivilise
+unclericalise
+unclericalises
+uncolonise
+uncolourable
+uncolourables
+uncolourablies
+uncolourably
+unconventionalise
+unconventionalises
+uncriticisable
+uncriticisables
+uncrystallisabilities
+uncrystallisability
+uncrystallisability's
+uncrystallisable
+uncrystallisables
+uncurricularised
+uncurricularised's
+uncurriculariseds
+undefence
+undefence's
+undemagnetisable
+undemagnetisables
+undemocratise
+undenominationalise
+undenominationalises
+undercapitalisation
+undercapitalisation's
+undercapitalisations
+undercapitalise
+undercapitalised
+undercapitalises
+undercapitalising
+undercolour
+undercolour's
+undercoloured
+undercolouring
+undercolourings
+undercolours
+underemphasise
+underemphasised
+underemphasises
+underemphasising
+underlabourer
+underlabourer's
+underlabourers
+underorganisation
+underorganisation's
+underorganisations
+underoxidise
+underoxidises
+underrealise
+underrealises
+undersaviour
+undersaviour's
+undersaviours
+underutilise
+undervitalised
+undervitalised's
+undervitaliseds
+undiphthongise
+undiphthongises
+undiscoloured
+undiscoloured's
+undramatisable
+undramatisables
+undualise
+undualises
+unenamoured
+unenamoured's
+unenamoureds
+unequalise
+unevangelised
+unevangelised's
+unevangeliseds
+unfavouring
+unfavouring's
+unfertilisable
+unfertilisables
+unfeudalise
+unfeudalised
+unfeudalises
+ungalvanised
+ungalvanised's
+ungalvaniseds
+ungelatinisable
+ungelatinisables
+ungelatinised
+ungelatinised's
+ungelatiniseds
+ungentilise
+ungentilises
+ungentlemanise
+ungentlemanises
+ungospelised
+ungospelised's
+ungospeliseds
+ungraphitised
+ungraphitised's
+ungraphitiseds
+unharbour
+unharbour's
+unharboured
+unharmonise
+unheroise
+unheroises
+unhonourable
+unhouselled
+unhypnotisable
+unhypnotisables
+unhypnotise
+unhypnotises
+uniformisation
+uniformisation's
+uniformisations
+uniformise
+uniformises
+unilateralisation
+unilateralisation's
+unilateralisations
+unilateralise
+unilateralises
+unimmortalise
+unimmortalises
+unindividualise
+uninitialisable
+unionisation's
+unionisations
+unitisation
+unitise
+unitises
+unitising
+universalisation
+universalisation's
+universalisations
+unkennelled
+unkennelling
+unlabialise
+unlabialises
+unlabourable
+unlabourables
+unlabouring
+unlabouring's
+unlocalisable
+unlocalisables
+unlocalise
+unmechanise
+unmediatised
+unmediatised's
+unmediatiseds
+unmercerised
+unmercerised's
+unmerceriseds
+unmesmerise
+unmesmerises
+unmetallised
+unmetallised's
+unmetalliseds
+unmethodised
+unmethodised's
+unmethodiseds
+unmethodising
+unmethodising's
+unmethodisings
+unmissionised
+unmissionised's
+unmissioniseds
+unmodernise
+unmonopolise
+unmonopolising
+unmonopolisings
+unmoralise
+unmoralised
+unmoralises
+unmoralising
+unmoralisings
+unmunicipalised
+unmunicipalised's
+unmunicipaliseds
+unmutualised
+unmutualised's
+unmutualiseds
+unmysticise
+unmysticises
+unnaturalisable
+unnaturalisables
+unnaturalise
+unnaturalises
+unneighbourlike
+unneighbourlike's
+unneighbourlikes
+unnitrogenised
+unnitrogenised's
+unnitrogeniseds
+unnormalise
+unnormalising
+unoptimise
+unoptimising
+unoxidisable
+unoxidisables
+unoxygenised
+unoxygenised's
+unoxygeniseds
+unpaganise
+unpaganises
+unparagonised
+unparagonised's
+unparagoniseds
+unparalysed
+unparalysed's
+unparalyseds
+unparticularised
+unparticularised's
+unparticulariseds
+unparticularising
+unparticularising's
+unparticularisings
+unpatronisable
+unpatronisables
+unpauperised
+unpauperised's
+unpauperiseds
+unphilosophise
+unphosphatised
+unphosphatised's
+unphosphatiseds
+unplagiarised
+unplagiarised's
+unplagiariseds
+unpoeticised
+unpoeticised's
+unpoeticiseds
+unpoetise
+unpoetised
+unpoetises
+unpolarisable
+unpolarisables
+unpolymerised
+unpolymerised's
+unpolymeriseds
+unpopularise
+unprotestantise
+unprotestantises
+unpulverise
+unradicalise
+unradicalises
+unrancoured
+unrancoured's
+unrancoureds
+unraveller
+unravellers
+unrealisable
+unrealise
+unrealising
+unrealisings
+unreconnoitred
+unreconnoitred's
+unreconnoitreds
+unrevelationise
+unrevelationises
+unromanticised
+unromanticised's
+unromanticiseds
+unroyalised
+unroyalised's
+unroyaliseds
+unsatirise
+unsatirised
+unsavourilies
+unsavourily
+unscandalise
+unscandalises
+unsceptre
+unsceptre's
+unschematised
+unschematised's
+unschematiseds
+unsectarianise
+unsectarianises
+unsecularise
+unsecularises
+unsensitise
+unsensitises
+unsensualise
+unsensualised
+unsensualises
+unsentimentalise
+unsepulchre
+unsignalised
+unsignalised's
+unsignaliseds
+unsolemnise
+unsolemnised
+unsolemnises
+unspectrelike
+unspectrelike's
+unspectrelikes
+unspiritualise
+unspiritualised
+unspiritualises
+unstoicise
+unstoicises
+unsubstantialise
+unsubstantialises
+unsuccourable
+unsuccourables
+unsulphurised
+unsulphurised's
+unsulphuriseds
+unsupernaturalise
+unsupernaturalised
+unsupernaturalises
+unsymmetrised
+unsymmetrised's
+unsymmetriseds
+unsympathisabilities
+unsympathisability
+unsympathisability's
+unsympathisable
+unsympathisables
+unsyphon
+unsyphon's
+unsystemisable
+unsystemisables
+untantalising
+untantalising's
+untantalisings
+untartarised
+untartarised's
+untartariseds
+untechnicalise
+untechnicalises
+untemporising
+untemporising's
+untheorisable
+untheorisables
+unutilisable
+unutilisables
+unvaporised
+unvaporised's
+unvaporiseds
+unvectorisable
+unvitalised
+unvitalised's
+unvitaliseds
+unvitriolised
+unvitriolised's
+unvitrioliseds
+unvolatilise
+unvolatilised
+unvolatilises
+unvulgarise
+unvulgarised
+unvulgarises
+unwesternised
+unwesternised's
+unwesterniseds
+unwomanise
+urbanise
+urbanises
+urbanising
+utilisabilities
+utilisability
+utilisable
+utilisables
+utilitarianise
+utilitarianises
+utopianiser
+utopianiser's
+utopianisers
+vaccinisation
+vaccinisation's
+vaccinisations
+vacuumise
+vacuumised
+vacuumises
+vacuumising
+vagabondise
+vagabondiser
+vagabondisers
+vagabondises
+vagrantise
+vagrantises
+valorisation
+valorisation's
+valorisations
+valorise
+valorised
+valorises
+valorising
+vampirise
+vampirises
+vandalisation
+vandalisation's
+vandalisations
+vaporisable
+vaporisables
+vaporise
+vaporised
+vaporiser
+vaporisers
+vaporises
+vaporising
+vapourier
+vapouriest
+vapourisable
+vapourisation
+vapourisations
+vapourise
+vapourised
+vapouriser
+vapourises
+vapourish
+vapourishness
+vapourising
+vapourless
+vapourlike
+vapoury
+vascularisation
+vascularisation's
+vascularisations
+vascularise
+vascularised
+vascularises
+vascularising
+vassalisation
+vassalise
+vassalised
+vassalises
+vassalising
+vectorisable
+vectorise
+vectorised
+vectoriser
+vectorisered
+vectorisering
+vectorisers
+vectorises
+vegetablise
+vegetablises
+velarisation
+venalisation
+venalisation's
+venalisations
+venalise
+venalises
+venomisation
+venomisation's
+venomisations
+venomise
+venomises
+ventriloquise
+ventriloquised
+ventriloquises
+ventriloquising
+verbalisation
+verbalisation's
+verbalisations
+vermeilled
+vermeilles
+vermeilling
+vermilionise
+vermilionises
+vernacularisation
+vernacularisation's
+vernacularisations
+vernacularise
+vernacularises
+vernalisation
+vernalisation's
+vernalisations
+vernalise
+vernalised
+vernalises
+vernalising
+versicolour
+versicoloured
+versionise
+versionises
+vestryise
+vestryises
+veteranise
+veteranises
+vialled
+vialling
+victimisable
+victimisables
+victimisation
+victimisation's
+victimisations
+victuallage
+victualled
+victualless
+victualling
+vigourless
+virtualise
+virtualises
+visionise
+visionises
+vitalisation
+vitalisation's
+vitalisations
+vitalise
+vitalised
+vitaliser
+vitalisers
+vitalises
+vitalising
+vitalising's
+vitalisingly
+vitalisings
+vitaminisation
+vitaminise
+vitaminises
+vitriolisable
+vitriolisables
+vitriolisation
+vitriolisation's
+vitriolisations
+vitriolise
+vitrioliser
+vitriolisers
+vitriolises
+vocationalisation
+vocationalisation's
+vocationalisations
+vocationalise
+vocationalises
+volatilisable
+volatilisables
+volatilise
+volatiliser
+volatilisers
+volatilises
+volatilising
+voltise
+voltises
+vowelisation
+vowelisation's
+vowelisations
+vowelise
+vowelised
+vowelises
+vowelising
+vulcanisable
+vulcanisables
+vulcanisate
+vulcanisation
+vulcanisation's
+vulcanisations
+vulcanise
+vulcaniser
+vulcanisers
+vulcanises
+vulcanising
+vulgarisation
+vulgarisation's
+vulgarisations
+vulgarise
+vulgarised
+vulgariser
+vulgarisers
+vulgarises
+vulgarising
+waggonette
+weevilled
+westernisation
+westernisation's
+westernisations
+westernise
+westernised
+westernises
+westernising
+winterisation
+winterisation's
+winterisations
+winterise
+winterised
+winterises
+winterising
+womanisation
+womanisation's
+womanisations
+woodcockise
+woodcockises
+woollenisation
+woollenisation's
+woollenisations
+woollenise
+woollenises
+zeroise
+zeroised
+zeroises
+zeroising
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.0 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.0
new file mode 100644
index 00000000000..4008ec0ff79
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.0
@@ -0,0 +1,47158 @@
+ACM
+ANSI
+ASAP
+ASCII
+ATM's
+Achilles
+Ada
+Ada's
+Afghanistan
+Afghanistan's
+Africa
+Africa's
+African
+African's
+Africans
+Airedale
+Airedale's
+Alabama
+Alabama's
+Alabamian
+Alabamian's
+Alaska
+Alaska's
+Albania
+Albania's
+Albanian
+Albanian's
+Albanians
+Alcibiades
+Alden
+Alden's
+Algeria
+Algeria's
+Algerian
+Algerian's
+Algol
+Algol's
+Allah
+Allah's
+Alyssa
+Alyssa's
+Amanda
+Amanda's
+Amdahl
+Amdahl's
+Amelia
+Amelia's
+America
+America's
+American
+American's
+Americana
+Americans
+Americas
+Ames
+Amsterdam
+Amsterdam's
+Amtrak
+Amtrak's
+Anabaptist
+Anabaptist's
+Anabaptists
+Andorra
+Andorra's
+Angeleno
+Angeleno's
+Angelenos
+Anglican
+Anglican's
+Anglicanism
+Anglicanism's
+Anglicans
+Anglophilia
+Anglophilia's
+Anglophobia
+Anglophobia's
+Angola
+Angola's
+Antarctica
+Antarctica's
+Aphrodite
+Aphrodite's
+Apollo
+Apollo's
+Apollonian
+Appalachia
+Appalachia's
+Appalachian
+Appalachian's
+Appalachians
+April
+April's
+Aprils
+Aquarius
+Arab
+Arab's
+Arabia
+Arabia's
+Arabian
+Arabian's
+Arabians
+Arabic
+Arabic's
+Arabs
+Archie
+Archie's
+Argentina
+Argentina's
+Argo
+Argo's
+Argos
+Arianism
+Arianism's
+Arianist
+Arianist's
+Arianists
+Aries
+Aristotelian
+Aristotelian's
+Aristotle
+Aristotle's
+Arizona
+Arizona's
+Arkansas
+Arkansas's
+Armageddon
+Armageddon's
+Armenian
+Armenian's
+Armour
+Armour's
+Armstrong
+Armstrong's
+Artemis
+Aryan
+Aryan's
+Aryans
+Asia
+Asia's
+Asian
+Asian's
+Asians
+Asiatic
+Asiatic's
+Asiatics
+Assyrian
+Assyrian's
+Assyriology
+Assyriology's
+Athena
+Athena's
+Athenian
+Athenian's
+Athenians
+Athens
+Atlantic
+Atlantic's
+Auckland
+Auckland's
+Audubon
+Audubon's
+Augusta
+Augusta's
+Augusts
+Austin
+Austin's
+Australia
+Australia's
+Australian
+Australian's
+Australians
+Austria
+Austria's
+Austrian
+Austrian's
+Ave
+BSD
+Babel
+Babel's
+Bach
+Bach's
+Bagrodia
+Bagrodia's
+Bagrodias
+Balkan
+Balkan's
+Balkans
+Baltic
+Baltic's
+Bangladesh
+Bangladesh's
+Bantu
+Bantu's
+Bantus
+Barbados
+Baxter
+Baxter's
+Beethoven
+Beethoven's
+Belgian
+Belgian's
+Belgians
+Belgium
+Belgium's
+Bellovin
+Bellovin's
+Belushi
+Belushi's
+Benedict
+Benedict's
+Benedictine
+Benedictine's
+Bengal
+Bengal's
+Bengali
+Bengali's
+Benzedrine
+Benzedrine's
+Bergsten
+Bergsten's
+Berkeley
+Berkeley's
+Berlin
+Berlin's
+Berliner
+Berliners
+Bermuda
+Bermuda's
+Bessel
+Bessel's
+Beverly
+Beverly's
+Bilbo
+Bilbo's
+Bolivia
+Bolivia's
+Bologna
+Bologna's
+Bolshevik
+Bolshevik's
+Bolsheviks
+Bolshevism
+Bolshevism's
+Borneo
+Borneo's
+Boston
+Boston's
+Bostonian
+Bostonian's
+Bostonians
+Botswana
+Botswana's
+Bourne
+Bourne's
+Brazil
+Brazil's
+Brazilian
+Brazilian's
+Bresenham
+Bresenham's
+Britain
+Britain's
+British
+Britisher
+Britishly
+Briton
+Briton's
+Britons
+Buehring
+Buehring's
+CDC
+CDC's
+CEO
+CMOS
+CPU
+CPU's
+CPUs
+California
+California's
+Californian
+Californian's
+Californians
+Cambridge
+Cambridge's
+Canada
+Canada's
+Carolina
+Carolina's
+Carolinas
+Cartesian
+Chinese
+Chinese's
+Christian
+Christian's
+Christians
+Christiansen
+Christmas
+Cobol
+Cobol's
+Coleman
+Coleman's
+Colorado
+Colorado's
+Comdex
+Comdex's
+Cray
+Cray's
+Crays
+Cupertino
+Cupertino's
+Czechoslovakian
+DARPA
+DARPA's
+DECNET
+DOS
+Dan
+Dan's
+DeMorgan
+DeMorgan's
+Debbie
+Debbie's
+December
+December's
+Decembers
+Delaware
+Delaware's
+Denmark
+Denmark's
+Dijkstra
+Dijkstra's
+Diophantine
+Dylan
+Dylan's
+EDP
+EGA
+EGA's
+Edsger
+Edsger's
+Ellen
+Ellen's
+Elvis
+Elvis's
+English
+English's
+Erlang
+Erlang's
+Ethernet
+Ethernet's
+Ethernets
+Europe
+Europe's
+European
+European's
+Europeans
+FIFO
+Fairbanks
+Februaries
+February
+February's
+Felder
+Florida
+Florida's
+Fortran
+Fortran's
+Fourier
+Fourier's
+France
+France's
+Frances
+French
+French's
+Friday
+Friday's
+Fridays
+GPSS
+Galvin
+Galvin's
+Garfunkel
+Geoff
+Geoff's
+Geoffrey
+Geoffrey's
+German
+German's
+Germans
+Germany
+Germany's
+Gibson
+Gibson's
+Gipsies
+Gipsy
+Gipsy's
+Godzilla
+Godzilla's
+Gothic
+Greek
+Greek's
+Greeks
+Greg
+Greg's
+Heinlein
+Heinlein's
+Hewlett
+Hewlett's
+Holland
+Holland's
+Hollander
+Hollanders
+Hollands
+Honda
+Honda's
+Hz
+I'd
+I'll
+I'm
+I've
+IBM
+IBM's
+IEEE
+ITCorp
+ITCorp's
+ITcorp
+ITcorp's
+Illinois
+Inc
+India
+India's
+Indian
+Indian's
+Indiana
+Indiana's
+Indians
+Intel
+Intel's
+Internet
+Internet's
+Iran
+Iran's
+Ireland
+Ireland's
+Israel
+Israel's
+Israeli
+Israeli's
+Israelis
+Italian
+Italian's
+Italians
+James
+Januaries
+January
+January's
+Japan
+Japan's
+Japanese
+Japanese's
+Jefferson
+Jefferson's
+Jill
+Jill's
+Johnnie
+Johnnie's
+Jr
+Julie
+Julie's
+Julies
+July
+July's
+Julys
+June
+June's
+Junes
+Klein
+Klein's
+Kleinrock
+Kleinrock's
+Kline
+Kline's
+Knuth
+Knuth's
+Kuenning
+Kuenning's
+LED's
+LEDs
+LaTeX
+LaTeX's
+Lagrangian
+Lagrangian's
+Lamport
+Lamport's
+Latin
+Latin's
+Laurie
+Laurie's
+Lenten
+Liz
+Liz's
+Lyle
+Lyle's
+MHz
+MIT
+MIT's
+MacDraw
+MacDraw's
+MacIntosh
+MacIntosh's
+MacPaint
+MacPaint's
+Mafia
+Mafia's
+Malibu
+Malibu's
+Mandelbrot
+Mandelbrot's
+Manhattan
+Manhattan's
+Manila
+Manila's
+Marianne
+Marianne's
+Mary
+Mary's
+Maryland
+Maryland's
+Marylanders
+Massachusetts
+Massey
+Massey's
+Matt
+Matt's
+Maxtor
+Maxtor's
+McElhaney
+McElhaney's
+McKenzie
+McKenzie's
+McMartin
+McMartin's
+Medusa
+Medusa's
+Michigan
+Michigan's
+Microport
+Microport's
+Microsoft
+Microsoft's
+Midwest
+Minnesota
+Minnesota's
+Monday
+Monday's
+Mondays
+Montana
+Montana's
+Montanan
+Montanan's
+Moslem
+Moslem's
+Moslems
+Motorola
+Motorola's
+Mr
+Mrs
+Ms
+Multibus
+Multibus's
+Multics
+Munsey
+Munsey's
+Muslim
+Muslim's
+Muslims
+NFS
+Nazi
+Nazi's
+Nazis
+NeWS
+Nebraska
+Nebraska's
+Nebraskan
+Nebraskan's
+Negro
+Negro's
+Negroes
+Nepal
+Nepal's
+Netherlands
+Newtonian
+November
+November's
+Novembers
+OEM
+OEM's
+OEMS
+OK
+OS
+OS's
+October
+October's
+Octobers
+Oderberg
+Oderberg's
+Oderbergs
+Oedipus
+Ohio
+Ohio's
+Oklahoma
+Oklahoma's
+Oklahoman
+Oklahoman's
+Oliver's
+PC
+PC's
+PCs
+PDP
+Packard
+Packard's
+Packards
+Palestinian
+Pascal
+Pascal's
+Pennsylvania
+Pennsylvania's
+Peter's
+Petkiewicz
+Petkiewicz's
+PhD
+Planck
+Planck's
+Poland
+Poland's
+Popek
+Popek's
+Popeks
+Prime's
+Prokofiev
+Prokofiev's
+QA
+RCS
+ROM
+RSX
+Redford
+Redford's
+Rick
+Rick's
+Ritchie
+Ritchie's
+Robert
+Robert's
+Roberts
+Robinson
+Robinson's
+Roman
+Roman's
+Romans
+Roy
+Roy's
+Rubens
+Russian
+Russian's
+Russians
+SCCS
+SMTP
+Sally's
+Salz
+Salz's
+Sam
+Sam's
+Saturday
+Saturday's
+Saturdays
+Scotland
+Scotland's
+Seagate
+Seagate's
+September
+September's
+Septembers
+Signor
+Sikkim
+Sikkim's
+Sikkimese
+Silverstein
+Silverstein's
+Singapore
+Singapore's
+Spafford
+Spafford's
+Spain
+Spain's
+Spanish
+Spanish's
+Spencer
+Spencer's
+Spuds
+Sr
+Sunday
+Sunday's
+Sundays
+TCP
+TV's
+TeX
+TeX's
+Teflon
+Teflon's
+Tektronix
+Tektronix's
+Tennessee
+Tennessee's
+Texas
+Texas's
+Texases
+Thursday
+Thursday's
+Thursdays
+Tinseltown
+Tinseltown's
+Trudeau
+Trudeau's
+Tuesday
+Tuesday's
+Tuesdays
+Turing
+Turing's
+UART
+UCLA
+UNIX's
+USC
+USC's
+USG
+USG's
+Ultrix
+Ultrix's
+Unix
+Unix's
+Usenet
+Usenet's
+Usenix
+Usenix's
+Utah
+Utah's
+VAR
+VCR
+VMS
+VMS's
+Vanessa
+Vanessa's
+Vax
+Vax's
+Ventura
+Ventura's
+Virginia
+Virginia's
+Warnock
+Warnock's
+Washington
+Washington's
+Wednesday
+Wednesday's
+Wednesdays
+Weibull
+Weibull's
+Wilbur
+Wilbur's
+Willisson
+Willisson's
+Wilson
+Wilson's
+Xenix
+Xenix's
+Xeroxed
+Xeroxes
+Xeroxing
+Yamaha
+Yamaha's
+Yentl
+Yentl's
+York
+York's
+Yorker
+Yorkers
+Yorks
+Zealand
+Zealand's
+Zulu
+Zulu's
+Zulus
+aback
+abaft
+abandon
+abandoned
+abandoner
+abandoning
+abandonment
+abandonments
+abandons
+abase
+abased
+abasement
+abasements
+abaser
+abases
+abash
+abashed
+abashes
+abashing
+abasing
+abate
+abated
+abatement
+abatements
+abater
+abates
+abating
+abbe
+abbey
+abbey's
+abbeys
+abbot
+abbot's
+abbots
+abbreviate
+abbreviated
+abbreviates
+abbreviating
+abbreviation
+abbreviations
+abdomen
+abdomen's
+abdomens
+abdominal
+abdominally
+abduct
+abducted
+abducting
+abduction
+abduction's
+abductions
+abductor
+abductor's
+abductors
+abducts
+abed
+aberrant
+aberrantly
+aberration
+aberrations
+abet
+abets
+abetted
+abetter
+abetting
+abettor
+abeyance
+abhor
+abhorred
+abhorrent
+abhorrently
+abhorrer
+abhorring
+abhors
+abide
+abided
+abider
+abides
+abiding
+abidingly
+abilities
+ability
+ability's
+abject
+abjection
+abjections
+abjectly
+abjectness
+abjure
+abjured
+abjurer
+abjures
+abjuring
+ablate
+ablated
+ablates
+ablating
+ablation
+ablative
+ablatively
+ablaze
+able
+abler
+ablest
+ablution
+ablutions
+ably
+abnormal
+abnormalities
+abnormality
+abnormally
+aboard
+abode
+abode's
+abodes
+abolish
+abolished
+abolisher
+abolishers
+abolishes
+abolishing
+abolishment
+abolishment's
+abolishments
+abolition
+abolitionist
+abolitionists
+abominable
+aboriginal
+aboriginally
+aborigine
+aborigine's
+aborigines
+abort
+aborted
+aborter
+aborting
+abortion
+abortion's
+abortions
+abortive
+abortively
+abortiveness
+aborts
+abound
+abounded
+abounding
+abounds
+about
+above
+aboveground
+abrade
+abraded
+abrader
+abrades
+abrading
+abrasion
+abrasion's
+abrasions
+abreaction
+abreaction's
+abreactions
+abreast
+abridge
+abridged
+abridger
+abridges
+abridging
+abridgment
+abroad
+abrogate
+abrogated
+abrogates
+abrogating
+abrogation
+abrupt
+abruptly
+abruptness
+abscess
+abscessed
+abscesses
+abscissa
+abscissa's
+abscissas
+abscond
+absconded
+absconder
+absconding
+absconds
+absence
+absence's
+absences
+absent
+absented
+absentee
+absentee's
+absenteeism
+absentees
+absentia
+absenting
+absently
+absentminded
+absentmindedly
+absentmindedness
+absents
+absinthe
+absolute
+absolutely
+absoluteness
+absolutes
+absolution
+absolve
+absolved
+absolver
+absolves
+absolving
+absorb
+absorbed
+absorbency
+absorbent
+absorbent's
+absorbents
+absorber
+absorbing
+absorbingly
+absorbs
+absorption
+absorption's
+absorptions
+absorptive
+abstain
+abstained
+abstainer
+abstaining
+abstains
+abstention
+abstentions
+abstinence
+abstract
+abstracted
+abstractedly
+abstractedness
+abstracter
+abstracting
+abstraction
+abstraction's
+abstractionism
+abstractionist
+abstractionists
+abstractions
+abstractive
+abstractly
+abstractness
+abstractor
+abstractor's
+abstractors
+abstracts
+abstruse
+abstrusely
+abstruseness
+abstrusenesses
+absurd
+absurdities
+absurdity
+absurdity's
+absurdly
+absurdness
+abundance
+abundances
+abundant
+abundantly
+abuse
+abused
+abuser
+abusers
+abuses
+abusing
+abusive
+abusively
+abusiveness
+abut
+abutment
+abutments
+abuts
+abutted
+abutter
+abutter's
+abutters
+abutting
+abysmal
+abysmally
+abyss
+abyss's
+abysses
+acacia
+academia
+academic
+academically
+academics
+academies
+academy
+academy's
+accede
+acceded
+accedes
+acceding
+accelerate
+accelerated
+accelerates
+accelerating
+acceleratingly
+acceleration
+accelerations
+accelerative
+accelerator
+accelerators
+accelerometer
+accelerometer's
+accelerometers
+accent
+accented
+accenting
+accents
+accentual
+accentually
+accentuate
+accentuated
+accentuates
+accentuating
+accentuation
+accept
+acceptability
+acceptable
+acceptableness
+acceptably
+acceptance
+acceptance's
+acceptances
+accepted
+acceptedly
+accepter
+accepters
+accepting
+acceptingly
+acceptingness
+acceptive
+acceptor
+acceptor's
+acceptors
+accepts
+access
+accessed
+accesses
+accessibility
+accessible
+accessibly
+accessing
+accession
+accession's
+accessions
+accessories
+accessory
+accessory's
+accident
+accident's
+accidental
+accidentally
+accidentalness
+accidently
+accidents
+acclaim
+acclaimed
+acclaimer
+acclaiming
+acclaims
+acclamation
+acclimate
+acclimated
+acclimates
+acclimating
+acclimation
+accolade
+accolades
+accommodate
+accommodated
+accommodates
+accommodating
+accommodatingly
+accommodation
+accommodations
+accommodative
+accommodativeness
+accompanied
+accompanier
+accompanies
+accompaniment
+accompaniment's
+accompaniments
+accompanist
+accompanist's
+accompanists
+accompany
+accompanying
+accomplice
+accomplices
+accomplish
+accomplished
+accomplisher
+accomplishers
+accomplishes
+accomplishing
+accomplishment
+accomplishment's
+accomplishments
+accord
+accordance
+accordances
+accorded
+accorder
+accorders
+according
+accordingly
+accordion
+accordion's
+accordions
+accords
+accost
+accosted
+accosting
+accosts
+account
+accountabilities
+accountability
+accountable
+accountableness
+accountably
+accountancy
+accountant
+accountant's
+accountants
+accounted
+accounting
+accountings
+accounts
+accredit
+accreditation
+accreditations
+accredited
+accretion
+accretion's
+accretions
+accrue
+accrued
+accrues
+accruing
+acculturate
+acculturated
+acculturates
+acculturating
+acculturation
+acculturative
+accumulate
+accumulated
+accumulates
+accumulating
+accumulation
+accumulations
+accumulative
+accumulatively
+accumulativeness
+accumulator
+accumulator's
+accumulators
+accuracies
+accuracy
+accurate
+accurately
+accurateness
+accursed
+accursedly
+accursedness
+accusal
+accusation
+accusation's
+accusations
+accusative
+accuse
+accused
+accuser
+accusers
+accuses
+accusing
+accusingly
+accustom
+accustomed
+accustomedness
+accustoming
+accustoms
+ace
+ace's
+aced
+acer
+aces
+acetate
+acetone
+acetylene
+ache
+ached
+aches
+achievable
+achieve
+achieved
+achievement
+achievement's
+achievements
+achiever
+achievers
+achieves
+achieving
+aching
+achingly
+acid
+acidic
+acidities
+acidity
+acidly
+acidness
+acids
+acidulous
+acing
+acknowledge
+acknowledged
+acknowledgedly
+acknowledger
+acknowledgers
+acknowledges
+acknowledging
+acme
+acne
+acned
+acolyte
+acolytes
+acorn
+acorn's
+acorns
+acoustic
+acoustical
+acoustically
+acoustician
+acoustics
+acquaint
+acquaintance
+acquaintance's
+acquaintances
+acquainted
+acquainting
+acquaints
+acquiesce
+acquiesced
+acquiescence
+acquiesces
+acquiescing
+acquirable
+acquire
+acquired
+acquires
+acquiring
+acquisition
+acquisition's
+acquisitions
+acquisitiveness
+acquit
+acquits
+acquittal
+acquittals
+acquitted
+acquitter
+acquitting
+acre
+acre's
+acreage
+acres
+acrid
+acridly
+acridness
+acrimonious
+acrimoniously
+acrimony
+acrobat
+acrobat's
+acrobatic
+acrobatics
+acrobats
+acronym
+acronym's
+acronyms
+acropolis
+across
+acrylic
+act
+acted
+acting
+actinium
+actinometer
+actinometer's
+actinometers
+action
+action's
+actions
+activate
+activated
+activates
+activating
+activation
+activations
+activator
+activator's
+activators
+active
+actively
+activeness
+activism
+activist
+activist's
+activists
+activities
+activity
+activity's
+actor
+actor's
+actors
+actress
+actress's
+actresses
+acts
+actual
+actualities
+actuality
+actually
+actuals
+actuarial
+actuarially
+actuate
+actuated
+actuates
+actuating
+actuation
+actuator
+actuator's
+actuators
+acuity
+acumen
+acute
+acutely
+acuteness
+acuter
+acutest
+acyclic
+acyclically
+ad
+adage
+adages
+adagio
+adagios
+adamant
+adamantly
+adapt
+adaptability
+adaptable
+adaptation
+adaptation's
+adaptations
+adapted
+adaptedness
+adapter
+adapters
+adapting
+adaption
+adaptive
+adaptively
+adaptiveness
+adaptor
+adaptors
+adapts
+add
+added
+addenda
+addendum
+adder
+adders
+addict
+addicted
+addicting
+addiction
+addiction's
+addictions
+addictive
+addicts
+adding
+addition
+addition's
+additional
+additionally
+additions
+additive
+additive's
+additively
+additives
+additivity
+address
+addressability
+addressable
+addressed
+addressee
+addressee's
+addressees
+addresser
+addressers
+addresses
+addressing
+adds
+adduce
+adduced
+adducer
+adduces
+adducing
+adduct
+adducted
+adducting
+adduction
+adductive
+adductor
+adducts
+adept
+adeptly
+adeptness
+adepts
+adequacies
+adequacy
+adequate
+adequately
+adequateness
+adhere
+adhered
+adherence
+adherences
+adherent
+adherent's
+adherently
+adherents
+adherer
+adherers
+adheres
+adhering
+adhesion
+adhesions
+adhesive
+adhesive's
+adhesively
+adhesiveness
+adhesives
+adiabatic
+adiabatically
+adieu
+adjacency
+adjacent
+adjacently
+adjective
+adjective's
+adjectively
+adjectives
+adjoin
+adjoined
+adjoining
+adjoins
+adjourn
+adjourned
+adjourning
+adjournment
+adjourns
+adjudge
+adjudged
+adjudges
+adjudging
+adjudicate
+adjudicated
+adjudicates
+adjudicating
+adjudication
+adjudication's
+adjudications
+adjudicative
+adjunct
+adjunct's
+adjunctive
+adjunctly
+adjuncts
+adjure
+adjured
+adjures
+adjuring
+adjust
+adjustable
+adjustably
+adjusted
+adjuster
+adjusters
+adjusting
+adjustive
+adjustment
+adjustment's
+adjustments
+adjustor
+adjustor's
+adjustors
+adjusts
+adjutant
+adjutants
+administer
+administered
+administering
+administerings
+administers
+administration
+administration's
+administrations
+administrative
+administratively
+administrator
+administrator's
+administrators
+admirable
+admirableness
+admirably
+admiral
+admiral's
+admirals
+admiralty
+admiration
+admirations
+admire
+admired
+admirer
+admirers
+admires
+admiring
+admiringly
+admissibility
+admissible
+admission
+admission's
+admissions
+admit
+admits
+admittance
+admitted
+admittedly
+admitting
+admix
+admixed
+admixes
+admixture
+admonish
+admonished
+admonisher
+admonishes
+admonishing
+admonishingly
+admonishment
+admonishment's
+admonishments
+admonition
+admonition's
+admonitions
+ado
+adobe
+adolescence
+adolescent
+adolescent's
+adolescently
+adolescents
+adopt
+adopted
+adopter
+adopters
+adopting
+adoption
+adoption's
+adoptions
+adoptive
+adoptively
+adopts
+adorable
+adorableness
+adoration
+adore
+adored
+adorer
+adores
+adoring
+adorn
+adorned
+adorning
+adornment
+adornment's
+adornments
+adorns
+adrenal
+adrenaline
+adrenally
+adrift
+adroit
+adroitly
+adroitness
+ads
+adsorb
+adsorbed
+adsorbing
+adsorbs
+adsorption
+adulate
+adulating
+adulation
+adulations
+adult
+adult's
+adulterate
+adulterated
+adulterates
+adulterating
+adulteration
+adulterer
+adulterer's
+adulterers
+adulterous
+adulterously
+adultery
+adulthood
+adultly
+adultness
+adults
+adumbrate
+adumbrated
+adumbrates
+adumbrating
+adumbration
+adumbrative
+adumbratively
+advance
+advanced
+advancement
+advancement's
+advancements
+advancer
+advancers
+advances
+advancing
+advantage
+advantaged
+advantageous
+advantageously
+advantageousness
+advantages
+advantaging
+advent
+adventist
+adventists
+adventitious
+adventitiously
+adventitiousness
+adventive
+adventively
+adventure
+adventured
+adventurer
+adventurers
+adventures
+adventuring
+adventurous
+adventurously
+adventurousness
+adverb
+adverb's
+adverbial
+adverbially
+adverbs
+adversaries
+adversary
+adversary's
+adverse
+adversed
+adversely
+adverses
+adversing
+adversities
+adversity
+advertise
+advertised
+advertisement
+advertisement's
+advertisements
+advertiser
+advertisers
+advertises
+advertising
+advice
+advisability
+advisable
+advisableness
+advisably
+advise
+advised
+advisedly
+advisee
+advisee's
+advisees
+advisement
+advisements
+adviser
+adviser's
+advisers
+advises
+advising
+advisor
+advisor's
+advisors
+advisory
+advocacy
+advocate
+advocated
+advocates
+advocating
+advocation
+advocative
+aegis
+aerate
+aerated
+aerates
+aerating
+aeration
+aerator
+aerators
+aerial
+aerial's
+aerially
+aerials
+aeroacoustic
+aerobic
+aerobics
+aerodynamic
+aerodynamics
+aeronautic
+aeronautical
+aeronautically
+aeronautics
+aerosol
+aerosols
+aerospace
+afar
+afars
+affable
+affair
+affair's
+affairs
+affect
+affectation
+affectation's
+affectations
+affected
+affectedly
+affectedness
+affecter
+affecting
+affectingly
+affection
+affection's
+affectionate
+affectionately
+affectioned
+affections
+affective
+affectively
+affects
+afferent
+afferently
+affianced
+affidavit
+affidavit's
+affidavits
+affiliate
+affiliated
+affiliates
+affiliating
+affiliation
+affiliations
+affinities
+affinity
+affinity's
+affirm
+affirmation
+affirmation's
+affirmations
+affirmative
+affirmatively
+affirmed
+affirming
+affirms
+affix
+affixed
+affixes
+affixing
+afflict
+afflicted
+afflicting
+affliction
+affliction's
+afflictions
+afflictive
+afflictively
+afflicts
+affluence
+affluent
+affluently
+afford
+affordable
+afforded
+affording
+affords
+affricate
+affricates
+affrication
+affricative
+affright
+affront
+affronted
+affronting
+affronts
+afghan
+afghans
+aficionado
+aficionados
+afield
+afire
+aflame
+afloat
+afoot
+afore
+aforementioned
+aforesaid
+aforethought
+afoul
+afraid
+afresh
+aft
+after
+aftereffect
+aftereffects
+aftermath
+aftermost
+afternoon
+afternoon's
+afternoons
+afters
+aftershock
+aftershock's
+aftershocks
+afterthought
+afterthoughts
+afterward
+afterwards
+again
+against
+agape
+agar
+agate
+agates
+age
+aged
+agedly
+agedness
+ageless
+agelessly
+agelessness
+agencies
+agency
+agency's
+agenda
+agenda's
+agendas
+agent
+agent's
+agentive
+agents
+ager
+agers
+ages
+agglomerate
+agglomerated
+agglomerates
+agglomeration
+agglomerative
+agglutinate
+agglutinated
+agglutinates
+agglutinating
+agglutination
+agglutinative
+agglutinin
+agglutinins
+aggravate
+aggravated
+aggravates
+aggravating
+aggravation
+aggravations
+aggregate
+aggregated
+aggregately
+aggregateness
+aggregates
+aggregating
+aggregation
+aggregations
+aggregative
+aggregatively
+aggression
+aggression's
+aggressions
+aggressive
+aggressively
+aggressiveness
+aggressor
+aggressors
+aggrieve
+aggrieved
+aggrievedly
+aggrieves
+aggrieving
+aghast
+agile
+agilely
+agility
+aging
+agitate
+agitated
+agitatedly
+agitates
+agitating
+agitation
+agitations
+agitative
+agitator
+agitator's
+agitators
+agleam
+aglow
+agnostic
+agnostic's
+agnostics
+ago
+agog
+agonies
+agony
+agrarian
+agree
+agreeable
+agreeableness
+agreeably
+agreed
+agreeing
+agreement
+agreement's
+agreements
+agreer
+agreers
+agrees
+agricultural
+agriculturally
+agriculture
+ague
+ah
+ahead
+aid
+aide
+aided
+aider
+aides
+aiding
+aids
+ail
+ailed
+aileron
+ailerons
+ailing
+ailment
+ailment's
+ailments
+ails
+aim
+aimed
+aimer
+aimers
+aiming
+aimless
+aimlessly
+aimlessness
+aims
+air
+airbag
+airbag's
+airbags
+airborne
+aircraft
+aircrafts
+airdrop
+airdrops
+aired
+airer
+airers
+airfield
+airfield's
+airfields
+airflow
+airframe
+airframe's
+airframes
+airhead
+airier
+airiest
+airily
+airiness
+airing
+airings
+airless
+airlessness
+airlift
+airlift's
+airlifts
+airline
+airline's
+airliner
+airliner's
+airliners
+airlines
+airlock
+airlock's
+airlocks
+airmail
+airmails
+airman
+airmen
+airport
+airport's
+airports
+airs
+airship
+airship's
+airships
+airspace
+airspeed
+airspeeds
+airstrip
+airstrip's
+airstrips
+airway
+airway's
+airways
+airy
+aisle
+aisles
+ajar
+akimbo
+akin
+alabaster
+alacrity
+alarm
+alarmed
+alarming
+alarmingly
+alarmist
+alarms
+alas
+alba
+albacore
+albeit
+album
+albumen
+albumin
+albums
+alchemy
+alcohol
+alcohol's
+alcoholic
+alcoholic's
+alcoholics
+alcoholism
+alcoholisms
+alcohols
+alcove
+alcove's
+alcoved
+alcoves
+alder
+alderman
+alderman's
+aldermen
+ale
+alee
+alert
+alerted
+alertedly
+alerter
+alerters
+alerting
+alertly
+alertness
+alerts
+alfalfa
+alfresco
+alga
+algae
+algaecide
+algebra
+algebra's
+algebraic
+algebraically
+algebras
+alginate
+alginates
+algorithm
+algorithm's
+algorithmic
+algorithmically
+algorithms
+alias
+aliased
+aliases
+aliasing
+alibi
+alibi's
+alibis
+alien
+alien's
+alienate
+alienated
+alienates
+alienating
+alienation
+aliens
+alight
+alighted
+alighting
+align
+aligned
+aligner
+aligning
+alignment
+alignments
+aligns
+alike
+alikeness
+aliment
+aliments
+alimony
+alive
+aliveness
+alkali
+alkali's
+alkaline
+alkalis
+alkaloid
+alkaloid's
+alkaloids
+alkyl
+all
+allay
+allayed
+allaying
+allays
+allegation
+allegation's
+allegations
+allege
+alleged
+allegedly
+alleges
+allegiance
+allegiance's
+allegiances
+alleging
+allegoric
+allegorical
+allegorically
+allegoricalness
+allegories
+allegory
+allegory's
+allegretto
+allegretto's
+allegrettos
+allegro
+allegro's
+allegros
+allele
+alleles
+allemande
+allergic
+allergies
+allergy
+allergy's
+alleviate
+alleviated
+alleviates
+alleviating
+alleviation
+alleviative
+alleviator
+alleviator's
+alleviators
+alley
+alley's
+alleys
+alleyway
+alleyway's
+alleyways
+alliance
+alliance's
+alliances
+allied
+allier
+allies
+alligator
+alligator's
+alligatored
+alligators
+alliteration
+alliteration's
+alliterations
+alliterative
+alliteratively
+allocate
+allocated
+allocates
+allocating
+allocation
+allocation's
+allocations
+allocative
+allocator
+allocator's
+allocators
+allophone
+allophones
+allophonic
+allot
+alloted
+allotment
+allotment's
+allotments
+allots
+allotted
+allotter
+allotting
+allow
+allowable
+allowableness
+allowably
+allowance
+allowance's
+allowanced
+allowances
+allowancing
+allowed
+allowedly
+allowing
+allows
+alloy
+alloy's
+alloyed
+alloying
+alloys
+allude
+alluded
+alludes
+alluding
+allure
+allured
+allurement
+allures
+alluring
+allusion
+allusion's
+allusions
+allusive
+allusively
+allusiveness
+ally
+allying
+alma
+almanac
+almanac's
+almanacs
+almightiness
+almighty
+almond
+almond's
+almonds
+almoner
+almost
+alms
+almsman
+alnico
+aloe
+aloes
+aloft
+aloha
+alone
+aloneness
+along
+alongside
+aloof
+aloofly
+aloofness
+aloud
+alpha
+alphabet
+alphabet's
+alphabetic
+alphabetical
+alphabetically
+alphabetics
+alphabets
+alphanumeric
+alphanumerics
+alpine
+alps
+already
+also
+altar
+altar's
+altars
+alter
+alterable
+alteration
+alteration's
+alterations
+altercation
+altercation's
+altercations
+altered
+alterer
+alterers
+altering
+alternate
+alternated
+alternately
+alternates
+alternating
+alternation
+alternations
+alternative
+alternatively
+alternativeness
+alternatives
+alternator
+alternator's
+alternators
+alters
+although
+altitude
+altitudes
+alto
+alto's
+altogether
+altos
+altruism
+altruist
+altruistic
+altruistically
+altruists
+alum
+alumna
+alumna's
+alumnae
+alumni
+alumnus
+alundum
+alveolar
+alveolarly
+alveoli
+alveolus
+always
+am
+amain
+amalgam
+amalgam's
+amalgamate
+amalgamated
+amalgamates
+amalgamating
+amalgamation
+amalgamations
+amalgamative
+amalgams
+amanuensis
+amass
+amassed
+amasser
+amasses
+amassing
+amateur
+amateur's
+amateurish
+amateurishly
+amateurishness
+amateurism
+amateurs
+amatory
+amaze
+amazed
+amazedly
+amazement
+amazer
+amazers
+amazes
+amazing
+amazingly
+amazon
+amazon's
+amazons
+ambassador
+ambassador's
+ambassadors
+amber
+ambiance
+ambiances
+ambidextrous
+ambidextrously
+ambient
+ambiguities
+ambiguity
+ambiguity's
+ambiguous
+ambiguously
+ambiguousness
+ambition
+ambition's
+ambitions
+ambitious
+ambitiously
+ambitiousness
+ambivalence
+ambivalent
+ambivalently
+amble
+ambled
+ambler
+ambles
+ambling
+ambrosial
+ambrosially
+ambulance
+ambulance's
+ambulances
+ambulatory
+ambuscade
+ambuscader
+ambush
+ambushed
+ambusher
+ambushes
+ameliorate
+ameliorated
+ameliorating
+amelioration
+ameliorative
+amen
+amenable
+amend
+amended
+amender
+amending
+amendment
+amendment's
+amendments
+amends
+amenities
+amenity
+americium
+amiable
+amiableness
+amiabler
+amiablest
+amicable
+amicableness
+amicably
+amid
+amide
+amidst
+amigo
+amino
+amiss
+amity
+ammo
+ammonia
+ammoniac
+ammonias
+ammonium
+ammunition
+ammunitions
+amnesty
+amoeba
+amoeba's
+amoebas
+amok
+among
+amongst
+amoral
+amorality
+amorally
+amorous
+amorously
+amorousness
+amorphous
+amorphously
+amorphousness
+amount
+amounted
+amounter
+amounters
+amounting
+amounts
+amour
+amour's
+amours
+amp
+ampere
+amperes
+ampersand
+ampersand's
+ampersands
+amphetamine
+amphetamines
+amphibian
+amphibian's
+amphibians
+amphibious
+amphibiously
+amphibiousness
+amphibology
+ample
+ampleness
+ampler
+amplest
+amplification
+amplifications
+amplified
+amplifier
+amplifiers
+amplifies
+amplify
+amplifying
+amplitude
+amplitude's
+amplitudes
+amply
+ampoule
+ampoule's
+ampoules
+amps
+amputate
+amputated
+amputates
+amputating
+amputation
+ams
+amulet
+amulets
+amuse
+amused
+amusedly
+amusement
+amusement's
+amusements
+amuser
+amusers
+amuses
+amusing
+amusingly
+amusingness
+amusive
+amyl
+an
+anachronism
+anachronism's
+anachronisms
+anachronistically
+anaconda
+anacondas
+anaerobic
+anagram
+anagram's
+anagrams
+anal
+analogical
+analogically
+analogies
+analogous
+analogously
+analogousness
+analogy
+analogy's
+analysis
+analyst
+analyst's
+analysts
+analytic
+analytical
+analytically
+analyticities
+analyticity
+analytics
+anaphora
+anaphoric
+anaphorically
+anaplasmosis
+anarchic
+anarchical
+anarchist
+anarchist's
+anarchists
+anarchy
+anastomoses
+anastomosis
+anastomotic
+anathema
+anatomic
+anatomical
+anatomically
+anatomicals
+anatomy
+ancestor
+ancestor's
+ancestors
+ancestral
+ancestrally
+ancestry
+anchor
+anchorage
+anchorage's
+anchorages
+anchored
+anchoring
+anchorite
+anchoritism
+anchors
+anchovies
+anchovy
+ancient
+anciently
+ancientness
+ancients
+ancillaries
+ancillary
+and
+anded
+anders
+anding
+ands
+anecdotal
+anecdotally
+anecdote
+anecdote's
+anecdotes
+anechoic
+anemometer
+anemometer's
+anemometers
+anemometry
+anemone
+anew
+angel
+angel's
+angelic
+angels
+anger
+angered
+angering
+angers
+angiography
+angle
+angled
+angler
+anglers
+angles
+angling
+angrier
+angriest
+angrily
+angriness
+angry
+angst
+angstrom
+angstroms
+anguish
+anguished
+angular
+angularly
+anhydrous
+anhydrously
+aniline
+animal
+animal's
+animally
+animalness
+animals
+animate
+animated
+animatedly
+animately
+animateness
+animates
+animating
+animation
+animations
+animator
+animator's
+animators
+animism
+animosity
+anion
+anion's
+anionic
+anionics
+anions
+anise
+aniseikonic
+anisotropic
+anisotropies
+anisotropy
+anisotropy's
+ankle
+ankle's
+ankles
+annal
+annalen
+annals
+annex
+annexation
+annexations
+annexed
+annexes
+annexing
+annihilate
+annihilated
+annihilates
+annihilating
+annihilation
+annihilative
+anniversaries
+anniversary
+anniversary's
+annotate
+annotated
+annotates
+annotating
+annotation
+annotations
+annotative
+announce
+announced
+announcement
+announcement's
+announcements
+announcer
+announcers
+announces
+announcing
+annoy
+annoyance
+annoyance's
+annoyances
+annoyed
+annoyer
+annoyers
+annoying
+annoyingly
+annoys
+annual
+annually
+annuals
+annul
+annulled
+annulling
+annulment
+annulment's
+annulments
+annuls
+annum
+annunciate
+annunciated
+annunciates
+annunciating
+annunciation
+annunciator
+annunciators
+anode
+anode's
+anodes
+anoint
+anointed
+anointer
+anointing
+anoints
+anomalies
+anomalous
+anomalously
+anomalousness
+anomaly
+anomaly's
+anomic
+anomie
+anon
+anonymity
+anonymous
+anonymously
+anonymousness
+anorexia
+another
+another's
+answer
+answerable
+answered
+answerer
+answerers
+answering
+answers
+ant
+ant's
+antagonism
+antagonisms
+antagonist
+antagonist's
+antagonistic
+antagonistically
+antagonists
+antarctic
+ante
+anteater
+anteater's
+anteaters
+antecedent
+antecedent's
+antecedently
+antecedents
+anted
+antedate
+antedated
+antedates
+antedating
+antelope
+antelope's
+antelopes
+antenna
+antenna's
+antennae
+antennas
+anterior
+anteriorly
+anteriors
+anthem
+anthem's
+anthems
+anther
+anthologies
+anthology
+anthracite
+anthropological
+anthropologically
+anthropologist
+anthropologist's
+anthropologists
+anthropology
+anthropomorphic
+anthropomorphically
+anti
+antibacterial
+antibiotic
+antibiotics
+antibodies
+antibody
+antic
+antic's
+anticipate
+anticipated
+anticipates
+anticipating
+anticipation
+anticipations
+anticipative
+anticipatively
+anticipatory
+anticoagulation
+anticompetitive
+antics
+antidisestablishmentarianism
+antidote
+antidote's
+antidotes
+antiformant
+antifundamentalist
+antigen
+antigen's
+antigens
+antihistorical
+antimicrobial
+antimony
+anting
+antinomian
+antinomy
+antipathy
+antiphonal
+antiphonally
+antipode
+antipode's
+antipodes
+antiquarian
+antiquarian's
+antiquarians
+antiquate
+antiquated
+antiquation
+antique
+antique's
+antiques
+antiquities
+antiquity
+antiredeposition
+antiresonance
+antiresonator
+antiseptic
+antisera
+antiserum
+antislavery
+antisocial
+antisubmarine
+antisymmetric
+antisymmetry
+antithesis
+antithetical
+antithetically
+antithyroid
+antitoxin
+antitoxin's
+antitoxins
+antitrust
+antitruster
+antler
+antlered
+ants
+anus
+anvil
+anvil's
+anvils
+anxieties
+anxiety
+anxious
+anxiously
+anxiousness
+any
+anybodies
+anybody
+anyhow
+anymore
+anyone
+anyone's
+anyones
+anyplace
+anything
+anythings
+anyway
+anyways
+anywhere
+anywheres
+aorta
+apace
+apart
+apartheid
+apartment
+apartment's
+apartments
+apartness
+apathetic
+apathy
+ape
+aped
+aper
+aperiodic
+aperiodicity
+aperture
+apertured
+apes
+apex
+apexes
+aphasia
+aphasic
+aphid
+aphid's
+aphids
+aphonic
+aphorism
+aphorism's
+aphorisms
+apiaries
+apiary
+apical
+apically
+apiece
+aping
+apish
+apishly
+apishness
+aplenty
+aplomb
+apocalypse
+apocalyptic
+apocrypha
+apocryphal
+apocryphally
+apocryphalness
+apogee
+apogees
+apologetic
+apologetically
+apologetics
+apologia
+apologies
+apologist
+apologist's
+apologists
+apology
+apology's
+apostate
+apostates
+apostle
+apostle's
+apostles
+apostolic
+apostrophe
+apostrophes
+apothecary
+apotheoses
+apotheosis
+appalled
+appalling
+appallingly
+appanage
+apparatus
+apparatuses
+apparel
+apparels
+apparent
+apparently
+apparentness
+apparition
+apparition's
+apparitions
+appeal
+appealed
+appealer
+appealers
+appealing
+appealingly
+appeals
+appear
+appearance
+appearances
+appeared
+appearer
+appearers
+appearing
+appears
+appease
+appeased
+appeasement
+appeaser
+appeases
+appeasing
+appellant
+appellant's
+appellants
+appellate
+appellation
+appellative
+appellatively
+append
+appendage
+appendage's
+appendages
+appended
+appender
+appenders
+appendices
+appendicitis
+appending
+appendix
+appendix's
+appendixes
+appends
+appertain
+appertained
+appertaining
+appertains
+appetite
+appetite's
+appetites
+appetitive
+applaud
+applauded
+applauder
+applauding
+applauds
+applause
+apple
+apple's
+applejack
+apples
+appliance
+appliance's
+appliances
+applicability
+applicable
+applicant
+applicant's
+applicants
+application
+application's
+applications
+applicative
+applicatively
+applicator
+applicator's
+applicators
+applied
+applier
+appliers
+applies
+applique
+appliques
+apply
+applying
+appoint
+appointed
+appointee
+appointee's
+appointees
+appointer
+appointers
+appointing
+appointive
+appointment
+appointment's
+appointments
+appoints
+apportion
+apportioned
+apportioning
+apportionment
+apportionments
+apportions
+appraisal
+appraisal's
+appraisals
+appraise
+appraised
+appraiser
+appraisers
+appraises
+appraising
+appraisingly
+appreciable
+appreciably
+appreciate
+appreciated
+appreciates
+appreciating
+appreciation
+appreciations
+appreciative
+appreciatively
+appreciativeness
+apprehend
+apprehended
+apprehender
+apprehending
+apprehends
+apprehensible
+apprehension
+apprehension's
+apprehensions
+apprehensive
+apprehensively
+apprehensiveness
+apprentice
+apprenticed
+apprentices
+apprenticeship
+apprenticeships
+apprise
+apprised
+appriser
+apprisers
+apprises
+apprising
+apprisings
+apprize
+apprized
+apprizer
+apprizers
+apprizes
+apprizing
+apprizingly
+apprizings
+approach
+approachability
+approachable
+approached
+approacher
+approachers
+approaches
+approaching
+approbate
+approbation
+appropriate
+appropriated
+appropriately
+appropriateness
+appropriates
+appropriatest
+appropriating
+appropriation
+appropriations
+appropriative
+appropriator
+appropriator's
+appropriators
+approval
+approval's
+approvals
+approve
+approved
+approver
+approvers
+approves
+approving
+approvingly
+approximate
+approximated
+approximately
+approximates
+approximating
+approximation
+approximations
+approximative
+approximatively
+appurtenance
+appurtenances
+apricot
+apricot's
+apricots
+apron
+apron's
+aprons
+apropos
+apse
+apses
+apsis
+apt
+aptitude
+aptitudes
+aptly
+aptness
+aqua
+aquaria
+aquarium
+aquas
+aquatic
+aquatics
+aqueduct
+aqueduct's
+aqueducts
+aqueous
+aqueously
+aquifer
+aquifers
+arabesque
+arable
+arachnid
+arachnid's
+arachnids
+arbiter
+arbiter's
+arbiters
+arbitrarily
+arbitrariness
+arbitrary
+arbitrate
+arbitrated
+arbitrates
+arbitrating
+arbitration
+arbitrative
+arbitrator
+arbitrator's
+arbitrators
+arboreal
+arboreally
+arc
+arcade
+arcade's
+arcaded
+arcades
+arcading
+arcane
+arced
+arch
+archaeological
+archaeologically
+archaeologist
+archaeologist's
+archaeologists
+archaeology
+archaic
+archaically
+archaicness
+archaism
+archangel
+archangel's
+archangels
+archbishop
+archdiocese
+archdioceses
+arched
+archenemy
+archer
+archers
+archery
+arches
+archetype
+archetypes
+archfool
+arching
+archipelago
+archipelagoes
+architect
+architect's
+architectonic
+architectonics
+architects
+architectural
+architecturally
+architecture
+architecture's
+architectures
+archival
+archive
+archived
+archiver
+archivers
+archives
+archiving
+archivist
+archivists
+archly
+archness
+arcing
+arclike
+arcs
+arctic
+ardent
+ardently
+arduous
+arduously
+arduousness
+are
+area
+area's
+areas
+aren't
+arena
+arena's
+arenas
+ares
+argon
+argonaut
+argonauts
+argot
+arguable
+arguably
+argue
+argued
+arguer
+arguers
+argues
+arguing
+argument
+argument's
+argumentation
+argumentative
+argumentatively
+arguments
+arid
+aridity
+aridness
+aright
+arise
+arisen
+ariser
+arises
+arising
+arisings
+aristocracy
+aristocrat
+aristocrat's
+aristocratic
+aristocratically
+aristocrats
+arithmetic
+arithmetical
+arithmetically
+arithmetics
+ark
+arm
+arm's
+armadillo
+armadillos
+armament
+armament's
+armaments
+armchair
+armchair's
+armchairs
+armed
+armer
+armers
+armful
+armfuls
+armhole
+armies
+arming
+armistice
+armload
+armpit
+armpit's
+armpits
+arms
+army
+army's
+aroma
+aromas
+aromatic
+aromaticness
+arose
+around
+arousal
+arouse
+aroused
+arouses
+arousing
+arpeggio
+arpeggio's
+arpeggios
+arrack
+arraign
+arraigned
+arraigning
+arraignment
+arraignment's
+arraignments
+arraigns
+arrange
+arranged
+arrangement
+arrangement's
+arrangements
+arranger
+arrangers
+arranges
+arranging
+arrant
+arrantly
+array
+arrayed
+arrayer
+arraying
+arrays
+arrears
+arrest
+arrested
+arrester
+arresters
+arresting
+arrestingly
+arrestor
+arrestor's
+arrestors
+arrests
+arrival
+arrival's
+arrivals
+arrive
+arrived
+arriver
+arrives
+arriving
+arrogance
+arrogant
+arrogantly
+arrogate
+arrogated
+arrogates
+arrogating
+arrogation
+arrow
+arrowed
+arrowhead
+arrowhead's
+arrowheads
+arrowing
+arrows
+arroyo
+arroyos
+arsenal
+arsenal's
+arsenals
+arsenic
+arsine
+arsines
+arson
+art
+art's
+arterial
+arterially
+arteries
+arteriolar
+arteriole
+arteriole's
+arterioles
+arteriosclerosis
+artery
+artery's
+artful
+artfully
+artfulness
+arthritis
+arthrogram
+arthrogram's
+arthrograms
+arthropod
+arthropod's
+arthropods
+artichoke
+artichoke's
+artichokes
+article
+article's
+articled
+articles
+articling
+articulate
+articulated
+articulately
+articulateness
+articulates
+articulating
+articulation
+articulations
+articulative
+articulator
+articulators
+articulatory
+artifact
+artifact's
+artifacts
+artifice
+artificer
+artifices
+artificial
+artificialities
+artificiality
+artificially
+artificialness
+artilleries
+artillerist
+artillery
+artisan
+artisan's
+artisans
+artist
+artist's
+artistic
+artistically
+artistry
+artists
+artless
+artlessly
+arts
+artwork
+as
+asbestos
+ascend
+ascendancy
+ascendant
+ascendantly
+ascended
+ascendency
+ascendent
+ascender
+ascenders
+ascending
+ascends
+ascension
+ascensions
+ascent
+ascertain
+ascertainable
+ascertained
+ascertaining
+ascertains
+ascetic
+ascetic's
+asceticism
+ascetics
+ascot
+ascribable
+ascribe
+ascribed
+ascribes
+ascribing
+ascription
+aseptic
+ash
+ashamed
+ashamedly
+ashen
+asher
+ashes
+ashman
+ashore
+ashtray
+ashtray's
+ashtrays
+aside
+asides
+asinine
+asininely
+ask
+askance
+asked
+asker
+askers
+askew
+askewness
+asking
+asks
+asleep
+asocial
+asp
+asparagus
+aspect
+aspect's
+aspects
+aspen
+asper
+aspersion
+aspersion's
+aspersions
+asphalt
+asphalted
+asphyxia
+aspic
+aspirant
+aspirant's
+aspirants
+aspirate
+aspirated
+aspirates
+aspirating
+aspiration
+aspiration's
+aspirations
+aspirator
+aspirators
+aspire
+aspired
+aspirer
+aspires
+aspirin
+aspiring
+aspirins
+ass
+ass's
+assail
+assailant
+assailant's
+assailants
+assailed
+assailing
+assails
+assassin
+assassin's
+assassinate
+assassinated
+assassinates
+assassinating
+assassination
+assassinations
+assassins
+assault
+assaulted
+assaulter
+assaulting
+assaultive
+assaultively
+assaultiveness
+assaults
+assay
+assayed
+assayer
+assayers
+assaying
+assemblage
+assemblage's
+assemblages
+assemble
+assembled
+assembler
+assemblers
+assembles
+assemblies
+assembling
+assembly
+assembly's
+assen
+assent
+assented
+assenter
+assenting
+assents
+assert
+asserted
+asserter
+asserters
+asserting
+assertion
+assertion's
+assertions
+assertive
+assertively
+assertiveness
+asserts
+asses
+assess
+assessed
+assesses
+assessing
+assessment
+assessment's
+assessments
+assessor
+assessor's
+assessors
+asset
+asset's
+assets
+assiduity
+assiduous
+assiduously
+assiduousness
+assign
+assignable
+assigned
+assignee
+assignee's
+assignees
+assigner
+assigners
+assigning
+assignment
+assignment's
+assignments
+assigns
+assimilate
+assimilated
+assimilates
+assimilating
+assimilation
+assimilations
+assimilative
+assist
+assistance
+assistances
+assistant
+assistant's
+assistants
+assistantship
+assistantships
+assisted
+assister
+assisting
+assists
+associate
+associated
+associates
+associating
+association
+association's
+associational
+associations
+associative
+associatively
+associativities
+associativity
+associator
+associator's
+associators
+assonance
+assonant
+assort
+assorted
+assorter
+assorting
+assortment
+assortment's
+assortments
+assorts
+assuage
+assuaged
+assuages
+assuaging
+assume
+assumed
+assumer
+assumes
+assuming
+assumption
+assumption's
+assumptions
+assurance
+assurance's
+assurances
+assure
+assured
+assuredly
+assuredness
+assurer
+assurers
+assures
+assuring
+assuringly
+astatine
+aster
+aster's
+asterisk
+asterisk's
+asterisks
+asteroid
+asteroid's
+asteroidal
+asteroids
+asters
+asthma
+astonish
+astonished
+astonishes
+astonishing
+astonishingly
+astonishment
+astound
+astounded
+astounding
+astoundingly
+astounds
+astral
+astrally
+astray
+astride
+astringency
+astringent
+astringently
+astronaut
+astronaut's
+astronautics
+astronauts
+astronomer
+astronomer's
+astronomers
+astronomical
+astronomically
+astronomy
+astrophysical
+astrophysics
+astute
+astutely
+astuteness
+asunder
+asylum
+asylums
+asymmetric
+asymmetrical
+asymmetrically
+asymmetries
+asymmetry
+asymptomatically
+asymptote
+asymptote's
+asymptotes
+asymptotic
+asymptotically
+asymptoticly
+asynchronism
+asynchronous
+asynchronously
+asynchrony
+at
+atavistic
+ate
+atemporal
+atheism
+atheist
+atheist's
+atheistic
+atheists
+atherosclerosis
+athlete
+athlete's
+athletes
+athletic
+athleticism
+athletics
+atlas
+atmosphere
+atmosphere's
+atmosphered
+atmospheres
+atmospheric
+atmospherics
+atoll
+atoll's
+atolls
+atom
+atom's
+atomic
+atomically
+atomics
+atoms
+atonal
+atonally
+atone
+atoned
+atonement
+atones
+atoning
+atop
+atrocious
+atrociously
+atrociousness
+atrocities
+atrocity
+atrocity's
+atrophic
+atrophied
+atrophies
+atrophy
+atrophying
+attach
+attache
+attached
+attacher
+attachers
+attaches
+attaching
+attachment
+attachment's
+attachments
+attack
+attackable
+attacked
+attacker
+attacker's
+attackers
+attacking
+attacks
+attain
+attainable
+attainableness
+attainably
+attained
+attainer
+attainers
+attaining
+attainment
+attainment's
+attainments
+attains
+attempt
+attempted
+attempter
+attempters
+attempting
+attempts
+attend
+attendance
+attendance's
+attendances
+attendant
+attendant's
+attendants
+attended
+attendee
+attendee's
+attendees
+attender
+attenders
+attending
+attends
+attention
+attention's
+attentional
+attentionality
+attentions
+attentive
+attentively
+attentiveness
+attenuate
+attenuated
+attenuates
+attenuating
+attenuation
+attenuator
+attenuator's
+attenuators
+attest
+attested
+attester
+attesting
+attests
+attic
+attic's
+attics
+attire
+attired
+attires
+attiring
+attitude
+attitude's
+attitudes
+attitudinal
+attitudinally
+attorney
+attorney's
+attorneys
+attract
+attracted
+attracting
+attraction
+attraction's
+attractions
+attractive
+attractively
+attractiveness
+attractor
+attractor's
+attractors
+attracts
+attributable
+attribute
+attributed
+attributer
+attributes
+attributing
+attribution
+attributions
+attributive
+attributively
+attrition
+attune
+attuned
+attunes
+attuning
+atypical
+atypically
+auburn
+auction
+auctioned
+auctioneer
+auctioneer's
+auctioneers
+auctioning
+audacious
+audaciously
+audaciousness
+audacity
+audible
+audibly
+audience
+audience's
+audiences
+audio
+audiogram
+audiogram's
+audiograms
+audiological
+audiologist
+audiologist's
+audiologists
+audiology
+audiometer
+audiometer's
+audiometers
+audiometric
+audiometry
+audit
+audited
+auditing
+audition
+audition's
+auditioned
+auditioning
+auditions
+auditive
+auditor
+auditor's
+auditorium
+auditoriums
+auditors
+auditory
+audits
+auger
+auger's
+augers
+aught
+augment
+augmentation
+augmentations
+augmented
+augmenter
+augmenting
+augments
+augur
+augurs
+august
+augustly
+augustness
+aunt
+aunt's
+auntly
+aunts
+aura
+aura's
+aural
+aurally
+auras
+aureole
+aureomycin
+aurora
+auscultate
+auscultated
+auscultates
+auscultating
+auscultation
+auscultations
+auspice
+auspices
+auspicious
+auspiciously
+auspiciousness
+austere
+austerely
+austereness
+austerity
+authentic
+authentically
+authenticate
+authenticated
+authenticates
+authenticating
+authentication
+authentications
+authenticator
+authenticators
+authenticity
+author
+author's
+authored
+authoring
+authoritarian
+authoritarianism
+authoritative
+authoritatively
+authoritativeness
+authorities
+authority
+authority's
+authors
+authorship
+autism
+autistic
+auto
+auto's
+autobiographic
+autobiographical
+autobiographically
+autobiographies
+autobiography
+autobiography's
+autocollimator
+autocorrelate
+autocorrelated
+autocorrelates
+autocorrelating
+autocorrelation
+autocorrelations
+autocracies
+autocracy
+autocrat
+autocrat's
+autocratic
+autocratically
+autocrats
+autodial
+autofluorescence
+autograph
+autographed
+autographing
+autographs
+automata
+automate
+automated
+automates
+automatic
+automatically
+automatics
+automating
+automation
+automaton
+automatons
+automobile
+automobile's
+automobiles
+automotive
+autonavigator
+autonavigator's
+autonavigators
+autonomic
+autonomous
+autonomously
+autonomy
+autopilot
+autopilot's
+autopilots
+autopsied
+autopsies
+autopsy
+autoregressive
+autorepeat
+autorepeating
+autorepeats
+autos
+autosuggestibility
+autotransformer
+autumn
+autumn's
+autumnal
+autumnally
+autumns
+auxiliaries
+auxiliary
+avail
+availabilities
+availability
+available
+availableness
+availably
+availed
+availer
+availers
+availing
+avails
+avalanche
+avalanched
+avalanches
+avalanching
+avant
+avarice
+avaricious
+avariciously
+avariciousness
+avenge
+avenged
+avenger
+avenges
+avenging
+avenue
+avenue's
+avenues
+aver
+average
+averaged
+averagely
+averageness
+averages
+averaging
+averred
+averrer
+averring
+avers
+averse
+aversely
+averseness
+aversion
+aversion's
+aversions
+aversive
+avert
+averted
+averting
+averts
+avian
+aviaries
+aviary
+aviation
+aviator
+aviator's
+aviators
+avid
+avidity
+avidly
+avidness
+avionic
+avionics
+avocado
+avocados
+avocation
+avocation's
+avocations
+avoid
+avoidable
+avoidably
+avoidance
+avoided
+avoider
+avoiders
+avoiding
+avoids
+avouch
+avow
+avowed
+avowedly
+avower
+avows
+await
+awaited
+awaiting
+awaits
+awake
+awaked
+awaken
+awakened
+awakener
+awakening
+awakens
+awakes
+awaking
+award
+awarded
+awarder
+awarders
+awarding
+awards
+aware
+awareness
+awash
+away
+awayness
+awe
+awed
+awesome
+awesomely
+awesomeness
+awful
+awfully
+awfulness
+awhile
+awhiles
+awing
+awkward
+awkwardly
+awkwardness
+awl
+awl's
+awls
+awning
+awning's
+awninged
+awnings
+awoke
+awry
+ax
+axe
+axed
+axer
+axers
+axes
+axial
+axially
+axing
+axiological
+axiologically
+axiom
+axiom's
+axiomatic
+axiomatically
+axiomatics
+axioms
+axion
+axion's
+axions
+axis
+axle
+axle's
+axles
+axolotl
+axolotl's
+axolotls
+axon
+axon's
+axons
+aye
+ayer
+ayers
+ayes
+azalea
+azalea's
+azaleas
+azimuth
+azimuth's
+azimuths
+azure
+babble
+babbled
+babbler
+babbles
+babbling
+babe
+babe's
+babes
+babied
+babies
+baby
+baby's
+babyhood
+babying
+babyish
+babysit
+babysits
+babysitter
+babysitters
+baccalaureate
+bachelor
+bachelor's
+bachelors
+bacilli
+bacillus
+back
+backache
+backache's
+backaches
+backbone
+backbone's
+backbones
+backdrop
+backdrop's
+backdrops
+backed
+backer
+backers
+background
+background's
+backgrounds
+backing
+backlash
+backlasher
+backlog
+backlog's
+backlogs
+backpack
+backpack's
+backpacker
+backpackers
+backpacks
+backplane
+backplane's
+backplanes
+backs
+backscatter
+backscattered
+backscattering
+backscatters
+backslash
+backslashed
+backslashes
+backslashing
+backspace
+backspaced
+backspaces
+backspacing
+backstabber
+backstabbing
+backstage
+backstairs
+backstitch
+backstitched
+backstitches
+backstitching
+backtrack
+backtracked
+backtracker
+backtrackers
+backtracking
+backtracks
+backup
+backups
+backward
+backwardly
+backwardness
+backwards
+backwater
+backwater's
+backwaters
+backwoods
+backyard
+backyard's
+backyards
+bacon
+baconer
+bacteria
+bacterial
+bacterially
+bacterium
+bad
+bade
+baden
+badge
+badged
+badger
+badger's
+badgered
+badgering
+badgers
+badges
+badging
+badlands
+badly
+badminton
+badness
+bads
+baffle
+baffled
+baffler
+bafflers
+baffles
+baffling
+bafflingly
+bag
+bag's
+bagatelle
+bagatelle's
+bagatelles
+bagel
+bagel's
+bagels
+baggage
+bagged
+bagger
+bagger's
+baggers
+baggier
+baggies
+bagginess
+bagging
+baggy
+bagpipe
+bagpipe's
+bagpiper
+bagpipes
+bags
+bah
+bail
+bailer
+bailiff
+bailiff's
+bailiffs
+bailing
+bailly
+bait
+baited
+baiter
+baiting
+baits
+bake
+baked
+baker
+bakeries
+bakers
+bakery
+bakery's
+bakes
+baking
+bakings
+baklava
+balalaika
+balalaika's
+balalaikas
+balance
+balanced
+balancedness
+balancer
+balancers
+balances
+balancing
+balconied
+balconies
+balcony
+balcony's
+bald
+balder
+balding
+baldly
+baldness
+bale
+baled
+baleful
+balefully
+balefulness
+baler
+balers
+bales
+baling
+balk
+balked
+balker
+balkier
+balkiness
+balking
+balks
+balky
+ball
+ballad
+ballad's
+ballads
+ballast
+ballast's
+ballasts
+balled
+baller
+ballerina
+ballerina's
+ballerinas
+ballers
+ballet
+ballet's
+ballets
+balling
+ballistic
+ballistics
+balloon
+ballooned
+ballooner
+ballooners
+ballooning
+balloons
+ballot
+ballot's
+balloted
+balloter
+balloting
+ballots
+ballplayer
+ballplayer's
+ballplayers
+ballroom
+ballroom's
+ballrooms
+balls
+ballyhoo
+balm
+balm's
+balmier
+balminess
+balms
+balmy
+balsa
+balsam
+balsams
+balustrade
+balustrade's
+balustrades
+bamboo
+bamboos
+ban
+ban's
+banal
+banally
+banana
+banana's
+bananas
+band
+bandage
+bandaged
+bandager
+bandages
+bandaging
+banded
+bander
+bandied
+bandies
+banding
+bandit
+bandit's
+bandits
+bandpass
+bands
+bandstand
+bandstand's
+bandstands
+bandwagon
+bandwagon's
+bandwagons
+bandwidth
+bandwidths
+bandy
+bandying
+bane
+baneful
+banefully
+bang
+banged
+banger
+banging
+bangle
+bangle's
+bangles
+bangs
+baning
+banish
+banished
+banisher
+banishes
+banishing
+banishment
+banister
+banister's
+banisters
+banjo
+banjo's
+banjos
+bank
+banked
+banker
+bankers
+banking
+bankrupt
+bankruptcies
+bankruptcy
+bankruptcy's
+bankrupted
+bankrupting
+bankrupts
+banks
+banned
+banner
+banner's
+banners
+banning
+banquet
+banqueted
+banqueter
+banqueting
+banquetings
+banquets
+bans
+banshee
+banshee's
+banshees
+bantam
+banter
+bantered
+banterer
+bantering
+banteringly
+banters
+baptism
+baptism's
+baptismal
+baptismally
+baptisms
+baptist
+baptist's
+baptistery
+baptistries
+baptistry
+baptistry's
+baptists
+bar
+bar's
+barb
+barbarian
+barbarian's
+barbarians
+barbaric
+barbarities
+barbarity
+barbarous
+barbarously
+barbarousness
+barbecue
+barbecued
+barbecuer
+barbecues
+barbecuing
+barbed
+barbedness
+barbell
+barbell's
+barbells
+barber
+barbered
+barbering
+barbers
+barbital
+barbiturate
+barbiturates
+barbs
+bard
+bard's
+bards
+bare
+bared
+barefoot
+barefooted
+barely
+bareness
+barer
+bares
+barest
+barflies
+barfly
+barfly's
+bargain
+bargained
+bargainer
+bargaining
+bargains
+barge
+barged
+barges
+barging
+baring
+baritone
+baritone's
+baritones
+barium
+bark
+barked
+barker
+barkers
+barking
+barks
+barley
+barn
+barn's
+barns
+barnstorm
+barnstormed
+barnstormer
+barnstorming
+barnstorms
+barnyard
+barnyard's
+barnyards
+barometer
+barometer's
+barometers
+barometric
+baron
+baron's
+baroness
+baronial
+baronies
+barons
+barony
+barony's
+baroque
+baroquely
+baroqueness
+barrack
+barracker
+barracks
+barracuda
+barracuda's
+barracudas
+barrage
+barrage's
+barraged
+barrages
+barraging
+barred
+barrel
+barrel's
+barrels
+barren
+barrenness
+barrens
+barricade
+barricade's
+barricades
+barrier
+barrier's
+barriers
+barring
+barringer
+barrow
+barrows
+bars
+bartender
+bartender's
+bartenders
+barter
+bartered
+barterer
+bartering
+barters
+bas
+basal
+basally
+basalt
+base
+baseball
+baseball's
+baseballs
+baseboard
+baseboard's
+baseboards
+based
+baseless
+baseline
+baseline's
+baselines
+basely
+baseman
+basement
+basement's
+basements
+baseness
+baser
+bases
+basest
+bash
+bashed
+basher
+bashes
+bashful
+bashfully
+bashfulness
+bashing
+basic
+basically
+basics
+basil
+basin
+basin's
+basined
+basing
+basins
+basis
+bask
+basked
+basket
+basket's
+basketball
+basketball's
+basketballs
+baskets
+basking
+bass
+bass's
+basses
+basset
+bassinet
+bassinet's
+bassinets
+basso
+bastard
+bastard's
+bastardly
+bastards
+baste
+basted
+baster
+bastes
+basting
+bastion
+bastion's
+bastioned
+bastions
+bat
+bat's
+batch
+batched
+batcher
+batches
+batching
+bated
+bater
+bath
+bathe
+bathed
+bather
+bathers
+bathes
+bathing
+bathos
+bathrobe
+bathrobe's
+bathrobes
+bathroom
+bathroom's
+bathroomed
+bathrooms
+baths
+bathtub
+bathtub's
+bathtubs
+bating
+baton
+baton's
+batons
+bats
+battalion
+battalion's
+battalions
+batted
+batten
+battened
+battening
+battens
+batter
+battered
+batteries
+battering
+batters
+battery
+battery's
+batting
+battle
+battled
+battlefield
+battlefield's
+battlefields
+battlefront
+battlefront's
+battlefronts
+battleground
+battleground's
+battlegrounds
+battlement
+battlement's
+battlemented
+battlements
+battler
+battlers
+battles
+battleship
+battleship's
+battleships
+battling
+bauble
+bauble's
+baubles
+baud
+bauds
+bauxite
+bawdier
+bawdiness
+bawdy
+bawl
+bawled
+bawler
+bawling
+bawls
+bay
+bayed
+baying
+bayly
+bayonet
+bayonet's
+bayoneted
+bayoneting
+bayonets
+bayou
+bayou's
+bayous
+bays
+bazaar
+bazaar's
+bazaars
+be
+beach
+beached
+beaches
+beachhead
+beachhead's
+beachheads
+beaching
+beacon
+beacon's
+beaconed
+beaconing
+beacons
+bead
+beaded
+beading
+beadle
+beadle's
+beadles
+beads
+beady
+beagle
+beagle's
+beagles
+beak
+beaked
+beaker
+beakers
+beaks
+beam
+beamed
+beamer
+beamers
+beaming
+beams
+bean
+beanbag
+beanbag's
+beanbags
+beaned
+beaner
+beaners
+beaning
+beans
+bear
+bearable
+bearably
+beard
+bearded
+beardedness
+beardless
+beards
+bearer
+bearers
+bearing
+bearings
+bearish
+bearishly
+bearishness
+bears
+beast
+beastings
+beastlier
+beastliness
+beastly
+beasts
+beat
+beatable
+beatably
+beaten
+beater
+beaters
+beatific
+beatification
+beatify
+beating
+beatings
+beatitude
+beatitude's
+beatitudes
+beatnik
+beatnik's
+beatniks
+beats
+beau
+beau's
+beaus
+beauteous
+beauteously
+beauteousness
+beauties
+beautification
+beautifications
+beautified
+beautifier
+beautifiers
+beautifies
+beautiful
+beautifully
+beautifulness
+beautify
+beautifying
+beauty
+beauty's
+beaver
+beaver's
+beavers
+becalm
+becalmed
+becalming
+becalms
+became
+because
+beck
+beckon
+beckoned
+beckoning
+beckons
+become
+becomes
+becoming
+becomingly
+bed
+bed's
+bedazzle
+bedazzled
+bedazzlement
+bedazzles
+bedazzling
+bedbug
+bedbug's
+bedbugs
+bedded
+bedder
+bedder's
+bedders
+bedding
+bedevil
+bedevils
+bedfast
+bedlam
+bedpost
+bedpost's
+bedposts
+bedraggle
+bedraggled
+bedridden
+bedrock
+bedrock's
+bedroom
+bedroom's
+bedroomed
+bedrooms
+beds
+bedside
+bedspread
+bedspread's
+bedspreads
+bedspring
+bedspring's
+bedsprings
+bedstead
+bedstead's
+bedsteads
+bedtime
+bee
+beech
+beechen
+beecher
+beef
+beefed
+beefer
+beefers
+beefier
+beefing
+beefs
+beefsteak
+beefy
+beehive
+beehive's
+beehives
+been
+beens
+beep
+beeped
+beeper
+beeping
+beeps
+beer
+beers
+bees
+beet
+beet's
+beetle
+beetle's
+beetled
+beetles
+beetling
+beets
+befall
+befallen
+befalling
+befalls
+befell
+befit
+befit's
+befits
+befitted
+befitting
+befittingly
+befog
+befogged
+befogging
+befogs
+before
+beforehand
+befoul
+befouled
+befouling
+befouls
+befriend
+befriended
+befriending
+befriends
+befuddle
+befuddled
+befuddles
+befuddling
+beg
+began
+beget
+begets
+begetting
+beggar
+beggared
+beggaring
+beggarliness
+beggarly
+beggars
+beggary
+begged
+begging
+begin
+beginner
+beginner's
+beginners
+beginning
+beginning's
+beginnings
+begins
+begot
+begotten
+begrudge
+begrudged
+begrudger
+begrudges
+begrudging
+begrudgingly
+begs
+beguile
+beguiled
+beguiler
+beguiles
+beguiling
+beguilingly
+begun
+behalf
+behave
+behaved
+behaver
+behaves
+behaving
+behead
+beheading
+beheld
+behest
+behind
+behold
+beholden
+beholder
+beholders
+beholding
+beholds
+beige
+being
+beings
+belated
+belatedly
+belatedness
+belay
+belayed
+belaying
+belays
+belch
+belched
+belches
+belching
+belfries
+belfry
+belfry's
+belie
+belied
+belief
+belief's
+beliefs
+belier
+belies
+believability
+believable
+believably
+believe
+believed
+believer
+believers
+believes
+believing
+belittle
+belittled
+belittler
+belittles
+belittling
+bell
+bell's
+bellboy
+bellboy's
+bellboys
+belle
+belle's
+belles
+bellhop
+bellhop's
+bellhops
+bellicose
+bellicosely
+bellicoseness
+bellicosity
+bellied
+bellies
+belligerence
+belligerent
+belligerent's
+belligerently
+belligerents
+bellman
+bellmen
+bellow
+bellowed
+bellowing
+bellows
+bells
+bellwether
+bellwether's
+bellwethers
+belly
+belly's
+bellyful
+bellying
+belong
+belonged
+belonging
+belongingness
+belongings
+belongs
+beloved
+below
+belt
+belted
+belting
+belts
+bely
+belying
+bemoan
+bemoaned
+bemoaning
+bemoans
+bench
+benched
+bencher
+benches
+benching
+benchmark
+benchmark's
+benchmarking
+benchmarks
+bend
+bendable
+bended
+bender
+benders
+bending
+bends
+beneath
+benediction
+benediction's
+benedictions
+benefactor
+benefactor's
+benefactors
+beneficence
+beneficences
+beneficial
+beneficially
+beneficialness
+beneficiaries
+beneficiary
+benefit
+benefited
+benefiter
+benefiters
+benefiting
+benefits
+benevolence
+benevolent
+benevolently
+benevolentness
+benighted
+benightedly
+benightedness
+benign
+benignly
+bent
+bents
+benzene
+bequeath
+bequeathed
+bequeathes
+bequeathing
+bequest
+bequest's
+bequests
+berate
+berated
+berates
+berating
+bereave
+bereaved
+bereavement
+bereavements
+bereaves
+bereaving
+bereft
+beret
+beret's
+berets
+beribboned
+beriberi
+berkelium
+berried
+berries
+berry
+berry's
+berrying
+berth
+berthed
+berthing
+berthings
+berths
+beryl
+beryllium
+bes
+beseech
+beseeches
+beseeching
+beseechingly
+beset
+besets
+besetting
+beside
+besides
+besiege
+besieged
+besieger
+besiegers
+besieging
+besmirch
+besmirched
+besmirches
+besmirching
+besotted
+besotting
+besought
+bespeak
+bespeaks
+bespectacled
+best
+bested
+bester
+bestial
+bestially
+besting
+bestow
+bestowal
+bestowed
+bests
+bestseller
+bestseller's
+bestsellers
+bestselling
+bet
+bet's
+beta
+betas
+beth
+betide
+betray
+betrayal
+betrayed
+betrayer
+betraying
+betrays
+betroth
+betrothal
+betrothals
+betrothed
+bets
+better
+bettered
+bettering
+betterment
+betterments
+betters
+betting
+between
+betweenness
+betwixt
+bevel
+bevels
+beverage
+beverage's
+beverages
+bevies
+bevy
+bewail
+bewailed
+bewailing
+bewails
+beware
+bewhiskered
+bewilder
+bewildered
+bewilderedly
+bewilderedness
+bewildering
+bewilderingly
+bewilderment
+bewilders
+bewitch
+bewitched
+bewitches
+bewitching
+bewitchingly
+beyond
+biannual
+bias
+biased
+biases
+biasing
+biasness
+bib
+bib's
+bibbed
+bibbing
+bible
+bible's
+bibles
+biblical
+biblically
+bibliographic
+bibliographical
+bibliographically
+bibliographics
+bibliographies
+bibliography
+bibliography's
+bibliophile
+bibliophiles
+bibs
+bicameral
+bicarbonate
+bicentennial
+biceps
+bicker
+bickered
+bickerer
+bickering
+bickers
+biconcave
+biconvex
+bicycle
+bicycled
+bicycler
+bicyclers
+bicycles
+bicycling
+bid
+bid's
+biddable
+bidden
+bidder
+bidder's
+bidders
+biddies
+bidding
+biddy
+bide
+bided
+bider
+bides
+biding
+bidirectional
+bids
+biennial
+biennially
+biennium
+bier
+bifocal
+bifocals
+bifurcate
+bifurcated
+bifurcately
+bifurcates
+bifurcating
+bifurcation
+bifurcations
+big
+bigger
+biggest
+bight
+bight's
+bights
+bigly
+bigness
+bigot
+bigot's
+bigoted
+bigotedly
+bigoting
+bigotry
+bigots
+bijection
+bijection's
+bijections
+bijective
+bijectively
+bike
+bike's
+biked
+biker
+biker's
+bikers
+bikes
+biking
+bikini
+bikini's
+bikinied
+bikinis
+bilabial
+bilateral
+bilaterally
+bilateralness
+bile
+bilge
+bilge's
+bilged
+bilges
+bilging
+bilinear
+bilingual
+bilingually
+bilinguals
+bilk
+bilked
+bilker
+bilking
+bilks
+bill
+billboard
+billboard's
+billboards
+billed
+biller
+billers
+billet
+billeted
+billeting
+billets
+billiard
+billiards
+billing
+billings
+billion
+billions
+billionth
+billow
+billowed
+billowing
+billows
+bills
+bimodal
+bimolecular
+bimolecularly
+bimonthlies
+bimonthly
+bin
+bin's
+binaries
+binary
+binaural
+binaurally
+bind
+binded
+binder
+binders
+binding
+bindingly
+bindingness
+bindings
+binds
+bing
+binge
+bingen
+binges
+bingo
+bingos
+binocular
+binocularly
+binoculars
+binomial
+binomially
+bins
+binuclear
+biochemical
+biochemically
+biochemistry
+biofeedback
+biographer
+biographer's
+biographers
+biographic
+biographical
+biographically
+biographies
+biography
+biography's
+biological
+biologically
+biologicals
+biologist
+biologist's
+biologists
+biology
+biomedical
+biomedicine
+biopsies
+biopsy
+bipartisan
+bipartite
+bipartitely
+bipartition
+biped
+bipeds
+biplane
+biplane's
+biplanes
+bipolar
+biracial
+birch
+birchen
+bircher
+birches
+bird
+bird's
+birdbath
+birdbath's
+birdbaths
+birder
+birdie
+birdied
+birdies
+birdlike
+birds
+birefringence
+birefringent
+birth
+birthday
+birthday's
+birthdays
+birthed
+birthplace
+birthplaces
+birthright
+birthright's
+birthrights
+births
+biscuit
+biscuit's
+biscuits
+bisect
+bisected
+bisecting
+bisection
+bisection's
+bisections
+bisector
+bisector's
+bisectors
+bisects
+bishop
+bishop's
+bishops
+bismuth
+bison
+bison's
+bisons
+bisque
+bisques
+bit
+bit's
+bitblt
+bitblts
+bitch
+bitch's
+bitches
+bite
+biter
+biters
+bites
+biting
+bitingly
+bitmap
+bitmap's
+bitmaps
+bits
+bitser
+bitten
+bitter
+bitterer
+bitterest
+bitterly
+bitterness
+bitters
+bittersweet
+bittersweetly
+bittersweetness
+bituminous
+bitwise
+bivalve
+bivalve's
+bivalved
+bivalves
+bivariate
+bivouac
+bivouacs
+biweekly
+bizarre
+bizarrely
+bizarreness
+blab
+blabbed
+blabbermouth
+blabbermouths
+blabbing
+blabs
+black
+blackberries
+blackberry
+blackberry's
+blackbird
+blackbird's
+blackbirder
+blackbirds
+blackboard
+blackboard's
+blackboards
+blacked
+blacken
+blackened
+blackener
+blackening
+blackens
+blacker
+blackest
+blacking
+blackjack
+blackjack's
+blackjacks
+blacklist
+blacklisted
+blacklister
+blacklisting
+blacklists
+blackly
+blackmail
+blackmailed
+blackmailer
+blackmailers
+blackmailing
+blackmails
+blackness
+blackout
+blackout's
+blackouts
+blacks
+blacksmith
+blacksmith's
+blacksmithing
+blacksmiths
+bladder
+bladder's
+bladders
+blade
+blade's
+bladed
+blades
+blamable
+blame
+blamed
+blameless
+blamelessly
+blamelessness
+blamer
+blamers
+blames
+blaming
+blanch
+blanched
+blancher
+blanches
+blanching
+bland
+blandly
+blandness
+blank
+blanked
+blanker
+blankest
+blanket
+blanketed
+blanketer
+blanketers
+blanketing
+blankets
+blanking
+blankly
+blankness
+blanks
+blare
+blared
+blares
+blaring
+blase
+blaspheme
+blasphemed
+blasphemer
+blasphemes
+blasphemies
+blaspheming
+blasphemous
+blasphemously
+blasphemousness
+blasphemy
+blast
+blasted
+blaster
+blasters
+blasting
+blasts
+blatant
+blatantly
+blatantness
+blaze
+blazed
+blazer
+blazers
+blazes
+blazing
+blazingly
+bleach
+bleached
+bleacher
+bleachers
+bleaches
+bleaching
+bleak
+bleakly
+bleakness
+blear
+bleariness
+bleary
+bleat
+bleater
+bleating
+bleats
+bled
+bleed
+bleeder
+bleeders
+bleeding
+bleedings
+bleeds
+blemish
+blemish's
+blemished
+blemishes
+blemishing
+blend
+blended
+blender
+blenders
+blending
+blends
+bless
+blessed
+blessedly
+blessedness
+blesses
+blessing
+blessings
+blew
+blight
+blighted
+blighter
+blimp
+blimp's
+blimps
+blind
+blinded
+blinder
+blinders
+blindfold
+blindfolded
+blindfolding
+blindfolds
+blinding
+blindingly
+blindly
+blindness
+blinds
+blink
+blinked
+blinker
+blinkered
+blinkering
+blinkers
+blinking
+blinks
+blip
+blip's
+blips
+bliss
+blissful
+blissfully
+blissfulness
+blister
+blistered
+blistering
+blisteringly
+blisters
+blithe
+blithely
+blither
+blithest
+blitz
+blitz's
+blitzes
+blitzkrieg
+blizzard
+blizzard's
+blizzards
+bloat
+bloated
+bloater
+bloaters
+bloating
+bloats
+blob
+blob's
+blobs
+bloc
+bloc's
+block
+block's
+blockade
+blockaded
+blockader
+blockades
+blockading
+blockage
+blockage's
+blockages
+blocked
+blocker
+blockers
+blockhouse
+blockhouses
+blocking
+blocks
+blocs
+bloke
+bloke's
+blokes
+blond
+blond's
+blonde
+blonde's
+blondes
+blonds
+blood
+blooded
+bloodhound
+bloodhound's
+bloodhounds
+bloodied
+bloodiest
+bloodiness
+bloodless
+bloodlessly
+bloodlessness
+bloods
+bloodshed
+bloodshot
+bloodstain
+bloodstain's
+bloodstained
+bloodstains
+bloodstream
+bloody
+bloodying
+bloom
+bloomed
+bloomer
+bloomers
+blooming
+blooms
+blossom
+blossomed
+blossoms
+blot
+blot's
+blots
+blotted
+blotting
+blouse
+blouse's
+blouses
+blousing
+blow
+blowed
+blower
+blowers
+blowfish
+blowing
+blown
+blows
+blowup
+blubber
+blubbered
+blubbering
+bludgeon
+bludgeoned
+bludgeoning
+bludgeons
+blue
+blueberries
+blueberry
+blueberry's
+bluebird
+bluebird's
+bluebirds
+bluebonnet
+bluebonnet's
+bluebonnets
+blued
+bluefish
+bluely
+blueness
+blueprint
+blueprint's
+blueprinted
+blueprinting
+blueprints
+bluer
+blues
+bluest
+bluestocking
+bluff
+bluffed
+bluffer
+bluffing
+bluffly
+bluffness
+bluffs
+bluing
+bluish
+bluishness
+blunder
+blundered
+blunderer
+blundering
+blunderingly
+blunderings
+blunders
+blunt
+blunted
+blunter
+bluntest
+blunting
+bluntly
+bluntness
+blunts
+blur
+blur's
+blurb
+blurred
+blurredly
+blurrier
+blurriness
+blurring
+blurringly
+blurry
+blurs
+blurt
+blurted
+blurter
+blurting
+blurts
+blush
+blushed
+blusher
+blushes
+blushing
+blushingly
+bluster
+blustered
+blusterer
+blustering
+blusteringly
+blusters
+blustery
+boar
+board
+boarded
+boarder
+boarders
+boarding
+boardinghouse
+boardinghouse's
+boardinghouses
+boards
+boast
+boasted
+boaster
+boasters
+boastful
+boastfully
+boastfulness
+boasting
+boastings
+boasts
+boat
+boated
+boater
+boaters
+boathouse
+boathouse's
+boathouses
+boating
+boatload
+boatload's
+boatloads
+boatman
+boatmen
+boats
+boatswain
+boatswain's
+boatswains
+boatyard
+boatyard's
+boatyards
+bob
+bob's
+bobbed
+bobbies
+bobbin
+bobbin's
+bobbing
+bobbins
+bobby
+bobolink
+bobolink's
+bobolinks
+bobs
+bobwhite
+bobwhite's
+bobwhites
+bode
+boded
+bodes
+bodice
+bodied
+bodies
+bodily
+boding
+body
+bodybuilder
+bodybuilder's
+bodybuilders
+bodybuilding
+bodyguard
+bodyguard's
+bodyguards
+bodying
+bog
+bog's
+bogged
+boggle
+boggled
+boggles
+boggling
+bogs
+bogus
+boil
+boiled
+boiler
+boilerplate
+boilers
+boiling
+boils
+boisterous
+boisterously
+boisterousness
+bold
+bolder
+boldest
+boldface
+boldfaced
+boldfaces
+boldfacing
+boldly
+boldness
+boll
+bolster
+bolstered
+bolsterer
+bolstering
+bolsters
+bolt
+bolted
+bolter
+bolting
+bolts
+bomb
+bombard
+bombarded
+bombarding
+bombardment
+bombardments
+bombards
+bombast
+bombaster
+bombastic
+bombed
+bomber
+bombers
+bombing
+bombings
+bombproof
+bombs
+bonanza
+bonanza's
+bonanzas
+bond
+bondage
+bonded
+bonder
+bonders
+bonding
+bonds
+bondsman
+bondsmen
+bone
+boned
+boner
+boners
+bones
+bonfire
+bonfire's
+bonfires
+bong
+bonier
+boning
+bonnet
+bonneted
+bonnets
+bonnier
+bonny
+bonus
+bonus's
+bonuses
+bony
+boo
+boob
+boobies
+booboo
+booby
+book
+bookcase
+bookcase's
+bookcases
+booked
+booker
+bookers
+bookie
+bookie's
+bookies
+booking
+bookings
+bookish
+bookishly
+bookishness
+bookkeeper
+bookkeeper's
+bookkeepers
+bookkeeping
+booklet
+booklet's
+booklets
+books
+bookseller
+bookseller's
+booksellers
+bookshelf
+bookshelf's
+bookshelves
+bookstore
+bookstore's
+bookstores
+boolean
+booleans
+boom
+boomed
+boomer
+boomerang
+boomerang's
+boomerangs
+booming
+booms
+boon
+boor
+boor's
+boorish
+boorishly
+boorishness
+boors
+boos
+boost
+boosted
+booster
+boosting
+boosts
+boot
+booted
+booth
+booths
+booties
+booting
+bootleg
+bootlegged
+bootlegger
+bootlegger's
+bootleggers
+bootlegging
+bootlegs
+boots
+bootstrap
+bootstrap's
+bootstrapped
+bootstrapping
+bootstraps
+booty
+booze
+boozer
+boozing
+borate
+borated
+borates
+borax
+bordello
+bordello's
+bordellos
+border
+bordered
+borderer
+bordering
+borderings
+borderland
+borderland's
+borderlands
+borderline
+borders
+bore
+bored
+boredom
+borer
+borers
+bores
+boric
+boring
+boringly
+boringness
+born
+borne
+boron
+borough
+boroughs
+borrow
+borrowed
+borrower
+borrowers
+borrowing
+borrowings
+borrows
+bosom
+bosom's
+bosoms
+boss
+bossed
+bosses
+bosun
+botanical
+botanically
+botanist
+botanist's
+botanists
+botany
+botch
+botched
+botcher
+botchers
+botches
+botching
+both
+bother
+bothered
+bothering
+bothers
+bothersome
+bottle
+bottled
+bottleneck
+bottleneck's
+bottlenecks
+bottler
+bottlers
+bottles
+bottling
+bottom
+bottomed
+bottomer
+bottoming
+bottomless
+bottomlessly
+bottomlessness
+bottoms
+botulinus
+botulism
+bouffant
+bough
+bough's
+boughed
+boughs
+bought
+boughten
+boulder
+boulder's
+bouldered
+boulders
+boulevard
+boulevard's
+boulevards
+bounce
+bounced
+bouncer
+bouncers
+bounces
+bouncier
+bouncing
+bouncingly
+bouncy
+bound
+boundaries
+boundary
+boundary's
+bounded
+bounden
+bounder
+bounding
+boundless
+boundlessly
+boundlessness
+bounds
+bounteous
+bounteously
+bounteousness
+bountied
+bounties
+bounty
+bounty's
+bouquet
+bouquet's
+bouquets
+bourbon
+bourbons
+bourgeois
+bourgeoisie
+bout
+bout's
+bouts
+bovine
+bovinely
+bovines
+bow
+bowed
+bowel
+bowel's
+bowels
+bowen
+bower
+bowers
+bowing
+bowl
+bowled
+bowler
+bowlers
+bowline
+bowline's
+bowlines
+bowling
+bowls
+bowman
+bows
+bowser
+bowstring
+bowstring's
+bowstrings
+box
+boxcar
+boxcar's
+boxcars
+boxed
+boxer
+boxers
+boxes
+boxing
+boxwood
+boy
+boy's
+boycott
+boycotted
+boycotter
+boycotting
+boycotts
+boyer
+boyfriend
+boyfriend's
+boyfriends
+boyhood
+boyish
+boyishly
+boyishness
+boys
+bra
+bra's
+brace
+braced
+bracelet
+bracelet's
+bracelets
+bracer
+braces
+bracing
+bracket
+bracketed
+bracketing
+brackets
+brackish
+brackishness
+brae
+brae's
+braes
+brag
+bragged
+bragger
+bragging
+brags
+braid
+braided
+braider
+braiding
+braids
+braille
+brain
+brainchild
+brainchild's
+brained
+brainier
+braininess
+braining
+brains
+brainstorm
+brainstorm's
+brainstormer
+brainstorming
+brainstorms
+brainwash
+brainwashed
+brainwasher
+brainwashes
+brainwashing
+brainy
+brake
+braked
+brakes
+braking
+bramble
+bramble's
+brambles
+brambling
+brambly
+bran
+branch
+branched
+branches
+branching
+branchings
+brand
+branded
+brander
+brandied
+brandies
+branding
+brandish
+brandishes
+brandishing
+brands
+brandy
+brandying
+bras
+brash
+brashly
+brashness
+brass
+brassed
+brasses
+brassier
+brassiere
+brassiness
+brassy
+brat
+brat's
+brats
+bravado
+brave
+braved
+bravely
+braveness
+braver
+bravery
+braves
+bravest
+braving
+bravo
+bravoed
+bravoing
+bravos
+bravura
+brawl
+brawled
+brawler
+brawling
+brawls
+brawn
+bray
+brayed
+brayer
+braying
+brays
+braze
+brazed
+brazen
+brazened
+brazening
+brazenly
+brazenness
+brazer
+brazes
+brazier
+brazier's
+braziers
+brazing
+breach
+breached
+breacher
+breachers
+breaches
+breaching
+bread
+breadboard
+breadboard's
+breadboards
+breaded
+breading
+breads
+breadth
+breadwinner
+breadwinner's
+breadwinners
+break
+breakable
+breakables
+breakage
+breakaway
+breakdown
+breakdown's
+breakdowns
+breaker
+breakers
+breakfast
+breakfasted
+breakfaster
+breakfasters
+breakfasting
+breakfasts
+breaking
+breakpoint
+breakpoint's
+breakpointed
+breakpointing
+breakpoints
+breaks
+breakthrough
+breakthrough's
+breakthroughes
+breakthroughs
+breakup
+breakups
+breakwater
+breakwater's
+breakwaters
+breast
+breasted
+breasting
+breasts
+breastwork
+breastwork's
+breastworks
+breath
+breathable
+breathe
+breathed
+breather
+breathers
+breathes
+breathier
+breathing
+breathless
+breathlessly
+breathlessness
+breaths
+breathtaking
+breathtakingly
+breathy
+bred
+breech
+breech's
+breeches
+breeching
+breed
+breeder
+breeding
+breeds
+breeze
+breeze's
+breezed
+breezes
+breezier
+breezily
+breeziness
+breezing
+breezy
+bremsstrahlung
+brethren
+breve
+breves
+brevet
+breveted
+breveting
+brevets
+brevity
+brew
+brewed
+brewer
+breweries
+brewers
+brewery
+brewery's
+brewing
+brews
+briar
+briar's
+briars
+bribe
+bribed
+briber
+bribers
+bribes
+bribing
+brick
+bricked
+bricker
+bricking
+bricklayer
+bricklayer's
+bricklayers
+bricklaying
+bricks
+bridal
+bride
+bride's
+bridegroom
+brides
+bridesmaid
+bridesmaid's
+bridesmaids
+bridge
+bridgeable
+bridged
+bridgehead
+bridgehead's
+bridgeheads
+bridges
+bridgework
+bridgework's
+bridging
+bridle
+bridled
+bridles
+bridling
+brief
+briefcase
+briefcase's
+briefcases
+briefed
+briefer
+briefest
+briefing
+briefing's
+briefings
+briefly
+briefness
+briefs
+brier
+brig
+brig's
+brigade
+brigade's
+brigaded
+brigades
+brigadier
+brigadier's
+brigadiers
+brigading
+brigantine
+bright
+brighten
+brightened
+brightener
+brighteners
+brightening
+brightens
+brighter
+brightest
+brighting
+brightly
+brightness
+brightnesses
+brights
+brigs
+brilliance
+brilliancy
+brilliant
+brilliantly
+brilliantness
+brim
+brimful
+brimmed
+brindle
+brindled
+brine
+briner
+bring
+bringer
+bringers
+bringing
+brings
+brining
+brink
+brinkmanship
+brisk
+brisker
+briskly
+briskness
+bristle
+bristled
+bristles
+bristling
+britches
+brittle
+brittled
+brittlely
+brittleness
+brittler
+brittlest
+brittling
+broach
+broached
+broacher
+broaches
+broaching
+broad
+broadband
+broadcast
+broadcasted
+broadcaster
+broadcasters
+broadcasting
+broadcastings
+broadcasts
+broaden
+broadened
+broadener
+broadeners
+broadening
+broadenings
+broadens
+broader
+broadest
+broadly
+broadness
+broads
+broadside
+brocade
+brocaded
+broccoli
+brochure
+brochure's
+brochures
+broil
+broiled
+broiler
+broilers
+broiling
+broils
+broke
+broken
+brokenly
+brokenness
+broker
+brokerage
+brokers
+bromide
+bromide's
+bromides
+bromine
+bromines
+bronchi
+bronchial
+bronchiole
+bronchiole's
+bronchioles
+bronchitis
+bronchus
+bronze
+bronzed
+bronzer
+bronzes
+bronzing
+brooch
+brooch's
+brooches
+brood
+brooder
+brooding
+broodingly
+broods
+brook
+brooked
+brooks
+broom
+broom's
+broomed
+brooming
+brooms
+broomstick
+broomstick's
+broomsticks
+broth
+brothel
+brothel's
+brothels
+brother
+brother's
+brotherhood
+brotherliness
+brotherly
+brothers
+brought
+brow
+brow's
+browbeat
+browbeaten
+browbeating
+browbeats
+brown
+browned
+browner
+brownest
+brownie
+brownie's
+brownies
+browning
+brownings
+brownish
+brownly
+brownness
+browns
+brows
+browse
+browsed
+browser
+browsers
+browses
+browsing
+bruise
+bruised
+bruiser
+bruisers
+bruises
+bruising
+brunch
+brunches
+brunette
+brunettes
+brunt
+brush
+brushed
+brusher
+brushes
+brushfire
+brushfire's
+brushfires
+brushier
+brushing
+brushlike
+brushy
+brusque
+brusquely
+brusqueness
+brutal
+brutalities
+brutality
+brutally
+brute
+brute's
+brutes
+brutish
+brutishly
+brutishness
+bubble
+bubbled
+bubbler
+bubbles
+bubblier
+bubbling
+bubbly
+buck
+buckboard
+buckboard's
+buckboards
+bucked
+bucker
+bucket
+bucket's
+bucketed
+bucketing
+buckets
+bucking
+buckle
+buckled
+buckler
+buckles
+buckling
+bucks
+buckshot
+buckskin
+buckskins
+buckwheat
+bucolic
+bud
+bud's
+budded
+buddies
+budding
+buddy
+buddy's
+budge
+budged
+budges
+budget
+budgetary
+budgeted
+budgeter
+budgeters
+budgeting
+budgets
+budging
+buds
+buff
+buff's
+buffalo
+buffaloes
+buffer
+buffer's
+buffered
+bufferer
+bufferer's
+bufferers
+buffering
+buffers
+buffet
+buffeted
+buffeting
+buffetings
+buffets
+buffing
+buffoon
+buffoon's
+buffoons
+buffs
+bug
+bug's
+bugged
+bugger
+bugger's
+buggered
+buggering
+buggers
+buggies
+bugging
+buggy
+buggy's
+bugle
+bugled
+bugler
+bugles
+bugling
+bugs
+build
+builded
+builder
+builders
+building
+building's
+buildings
+builds
+buildup
+buildup's
+buildups
+built
+bulb
+bulb's
+bulbed
+bulbs
+bulge
+bulged
+bulges
+bulging
+bulk
+bulked
+bulkhead
+bulkhead's
+bulkheaded
+bulkheads
+bulkier
+bulkiness
+bulks
+bulky
+bull
+bulldog
+bulldog's
+bulldogs
+bulldoze
+bulldozed
+bulldozer
+bulldozers
+bulldozes
+bulldozing
+bulled
+bullet
+bullet's
+bulletin
+bulletin's
+bulletins
+bulletproof
+bulletproofed
+bulletproofing
+bulletproofs
+bullets
+bullied
+bullies
+bulling
+bullion
+bullish
+bullishly
+bullishness
+bulls
+bully
+bullying
+bulwark
+bum
+bum's
+bumble
+bumblebee
+bumblebee's
+bumblebees
+bumbled
+bumbler
+bumblers
+bumbles
+bumbling
+bumblingly
+bummed
+bummer
+bummers
+bumming
+bump
+bumped
+bumper
+bumpers
+bumping
+bumps
+bumptious
+bumptiously
+bumptiousness
+bums
+bun
+bun's
+bunch
+bunched
+bunches
+bunching
+bundle
+bundled
+bundler
+bundles
+bundling
+bungalow
+bungalow's
+bungalows
+bungle
+bungled
+bungler
+bunglers
+bungles
+bungling
+bunglingly
+bunion
+bunion's
+bunions
+bunk
+bunked
+bunker
+bunker's
+bunkered
+bunkering
+bunkers
+bunkhouse
+bunkhouse's
+bunkhouses
+bunking
+bunkmate
+bunkmate's
+bunkmates
+bunks
+bunnies
+bunny
+bunny's
+buns
+bunt
+bunted
+bunter
+bunters
+bunting
+bunts
+buoy
+buoyancy
+buoyant
+buoyantly
+buoyed
+buoying
+buoys
+burden
+burden's
+burdened
+burdening
+burdens
+burdensome
+burdensomely
+burdensomeness
+bureau
+bureau's
+bureaucracies
+bureaucracy
+bureaucracy's
+bureaucrat
+bureaucrat's
+bureaucratic
+bureaucrats
+bureaus
+burgeon
+burgeoned
+burgeoning
+burgeons
+burger
+burgess
+burgess's
+burgesses
+burgher
+burgher's
+burghers
+burglar
+burglar's
+burglaries
+burglarproof
+burglarproofed
+burglarproofing
+burglarproofs
+burglars
+burglary
+burglary's
+burgle
+burgled
+burgles
+burgling
+burial
+buried
+burier
+buries
+burl
+burled
+burler
+burlesque
+burlesqued
+burlesquely
+burlesquer
+burlesques
+burlesquing
+burlier
+burliness
+burly
+burn
+burned
+burner
+burners
+burning
+burningly
+burnings
+burnish
+burnished
+burnisher
+burnishes
+burnishing
+burns
+burnt
+burntly
+burntness
+burp
+burped
+burping
+burps
+burr
+burr's
+burred
+burrer
+burro
+burro's
+burros
+burrow
+burrowed
+burrower
+burrowing
+burrows
+burrs
+bursa
+bursas
+bursitis
+burst
+bursted
+burster
+bursting
+bursts
+bury
+burying
+bus
+busboy
+busboy's
+busboys
+bused
+buses
+bush
+bushed
+bushel
+bushel's
+bushels
+bushes
+bushier
+bushiness
+bushing
+bushings
+bushwhack
+bushwhacked
+bushwhacker
+bushwhacking
+bushwhacks
+bushy
+busied
+busier
+busies
+busiest
+busily
+business
+business's
+businesses
+businesslike
+businessman
+businessmen
+busing
+buss
+bussed
+busses
+bussing
+bust
+bustard
+bustard's
+bustards
+busted
+buster
+busting
+bustle
+bustled
+bustling
+bustlingly
+busts
+busy
+busying
+but
+butane
+butcher
+butcher's
+butchered
+butcherer
+butchering
+butcherly
+butchers
+butchery
+butler
+butler's
+butlers
+butt
+butt's
+butte
+butted
+butter
+buttered
+butterer
+butterers
+butterfat
+butterflies
+butterfly
+butterfly's
+buttering
+butternut
+butters
+buttes
+butting
+buttock
+buttock's
+buttocks
+button
+buttoned
+buttoner
+buttonhole
+buttonhole's
+buttonholer
+buttonholes
+buttoning
+buttons
+buttress
+buttressed
+buttresses
+buttressing
+butts
+butyl
+butyrate
+buxom
+buxomly
+buxomness
+buy
+buyer
+buyer's
+buyers
+buying
+buys
+buzz
+buzzard
+buzzard's
+buzzards
+buzzed
+buzzer
+buzzes
+buzzing
+buzzword
+buzzword's
+buzzwords
+buzzy
+by
+bye
+byers
+byes
+bygone
+bygones
+bylaw
+bylaw's
+bylaws
+byline
+byline's
+byliner
+bylines
+bypass
+bypassed
+bypasses
+bypassing
+byproduct
+byproduct's
+byproducts
+bystander
+bystander's
+bystanders
+byte
+byte's
+bytes
+byway
+byways
+byword
+byword's
+bywords
+cab
+cab's
+cabbage
+cabbage's
+cabbaged
+cabbages
+cabbaging
+caber
+cabin
+cabin's
+cabinet
+cabinet's
+cabinets
+cabins
+cable
+cabled
+cables
+cabling
+cabs
+cache
+cache's
+cached
+cacher
+caches
+caching
+cackle
+cackled
+cackler
+cackles
+cackling
+cacti
+cactus
+cactuses
+cad
+cadence
+cadenced
+cadences
+cadencing
+cafe
+cafe's
+cafes
+cafeteria
+cafeteria's
+cafeterias
+cage
+caged
+cager
+cagers
+cages
+caging
+cajole
+cajoled
+cajoler
+cajoles
+cajoling
+cake
+caked
+cakes
+caking
+calamities
+calamity
+calamity's
+calcium
+calculate
+calculated
+calculatedly
+calculatedness
+calculates
+calculating
+calculation
+calculations
+calculative
+calculator
+calculator's
+calculators
+calculus
+calendar
+calendar's
+calendared
+calendaring
+calendars
+calf
+calfs
+calibrate
+calibrated
+calibrater
+calibrates
+calibrating
+calibration
+calibrations
+calibrator
+calibrators
+calico
+caliph
+caliphs
+call
+called
+caller
+caller's
+callers
+calling
+callous
+calloused
+callously
+callousness
+calls
+calm
+calmed
+calmer
+calmest
+calming
+calmingly
+calmly
+calmness
+calms
+calorie
+calorie's
+calories
+calves
+came
+camel
+camel's
+camels
+camera
+camera's
+cameras
+camion
+camouflage
+camouflaged
+camouflages
+camouflaging
+camp
+campaign
+campaigned
+campaigner
+campaigners
+campaigning
+campaigns
+camped
+camper
+campers
+camping
+camps
+campus
+campus's
+campuses
+can
+can's
+can't
+canal
+canal's
+canals
+canaries
+canary
+canary's
+cancel
+cancellation
+cancellation's
+cancellations
+cancels
+cancer
+cancer's
+cancers
+candid
+candidate
+candidate's
+candidates
+candidly
+candidness
+candied
+candies
+candle
+candled
+candler
+candles
+candlestick
+candlestick's
+candlesticks
+candling
+candy
+candying
+cane
+caned
+caner
+canes
+caning
+canker
+cankered
+cankering
+canned
+canner
+canner's
+canners
+cannibal
+cannibal's
+cannibals
+canning
+cannister
+cannister's
+cannisters
+cannon
+cannon's
+cannoned
+cannoning
+cannons
+cannot
+canoe
+canoe's
+canoed
+canoes
+canon
+canon's
+canonical
+canonically
+canonicals
+canons
+canopy
+cans
+cantankerous
+cantankerously
+cantankerousness
+canto
+canton
+canton's
+cantons
+cantor
+cantor's
+cantors
+cantos
+canvas
+canvas's
+canvaser
+canvases
+canvass
+canvassed
+canvasser
+canvassers
+canvasses
+canvassing
+canyon
+canyon's
+canyons
+cap
+cap's
+capabilities
+capability
+capability's
+capable
+capableness
+capably
+capacious
+capaciously
+capaciousness
+capacitance
+capacitances
+capacities
+capacitive
+capacitively
+capacitor
+capacitor's
+capacitors
+capacity
+cape
+caper
+capered
+capering
+capers
+capes
+capillary
+capita
+capital
+capitalism
+capitalist
+capitalist's
+capitalists
+capitally
+capitals
+capitol
+capitol's
+capitols
+capped
+capping
+capricious
+capriciously
+capriciousness
+caps
+captain
+captained
+captaining
+captains
+caption
+caption's
+captioned
+captioner
+captioning
+captions
+captivate
+captivated
+captivates
+captivating
+captivation
+captive
+captive's
+captives
+captivity
+captor
+captor's
+captors
+capture
+captured
+capturer
+capturers
+captures
+capturing
+car
+car's
+caravan
+caravan's
+caravaner
+caravans
+carbohydrate
+carbohydrate's
+carbohydrates
+carbolic
+carbon
+carbon's
+carbonate
+carbonated
+carbonates
+carbonation
+carbonic
+carbons
+carcass
+carcass's
+carcasses
+card
+card's
+cardboard
+cardboards
+carded
+carder
+cardiac
+cardinal
+cardinalities
+cardinality
+cardinality's
+cardinally
+cardinals
+carding
+cards
+care
+cared
+career
+career's
+careered
+careering
+careers
+carefree
+careful
+carefully
+carefulness
+careless
+carelessly
+carelessness
+carer
+carers
+cares
+caress
+caressed
+caresser
+caresses
+caressing
+caressingly
+caressive
+caressively
+caret
+carets
+cargo
+cargoes
+cargos
+caribou
+caribous
+caring
+carnation
+carnations
+carnival
+carnival's
+carnivals
+carnivorous
+carnivorously
+carnivorousness
+carol
+carol's
+carols
+carpenter
+carpenter's
+carpentered
+carpentering
+carpenters
+carpet
+carpeted
+carpeting
+carpets
+carriage
+carriage's
+carriages
+carried
+carrier
+carriers
+carries
+carrot
+carrot's
+carrots
+carry
+carrying
+carryover
+carryovers
+cars
+cart
+carted
+carter
+carters
+carting
+cartography
+carton
+carton's
+cartons
+cartoon
+cartoon's
+cartoons
+cartridge
+cartridge's
+cartridges
+carts
+carve
+carved
+carver
+carvers
+carves
+carving
+carvings
+cascade
+cascaded
+cascades
+cascading
+case
+cased
+casement
+casement's
+casements
+cases
+cash
+cashed
+casher
+cashers
+cashes
+cashier
+cashier's
+cashiers
+cashing
+casing
+casings
+cask
+cask's
+casket
+casket's
+caskets
+casks
+casserole
+casserole's
+casseroles
+cast
+cast's
+caste
+caste's
+casted
+caster
+casters
+castes
+casteth
+casting
+castings
+castle
+castled
+castles
+castling
+casts
+casual
+casually
+casualness
+casuals
+casualties
+casualty
+casualty's
+cat
+cat's
+catalyst
+catalyst's
+catalysts
+cataract
+cataracts
+catastrophe
+catastrophe's
+catastrophes
+catastrophic
+catch
+catchable
+catcher
+catcher's
+catchers
+catches
+catching
+categorical
+categorically
+categories
+category
+category's
+cater
+catered
+caterer
+catering
+caterpillar
+caterpillar's
+caterpillars
+caters
+cathedral
+cathedral's
+cathedrals
+catheter
+catheters
+cathode
+cathode's
+cathodes
+catholic
+catholic's
+catholics
+cats
+catsup
+cattle
+caught
+causal
+causality
+causally
+causation
+causation's
+causations
+cause
+caused
+causer
+causes
+causeway
+causeway's
+causeways
+causing
+caustic
+causticly
+caustics
+caution
+cautioned
+cautioner
+cautioners
+cautioning
+cautionings
+cautions
+cautious
+cautiously
+cautiousness
+cavalier
+cavalierly
+cavalierness
+cavalry
+cave
+caveat
+caveat's
+caveats
+caved
+caver
+cavern
+cavern's
+caverns
+caves
+caving
+cavities
+cavity
+cavity's
+caw
+cawed
+cawing
+caws
+cease
+ceased
+ceaseless
+ceaselessly
+ceaselessness
+ceases
+ceasing
+cedar
+ceiling
+ceiling's
+ceilinged
+ceilings
+celebrate
+celebrated
+celebratedness
+celebrates
+celebrating
+celebration
+celebrations
+celebratory
+celebrities
+celebrity
+celebrity's
+celery
+celestial
+celestially
+celibate
+celibates
+cell
+cellar
+cellar's
+cellared
+cellarer
+cellaring
+cellars
+celled
+cellist
+cellist's
+cellists
+cells
+cellular
+cellularly
+cement
+cemented
+cementer
+cementing
+cements
+cemeteries
+cemetery
+cemetery's
+censor
+censored
+censoring
+censors
+censorship
+censure
+censured
+censurer
+censures
+censuring
+census
+census's
+censuses
+cent
+centipede
+centipede's
+centipedes
+central
+centrally
+centrals
+centrifuge
+centrifuge's
+centrifuged
+centrifuges
+centrifuging
+centripetal
+centripetally
+cents
+centuries
+century
+century's
+cereal
+cereal's
+cereals
+cerebral
+cerebrally
+ceremonial
+ceremonially
+ceremonialness
+ceremonies
+ceremony
+ceremony's
+certain
+certainly
+certainties
+certainty
+certifiable
+certificate
+certificated
+certificates
+certificating
+certification
+certifications
+certified
+certifier
+certifiers
+certifies
+certify
+certifying
+cessation
+cessation's
+cessations
+chafe
+chafer
+chaff
+chaffer
+chaffered
+chafferer
+chaffering
+chaffing
+chafing
+chagrin
+chagrined
+chagrining
+chagrins
+chain
+chained
+chaining
+chains
+chair
+chaired
+chairing
+chairman
+chairmanship
+chairmanships
+chairmen
+chairperson
+chairperson's
+chairpersons
+chairs
+chalice
+chalice's
+chaliced
+chalices
+chalk
+chalked
+chalking
+chalks
+challenge
+challenged
+challenger
+challengers
+challenges
+challenging
+challengingly
+chamber
+chambered
+chamberer
+chamberers
+chambering
+chamberlain
+chamberlain's
+chamberlains
+chambers
+champagne
+champaign
+champion
+championed
+championing
+champions
+championship
+championship's
+championships
+chance
+chanced
+chancellor
+chancellors
+chances
+chancing
+chandelier
+chandelier's
+chandeliers
+change
+changeability
+changeable
+changeableness
+changeably
+changed
+changeover
+changeover's
+changeovers
+changer
+changers
+changes
+changing
+channel
+channels
+chant
+chanted
+chanter
+chanticleer
+chanticleer's
+chanticleers
+chanting
+chants
+chaos
+chaotic
+chap
+chap's
+chapel
+chapel's
+chapels
+chaperon
+chaperoned
+chaplain
+chaplain's
+chaplains
+chaps
+chapter
+chapter's
+chaptered
+chaptering
+chapters
+char
+character
+character's
+charactered
+charactering
+characteristic
+characteristic's
+characteristically
+characteristics
+characters
+charcoal
+charcoaled
+charcoals
+charge
+chargeable
+chargeableness
+charged
+charger
+chargers
+charges
+charging
+charing
+chariot
+chariot's
+chariots
+charitable
+charitableness
+charities
+charity
+charity's
+charm
+charmed
+charmer
+charmers
+charming
+charmingly
+charms
+chars
+chart
+chartable
+charted
+charter
+chartered
+charterer
+charterers
+chartering
+charters
+charting
+chartings
+charts
+chase
+chased
+chaser
+chasers
+chases
+chasing
+chasm
+chasm's
+chasms
+chaste
+chastely
+chasteness
+chaster
+chastest
+chastise
+chastised
+chastiser
+chastisers
+chastises
+chastising
+chat
+chateau
+chateau's
+chateaus
+chats
+chatter
+chattered
+chatterer
+chatterers
+chattering
+chatterly
+chatters
+chauffeur
+chauffeured
+chauffeuring
+chauffeurs
+chauvinism
+chauvinism's
+chauvinist
+chauvinist's
+chauvinistic
+chauvinists
+cheap
+cheapen
+cheapened
+cheapening
+cheapens
+cheaper
+cheapest
+cheaply
+cheapness
+cheat
+cheated
+cheater
+cheaters
+cheating
+cheats
+check
+checkable
+checked
+checker
+checkered
+checkering
+checkers
+checking
+checkout
+checkouts
+checkpoint
+checkpoint's
+checkpoints
+checks
+checksum
+checksum's
+checksums
+cheek
+cheek's
+cheeks
+cheer
+cheered
+cheerer
+cheerers
+cheerful
+cheerfully
+cheerfulness
+cheerier
+cheerily
+cheeriness
+cheering
+cheerless
+cheerlessly
+cheerlessness
+cheerly
+cheers
+cheery
+cheese
+cheese's
+cheesed
+cheeses
+cheesing
+chef
+chef's
+chefs
+chemical
+chemically
+chemicals
+chemise
+chemises
+chemist
+chemist's
+chemistries
+chemistry
+chemists
+cherish
+cherished
+cherisher
+cherishes
+cherishing
+cherries
+cherry
+cherry's
+cherub
+cherub's
+cherubim
+cherubs
+chess
+chest
+chester
+chestnut
+chestnut's
+chestnuts
+chests
+chew
+chewed
+chewer
+chewers
+chewing
+chews
+chick
+chickadee
+chickadee's
+chickadees
+chicken
+chickened
+chickening
+chickens
+chicks
+chide
+chided
+chides
+chiding
+chief
+chief's
+chiefly
+chiefs
+chieftain
+chieftain's
+chieftains
+chiffon
+child
+child's
+childhood
+childhoods
+childish
+childishly
+childishness
+childly
+children
+children's
+chill
+chilled
+chiller
+chillers
+chillier
+chillies
+chilliness
+chilling
+chillingly
+chillness
+chills
+chilly
+chime
+chime's
+chimed
+chimer
+chimes
+chiming
+chimney
+chimney's
+chimneyed
+chimneys
+chin
+chin's
+chink
+chinked
+chinks
+chinned
+chinner
+chinners
+chinning
+chins
+chintz
+chip
+chip's
+chipmunk
+chipmunk's
+chipmunks
+chips
+chirp
+chirped
+chirping
+chirps
+chisel
+chisels
+chivalrous
+chivalrously
+chivalrousness
+chivalry
+chlorine
+chloroplast
+chloroplast's
+chloroplasts
+chock
+chock's
+chocked
+chocker
+chocking
+chocks
+chocolate
+chocolate's
+chocolates
+choice
+choicely
+choiceness
+choicer
+choices
+choicest
+choir
+choir's
+choirs
+choke
+choked
+choker
+chokers
+chokes
+choking
+chokingly
+cholera
+choose
+chooser
+choosers
+chooses
+choosing
+chop
+chopped
+chopper
+chopper's
+choppers
+chopping
+chops
+choral
+chorally
+chord
+chord's
+chorded
+chording
+chords
+chore
+chores
+choring
+chorion
+chorus
+chorused
+choruses
+chose
+chosen
+christen
+christened
+christening
+christens
+chronic
+chronicle
+chronicled
+chronicler
+chroniclers
+chronicles
+chronological
+chronologically
+chronologies
+chronology
+chronology's
+chubbier
+chubbiest
+chubbiness
+chubby
+chuck
+chuck's
+chucked
+chucking
+chuckle
+chuckled
+chuckles
+chuckling
+chucklingly
+chucks
+chum
+chump
+chump's
+chumping
+chumps
+chums
+chunk
+chunk's
+chunks
+church
+churched
+churches
+churching
+churchliness
+churchly
+churchman
+churchyard
+churchyard's
+churchyards
+churn
+churned
+churner
+churners
+churning
+churns
+chute
+chute's
+chuted
+chutes
+chuting
+cider
+ciders
+cigar
+cigar's
+cigarette
+cigarette's
+cigarettes
+cigars
+cinder
+cinder's
+cinders
+cinnamon
+cipher
+cipher's
+ciphered
+ciphering
+ciphers
+circle
+circled
+circler
+circles
+circling
+circuit
+circuit's
+circuited
+circuiting
+circuitous
+circuitously
+circuitousness
+circuitry
+circuits
+circular
+circular's
+circularities
+circularity
+circularly
+circularness
+circulars
+circulate
+circulated
+circulates
+circulating
+circulation
+circulations
+circulative
+circumference
+circumferences
+circumflex
+circumflexes
+circumlocution
+circumlocution's
+circumlocutions
+circumspect
+circumspectly
+circumstance
+circumstance's
+circumstanced
+circumstances
+circumstancing
+circumstantial
+circumstantially
+circumvent
+circumventable
+circumvented
+circumventing
+circumvents
+circus
+circus's
+circuses
+cistern
+cistern's
+cisterns
+citadel
+citadel's
+citadels
+citation
+citation's
+citations
+cite
+cited
+cites
+citied
+cities
+citing
+citizen
+citizen's
+citizenly
+citizens
+citizenship
+city
+city's
+civic
+civics
+civil
+civilian
+civilian's
+civilians
+civilities
+civility
+civilly
+clad
+clads
+claim
+claimable
+claimant
+claimant's
+claimants
+claimed
+claimer
+claiming
+claims
+clairvoyant
+clairvoyantly
+clairvoyants
+clam
+clam's
+clamber
+clambered
+clamberer
+clambering
+clambers
+clamorous
+clamorously
+clamorousness
+clamp
+clamped
+clamper
+clamping
+clamps
+clams
+clan
+clang
+clanged
+clanger
+clangers
+clanging
+clangs
+clans
+clap
+claps
+clarification
+clarifications
+clarified
+clarifier
+clarifies
+clarify
+clarifying
+clarity
+clash
+clashed
+clasher
+clashes
+clashing
+clasp
+clasped
+clasper
+clasping
+clasps
+class
+classed
+classer
+classes
+classic
+classical
+classically
+classics
+classifiable
+classification
+classifications
+classified
+classifieds
+classifier
+classifiers
+classifies
+classify
+classifying
+classing
+classmate
+classmate's
+classmates
+classroom
+classroom's
+classrooms
+classwork
+clatter
+clattered
+clatterer
+clattering
+clatteringly
+clatters
+clause
+clause's
+clauses
+claw
+clawed
+clawer
+clawing
+claws
+clay
+clay's
+clayed
+claying
+clays
+clean
+cleaned
+cleaner
+cleaner's
+cleaners
+cleanest
+cleaning
+cleanlier
+cleanliness
+cleanly
+cleanness
+cleans
+cleanse
+cleansed
+cleanser
+cleansers
+cleanses
+cleansing
+cleanup
+cleanup's
+cleanups
+clear
+clearance
+clearance's
+clearances
+cleared
+clearer
+clearest
+clearing
+clearing's
+clearings
+clearly
+clearness
+clears
+cleavage
+cleavages
+cleave
+cleaved
+cleaver
+cleavers
+cleaves
+cleaving
+cleft
+cleft's
+clefts
+clench
+clenched
+clenches
+clenching
+clergy
+clergyman
+clerical
+clerically
+clericals
+clerk
+clerk's
+clerked
+clerking
+clerkly
+clerks
+clever
+cleverer
+cleverest
+cleverly
+cleverness
+cliche
+cliche's
+cliches
+click
+clicked
+clicker
+clickers
+clicking
+clicks
+client
+client's
+clients
+cliff
+cliff's
+cliffs
+climate
+climate's
+climates
+climatic
+climatically
+climax
+climaxed
+climaxes
+climaxing
+climb
+climbed
+climber
+climbers
+climbing
+climbs
+clime
+clime's
+climes
+clinch
+clinched
+clincher
+clinches
+clinching
+clinchingly
+cling
+clinging
+clings
+clinic
+clinic's
+clinical
+clinically
+clinics
+clink
+clinked
+clinker
+clinkered
+clinkering
+clinkers
+clip
+clip's
+clipped
+clipper
+clipper's
+clippers
+clipping
+clipping's
+clippings
+clips
+clique
+clique's
+cliques
+cloak
+cloak's
+cloaked
+cloaking
+cloaks
+clobber
+clobbered
+clobbering
+clobbers
+clock
+clocked
+clocker
+clockers
+clocking
+clockings
+clocks
+clockwise
+clockwork
+clod
+clod's
+clods
+clog
+clog's
+clogged
+clogging
+clogs
+cloister
+cloister's
+cloistered
+cloistering
+cloisters
+clone
+cloned
+cloner
+cloners
+clones
+cloning
+close
+closed
+closely
+closeness
+closenesses
+closer
+closers
+closes
+closest
+closet
+closeted
+closets
+closing
+closings
+closure
+closure's
+closured
+closures
+closuring
+cloth
+clothe
+clothed
+clothes
+clothing
+cloud
+clouded
+cloudier
+cloudiest
+cloudiness
+clouding
+cloudless
+cloudlessly
+cloudlessness
+clouds
+cloudy
+clout
+clove
+clover
+cloves
+clown
+clowning
+clowns
+club
+club's
+clubbed
+clubbing
+clubs
+cluck
+clucked
+clucking
+clucks
+clue
+clue's
+clues
+cluing
+clump
+clumped
+clumping
+clumps
+clumsier
+clumsiest
+clumsily
+clumsiness
+clumsy
+clung
+cluster
+clustered
+clustering
+clusterings
+clusters
+clutch
+clutched
+clutches
+clutching
+clutter
+cluttered
+cluttering
+clutters
+coach
+coach's
+coached
+coacher
+coaches
+coaching
+coachman
+coagulate
+coagulated
+coagulates
+coagulating
+coagulation
+coal
+coaled
+coaler
+coalesce
+coalesced
+coalesces
+coalescing
+coaling
+coalition
+coals
+coarse
+coarsely
+coarsen
+coarsened
+coarseness
+coarsening
+coarser
+coarsest
+coast
+coastal
+coasted
+coaster
+coasters
+coasting
+coasts
+coat
+coated
+coater
+coaters
+coating
+coatings
+coats
+coax
+coaxed
+coaxer
+coaxes
+coaxial
+coaxially
+coaxing
+cobbler
+cobbler's
+cobblers
+cobweb
+cobweb's
+cobwebs
+cock
+cocked
+cocker
+cocking
+cockroach
+cockroaches
+cocks
+cocktail
+cocktail's
+cocktails
+cocoa
+coconut
+coconut's
+coconuts
+cocoon
+cocoon's
+cocoons
+cod
+code
+coded
+coder
+coder's
+coders
+codes
+codeword
+codeword's
+codewords
+codification
+codification's
+codifications
+codified
+codifier
+codifier's
+codifiers
+codifies
+codify
+codifying
+coding
+codings
+cods
+coefficient
+coefficient's
+coefficiently
+coefficients
+coerce
+coerced
+coerces
+coercing
+coercion
+coercions
+coercive
+coercively
+coerciveness
+coexist
+coexisted
+coexistence
+coexisting
+coexists
+coffee
+coffee's
+coffees
+coffer
+coffer's
+coffers
+coffin
+coffin's
+coffins
+cogent
+cogently
+cogitate
+cogitated
+cogitates
+cogitating
+cogitation
+cogitative
+cognition
+cognitions
+cognitive
+cognitively
+cognitives
+cohabit
+cohabitation
+cohabitations
+cohabited
+cohabiting
+cohabits
+cohere
+cohered
+coherence
+coherent
+coherently
+coherer
+coheres
+cohering
+cohesion
+cohesive
+cohesively
+cohesiveness
+coil
+coiled
+coiling
+coils
+coin
+coinage
+coincide
+coincided
+coincidence
+coincidence's
+coincidences
+coincidental
+coincidentally
+coincides
+coinciding
+coined
+coiner
+coining
+coins
+coke
+cokes
+coking
+cold
+colder
+coldest
+coldly
+coldness
+colds
+collaborate
+collaborated
+collaborates
+collaborating
+collaboration
+collaborations
+collaborative
+collaboratively
+collaborator
+collaborator's
+collaborators
+collapse
+collapsed
+collapses
+collapsing
+collar
+collared
+collaring
+collars
+collate
+collated
+collateral
+collaterally
+collates
+collating
+collation
+collations
+collative
+collator
+collators
+colleague
+colleague's
+colleagues
+collect
+collected
+collectedly
+collectedness
+collectible
+collecting
+collection
+collection's
+collections
+collective
+collectively
+collectives
+collector
+collector's
+collectors
+collects
+college
+college's
+colleges
+collegiate
+collegiately
+collide
+collided
+collides
+colliding
+collie
+collied
+collier
+collies
+collision
+collision's
+collisions
+cologne
+cologned
+colon
+colon's
+colonel
+colonel's
+colonels
+colonial
+colonially
+colonialness
+colonials
+colonies
+colonist
+colonist's
+colonists
+colons
+colony
+colony's
+colossal
+colossally
+colt
+colt's
+colter
+colts
+column
+column's
+columnar
+columned
+columns
+comb
+combat
+combatant
+combatant's
+combatants
+combated
+combating
+combative
+combatively
+combativeness
+combats
+combed
+comber
+combers
+combination
+combination's
+combinational
+combinations
+combinator
+combinator's
+combinatorial
+combinatorially
+combinatoric
+combinatorics
+combinators
+combine
+combined
+combiner
+combiners
+combines
+combing
+combings
+combining
+combs
+combustion
+combustions
+come
+comedian
+comedian's
+comedians
+comedic
+comedies
+comedy
+comedy's
+comelier
+comeliness
+comely
+comer
+comers
+comes
+comest
+comestible
+comestibles
+comet
+comet's
+cometh
+comets
+comfort
+comfortabilities
+comfortability
+comfortable
+comfortableness
+comfortably
+comforted
+comforter
+comforters
+comforting
+comfortingly
+comforts
+comic
+comic's
+comical
+comically
+comics
+coming
+comings
+comma
+comma's
+command
+command's
+commandant
+commandant's
+commandants
+commanded
+commandeer
+commandeered
+commandeering
+commandeers
+commander
+commanders
+commanding
+commandingly
+commandment
+commandment's
+commandments
+commands
+commas
+commemorate
+commemorated
+commemorates
+commemorating
+commemoration
+commemorations
+commemorative
+commemoratively
+commemoratives
+commence
+commenced
+commencement
+commencement's
+commencements
+commencer
+commences
+commencing
+commend
+commendation
+commendation's
+commendations
+commended
+commender
+commending
+commends
+commensurate
+commensurately
+commensurates
+commensuration
+commensurations
+comment
+comment's
+commentaries
+commentary
+commentary's
+commentator
+commentator's
+commentators
+commented
+commenter
+commenting
+comments
+commerce
+commerced
+commercial
+commercially
+commercialness
+commercials
+commercing
+commission
+commissioned
+commissioner
+commissioners
+commissioning
+commissions
+commit
+commitment
+commitment's
+commitments
+commits
+committed
+committee
+committee's
+committees
+committing
+commodities
+commodity
+commodity's
+commodore
+commodore's
+commodores
+common
+commonalities
+commonality
+commoner
+commoner's
+commoners
+commonest
+commonly
+commonness
+commonplace
+commonplaceness
+commonplaces
+commons
+commonwealth
+commonwealths
+commotion
+commotions
+communal
+communally
+commune
+communed
+communes
+communicant
+communicant's
+communicants
+communicate
+communicated
+communicates
+communicating
+communication
+communications
+communicative
+communicatively
+communicativeness
+communicator
+communicator's
+communicators
+communing
+communion
+communist
+communist's
+communists
+communities
+community
+community's
+commutative
+commutatively
+commutativity
+commute
+commuted
+commuter
+commuters
+commutes
+commuting
+compact
+compacted
+compacter
+compacters
+compactest
+compacting
+compactly
+compactness
+compactor
+compactor's
+compactors
+compacts
+companies
+companion
+companion's
+companionable
+companionableness
+companions
+companionship
+company
+company's
+comparability
+comparable
+comparableness
+comparably
+comparative
+comparatively
+comparativeness
+comparatives
+comparator
+comparator's
+comparators
+compare
+compared
+comparer
+compares
+comparing
+comparison
+comparison's
+comparisons
+compartment
+compartmented
+compartmenting
+compartments
+compass
+compassed
+compasses
+compassing
+compassion
+compassionate
+compassionately
+compassionateness
+compatibilities
+compatibility
+compatibility's
+compatible
+compatibleness
+compatibles
+compatibly
+compel
+compelled
+compelling
+compellingly
+compels
+compendium
+compensate
+compensated
+compensates
+compensating
+compensation
+compensations
+compensative
+compensatory
+compete
+competed
+competence
+competences
+competent
+competently
+competes
+competing
+competition
+competition's
+competitions
+competitive
+competitively
+competitiveness
+competitor
+competitor's
+competitors
+compilable
+compilation
+compilation's
+compilations
+compile
+compiled
+compiler
+compiler's
+compilers
+compiles
+compiling
+complain
+complained
+complainer
+complainers
+complaining
+complainingly
+complains
+complaint
+complaint's
+complaints
+complement
+complementariness
+complementary
+complemented
+complementer
+complementers
+complementing
+complements
+complete
+completed
+completely
+completeness
+completer
+completes
+completing
+completion
+completions
+completive
+complex
+complexes
+complexion
+complexioned
+complexities
+complexity
+complexly
+complexness
+compliance
+compliances
+complicate
+complicated
+complicatedly
+complicatedness
+complicates
+complicating
+complication
+complications
+complicator
+complicator's
+complicators
+complicity
+complied
+complier
+compliers
+complies
+compliment
+complimentary
+complimented
+complimenter
+complimenters
+complimenting
+compliments
+comply
+complying
+component
+component's
+components
+compose
+composed
+composedly
+composedness
+composer
+composer's
+composers
+composes
+composing
+composite
+compositely
+composites
+composition
+compositional
+compositionally
+compositions
+composure
+compound
+compounded
+compounder
+compounding
+compounds
+comprehend
+comprehended
+comprehending
+comprehends
+comprehensibility
+comprehensible
+comprehensibleness
+comprehension
+comprehensive
+comprehensively
+comprehensiveness
+compress
+compressed
+compressedly
+compresses
+compressible
+compressing
+compression
+compressions
+compressive
+compressively
+comprise
+comprised
+comprises
+comprising
+compromise
+compromised
+compromiser
+compromisers
+compromises
+compromising
+compromisingly
+comptroller
+comptroller's
+comptrollers
+compulsion
+compulsion's
+compulsions
+compulsory
+compunction
+compunctions
+computability
+computable
+computation
+computation's
+computational
+computationally
+computations
+compute
+computed
+computer
+computer's
+computerese
+computers
+computes
+computing
+comrade
+comradeliness
+comradely
+comrades
+comradeship
+concatenate
+concatenated
+concatenates
+concatenating
+concatenation
+concatenations
+conceal
+concealed
+concealer
+concealers
+concealing
+concealingly
+concealment
+conceals
+concede
+conceded
+concededly
+conceder
+concedes
+conceding
+conceit
+conceited
+conceitedly
+conceitedness
+conceits
+conceivable
+conceivably
+conceive
+conceived
+conceiver
+conceives
+conceiving
+concentrate
+concentrated
+concentrates
+concentrating
+concentration
+concentrations
+concentrative
+concentrator
+concentrators
+concentric
+concept
+concept's
+conception
+conception's
+conceptions
+conceptive
+concepts
+conceptual
+conceptually
+concern
+concerned
+concernedly
+concerning
+concerns
+concert
+concerted
+concertedly
+concertedness
+concerts
+concession
+concession's
+concessioner
+concessions
+concise
+concisely
+conciseness
+concision
+concisions
+conclude
+concluded
+concluder
+concludes
+concluding
+conclusion
+conclusion's
+conclusions
+conclusive
+conclusively
+conclusiveness
+concomitant
+concomitantly
+concomitants
+concord
+concrete
+concreted
+concretely
+concreteness
+concretes
+concreting
+concretion
+concur
+concurred
+concurrence
+concurrencies
+concurrency
+concurrent
+concurrently
+concurring
+concurs
+condemn
+condemnation
+condemnations
+condemned
+condemner
+condemners
+condemning
+condemns
+condensation
+condense
+condensed
+condenser
+condensers
+condenses
+condensing
+condescend
+condescending
+condescendingly
+condescends
+condition
+conditional
+conditionally
+conditionals
+conditioned
+conditioner
+conditioners
+conditioning
+conditions
+condone
+condoned
+condoner
+condones
+condoning
+conducive
+conduciveness
+conduct
+conducted
+conducting
+conduction
+conductive
+conductively
+conductivities
+conductivity
+conductor
+conductor's
+conductors
+conducts
+conduit
+conduits
+cone
+cone's
+coned
+cones
+confederacy
+confederate
+confederates
+confederation
+confederations
+confederative
+confer
+conference
+conference's
+conferences
+conferencing
+conferred
+conferrer
+conferrer's
+conferrers
+conferring
+confers
+confess
+confessed
+confessedly
+confesses
+confessing
+confession
+confession's
+confessions
+confessor
+confessor's
+confessors
+confidant
+confidant's
+confidants
+confide
+confided
+confidence
+confidences
+confident
+confidential
+confidentiality
+confidentially
+confidentialness
+confidently
+confider
+confides
+confiding
+confidingly
+confidingness
+configurable
+configuration
+configuration's
+configurations
+configure
+configured
+configures
+configuring
+confine
+confined
+confinement
+confinement's
+confinements
+confiner
+confines
+confining
+confirm
+confirmation
+confirmation's
+confirmations
+confirmed
+confirmedly
+confirmedness
+confirming
+confirms
+confiscate
+confiscated
+confiscates
+confiscating
+confiscation
+confiscations
+conflict
+conflicted
+conflicting
+conflictingly
+conflictive
+conflicts
+conform
+conformed
+conformer
+conformers
+conforming
+conformity
+conforms
+confound
+confounded
+confoundedly
+confounder
+confounding
+confounds
+confront
+confrontation
+confrontation's
+confrontations
+confronted
+confronter
+confronters
+confronting
+confronts
+confuse
+confused
+confusedly
+confusedness
+confuser
+confusers
+confuses
+confusing
+confusingly
+confusion
+confusions
+congenial
+congenially
+congested
+congestion
+congratulate
+congratulated
+congratulates
+congratulation
+congratulations
+congregate
+congregated
+congregates
+congregating
+congregation
+congregations
+congress
+congress's
+congressed
+congresses
+congressing
+congressional
+congressionally
+congressman
+congruence
+congruent
+congruently
+coning
+conjecture
+conjectured
+conjecturer
+conjectures
+conjecturing
+conjoined
+conjunct
+conjuncted
+conjunction
+conjunction's
+conjunctions
+conjunctive
+conjunctively
+conjuncts
+conjure
+conjured
+conjurer
+conjurers
+conjures
+conjuring
+connect
+connected
+connectedly
+connectedness
+connecter
+connecters
+connecting
+connection
+connection's
+connections
+connective
+connective's
+connectively
+connectives
+connectivities
+connectivity
+connector
+connector's
+connectors
+connects
+connoisseur
+connoisseur's
+connoisseurs
+connote
+connoted
+connotes
+connoting
+conquer
+conquerable
+conquered
+conquerer
+conquerers
+conquering
+conqueror
+conqueror's
+conquerors
+conquers
+conquest
+conquest's
+conquests
+cons
+conscience
+conscience's
+consciences
+conscientious
+conscientiously
+conscientiousness
+conscious
+consciouses
+consciously
+consciousness
+consecrate
+consecrated
+consecrates
+consecrating
+consecration
+consecrations
+consecrative
+consecutive
+consecutively
+consecutiveness
+consensus
+consent
+consented
+consenter
+consenters
+consenting
+consentingly
+consents
+consequence
+consequence's
+consequences
+consequent
+consequential
+consequentialities
+consequentiality
+consequentially
+consequentialness
+consequently
+consequentness
+consequents
+conservation
+conservation's
+conservationist
+conservationist's
+conservationists
+conservations
+conservatism
+conservative
+conservatively
+conservativeness
+conservatives
+conserve
+conserved
+conserver
+conserves
+conserving
+consider
+considerable
+considerably
+considerate
+considerately
+considerateness
+consideration
+considerations
+considered
+considerer
+considering
+considers
+consign
+consigned
+consigning
+consigns
+consist
+consisted
+consistencies
+consistency
+consistent
+consistently
+consisting
+consists
+consolable
+consolation
+consolation's
+consolations
+console
+consoled
+consoler
+consolers
+consoles
+consolidate
+consolidated
+consolidates
+consolidating
+consolidation
+consolidations
+consoling
+consolingly
+consonant
+consonant's
+consonantly
+consonants
+consort
+consorted
+consorting
+consortium
+consorts
+conspicuous
+conspicuously
+conspicuousness
+conspiracies
+conspiracy
+conspiracy's
+conspirator
+conspirator's
+conspirators
+conspire
+conspired
+conspires
+conspiring
+constable
+constable's
+constables
+constancy
+constant
+constantly
+constants
+constellation
+constellation's
+constellations
+consternation
+constituencies
+constituency
+constituency's
+constituent
+constituent's
+constituently
+constituents
+constitute
+constituted
+constitutes
+constituting
+constitution
+constitutional
+constitutionality
+constitutionally
+constitutions
+constitutive
+constitutively
+constrain
+constrained
+constrainedly
+constraining
+constrains
+constraint
+constraint's
+constraints
+construct
+constructed
+constructibility
+constructible
+constructing
+construction
+construction's
+constructions
+constructive
+constructively
+constructiveness
+constructor
+constructor's
+constructors
+constructs
+construe
+construed
+construes
+construing
+consul
+consul's
+consulate
+consulate's
+consulates
+consuls
+consult
+consultant
+consultant's
+consultants
+consultation
+consultation's
+consultations
+consultative
+consulted
+consulter
+consulting
+consultive
+consults
+consumable
+consumables
+consume
+consumed
+consumedly
+consumer
+consumer's
+consumers
+consumes
+consuming
+consumingly
+consummate
+consummated
+consummately
+consummates
+consummating
+consummation
+consummations
+consummative
+consumption
+consumption's
+consumptions
+consumptive
+consumptively
+contact
+contacted
+contacting
+contacts
+contagion
+contagious
+contagiously
+contagiousness
+contain
+containable
+contained
+container
+containers
+containing
+containment
+containment's
+containments
+contains
+contaminate
+contaminated
+contaminates
+contaminating
+contamination
+contaminations
+contaminative
+contemplate
+contemplated
+contemplates
+contemplating
+contemplation
+contemplations
+contemplative
+contemplatively
+contemplativeness
+contemporaneous
+contemporaneously
+contemporaneousness
+contemporaries
+contemporariness
+contemporary
+contempt
+contemptible
+contemptibleness
+contemptuous
+contemptuously
+contemptuousness
+contend
+contended
+contender
+contenders
+contending
+contends
+content
+contented
+contentedly
+contentedness
+contenting
+contention
+contention's
+contentions
+contently
+contentment
+contents
+contest
+contestable
+contested
+contester
+contesters
+contesting
+contests
+context
+context's
+contexts
+contextual
+contextually
+contiguity
+contiguous
+contiguously
+contiguousness
+continent
+continent's
+continental
+continentally
+continently
+continents
+contingencies
+contingency
+contingency's
+contingent
+contingent's
+contingently
+contingents
+continual
+continually
+continuance
+continuance's
+continuances
+continuation
+continuation's
+continuations
+continue
+continued
+continuer
+continues
+continuing
+continuities
+continuity
+continuous
+continuously
+continuousness
+continuum
+contour
+contour's
+contoured
+contouring
+contours
+contract
+contracted
+contracting
+contraction
+contraction's
+contractions
+contractive
+contractor
+contractor's
+contractors
+contracts
+contractual
+contractually
+contradict
+contradicted
+contradicting
+contradiction
+contradiction's
+contradictions
+contradictoriness
+contradictory
+contradicts
+contradistinction
+contradistinctions
+contrapositive
+contrapositives
+contraption
+contraption's
+contraptions
+contrariness
+contrary
+contrast
+contrasted
+contraster
+contrasters
+contrasting
+contrastingly
+contrastive
+contrastively
+contrasts
+contribute
+contributed
+contributer
+contributers
+contributes
+contributing
+contribution
+contributions
+contributive
+contributively
+contributor
+contributor's
+contributorily
+contributors
+contributory
+contrivance
+contrivance's
+contrivances
+contrive
+contrived
+contriver
+contrives
+contriving
+control
+control's
+controllability
+controllable
+controllably
+controlled
+controller
+controller's
+controllers
+controlling
+controls
+controversial
+controversially
+controversies
+controversy
+controversy's
+conundrum
+conundrum's
+conundrums
+convalescence
+convene
+convened
+convener
+conveners
+convenes
+convenience
+convenience's
+conveniences
+convenient
+conveniently
+convening
+convent
+convent's
+convention
+convention's
+conventional
+conventionally
+conventions
+convents
+converge
+converged
+convergence
+convergences
+convergent
+converges
+converging
+conversant
+conversantly
+conversation
+conversation's
+conversational
+conversationally
+conversations
+converse
+conversed
+conversely
+converses
+conversing
+conversion
+conversioning
+conversions
+convert
+converted
+converter
+converters
+convertibility
+convertible
+convertibleness
+converting
+converts
+convex
+convey
+conveyance
+conveyance's
+conveyanced
+conveyancer
+conveyancers
+conveyances
+conveyancing
+conveyed
+conveyer
+conveyers
+conveying
+conveys
+convict
+convicted
+convicting
+conviction
+conviction's
+convictions
+convictive
+convicts
+convince
+convinced
+convincer
+convincers
+convinces
+convincing
+convincingly
+convincingness
+convoluted
+convoy
+convoyed
+convoying
+convoys
+convulsion
+convulsion's
+convulsions
+coo
+cooing
+cook
+cook's
+cooked
+cooker
+cookers
+cookery
+cookie
+cookie's
+cookies
+cooking
+cooks
+cooky
+cool
+cooled
+cooler
+cooler's
+coolers
+coolest
+coolie
+coolie's
+coolies
+cooling
+coolings
+coolly
+coolness
+coolnesses
+cools
+coon
+coon's
+coons
+coop
+cooped
+cooper
+cooperate
+cooperated
+cooperates
+cooperating
+cooperation
+cooperations
+cooperative
+cooperatively
+cooperativeness
+cooperatives
+cooperator
+cooperator's
+cooperators
+coopered
+coopering
+coopers
+coops
+coordinate
+coordinated
+coordinately
+coordinateness
+coordinates
+coordinating
+coordination
+coordinations
+coordinative
+coordinator
+coordinator's
+coordinators
+cop
+cop's
+cope
+coped
+coper
+copes
+copied
+copier
+copiers
+copies
+coping
+copings
+copious
+copiously
+copiousness
+copper
+copper's
+coppered
+coppering
+coppers
+cops
+copse
+copses
+copy
+copying
+copyright
+copyright's
+copyrighted
+copyrighter
+copyrighters
+copyrighting
+copyrights
+coral
+cord
+corded
+corder
+cordial
+cordially
+cordialness
+cording
+cords
+core
+cored
+corer
+corers
+cores
+coring
+cork
+corked
+corker
+corkers
+corking
+corks
+cormorant
+cormorants
+corn
+corned
+corner
+cornered
+cornering
+corners
+cornerstone
+cornerstone's
+cornerstones
+cornfield
+cornfield's
+cornfields
+corning
+corns
+corollaries
+corollary
+corollary's
+coronaries
+coronary
+coronation
+coronet
+coronet's
+coroneted
+coronets
+coroutine
+coroutine's
+coroutines
+corporal
+corporal's
+corporally
+corporals
+corporate
+corporately
+corporation
+corporation's
+corporations
+corporative
+corps
+corpse
+corpse's
+corpses
+corpus
+correct
+correctable
+corrected
+correcting
+correction
+corrections
+corrective
+correctively
+correctiveness
+correctives
+correctly
+correctness
+corrector
+corrects
+correlate
+correlated
+correlates
+correlating
+correlation
+correlations
+correlative
+correlatively
+correspond
+corresponded
+correspondence
+correspondence's
+correspondences
+correspondent
+correspondent's
+correspondents
+corresponding
+correspondingly
+corresponds
+corridor
+corridor's
+corridors
+corroborate
+corroborated
+corroborates
+corroborating
+corroboration
+corroborations
+corroborative
+corroboratively
+corrosion
+corrosions
+corrupt
+corrupted
+corrupter
+corrupting
+corruption
+corruptive
+corruptively
+corruptly
+corrupts
+corset
+corsets
+cosine
+cosines
+cosmetic
+cosmetics
+cosmology
+cosmopolitan
+cost
+costed
+costing
+costive
+costively
+costiveness
+costlier
+costliness
+costly
+costs
+costume
+costumed
+costumer
+costumers
+costumes
+costuming
+cot
+cot's
+cots
+cottage
+cottager
+cottagers
+cottages
+cotton
+cottoned
+cottoning
+cottons
+cotyledon
+cotyledon's
+cotyledons
+couch
+couched
+couches
+couching
+cough
+coughed
+cougher
+coughing
+coughs
+could
+couldest
+couldn't
+council
+council's
+councillor
+councillor's
+councillors
+councils
+counsel
+counsel's
+counsels
+count
+countable
+countably
+counted
+countenance
+countenancer
+counter
+counteract
+counteracted
+counteracting
+counteractive
+counteracts
+counterclockwise
+countered
+counterexample
+counterexamples
+counterfeit
+counterfeited
+counterfeiter
+counterfeiting
+counterfeits
+countering
+countermeasure
+countermeasure's
+countermeasures
+counterpart
+counterpart's
+counterparts
+counterpoint
+counterpointing
+counterproductive
+counterrevolution
+counters
+countess
+counties
+counting
+countless
+countlessly
+countries
+country
+country's
+countryman
+countryside
+counts
+county
+county's
+couple
+couple's
+coupled
+coupler
+couplers
+couples
+coupling
+couplings
+coupon
+coupon's
+coupons
+courage
+courageous
+courageously
+courageousness
+courier
+courier's
+couriers
+course
+coursed
+courser
+courses
+coursing
+court
+courted
+courteous
+courteously
+courteousness
+courter
+courters
+courtesies
+courtesy
+courtesy's
+courthouse
+courthouse's
+courthouses
+courtier
+courtier's
+courtiers
+courting
+courtliness
+courtly
+courtroom
+courtroom's
+courtrooms
+courts
+courtship
+courtyard
+courtyard's
+courtyards
+cousin
+cousin's
+cousins
+cove
+covenant
+covenant's
+covenanted
+covenanter
+covenanting
+covenants
+cover
+coverable
+coverage
+covered
+coverer
+covering
+coverings
+coverlet
+coverlet's
+coverlets
+covers
+covert
+covertly
+covertness
+coves
+covet
+coveted
+coveter
+coveting
+covetingly
+covetous
+covetously
+covetousness
+covets
+coving
+cow
+coward
+cowardice
+cowardliness
+cowardly
+cowards
+cowboy
+cowboy's
+cowboys
+cowed
+cowedly
+cower
+cowered
+cowerer
+cowerers
+cowering
+coweringly
+cowers
+cowgirl
+cowgirl's
+cowgirls
+cowing
+cowl
+cowled
+cowling
+cowls
+cows
+cowslip
+cowslip's
+cowslips
+coyote
+coyote's
+coyotes
+cozier
+cozies
+coziness
+cozy
+crab
+crab's
+crabs
+crack
+cracked
+cracker
+crackers
+cracking
+crackle
+crackled
+crackles
+crackling
+crackly
+cracks
+cradle
+cradled
+cradler
+cradles
+cradling
+craft
+crafted
+crafter
+craftier
+craftiness
+crafting
+crafts
+craftsman
+crafty
+crag
+crag's
+crags
+cram
+cramp
+cramp's
+cramped
+cramper
+cramps
+crams
+cranberries
+cranberry
+cranberry's
+crane
+crane's
+craned
+cranes
+craning
+crank
+cranked
+crankier
+crankiest
+crankily
+crankiness
+cranking
+cranks
+cranky
+crap
+craping
+craps
+crash
+crashed
+crasher
+crashers
+crashes
+crashing
+crate
+crater
+cratered
+craters
+crates
+crating
+cravat
+cravat's
+cravats
+crave
+craved
+craven
+cravenly
+cravenness
+craver
+craves
+craving
+crawl
+crawled
+crawler
+crawlers
+crawling
+crawls
+craze
+crazed
+crazes
+crazier
+craziest
+crazily
+craziness
+crazing
+crazy
+creak
+creaked
+creaking
+creaks
+cream
+creamed
+creamer
+creamers
+creaminess
+creaming
+creams
+creamy
+crease
+creased
+creaser
+creases
+creasing
+create
+created
+creates
+creating
+creation
+creations
+creative
+creatively
+creativeness
+creativity
+creator
+creator's
+creators
+creature
+creature's
+creatureliness
+creaturely
+creatures
+credence
+credibility
+credible
+credibly
+credit
+creditable
+creditableness
+creditably
+credited
+crediting
+creditor
+creditor's
+creditors
+credits
+credulity
+credulous
+credulously
+credulousness
+creed
+creed's
+creeds
+creek
+creek's
+creeks
+creep
+creeper
+creepers
+creeping
+creeps
+cremate
+cremated
+cremates
+cremating
+cremation
+cremations
+crepe
+crept
+crescent
+crescent's
+crescents
+crest
+crested
+cresting
+crests
+cretin
+cretins
+crevice
+crevice's
+crevices
+crew
+crewed
+crewing
+crews
+crib
+crib's
+cribs
+cricket
+cricket's
+cricketer
+cricketing
+crickets
+cried
+crier
+criers
+cries
+crime
+crime's
+crimes
+criminal
+criminally
+criminals
+crimson
+crimsoning
+cringe
+cringed
+cringer
+cringes
+cringing
+cripple
+crippled
+crippler
+cripples
+crippling
+crises
+crisis
+crisp
+crisper
+crisply
+crispness
+crisps
+criteria
+criterion
+critic
+critic's
+critical
+critically
+criticalness
+criticism
+criticism's
+criticisms
+critics
+critique
+critiqued
+critiques
+critiquing
+critter
+critter's
+critters
+croak
+croaked
+croaker
+croakers
+croaking
+croaks
+crochet
+crocheted
+crocheter
+crocheting
+crochets
+crook
+crooked
+crookedly
+crookedness
+crooks
+crop
+crop's
+cropped
+cropper
+cropper's
+croppers
+cropping
+crops
+cross
+crossable
+crossbar
+crossbar's
+crossbars
+crossed
+crosser
+crossers
+crosses
+crossing
+crossings
+crossly
+crossover
+crossover's
+crossovers
+crossword
+crossword's
+crosswords
+crouch
+crouched
+crouches
+crouching
+crow
+crowd
+crowded
+crowdedness
+crowder
+crowding
+crowds
+crowed
+crowing
+crown
+crowned
+crowner
+crowning
+crowns
+crows
+crucial
+crucially
+crucification
+crucified
+crucifies
+crucify
+crucifying
+crude
+crudely
+crudeness
+cruder
+crudest
+cruel
+crueler
+cruelest
+cruelly
+cruelness
+cruelty
+cruise
+cruised
+cruiser
+cruisers
+cruises
+cruising
+crumb
+crumble
+crumbled
+crumbles
+crumblier
+crumbliness
+crumbling
+crumblings
+crumbly
+crumbs
+crumple
+crumpled
+crumples
+crumpling
+crunch
+crunched
+cruncher
+crunchers
+crunches
+crunchier
+crunchiest
+crunchiness
+crunching
+crunchy
+crusade
+crusaded
+crusader
+crusaders
+crusades
+crusading
+crush
+crushable
+crushed
+crusher
+crushers
+crushes
+crushing
+crushingly
+crust
+crust's
+crustacean
+crustacean's
+crustaceans
+crusted
+crusting
+crusts
+crutch
+crutch's
+crutched
+crutches
+crux
+crux's
+cruxes
+cry
+crying
+cryptanalysis
+cryptic
+cryptographic
+cryptography
+cryptology
+crystal
+crystal's
+crystalline
+crystals
+cub
+cub's
+cube
+cubed
+cuber
+cubes
+cubic
+cubicly
+cubics
+cubing
+cubs
+cuckoo
+cuckoo's
+cuckoos
+cucumber
+cucumber's
+cucumbers
+cuddle
+cuddled
+cuddles
+cuddling
+cudgel
+cudgel's
+cudgels
+cue
+cued
+cues
+cuff
+cuff's
+cuffed
+cuffing
+cuffs
+cuing
+cull
+culled
+culler
+culling
+culls
+culminate
+culminated
+culminates
+culminating
+culmination
+culpability
+culprit
+culprit's
+culprits
+cult
+cult's
+cultivate
+cultivated
+cultivates
+cultivating
+cultivation
+cultivations
+cultivator
+cultivator's
+cultivators
+cults
+cultural
+culturally
+culture
+cultured
+cultures
+culturing
+cumbersome
+cumbersomely
+cumbersomeness
+cumulative
+cumulatively
+cunning
+cunningly
+cunningness
+cup
+cup's
+cupboard
+cupboard's
+cupboards
+cupful
+cupfuls
+cupped
+cupping
+cups
+cur
+curable
+curableness
+curably
+curb
+curbed
+curbing
+curbs
+curds
+cure
+cured
+curer
+cures
+curfew
+curfew's
+curfews
+curing
+curiosities
+curiosity
+curiosity's
+curious
+curiouser
+curiousest
+curiously
+curiousness
+curl
+curled
+curler
+curlers
+curlier
+curliness
+curling
+curls
+curly
+currant
+currant's
+currants
+currencies
+currency
+currency's
+current
+currently
+currentness
+currents
+curricular
+curriculum
+curriculum's
+curriculums
+curried
+currier
+curries
+curry
+currying
+curs
+curse
+cursed
+cursedly
+cursedness
+curses
+cursing
+cursive
+cursively
+cursiveness
+cursor
+cursor's
+cursorily
+cursoriness
+cursors
+cursory
+curt
+curtail
+curtailed
+curtailer
+curtailing
+curtails
+curtain
+curtained
+curtaining
+curtains
+curtly
+curtness
+curtsied
+curtsies
+curtsy
+curtsy's
+curtsying
+curvature
+curvatures
+curve
+curved
+curves
+curving
+cushion
+cushioned
+cushioning
+cushions
+cusp
+cusp's
+cusps
+cuss
+cussed
+cussedly
+cussedness
+cusser
+cusses
+custard
+custodian
+custodian's
+custodians
+custodies
+custody
+custom
+customarily
+customariness
+customary
+customer
+customer's
+customers
+customs
+cut
+cut's
+cute
+cutely
+cuteness
+cuter
+cutes
+cutest
+cutoff
+cutoffs
+cuts
+cutter
+cutter's
+cutters
+cutting
+cuttingly
+cuttings
+cybernetic
+cybernetics
+cycle
+cycled
+cycler
+cycles
+cyclic
+cyclically
+cyclicly
+cycling
+cycloid
+cycloid's
+cycloidal
+cycloids
+cyclone
+cyclone's
+cyclones
+cylinder
+cylinder's
+cylindered
+cylindering
+cylinders
+cylindrical
+cylindrically
+cymbal
+cymbal's
+cymbals
+cynical
+cynically
+cypress
+cyst
+cysts
+cytology
+czar
+dabble
+dabbled
+dabbler
+dabblers
+dabbles
+dabbling
+dad
+dad's
+daddies
+daddy
+dads
+daemon
+daemon's
+daemons
+daffodil
+daffodil's
+daffodils
+dagger
+daggers
+dailies
+daily
+daintier
+dainties
+daintily
+daintiness
+dainty
+dairies
+dairy
+dairying
+daisies
+daisy
+daisy's
+dale
+dale's
+dales
+daleth
+dam
+dam's
+damage
+damaged
+damager
+damagers
+damages
+damaging
+damagingly
+damask
+dame
+damed
+damn
+damnation
+damned
+damneder
+damnedest
+damning
+damningly
+damns
+damp
+damped
+dampen
+dampened
+dampener
+dampening
+dampens
+damper
+dampers
+damping
+damply
+dampness
+damps
+dams
+damsel
+damsel's
+damsels
+dance
+danced
+dancer
+dancers
+dances
+dancing
+dandelion
+dandelion's
+dandelions
+dandier
+dandies
+dandy
+danger
+danger's
+dangerous
+dangerously
+dangerousness
+dangers
+dangle
+dangled
+dangler
+dangler's
+danglers
+dangles
+dangling
+danglingly
+dare
+dared
+darer
+darers
+dares
+daring
+daringly
+daringness
+dark
+darken
+darkened
+darkener
+darkeners
+darkening
+darker
+darkest
+darkly
+darkness
+darks
+darling
+darling's
+darlingly
+darlingness
+darlings
+darn
+darned
+darner
+darning
+darns
+dart
+darted
+darter
+darting
+darts
+dash
+dashed
+dasher
+dashers
+dashes
+dashing
+dashingly
+data
+database
+database's
+databases
+date
+dated
+datedly
+datedness
+dater
+dates
+dating
+dative
+datum
+datums
+daughter
+daughter's
+daughterly
+daughters
+daunt
+daunted
+daunting
+dauntless
+dauntlessly
+dauntlessness
+daunts
+dawn
+dawned
+dawning
+dawns
+day
+day's
+daybreak
+daybreaks
+daydream
+daydreamed
+daydreamer
+daydreamers
+daydreaming
+daydreams
+daylight
+daylight's
+daylights
+days
+daytime
+daytimes
+daze
+dazed
+dazedness
+dazes
+dazing
+dazzle
+dazzled
+dazzler
+dazzlers
+dazzles
+dazzling
+dazzlingly
+deacon
+deacon's
+deacons
+dead
+deaden
+deadened
+deadener
+deadening
+deadeningly
+deadens
+deadlier
+deadliest
+deadline
+deadline's
+deadlines
+deadliness
+deadlock
+deadlocked
+deadlocking
+deadlocks
+deadly
+deadness
+deaf
+deafen
+deafened
+deafening
+deafeningly
+deafens
+deafer
+deafest
+deafly
+deafness
+deal
+dealer
+dealers
+dealing
+dealings
+deallocate
+deallocated
+deallocates
+deallocating
+deallocation
+deallocation's
+deallocations
+deallocator
+deals
+dealt
+dean
+dean's
+deans
+dear
+dearer
+dearest
+dearly
+dearness
+dears
+dearth
+dearths
+death
+deathly
+deaths
+debatable
+debate
+debated
+debater
+debaters
+debates
+debating
+debilitate
+debilitated
+debilitates
+debilitating
+debilitation
+debris
+debt
+debt's
+debtor
+debtors
+debts
+debug
+debugged
+debugger
+debugger's
+debuggers
+debugging
+debugs
+decade
+decade's
+decadence
+decadent
+decadently
+decades
+decay
+decayed
+decayer
+decaying
+decays
+decease
+deceased
+deceases
+deceasing
+deceit
+deceitful
+deceitfully
+deceitfulness
+deceive
+deceived
+deceiver
+deceivers
+deceives
+deceiving
+deceivingly
+decelerate
+decelerated
+decelerates
+decelerating
+deceleration
+decelerations
+decencies
+decency
+decency's
+decent
+decently
+deception
+deception's
+deceptions
+deceptive
+deceptively
+deceptiveness
+decidability
+decidable
+decide
+decided
+decidedly
+decidedness
+decider
+decides
+deciding
+decimal
+decimally
+decimals
+decimate
+decimated
+decimates
+decimating
+decimation
+decipher
+deciphered
+decipherer
+decipherers
+deciphering
+deciphers
+decision
+decision's
+decisions
+decisive
+decisively
+decisiveness
+deck
+decked
+decker
+decking
+deckings
+decks
+declaration
+declaration's
+declarations
+declarative
+declaratively
+declaratives
+declare
+declared
+declarer
+declarers
+declares
+declaring
+declination
+declination's
+declinations
+decline
+declined
+decliner
+decliners
+declines
+declining
+decode
+decoded
+decoder
+decoders
+decodes
+decoding
+decodings
+decompile
+decompiled
+decompiler
+decompilers
+decompiles
+decompiling
+decomposability
+decomposable
+decompose
+decomposed
+decomposer
+decomposes
+decomposing
+decomposition
+decomposition's
+decompositions
+decompression
+decorate
+decorated
+decorates
+decorating
+decoration
+decorations
+decorative
+decoratively
+decorativeness
+decorum
+decorums
+decouple
+decoupled
+decoupler
+decouples
+decoupling
+decoy
+decoy's
+decoys
+decrease
+decreased
+decreases
+decreasing
+decreasingly
+decree
+decreed
+decreeing
+decreer
+decrees
+decrement
+decremented
+decrementing
+decrements
+dedicate
+dedicated
+dedicatedly
+dedicates
+dedicating
+dedication
+dedications
+dedicative
+deduce
+deduced
+deducer
+deduces
+deducible
+deducing
+deduct
+deducted
+deducting
+deduction
+deduction's
+deductions
+deductive
+deductively
+deducts
+deed
+deeded
+deeding
+deeds
+deem
+deemed
+deeming
+deems
+deep
+deepen
+deepened
+deepening
+deepens
+deeper
+deepest
+deeply
+deepness
+deeps
+deer
+deers
+default
+defaulted
+defaulter
+defaulting
+defaults
+defeat
+defeated
+defeating
+defeatism
+defeatist
+defeatists
+defeats
+defect
+defected
+defecting
+defection
+defection's
+defections
+defective
+defectively
+defectiveness
+defectives
+defects
+defend
+defendant
+defendant's
+defendants
+defended
+defender
+defenders
+defending
+defends
+defenestrate
+defenestrated
+defenestrates
+defenestrating
+defenestration
+defenestrations
+defensive
+defensively
+defensiveness
+defer
+deference
+deferment
+deferment's
+deferments
+deferrable
+deferred
+deferrer
+deferrer's
+deferrers
+deferring
+defers
+defiance
+defiances
+defiant
+defiantly
+deficiencies
+deficiency
+deficient
+deficiently
+deficit
+deficit's
+deficits
+defied
+defier
+defies
+defile
+defiled
+defiler
+defiles
+defiling
+definable
+define
+defined
+definer
+definers
+defines
+defining
+definite
+definitely
+definiteness
+definition
+definition's
+definitional
+definitions
+definitive
+definitively
+definitiveness
+deformation
+deformation's
+deformations
+deformed
+deformities
+deformity
+deformity's
+deftly
+defy
+defying
+defyingly
+degenerate
+degenerated
+degenerately
+degenerateness
+degenerates
+degenerating
+degeneration
+degenerative
+degradable
+degradation
+degradation's
+degradations
+degrade
+degraded
+degradedly
+degradedness
+degrader
+degrades
+degrading
+degradingly
+degree
+degree's
+degreed
+degrees
+deign
+deigned
+deigning
+deigns
+deities
+deity
+deity's
+dejected
+dejectedly
+dejectedness
+delay
+delayed
+delayer
+delayers
+delaying
+delays
+delegate
+delegated
+delegates
+delegating
+delegation
+delegations
+delete
+deleted
+deleter
+deletes
+deleting
+deletion
+deletions
+deliberate
+deliberated
+deliberately
+deliberateness
+deliberates
+deliberating
+deliberation
+deliberations
+deliberative
+deliberatively
+deliberativeness
+deliberator
+deliberator's
+deliberators
+delicacies
+delicacy
+delicacy's
+delicate
+delicately
+delicateness
+delicates
+delicious
+deliciouses
+deliciously
+deliciousness
+delight
+delighted
+delightedly
+delightedness
+delighter
+delightful
+delightfully
+delightfulness
+delighting
+delights
+delimit
+delimited
+delimiter
+delimiters
+delimiting
+delimits
+delineate
+delineated
+delineates
+delineating
+delineation
+delineations
+delineative
+delinquency
+delinquent
+delinquent's
+delinquently
+delinquents
+delirious
+deliriously
+deliriousness
+deliver
+deliverable
+deliverables
+deliverance
+delivered
+deliverer
+deliverers
+deliveries
+delivering
+delivers
+delivery
+delivery's
+dell
+dell's
+dells
+delta
+delta's
+deltas
+delude
+deluded
+deluder
+deludes
+deluding
+deludingly
+deluge
+deluged
+deluges
+deluging
+delusion
+delusion's
+delusions
+delve
+delved
+delver
+delves
+delving
+demand
+demanded
+demander
+demanding
+demandingly
+demands
+demise
+demised
+demises
+demising
+demo
+democracies
+democracy
+democracy's
+democrat
+democrat's
+democratic
+democratically
+democrats
+demodulate
+demodulated
+demodulates
+demodulating
+demodulation
+demodulation's
+demodulations
+demodulator
+demodulator's
+demodulators
+demographic
+demographics
+demolish
+demolished
+demolisher
+demolishes
+demolishing
+demolition
+demolitions
+demon
+demon's
+demoness
+demons
+demonstrable
+demonstrableness
+demonstrate
+demonstrated
+demonstrates
+demonstrating
+demonstration
+demonstrations
+demonstrative
+demonstratively
+demonstrativeness
+demonstrator
+demonstrator's
+demonstrators
+demos
+demur
+demurs
+den
+den's
+deniable
+denial
+denial's
+denials
+denied
+denier
+denies
+denigrate
+denigrated
+denigrates
+denigrating
+denigration
+denigrative
+denizen
+denizens
+denomination
+denomination's
+denominations
+denominator
+denominator's
+denominators
+denotable
+denotation
+denotation's
+denotational
+denotationally
+denotations
+denotative
+denote
+denoted
+denotes
+denoting
+denounce
+denounced
+denouncer
+denouncers
+denounces
+denouncing
+dens
+dense
+densely
+denseness
+denser
+densest
+densities
+density
+density's
+dent
+dental
+dentally
+dentals
+dented
+denting
+dentist
+dentist's
+dentists
+dents
+deny
+denying
+denyingly
+depart
+departed
+departing
+department
+department's
+departmental
+departmentally
+departments
+departs
+departure
+departure's
+departures
+depend
+dependability
+dependable
+dependableness
+dependably
+depended
+dependence
+dependences
+dependencies
+dependency
+dependent
+dependently
+dependents
+depending
+depends
+depict
+depicted
+depicter
+depicting
+depicts
+deplete
+depleted
+depletes
+depleting
+depletion
+depletions
+depletive
+deplorable
+deplorableness
+deplore
+deplored
+deplorer
+deplores
+deploring
+deploringly
+deploy
+deployed
+deploying
+deployment
+deployment's
+deployments
+deploys
+deport
+deportation
+deported
+deportee
+deportee's
+deportees
+deporting
+deportment
+deports
+depose
+deposed
+deposes
+deposing
+deposit
+deposited
+depositing
+deposition
+deposition's
+depositions
+depositor
+depositor's
+depositors
+deposits
+depot
+depot's
+depots
+deprave
+depraved
+depravedly
+depravedness
+depraver
+depraves
+depraving
+depreciate
+depreciated
+depreciates
+depreciating
+depreciatingly
+depreciation
+depreciations
+depreciative
+depreciatively
+depress
+depressed
+depresses
+depressing
+depressingly
+depression
+depression's
+depressions
+depressive
+depressively
+deprivation
+deprivation's
+deprivations
+deprive
+deprived
+deprives
+depriving
+depth
+depths
+deputies
+deputy
+deputy's
+dequeue
+dequeued
+dequeues
+dequeuing
+derail
+derailed
+derailing
+derails
+derbies
+derby
+dereference
+dereferenced
+dereferencer
+dereferencers
+dereferences
+dereferencing
+deride
+derided
+derider
+derides
+deriding
+deridingly
+derision
+derivable
+derivation
+derivation's
+derivations
+derivative
+derivative's
+derivatively
+derivativeness
+derivatives
+derive
+derived
+deriver
+derives
+deriving
+descend
+descendant
+descendant's
+descendants
+descended
+descender
+descenders
+descending
+descends
+descent
+descent's
+descents
+describable
+describe
+described
+describer
+describers
+describes
+describing
+descried
+description
+description's
+descriptions
+descriptive
+descriptively
+descriptiveness
+descriptives
+descriptor
+descriptor's
+descriptors
+descry
+descrying
+desert
+deserted
+deserter
+deserters
+deserting
+desertion
+desertions
+deserts
+deserve
+deserved
+deservedly
+deservedness
+deserver
+deserves
+deserving
+deservingly
+deservings
+desiderata
+desideratum
+design
+designate
+designated
+designates
+designating
+designation
+designations
+designative
+designator
+designator's
+designators
+designed
+designedly
+designer
+designer's
+designers
+designing
+designs
+desirability
+desirable
+desirableness
+desirably
+desire
+desired
+desirer
+desires
+desiring
+desirous
+desirously
+desirousness
+desk
+desk's
+desks
+desktop
+desolate
+desolated
+desolately
+desolateness
+desolater
+desolates
+desolating
+desolatingly
+desolation
+desolations
+despair
+despaired
+despairer
+despairing
+despairingly
+despairs
+despatch
+despatched
+desperate
+desperately
+desperateness
+desperation
+despise
+despised
+despiser
+despises
+despising
+despite
+despited
+despot
+despot's
+despotic
+despots
+dessert
+dessert's
+desserts
+destination
+destination's
+destinations
+destine
+destined
+destinies
+destining
+destiny
+destiny's
+destitute
+destituteness
+destitution
+destroy
+destroyed
+destroyer
+destroyer's
+destroyers
+destroying
+destroys
+destruction
+destruction's
+destructions
+destructive
+destructively
+destructiveness
+detach
+detached
+detachedly
+detachedness
+detacher
+detaches
+detaching
+detachment
+detachment's
+detachments
+detail
+detailed
+detailedly
+detailedness
+detailer
+detailing
+details
+detain
+detained
+detainer
+detaining
+detains
+detect
+detectable
+detectably
+detected
+detecting
+detection
+detection's
+detections
+detective
+detectives
+detector
+detector's
+detectors
+detects
+detention
+deteriorate
+deteriorated
+deteriorates
+deteriorating
+deterioration
+deteriorative
+determinable
+determinableness
+determinacy
+determinant
+determinant's
+determinants
+determinate
+determinately
+determinateness
+determination
+determinations
+determinative
+determinatively
+determinativeness
+determine
+determined
+determinedly
+determinedness
+determiner
+determiners
+determines
+determining
+determinism
+deterministic
+deterministically
+detest
+detestable
+detestableness
+detested
+detesting
+detests
+detonate
+detonated
+detonates
+detonating
+detonation
+detonative
+detract
+detracted
+detracting
+detractive
+detractively
+detractor
+detractor's
+detractors
+detracts
+detriment
+detriments
+devastate
+devastated
+devastates
+devastating
+devastatingly
+devastation
+devastations
+devastative
+develop
+developed
+developer
+developer's
+developers
+developing
+development
+development's
+developmental
+developmentally
+developments
+develops
+deviant
+deviant's
+deviantly
+deviants
+deviate
+deviated
+deviates
+deviating
+deviation
+deviations
+device
+device's
+devices
+devil
+devil's
+devilish
+devilishly
+devilishness
+devils
+devise
+devised
+deviser
+devises
+devising
+devisings
+devision
+devisions
+devoid
+devote
+devoted
+devotedly
+devotee
+devotee's
+devotees
+devotes
+devoting
+devotion
+devotions
+devour
+devoured
+devourer
+devouring
+devours
+devout
+devoutly
+devoutness
+dew
+dewdrop
+dewdrop's
+dewdrops
+dewed
+dewier
+dewiness
+dewing
+dews
+dewy
+dexterity
+diabetes
+diadem
+diagnosable
+diagnose
+diagnosed
+diagnoses
+diagnosing
+diagnosis
+diagnostic
+diagnostic's
+diagnostics
+diagonal
+diagonally
+diagonals
+diagram
+diagram's
+diagramed
+diagraming
+diagrammable
+diagrammatic
+diagrammatically
+diagrammed
+diagrammer
+diagrammer's
+diagrammers
+diagramming
+diagrams
+dial
+dial's
+dialect
+dialect's
+dialects
+dialog
+dialog's
+dialogs
+dialogue
+dialogue's
+dialogues
+dials
+diameter
+diameter's
+diameters
+diametrically
+diamond
+diamond's
+diamonds
+diaper
+diaper's
+diapered
+diapering
+diapers
+diaphragm
+diaphragm's
+diaphragms
+diaries
+diary
+diary's
+diatribe
+diatribe's
+diatribes
+dice
+dicer
+dices
+dichotomies
+dichotomy
+dicing
+dickens
+dicky
+dictate
+dictated
+dictates
+dictating
+dictation
+dictations
+dictator
+dictator's
+dictators
+dictatorship
+dictatorships
+diction
+dictionaries
+dictionary
+dictionary's
+dictions
+dictum
+dictum's
+dictums
+did
+didn't
+die
+died
+dielectric
+dielectric's
+dielectrics
+dies
+diet
+dieter
+dieters
+dietitian
+dietitian's
+dietitians
+diets
+differ
+differed
+difference
+difference's
+differenced
+differences
+differencing
+different
+differential
+differential's
+differentially
+differentials
+differentiate
+differentiated
+differentiates
+differentiating
+differentiation
+differentiations
+differentiators
+differently
+differentness
+differer
+differers
+differing
+differs
+difficult
+difficulties
+difficultly
+difficulty
+difficulty's
+diffuse
+diffused
+diffusely
+diffuseness
+diffuser
+diffusers
+diffuses
+diffusing
+diffusion
+diffusions
+diffusive
+diffusively
+diffusiveness
+dig
+digest
+digested
+digester
+digestible
+digesting
+digestion
+digestions
+digestive
+digestively
+digestiveness
+digests
+digger
+digger's
+diggers
+digging
+diggings
+digit
+digit's
+digital
+digitally
+digits
+dignified
+dignify
+dignities
+dignity
+digress
+digressed
+digresses
+digressing
+digression
+digression's
+digressions
+digressive
+digressively
+digressiveness
+digs
+dike
+dike's
+diker
+dikes
+diking
+dilate
+dilated
+dilatedly
+dilatedness
+dilates
+dilating
+dilation
+dilative
+dilemma
+dilemma's
+dilemmas
+diligence
+diligences
+diligent
+diligently
+diligentness
+dilute
+diluted
+dilutely
+diluteness
+diluter
+dilutes
+diluting
+dilution
+dilutions
+dilutive
+dim
+dime
+dime's
+dimension
+dimensional
+dimensionality
+dimensionally
+dimensioned
+dimensioning
+dimensions
+dimer
+dimers
+dimes
+diminish
+diminished
+diminishes
+diminishing
+diminution
+diminutive
+diminutively
+diminutiveness
+dimly
+dimmed
+dimmer
+dimmer's
+dimmers
+dimmest
+dimming
+dimness
+dimple
+dimpled
+dimples
+dimpling
+dims
+din
+dine
+dined
+diner
+diners
+dines
+dingier
+dinginess
+dingy
+dining
+dinner
+dinner's
+dinners
+dint
+diode
+diode's
+diodes
+dioxide
+dioxides
+dip
+diphtheria
+diploma
+diploma's
+diplomacy
+diplomas
+diplomat
+diplomat's
+diplomatic
+diplomatics
+diplomats
+dipped
+dipper
+dipper's
+dippers
+dipping
+dippings
+dips
+dire
+direct
+directed
+directing
+direction
+direction's
+directional
+directionality
+directionally
+directions
+directive
+directive's
+directives
+directly
+directness
+director
+director's
+directories
+directors
+directory
+directory's
+directs
+direly
+direness
+direr
+direst
+dirge
+dirge's
+dirged
+dirges
+dirging
+dirt
+dirt's
+dirtied
+dirtier
+dirties
+dirtiest
+dirtily
+dirtiness
+dirts
+dirty
+dirtying
+disabilities
+disability
+disability's
+disable
+disabled
+disabler
+disablers
+disables
+disabling
+disabuse
+disadvantage
+disadvantage's
+disadvantaged
+disadvantagedness
+disadvantages
+disadvantaging
+disagree
+disagreeable
+disagreeableness
+disagreed
+disagreeing
+disagreement
+disagreement's
+disagreements
+disagrees
+disallow
+disallowed
+disallowing
+disallows
+disambiguate
+disambiguated
+disambiguates
+disambiguating
+disambiguation
+disambiguations
+disappear
+disappearance
+disappearance's
+disappearances
+disappeared
+disappearing
+disappears
+disappoint
+disappointed
+disappointedly
+disappointing
+disappointingly
+disappointment
+disappointment's
+disappointments
+disappoints
+disapproval
+disapprove
+disapproved
+disapprover
+disapproves
+disapproving
+disapprovingly
+disarm
+disarmament
+disarmed
+disarmer
+disarmers
+disarming
+disarmingly
+disarms
+disassemble
+disassembled
+disassembler
+disassembler's
+disassemblers
+disassembles
+disassembling
+disaster
+disaster's
+disasters
+disastrous
+disastrously
+disband
+disbanded
+disbanding
+disbands
+disbelieve
+disbelieved
+disbeliever
+disbelievers
+disbelieves
+disbelieving
+disburse
+disbursed
+disbursement
+disbursement's
+disbursements
+disburser
+disburses
+disbursing
+disc
+disc's
+discard
+discarded
+discarder
+discarding
+discards
+discern
+discerned
+discerner
+discernibility
+discernible
+discernibly
+discerning
+discerningly
+discernment
+discerns
+discharge
+discharged
+discharger
+discharges
+discharging
+disciple
+disciple's
+disciples
+disciplinary
+discipline
+disciplined
+discipliner
+disciplines
+disciplining
+disclaim
+disclaimed
+disclaimer
+disclaimers
+disclaiming
+disclaims
+disclose
+disclosed
+discloser
+discloses
+disclosing
+disclosure
+disclosure's
+disclosures
+discomfort
+discomforting
+discomfortingly
+disconcert
+disconcerted
+disconcerting
+disconcertingly
+disconcerts
+disconnect
+disconnected
+disconnectedly
+disconnectedness
+disconnecter
+disconnecting
+disconnection
+disconnections
+disconnects
+discontent
+discontented
+discontentedly
+discontinuance
+discontinue
+discontinued
+discontinues
+discontinuing
+discontinuities
+discontinuity
+discontinuity's
+discontinuous
+discontinuously
+discord
+discords
+discount
+discounted
+discounter
+discounting
+discounts
+discourage
+discouraged
+discouragement
+discourager
+discourages
+discouraging
+discouragingly
+discourse
+discourse's
+discoursed
+discourser
+discourses
+discoursing
+discover
+discovered
+discoverer
+discoverers
+discoveries
+discovering
+discovers
+discovery
+discovery's
+discredit
+discredited
+discrediting
+discredits
+discreet
+discreetly
+discreetness
+discrepancies
+discrepancy
+discrepancy's
+discrete
+discretely
+discreteness
+discretion
+discretions
+discriminate
+discriminated
+discriminates
+discriminating
+discriminatingly
+discrimination
+discriminations
+discriminative
+discriminatory
+discs
+discuss
+discussed
+discusser
+discusses
+discussing
+discussion
+discussion's
+discussions
+disdain
+disdaining
+disdains
+disease
+diseased
+diseases
+diseasing
+disenfranchise
+disenfranchised
+disenfranchisement
+disenfranchisement's
+disenfranchisements
+disenfranchiser
+disenfranchises
+disenfranchising
+disengage
+disengaged
+disengages
+disengaging
+disentangle
+disentangled
+disentangler
+disentangles
+disentangling
+disfigure
+disfigured
+disfigures
+disfiguring
+disgorge
+disgorger
+disgrace
+disgraced
+disgraceful
+disgracefully
+disgracefulness
+disgracer
+disgraces
+disgracing
+disgruntled
+disguise
+disguised
+disguisedly
+disguiser
+disguises
+disguising
+disgust
+disgusted
+disgustedly
+disgusting
+disgustingly
+disgusts
+dish
+dishearten
+disheartening
+dishearteningly
+dished
+dishes
+dishing
+dishonest
+dishonestly
+dishwasher
+dishwashers
+disillusion
+disillusioned
+disillusioning
+disillusionment
+disillusionment's
+disillusionments
+disinterested
+disinterestedly
+disinterestedness
+disjoint
+disjointed
+disjointedly
+disjointedness
+disjointly
+disjointness
+disjunct
+disjunction
+disjunctions
+disjunctive
+disjunctively
+disjuncts
+disk
+disk's
+disked
+disking
+disks
+dislike
+disliked
+disliker
+dislikes
+disliking
+dislocate
+dislocated
+dislocates
+dislocating
+dislocation
+dislocations
+dislodge
+dislodged
+dislodges
+dislodging
+dismal
+dismally
+dismalness
+dismay
+dismayed
+dismaying
+dismayingly
+dismays
+dismiss
+dismissal
+dismissal's
+dismissals
+dismissed
+dismisser
+dismissers
+dismisses
+dismissing
+dismissive
+dismount
+dismounted
+dismounting
+dismounts
+disobedience
+disobey
+disobeyed
+disobeyer
+disobeying
+disobeys
+disorder
+disordered
+disorderedly
+disorderedness
+disorderliness
+disorderly
+disorders
+disown
+disowned
+disowning
+disowns
+disparate
+disparately
+disparateness
+disparities
+disparity
+disparity's
+dispatch
+dispatched
+dispatcher
+dispatchers
+dispatches
+dispatching
+dispel
+dispelled
+dispelling
+dispels
+dispensation
+dispense
+dispensed
+dispenser
+dispensers
+dispenses
+dispensing
+disperse
+dispersed
+dispersedly
+disperser
+disperses
+dispersing
+dispersion
+dispersions
+dispersive
+dispersively
+dispersiveness
+displace
+displaced
+displacement
+displacement's
+displacements
+displacer
+displaces
+displacing
+display
+displayed
+displayer
+displaying
+displays
+displease
+displeased
+displeasedly
+displeases
+displeasing
+displeasure
+disposable
+disposal
+disposal's
+disposals
+dispose
+disposed
+disposer
+disposes
+disposing
+disposition
+disposition's
+dispositions
+disprove
+disproved
+disproves
+disproving
+dispute
+disputed
+disputer
+disputers
+disputes
+disputing
+disqualification
+disqualified
+disqualifies
+disqualify
+disqualifying
+disquiet
+disquieting
+disquietingly
+disquietly
+disregard
+disregarded
+disregarding
+disregards
+disrupt
+disrupted
+disrupter
+disrupting
+disruption
+disruption's
+disruptions
+disruptive
+disruptively
+disruptiveness
+disrupts
+dissatisfaction
+dissatisfaction's
+dissatisfactions
+dissatisfied
+disseminate
+disseminated
+disseminates
+disseminating
+dissemination
+dissension
+dissension's
+dissensions
+dissent
+dissented
+dissenter
+dissenters
+dissenting
+dissents
+dissertation
+dissertation's
+dissertations
+disservice
+dissident
+dissident's
+dissidents
+dissimilar
+dissimilarities
+dissimilarity
+dissimilarity's
+dissimilarly
+dissipate
+dissipated
+dissipatedly
+dissipatedness
+dissipater
+dissipates
+dissipating
+dissipation
+dissipations
+dissipative
+dissociate
+dissociated
+dissociates
+dissociating
+dissociation
+dissociative
+dissolution
+dissolution's
+dissolutions
+dissolve
+dissolved
+dissolver
+dissolves
+dissolving
+dissonance
+dissonance's
+dissonances
+distal
+distally
+distance
+distanced
+distances
+distancing
+distant
+distantly
+distantness
+distaste
+distasteful
+distastefully
+distastefulness
+distastes
+distemper
+distill
+distillation
+distilled
+distiller
+distillers
+distilling
+distills
+distinct
+distinction
+distinction's
+distinctions
+distinctive
+distinctively
+distinctiveness
+distinctly
+distinctness
+distinguish
+distinguishable
+distinguished
+distinguisher
+distinguishes
+distinguishing
+distort
+distorted
+distorter
+distorting
+distortion
+distortion's
+distortions
+distorts
+distract
+distracted
+distractedly
+distracting
+distractingly
+distraction
+distraction's
+distractions
+distractive
+distracts
+distraught
+distraughtly
+distress
+distressed
+distresses
+distressing
+distressingly
+distribute
+distributed
+distributer
+distributes
+distributing
+distribution
+distribution's
+distributional
+distributions
+distributive
+distributively
+distributiveness
+distributivity
+distributor
+distributor's
+distributors
+district
+district's
+districted
+districting
+districts
+distrust
+distrusted
+distrusts
+disturb
+disturbance
+disturbance's
+disturbances
+disturbed
+disturber
+disturbing
+disturbingly
+disturbs
+ditch
+ditch's
+ditched
+ditcher
+ditches
+ditching
+divan
+divan's
+divans
+dive
+dived
+diver
+diverge
+diverged
+divergence
+divergence's
+divergences
+divergent
+divergently
+diverges
+diverging
+divers
+diverse
+diversely
+diverseness
+diversification
+diversified
+diversifier
+diversifies
+diversify
+diversifying
+diversion
+diversions
+diversities
+diversity
+divert
+diverted
+diverting
+diverts
+dives
+divest
+divested
+divesting
+divests
+divide
+divided
+dividend
+dividend's
+dividends
+divider
+dividers
+divides
+dividing
+divine
+divined
+divinely
+diviner
+divines
+diving
+divining
+divinities
+divinity
+divinity's
+division
+division's
+divisions
+divisor
+divisor's
+divisors
+divorce
+divorced
+divorces
+divorcing
+divulge
+divulged
+divulges
+divulging
+dizzied
+dizzier
+dizziness
+dizzy
+dizzying
+dizzyingly
+do
+dock
+docked
+docker
+docking
+docks
+doctor
+doctor's
+doctoral
+doctorate
+doctorate's
+doctorates
+doctored
+doctoring
+doctors
+doctrine
+doctrine's
+doctrines
+document
+document's
+documentaries
+documentary
+documentary's
+documentation
+documentation's
+documentations
+documented
+documenter
+documenters
+documenting
+documents
+dodge
+dodged
+dodger
+dodgers
+dodges
+dodging
+doer
+doers
+does
+doesn't
+dog
+dog's
+dogged
+doggedly
+doggedness
+dogging
+dogma
+dogma's
+dogmas
+dogmatism
+dogs
+doing
+doings
+dole
+doled
+doleful
+dolefully
+dolefulness
+doles
+doling
+doll
+doll's
+dollar
+dollars
+dollied
+dollies
+dolls
+dolly
+dolly's
+dollying
+dolphin
+dolphin's
+dolphins
+domain
+domain's
+domains
+dome
+domed
+domes
+domestic
+domestically
+domesticate
+domesticated
+domesticates
+domesticating
+domestication
+dominance
+dominant
+dominantly
+dominate
+dominated
+dominates
+dominating
+domination
+dominations
+dominative
+doming
+dominion
+dominions
+don
+don't
+donate
+donated
+donates
+donating
+donation
+donations
+donative
+done
+donkey
+donkey's
+donkeys
+dons
+doom
+doomed
+dooming
+dooms
+door
+door's
+doors
+doorstep
+doorstep's
+doorsteps
+doorway
+doorway's
+doorways
+dope
+doped
+doper
+dopers
+dopes
+doping
+dormant
+dormitories
+dormitory
+dormitory's
+dorsal
+dorsally
+dose
+dosed
+doses
+dosing
+dot
+dot's
+dote
+doted
+doter
+dotes
+doth
+doting
+dotingly
+dots
+dotted
+dotting
+double
+doubled
+doubleness
+doubler
+doublers
+doubles
+doublet
+doublet's
+doublets
+doubling
+doubly
+doubt
+doubtable
+doubted
+doubter
+doubters
+doubtful
+doubtfully
+doubtfulness
+doubting
+doubtingly
+doubtless
+doubtlessly
+doubtlessness
+doubts
+dough
+doughnut
+doughnut's
+doughnuts
+douse
+doused
+douser
+douses
+dousing
+dove
+dover
+doves
+down
+downcast
+downed
+downer
+downers
+downfall
+downfallen
+downier
+downing
+downplay
+downplayed
+downplaying
+downplays
+downright
+downrightly
+downrightness
+downs
+downstairs
+downstream
+downtown
+downtowner
+downtowns
+downward
+downwardly
+downwardness
+downwards
+downy
+doze
+dozed
+dozen
+dozens
+dozenth
+dozer
+dozes
+dozing
+drab
+drably
+drabness
+drabs
+draft
+draft's
+drafted
+drafter
+drafters
+drafting
+drafts
+draftsmen
+drag
+dragged
+dragging
+draggingly
+dragon
+dragon's
+dragons
+dragoon
+dragooned
+dragoons
+drags
+drain
+drainage
+drainages
+drained
+drainer
+drainers
+draining
+drains
+drake
+drama
+drama's
+dramas
+dramatic
+dramatically
+dramatics
+dramatist
+dramatist's
+dramatists
+drank
+drape
+draped
+draper
+draperies
+drapers
+drapery
+drapery's
+drapes
+draping
+drastic
+drastically
+draw
+drawback
+drawback's
+drawbacks
+drawbridge
+drawbridge's
+drawbridges
+drawer
+drawers
+drawing
+drawings
+drawl
+drawled
+drawler
+drawling
+drawlingly
+drawls
+drawly
+drawn
+drawnly
+drawnness
+draws
+dread
+dreaded
+dreadful
+dreadfully
+dreadfulness
+dreading
+dreads
+dream
+dreamed
+dreamer
+dreamers
+dreamier
+dreamily
+dreaminess
+dreaming
+dreamingly
+dreams
+dreamy
+drearier
+dreariness
+dreary
+dredge
+dredge's
+dredged
+dredger
+dredgers
+dredges
+dredging
+dregs
+drench
+drenched
+drencher
+drenches
+drenching
+dress
+dressed
+dresser
+dressers
+dresses
+dressing
+dressings
+dressmaker
+dressmaker's
+dressmakers
+drew
+dried
+drier
+drier's
+driers
+dries
+driest
+drift
+drifted
+drifter
+drifters
+drifting
+driftingly
+drifts
+drill
+drilled
+driller
+drilling
+drills
+drily
+drink
+drinkable
+drinker
+drinkers
+drinking
+drinks
+drip
+drip's
+drips
+drive
+driven
+drivenness
+driver
+driver's
+drivers
+drives
+driveway
+driveway's
+driveways
+driving
+drone
+drone's
+droner
+drones
+droning
+droningly
+drool
+drooled
+drooler
+drooling
+drools
+droop
+drooped
+drooping
+droopingly
+droops
+drop
+drop's
+dropped
+dropper
+dropper's
+droppers
+dropping
+dropping's
+droppings
+drops
+drought
+drought's
+droughts
+drove
+drover
+drovers
+droves
+drown
+drowned
+drowner
+drowning
+drownings
+drowns
+drowsier
+drowsiest
+drowsiness
+drowsy
+drudgery
+drug
+drug's
+druggist
+druggist's
+druggists
+drugs
+drum
+drum's
+drummed
+drummer
+drummer's
+drummers
+drumming
+drums
+drunk
+drunk's
+drunkard
+drunkard's
+drunkards
+drunken
+drunkenly
+drunkenness
+drunker
+drunkly
+drunks
+dry
+drying
+dryly
+dual
+dualities
+duality
+duality's
+dually
+duals
+dub
+dubious
+dubiously
+dubiousness
+dubs
+duchess
+duchess's
+duchesses
+duchies
+duchy
+duck
+ducked
+ducker
+ducking
+ducks
+dude
+due
+duel
+duels
+dueness
+dues
+dug
+duke
+duke's
+dukes
+dull
+dulled
+duller
+dullest
+dulling
+dullness
+dulls
+dully
+duly
+dumb
+dumbbell
+dumbbell's
+dumbbells
+dumber
+dumbest
+dumbly
+dumbness
+dummied
+dummies
+dummy
+dummy's
+dummying
+dump
+dumped
+dumper
+dumpers
+dumping
+dumps
+dunce
+dunce's
+dunces
+dune
+dune's
+dunes
+dungeon
+dungeon's
+dungeons
+duplicate
+duplicated
+duplicates
+duplicating
+duplication
+duplications
+duplicative
+duplicator
+duplicator's
+duplicators
+durabilities
+durability
+durable
+durableness
+durables
+durably
+duration
+duration's
+durations
+during
+dusk
+duskier
+duskiness
+dusky
+dust
+dusted
+duster
+dusters
+dustier
+dustiest
+dustiness
+dusting
+dusts
+dusty
+duties
+dutiful
+dutifully
+dutifulness
+duty
+duty's
+dwarf
+dwarfed
+dwarfness
+dwarfs
+dwell
+dwelled
+dweller
+dwellers
+dwelling
+dwellings
+dwells
+dwindle
+dwindled
+dwindles
+dwindling
+dye
+dyed
+dyeing
+dyer
+dyers
+dyes
+dying
+dynamic
+dynamically
+dynamics
+dynamite
+dynamited
+dynamiter
+dynamites
+dynamiting
+dynasties
+dynasty
+dynasty's
+each
+eager
+eagerly
+eagerness
+eagle
+eagle's
+eagles
+ear
+eared
+earing
+earl
+earl's
+earlier
+earliest
+earliness
+earls
+early
+earmark
+earmarked
+earmarking
+earmarkings
+earmarks
+earn
+earned
+earner
+earner's
+earners
+earnest
+earnestly
+earnestness
+earning
+earnings
+earns
+earring
+earring's
+earrings
+ears
+earshot
+earth
+earth's
+earthed
+earthen
+earthenware
+earthliness
+earthly
+earthquake
+earthquake's
+earthquakes
+earths
+earthworm
+earthworm's
+earthworms
+ease
+eased
+easement
+easement's
+easements
+easer
+eases
+easier
+easiest
+easily
+easiness
+easing
+east
+easter
+easterly
+eastern
+easterner
+easterners
+easting
+easts
+eastward
+eastwards
+easy
+eat
+eaten
+eater
+eaters
+eating
+eatings
+eats
+eaves
+eavesdrop
+eavesdropped
+eavesdropper
+eavesdropper's
+eavesdroppers
+eavesdropping
+eavesdrops
+ebb
+ebbed
+ebbing
+ebbs
+ebony
+eccentric
+eccentric's
+eccentricities
+eccentricity
+eccentrics
+ecclesiastical
+ecclesiastically
+echo
+echoed
+echoes
+echoing
+echos
+eclipse
+eclipsed
+eclipses
+eclipsing
+ecology
+economic
+economical
+economically
+economics
+economies
+economist
+economist's
+economists
+economy
+economy's
+ecstasy
+eddied
+eddies
+eddy
+eddy's
+eddying
+edge
+edged
+edger
+edges
+edging
+edible
+edibleness
+edibles
+edict
+edict's
+edicts
+edifice
+edifice's
+edifices
+edit
+edited
+editing
+edition
+edition's
+editions
+editor
+editor's
+editorial
+editorially
+editorials
+editors
+edits
+educate
+educated
+educatedly
+educatedness
+educates
+educating
+education
+education's
+educational
+educationally
+educations
+educative
+educator
+educator's
+educators
+eel
+eel's
+eels
+eerie
+eerier
+effect
+effected
+effecting
+effective
+effectively
+effectiveness
+effectives
+effector
+effector's
+effectors
+effects
+effectually
+effeminate
+efficacy
+efficiencies
+efficiency
+efficient
+efficiently
+effigy
+effort
+effort's
+effortless
+effortlessly
+effortlessness
+efforts
+egg
+egged
+egger
+egging
+eggs
+ego
+egos
+eigenvalue
+eigenvalue's
+eigenvalues
+eight
+eighteen
+eighteens
+eighteenth
+eighth
+eighth's
+eighthes
+eighties
+eightieth
+eights
+eighty
+either
+ejaculate
+ejaculated
+ejaculates
+ejaculating
+ejaculation
+ejaculations
+eject
+ejected
+ejecting
+ejective
+ejects
+eke
+eked
+ekes
+eking
+el
+elaborate
+elaborated
+elaborately
+elaborateness
+elaborates
+elaborating
+elaboration
+elaborations
+elaborative
+elaborators
+elapse
+elapsed
+elapses
+elapsing
+elastic
+elastically
+elasticities
+elasticity
+elastics
+elate
+elated
+elatedly
+elatedness
+elater
+elates
+elating
+elation
+elbow
+elbowed
+elbowing
+elbows
+elder
+elderliness
+elderly
+elders
+eldest
+elect
+elected
+electing
+election
+election's
+elections
+elective
+electively
+electiveness
+electives
+elector
+elector's
+electoral
+electorally
+electors
+electric
+electrical
+electrically
+electricalness
+electricities
+electricity
+electrics
+electrification
+electrified
+electrify
+electrifying
+electrocute
+electrocuted
+electrocutes
+electrocuting
+electrocution
+electrocutions
+electrode
+electrode's
+electrodes
+electrolyte
+electrolyte's
+electrolytes
+electrolytic
+electron
+electron's
+electronic
+electronically
+electronics
+electrons
+elects
+elegance
+elegances
+elegant
+elegantly
+element
+element's
+elemental
+elementally
+elementals
+elementariness
+elementary
+elements
+elephant
+elephant's
+elephants
+elevate
+elevated
+elevates
+elevating
+elevation
+elevations
+elevator
+elevator's
+elevators
+eleven
+elevens
+elevenses
+eleventh
+elf
+elicit
+elicited
+eliciting
+elicits
+eligibilities
+eligibility
+eligible
+eligibles
+eliminate
+eliminated
+eliminately
+eliminates
+eliminating
+elimination
+eliminations
+eliminative
+eliminator
+eliminators
+elk
+elk's
+elks
+ellipse
+ellipse's
+ellipses
+ellipsis
+ellipsoid
+ellipsoid's
+ellipsoidal
+ellipsoids
+elliptic
+elliptical
+elliptically
+elm
+elmer
+elms
+elongate
+elongated
+elongates
+elongating
+elongation
+eloquence
+eloquent
+eloquently
+els
+else
+else's
+elsewhere
+elucidate
+elucidated
+elucidates
+elucidating
+elucidation
+elucidative
+elude
+eluded
+eludes
+eluding
+elusive
+elusively
+elusiveness
+elves
+emaciated
+emacs
+emacs's
+email
+email's
+emanating
+emancipation
+embark
+embarked
+embarking
+embarks
+embarrass
+embarrassed
+embarrassedly
+embarrasses
+embarrassing
+embarrassingly
+embarrassment
+embassies
+embassy
+embassy's
+embed
+embedded
+embedding
+embeds
+embellish
+embellished
+embellisher
+embellishes
+embellishing
+embellishment
+embellishment's
+embellishments
+ember
+embers
+embezzle
+embezzled
+embezzler
+embezzler's
+embezzlers
+embezzles
+embezzling
+emblem
+emblems
+embodied
+embodier
+embodies
+embodiment
+embodiment's
+embodiments
+embody
+embodying
+embrace
+embraced
+embracer
+embraces
+embracing
+embracingly
+embracive
+embroider
+embroidered
+embroiderer
+embroideries
+embroiders
+embroidery
+embryo
+embryo's
+embryology
+embryos
+emerald
+emerald's
+emeralds
+emerge
+emerged
+emergence
+emergencies
+emergency
+emergency's
+emergent
+emerges
+emerging
+emeries
+emery
+emigrant
+emigrant's
+emigrants
+emigrate
+emigrated
+emigrates
+emigrating
+emigration
+eminence
+eminent
+eminently
+emit
+emits
+emitted
+emotion
+emotion's
+emotional
+emotionally
+emotions
+empathy
+emperor
+emperor's
+emperors
+emphases
+emphasis
+emphatic
+emphatically
+empire
+empire's
+empires
+empirical
+empirically
+empiricist
+empiricist's
+empiricists
+employ
+employable
+employed
+employee
+employee's
+employees
+employer
+employer's
+employers
+employing
+employment
+employment's
+employments
+employs
+empower
+empowered
+empowering
+empowers
+empress
+emptied
+emptier
+empties
+emptiest
+emptily
+emptiness
+empty
+emptying
+emulate
+emulated
+emulates
+emulating
+emulation
+emulations
+emulative
+emulatively
+emulator
+emulator's
+emulators
+enable
+enabled
+enabler
+enablers
+enables
+enabling
+enact
+enacted
+enacting
+enactment
+enactments
+enacts
+enamel
+enamels
+encamp
+encamped
+encamping
+encamps
+encapsulate
+encapsulated
+encapsulates
+encapsulating
+encapsulation
+enchant
+enchanted
+enchanter
+enchanting
+enchantingly
+enchantment
+enchants
+encipher
+enciphered
+encipherer
+enciphering
+enciphers
+encircle
+encircled
+encircles
+encircling
+enclose
+enclosed
+encloses
+enclosing
+enclosure
+enclosure's
+enclosures
+encode
+encoded
+encoder
+encoders
+encodes
+encoding
+encodings
+encompass
+encompassed
+encompasses
+encompassing
+encounter
+encountered
+encountering
+encounters
+encourage
+encouraged
+encouragement
+encouragements
+encourager
+encourages
+encouraging
+encouragingly
+encrypt
+encrypted
+encrypting
+encryption
+encryption's
+encryptions
+encrypts
+encumber
+encumbered
+encumbering
+encumbers
+encyclopedia
+encyclopedia's
+encyclopedias
+encyclopedic
+end
+endanger
+endangered
+endangering
+endangers
+endear
+endeared
+endearing
+endearingly
+endears
+ended
+endemic
+ender
+enders
+ending
+endings
+endive
+endless
+endlessly
+endlessness
+endorse
+endorsed
+endorsement
+endorsement's
+endorsements
+endorser
+endorses
+endorsing
+endow
+endowed
+endowing
+endowment
+endowment's
+endowments
+endows
+ends
+endurable
+endurably
+endurance
+endure
+endured
+endures
+enduring
+enduringly
+enduringness
+enema
+enema's
+enemas
+enemies
+enemy
+enemy's
+energetic
+energetics
+energies
+energy
+enforce
+enforced
+enforcedly
+enforcement
+enforcer
+enforcers
+enforces
+enforcing
+enfranchise
+enfranchised
+enfranchisement
+enfranchiser
+enfranchises
+enfranchising
+engage
+engaged
+engagement
+engagement's
+engagements
+engages
+engaging
+engagingly
+engender
+engendered
+engendering
+engenders
+engine
+engine's
+engined
+engineer
+engineer's
+engineered
+engineering
+engineeringly
+engineerings
+engineers
+engines
+engining
+england
+englander
+englanders
+engrave
+engraved
+engraver
+engravers
+engraves
+engraving
+engravings
+engross
+engrossed
+engrossedly
+engrosser
+engrossing
+engrossingly
+enhance
+enhanced
+enhancement
+enhancement's
+enhancements
+enhances
+enhancing
+enigmatic
+enjoin
+enjoined
+enjoining
+enjoins
+enjoy
+enjoyable
+enjoyableness
+enjoyably
+enjoyed
+enjoying
+enjoyment
+enjoys
+enlarge
+enlarged
+enlargement
+enlargement's
+enlargements
+enlarger
+enlargers
+enlarges
+enlarging
+enlighten
+enlightened
+enlightening
+enlightenment
+enlightens
+enlist
+enlisted
+enlister
+enlisting
+enlistment
+enlistments
+enlists
+enliven
+enlivened
+enlivening
+enlivens
+enmities
+enmity
+ennoble
+ennobled
+ennobler
+ennobles
+ennobling
+ennui
+enormities
+enormity
+enormous
+enormously
+enormousness
+enough
+enqueue
+enqueued
+enqueues
+enquire
+enquired
+enquirer
+enquirers
+enquires
+enquiring
+enrage
+enraged
+enrages
+enraging
+enrich
+enriched
+enricher
+enriches
+enriching
+enrolled
+enrolling
+ensemble
+ensemble's
+ensembles
+ensign
+ensign's
+ensigns
+enslave
+enslaved
+enslaver
+enslavers
+enslaves
+enslaving
+ensnare
+ensnared
+ensnares
+ensnaring
+ensue
+ensued
+ensues
+ensuing
+ensure
+ensured
+ensurer
+ensurers
+ensures
+ensuring
+entail
+entailed
+entailer
+entailing
+entails
+entangle
+entangled
+entangler
+entangles
+entangling
+enter
+entered
+enterer
+entering
+enterprise
+enterpriser
+enterprises
+enterprising
+enterprisingly
+enters
+entertain
+entertained
+entertainer
+entertainers
+entertaining
+entertainingly
+entertainment
+entertainment's
+entertainments
+entertains
+enthusiasm
+enthusiasms
+enthusiast
+enthusiast's
+enthusiastic
+enthusiastically
+enthusiasts
+entice
+enticed
+enticer
+enticers
+entices
+enticing
+entire
+entirely
+entireties
+entirety
+entities
+entitle
+entitled
+entitles
+entitling
+entity
+entity's
+entrance
+entranced
+entrances
+entrancing
+entreat
+entreated
+entreaties
+entreating
+entreatingly
+entreats
+entreaty
+entrench
+entrenched
+entrenches
+entrenching
+entrepreneur
+entrepreneur's
+entrepreneurs
+entries
+entropies
+entropy
+entrust
+entrusted
+entrusting
+entrusts
+entry
+entry's
+enumerable
+enumerate
+enumerated
+enumerates
+enumerating
+enumeration
+enumerations
+enumerative
+enumerator
+enumerator's
+enumerators
+enunciation
+envelop
+envelope
+enveloped
+enveloper
+envelopes
+enveloping
+envelops
+enviably
+envied
+envier
+envies
+envious
+enviously
+enviousness
+environ
+environed
+environing
+environment
+environment's
+environmental
+environmentally
+environments
+environs
+envisage
+envisaged
+envisages
+envisaging
+envision
+envisioned
+envisioning
+envisions
+envoy
+envoy's
+envoys
+envy
+envying
+envyingly
+epaulet
+epaulet's
+epaulets
+ephemeral
+ephemerally
+ephemerals
+epic
+epic's
+epics
+epidemic
+epidemic's
+epidemics
+episcopal
+episcopally
+episode
+episode's
+episodes
+episodic
+epistemological
+epistemologically
+epistemology
+epistle
+epistle's
+epistler
+epistles
+epitaph
+epitaphed
+epitaphing
+epitaphs
+epitaxial
+epitaxially
+epithet
+epithet's
+epithets
+epoch
+epochs
+epsilon
+epsilons
+equal
+equalities
+equality
+equality's
+equally
+equals
+equate
+equated
+equates
+equating
+equation
+equations
+equator
+equator's
+equatorial
+equators
+equilibrium
+equilibriums
+equip
+equipment
+equipments
+equipped
+equipping
+equips
+equitable
+equitableness
+equitably
+equities
+equity
+equivalence
+equivalenced
+equivalences
+equivalencing
+equivalent
+equivalently
+equivalents
+era
+era's
+eradicate
+eradicated
+eradicates
+eradicating
+eradication
+eradicative
+eras
+erasable
+erase
+erased
+eraser
+erasers
+erases
+erasing
+erasion
+erasure
+ere
+erect
+erected
+erecting
+erection
+erection's
+erections
+erectly
+erectness
+erector
+erector's
+erectors
+erects
+ergo
+ermine
+ermine's
+ermined
+ermines
+err
+errand
+errands
+erratic
+erred
+erring
+erringly
+erroneous
+erroneously
+erroneousness
+error
+error's
+errors
+errs
+eruption
+eruptions
+escalate
+escalated
+escalates
+escalating
+escalation
+escapable
+escapade
+escapade's
+escapades
+escape
+escaped
+escapee
+escapee's
+escapees
+escaper
+escapes
+escaping
+eschew
+eschewed
+eschewing
+eschews
+escort
+escorted
+escorting
+escorts
+esoteric
+especial
+especially
+espied
+espies
+espionage
+espouse
+espoused
+espouser
+espouses
+espousing
+esprit
+esprits
+espy
+espying
+esquire
+esquires
+essay
+essayed
+essayer
+essays
+essence
+essence's
+essences
+essential
+essentially
+essentialness
+essentials
+establish
+established
+establisher
+establishes
+establishing
+establishment
+establishment's
+establishments
+estate
+estate's
+estates
+esteem
+esteemed
+esteeming
+esteems
+estimate
+estimated
+estimates
+estimating
+estimation
+estimations
+estimative
+etc
+eternal
+eternally
+eternalness
+eternities
+eternity
+ethereal
+ethereally
+etherealness
+ethic
+ethical
+ethically
+ethicalness
+ethics
+ethnic
+etiquette
+eunuch
+eunuchs
+euphemism
+euphemism's
+euphemisms
+euphoria
+evacuate
+evacuated
+evacuates
+evacuating
+evacuation
+evacuations
+evacuative
+evade
+evaded
+evader
+evades
+evading
+evaluate
+evaluated
+evaluates
+evaluating
+evaluation
+evaluations
+evaluative
+evaluator
+evaluator's
+evaluators
+evaporate
+evaporated
+evaporates
+evaporating
+evaporation
+evaporations
+evaporative
+evaporatively
+eve
+even
+evened
+evener
+evenhanded
+evenhandedly
+evenhandedness
+evening
+evening's
+evenings
+evenly
+evenness
+evens
+event
+event's
+eventful
+eventfully
+eventfulness
+events
+eventual
+eventualities
+eventuality
+eventually
+ever
+everest
+evergreen
+everlasting
+everlastingly
+everlastingness
+evermore
+every
+everybody
+everybody's
+everyday
+everydayness
+everyone
+everyone's
+everyones
+everything
+everywhere
+eves
+evict
+evicted
+evicting
+eviction
+eviction's
+evictions
+evicts
+evidence
+evidenced
+evidences
+evidencing
+evident
+evidently
+evil
+evilly
+evilness
+evils
+evince
+evinced
+evinces
+evincing
+evoke
+evoked
+evokes
+evoking
+evolute
+evolute's
+evolutes
+evolution
+evolution's
+evolutionary
+evolutions
+evolve
+evolved
+evolves
+evolving
+ewe
+ewe's
+ewer
+ewes
+exacerbate
+exacerbated
+exacerbates
+exacerbating
+exacerbation
+exacerbations
+exact
+exacted
+exacter
+exacting
+exactingly
+exactingness
+exaction
+exaction's
+exactions
+exactitude
+exactly
+exactness
+exacts
+exaggerate
+exaggerated
+exaggeratedly
+exaggeratedness
+exaggerates
+exaggerating
+exaggeration
+exaggerations
+exaggerative
+exaggeratively
+exalt
+exalted
+exaltedly
+exalter
+exalters
+exalting
+exalts
+exam
+exam's
+examen
+examination
+examination's
+examinations
+examine
+examined
+examiner
+examiners
+examines
+examining
+example
+example's
+exampled
+examples
+exampling
+exams
+exasperate
+exasperated
+exasperatedly
+exasperates
+exasperating
+exasperatingly
+exasperation
+exasperations
+excavate
+excavated
+excavates
+excavating
+excavation
+excavations
+exceed
+exceeded
+exceeder
+exceeding
+exceedingly
+exceeds
+excel
+excelled
+excellence
+excellences
+excellency
+excellent
+excellently
+excelling
+excels
+except
+excepted
+excepting
+exception
+exception's
+exceptional
+exceptionally
+exceptionalness
+exceptions
+exceptive
+excepts
+excerpt
+excerpted
+excerpter
+excerpts
+excess
+excesses
+excessive
+excessively
+excessiveness
+exchange
+exchangeable
+exchanged
+exchanger
+exchangers
+exchanges
+exchanging
+exchequer
+exchequer's
+exchequers
+excise
+excised
+excises
+excising
+excision
+excisions
+excitable
+excitableness
+excitation
+excitation's
+excitations
+excite
+excited
+excitedly
+excitement
+exciter
+excites
+exciting
+excitingly
+exclaim
+exclaimed
+exclaimer
+exclaimers
+exclaiming
+exclaims
+exclamation
+exclamation's
+exclamations
+exclude
+excluded
+excluder
+excludes
+excluding
+exclusion
+exclusioner
+exclusioners
+exclusions
+exclusive
+exclusively
+exclusiveness
+exclusivity
+excommunicate
+excommunicated
+excommunicates
+excommunicating
+excommunication
+excommunicative
+excrete
+excreted
+excreter
+excretes
+excreting
+excretion
+excretions
+excruciatingly
+excursion
+excursion's
+excursions
+excusable
+excusableness
+excusably
+excuse
+excused
+excuser
+excuses
+excusing
+executable
+executable's
+executables
+execute
+executed
+executer
+executers
+executes
+executing
+execution
+executional
+executioner
+executions
+executive
+executive's
+executives
+executor
+executor's
+executors
+exemplar
+exemplariness
+exemplars
+exemplary
+exemplification
+exemplified
+exemplifier
+exemplifiers
+exemplifies
+exemplify
+exemplifying
+exempt
+exempted
+exempting
+exempts
+exercise
+exercised
+exerciser
+exercisers
+exercises
+exercising
+exert
+exerted
+exerting
+exertion
+exertion's
+exertions
+exerts
+exhale
+exhaled
+exhales
+exhaling
+exhaust
+exhausted
+exhaustedly
+exhauster
+exhaustible
+exhausting
+exhaustingly
+exhaustion
+exhaustive
+exhaustively
+exhaustiveness
+exhausts
+exhibit
+exhibited
+exhibiting
+exhibition
+exhibition's
+exhibitioner
+exhibitions
+exhibitive
+exhibitor
+exhibitor's
+exhibitors
+exhibits
+exhortation
+exhortation's
+exhortations
+exigencies
+exigency
+exile
+exiled
+exiles
+exiling
+exist
+existed
+existence
+existences
+existent
+existential
+existentialism
+existentialist
+existentialist's
+existentialists
+existentially
+existing
+exists
+exit
+exited
+exiting
+exits
+exorbitant
+exorbitantly
+exoskeletons
+exotic
+exoticness
+expand
+expandable
+expanded
+expander
+expander's
+expanders
+expanding
+expands
+expanse
+expansed
+expanses
+expansing
+expansion
+expansionism
+expansions
+expansive
+expansively
+expansiveness
+expect
+expectancies
+expectancy
+expectant
+expectantly
+expectation
+expectation's
+expectations
+expected
+expectedly
+expectedness
+expecting
+expectingly
+expects
+expedient
+expediently
+expedite
+expedited
+expediter
+expedites
+expediting
+expedition
+expedition's
+expeditions
+expeditious
+expeditiously
+expeditiousness
+expel
+expelled
+expelling
+expels
+expend
+expendable
+expended
+expender
+expending
+expenditure
+expenditure's
+expenditures
+expends
+expense
+expensed
+expenses
+expensing
+expensive
+expensively
+expensiveness
+experience
+experienced
+experiences
+experiencing
+experiment
+experimental
+experimentally
+experimentation
+experimentation's
+experimentations
+experimented
+experimenter
+experimenters
+experimenting
+experiments
+expert
+expertise
+expertly
+expertness
+experts
+expiration
+expiration's
+expirations
+expire
+expired
+expires
+expiring
+explain
+explainable
+explained
+explainer
+explainers
+explaining
+explains
+explanation
+explanation's
+explanations
+explanatory
+explicit
+explicitly
+explicitness
+explode
+exploded
+exploder
+explodes
+exploding
+exploit
+exploitable
+exploitation
+exploitation's
+exploitations
+exploited
+exploiter
+exploiters
+exploiting
+exploitive
+exploits
+exploration
+exploration's
+explorations
+exploratory
+explore
+explored
+explorer
+explorers
+explores
+exploring
+explosion
+explosion's
+explosions
+explosive
+explosively
+explosiveness
+explosives
+exponent
+exponent's
+exponential
+exponentially
+exponentials
+exponentiate
+exponentiated
+exponentiates
+exponentiating
+exponentiation
+exponentiation's
+exponentiations
+exponents
+export
+exported
+exporter
+exporters
+exporting
+exports
+expose
+exposed
+exposer
+exposers
+exposes
+exposing
+exposition
+exposition's
+expositions
+expository
+exposure
+exposure's
+exposures
+expound
+expounded
+expounder
+expounding
+expounds
+express
+expressed
+expresser
+expresses
+expressibility
+expressible
+expressibly
+expressing
+expression
+expression's
+expressions
+expressive
+expressively
+expressiveness
+expressly
+expropriate
+expropriated
+expropriates
+expropriating
+expropriation
+expropriations
+expulsion
+expunge
+expunged
+expunger
+expunges
+expunging
+exquisite
+exquisitely
+exquisiteness
+extant
+extend
+extended
+extendedly
+extendedness
+extender
+extendible
+extendibles
+extending
+extends
+extensibility
+extensible
+extension
+extension's
+extensions
+extensive
+extensively
+extensiveness
+extent
+extent's
+extents
+extenuate
+extenuated
+extenuating
+extenuation
+exterior
+exterior's
+exteriorly
+exteriors
+exterminate
+exterminated
+exterminates
+exterminating
+extermination
+exterminations
+external
+externally
+externals
+extinct
+extinction
+extinctive
+extinguish
+extinguished
+extinguisher
+extinguishers
+extinguishes
+extinguishing
+extol
+extols
+extortion
+extortioner
+extortionist
+extortionist's
+extortionists
+extra
+extract
+extracted
+extracting
+extraction
+extraction's
+extractions
+extractive
+extractively
+extractor
+extractor's
+extractors
+extracts
+extracurricular
+extraneous
+extraneously
+extraneousness
+extraordinarily
+extraordinariness
+extraordinary
+extrapolate
+extrapolated
+extrapolates
+extrapolating
+extrapolation
+extrapolations
+extrapolative
+extras
+extravagance
+extravagant
+extravagantly
+extremal
+extreme
+extremed
+extremely
+extremeness
+extremer
+extremes
+extremest
+extremist
+extremist's
+extremists
+extremities
+extremity
+extremity's
+extrinsic
+exuberance
+exult
+exultation
+exulted
+exulting
+exultingly
+exults
+eye
+eyeball
+eyeballs
+eyebrow
+eyebrow's
+eyebrows
+eyed
+eyedness
+eyeglass
+eyeglasses
+eyeing
+eyelid
+eyelid's
+eyelids
+eyepiece
+eyepiece's
+eyepieces
+eyer
+eyers
+eyes
+eyesight
+eyewitness
+eyewitness's
+eyewitnesses
+eying
+fable
+fabled
+fabler
+fables
+fabling
+fabric
+fabric's
+fabricate
+fabricated
+fabricates
+fabricating
+fabrication
+fabrications
+fabrics
+fabulous
+fabulously
+fabulousness
+facade
+facaded
+facades
+facading
+face
+faced
+faceless
+facelessness
+facer
+faces
+facet
+faceted
+faceting
+facets
+facial
+facially
+facile
+facilely
+facileness
+facilitate
+facilitated
+facilitates
+facilitating
+facilitation
+facilitative
+facilities
+facility
+facility's
+facing
+facings
+facsimile
+facsimile's
+facsimiled
+facsimiles
+facsimiling
+fact
+fact's
+faction
+faction's
+factions
+factor
+factored
+factorial
+factories
+factoring
+factorings
+factors
+factory
+factory's
+facts
+factual
+factually
+factualness
+faculties
+faculty
+faculty's
+fade
+faded
+fadedly
+fader
+faders
+fades
+fading
+fag
+fags
+fail
+failed
+failing
+failingly
+failings
+fails
+failure
+failure's
+failures
+fain
+faint
+fainted
+fainter
+faintest
+fainting
+faintly
+faintness
+faints
+fair
+faired
+fairer
+fairest
+fairies
+fairing
+fairly
+fairness
+fairs
+fairy
+fairy's
+fairyland
+faith
+faithful
+faithfully
+faithfulness
+faithfuls
+faithless
+faithlessly
+faithlessness
+faiths
+fake
+faked
+faker
+fakes
+faking
+falcon
+falconer
+falcons
+fall
+fallacies
+fallacious
+fallaciously
+fallaciousness
+fallacy
+fallacy's
+fallen
+faller
+fallibility
+fallible
+falling
+falls
+false
+falsehood
+falsehood's
+falsehoods
+falsely
+falseness
+falser
+falsest
+falsification
+falsified
+falsifier
+falsifies
+falsify
+falsifying
+falsity
+falter
+faltered
+falterer
+faltering
+falteringly
+falters
+fame
+famed
+fames
+familiar
+familiarities
+familiarity
+familiarly
+familiarness
+familiars
+families
+family
+family's
+famine
+famine's
+famines
+faming
+famish
+famished
+famishes
+famishing
+famous
+famously
+famousness
+fan
+fan's
+fanatic
+fanatic's
+fanatically
+fanatics
+fancied
+fancier
+fancier's
+fanciers
+fancies
+fanciest
+fanciful
+fancifully
+fancifulness
+fancily
+fanciness
+fancy
+fancying
+fang
+fang's
+fanged
+fangs
+fanned
+fanning
+fans
+fantasied
+fantasies
+fantastic
+fantasy
+fantasy's
+far
+faraway
+farce
+farce's
+farces
+farcing
+fare
+fared
+farer
+fares
+farewell
+farewells
+faring
+farm
+farmed
+farmer
+farmer's
+farmers
+farmhouse
+farmhouse's
+farmhouses
+farming
+farms
+farmyard
+farmyard's
+farmyards
+farther
+farthest
+farthing
+fascinate
+fascinated
+fascinates
+fascinating
+fascinatingly
+fascination
+fascinations
+fashion
+fashionable
+fashionableness
+fashionably
+fashioned
+fashioner
+fashioners
+fashioning
+fashions
+fast
+fasted
+fasten
+fastened
+fastener
+fasteners
+fastening
+fastenings
+fastens
+faster
+fastest
+fasting
+fastness
+fasts
+fat
+fatal
+fatalities
+fatality
+fatality's
+fatally
+fatals
+fate
+fated
+fates
+father
+father's
+fathered
+fathering
+fatherland
+fatherliness
+fatherly
+fathers
+fathom
+fathomed
+fathoming
+fathoms
+fatigue
+fatigued
+fatigues
+fatiguing
+fatiguingly
+fating
+fatly
+fatness
+fats
+fatten
+fattened
+fattener
+fatteners
+fattening
+fattens
+fatter
+fattest
+fault
+faulted
+faultier
+faultiness
+faulting
+faultless
+faultlessly
+faultlessness
+faults
+faulty
+fawn
+fawned
+fawner
+fawning
+fawningly
+fawns
+fear
+feared
+fearer
+fearful
+fearfully
+fearfulness
+fearing
+fearless
+fearlessly
+fearlessness
+fears
+feasibility
+feasible
+feasibleness
+feast
+feasted
+feaster
+feasting
+feasts
+feat
+feat's
+feather
+feathered
+featherer
+featherers
+feathering
+feathers
+feating
+featly
+feats
+feature
+featured
+featureless
+features
+featuring
+fed
+federal
+federally
+federals
+federation
+feds
+fee
+feeble
+feebleness
+feebler
+feeblest
+feebly
+feed
+feedback
+feedbacks
+feeder
+feeders
+feeding
+feedings
+feeds
+feel
+feeler
+feelers
+feeling
+feelingly
+feelingness
+feelings
+feels
+fees
+feet
+feign
+feigned
+feigner
+feigning
+feigns
+felicities
+felicity
+fell
+felled
+feller
+fellers
+felling
+fellness
+fellow
+fellow's
+fellowly
+fellows
+fellowship
+fellowship's
+fellowships
+fells
+felt
+felted
+felting
+felts
+female
+female's
+femaleness
+females
+feminine
+femininely
+feminineness
+femininity
+feminist
+feminist's
+feminists
+femur
+femur's
+femurs
+fen
+fence
+fenced
+fencer
+fencers
+fences
+fencing
+ferment
+fermentation
+fermentation's
+fermentations
+fermented
+fermenter
+fermenting
+ferments
+fern
+fern's
+ferns
+ferocious
+ferociously
+ferociousness
+ferocity
+ferried
+ferries
+ferrite
+ferry
+ferrying
+fertile
+fertilely
+fertileness
+fertilities
+fertility
+fervent
+fervently
+festival
+festival's
+festivals
+festive
+festively
+festiveness
+festivities
+festivity
+fetch
+fetched
+fetcher
+fetches
+fetching
+fetchingly
+fetter
+fettered
+fettering
+fetters
+feud
+feud's
+feudal
+feudalism
+feudally
+feuds
+fever
+fevered
+fevering
+feverish
+feverishly
+feverishness
+fevers
+few
+fewer
+fewest
+fewness
+fews
+fibrous
+fibrously
+fibrousness
+fickle
+fickleness
+fiction
+fiction's
+fictional
+fictionally
+fictions
+fictitious
+fictitiously
+fictitiousness
+fiddle
+fiddled
+fiddler
+fiddles
+fiddling
+fidelity
+field
+fielded
+fielder
+fielders
+fielding
+fields
+fiend
+fiends
+fierce
+fiercely
+fierceness
+fiercer
+fiercest
+fieriness
+fiery
+fife
+fifteen
+fifteens
+fifteenth
+fifth
+fifthly
+fifties
+fiftieth
+fifty
+fig
+fig's
+fight
+fighter
+fighters
+fighting
+fights
+figs
+figurative
+figuratively
+figurativeness
+figure
+figured
+figurer
+figurers
+figures
+figuring
+figurings
+filament
+filament's
+filaments
+file
+file's
+filed
+filename
+filename's
+filenames
+filer
+filers
+files
+filial
+filially
+filing
+filings
+fill
+fillable
+filled
+filler
+fillers
+filling
+fillings
+fills
+film
+filmed
+filming
+films
+filter
+filter's
+filtered
+filterer
+filtering
+filters
+filth
+filthier
+filthiest
+filthiness
+filthy
+filtration
+filtration's
+fin
+fin's
+final
+finality
+finally
+finals
+finance
+financed
+finances
+financial
+financially
+financier
+financier's
+financiers
+financing
+find
+finder
+finders
+finding
+findings
+finds
+fine
+fined
+finely
+fineness
+finer
+fines
+finest
+finger
+fingered
+fingerer
+fingering
+fingerings
+fingers
+fining
+finish
+finished
+finisher
+finishers
+finishes
+finishing
+finishings
+finite
+finitely
+finiteness
+finites
+fins
+fir
+fire
+firearm
+firearm's
+firearms
+fired
+fireflies
+firefly
+firefly's
+firelight
+firelighting
+fireman
+fireplace
+fireplace's
+fireplaces
+firer
+firers
+fires
+fireside
+firewood
+fireworks
+firing
+firings
+firm
+firm's
+firmament
+firmed
+firmer
+firmest
+firming
+firmly
+firmness
+firms
+firmware
+firmwares
+first
+firsthand
+firstly
+firsts
+firth
+fiscal
+fiscally
+fiscals
+fish
+fished
+fisher
+fisheries
+fisherman
+fisherman's
+fishermen
+fishermen's
+fishers
+fishery
+fishes
+fishing
+fissure
+fissured
+fissures
+fissuring
+fist
+fisted
+fists
+fit
+fitful
+fitfully
+fitfulness
+fitly
+fitness
+fits
+fitted
+fitter
+fitter's
+fitters
+fitting
+fittingly
+fittingness
+fittings
+five
+fiver
+fives
+fix
+fixate
+fixated
+fixates
+fixating
+fixation
+fixations
+fixative
+fixed
+fixedly
+fixedness
+fixer
+fixers
+fixes
+fixing
+fixings
+fixture
+fixture's
+fixtures
+flab
+flabbier
+flabbiness
+flabby
+flag
+flag's
+flagged
+flagging
+flaggingly
+flagrant
+flagrantly
+flags
+flagship
+flagship's
+flagships
+flake
+flaked
+flaker
+flakes
+flaking
+flame
+flamed
+flamer
+flamers
+flames
+flaming
+flamingly
+flammable
+flammables
+flank
+flanked
+flanker
+flankers
+flanking
+flanks
+flannel
+flannel's
+flannels
+flap
+flap's
+flapping
+flaps
+flare
+flared
+flares
+flaring
+flaringly
+flash
+flashed
+flasher
+flashers
+flashes
+flashing
+flashlight
+flashlight's
+flashlights
+flask
+flat
+flatly
+flatness
+flatnesses
+flats
+flatten
+flattened
+flattener
+flattening
+flattens
+flatter
+flattered
+flatterer
+flattering
+flatteringly
+flatters
+flattery
+flattest
+flaunt
+flaunted
+flaunting
+flauntingly
+flaunts
+flaw
+flawed
+flawing
+flawless
+flawlessly
+flawlessness
+flaws
+flax
+flaxen
+flea
+flea's
+fleas
+fled
+fledged
+fledgling
+fledgling's
+fledglings
+flee
+fleece
+fleece's
+fleeced
+fleeces
+fleecier
+fleecy
+fleeing
+fleer
+flees
+fleet
+fleetest
+fleeting
+fleetingly
+fleetingness
+fleetly
+fleetness
+fleets
+flesh
+fleshed
+flesher
+fleshes
+fleshier
+fleshiness
+fleshing
+fleshings
+fleshly
+fleshy
+flew
+flews
+flexibilities
+flexibility
+flexible
+flexibly
+flick
+flicked
+flicker
+flickered
+flickering
+flickeringly
+flicking
+flicks
+flier
+fliers
+flies
+flight
+flight's
+flights
+flinch
+flinched
+flincher
+flinches
+flinching
+fling
+fling's
+flinger
+flinging
+flings
+flint
+flints
+flip
+flips
+flirt
+flirted
+flirter
+flirting
+flirts
+flit
+flits
+float
+floated
+floater
+floaters
+floating
+floats
+flock
+flocked
+flocking
+flocks
+flood
+flooded
+flooder
+flooding
+floods
+floor
+floored
+floorer
+flooring
+floorings
+floors
+flop
+flop's
+floppier
+floppies
+floppily
+floppiness
+floppy
+floppy's
+flops
+flora
+florin
+floss
+flossed
+flosses
+flossing
+flounder
+floundered
+floundering
+flounders
+flour
+floured
+flourish
+flourished
+flourisher
+flourishes
+flourishing
+flourishingly
+flours
+flow
+flowchart
+flowcharting
+flowcharts
+flowed
+flower
+flowered
+flowerer
+floweriness
+flowering
+flowers
+flowery
+flowing
+flowingly
+flown
+flows
+fluctuate
+fluctuated
+fluctuates
+fluctuating
+fluctuation
+fluctuations
+fluent
+fluently
+fluffier
+fluffiest
+fluffiness
+fluffy
+fluid
+fluidity
+fluidly
+fluidness
+fluids
+flung
+flunk
+flunked
+flunker
+flunking
+flunks
+fluorescence
+flurried
+flurries
+flurry
+flurrying
+flush
+flushed
+flushes
+flushing
+flushness
+flute
+flute's
+fluted
+fluter
+flutes
+fluting
+flutter
+fluttered
+flutterer
+fluttering
+flutters
+fly
+flyable
+flyer
+flyer's
+flyers
+flying
+foam
+foamed
+foamer
+foaming
+foams
+focal
+focally
+foci
+focus
+focusable
+focused
+focuser
+focuses
+focusing
+fodder
+foe
+foe's
+foes
+fog
+fog's
+fogged
+foggier
+foggiest
+foggily
+fogginess
+fogging
+foggy
+fogs
+foil
+foiled
+foiling
+foils
+fold
+folded
+folder
+folders
+folding
+foldings
+folds
+foliage
+foliaged
+foliages
+folk
+folk's
+folklore
+folks
+follies
+follow
+followed
+follower
+followers
+following
+followings
+follows
+folly
+fond
+fonder
+fondest
+fondle
+fondled
+fondler
+fondles
+fondling
+fondly
+fondness
+fonds
+font
+font's
+fonts
+food
+food's
+foods
+foodstuff
+foodstuff's
+foodstuffs
+fool
+fooled
+fooling
+foolish
+foolishly
+foolishness
+foolproof
+fools
+foot
+football
+football's
+footballed
+footballer
+footballers
+footballs
+footed
+footer
+footers
+foothold
+footholds
+footing
+footings
+footman
+footnote
+footnote's
+footnotes
+footprint
+footprint's
+footprints
+foots
+footstep
+footsteps
+for
+forage
+foraged
+forager
+forages
+foraging
+foray
+foray's
+forayer
+forays
+forbade
+forbear
+forbear's
+forbearance
+forbearer
+forbearing
+forbears
+forbid
+forbidden
+forbidding
+forbiddingly
+forbiddingness
+forbids
+force
+force's
+forced
+forcedly
+forcefield
+forcefield's
+forcefields
+forceful
+forcefully
+forcefulness
+forcer
+forces
+forcible
+forcibleness
+forcibly
+forcing
+ford
+fords
+fore
+forearm
+forearm's
+forearmed
+forearms
+foreboding
+forebodingly
+forebodingness
+forebodings
+forecast
+forecasted
+forecaster
+forecasters
+forecasting
+forecastle
+forecastles
+forecasts
+forefather
+forefather's
+forefathers
+forefinger
+forefinger's
+forefingers
+forego
+foregoer
+foregoes
+foregoing
+foregone
+foreground
+foregrounds
+forehead
+forehead's
+foreheads
+foreign
+foreigner
+foreigners
+foreignly
+foreignness
+foreigns
+foreman
+foremost
+forenoon
+foresee
+foreseeable
+foreseen
+foreseer
+foresees
+foresight
+foresighted
+foresightedly
+foresightedness
+forest
+forestall
+forestalled
+forestaller
+forestalling
+forestallment
+forestalls
+forested
+forester
+foresters
+forests
+foretell
+foreteller
+foretelling
+foretells
+forethought
+forethought's
+foretold
+forever
+foreverness
+forewarn
+forewarned
+forewarner
+forewarning
+forewarnings
+forewarns
+forfeit
+forfeited
+forfeiter
+forfeiters
+forfeiting
+forfeits
+forgave
+forge
+forged
+forger
+forgeries
+forgers
+forgery
+forgery's
+forges
+forget
+forgetful
+forgetfully
+forgetfulness
+forgetive
+forgets
+forgettable
+forgettably
+forgetting
+forging
+forgivable
+forgivably
+forgive
+forgiven
+forgiveness
+forgiver
+forgives
+forgiving
+forgivingly
+forgivingness
+forgot
+forgotten
+fork
+forked
+forker
+forking
+forks
+forlorn
+forlornly
+forlornness
+form
+formal
+formalism
+formalism's
+formalisms
+formalities
+formality
+formally
+formalness
+formals
+formant
+formants
+format
+formated
+formating
+formation
+formation's
+formations
+formative
+formatively
+formativeness
+formats
+formatted
+formatter
+formatter's
+formatters
+formatting
+formed
+former
+formerly
+formers
+formidable
+formidableness
+forming
+forms
+formula
+formula's
+formulae
+formulas
+formulate
+formulated
+formulates
+formulating
+formulation
+formulations
+formulator
+formulator's
+formulators
+fornication
+forsake
+forsaken
+forsakes
+forsaking
+fort
+fort's
+forte
+fortes
+forth
+forthcoming
+forthwith
+fortier
+forties
+fortieth
+fortification
+fortifications
+fortified
+fortifier
+fortifies
+fortify
+fortifying
+fortitude
+fortnight
+fortnightly
+fortress
+fortress's
+fortresses
+forts
+fortuitous
+fortuitously
+fortuitousness
+fortunate
+fortunately
+fortunateness
+fortunates
+fortune
+fortune's
+fortuned
+fortunes
+fortuning
+forty
+forum
+forum's
+forums
+forward
+forwarded
+forwarder
+forwarders
+forwarding
+forwardly
+forwardness
+forwards
+fossil
+fossils
+foster
+fostered
+fosterer
+fostering
+fosters
+fought
+foul
+fouled
+fouler
+foulest
+fouling
+foully
+foulness
+fouls
+found
+foundation
+foundation's
+foundations
+founded
+founder
+foundered
+foundering
+founders
+founding
+foundries
+foundry
+foundry's
+founds
+fount
+fount's
+fountain
+fountain's
+fountains
+founts
+four
+fours
+fourscore
+fourteen
+fourteener
+fourteens
+fourteenth
+fourth
+fourthly
+fowl
+fowler
+fowling
+fowls
+fox
+fox's
+foxed
+foxes
+foxing
+fractal
+fractal's
+fractals
+fraction
+fraction's
+fractional
+fractionally
+fractioned
+fractioning
+fractions
+fracture
+fractured
+fractures
+fracturing
+fragile
+fragilely
+fragment
+fragmentariness
+fragmentary
+fragmented
+fragmenting
+fragments
+fragrance
+fragrance's
+fragrances
+fragrant
+fragrantly
+frail
+frailer
+frailest
+frailly
+frailness
+frailties
+frailty
+frame
+frame's
+framed
+framer
+framers
+frames
+framework
+framework's
+frameworks
+framing
+framings
+franc
+franchise
+franchise's
+franchised
+franchiser
+franchises
+franchising
+francs
+frank
+franked
+franker
+frankest
+franking
+frankly
+frankness
+franks
+frantic
+frantically
+franticly
+franticness
+fraternal
+fraternally
+fraternities
+fraternity
+fraternity's
+fraud
+fraud's
+frauds
+fraudulently
+fraught
+fraughted
+fraughting
+fraughts
+fray
+frayed
+fraying
+frays
+freak
+freak's
+freaks
+freckle
+freckled
+freckles
+freckling
+free
+freed
+freedom
+freedom's
+freedoms
+freeing
+freeings
+freely
+freeman
+freeness
+freer
+frees
+freest
+freeway
+freeway's
+freeways
+freeze
+freezer
+freezers
+freezes
+freezing
+freight
+freighted
+freighter
+freighters
+freighting
+freights
+frenzied
+frenziedly
+frenzies
+frenzy
+frenzying
+frequencies
+frequency
+frequent
+frequented
+frequenter
+frequenters
+frequenting
+frequently
+frequentness
+frequents
+fresh
+freshen
+freshened
+freshener
+fresheners
+freshening
+freshens
+fresher
+freshers
+freshest
+freshly
+freshman
+freshmen
+freshness
+fret
+fretful
+fretfully
+fretfulness
+frets
+friar
+friar's
+friarly
+friars
+frication
+fricative
+fricatives
+friction
+friction's
+frictionless
+frictionlessly
+frictions
+fried
+friend
+friend's
+friendless
+friendlessness
+friendlier
+friendlies
+friendliest
+friendliness
+friendly
+friends
+friendship
+friendship's
+friendships
+frier
+fries
+frieze
+frieze's
+friezes
+frigate
+frigate's
+frigates
+fright
+frighten
+frightened
+frightening
+frighteningly
+frightens
+frightful
+frightfully
+frightfulness
+frill
+frill's
+frilled
+frills
+fringe
+fringed
+fringes
+fringing
+frisk
+frisked
+frisker
+frisking
+frisks
+frivolous
+frivolously
+frivolousness
+frock
+frock's
+frocked
+frocking
+frocks
+frog
+frog's
+frogs
+frolic
+frolics
+from
+front
+fronted
+frontier
+frontier's
+frontiers
+fronting
+fronts
+frost
+frosted
+frostier
+frostiness
+frosting
+frosts
+frosty
+froth
+frothing
+frown
+frowned
+frowner
+frowning
+frowningly
+frowns
+froze
+frozen
+frozenly
+frozenness
+frugal
+frugally
+fruit
+fruit's
+fruited
+fruiter
+fruiterer
+fruitful
+fruitfully
+fruitfulness
+fruition
+fruitless
+fruitlessly
+fruitlessness
+fruits
+frustrate
+frustrated
+frustrater
+frustrates
+frustrating
+frustratingly
+frustration
+frustrations
+fry
+frying
+fuel
+fuels
+fugitive
+fugitive's
+fugitively
+fugitiveness
+fugitives
+fulfilled
+fulfiller
+fulfilling
+full
+fuller
+fullest
+fullness
+fullword
+fullword's
+fullwords
+fully
+fumble
+fumbled
+fumbler
+fumbles
+fumbling
+fumblingly
+fume
+fumed
+fumes
+fuming
+fun
+function
+function's
+functional
+functionalities
+functionality
+functionally
+functionals
+functioned
+functioning
+functions
+functor
+functor's
+functors
+fund
+fundamental
+fundamentalist
+fundamentalist's
+fundamentalists
+fundamentally
+fundamentals
+funded
+funder
+funders
+funding
+funds
+funeral
+funeral's
+funerals
+fungus
+funguses
+funnel
+funnels
+funnier
+funnies
+funniest
+funnily
+funniness
+funny
+fur
+fur's
+furies
+furious
+furiouser
+furiously
+furiousness
+furnace
+furnace's
+furnaced
+furnaces
+furnacing
+furness
+furnish
+furnished
+furnisher
+furnishers
+furnishes
+furnishing
+furnishings
+furniture
+furrow
+furrowed
+furrowing
+furrows
+furs
+further
+furthered
+furtherer
+furtherest
+furthering
+furthermore
+furthers
+furtive
+furtively
+furtiveness
+fury
+fury's
+fuse
+fused
+fuses
+fusing
+fusion
+fusions
+fuss
+fusser
+fussing
+futile
+futilely
+futileness
+futility
+future
+future's
+futures
+fuzzier
+fuzziest
+fuzziness
+fuzzy
+gabardine
+gabardines
+gable
+gabled
+gabler
+gables
+gad
+gadget
+gadget's
+gadgets
+gag
+gaged
+gager
+gagged
+gagging
+gaging
+gags
+gaieties
+gaiety
+gaily
+gain
+gained
+gainer
+gainers
+gaining
+gainings
+gainly
+gains
+gait
+gaited
+gaiter
+gaiters
+gaits
+galaxies
+galaxy
+galaxy's
+gale
+gales
+gall
+gallant
+gallantly
+gallantry
+gallants
+galled
+galleried
+galleries
+gallery
+galley
+galley's
+galleys
+galling
+gallingly
+gallon
+gallon's
+gallons
+gallop
+galloped
+galloper
+gallopers
+galloping
+gallops
+gallows
+gallowses
+galls
+gamble
+gambled
+gambler
+gamblers
+gambles
+gambling
+game
+gamed
+gamely
+gameness
+games
+gaming
+gamma
+gammas
+gang
+gang's
+ganger
+ganglier
+gangly
+gangrene
+gangrened
+gangrenes
+gangrening
+gangs
+gangster
+gangster's
+gangsters
+gap
+gap's
+gape
+gaped
+gaper
+gapes
+gaping
+gapingly
+gaps
+garage
+garaged
+garages
+garaging
+garb
+garbage
+garbage's
+garbaged
+garbages
+garbaging
+garbed
+garble
+garbled
+garbler
+garbles
+garbling
+garden
+gardened
+gardener
+gardeners
+gardening
+gardens
+gargle
+gargled
+gargles
+gargling
+garland
+garlanded
+garlands
+garlic
+garlics
+garment
+garment's
+garmented
+garmenting
+garments
+garner
+garnered
+garnering
+garners
+garnish
+garnished
+garnishes
+garrison
+garrisoned
+garrisoning
+garrisons
+garter
+garter's
+gartered
+gartering
+garters
+gas
+gas's
+gaseous
+gaseously
+gaseousness
+gases
+gash
+gash's
+gashed
+gashes
+gashing
+gasoline
+gasolines
+gasp
+gasped
+gasper
+gaspers
+gasping
+gaspingly
+gasps
+gassed
+gasser
+gassers
+gassing
+gassings
+gastric
+gastrointestinal
+gate
+gated
+gates
+gateway
+gateway's
+gateways
+gather
+gathered
+gatherer
+gatherers
+gathering
+gatherings
+gathers
+gating
+gaudier
+gaudies
+gaudiness
+gaudy
+gauge
+gauged
+gauger
+gauges
+gauging
+gaunt
+gauntly
+gauntness
+gauze
+gauzed
+gauzes
+gauzing
+gave
+gay
+gayer
+gayest
+gayly
+gayness
+gaze
+gazed
+gazer
+gazers
+gazes
+gazing
+gear
+geared
+gearing
+gears
+geese
+gel
+gel's
+gelatin
+gelled
+gelling
+gels
+gem
+gem's
+gems
+gender
+gender's
+gendered
+gendering
+genders
+gene
+gene's
+general
+general's
+generalist
+generalist's
+generalists
+generalities
+generality
+generally
+generalness
+generals
+generate
+generated
+generates
+generating
+generation
+generations
+generative
+generatively
+generator
+generator's
+generators
+generic
+generically
+genericness
+generosities
+generosity
+generosity's
+generous
+generously
+generousness
+genes
+genetic
+genetically
+genetics
+genial
+genially
+genialness
+genius
+genius's
+geniuses
+genre
+genre's
+genres
+genteel
+genteeler
+genteelest
+genteelly
+genteelness
+gentle
+gentled
+gentleman
+gentlemanliness
+gentlemanly
+gentleness
+gentler
+gentlest
+gentlewoman
+gentling
+gently
+gentries
+gentry
+genuine
+genuinely
+genuineness
+genus
+geographic
+geographical
+geographically
+geographies
+geography
+geological
+geologist
+geologist's
+geologists
+geometric
+geometries
+geometry
+geranium
+germ
+germ's
+germane
+germen
+germinate
+germinated
+germinates
+germinating
+germination
+germinations
+germinative
+germinatively
+germs
+gestalt
+gesture
+gestured
+gestures
+gesturing
+get
+gets
+getter
+getter's
+gettered
+getters
+getting
+ghastlier
+ghastliness
+ghastly
+ghost
+ghosted
+ghosting
+ghostlier
+ghostliness
+ghostlinesses
+ghostly
+ghosts
+giant
+giant's
+giants
+gibberish
+giddied
+giddier
+giddiness
+giddy
+giddying
+gift
+gifted
+giftedly
+giftedness
+gifts
+gig
+gig's
+gigantic
+giganticness
+giggle
+giggled
+giggler
+giggles
+giggling
+gigglingly
+gigs
+gild
+gilded
+gilder
+gilding
+gilds
+gill
+gill's
+gilled
+giller
+gills
+gilt
+gimmick
+gimmick's
+gimmicks
+gin
+gin's
+ginger
+gingerbread
+gingered
+gingering
+gingerliness
+gingerly
+gingham
+ginghams
+gins
+giraffe
+giraffe's
+giraffes
+gird
+girded
+girder
+girder's
+girders
+girding
+girdle
+girdled
+girdler
+girdles
+girdling
+girds
+girl
+girl's
+girlfriend
+girlfriend's
+girlfriends
+girls
+girt
+girth
+give
+given
+givenness
+givens
+giver
+givers
+gives
+giveth
+giving
+givingly
+gizmo
+gizmo's
+gizmos
+glacial
+glacially
+glacier
+glacier's
+glaciers
+glad
+gladder
+gladdest
+glade
+glades
+gladly
+gladness
+glamour
+glamoured
+glamouring
+glamours
+glance
+glanced
+glances
+glancing
+glancingly
+gland
+gland's
+glanders
+glands
+glare
+glared
+glares
+glaring
+glaringly
+glaringness
+glass
+glassed
+glasses
+glassier
+glassies
+glassiness
+glassy
+glaze
+glazed
+glazer
+glazers
+glazes
+glazing
+gleam
+gleamed
+gleaming
+gleams
+glean
+gleaned
+gleaner
+gleaning
+gleanings
+gleans
+glee
+gleed
+gleeful
+gleefully
+gleefulness
+glees
+glen
+glen's
+glens
+glide
+glided
+glider
+gliders
+glides
+gliding
+glimmer
+glimmered
+glimmering
+glimmers
+glimpse
+glimpsed
+glimpser
+glimpsers
+glimpses
+glimpsing
+glint
+glinted
+glinting
+glints
+glisten
+glistened
+glistening
+glistens
+glitch
+glitch's
+glitches
+glitter
+glittered
+glittering
+glitteringly
+glitters
+global
+globally
+globals
+globe
+globe's
+globes
+globing
+globular
+globularity
+globularly
+globularness
+gloom
+gloomier
+gloomily
+gloominess
+glooms
+gloomy
+gloried
+glories
+glorification
+glorifications
+glorified
+glorifier
+glorifiers
+glorifies
+glorify
+glorious
+gloriously
+gloriousness
+glory
+glorying
+gloss
+glossaries
+glossary
+glossary's
+glossed
+glosses
+glossier
+glossies
+glossiness
+glossing
+glossy
+glottal
+glove
+gloved
+glover
+glovers
+gloves
+gloving
+glow
+glowed
+glower
+glowered
+glowering
+glowers
+glowing
+glowingly
+glows
+glucose
+glue
+glued
+gluer
+gluers
+glues
+gluing
+gnat
+gnat's
+gnats
+gnaw
+gnawed
+gnawer
+gnawing
+gnaws
+go
+goad
+goaded
+goading
+goads
+goal
+goal's
+goals
+goat
+goat's
+goatee
+goatee's
+goatees
+goats
+gobble
+gobbled
+gobbler
+gobblers
+gobbles
+gobbling
+goblet
+goblet's
+goblets
+goblin
+goblin's
+goblins
+god
+god's
+goddess
+goddess's
+goddesses
+godlier
+godlike
+godlikeness
+godliness
+godly
+godmother
+godmother's
+godmothers
+gods
+goer
+goering
+goes
+going
+goings
+gold
+golden
+goldenly
+goldenness
+golding
+golds
+goldsmith
+golf
+golfer
+golfers
+golfing
+golfs
+gone
+goner
+gong
+gong's
+gongs
+gonion
+good
+goodbye
+goodbye's
+goodbyes
+goodie
+goodie's
+goodies
+goodly
+goodness
+goods
+goody
+goody's
+goose
+gooses
+goosing
+gore
+gored
+gores
+gorge
+gorgeous
+gorgeously
+gorgeousness
+gorger
+gorges
+gorging
+gorilla
+gorilla's
+gorillas
+goring
+gosh
+gospel
+gospels
+gossip
+gossiper
+gossipers
+gossips
+got
+gotcha
+gotcha's
+gotchas
+goth
+goto
+gotten
+gouge
+gouged
+gouger
+gouges
+gouging
+govern
+governed
+governess
+governesses
+governing
+government
+government's
+governmental
+governmentally
+governments
+governor
+governor's
+governors
+governs
+gown
+gowned
+gowns
+grab
+grabbed
+grabber
+grabber's
+grabbers
+grabbing
+grabbings
+grabs
+grace
+graced
+graceful
+gracefully
+gracefulness
+graces
+gracing
+gracious
+graciously
+graciousness
+gradation
+gradation's
+gradations
+grade
+graded
+gradely
+grader
+graders
+grades
+gradient
+gradient's
+gradients
+grading
+gradings
+gradual
+gradually
+gradualness
+graduate
+graduated
+graduates
+graduating
+graduation
+graduations
+graft
+grafted
+grafter
+grafting
+grafts
+graham
+graham's
+grahams
+grain
+grained
+grainer
+graining
+grains
+grammar
+grammar's
+grammars
+grammatical
+grammatically
+grammaticalness
+granaries
+granary
+granary's
+grand
+grander
+grandest
+grandeur
+grandfather
+grandfather's
+grandfatherly
+grandfathers
+grandiose
+grandiosely
+grandioseness
+grandkid
+grandkid's
+grandkids
+grandly
+grandma
+grandma's
+grandmother
+grandmother's
+grandmotherly
+grandmothers
+grandness
+grandpa
+grandpa's
+grandparent
+grandparents
+grandpas
+grands
+grandson
+grandson's
+grandsons
+grange
+granger
+granges
+granite
+grannies
+granny
+grant
+grant's
+granted
+granter
+granting
+grants
+granularity
+granulate
+granulated
+granulates
+granulating
+granulation
+granulations
+granulative
+grape
+grape's
+grapes
+grapevine
+grapevine's
+grapevines
+graph
+graph's
+graphed
+graphic
+graphical
+graphically
+graphicness
+graphics
+graphing
+graphite
+graphs
+grapple
+grappled
+grappler
+grapples
+grappling
+grasp
+graspable
+grasped
+grasper
+grasping
+graspingly
+graspingness
+grasps
+grass
+grassed
+grassers
+grasses
+grassier
+grassiest
+grassing
+grassy
+grate
+grated
+grateful
+gratefully
+gratefulness
+grater
+grates
+gratification
+gratifications
+gratified
+gratify
+gratifying
+gratifyingly
+grating
+gratingly
+gratings
+gratitude
+gratuities
+gratuitous
+gratuitously
+gratuitousness
+gratuity
+gratuity's
+grave
+gravel
+gravelly
+gravels
+gravely
+graveness
+graver
+gravers
+graves
+gravest
+gravies
+graving
+gravitation
+gravitational
+gravitationally
+gravities
+gravity
+gravy
+gray
+grayed
+grayer
+grayest
+graying
+grayly
+grayness
+grays
+graze
+grazed
+grazer
+grazes
+grazing
+grease
+greased
+greaser
+greasers
+greases
+greasier
+greasiness
+greasing
+greasy
+great
+greaten
+greatened
+greatening
+greater
+greatest
+greatly
+greatness
+greats
+greed
+greedier
+greedily
+greediness
+greedy
+green
+greened
+greener
+greenest
+greenhouse
+greenhouse's
+greenhouses
+greening
+greenish
+greenishness
+greenly
+greenness
+greens
+greet
+greeted
+greeter
+greeting
+greetings
+greets
+grenade
+grenade's
+grenades
+grew
+grey
+greyest
+greying
+grid
+grid's
+grids
+grief
+grief's
+griefs
+grievance
+grievance's
+grievances
+grieve
+grieved
+griever
+grievers
+grieves
+grieving
+grievingly
+grievous
+grievously
+grievousness
+grill
+grilled
+griller
+grilling
+grills
+grim
+grimed
+griming
+grimly
+grimness
+grin
+grind
+grinder
+grinders
+grinding
+grindingly
+grindings
+grinds
+grindstone
+grindstone's
+grindstones
+grins
+grip
+gripe
+griped
+griper
+gripes
+griping
+gripped
+gripper
+gripper's
+grippers
+gripping
+grippingly
+grips
+grit
+grit's
+grits
+grizzlier
+grizzly
+groan
+groaned
+groaner
+groaners
+groaning
+groans
+grocer
+grocer's
+groceries
+grocers
+grocery
+groom
+groom's
+groomed
+groomer
+grooming
+grooms
+groove
+grooved
+groover
+grooves
+grooving
+grope
+groped
+groper
+gropes
+groping
+gross
+grossed
+grosser
+grosses
+grossest
+grossing
+grossly
+grossness
+grotesque
+grotesquely
+grotesqueness
+grotto
+grotto's
+grottos
+ground
+grounded
+grounder
+grounders
+grounding
+grounds
+groundwork
+group
+group's
+grouped
+grouper
+grouping
+groupings
+groups
+grouse
+groused
+grouser
+grouses
+grousing
+grove
+grovel
+grovels
+grover
+grovers
+groves
+grow
+grower
+growers
+growing
+growingly
+growl
+growled
+growler
+growlier
+growliness
+growling
+growlingly
+growls
+growly
+grown
+grownup
+grownup's
+grownups
+grows
+growth
+growths
+grub
+grub's
+grubs
+grudge
+grudge's
+grudged
+grudger
+grudges
+grudging
+grudgingly
+gruesome
+gruesomely
+gruesomeness
+gruff
+gruffly
+gruffness
+grumble
+grumbled
+grumbler
+grumbles
+grumbling
+grumblingly
+grunt
+grunted
+grunter
+grunting
+grunts
+guarantee
+guaranteed
+guaranteeing
+guaranteer
+guaranteers
+guarantees
+guaranty
+guard
+guarded
+guardedly
+guardedness
+guarder
+guardian
+guardian's
+guardians
+guardianship
+guarding
+guards
+guerrilla
+guerrilla's
+guerrillas
+guess
+guessed
+guesser
+guesses
+guessing
+guest
+guest's
+guested
+guesting
+guests
+guidance
+guidances
+guide
+guidebook
+guidebook's
+guidebooks
+guided
+guideline
+guideline's
+guidelines
+guider
+guides
+guiding
+guild
+guilder
+guile
+guilt
+guiltier
+guiltiest
+guiltily
+guiltiness
+guiltless
+guiltlessly
+guiltlessness
+guilts
+guilty
+guinea
+guineas
+guise
+guise's
+guised
+guises
+guising
+guitar
+guitar's
+guitars
+gulch
+gulch's
+gulches
+gulf
+gulf's
+gulfs
+gull
+gulled
+gullibility
+gullied
+gullies
+gulling
+gulls
+gully
+gully's
+gullying
+gulp
+gulped
+gulper
+gulps
+gum
+gum's
+gums
+gun
+gun's
+gunfire
+gunfires
+gunned
+gunner
+gunner's
+gunners
+gunning
+gunpowder
+gunpowders
+guns
+gurgle
+gurgled
+gurgles
+gurgling
+guru
+guru's
+gurus
+gush
+gushed
+gusher
+gushes
+gushing
+gust
+gust's
+gusts
+gut
+guts
+gutser
+gutter
+guttered
+guttering
+gutters
+guy
+guy's
+guyed
+guyer
+guyers
+guying
+guys
+gym
+gymnasium
+gymnasium's
+gymnasiums
+gymnast
+gymnast's
+gymnastic
+gymnastics
+gymnasts
+gyms
+gypsied
+gypsies
+gypsy
+gypsy's
+gypsying
+gyration
+gyrations
+gyroscope
+gyroscope's
+gyroscopes
+ha
+habit
+habit's
+habitable
+habitableness
+habitat
+habitat's
+habitation
+habitation's
+habitations
+habitats
+habits
+habitual
+habitually
+habitualness
+hack
+hacked
+hacker
+hacker's
+hackers
+hacking
+hacks
+had
+hadn't
+hag
+hagen
+haggard
+haggardly
+haggardness
+hail
+hailed
+hailer
+hailing
+hails
+hair
+hair's
+haircut
+haircut's
+haircuts
+hairdresser
+hairdresser's
+hairdressers
+haired
+hairier
+hairiness
+hairless
+hairlessness
+hairs
+hairy
+hale
+haler
+half
+halfness
+halfway
+halfword
+halfword's
+halfwords
+haling
+hall
+hall's
+haller
+hallmark
+hallmark's
+hallmarked
+hallmarking
+hallmarks
+hallow
+hallowed
+hallowing
+hallows
+halls
+hallway
+hallway's
+hallways
+halt
+halted
+halter
+haltered
+haltering
+halters
+halting
+haltingly
+halts
+halve
+halved
+halvers
+halves
+halving
+ham
+ham's
+hamburger
+hamburger's
+hamburgers
+hamlet
+hamlet's
+hamlets
+hammer
+hammered
+hammerer
+hammering
+hammers
+hammock
+hammock's
+hammocks
+hamper
+hampered
+hampering
+hampers
+hams
+hand
+handbag
+handbag's
+handbags
+handbook
+handbook's
+handbooks
+handcuff
+handcuffed
+handcuffing
+handcuffs
+handed
+handedly
+handedness
+hander
+handers
+handful
+handfuls
+handicap
+handicap's
+handicapped
+handicaps
+handier
+handiest
+handily
+handiness
+handing
+handiwork
+handkerchief
+handkerchief's
+handkerchiefs
+handle
+handled
+handler
+handlers
+handles
+handling
+hands
+handshake
+handshake's
+handshaker
+handshakes
+handshaking
+handsome
+handsomely
+handsomeness
+handsomer
+handsomest
+handwriting
+handwritten
+handy
+hang
+hangar
+hangar's
+hangars
+hanged
+hanger
+hangers
+hanging
+hangover
+hangover's
+hangovers
+hangs
+hap
+haphazard
+haphazardly
+haphazardness
+hapless
+haplessly
+haplessness
+haply
+happen
+happened
+happening
+happenings
+happens
+happier
+happiest
+happily
+happiness
+happy
+harass
+harassed
+harasser
+harasses
+harassing
+harassment
+harassments
+hard
+harden
+hardened
+hardener
+hardening
+hardens
+harder
+hardest
+hardier
+hardiness
+harding
+hardings
+hardly
+hardness
+hardnesses
+hards
+hardship
+hardship's
+hardships
+hardware
+hardwares
+hardy
+hare
+hare's
+hares
+hark
+harked
+harken
+harking
+harks
+harlot
+harlot's
+harlots
+harm
+harmed
+harmer
+harmful
+harmfully
+harmfulness
+harming
+harmless
+harmlessly
+harmlessness
+harmonies
+harmonious
+harmoniously
+harmoniousness
+harmony
+harms
+harness
+harnessed
+harnesser
+harnesses
+harnessing
+harp
+harped
+harper
+harpers
+harping
+harpings
+harps
+harried
+harrier
+harrow
+harrowed
+harrower
+harrowing
+harrows
+harry
+harrying
+harsh
+harshen
+harshened
+harshening
+harsher
+harshest
+harshly
+harshness
+hart
+harvest
+harvested
+harvester
+harvesters
+harvesting
+harvests
+has
+hash
+hashed
+hasher
+hashes
+hashing
+hasn't
+hassle
+hassled
+hassler
+hassles
+hassling
+haste
+hasted
+hasten
+hastened
+hastener
+hastening
+hastens
+hastes
+hastier
+hastiest
+hastily
+hastiness
+hasting
+hastings
+hasty
+hat
+hat's
+hatch
+hatched
+hatcher
+hatcheries
+hatchery
+hatchery's
+hatches
+hatchet
+hatchet's
+hatchets
+hatching
+hate
+hated
+hateful
+hatefully
+hatefulness
+hater
+hates
+hath
+hating
+hatred
+hats
+haughtier
+haughtily
+haughtiness
+haughty
+haul
+hauled
+hauler
+haulers
+hauling
+hauls
+haunch
+haunch's
+haunches
+haunt
+haunted
+haunter
+haunting
+hauntingly
+haunts
+have
+haven
+haven's
+haven't
+havens
+haver
+havering
+havers
+haves
+having
+havoc
+havocs
+hawk
+hawked
+hawker
+hawkers
+hawking
+hawks
+hay
+hayer
+haying
+hays
+hazard
+hazard's
+hazarded
+hazarding
+hazardous
+hazardously
+hazardousness
+hazards
+haze
+haze's
+hazed
+hazel
+hazer
+hazes
+hazier
+haziest
+haziness
+hazing
+hazy
+he
+he'd
+he'll
+he's
+head
+head's
+headache
+headache's
+headaches
+headed
+header
+headers
+headgear
+heading
+heading's
+headings
+headland
+headland's
+headlands
+headline
+headlined
+headliner
+headlines
+headlining
+headlong
+headphone
+headphone's
+headphones
+headquarters
+heads
+headway
+heal
+healed
+healer
+healers
+healing
+heals
+health
+healthful
+healthfully
+healthfulness
+healthier
+healthiest
+healthily
+healthiness
+healthy
+heap
+heaped
+heaping
+heaps
+hear
+heard
+hearer
+hearers
+hearest
+hearing
+hearings
+hearken
+hearkened
+hearkening
+hears
+hearsay
+hearses
+hearsing
+heart
+heart's
+heartache
+heartache's
+heartaches
+hearted
+heartedly
+hearten
+heartened
+heartening
+hearteningly
+heartens
+hearth
+heartier
+hearties
+heartiest
+heartily
+heartiness
+heartless
+heartlessly
+heartlessness
+hearts
+hearty
+heat
+heatable
+heated
+heatedly
+heater
+heaters
+heath
+heathen
+heather
+heating
+heats
+heave
+heaved
+heaven
+heaven's
+heavenliness
+heavenly
+heavens
+heaver
+heavers
+heaves
+heavier
+heavies
+heaviest
+heavily
+heaviness
+heaving
+heavy
+hedge
+hedged
+hedgehog
+hedgehog's
+hedgehogs
+hedger
+hedges
+hedging
+hedgingly
+heed
+heeded
+heeding
+heedless
+heedlessly
+heedlessness
+heeds
+heel
+heeled
+heeler
+heelers
+heeling
+heels
+heifer
+height
+heighten
+heightened
+heightening
+heightens
+heights
+heinous
+heinously
+heinousness
+heir
+heir's
+heiress
+heiress's
+heiresses
+heirs
+held
+hell
+hell's
+heller
+hello
+hellos
+hells
+helm
+helmet
+helmet's
+helmeted
+helmets
+help
+helped
+helper
+helpers
+helpful
+helpfully
+helpfulness
+helping
+helpless
+helplessly
+helplessness
+helps
+hem
+hem's
+hemisphere
+hemisphere's
+hemisphered
+hemispheres
+hemlock
+hemlock's
+hemlocks
+hemostat
+hemostats
+hemp
+hempen
+hems
+hen
+hen's
+hence
+henceforth
+henchman
+henchmen
+hens
+her
+herald
+heralded
+heralding
+heralds
+herb
+herb's
+herbivore
+herbivorous
+herbivorously
+herbs
+herd
+herded
+herder
+herding
+herds
+here
+here's
+hereabout
+hereabouts
+hereafter
+hereby
+hereditary
+heredity
+herein
+hereinafter
+heres
+heresy
+heretic
+heretic's
+heretics
+heretofore
+herewith
+heritage
+heritages
+hermit
+hermit's
+hermits
+hero
+hero's
+heroes
+heroic
+heroically
+heroics
+heroin
+heroine
+heroine's
+heroines
+heroism
+heron
+heron's
+herons
+heros
+herring
+herring's
+herrings
+hers
+herself
+hesitant
+hesitantly
+hesitate
+hesitated
+hesitater
+hesitates
+hesitating
+hesitatingly
+hesitation
+hesitations
+heterogeneous
+heterogeneously
+heterogeneousness
+heuristic
+heuristic's
+heuristically
+heuristics
+hew
+hewed
+hewer
+hewing
+hews
+hex
+hexagonal
+hexagonally
+hexer
+hey
+hickories
+hickory
+hid
+hidden
+hide
+hided
+hideous
+hideously
+hideousness
+hideout
+hideout's
+hideouts
+hider
+hides
+hiding
+hierarchical
+hierarchically
+hierarchies
+hierarchy
+hierarchy's
+high
+higher
+highest
+highland
+highlander
+highlands
+highlight
+highlighted
+highlighting
+highlights
+highly
+highness
+highness's
+highnesses
+highway
+highway's
+highways
+hijack
+hijacked
+hijacker
+hijackers
+hijacking
+hijacks
+hike
+hiked
+hiker
+hikers
+hikes
+hiking
+hilarious
+hilariously
+hilariousness
+hill
+hill's
+hilled
+hiller
+hilling
+hillock
+hillocks
+hills
+hillside
+hilltop
+hilltop's
+hilltops
+hilt
+hilt's
+hilts
+him
+hims
+himself
+hind
+hinder
+hindered
+hinderer
+hindering
+hinders
+hindrance
+hindrances
+hinds
+hindsight
+hinge
+hinged
+hinger
+hinges
+hinging
+hint
+hinted
+hinter
+hinting
+hints
+hip
+hip's
+hipness
+hips
+hire
+hired
+hirer
+hirers
+hires
+hiring
+hirings
+his
+hiss
+hissed
+hisser
+hisses
+hissing
+histogram
+histogram's
+histograms
+historian
+historian's
+historians
+historic
+historical
+historically
+historicalness
+histories
+history
+history's
+hit
+hit's
+hitch
+hitched
+hitcher
+hitches
+hitchhike
+hitchhiked
+hitchhiker
+hitchhikers
+hitchhikes
+hitchhiking
+hitching
+hither
+hitherto
+hits
+hitter
+hitter's
+hitters
+hitting
+hive
+hives
+hiving
+hoar
+hoard
+hoarded
+hoarder
+hoarding
+hoards
+hoarier
+hoariness
+hoarse
+hoarsely
+hoarseness
+hoarser
+hoarsest
+hoary
+hoax
+hoax's
+hoaxed
+hoaxer
+hoaxes
+hoaxing
+hobbies
+hobble
+hobbled
+hobbler
+hobbles
+hobbling
+hobby
+hobby's
+hobbyist
+hobbyist's
+hobbyists
+hockey
+hoe
+hoe's
+hoer
+hoes
+hog
+hog's
+hogs
+hoist
+hoisted
+hoister
+hoisting
+hoists
+hold
+holden
+holder
+holders
+holding
+holdings
+holds
+hole
+hole's
+holed
+holes
+holiday
+holiday's
+holidayer
+holidays
+holier
+holies
+holiness
+holing
+holistic
+hollies
+hollow
+hollowed
+hollower
+hollowest
+hollowing
+hollowly
+hollowness
+hollows
+holly
+holocaust
+hologram
+hologram's
+holograms
+holy
+homage
+homaged
+homager
+homages
+homaging
+home
+homebuilt
+homed
+homeless
+homelessness
+homelier
+homeliness
+homely
+homemade
+homemaker
+homemaker's
+homemakers
+homeomorphic
+homeomorphism
+homeomorphism's
+homeomorphisms
+homer
+homers
+homes
+homesick
+homesickness
+homespun
+homestead
+homesteader
+homesteaders
+homesteads
+homeward
+homewards
+homework
+homeworker
+homeworkers
+homing
+homogeneities
+homogeneity
+homogeneity's
+homogeneous
+homogeneously
+homogeneousness
+homomorphic
+homomorphism
+homomorphism's
+homomorphisms
+hone
+honed
+honer
+hones
+honest
+honestly
+honesty
+honey
+honeycomb
+honeycombed
+honeyed
+honeying
+honeymoon
+honeymooned
+honeymooner
+honeymooners
+honeymooning
+honeymoons
+honeys
+honeysuckle
+honing
+honorary
+hood
+hood's
+hooded
+hoodedness
+hooding
+hoods
+hoodwink
+hoodwinked
+hoodwinker
+hoodwinking
+hoodwinks
+hoof
+hoof's
+hoofed
+hoofer
+hoofs
+hook
+hooked
+hookedness
+hooker
+hookers
+hooking
+hooks
+hoop
+hooped
+hooper
+hooping
+hoops
+hooray
+hooray's
+hoorays
+hoot
+hooted
+hooter
+hooters
+hooting
+hoots
+hop
+hope
+hoped
+hopeful
+hopefully
+hopefulness
+hopefuls
+hopeless
+hopelessly
+hopelessness
+hoper
+hopes
+hoping
+hopped
+hopper
+hopper's
+hoppers
+hopping
+hops
+horde
+horde's
+hordes
+horizon
+horizon's
+horizons
+horizontal
+horizontally
+hormone
+hormone's
+hormones
+horn
+horned
+hornedness
+hornet
+hornet's
+hornets
+horns
+horrendous
+horrendously
+horrible
+horribleness
+horribly
+horrid
+horridly
+horridness
+horrified
+horrifies
+horrify
+horrifying
+horrifyingly
+horror
+horror's
+horrors
+horse
+horse's
+horseback
+horsely
+horseman
+horsepower
+horsepowers
+horses
+horseshoe
+horseshoer
+horseshoes
+horsing
+hose
+hose's
+hosed
+hoses
+hosing
+hospitable
+hospitably
+hospital
+hospital's
+hospitality
+hospitals
+host
+host's
+hostage
+hostage's
+hostages
+hosted
+hostess
+hostess's
+hostesses
+hostile
+hostilely
+hostilities
+hostility
+hosting
+hostly
+hosts
+hot
+hotel
+hotel's
+hotels
+hotly
+hotness
+hotter
+hottest
+hound
+hounded
+hounder
+hounding
+hounds
+hour
+hour's
+hourly
+hours
+house
+house's
+housed
+houseflies
+housefly
+housefly's
+household
+household's
+householder
+householders
+households
+housekeeper
+housekeeper's
+housekeepers
+housekeeping
+houser
+houses
+housetop
+housetop's
+housetops
+housewife
+housewife's
+housewifeliness
+housewifely
+housework
+houseworker
+houseworkers
+housing
+housings
+hovel
+hovel's
+hovels
+hover
+hovered
+hoverer
+hovering
+hovers
+how
+how's
+however
+howl
+howled
+howler
+howling
+howls
+hows
+hrs
+hub
+hub's
+hubris
+hubs
+huddle
+huddled
+huddler
+huddles
+huddling
+hue
+hue's
+hued
+hues
+hug
+huge
+hugely
+hugeness
+huger
+hugest
+hugs
+huh
+hull
+hull's
+hulled
+huller
+hulling
+hulls
+hum
+human
+humane
+humanely
+humaneness
+humanities
+humanity
+humanity's
+humanly
+humanness
+humans
+humble
+humbled
+humbleness
+humbler
+humbles
+humblest
+humbling
+humbly
+humid
+humidification
+humidifications
+humidified
+humidifier
+humidifiers
+humidifies
+humidify
+humidifying
+humidities
+humidity
+humidly
+humiliate
+humiliated
+humiliates
+humiliating
+humiliatingly
+humiliation
+humiliations
+humility
+hummed
+humming
+humorous
+humorously
+humorousness
+hump
+humped
+humping
+humps
+hums
+hunch
+hunched
+hunches
+hundred
+hundreds
+hundredth
+hung
+hunger
+hungered
+hungering
+hungers
+hungrier
+hungriest
+hungrily
+hungriness
+hungry
+hunk
+hunk's
+hunker
+hunkered
+hunkering
+hunkers
+hunks
+hunt
+hunted
+hunter
+hunters
+hunting
+hunts
+huntsman
+hurdle
+hurdled
+hurdler
+hurdles
+hurdling
+hurl
+hurled
+hurler
+hurlers
+hurling
+hurrah
+hurricane
+hurricane's
+hurricanes
+hurried
+hurriedly
+hurriedness
+hurrier
+hurries
+hurry
+hurrying
+hurt
+hurter
+hurting
+hurtingly
+hurts
+husband
+husband's
+husbander
+husbandly
+husbandry
+husbands
+hush
+hushed
+hushes
+hushing
+husk
+husked
+husker
+huskier
+huskies
+huskiness
+husking
+husks
+husky
+hustle
+hustled
+hustler
+hustlers
+hustles
+hustling
+hut
+hut's
+huts
+hyacinth
+hybrid
+hybrids
+hydraulic
+hydraulically
+hydraulics
+hydrodynamic
+hydrodynamics
+hydrogen
+hydrogen's
+hydrogens
+hygiene
+hymn
+hymn's
+hymning
+hymns
+hype
+hype's
+hyped
+hyper
+hyperbolic
+hypertext
+hypertext's
+hypes
+hyphen
+hyphen's
+hyphened
+hyphening
+hyphens
+hypocrisies
+hypocrisy
+hypocrite
+hypocrite's
+hypocrites
+hypodermic
+hypodermics
+hypotheses
+hypothesis
+hypothetical
+hypothetically
+hysteresis
+hysterical
+hysterically
+ice
+iceberg
+iceberg's
+icebergs
+iced
+ices
+icier
+iciest
+iciness
+icing
+icings
+icon
+icon's
+icons
+icy
+id
+id's
+idea
+idea's
+ideal
+idealism
+idealistic
+ideally
+ideals
+ideas
+identical
+identically
+identicalness
+identifiable
+identifiably
+identification
+identifications
+identified
+identifier
+identifiers
+identifies
+identify
+identifying
+identities
+identity
+identity's
+ideological
+ideologically
+ideologies
+ideology
+idiocies
+idiocy
+idiosyncrasies
+idiosyncrasy
+idiosyncrasy's
+idiosyncratic
+idiot
+idiot's
+idiotic
+idiots
+idle
+idled
+idleness
+idler
+idlers
+idles
+idlest
+idling
+idly
+idol
+idol's
+idolatry
+idols
+if
+ignition
+ignoble
+ignobleness
+ignorance
+ignorant
+ignorantly
+ignorantness
+ignore
+ignored
+ignorer
+ignores
+ignoring
+ii
+iii
+ill
+illegal
+illegalities
+illegality
+illegally
+illicit
+illicitly
+illiterate
+illiterately
+illiterateness
+illiterates
+illness
+illness's
+illnesses
+illogical
+illogically
+illogicalness
+ills
+illuminate
+illuminated
+illuminates
+illuminating
+illuminatingly
+illumination
+illuminations
+illuminative
+illusion
+illusion's
+illusions
+illusive
+illusively
+illusiveness
+illustrate
+illustrated
+illustrates
+illustrating
+illustration
+illustrations
+illustrative
+illustratively
+illustrator
+illustrator's
+illustrators
+illustrious
+illustriously
+illustriousness
+illy
+image
+imaged
+images
+imaginable
+imaginableness
+imaginably
+imaginariness
+imaginary
+imagination
+imagination's
+imaginations
+imaginative
+imaginatively
+imaginativeness
+imagine
+imagined
+imaginer
+imagines
+imaging
+imagining
+imaginings
+imbalance
+imbalances
+imitate
+imitated
+imitates
+imitating
+imitation
+imitations
+imitative
+imitatively
+imitativeness
+immaculate
+immaculately
+immaculateness
+immaterial
+immaterially
+immaterialness
+immature
+immaturely
+immatureness
+immaturity
+immediacies
+immediacy
+immediate
+immediately
+immediateness
+immemorial
+immemorially
+immense
+immensely
+immenseness
+immerse
+immersed
+immerser
+immerses
+immersing
+immersion
+immersions
+immigrant
+immigrant's
+immigrants
+immigrate
+immigrated
+immigrates
+immigrating
+immigration
+imminent
+imminently
+imminentness
+immoral
+immoralities
+immorality
+immorally
+immortal
+immortality
+immortally
+immortals
+immovability
+immovable
+immovableness
+immovably
+immune
+immunities
+immunity
+immunity's
+immunology
+immutable
+immutableness
+imp
+imp's
+impact
+impacted
+impacter
+impacting
+impaction
+impactions
+impactive
+impactor
+impactor's
+impactors
+impacts
+impair
+impaired
+impairer
+impairing
+impairs
+impart
+imparted
+impartial
+impartially
+imparting
+imparts
+impasse
+impasses
+impassion
+impassioned
+impassioning
+impassions
+impassive
+impassively
+impassiveness
+impatience
+impatient
+impatiently
+impeach
+impeached
+impeaches
+impeaching
+impedance
+impedance's
+impedances
+impede
+impeded
+impeder
+impedes
+impediment
+impediment's
+impediments
+impeding
+impel
+impels
+impending
+impenetrability
+impenetrable
+impenetrableness
+impenetrably
+imperative
+imperatively
+imperativeness
+imperatives
+imperfect
+imperfection
+imperfection's
+imperfections
+imperfective
+imperfectly
+imperfectness
+imperial
+imperialism
+imperialist
+imperialist's
+imperialists
+imperially
+imperil
+imperious
+imperiously
+imperiousness
+impermanence
+impermanent
+impermanently
+impermissible
+impersonal
+impersonally
+impersonate
+impersonated
+impersonates
+impersonating
+impersonation
+impersonations
+impertinent
+impertinently
+imperturbability
+impervious
+imperviously
+imperviousness
+impetuous
+impetuously
+impetuousness
+impetus
+impinge
+impinged
+impinges
+impinging
+impious
+impiously
+implant
+implanted
+implanter
+implanting
+implants
+implausible
+implement
+implementable
+implementation
+implementation's
+implementations
+implemented
+implementer
+implementers
+implementing
+implementor
+implementor's
+implementors
+implements
+implicant
+implicant's
+implicants
+implicate
+implicated
+implicates
+implicating
+implication
+implications
+implicative
+implicatively
+implicativeness
+implicit
+implicitly
+implicitness
+implied
+implies
+implore
+implored
+implores
+imploring
+imply
+implying
+import
+importance
+important
+importantly
+importation
+importations
+imported
+importer
+importers
+importing
+imports
+impose
+imposed
+imposer
+imposes
+imposing
+imposingly
+imposition
+imposition's
+impositions
+impossibilities
+impossibility
+impossible
+impossibleness
+impossibles
+impossibly
+impostor
+impostor's
+impostors
+impotence
+impotent
+impotently
+impoverish
+impoverished
+impoverisher
+impoverishes
+impoverishing
+impoverishment
+impracticable
+impracticableness
+impractical
+impracticality
+impractically
+impracticalness
+imprecise
+imprecisely
+impreciseness
+imprecision
+impregnable
+impregnableness
+impress
+impressed
+impresser
+impresses
+impressing
+impression
+impression's
+impressionable
+impressionableness
+impressionist
+impressionistic
+impressionists
+impressions
+impressive
+impressively
+impressiveness
+impressment
+imprint
+imprinted
+imprinting
+imprints
+imprison
+imprisoned
+imprisoning
+imprisonment
+imprisonment's
+imprisonments
+imprisons
+improbable
+improbableness
+impromptu
+improper
+improperly
+improperness
+improve
+improved
+improvement
+improvements
+improver
+improves
+improving
+improvisation
+improvisation's
+improvisational
+improvisations
+improvise
+improvised
+improviser
+improvisers
+improvises
+improvising
+imps
+impudent
+impudently
+impulse
+impulsed
+impulses
+impulsing
+impulsion
+impulsions
+impulsive
+impulsively
+impulsiveness
+impunity
+impure
+impurely
+impureness
+impurities
+impurity
+impurity's
+impute
+imputed
+imputes
+imputing
+in
+inabilities
+inability
+inaccessibility
+inaccessible
+inaccessibly
+inaccuracies
+inaccuracy
+inaccurate
+inaccurately
+inactions
+inactivation
+inactive
+inactively
+inactivity
+inadequacies
+inadequacy
+inadequate
+inadequately
+inadequateness
+inadmissibility
+inadmissible
+inadvertent
+inadvertently
+inadvisability
+inadvisable
+inalterable
+inalterableness
+inane
+inanely
+inaneness
+inaner
+inanest
+inanimate
+inanimately
+inanimateness
+inapparently
+inapplicability
+inapplicable
+inappreciable
+inappreciably
+inappreciative
+inappreciatively
+inappreciativeness
+inapproachable
+inappropriate
+inappropriately
+inappropriateness
+inapt
+inaptly
+inaptness
+inarguable
+inarguably
+inarticulable
+inartistic
+inartistically
+inasmuch
+inattentive
+inattentively
+inattentiveness
+inaudible
+inaudibly
+inaugural
+inaugurate
+inaugurated
+inaugurating
+inauguration
+inaugurations
+inauspicious
+inauspiciously
+inauspiciousness
+inauthentic
+inauthenticity
+inboards
+inborn
+inbounds
+inbred
+inbuilt
+incantation
+incantations
+incapable
+incapableness
+incapably
+incapacitating
+incarnation
+incarnation's
+incarnations
+incautious
+incautiously
+incautiousness
+incendiaries
+incendiary
+incense
+incensed
+incenses
+incensing
+incentive
+incentive's
+incentively
+incentives
+inception
+inceptions
+incessant
+incessantly
+inch
+inched
+inches
+inching
+incidence
+incidences
+incident
+incident's
+incidental
+incidentally
+incidentals
+incidents
+incipient
+incipiently
+incision
+incision's
+incisions
+incitations
+incite
+incited
+inciter
+incites
+inciting
+incivility
+inclination
+inclination's
+inclinations
+incline
+inclined
+incliner
+inclines
+inclining
+inclose
+inclosed
+incloses
+inclosing
+include
+included
+includes
+including
+inclusion
+inclusion's
+inclusions
+inclusive
+inclusively
+inclusiveness
+incoherence
+incoherences
+incoherent
+incoherently
+income
+incomer
+incomers
+incomes
+incoming
+incommensurate
+incomparability
+incomparable
+incomparably
+incompatibilities
+incompatibility
+incompatibility's
+incompatible
+incompatibly
+incompetence
+incompetent
+incompetent's
+incompetently
+incompetents
+incomplete
+incompletely
+incompleteness
+incompletion
+incomprehensibility
+incomprehensible
+incomprehensibleness
+incomprehensibly
+incomprehension
+incompressible
+incomputable
+inconceivable
+inconceivableness
+inconceivably
+inconclusive
+inconclusively
+inconclusiveness
+inconformity
+incongruence
+incongruent
+incongruently
+inconsequential
+inconsequentially
+inconsequently
+inconsiderable
+inconsiderableness
+inconsiderably
+inconsiderate
+inconsiderately
+inconsiderateness
+inconsideration
+inconsistencies
+inconsistency
+inconsistency's
+inconsistent
+inconsistently
+inconsolable
+inconsolableness
+inconspicuous
+inconspicuously
+inconspicuousness
+inconstancy
+inconstantly
+incontestable
+incontinently
+incontrollable
+inconvenience
+inconvenienced
+inconveniences
+inconveniencing
+inconvenient
+inconveniently
+inconvertibility
+inconvertible
+incorporate
+incorporated
+incorporates
+incorporating
+incorporation
+incorporative
+incorrect
+incorrectly
+incorrectness
+incorruption
+increase
+increased
+increaser
+increases
+increasing
+increasingly
+incredibility
+incredible
+incredibleness
+incredibly
+incredulity
+incredulous
+incredulously
+increment
+incremental
+incrementally
+incremented
+incrementing
+increments
+incubate
+incubated
+incubates
+incubating
+incubation
+incubative
+incubator
+incubator's
+incubators
+incur
+incurable
+incurableness
+incurables
+incurably
+incurred
+incurring
+incurs
+indebted
+indebtedness
+indecent
+indecently
+indecision
+indecisive
+indecisively
+indecisiveness
+indecomposable
+indeed
+indefinable
+indefinableness
+indefinite
+indefinitely
+indefiniteness
+indemnity
+indent
+indentation
+indentation's
+indentations
+indented
+indenter
+indenting
+indents
+independence
+independent
+independently
+independents
+indescribable
+indescribableness
+indeterminable
+indeterminableness
+indeterminacies
+indeterminacy
+indeterminacy's
+indeterminate
+indeterminately
+indeterminateness
+indetermination
+indeterminism
+indeterministic
+index
+indexable
+indexed
+indexer
+indexers
+indexes
+indexing
+indicate
+indicated
+indicates
+indicating
+indication
+indications
+indicative
+indicatively
+indicatives
+indicator
+indicator's
+indicators
+indices
+indictment
+indictment's
+indictments
+indifference
+indifferent
+indifferently
+indigenous
+indigenously
+indigenousness
+indigested
+indigestible
+indigestion
+indignant
+indignantly
+indignation
+indignities
+indignity
+indigo
+indirect
+indirected
+indirecting
+indirection
+indirections
+indirectly
+indirectness
+indirects
+indiscernible
+indiscipline
+indisciplined
+indiscreet
+indiscreetly
+indiscreetness
+indiscriminate
+indiscriminately
+indiscriminateness
+indiscriminating
+indiscriminatingly
+indiscrimination
+indispensability
+indispensable
+indispensableness
+indispensably
+indisposed
+indisposes
+indistinct
+indistinctive
+indistinctly
+indistinctness
+indistinguishable
+indistinguishableness
+individual
+individual's
+individualistic
+individuality
+individually
+individuals
+indivisibility
+indivisible
+indivisibleness
+indoctrinate
+indoctrinated
+indoctrinates
+indoctrinating
+indoctrination
+indolent
+indolently
+indomitable
+indomitableness
+indoor
+indoors
+induce
+induced
+inducement
+inducement's
+inducements
+inducer
+induces
+inducing
+induct
+inductance
+inductances
+inducted
+inducting
+induction
+induction's
+inductions
+inductive
+inductively
+inductiveness
+inductor
+inductor's
+inductors
+inducts
+indulge
+indulged
+indulgence
+indulgence's
+indulgences
+indulger
+indulges
+indulging
+industrial
+industrialist
+industrialist's
+industrialists
+industrially
+industrials
+industries
+industrious
+industriously
+industriousness
+industry
+industry's
+inedited
+ineffective
+ineffectively
+ineffectiveness
+inefficacy
+inefficiencies
+inefficiency
+inefficient
+inefficiently
+inelastically
+inelegant
+inelegantly
+ineloquent
+ineloquently
+inequalities
+inequality
+inequitably
+inequities
+inequity
+inert
+inertia
+inertias
+inertly
+inertness
+inescapable
+inescapably
+inessential
+inestimable
+inevitabilities
+inevitability
+inevitable
+inevitableness
+inevitably
+inexact
+inexactitude
+inexactly
+inexactness
+inexcusable
+inexcusableness
+inexcusably
+inexhaustible
+inexhaustibleness
+inexistent
+inexorable
+inexorableness
+inexorably
+inexpedient
+inexpediently
+inexpensive
+inexpensively
+inexpensiveness
+inexperience
+inexperienced
+inexplainable
+inexplicable
+inexplicableness
+inexplicably
+inexpressibility
+inexpressible
+inexpressibleness
+inexpressibly
+inexpressive
+inexpressively
+inexpressiveness
+inextensible
+infallibility
+infallible
+infallibly
+infamous
+infamously
+infancy
+infant
+infant's
+infantry
+infants
+infeasible
+infect
+infected
+infecting
+infection
+infection's
+infections
+infectious
+infectiously
+infectiousness
+infective
+infects
+infer
+inference
+inference's
+inferencer
+inferences
+inferencing
+inferential
+inferentially
+inferior
+inferior's
+inferiority
+inferiorly
+inferiors
+infernal
+infernally
+inferno
+inferno's
+infernos
+inferred
+inferring
+infers
+infertility
+infest
+infested
+infester
+infesting
+infests
+infidel
+infidel's
+infidelity
+infidels
+infields
+infighter
+infighter's
+infighters
+infighting
+infiltrate
+infiltrated
+infiltrates
+infiltrating
+infiltration
+infiltrative
+infinite
+infinitely
+infiniteness
+infinitesimal
+infinitesimally
+infinities
+infinitive
+infinitive's
+infinitively
+infinitives
+infinitum
+infinity
+infirmity
+infix
+infix's
+infixes
+inflame
+inflamed
+inflamer
+inflaming
+inflammable
+inflammableness
+inflatable
+inflate
+inflated
+inflater
+inflates
+inflating
+inflation
+inflationary
+inflexibility
+inflexible
+inflexibleness
+inflexibly
+inflict
+inflicted
+inflicter
+inflicting
+inflictive
+inflicts
+inflows
+influence
+influenced
+influencer
+influences
+influencing
+influent
+influential
+influentially
+influenza
+inform
+informal
+informality
+informally
+informant
+informant's
+informants
+information
+informational
+informations
+informative
+informatively
+informativeness
+informed
+informer
+informers
+informing
+informs
+infractions
+infrastructure
+infrastructures
+infrequent
+infrequently
+infringe
+infringed
+infringement
+infringement's
+infringements
+infringer
+infringes
+infringing
+infuriate
+infuriated
+infuriately
+infuriates
+infuriating
+infuriatingly
+infuriation
+infuse
+infused
+infuser
+infuses
+infusing
+infusion
+infusions
+ingenious
+ingeniously
+ingeniousness
+ingenuity
+inglorious
+ingloriously
+ingloriousness
+ingot
+ingrained
+ingrainedly
+ingrains
+ingratitude
+ingredient
+ingredient's
+ingredients
+ingrown
+ingrownness
+ingrowth
+ingrowths
+inhabit
+inhabitable
+inhabitance
+inhabitant
+inhabitant's
+inhabitants
+inhabited
+inhabiter
+inhabiting
+inhabits
+inhale
+inhaled
+inhaler
+inhales
+inhaling
+inharmonious
+inharmoniously
+inharmoniousness
+inhere
+inhered
+inherent
+inherently
+inheres
+inhering
+inherit
+inheritable
+inheritableness
+inheritance
+inheritance's
+inheritances
+inherited
+inheriting
+inheritor
+inheritor's
+inheritors
+inheritress
+inheritress's
+inheritresses
+inheritrices
+inheritrix
+inherits
+inhibit
+inhibited
+inhibiter
+inhibiting
+inhibition
+inhibition's
+inhibitions
+inhibitive
+inhibitors
+inhibits
+inholding
+inholdings
+inhomogeneities
+inhomogeneity
+inhospitable
+inhospitableness
+inhospitably
+inhospitality
+inhuman
+inhumane
+inhumanely
+inhumanities
+inhumanly
+inhumanness
+inion
+iniquities
+iniquity
+iniquity's
+initial
+initialness
+initials
+initiate
+initiated
+initiates
+initiating
+initiation
+initiations
+initiative
+initiative's
+initiatives
+initiator
+initiator's
+initiators
+inject
+injected
+injecting
+injection
+injection's
+injections
+injective
+injects
+injudicious
+injudiciously
+injudiciousness
+injunction
+injunction's
+injunctions
+injure
+injured
+injurer
+injures
+injuries
+injuring
+injurious
+injuriously
+injuriousness
+injury
+injury's
+injustice
+injustice's
+injustices
+ink
+inked
+inker
+inkers
+inking
+inkings
+inkling
+inkling's
+inklings
+inks
+inlaid
+inland
+inlander
+inlet
+inlet's
+inlets
+inlier
+inly
+inlying
+inmate
+inmate's
+inmates
+inn
+innards
+innate
+innately
+innateness
+inner
+innerly
+innermost
+inning
+innings
+innocence
+innocent
+innocently
+innocents
+innocuous
+innocuously
+innocuousness
+innovate
+innovated
+innovates
+innovating
+innovation
+innovation's
+innovations
+innovative
+innovativeness
+inns
+innumerability
+innumerable
+innumerableness
+innumerably
+inoperable
+inopportune
+inopportunely
+inopportuneness
+inordinate
+inordinately
+inordinateness
+inorganic
+input
+input's
+inputed
+inputer
+inputing
+inputs
+inputting
+inquietude
+inquire
+inquired
+inquirer
+inquirers
+inquires
+inquiries
+inquiring
+inquiringly
+inquiry
+inquiry's
+inquisition
+inquisition's
+inquisitions
+inquisitive
+inquisitively
+inquisitiveness
+inroad
+inroads
+ins
+insane
+insanely
+insaneness
+insanitary
+insanity
+inscribe
+inscribed
+inscriber
+inscribes
+inscribing
+inscription
+inscription's
+inscriptions
+insect
+insect's
+insects
+insecure
+insecurely
+insecureness
+insecurity
+insensible
+insensibleness
+insensibly
+insensitive
+insensitively
+insensitiveness
+insensitivity
+inseparable
+inseparableness
+insert
+inserted
+inserter
+inserting
+insertion
+insertion's
+insertions
+inserts
+insets
+insetting
+inside
+insider
+insiders
+insides
+insidious
+insidiously
+insidiousness
+insight
+insight's
+insightful
+insightfully
+insights
+insignia
+insignias
+insignificance
+insignificances
+insignificant
+insignificantly
+insincerity
+insinuate
+insinuated
+insinuates
+insinuating
+insinuatingly
+insinuation
+insinuations
+insinuative
+insist
+insisted
+insistence
+insistent
+insistently
+insisting
+insists
+insociability
+insociable
+insociably
+insofar
+insolence
+insolent
+insolently
+insolubility
+insoluble
+insolubleness
+insolvable
+inspect
+inspected
+inspecting
+inspection
+inspection's
+inspections
+inspective
+inspector
+inspector's
+inspectors
+inspects
+inspiration
+inspiration's
+inspirations
+inspire
+inspired
+inspirer
+inspires
+inspiring
+instabilities
+instability
+install
+installation
+installation's
+installations
+installed
+installer
+installers
+installing
+installment
+installment's
+installments
+installs
+instance
+instanced
+instances
+instancing
+instant
+instantaneous
+instantaneously
+instantaneousness
+instanter
+instantiate
+instantiated
+instantiates
+instantiating
+instantiation
+instantiation's
+instantiations
+instantly
+instantness
+instants
+instated
+instates
+instead
+insteps
+instigate
+instigated
+instigates
+instigating
+instigation
+instigative
+instigator
+instigator's
+instigators
+instills
+instinct
+instinct's
+instinctive
+instinctively
+instincts
+institute
+instituted
+instituter
+instituters
+institutes
+instituting
+institution
+institution's
+institutional
+institutionally
+institutions
+institutive
+instruct
+instructed
+instructing
+instruction
+instruction's
+instructional
+instructions
+instructive
+instructively
+instructiveness
+instructor
+instructor's
+instructors
+instructs
+instrument
+instrumental
+instrumentalist
+instrumentalist's
+instrumentalists
+instrumentally
+instrumentals
+instrumentation
+instrumented
+instrumenting
+instruments
+insufficiencies
+insufficiency
+insufficient
+insufficiently
+insulate
+insulated
+insulates
+insulating
+insulation
+insulations
+insulator
+insulator's
+insulators
+insult
+insulted
+insulter
+insulting
+insultingly
+insults
+insuperable
+insupportable
+insupportableness
+insurance
+insurances
+insure
+insured
+insurer
+insurers
+insures
+insurgent
+insurgent's
+insurgents
+insuring
+insurmountable
+insurrection
+insurrection's
+insurrections
+insusceptible
+intact
+intactness
+intakes
+intangible
+intangible's
+intangibleness
+intangibles
+intangibly
+integer
+integer's
+integers
+integral
+integral's
+integrally
+integrals
+integrate
+integrated
+integrates
+integrating
+integration
+integrations
+integrative
+integrity
+intellect
+intellect's
+intellective
+intellectively
+intellects
+intellectual
+intellectually
+intellectualness
+intellectuals
+intelligence
+intelligencer
+intelligences
+intelligent
+intelligently
+intelligibility
+intelligible
+intelligibleness
+intelligibly
+intemperance
+intemperate
+intemperately
+intemperateness
+intend
+intended
+intendedly
+intendedness
+intender
+intending
+intends
+intense
+intensely
+intenseness
+intensification
+intensified
+intensifier
+intensifiers
+intensifies
+intensify
+intensifying
+intension
+intensities
+intensity
+intensive
+intensively
+intensiveness
+intent
+intention
+intentional
+intentionally
+intentioned
+intentions
+intently
+intentness
+intents
+interact
+interacted
+interacting
+interaction
+interaction's
+interactions
+interactive
+interactively
+interactivity
+interacts
+intercept
+intercepted
+intercepter
+intercepting
+intercepts
+interchange
+interchangeability
+interchangeable
+interchangeableness
+interchangeably
+interchanged
+interchanger
+interchanges
+interchanging
+interchangings
+intercity
+intercommunicate
+intercommunicated
+intercommunicates
+intercommunicating
+intercommunication
+interconnect
+interconnected
+interconnectedness
+interconnecting
+interconnection
+interconnection's
+interconnections
+interconnectivity
+interconnects
+intercourse
+interdependence
+interdependencies
+interdependency
+interdependent
+interdependently
+interdisciplinary
+interest
+interested
+interestedly
+interesting
+interestingly
+interestingness
+interests
+interface
+interfaced
+interfacer
+interfaces
+interfacing
+interfere
+interfered
+interference
+interferences
+interferer
+interferes
+interfering
+interferingly
+interim
+interior
+interior's
+interiorly
+interiors
+interlace
+interlaced
+interlaces
+interlacing
+interleave
+interleaved
+interleaves
+interleaving
+interlink
+interlinked
+interlinking
+interlinks
+interlisp
+interlisp's
+intermediaries
+intermediary
+intermediate
+intermediate's
+intermediated
+intermediately
+intermediateness
+intermediates
+intermediating
+intermediation
+interminable
+intermingle
+intermingled
+intermingles
+intermingling
+intermittent
+intermittently
+intermix
+intermixed
+intermixer
+intermixes
+intermixing
+intermodule
+intern
+internal
+internally
+internals
+international
+internationality
+internationally
+internationals
+interned
+interning
+interns
+interpersonal
+interpersonally
+interplay
+interpolate
+interpolated
+interpolates
+interpolating
+interpolation
+interpolations
+interpolative
+interpose
+interposed
+interposer
+interposes
+interposing
+interpret
+interpretable
+interpretation
+interpretation's
+interpretations
+interpreted
+interpreter
+interpreters
+interpreting
+interpretive
+interpretively
+interprets
+interprocess
+interrelate
+interrelated
+interrelatedly
+interrelatedness
+interrelates
+interrelating
+interrelation
+interrelations
+interrelationship
+interrelationship's
+interrelationships
+interrogate
+interrogated
+interrogates
+interrogating
+interrogation
+interrogations
+interrogative
+interrogatively
+interrogatives
+interrupt
+interrupted
+interrupter
+interrupters
+interruptible
+interrupting
+interruption
+interruption's
+interruptions
+interruptive
+interrupts
+intersect
+intersected
+intersecting
+intersection
+intersection's
+intersections
+intersects
+intersperse
+interspersed
+intersperses
+interspersing
+interspersion
+interspersions
+interstage
+interstate
+intertask
+intertwine
+intertwined
+intertwines
+intertwining
+interval
+interval's
+intervals
+intervene
+intervened
+intervener
+intervenes
+intervening
+intervention
+intervention's
+interventions
+interview
+interviewed
+interviewee
+interviewee's
+interviewees
+interviewer
+interviewer's
+interviewers
+interviewing
+interviews
+interwoven
+intestinal
+intestinally
+intestine
+intestine's
+intestines
+intimacy
+intimate
+intimated
+intimately
+intimateness
+intimater
+intimates
+intimating
+intimation
+intimations
+intimidate
+intimidated
+intimidates
+intimidating
+intimidation
+into
+intolerability
+intolerable
+intolerableness
+intolerably
+intolerance
+intolerant
+intolerantly
+intolerantness
+intonation
+intonation's
+intonations
+intoned
+intoner
+intoxicate
+intoxicated
+intoxicatedly
+intoxicating
+intoxication
+intractability
+intractable
+intractableness
+intractably
+intramural
+intramurally
+intransigent
+intransigently
+intransigents
+intransitive
+intransitively
+intransitiveness
+intraprocess
+intricacies
+intricacy
+intricate
+intricately
+intricateness
+intrigue
+intrigued
+intriguer
+intrigues
+intriguing
+intriguingly
+intrinsic
+intrinsically
+intrinsics
+introduce
+introduced
+introducer
+introduces
+introducing
+introduction
+introduction's
+introductions
+introductory
+introspect
+introspection
+introspections
+introspective
+introspectively
+introspectiveness
+introvert
+introverted
+intrude
+intruded
+intruder
+intruder's
+intruders
+intrudes
+intruding
+intrusion
+intrusion's
+intrusions
+intrusive
+intrusively
+intrusiveness
+intrust
+intubate
+intubated
+intubates
+intubating
+intubation
+intuition
+intuition's
+intuitionist
+intuitions
+intuitive
+intuitively
+intuitiveness
+invade
+invaded
+invader
+invaders
+invades
+invading
+invalid
+invalidate
+invalidated
+invalidates
+invalidating
+invalidation
+invalidations
+invalidities
+invalidity
+invalidly
+invalidness
+invalids
+invaluable
+invaluableness
+invaluably
+invariability
+invariable
+invariableness
+invariably
+invariance
+invariant
+invariantly
+invariants
+invasion
+invasion's
+invasions
+invent
+invented
+inventing
+invention
+invention's
+inventions
+inventive
+inventively
+inventiveness
+inventor
+inventor's
+inventories
+inventors
+inventory
+inventory's
+invents
+inveracity
+inverse
+inversely
+inverses
+inversion
+inversions
+inversive
+invert
+invertebrate
+invertebrate's
+invertebrates
+inverted
+inverter
+inverters
+invertible
+inverting
+inverts
+invest
+invested
+investigate
+investigated
+investigates
+investigating
+investigation
+investigations
+investigative
+investigator
+investigator's
+investigators
+investing
+investment
+investment's
+investments
+investor
+investor's
+investors
+invests
+inviability
+inviable
+invincible
+invincibleness
+invisibility
+invisible
+invisibleness
+invisibly
+invitation
+invitation's
+invitations
+invite
+invited
+inviter
+invites
+inviting
+invitingly
+invocation
+invocation's
+invocations
+invoice
+invoiced
+invoices
+invoicing
+invokable
+invoke
+invoked
+invoker
+invokers
+invokes
+invoking
+involuntarily
+involuntariness
+involuntary
+involve
+involved
+involvedly
+involvement
+involvement's
+involvements
+involver
+involves
+involving
+invulnerable
+invulnerableness
+inward
+inwardly
+inwardness
+inwards
+inwrought
+ioctl
+iodine
+ion
+ions
+irate
+irately
+irateness
+ire
+ire's
+ires
+iris
+irises
+irk
+irked
+irking
+irks
+irksome
+irksomely
+irksomeness
+iron
+ironed
+ironer
+ironical
+ironically
+ironicalness
+ironies
+ironing
+ironings
+ironness
+irons
+ironwork
+ironwork's
+ironworker
+ironworks
+irony
+irrational
+irrationality
+irrationally
+irrationalness
+irrationals
+irrecoverable
+irrecoverableness
+irreducible
+irreducibly
+irreflexive
+irrefutable
+irregular
+irregularities
+irregularity
+irregularly
+irregulars
+irrelevance
+irrelevances
+irrelevant
+irrelevantly
+irrepressible
+irresistible
+irresistibleness
+irrespective
+irrespectively
+irresponsible
+irresponsibleness
+irresponsibly
+irreversible
+irrigate
+irrigated
+irrigates
+irrigating
+irrigation
+irrigations
+irritate
+irritated
+irritates
+irritating
+irritatingly
+irritation
+irritations
+irritative
+is
+island
+islander
+islanders
+islands
+isle
+isle's
+isles
+islet
+islet's
+islets
+isling
+isn't
+isolate
+isolated
+isolates
+isolating
+isolation
+isolations
+isometric
+isometrics
+isomorphic
+isomorphically
+isomorphism
+isomorphism's
+isomorphisms
+isotope
+isotope's
+isotopes
+ispell
+ispell's
+issuance
+issue
+issued
+issuer
+issuers
+issues
+issuing
+isthmus
+it
+it'd
+it'll
+it's
+italic
+italics
+itch
+itches
+itching
+item
+item's
+items
+iterate
+iterated
+iterates
+iterating
+iteration
+iterations
+iterative
+iteratively
+iterator
+iterator's
+iterators
+itineraries
+itinerary
+its
+itself
+iv
+ivied
+ivies
+ivories
+ivory
+ivy
+ivy's
+ix
+jab
+jab's
+jabbed
+jabbing
+jabs
+jack
+jacked
+jacker
+jacket
+jacketed
+jackets
+jacking
+jacks
+jade
+jaded
+jadedly
+jadedness
+jades
+jading
+jail
+jailed
+jailer
+jailers
+jailing
+jails
+jam
+jammed
+jamming
+jams
+janitor
+janitor's
+janitors
+jar
+jar's
+jargon
+jarred
+jarring
+jarringly
+jars
+jaunt
+jaunt's
+jaunted
+jauntier
+jauntiness
+jaunting
+jaunts
+jaunty
+javelin
+javelin's
+javelins
+jaw
+jaw's
+jawed
+jaws
+jay
+jazz
+jealous
+jealousies
+jealously
+jealousness
+jealousy
+jean
+jean's
+jeans
+jeep
+jeep's
+jeeped
+jeepers
+jeeping
+jeeps
+jeer
+jeer's
+jeerer
+jeers
+jellied
+jellies
+jelly
+jelly's
+jellyfish
+jellying
+jenny
+jerk
+jerked
+jerker
+jerkier
+jerkiness
+jerking
+jerkings
+jerks
+jerky
+jersey
+jersey's
+jerseys
+jest
+jested
+jester
+jesting
+jests
+jet
+jet's
+jets
+jetted
+jetting
+jewel
+jewelries
+jewelry
+jewels
+jig
+jig's
+jigs
+jingle
+jingled
+jingler
+jingles
+jingling
+job
+job's
+jobs
+jocks
+jocund
+jocundly
+jog
+jogs
+john
+john's
+johns
+join
+joined
+joiner
+joiners
+joining
+joins
+joint
+joint's
+jointed
+jointedly
+jointedness
+jointer
+jointing
+jointly
+jointness
+joints
+joke
+joked
+joker
+jokers
+jokes
+joking
+jokingly
+jollied
+jollier
+jollies
+jolly
+jollying
+jolt
+jolted
+jolter
+jolting
+jolts
+jostle
+jostled
+jostles
+jostling
+jot
+jots
+jotted
+jotting
+journal
+journal's
+journalism
+journalist
+journalist's
+journalistic
+journalists
+journals
+journey
+journeyed
+journeying
+journeyings
+journeys
+joust
+jousted
+jouster
+jousting
+jousts
+joy
+joy's
+joyful
+joyfully
+joyfulness
+joyous
+joyously
+joyousness
+joys
+jubilee
+judge
+judged
+judger
+judges
+judging
+judicable
+judicial
+judicially
+judiciaries
+judiciary
+judicious
+judiciously
+judiciousness
+jug
+jug's
+juggle
+juggled
+juggler
+jugglers
+juggles
+juggling
+jugs
+juice
+juice's
+juiced
+juicer
+juicers
+juices
+juicier
+juiciest
+juiciness
+juicing
+juicy
+jumble
+jumbled
+jumbles
+jumbling
+jump
+jumped
+jumper
+jumpers
+jumpier
+jumpiness
+jumping
+jumps
+jumpy
+junction
+junction's
+junctions
+juncture
+juncture's
+junctures
+jungle
+jungle's
+jungled
+jungles
+junior
+junior's
+juniors
+juniper
+junk
+junker
+junkers
+junkie
+junkies
+junks
+junky
+juries
+jurisdiction
+jurisdiction's
+jurisdictions
+juror
+juror's
+jurors
+jury
+jury's
+just
+juster
+justice
+justice's
+justices
+justifiable
+justifiably
+justification
+justifications
+justified
+justifier
+justifier's
+justifiers
+justifies
+justify
+justifying
+justing
+justly
+justness
+jut
+juvenile
+juvenile's
+juveniles
+juxtapose
+juxtaposed
+juxtaposes
+juxtaposing
+kHz
+keel
+keeled
+keeler
+keeling
+keels
+keen
+keener
+keenest
+keening
+keenly
+keenness
+keep
+keeper
+keepers
+keeping
+keeps
+ken
+kennel
+kennel's
+kennels
+kept
+kerchief
+kerchief's
+kerchiefed
+kerchiefs
+kernel
+kernel's
+kernels
+kerosene
+ketchup
+kettle
+kettle's
+kettles
+key
+keyboard
+keyboard's
+keyboarder
+keyboarding
+keyboards
+keyclick
+keyclick's
+keyclicks
+keyed
+keying
+keypad
+keypad's
+keypads
+keys
+keystroke
+keystroke's
+keystrokes
+keyword
+keyword's
+keywords
+kick
+kicked
+kicker
+kickers
+kicking
+kicks
+kid
+kid's
+kidded
+kidding
+kiddingly
+kidnap
+kidnap's
+kidnaps
+kidney
+kidney's
+kidneys
+kids
+kill
+killed
+killer
+killers
+killing
+killingly
+killings
+kills
+kilobit
+kilobits
+kilobyte
+kilobytes
+kin
+kind
+kinder
+kindergarten
+kindest
+kindhearted
+kindheartedly
+kindheartedness
+kindle
+kindled
+kindler
+kindles
+kindlier
+kindliness
+kindling
+kindly
+kindness
+kindnesses
+kindred
+kinds
+king
+kingdom
+kingdom's
+kingdoms
+kinglier
+kingliness
+kingly
+kings
+kinkier
+kinkiness
+kinky
+kinship
+kinsman
+kiss
+kissed
+kisser
+kissers
+kisses
+kissing
+kissings
+kit
+kit's
+kitchen
+kitchen's
+kitchener
+kitchens
+kite
+kited
+kiter
+kites
+kiting
+kits
+kitsch
+kitten
+kitten's
+kittened
+kittening
+kittens
+kitties
+kitty
+kludge
+kludge's
+kludged
+kludger
+kludger's
+kludgers
+kludges
+kludgey
+kludging
+klutz
+klutz's
+klutzes
+klutziness
+klutzy
+knack
+knacker
+knacks
+knapsack
+knapsack's
+knapsacks
+knave
+knave's
+knaves
+knead
+kneaded
+kneader
+kneading
+kneads
+knee
+kneed
+kneeing
+kneel
+kneeled
+kneeler
+kneeling
+kneels
+knees
+knell
+knell's
+knells
+knelt
+knew
+knife
+knifed
+knifes
+knifing
+knight
+knighted
+knighthood
+knighting
+knightliness
+knightly
+knights
+knit
+knits
+knives
+knob
+knob's
+knobs
+knock
+knocked
+knocker
+knockers
+knocking
+knocks
+knoll
+knoll's
+knolls
+knot
+knot's
+knots
+knotted
+knotting
+know
+knowable
+knower
+knowhow
+knowing
+knowingly
+knowledge
+knowledgeable
+knowledgeableness
+knowledges
+known
+knows
+knuckle
+knuckled
+knuckles
+knuckling
+kudos
+lab
+lab's
+label
+label's
+labels
+laboratories
+laboratory
+laboratory's
+labs
+labyrinth
+labyrinths
+lace
+laced
+lacer
+lacerate
+lacerated
+lacerates
+lacerating
+laceration
+lacerations
+lacerative
+laces
+lacing
+lack
+lackadaisical
+lackadaisically
+lacked
+lacker
+lacking
+lacks
+lacquer
+lacquered
+lacquerer
+lacquerers
+lacquering
+lacquers
+lad
+ladder
+ladders
+laded
+laden
+ladened
+ladening
+ladies
+lading
+lads
+lady
+lady's
+lag
+lager
+lagers
+lagged
+lagoon
+lagoon's
+lagoons
+lags
+laid
+lain
+lair
+lair's
+lairs
+lake
+lake's
+laker
+lakes
+laking
+lamb
+lamb's
+lambda
+lambda's
+lambdas
+lamber
+lambs
+lame
+lamed
+lamely
+lameness
+lament
+lamentable
+lamentableness
+lamentation
+lamentation's
+lamentations
+lamented
+lamenting
+laments
+lamer
+lames
+lamest
+laminar
+laming
+lamp
+lamp's
+lamper
+lamps
+lance
+lanced
+lancer
+lancers
+lances
+lancing
+land
+landed
+lander
+landers
+landing
+landings
+landladies
+landlady
+landlady's
+landlord
+landlord's
+landlords
+landmark
+landmark's
+landmarks
+landowner
+landowner's
+landowners
+lands
+landscape
+landscaped
+landscaper
+landscapes
+landscaping
+lane
+lane's
+lanes
+language
+language's
+languages
+languid
+languidly
+languidness
+languish
+languished
+languisher
+languishes
+languishing
+languishingly
+lantern
+lantern's
+lanterns
+lap
+lap's
+lapel
+lapel's
+lapels
+laps
+lapse
+lapsed
+lapser
+lapses
+lapsing
+lard
+larded
+larder
+larding
+lards
+large
+largely
+largeness
+larger
+largest
+lark
+lark's
+larker
+larks
+larva
+larvae
+larvas
+laser
+laser's
+lasers
+lash
+lashed
+lasher
+lashes
+lashing
+lashings
+lass
+lass's
+lasses
+last
+lasted
+laster
+lasting
+lastingly
+lastingness
+lastly
+lasts
+latch
+latched
+latches
+latching
+late
+lated
+lately
+latencies
+latency
+latency's
+lateness
+latent
+latently
+latents
+later
+lateral
+laterally
+latest
+latex
+latex's
+latexes
+lath
+lather
+lathered
+latherer
+lathering
+lathes
+lathing
+latitude
+latitude's
+latitudes
+latrine
+latrine's
+latrines
+latter
+latter's
+latterly
+lattice
+lattice's
+latticed
+lattices
+latticing
+laugh
+laughable
+laughableness
+laughably
+laughed
+laugher
+laughers
+laughing
+laughingly
+laughs
+laughter
+laughters
+launch
+launched
+launcher
+launchers
+launches
+launching
+launchings
+launder
+laundered
+launderer
+laundering
+launderings
+launders
+laundries
+laundry
+laurel
+laurel's
+laurels
+lava
+lavatories
+lavatory
+lavatory's
+lavender
+lavendered
+lavendering
+lavish
+lavished
+lavishing
+lavishly
+lavishness
+law
+law's
+lawful
+lawfully
+lawfulness
+lawless
+lawlessly
+lawlessness
+lawn
+lawn's
+lawns
+laws
+lawsuit
+lawsuit's
+lawsuits
+lawyer
+lawyer's
+lawyerly
+lawyers
+lay
+layer
+layered
+layering
+layers
+laying
+layman
+laymen
+layoffs
+layout
+layout's
+layouts
+lays
+lazed
+lazied
+lazier
+laziest
+lazily
+laziness
+lazing
+lazy
+lazying
+lead
+leaded
+leaden
+leadenly
+leadenness
+leader
+leader's
+leaders
+leadership
+leadership's
+leaderships
+leading
+leadings
+leads
+leaf
+leafed
+leafier
+leafiest
+leafing
+leafless
+leaflet
+leaflet's
+leaflets
+leafs
+leafy
+league
+leagued
+leaguer
+leaguers
+leagues
+leaguing
+leak
+leakage
+leakage's
+leakages
+leaked
+leaker
+leaking
+leaks
+lean
+leaned
+leaner
+leanest
+leaning
+leanings
+leanly
+leanness
+leans
+leap
+leaped
+leaper
+leaping
+leaps
+leapt
+learn
+learned
+learnedly
+learnedness
+learner
+learners
+learning
+learnings
+learns
+lease
+leased
+leases
+leash
+leash's
+leashes
+leasing
+least
+leather
+leathered
+leathering
+leathern
+leathers
+leave
+leaved
+leaven
+leavened
+leavening
+leaver
+leavers
+leaves
+leaving
+leavings
+lecture
+lectured
+lecturer
+lecturers
+lectures
+lecturing
+led
+ledge
+ledger
+ledgers
+ledges
+lee
+leech
+leech's
+leeches
+leer
+leered
+leering
+leers
+lees
+left
+leftist
+leftist's
+leftists
+leftmost
+leftover
+leftover's
+leftovers
+lefts
+leftward
+leftwards
+leg
+legacies
+legacy
+legacy's
+legal
+legalities
+legality
+legally
+legals
+legend
+legend's
+legendary
+legends
+legged
+leggings
+legibility
+legible
+legibly
+legion
+legion's
+legions
+legislate
+legislated
+legislates
+legislating
+legislation
+legislations
+legislative
+legislatively
+legislator
+legislator's
+legislators
+legislature
+legislature's
+legislatures
+legitimacy
+legitimate
+legitimated
+legitimately
+legitimates
+legitimating
+legitimation
+legs
+leisure
+leisured
+leisureliness
+leisurely
+lemma
+lemma's
+lemmas
+lemon
+lemon's
+lemonade
+lemons
+lend
+lender
+lenders
+lending
+lends
+length
+lengthen
+lengthened
+lengthener
+lengthening
+lengthens
+lengthier
+lengthiness
+lengthly
+lengths
+lengthwise
+lengthy
+leniency
+lenient
+leniently
+lens
+lens's
+lensed
+lenser
+lensers
+lenses
+lensing
+lensings
+lent
+lentil
+lentil's
+lentils
+leopard
+leopard's
+leopards
+leprosy
+less
+lessen
+lessened
+lessening
+lessens
+lesser
+lesses
+lessing
+lesson
+lesson's
+lessoned
+lessoning
+lessons
+lest
+lester
+let
+let's
+lets
+letter
+lettered
+letterer
+lettering
+letters
+letting
+lettuce
+levee
+levee's
+leveed
+levees
+level
+levelly
+levelness
+levels
+lever
+lever's
+leverage
+leveraged
+leverages
+leveraging
+levered
+levering
+levers
+levied
+levier
+levies
+levy
+levying
+lewd
+lewdly
+lewdness
+lexical
+lexically
+lexicographic
+lexicographical
+lexicographically
+lexicon
+lexicon's
+lexicons
+liabilities
+liability
+liability's
+liable
+liableness
+liaison
+liaison's
+liaisons
+liar
+liar's
+liars
+liberal
+liberally
+liberalness
+liberals
+liberate
+liberated
+liberates
+liberating
+liberation
+liberator
+liberator's
+liberators
+liberties
+liberty
+liberty's
+libido
+librarian
+librarian's
+librarians
+libraries
+library
+library's
+libretti
+license
+licensed
+licensee
+licensee's
+licensees
+licenser
+licenses
+licensing
+lichen
+lichen's
+lichened
+lichens
+lick
+licked
+licker
+licking
+licks
+lid
+lid's
+lids
+lie
+lied
+lieder
+liege
+lien
+lien's
+liens
+lier
+lies
+lieu
+lieutenant
+lieutenant's
+lieutenants
+life
+life's
+lifeless
+lifelessly
+lifelessness
+lifelike
+lifelikeness
+lifelong
+lifer
+lifers
+lifestyle
+lifestyles
+lifetime
+lifetime's
+lifetimes
+lift
+lifted
+lifter
+lifters
+lifting
+lifts
+light
+lighted
+lighten
+lightened
+lightener
+lightening
+lightens
+lighter
+lighter's
+lighters
+lightest
+lighthouse
+lighthouse's
+lighthouses
+lighting
+lightly
+lightness
+lightning
+lightning's
+lightninged
+lightnings
+lights
+lightweight
+lightweights
+like
+liked
+likelier
+likeliest
+likelihood
+likelihoods
+likeliness
+likely
+liken
+likened
+likeness
+likeness's
+likenesses
+likening
+likens
+liker
+likes
+likest
+likewise
+liking
+likings
+lilac
+lilac's
+lilacs
+lilied
+lilies
+lily
+lily's
+limb
+limbed
+limber
+limbered
+limbering
+limberly
+limberness
+limbers
+limbs
+lime
+lime's
+limed
+limes
+limestone
+liming
+limit
+limitability
+limitably
+limitation
+limitation's
+limitations
+limited
+limitedly
+limitedness
+limiteds
+limiter
+limiters
+limiting
+limits
+limp
+limped
+limper
+limping
+limply
+limpness
+limps
+linden
+line
+line's
+linear
+linearities
+linearity
+linearly
+lined
+linen
+linen's
+linens
+liner
+liners
+lines
+linger
+lingered
+lingerer
+lingering
+lingeringly
+lingers
+linguist
+linguist's
+linguistic
+linguistically
+linguistics
+linguists
+lining
+linings
+link
+linkage
+linkage's
+linkages
+linked
+linker
+linkers
+linking
+linkings
+links
+linoleum
+linseed
+lint
+linter
+lints
+lion
+lion's
+lioness
+lioness's
+lionesses
+lions
+lip
+lip's
+lips
+lipstick
+liquefied
+liquefier
+liquefiers
+liquefies
+liquefy
+liquefying
+liquid
+liquid's
+liquidation
+liquidation's
+liquidations
+liquidity
+liquidly
+liquidness
+liquids
+liquor
+liquor's
+liquored
+liquoring
+liquors
+lisp
+lisp's
+lisped
+lisper
+lisping
+lisps
+list
+listed
+listen
+listened
+listener
+listeners
+listening
+listens
+lister
+listers
+listing
+listing's
+listings
+lists
+lit
+literacy
+literal
+literally
+literalness
+literals
+literariness
+literary
+literate
+literately
+literateness
+literation
+literature
+literature's
+literatures
+lithe
+lithely
+litheness
+litigate
+litigated
+litigates
+litigating
+litigation
+litigator
+litter
+littered
+litterer
+littering
+litters
+little
+littleness
+littler
+littlest
+livable
+livableness
+livably
+live
+lived
+livelier
+liveliest
+livelihood
+liveliness
+lively
+liven
+livened
+liveness
+livening
+liver
+liveried
+livers
+livery
+lives
+livest
+liveth
+living
+livingly
+livingness
+livings
+lizard
+lizard's
+lizards
+load
+loaded
+loader
+loaders
+loading
+loadings
+loads
+loaf
+loafed
+loafer
+loafers
+loafing
+loafs
+loan
+loaned
+loaner
+loaning
+loans
+loath
+loathe
+loathed
+loather
+loathes
+loathing
+loathly
+loathness
+loathsome
+loathsomely
+loathsomeness
+loaves
+lobbied
+lobbies
+lobby
+lobbying
+lobe
+lobe's
+lobed
+lobes
+lobster
+lobster's
+lobsters
+local
+localities
+locality
+locality's
+locally
+locals
+locate
+located
+locater
+locates
+locating
+location
+locations
+locative
+locatives
+locator
+locator's
+locators
+loci
+lock
+locked
+locker
+lockers
+locking
+lockings
+lockout
+lockout's
+lockouts
+locks
+lockup
+lockup's
+lockups
+locomotion
+locomotive
+locomotive's
+locomotively
+locomotives
+locus
+locus's
+locust
+locust's
+locusts
+lodge
+lodged
+lodger
+lodger's
+lodgers
+lodges
+lodging
+lodgings
+loft
+loft's
+lofter
+loftier
+loftiness
+lofts
+lofty
+log
+log's
+logarithm
+logarithm's
+logarithmically
+logarithms
+logged
+logger
+logger's
+loggers
+logging
+logic
+logic's
+logical
+logically
+logicalness
+logicals
+logician
+logician's
+logicians
+logics
+login
+logins
+logistic
+logistics
+logout
+logs
+loin
+loin's
+loins
+loiter
+loitered
+loiterer
+loitering
+loiters
+lone
+lonelier
+loneliest
+loneliness
+lonely
+loneness
+loner
+loners
+lonesome
+lonesomely
+lonesomeness
+long
+longed
+longer
+longest
+longing
+longingly
+longings
+longitude
+longitude's
+longitudes
+longly
+longness
+longs
+longword
+longword's
+longwords
+look
+lookahead
+looked
+looker
+lookers
+looking
+lookout
+lookouts
+looks
+lookup
+lookup's
+lookups
+loom
+loomed
+looming
+looms
+loon
+loop
+looped
+looper
+loophole
+loophole's
+loopholed
+loopholes
+loopholing
+looping
+loops
+loose
+loosed
+loosely
+loosen
+loosened
+loosener
+looseness
+loosening
+loosens
+looser
+looses
+loosest
+loosing
+loot
+looted
+looter
+looting
+loots
+lord
+lord's
+lording
+lordlier
+lordliness
+lordly
+lords
+lordship
+lore
+lorries
+lorry
+lose
+loser
+losers
+loses
+losing
+losings
+loss
+loss's
+losses
+lossier
+lossiest
+lossy
+lost
+lostness
+lot
+lot's
+lots
+lotteries
+lottery
+lotus
+loud
+louden
+loudened
+loudening
+louder
+loudest
+loudly
+loudness
+loudspeaker
+loudspeaker's
+loudspeakers
+lounge
+lounged
+lounger
+loungers
+lounges
+lounging
+lousier
+lousiness
+lousy
+lovable
+lovableness
+lovably
+love
+love's
+loved
+lovelier
+lovelies
+loveliest
+loveliness
+lovely
+lover
+lover's
+lovering
+loverly
+lovers
+loves
+loving
+lovingly
+lovingness
+low
+lower
+lowered
+lowering
+lowers
+lowest
+lowing
+lowland
+lowlander
+lowlands
+lowlier
+lowliest
+lowliness
+lowly
+lowness
+lows
+loyal
+loyally
+loyalties
+loyalty
+loyalty's
+lubricant
+lubricant's
+lubricants
+lubrication
+luck
+lucked
+luckier
+luckiest
+luckily
+luckiness
+luckless
+lucks
+lucky
+ludicrous
+ludicrously
+ludicrousness
+luggage
+lukewarm
+lukewarmly
+lukewarmness
+lull
+lullaby
+lulled
+lulls
+lumber
+lumbered
+lumberer
+lumbering
+lumbers
+luminous
+luminously
+luminousness
+lump
+lumped
+lumpen
+lumper
+lumping
+lumps
+lunar
+lunatic
+lunatics
+lunch
+lunched
+luncheon
+luncheon's
+luncheons
+luncher
+lunches
+lunching
+lung
+lunged
+lunger
+lunging
+lungs
+lurch
+lurched
+lurcher
+lurches
+lurching
+lure
+lured
+lurer
+lures
+luring
+lurk
+lurked
+lurker
+lurkers
+lurking
+lurks
+luscious
+lusciously
+lusciousness
+lust
+lustier
+lustily
+lustiness
+lusting
+lustrous
+lustrously
+lustrousness
+lusts
+lusty
+lute
+lute's
+luted
+lutes
+luting
+luxuriant
+luxuriantly
+luxuries
+luxurious
+luxuriously
+luxuriousness
+luxury
+luxury's
+lying
+lyingly
+lyings
+lymph
+lynch
+lynched
+lyncher
+lynches
+lynx
+lynx's
+lynxes
+lyre
+lyre's
+lyres
+lyric
+lyrics
+ma'am
+macaroni
+macaroni's
+mace
+maced
+macer
+maces
+machine
+machine's
+machined
+machineries
+machinery
+machines
+machining
+macing
+macro
+macro's
+macroeconomics
+macromolecule
+macromolecule's
+macromolecules
+macros
+macroscopic
+mad
+madam
+madams
+madden
+maddened
+maddening
+maddeningly
+madder
+maddest
+made
+mademoiselle
+mademoiselles
+madly
+madman
+madness
+madras
+magazine
+magazine's
+magazined
+magazines
+magazining
+maggot
+maggot's
+maggots
+magic
+magical
+magically
+magician
+magician's
+magicians
+magistrate
+magistrate's
+magistrates
+magnesium
+magnesiums
+magnet
+magnet's
+magnetic
+magnetically
+magnetics
+magnetism
+magnetism's
+magnetisms
+magnets
+magnification
+magnifications
+magnificence
+magnificent
+magnificently
+magnified
+magnifier
+magnifiers
+magnifies
+magnify
+magnifying
+magnitude
+magnitude's
+magnitudes
+mahogany
+maid
+maid's
+maiden
+maidenliness
+maidenly
+maidens
+maids
+mail
+mailable
+mailbox
+mailbox's
+mailboxes
+mailed
+mailer
+mailer's
+mailers
+mailing
+mailings
+mails
+maim
+maimed
+maimedness
+maimer
+maimers
+maiming
+maims
+main
+mainframe
+mainframe's
+mainframes
+mainland
+mainlander
+mainlanders
+mainly
+mains
+mainstay
+maintain
+maintainability
+maintainable
+maintained
+maintainer
+maintainer's
+maintainers
+maintaining
+maintains
+maintenance
+maintenance's
+maintenances
+majestic
+majesties
+majesty
+majesty's
+major
+majored
+majoring
+majorities
+majority
+majority's
+majors
+makable
+make
+makefile
+makefiles
+maker
+makers
+makes
+makeshift
+makeshifts
+makeup
+makeups
+making
+makings
+maladies
+malady
+malady's
+malaria
+male
+male's
+malefactor
+malefactor's
+malefactors
+maleness
+males
+malfunction
+malfunctioned
+malfunctioning
+malfunctions
+malice
+malicious
+maliciously
+maliciousness
+malignant
+malignantly
+mall
+mall's
+mallet
+mallet's
+mallets
+malls
+malnutrition
+malt
+malted
+malting
+malts
+mama
+mamma
+mamma's
+mammal
+mammal's
+mammals
+mammas
+mammoth
+man
+man's
+manage
+manageable
+manageableness
+managed
+management
+management's
+managements
+manager
+manager's
+managerial
+managerially
+managers
+manages
+managing
+mandate
+mandated
+mandates
+mandating
+mandatories
+mandatory
+mandible
+mandolin
+mandolin's
+mandolins
+mane
+mane's
+maned
+manes
+manger
+manger's
+mangers
+mangle
+mangled
+mangler
+mangles
+mangling
+manhood
+maniac
+maniac's
+maniacs
+manicure
+manicured
+manicures
+manicuring
+manifest
+manifestation
+manifestation's
+manifestations
+manifested
+manifesting
+manifestly
+manifestness
+manifests
+manifold
+manifold's
+manifolder
+manifoldly
+manifoldness
+manifolds
+manipulability
+manipulable
+manipulatable
+manipulate
+manipulated
+manipulates
+manipulating
+manipulation
+manipulations
+manipulative
+manipulativeness
+manipulator
+manipulator's
+manipulators
+manipulatory
+mankind
+manlier
+manliest
+manliness
+manly
+manned
+manner
+mannered
+mannerliness
+mannerly
+manners
+manning
+manometer
+manometer's
+manometers
+manor
+manor's
+manors
+manpower
+mans
+mansion
+mansion's
+mansions
+mantel
+mantel's
+mantels
+mantissa
+mantissa's
+mantissas
+mantle
+mantle's
+mantled
+mantles
+mantling
+manual
+manual's
+manually
+manuals
+manufacture
+manufactured
+manufacturer
+manufacturer's
+manufacturers
+manufactures
+manufacturing
+manure
+manured
+manurer
+manurers
+manures
+manuring
+manuscript
+manuscript's
+manuscripts
+many
+map
+map's
+maple
+maple's
+maples
+mappable
+mapped
+mapping
+mapping's
+mappings
+maps
+mar
+marble
+marbled
+marbler
+marbles
+marbling
+march
+marched
+marcher
+marches
+marching
+mare
+mare's
+mares
+margin
+margin's
+marginal
+marginally
+marginals
+margined
+margining
+margins
+marigold
+marigold's
+marigolds
+marijuana
+marijuana's
+marinate
+marinated
+marinates
+marinating
+marine
+mariner
+marines
+maritime
+maritimer
+mark
+markable
+marked
+markedly
+marker
+markers
+market
+marketability
+marketable
+marketed
+marketer
+marketing
+marketings
+marketplace
+marketplace's
+marketplaces
+markets
+marking
+markings
+marks
+marquis
+marquises
+marriage
+marriage's
+marriages
+married
+marries
+marrow
+marrows
+marry
+marrying
+mars
+marsh
+marsh's
+marshal
+marshaled
+marshaler
+marshalers
+marshaling
+marshals
+marshes
+mart
+marten
+martens
+martial
+martially
+marts
+martyr
+martyr's
+martyrdom
+martyrs
+marvel
+marvels
+masculine
+masculinely
+masculineness
+masculinity
+mash
+mashed
+masher
+mashers
+mashes
+mashing
+mashings
+mask
+masked
+masker
+masking
+maskings
+masks
+masochist
+masochist's
+masochists
+mason
+mason's
+masoned
+masoning
+masonry
+masons
+masquerade
+masquerader
+masquerades
+masquerading
+mass
+massacre
+massacred
+massacrer
+massacres
+massacring
+massage
+massaged
+massager
+massages
+massaging
+massed
+masses
+massing
+massinger
+massive
+massively
+massiveness
+mast
+masted
+master
+master's
+mastered
+masterful
+masterfully
+masterfulness
+mastering
+masterings
+masterliness
+masterly
+masterpiece
+masterpiece's
+masterpieces
+masters
+mastery
+masts
+masturbate
+masturbated
+masturbates
+masturbating
+masturbation
+mat
+mat's
+match
+matchable
+matched
+matcher
+matchers
+matches
+matching
+matchings
+matchless
+matchlessly
+matchmaker
+matchmaker's
+matchmakers
+matchmaking
+matchmaking's
+mate
+mate's
+mated
+mater
+material
+materialism
+materialism's
+materially
+materialness
+materials
+maternal
+maternally
+mates
+math
+mathematical
+mathematically
+mathematician
+mathematician's
+mathematicians
+mathematics
+mating
+matings
+matrices
+matriculation
+matrimony
+matrix
+matrixes
+matron
+matronly
+mats
+matted
+matter
+mattered
+mattering
+matters
+mattress
+mattress's
+mattresses
+maturation
+mature
+matured
+maturely
+matureness
+maturer
+matures
+maturing
+maturities
+maturity
+max
+maxim
+maxim's
+maximal
+maximally
+maxims
+maximum
+maximumly
+maximums
+may
+maybe
+mayer
+mayest
+mayhap
+mayhem
+maying
+mayonnaise
+mayor
+mayor's
+mayoral
+mayors
+mays
+maze
+maze's
+mazed
+mazedly
+mazedness
+mazednesses
+mazer
+mazes
+mazing
+me
+mead
+meadow
+meadow's
+meadows
+meads
+meager
+meagerly
+meagerness
+meal
+meal's
+meals
+mean
+meander
+meandered
+meandering
+meanderings
+meanders
+meaner
+meanest
+meaning
+meaning's
+meaningful
+meaningfully
+meaningfulness
+meaningless
+meaninglessly
+meaninglessness
+meanings
+meanly
+meanness
+means
+meant
+meantime
+meanwhile
+measles
+measurable
+measurably
+measure
+measured
+measuredly
+measurement
+measurement's
+measurements
+measurer
+measures
+measuring
+meat
+meat's
+meats
+mechanic
+mechanic's
+mechanical
+mechanically
+mechanicals
+mechanics
+mechanism
+mechanism's
+mechanisms
+med
+medal
+medal's
+medallion
+medallion's
+medallions
+medals
+meddle
+meddled
+meddler
+meddles
+meddling
+media
+median
+median's
+medianly
+medians
+medias
+mediate
+mediated
+mediately
+mediateness
+mediates
+mediating
+mediation
+mediations
+mediative
+medic
+medic's
+medical
+medically
+medicinal
+medicinally
+medicine
+medicine's
+medicines
+medics
+medieval
+medieval's
+medievally
+medievals
+meditate
+meditated
+meditates
+meditating
+meditation
+meditations
+meditative
+meditatively
+meditativeness
+medium
+medium's
+mediums
+meek
+meeker
+meekest
+meekly
+meekness
+meet
+meeter
+meeting
+meetings
+meetly
+meets
+megabit
+megabits
+megabyte
+megabytes
+megaword
+megawords
+melancholy
+meld
+melding
+melds
+mellow
+mellowed
+mellowing
+mellowly
+mellowness
+mellows
+melodies
+melodious
+melodiously
+melodiousness
+melodrama
+melodrama's
+melodramas
+melody
+melody's
+melon
+melon's
+melons
+melt
+melted
+melter
+melting
+meltingly
+melts
+member
+member's
+membered
+members
+membership
+membership's
+memberships
+membrane
+membrane's
+membraned
+membranes
+memo
+memo's
+memoir
+memoirs
+memorability
+memorable
+memorableness
+memoranda
+memorandum
+memorandums
+memorial
+memorially
+memorials
+memories
+memory
+memory's
+memoryless
+memos
+men
+men's
+menace
+menaced
+menaces
+menacing
+menacingly
+menagerie
+menageries
+mend
+mended
+mender
+mending
+mends
+menial
+menially
+menials
+mens
+mensed
+menses
+mensing
+mental
+mentalities
+mentality
+mentally
+mention
+mentionable
+mentioned
+mentioner
+mentioners
+mentioning
+mentions
+mentor
+mentor's
+mentors
+menu
+menu's
+menus
+mer
+mercenaries
+mercenariness
+mercenary
+mercenary's
+merchandise
+merchandised
+merchandiser
+merchandises
+merchandising
+merchant
+merchant's
+merchants
+mercies
+merciful
+mercifully
+mercifulness
+merciless
+mercilessly
+mercilessness
+mercuries
+mercury
+mercy
+mere
+merely
+merest
+merge
+merged
+merger
+mergers
+merges
+merging
+meridian
+meridians
+merit
+merited
+meriting
+meritorious
+meritoriously
+meritoriousness
+merits
+merrier
+merriest
+merrily
+merriment
+merriments
+merriness
+merry
+mesh
+meshed
+meshes
+meshing
+mess
+message
+message's
+messaged
+messages
+messaging
+messed
+messenger
+messenger's
+messengers
+messes
+messiah
+messiahs
+messier
+messiest
+messieurs
+messily
+messiness
+messing
+messy
+met
+meta
+metacircular
+metacircularity
+metal
+metal's
+metalanguage
+metalanguages
+metallic
+metallurgy
+metals
+metamathematical
+metamorphosis
+metaphor
+metaphor's
+metaphorical
+metaphorically
+metaphors
+metaphysical
+metaphysically
+metaphysics
+metavariable
+mete
+meted
+meteor
+meteor's
+meteoric
+meteorology
+meteors
+meter
+meter's
+metered
+metering
+meters
+metes
+method
+method's
+methodical
+methodically
+methodicalness
+methodist
+methodist's
+methodists
+methodological
+methodologically
+methodologies
+methodologists
+methodology
+methodology's
+methods
+meting
+metric
+metric's
+metrical
+metrically
+metrics
+metropolis
+metropolitan
+mets
+mew
+mewed
+mews
+mica
+mice
+microbicidal
+microbicide
+microcode
+microcoded
+microcodes
+microcoding
+microcomputer
+microcomputer's
+microcomputers
+microeconomics
+microfilm
+microfilm's
+microfilmed
+microfilmer
+microfilms
+microinstruction
+microinstruction's
+microinstructions
+microphone
+microphones
+microphoning
+microprocessing
+microprocessor
+microprocessor's
+microprocessors
+microprogram
+microprogram's
+microprogrammed
+microprogramming
+microprograms
+microscope
+microscope's
+microscopes
+microscopic
+microsecond
+microsecond's
+microseconds
+microstore
+microwave
+microwave's
+microwaves
+microword
+microwords
+mid
+midday
+middle
+middled
+middler
+middles
+middling
+middlingly
+middlings
+midnight
+midnightly
+midnights
+midpoint
+midpoint's
+midpoints
+midst
+midsts
+midsummer
+midway
+midways
+midwinter
+midwinterly
+mien
+miens
+mies
+miff
+miffed
+miffing
+miffs
+might
+mightier
+mightiest
+mightily
+mightiness
+mights
+mighty
+migrate
+migrated
+migrates
+migrating
+migration
+migrations
+migrative
+mild
+milden
+milder
+mildest
+mildew
+mildews
+mildly
+mildness
+mile
+mile's
+mileage
+mileages
+miler
+miles
+milestone
+milestone's
+milestones
+militant
+militantly
+militantness
+militants
+militaries
+militarily
+militarism
+militarisms
+military
+militia
+militias
+milk
+milked
+milker
+milkers
+milkier
+milkiness
+milking
+milkmaid
+milkmaid's
+milkmaids
+milks
+milky
+mill
+milled
+miller
+millers
+millet
+milling
+million
+millionaire
+millionaire's
+millionaires
+millioned
+millions
+millionth
+millipede
+millipede's
+millipedes
+millisecond
+milliseconds
+mills
+millstone
+millstone's
+millstones
+mimic
+mimicked
+mimicking
+mimics
+mince
+minced
+mincer
+mincers
+minces
+mincing
+mincingly
+mind
+minded
+mindedness
+minder
+minders
+mindful
+mindfully
+mindfulness
+minding
+mindless
+mindlessly
+mindlessness
+minds
+mine
+mined
+miner
+mineral
+mineral's
+minerals
+miners
+mines
+ming
+mingle
+mingled
+mingles
+mingling
+miniature
+miniature's
+miniatured
+miniatures
+miniaturing
+minicomputer
+minicomputer's
+minicomputers
+minimal
+minimally
+minimum
+minimums
+mining
+minion
+minions
+minister
+minister's
+ministered
+ministering
+ministers
+ministries
+ministry
+ministry's
+mink
+mink's
+minks
+minnow
+minnow's
+minnows
+minor
+minor's
+minored
+minoring
+minorities
+minority
+minority's
+minors
+minstrel
+minstrel's
+minstrels
+mint
+minted
+minter
+minting
+mints
+minus
+minuses
+minute
+minuted
+minutely
+minuteness
+minuter
+minutes
+minutest
+minuting
+miracle
+miracle's
+miracles
+miraculous
+miraculously
+miraculousness
+mire
+mired
+mires
+miring
+mirror
+mirrored
+mirroring
+mirrors
+mirth
+misapplication
+misapplied
+misapplier
+misapplies
+misapply
+misapplying
+misbehaving
+miscalculation
+miscalculation's
+miscalculations
+miscellaneous
+miscellaneously
+miscellaneousness
+mischief
+mischievous
+mischievously
+mischievousness
+miscommunicate
+miscommunicated
+miscommunicates
+miscommunication
+misconception
+misconception's
+misconceptions
+misconstrue
+misconstrued
+misconstrues
+misconstruing
+misdirect
+misdirected
+misdirection
+misdirects
+miser
+miserable
+miserableness
+miserably
+miseries
+miserliness
+miserly
+misers
+misery
+misery's
+misfeature
+misfit
+misfit's
+misfits
+misfortune
+misfortune's
+misfortunes
+misgiving
+misgivingly
+misgivings
+misguide
+misguided
+misguidedly
+misguidedness
+misguider
+misguides
+misguiding
+mishap
+mishap's
+mishaps
+misinform
+misinformation
+misinformed
+misinforming
+misinforms
+misinterpret
+misinterpreted
+misinterpreter
+misinterpreters
+misinterpreting
+misinterprets
+mislead
+misleader
+misleading
+misleadingly
+misleadings
+misleads
+misled
+mismatch
+mismatched
+mismatches
+mismatching
+misnomer
+misnomered
+misperceive
+misperceived
+misperceives
+misplace
+misplaced
+misplaces
+misplacing
+misread
+misreader
+misreading
+misreads
+misrepresentation
+misrepresentation's
+misrepresentations
+miss
+missed
+misses
+missile
+missile's
+missiles
+missing
+mission
+missionaries
+missionary
+missionary's
+missioned
+missioner
+missioning
+missions
+missive
+missives
+misspell
+misspelled
+misspelling
+misspellings
+misspells
+misstate
+misstated
+misstater
+misstates
+misstating
+mist
+mistakable
+mistake
+mistaken
+mistakenly
+mistaker
+mistakes
+mistaking
+mistakingly
+misted
+mister
+mistered
+mistering
+misters
+mistier
+mistiest
+mistiness
+misting
+mistreat
+mistreated
+mistreating
+mistreats
+mistress
+mistressly
+mistrust
+mistrusted
+mistruster
+mistrusting
+mistrusts
+mists
+misty
+mistype
+mistyped
+mistypes
+mistyping
+misunderstand
+misunderstander
+misunderstanders
+misunderstanding
+misunderstanding's
+misunderstandings
+misunderstands
+misunderstood
+misuse
+misused
+misuser
+misuses
+misusing
+mite
+mites
+mitigate
+mitigated
+mitigates
+mitigating
+mitigation
+mitigations
+mitigative
+mitten
+mitten's
+mittens
+mix
+mixed
+mixer
+mixers
+mixes
+mixing
+mixture
+mixture's
+mixtures
+ml
+mnemonic
+mnemonic's
+mnemonically
+mnemonics
+moan
+moaned
+moaning
+moans
+moat
+moat's
+moats
+mob
+mob's
+mobility
+mobs
+moccasin
+moccasin's
+moccasins
+mock
+mocked
+mocker
+mockers
+mockery
+mocking
+mockingly
+mocks
+modal
+modalities
+modality
+modality's
+modally
+mode
+model
+model's
+models
+modem
+modems
+moderate
+moderated
+moderately
+moderateness
+moderates
+moderating
+moderation
+moderations
+moderator
+moderator's
+moderators
+modern
+modernity
+modernly
+modernness
+moderns
+modes
+modest
+modestly
+modesty
+modifiability
+modifiable
+modifiableness
+modification
+modifications
+modified
+modifier
+modifiers
+modifies
+modify
+modifying
+modular
+modularities
+modularity
+modularly
+modulate
+modulated
+modulates
+modulating
+modulation
+modulations
+modulator
+modulator's
+modulators
+module
+module's
+modules
+modulo
+modulus
+modus
+moist
+moisten
+moistened
+moistener
+moistening
+moistly
+moistness
+moisture
+moistures
+molasses
+mold
+molded
+molder
+moldered
+moldering
+molders
+moldier
+moldiness
+molding
+molds
+moldy
+mole
+molecular
+molecularly
+molecule
+molecule's
+molecules
+moles
+molest
+molested
+molester
+molesters
+molesting
+molests
+molten
+mom
+mom's
+moment
+moment's
+momentarily
+momentariness
+momentary
+momently
+momentous
+momentously
+momentousness
+moments
+momentum
+momentums
+moms
+monarch
+monarchies
+monarchs
+monarchy
+monarchy's
+monasteries
+monastery
+monastery's
+monastic
+monetary
+money
+money's
+moneyed
+moneyer
+moneys
+monitor
+monitored
+monitoring
+monitors
+monk
+monk's
+monkey
+monkeyed
+monkeying
+monkeys
+monks
+mono
+mono's
+monochrome
+monochromes
+monograph
+monograph's
+monographes
+monographs
+monolithic
+monopolies
+monopoly
+monopoly's
+monotheism
+monotone
+monotonic
+monotonically
+monotonicity
+monotonous
+monotonously
+monotonousness
+monotony
+monster
+monster's
+monsters
+monstrous
+monstrously
+monstrousness
+month
+month's
+monthlies
+monthly
+months
+monument
+monument's
+monumental
+monumentally
+monuments
+mood
+mood's
+moodier
+moodiness
+moods
+moody
+moon
+mooned
+mooning
+moonlight
+moonlighted
+moonlighter
+moonlighting
+moonlights
+moonlit
+moons
+moonshine
+moonshiner
+moor
+moor's
+moored
+mooring
+moorings
+moors
+moose
+moot
+mooted
+mop
+moped
+moper
+moping
+mops
+moral
+moral's
+morale
+morales
+moralities
+morality
+morally
+morals
+morass
+morasses
+morbid
+morbidly
+morbidness
+more
+mored
+moreover
+mores
+morion
+morn
+morning
+mornings
+morphological
+morphologically
+morphology
+morrow
+morsel
+morsel's
+morsels
+mortal
+mortality
+mortally
+mortals
+mortar
+mortared
+mortaring
+mortars
+mortgage
+mortgage's
+mortgaged
+mortgager
+mortgages
+mortgaging
+mortification
+mortifications
+mortified
+mortifiedly
+mortifier
+mortifies
+mortify
+mortifying
+mosaic
+mosaic's
+mosaics
+mosquito
+mosquitoes
+mosquitos
+moss
+moss's
+mosses
+mossier
+mossy
+most
+mostly
+motel
+motel's
+motels
+moth
+mother
+mother's
+motherboard
+motherboard's
+motherboards
+mothered
+motherer
+motherers
+mothering
+motherliness
+motherly
+mothers
+motif
+motif's
+motifs
+motion
+motioned
+motioner
+motioning
+motionless
+motionlessly
+motionlessness
+motions
+motivate
+motivated
+motivates
+motivating
+motivation
+motivational
+motivationally
+motivations
+motivative
+motive
+motived
+motives
+motiving
+motley
+motor
+motorcar
+motorcar's
+motorcars
+motorcycle
+motorcycle's
+motorcycles
+motored
+motoring
+motorist
+motorist's
+motorists
+motors
+motto
+mottoes
+mottos
+mould
+moulded
+moulder
+mouldering
+moulding
+moulds
+mound
+mounded
+mounds
+mount
+mountain
+mountain's
+mountaineer
+mountaineering
+mountaineers
+mountainous
+mountainously
+mountainousness
+mountains
+mounted
+mounter
+mounting
+mountings
+mounts
+mourn
+mourned
+mourner
+mourners
+mournful
+mournfully
+mournfulness
+mourning
+mourningly
+mourns
+mouse
+mouser
+mouses
+mousing
+mouth
+mouthed
+mouther
+mouthes
+mouthful
+mouthing
+mouths
+movable
+movableness
+move
+moved
+movement
+movement's
+movements
+mover
+movers
+moves
+movie
+movie's
+movies
+moving
+movingly
+movings
+mow
+mowed
+mower
+mowers
+mowing
+mows
+much
+muchness
+muck
+mucked
+mucker
+mucking
+mucks
+mud
+muddied
+muddier
+muddiness
+muddle
+muddled
+muddler
+muddlers
+muddles
+muddling
+muddy
+muddying
+muds
+muff
+muff's
+muffin
+muffin's
+muffins
+muffle
+muffled
+muffler
+mufflers
+muffles
+muffling
+muffs
+mug
+mug's
+mugs
+mulberries
+mulberry
+mulberry's
+mule
+mule's
+mules
+muling
+multicellular
+multicomponent
+multidimensional
+multilevel
+multinational
+multiple
+multiple's
+multiples
+multiplex
+multiplexed
+multiplexer
+multiplexers
+multiplexes
+multiplexing
+multiplexor
+multiplexor's
+multiplexors
+multiplicand
+multiplicand's
+multiplicands
+multiplication
+multiplications
+multiplicative
+multiplicatively
+multiplicatives
+multiplicity
+multiplied
+multiplier
+multipliers
+multiplies
+multiply
+multiplying
+multiprocess
+multiprocessing
+multiprocessor
+multiprocessor's
+multiprocessors
+multiprogram
+multiprogrammed
+multiprogramming
+multiprogrammings
+multistage
+multitasking
+multitude
+multitude's
+multitudes
+multiuser
+multivariate
+mumble
+mumbled
+mumbler
+mumblers
+mumbles
+mumbling
+mumblings
+mummies
+mummy
+mummy's
+munch
+munched
+muncher
+munches
+munching
+mundane
+mundanely
+mundaneness
+municipal
+municipalities
+municipality
+municipality's
+municipally
+munition
+munitions
+mural
+murals
+murder
+murdered
+murderer
+murderers
+murdering
+murderous
+murderously
+murderousness
+murders
+murkier
+murkiness
+murky
+murmur
+murmured
+murmurer
+murmuring
+murmurs
+muscle
+muscled
+muscles
+muscling
+muscular
+muscularly
+muse
+mused
+muser
+muses
+museum
+museum's
+museums
+mushier
+mushiness
+mushroom
+mushroomed
+mushrooming
+mushrooms
+mushy
+music
+musical
+musically
+musicals
+musician
+musicianly
+musicians
+musics
+musing
+musingly
+musings
+musk
+musket
+musket's
+muskets
+muskrat
+muskrat's
+muskrats
+musks
+muslin
+mussel
+mussel's
+mussels
+must
+mustard
+mustards
+muster
+mustered
+mustering
+musters
+mustier
+mustiness
+musts
+musty
+mutability
+mutable
+mutableness
+mutate
+mutated
+mutates
+mutating
+mutation
+mutations
+mutative
+mutator
+mutators
+mute
+muted
+mutedly
+mutely
+muteness
+muter
+mutes
+mutest
+mutilate
+mutilated
+mutilates
+mutilating
+mutilation
+mutilations
+muting
+mutinies
+mutiny
+mutiny's
+mutter
+muttered
+mutterer
+mutterers
+muttering
+mutters
+mutton
+mutual
+mutually
+muzzle
+muzzle's
+muzzled
+muzzler
+muzzles
+muzzling
+my
+myriad
+myrtle
+myself
+mysteries
+mysterious
+mysteriously
+mysteriousness
+mystery
+mystery's
+mystic
+mystic's
+mystical
+mystically
+mysticism
+mysticisms
+mystics
+myth
+myth's
+mythes
+mythical
+mythically
+mythologies
+mythology
+mythology's
+nag
+nag's
+nags
+nail
+nailed
+nailer
+nailing
+nails
+naive
+naively
+naiveness
+naiver
+naivete
+naked
+nakedly
+nakedness
+name
+name's
+nameable
+named
+nameless
+namelessly
+namelessness
+namely
+namer
+namers
+names
+namesake
+namesake's
+namesakes
+naming
+nanosecond
+nanoseconds
+nap
+nap's
+napkin
+napkin's
+napkins
+naps
+narcissistic
+narcissus
+narcissuses
+narcotic
+narcotics
+narrative
+narrative's
+narratively
+narratives
+narrow
+narrowed
+narrower
+narrowest
+narrowing
+narrowingness
+narrowly
+narrowness
+narrows
+nasal
+nasally
+nastier
+nasties
+nastiest
+nastily
+nastiness
+nasty
+nation
+nation's
+national
+nationalist
+nationalist's
+nationalists
+nationalities
+nationality
+nationality's
+nationally
+nationals
+nations
+nationwide
+native
+natively
+nativeness
+natives
+nativity
+natural
+naturalism
+naturalist
+naturally
+naturalness
+naturals
+nature
+nature's
+natured
+natures
+naught
+naught's
+naughtier
+naughtiness
+naughts
+naughty
+naval
+navally
+navies
+navigable
+navigableness
+navigate
+navigated
+navigates
+navigating
+navigation
+navigations
+navigator
+navigator's
+navigators
+navy
+navy's
+nay
+near
+nearby
+neared
+nearer
+nearest
+nearing
+nearly
+nearness
+nears
+neat
+neaten
+neater
+neatest
+neatly
+neatness
+neats
+nebula
+necessaries
+necessarily
+necessary
+necessitate
+necessitated
+necessitates
+necessitating
+necessitation
+necessitations
+necessities
+necessity
+neck
+necked
+necker
+necking
+necklace
+necklace's
+necklaces
+necks
+necktie
+necktie's
+neckties
+need
+needed
+needer
+needful
+needfully
+needfulness
+needier
+neediness
+needing
+needle
+needled
+needler
+needlers
+needles
+needless
+needlessly
+needlessness
+needlework
+needleworker
+needling
+needly
+needn't
+needs
+needy
+negate
+negated
+negater
+negates
+negating
+negation
+negations
+negative
+negatived
+negatively
+negativeness
+negatives
+negativing
+negator
+negators
+neglect
+neglected
+neglecter
+neglecting
+neglects
+negligence
+negligible
+negotiable
+negotiate
+negotiated
+negotiates
+negotiating
+negotiation
+negotiations
+neigh
+neither
+neophyte
+neophytes
+nephew
+nephew's
+nephews
+nerve
+nerve's
+nerved
+nerves
+nerving
+nervous
+nervously
+nervousness
+nest
+nested
+nester
+nesting
+nestle
+nestled
+nestler
+nestles
+nestling
+nests
+net
+net's
+nether
+nets
+netted
+netting
+nettle
+nettled
+nettles
+nettling
+network
+network's
+networked
+networking
+networks
+neural
+neurally
+neurobiology
+neurobiology's
+neurological
+neurologically
+neurologists
+neuron
+neuron's
+neurons
+neutral
+neutralities
+neutrality
+neutrally
+neutralness
+neutrals
+neutrino
+neutrino's
+neutrinos
+never
+nevertheless
+new
+newborn
+newborns
+newcomer
+newcomer's
+newcomers
+newer
+newest
+newline
+newline's
+newlines
+newly
+newness
+news
+newsgroup
+newsgroup's
+newsgroups
+newsletter
+newsletter's
+newsletters
+newsman
+newsmen
+newspaper
+newspaper's
+newspapers
+newswire
+newt
+newts
+next
+nibble
+nibbled
+nibbler
+nibblers
+nibbles
+nibbling
+nice
+nicely
+niceness
+nicer
+nicest
+niceties
+nicety
+niche
+niches
+niching
+nick
+nicked
+nickel
+nickel's
+nickels
+nicker
+nickered
+nickering
+nicking
+nickname
+nicknamed
+nicknamer
+nicknames
+nicks
+nicotine
+niece
+niece's
+nieces
+niftier
+nifties
+nifty
+nigh
+night
+night's
+nighted
+nighters
+nightfall
+nightgown
+nightingale
+nightingale's
+nightingales
+nightly
+nightmare
+nightmare's
+nightmares
+nights
+nil
+nilly
+nimble
+nimbleness
+nimbler
+nimblest
+nimbly
+nine
+nines
+nineteen
+nineteens
+nineteenth
+nineties
+ninetieth
+ninety
+ninth
+nip
+nips
+nitrogen
+nix
+nixed
+nixer
+nixes
+nixing
+no
+nobilities
+nobility
+noble
+nobleman
+nobleness
+nobler
+nobles
+noblest
+nobly
+nobodies
+nobody
+nobody's
+nocturnal
+nocturnally
+nod
+nod's
+nodded
+nodding
+node
+node's
+nodes
+nods
+noise
+noised
+noiseless
+noiselessly
+noises
+noisier
+noisily
+noisiness
+noising
+noisy
+nomenclature
+nomenclatures
+nominal
+nominally
+nominate
+nominated
+nominates
+nominating
+nomination
+nomination's
+nominations
+nominative
+nominatively
+non
+nonblocking
+nonconservative
+noncyclic
+nondecreasing
+nondescript
+nondescriptly
+nondestructively
+nondeterminacy
+nondeterminate
+nondeterminately
+nondeterminism
+nondeterministic
+nondeterministically
+nondisclosure
+nondisclosures
+none
+nonempty
+nones
+nonetheless
+nonexistence
+nonexistent
+nonextensible
+nonfunctional
+noninteracting
+noninterference
+nonintuitive
+nonlinear
+nonlinearities
+nonlinearity
+nonlinearity's
+nonlinearly
+nonlocal
+nonnegative
+nonorthogonal
+nonorthogonality
+nonperishable
+nonprocedural
+nonprocedurally
+nonprogrammable
+nonprogrammer
+nonsense
+nonsensical
+nonsensically
+nonsensicalness
+nonspecialist
+nonspecialist's
+nonspecialists
+nonstandard
+nontechnical
+nontechnically
+nonterminal
+nonterminal's
+nonterminals
+nonterminating
+nontermination
+nontrivial
+nonuniform
+nonzero
+nook
+nook's
+nooks
+noon
+noonday
+nooning
+noons
+noontide
+nope
+nor
+norm
+norm's
+normal
+normalcy
+normality
+normally
+normals
+normed
+norms
+north
+north's
+northeast
+northeaster
+northeasterly
+northeastern
+norther
+northerly
+northern
+northerner
+northerners
+northernly
+northers
+northing
+northward
+northwards
+northwest
+northwester
+northwesterly
+northwestern
+nose
+nosed
+noses
+nosing
+nostril
+nostril's
+nostrils
+not
+notable
+notableness
+notables
+notably
+notation
+notation's
+notational
+notationally
+notations
+notch
+notched
+notches
+notching
+note
+notebook
+notebook's
+notebooks
+noted
+notedly
+notedness
+noter
+notes
+noteworthiness
+noteworthy
+nothing
+nothingness
+nothings
+notice
+noticeable
+noticeably
+noticed
+notices
+noticing
+notification
+notifications
+notified
+notifier
+notifiers
+notifies
+notify
+notifying
+noting
+notion
+notions
+notorious
+notoriously
+notoriousness
+notwithstanding
+noun
+noun's
+nouns
+nourish
+nourished
+nourisher
+nourishes
+nourishing
+nourishment
+novel
+novel's
+novelist
+novelist's
+novelists
+novels
+novelties
+novelty
+novelty's
+novice
+novice's
+novices
+now
+nowadays
+nowhere
+nowheres
+nows
+nroff
+nroff's
+nuances
+nuclear
+nucleotide
+nucleotide's
+nucleotides
+nucleus
+nucleuses
+nuisance
+nuisance's
+nuisances
+null
+nulled
+nullification
+nullified
+nullifier
+nullifiers
+nullifies
+nullify
+nullifying
+nulls
+numb
+numbed
+number
+numbered
+numberer
+numbering
+numberless
+numbers
+numbing
+numbingly
+numbly
+numbness
+numbs
+numeral
+numeral's
+numerally
+numerals
+numerator
+numerator's
+numerators
+numeric
+numerical
+numerically
+numerics
+numerous
+numerously
+numerousness
+nun
+nun's
+nuns
+nuptial
+nuptials
+nurse
+nurse's
+nursed
+nurser
+nurseries
+nursery
+nursery's
+nurses
+nursing
+nurture
+nurtured
+nurturer
+nurtures
+nurturing
+nut
+nut's
+nutrition
+nutrition's
+nuts
+nymph
+nymphs
+o'clock
+oak
+oaken
+oaks
+oar
+oar's
+oared
+oaring
+oars
+oasis
+oat
+oaten
+oater
+oath
+oaths
+oatmeal
+oats
+obedience
+obediences
+obedient
+obediently
+obey
+obeyed
+obeyer
+obeying
+obeys
+obfuscate
+obfuscated
+obfuscater
+obfuscates
+obfuscating
+obfuscation
+obfuscations
+object
+object's
+objected
+objecting
+objection
+objection's
+objectionable
+objectionableness
+objections
+objective
+objectively
+objectiveness
+objectives
+objector
+objector's
+objectors
+objects
+oblate
+oblately
+oblateness
+oblation
+oblations
+obligate
+obligated
+obligately
+obligates
+obligating
+obligation
+obligation's
+obligations
+obligatory
+oblige
+obliged
+obliger
+obliges
+obliging
+obligingly
+obligingness
+oblique
+obliquely
+obliqueness
+obliterate
+obliterated
+obliterates
+obliterating
+obliteration
+obliterations
+obliterative
+obliteratively
+oblivion
+oblivions
+oblivious
+obliviously
+obliviousness
+oblong
+oblongly
+oblongness
+obscene
+obscenely
+obscure
+obscured
+obscurely
+obscureness
+obscurer
+obscures
+obscuring
+obscurities
+obscurity
+observable
+observance
+observance's
+observances
+observant
+observantly
+observation
+observation's
+observations
+observatories
+observatory
+observe
+observed
+observer
+observers
+observes
+observing
+observingly
+obsession
+obsession's
+obsessions
+obsolescence
+obsolete
+obsoleted
+obsoletely
+obsoleteness
+obsoletes
+obsoleting
+obstacle
+obstacle's
+obstacles
+obstinacy
+obstinate
+obstinately
+obstinateness
+obstruct
+obstructed
+obstructer
+obstructing
+obstruction
+obstruction's
+obstructionist
+obstructions
+obstructive
+obstructively
+obstructiveness
+obstructs
+obtain
+obtainable
+obtainably
+obtained
+obtainer
+obtaining
+obtains
+obviate
+obviated
+obviates
+obviating
+obviation
+obviations
+obvious
+obviously
+obviousness
+occasion
+occasional
+occasionally
+occasioned
+occasioning
+occasionings
+occasions
+occlude
+occluded
+occludes
+occluding
+occlusion
+occlusion's
+occlusions
+occupancies
+occupancy
+occupant
+occupant's
+occupants
+occupation
+occupation's
+occupational
+occupationally
+occupations
+occupied
+occupier
+occupiers
+occupies
+occupy
+occupying
+occur
+occurred
+occurrence
+occurrence's
+occurrences
+occurring
+occurs
+ocean
+ocean's
+oceans
+octal
+octals
+octave
+octaves
+octopus
+odd
+odder
+oddest
+oddities
+oddity
+oddity's
+oddly
+oddness
+odds
+ode
+ode's
+oded
+oder
+odes
+odious
+odiously
+odiousness
+odorous
+odorously
+odorousness
+of
+off
+offend
+offended
+offender
+offenders
+offending
+offends
+offensive
+offensively
+offensiveness
+offensives
+offer
+offered
+offerer
+offerers
+offering
+offerings
+offers
+office
+office's
+officer
+officer's
+officered
+officers
+offices
+official
+official's
+officially
+officials
+officiate
+officiated
+officiates
+officiating
+officiation
+officiations
+officio
+officious
+officiously
+officiousness
+offing
+offs
+offset
+offset's
+offsets
+offspring
+offsprings
+oft
+often
+oftener
+oftentimes
+oh
+oil
+oilcloth
+oiled
+oiler
+oilers
+oilier
+oiliest
+oiliness
+oiling
+oils
+oily
+ointment
+ointments
+okay
+okay's
+okays
+old
+olden
+older
+oldest
+oldness
+olive
+olive's
+oliver
+olives
+omen
+omen's
+omens
+ominous
+ominously
+ominousness
+omission
+omission's
+omissions
+omit
+omits
+omitted
+omitting
+omnipresent
+omnipresently
+omniscient
+omnisciently
+omnivore
+on
+onanism
+once
+oncer
+one
+one's
+oneness
+oner
+onerous
+onerously
+onerousness
+ones
+oneself
+ongoing
+onion
+onions
+online
+onliness
+only
+ons
+onset
+onset's
+onsets
+onto
+onward
+onwards
+oops
+ooze
+oozed
+oozes
+oozing
+opacities
+opacity
+opal
+opal's
+opals
+opaque
+opaquely
+opaqueness
+opcode
+opcode's
+opcodes
+open
+opened
+opener
+openers
+openest
+opening
+opening's
+openings
+openly
+openness
+opens
+opera
+opera's
+operable
+operand
+operand's
+operandi
+operands
+operas
+operate
+operated
+operates
+operating
+operation
+operational
+operationally
+operations
+operative
+operatively
+operativeness
+operatives
+operator
+operator's
+operators
+opiate
+opiates
+opinion
+opinion's
+opinions
+opium
+opponent
+opponent's
+opponents
+opportune
+opportunely
+opportunism
+opportunistic
+opportunistically
+opportunities
+opportunity
+opportunity's
+oppose
+opposed
+opposer
+opposes
+opposing
+opposite
+oppositely
+oppositeness
+opposites
+opposition
+oppositions
+oppress
+oppressed
+oppresses
+oppressing
+oppression
+oppressive
+oppressively
+oppressiveness
+oppressor
+oppressor's
+oppressors
+opt
+opted
+optic
+optical
+optically
+optics
+optimal
+optimality
+optimally
+optimism
+optimistic
+optimistically
+optimum
+opting
+option
+option's
+optional
+optionally
+options
+opts
+or
+or's
+oracle
+oracle's
+oracles
+oral
+orally
+orals
+orange
+orange's
+oranges
+oration
+oration's
+orations
+orator
+orator's
+oratories
+orators
+oratory
+oratory's
+orb
+orbit
+orbital
+orbitally
+orbitals
+orbited
+orbiter
+orbiters
+orbiting
+orbits
+orchard
+orchard's
+orchards
+orchestra
+orchestra's
+orchestras
+orchid
+orchid's
+orchids
+ordain
+ordained
+ordainer
+ordaining
+ordains
+ordeal
+ordeals
+order
+ordered
+orderer
+ordering
+orderings
+orderlies
+orderliness
+orderly
+orders
+ordinal
+ordinance
+ordinance's
+ordinances
+ordinaries
+ordinarily
+ordinariness
+ordinary
+ordinate
+ordinated
+ordinates
+ordinating
+ordination
+ordinations
+ore
+ore's
+ores
+organ
+organ's
+organic
+organics
+organism
+organism's
+organisms
+organist
+organist's
+organists
+organs
+orgies
+orgy
+orgy's
+orient
+orientation
+orientation's
+orientations
+oriented
+orienting
+orients
+orifice
+orifice's
+orifices
+origin
+origin's
+original
+originality
+originally
+originals
+originate
+originated
+originates
+originating
+origination
+originations
+originative
+originatively
+originator
+originator's
+originators
+origins
+orion
+orly
+ornament
+ornamental
+ornamentally
+ornamentation
+ornamentations
+ornamented
+ornamenting
+ornaments
+orphan
+orphaned
+orphaning
+orphans
+orthodox
+orthodoxes
+orthodoxly
+orthogonal
+orthogonality
+orthogonally
+oscillate
+oscillated
+oscillates
+oscillating
+oscillation
+oscillation's
+oscillations
+oscillator
+oscillator's
+oscillators
+oscillatory
+oscilloscope
+oscilloscope's
+oscilloscopes
+ostrich
+ostrich's
+ostriches
+other
+other's
+otherness
+others
+otherwise
+otter
+otter's
+otters
+ought
+oughts
+ounce
+ounces
+our
+ours
+ourself
+ourselves
+out
+outbreak
+outbreak's
+outbreaks
+outburst
+outburst's
+outbursts
+outcast
+outcast's
+outcasts
+outcome
+outcome's
+outcomes
+outcries
+outcry
+outdoor
+outdoors
+outed
+outer
+outermost
+outfit
+outfit's
+outfits
+outgoing
+outgoingness
+outgoings
+outgrew
+outgrow
+outgrowing
+outgrown
+outgrows
+outgrowth
+outing
+outing's
+outings
+outlast
+outlasts
+outlaw
+outlawed
+outlawing
+outlaws
+outlay
+outlay's
+outlays
+outlet
+outlet's
+outlets
+outline
+outlined
+outlines
+outlining
+outlive
+outlived
+outlives
+outliving
+outlook
+outness
+outperform
+outperformed
+outperforming
+outperforms
+outpost
+outpost's
+outposts
+output
+output's
+outputs
+outputting
+outrage
+outraged
+outrageous
+outrageously
+outrageousness
+outrages
+outraging
+outright
+outrightly
+outrun
+outruns
+outs
+outset
+outside
+outsider
+outsider's
+outsiderness
+outsiders
+outskirts
+outstanding
+outstandingly
+outstretched
+outstrip
+outstripped
+outstripping
+outstrips
+outvote
+outvoted
+outvotes
+outvoting
+outward
+outwardly
+outwardness
+outwards
+outweigh
+outweighed
+outweighing
+outweighs
+outwit
+outwits
+outwitted
+outwitting
+oval
+oval's
+ovally
+ovalness
+ovals
+ovaries
+ovary
+ovary's
+oven
+oven's
+ovens
+over
+overall
+overall's
+overalls
+overblown
+overboard
+overcame
+overcast
+overcasting
+overcoat
+overcoat's
+overcoating
+overcoats
+overcome
+overcomer
+overcomes
+overcoming
+overcrowd
+overcrowded
+overcrowding
+overcrowds
+overdone
+overdose
+overdose's
+overdosed
+overdoses
+overdosing
+overdraft
+overdraft's
+overdrafts
+overdraw
+overdrawing
+overdrawn
+overdraws
+overdrew
+overdue
+overemphasis
+overestimate
+overestimated
+overestimates
+overestimating
+overestimation
+overestimations
+overflow
+overflowed
+overflowing
+overflows
+overhang
+overhanging
+overhangs
+overhaul
+overhauled
+overhauler
+overhauling
+overhaulings
+overhauls
+overhead
+overheads
+overhear
+overheard
+overhearer
+overhearing
+overhears
+overing
+overjoy
+overjoyed
+overkill
+overkill's
+overlaid
+overland
+overlap
+overlap's
+overlapped
+overlapping
+overlaps
+overlay
+overlaying
+overlays
+overload
+overloaded
+overloading
+overloads
+overlook
+overlooked
+overlooking
+overlooks
+overly
+overlying
+overnight
+overnighter
+overnighters
+overnights
+overpower
+overpowered
+overpowering
+overpoweringly
+overpowers
+overprint
+overprinted
+overprinting
+overprints
+overproduction
+overridden
+override
+overrider
+overrides
+overriding
+overrode
+overrule
+overruled
+overrules
+overruling
+overrun
+overruns
+overs
+overseas
+oversee
+overseeing
+overseer
+overseers
+oversees
+overshadow
+overshadowed
+overshadowing
+overshadows
+overshoot
+overshooting
+overshoots
+overshot
+oversight
+oversight's
+oversights
+oversimplification
+oversimplifications
+oversimplified
+oversimplifies
+oversimplify
+oversimplifying
+overstate
+overstated
+overstatement
+overstatement's
+overstatements
+overstates
+overstating
+overstocks
+overt
+overtake
+overtaken
+overtaker
+overtakers
+overtakes
+overtaking
+overthrew
+overthrow
+overthrowing
+overthrown
+overthrows
+overtime
+overtly
+overtness
+overtone
+overtone's
+overtones
+overtook
+overture
+overture's
+overtures
+overturn
+overturned
+overturning
+overturns
+overuse
+overview
+overview's
+overviews
+overweight
+overwhelm
+overwhelmed
+overwhelming
+overwhelmingly
+overwhelms
+overwork
+overworked
+overworking
+overworks
+overwrite
+overwrites
+overwriting
+overwritten
+overwrote
+overzealous
+overzealousness
+ovum
+owe
+owed
+owes
+owing
+owl
+owl's
+owler
+owls
+own
+owned
+owner
+owner's
+owners
+ownership
+ownerships
+owning
+owns
+ox
+oxen
+oxidation
+oxide
+oxide's
+oxides
+oxygen
+oxygens
+oyster
+oyster's
+oystering
+oysters
+pa
+pace
+pace's
+paced
+pacer
+pacers
+paces
+pacific
+pacification
+pacifications
+pacified
+pacifier
+pacifies
+pacify
+pacifying
+pacing
+pack
+package
+packaged
+packager
+packagers
+packages
+packaging
+packagings
+packed
+packer
+packers
+packet
+packet's
+packeted
+packeting
+packets
+packing
+packs
+pact
+pact's
+pacts
+pad
+pad's
+padded
+paddies
+padding
+paddings
+paddle
+paddled
+paddler
+paddles
+paddling
+paddy
+pads
+pagan
+pagan's
+pagans
+page
+page's
+pageant
+pageant's
+pageants
+paged
+pager
+pager's
+pagers
+pages
+paginate
+paginated
+paginates
+paginating
+pagination
+paginations
+paging
+paid
+pail
+pail's
+pails
+pain
+pained
+painful
+painfully
+painfulness
+paining
+painless
+painlessly
+painlessness
+pains
+painstaking
+painstakingly
+paint
+painted
+painter
+painterliness
+painterly
+painters
+painting
+paintings
+paints
+pair
+paired
+pairing
+pairings
+pairs
+pairwise
+pal
+pal's
+palace
+palace's
+palaces
+palate
+palate's
+palates
+pale
+paled
+palely
+paleness
+paler
+pales
+palest
+palfrey
+paling
+pall
+palliate
+palliation
+palliative
+palliatively
+palliatives
+pallid
+pallidly
+pallidness
+palling
+pally
+palm
+palmed
+palmer
+palming
+palms
+pals
+pamphlet
+pamphlet's
+pamphlets
+pan
+pan's
+panacea
+panacea's
+panaceas
+pancake
+pancake's
+pancaked
+pancakes
+pancaking
+pancreas
+panda
+panda's
+pandas
+pandemonium
+pander
+pandered
+panderer
+pandering
+panders
+pane
+pane's
+panel
+panelist
+panelist's
+panelists
+panels
+panes
+pang
+pang's
+pangs
+panic
+panic's
+panics
+panned
+panning
+pans
+pansies
+pansy
+pansy's
+pant
+panted
+panther
+panther's
+panthers
+panties
+panting
+pantries
+pantry
+pantry's
+pants
+panty
+papa
+papal
+papally
+paper
+paper's
+paperback
+paperback's
+paperbacks
+papered
+paperer
+paperers
+papering
+paperings
+papers
+paperwork
+paprika
+par
+parachute
+parachute's
+parachuted
+parachuter
+parachutes
+parachuting
+parade
+paraded
+parader
+parades
+paradigm
+paradigm's
+paradigms
+parading
+paradise
+paradox
+paradox's
+paradoxes
+paradoxical
+paradoxically
+paradoxicalness
+paraffin
+paraffins
+paragon
+paragon's
+paragons
+paragraph
+paragraphed
+paragrapher
+paragraphing
+paragraphs
+parallax
+parallax's
+parallel
+parallelism
+parallelogram
+parallelogram's
+parallelograms
+parallels
+paralysis
+parameter
+parameter's
+parameterless
+parameters
+parametric
+paramilitary
+paramount
+paranoia
+paranoid
+parapet
+parapet's
+parapeted
+parapets
+paraphrase
+paraphrased
+paraphraser
+paraphrases
+paraphrasing
+parasite
+parasite's
+parasites
+parasitic
+parasitics
+parcel
+parcels
+parch
+parched
+parchment
+pardon
+pardonable
+pardonableness
+pardonably
+pardoned
+pardoner
+pardoners
+pardoning
+pardons
+pare
+parent
+parent's
+parentage
+parental
+parentally
+parentheses
+parenthesis
+parenthetical
+parenthetically
+parenthood
+parenting
+parents
+parer
+pares
+paring
+parings
+parish
+parish's
+parishes
+parities
+parity
+park
+parked
+parker
+parkers
+parking
+parks
+parliament
+parliament's
+parliamentary
+parliaments
+parole
+paroled
+paroles
+paroling
+parried
+parrot
+parroting
+parrots
+parry
+parrying
+pars
+parse
+parsed
+parser
+parser's
+parsers
+parses
+parsimony
+parsing
+parsings
+parsley
+parson
+parson's
+parsons
+part
+partake
+partaker
+partakes
+partaking
+parted
+parter
+parters
+partial
+partiality
+partially
+partials
+participant
+participant's
+participants
+participate
+participated
+participates
+participating
+participation
+participations
+participative
+participatory
+particle
+particle's
+particles
+particular
+particularly
+particulars
+partied
+parties
+parting
+partings
+partisan
+partisan's
+partisans
+partition
+partitioned
+partitioner
+partitioning
+partitions
+partly
+partner
+partner's
+partnered
+partnering
+partners
+partnership
+partnerships
+partridge
+partridge's
+partridges
+parts
+party
+party's
+partying
+pas
+pass
+passage
+passage's
+passaged
+passages
+passageway
+passaging
+passe
+passed
+passenger
+passenger's
+passengerly
+passengers
+passer
+passers
+passes
+passing
+passion
+passionate
+passionately
+passionateness
+passions
+passive
+passively
+passiveness
+passives
+passivity
+passport
+passport's
+passports
+password
+password's
+passworded
+passwords
+past
+past's
+paste
+pasted
+pastes
+pastime
+pastime's
+pastimes
+pasting
+pastness
+pastor
+pastor's
+pastoral
+pastorally
+pastoralness
+pastors
+pastries
+pastry
+pasts
+pasture
+pasture's
+pastured
+pasturer
+pastures
+pasturing
+pat
+pat's
+patch
+patched
+patcher
+patches
+patching
+patchwork
+patchworker
+patchworkers
+pated
+paten
+patent
+patentable
+patented
+patenter
+patenters
+patenting
+patently
+patents
+pater
+paternal
+paternally
+path
+pathetic
+pathname
+pathname's
+pathnames
+pathological
+pathologically
+pathologies
+pathologist
+pathologist's
+pathologists
+pathology
+pathos
+paths
+pathway
+pathway's
+pathways
+patience
+patient
+patient's
+patiently
+patients
+patriarch
+patriarchs
+patrician
+patrician's
+patricians
+patriot
+patriot's
+patriotic
+patriotism
+patriots
+patrol
+patrol's
+patrols
+patron
+patron's
+patronage
+patronly
+patrons
+pats
+patter
+pattered
+patterer
+pattering
+patterings
+pattern
+patterned
+patterning
+patterns
+patters
+patties
+patty
+patty's
+paucity
+pause
+paused
+pauses
+pausing
+pave
+paved
+pavement
+pavement's
+pavements
+paver
+paves
+pavilion
+pavilion's
+pavilions
+paving
+paw
+pawed
+pawing
+pawn
+pawn's
+pawned
+pawner
+pawning
+pawns
+paws
+pay
+payable
+paycheck
+paycheck's
+paychecks
+payed
+payer
+payer's
+payers
+paying
+payment
+payment's
+payments
+payoff
+payoff's
+payoffs
+payroll
+payrolls
+pays
+pea
+pea's
+peace
+peaceable
+peaceableness
+peaceful
+peacefully
+peacefulness
+peaces
+peach
+peach's
+peaches
+peacock
+peacock's
+peacocks
+peak
+peaked
+peakedness
+peaking
+peaks
+peal
+pealed
+pealing
+peals
+peanut
+peanut's
+peanuts
+pear
+pearl
+pearl's
+pearler
+pearlier
+pearls
+pearly
+pears
+peas
+peasant
+peasant's
+peasantry
+peasants
+peat
+pebble
+pebble's
+pebbled
+pebbles
+pebbling
+peck
+pecked
+pecker
+pecking
+pecks
+peculiar
+peculiarities
+peculiarity
+peculiarity's
+peculiarly
+peculiars
+pedagogic
+pedagogical
+pedagogically
+pedagogics
+pedantic
+peddler
+peddler's
+peddlers
+pedestal
+pedestals
+pedestrian
+pedestrian's
+pedestrians
+pediatric
+pediatrics
+peek
+peeked
+peeking
+peeks
+peel
+peeled
+peeler
+peeler's
+peeling
+peels
+peep
+peeped
+peeper
+peepers
+peeping
+peeps
+peer
+peered
+peering
+peerless
+peerlessly
+peerlessness
+peers
+peeve
+peeve's
+peeved
+peevers
+peeves
+peeving
+peg
+peg's
+pegs
+pellet
+pellet's
+pelleted
+pelleting
+pellets
+pelt
+pelter
+pelting
+pelts
+pen
+penalties
+penalty
+penalty's
+penance
+penanced
+penances
+penancing
+pence
+pencil
+pencils
+pend
+pended
+pending
+pends
+pendulum
+pendulum's
+pendulums
+penetrate
+penetrated
+penetrates
+penetrating
+penetratingly
+penetration
+penetrations
+penetrative
+penetratively
+penetrativeness
+penetrator
+penetrator's
+penetrators
+penguin
+penguin's
+penguins
+peninsula
+peninsula's
+peninsulas
+penitent
+penitentiary
+penitently
+penned
+pennies
+penniless
+penning
+penny
+penny's
+pens
+pension
+pensioned
+pensioner
+pensioners
+pensioning
+pensions
+pensive
+pensively
+pensiveness
+pent
+pentagon
+pentagon's
+pentagons
+penthouse
+penthouse's
+penthouses
+people
+people's
+peopled
+peoples
+peopling
+pep
+pepper
+peppercorn
+peppercorn's
+peppercorns
+peppered
+pepperer
+peppering
+peppers
+per
+perceivable
+perceivably
+perceive
+perceived
+perceiver
+perceivers
+perceives
+perceiving
+percent
+percentage
+percentages
+percentile
+percentiles
+percents
+perceptible
+perceptibly
+perception
+perceptions
+perceptive
+perceptively
+perceptiveness
+perceptual
+perceptually
+perch
+perchance
+perched
+perches
+perching
+percolate
+percolated
+percolates
+percolating
+percolation
+percutaneous
+percutaneously
+peremptoriness
+peremptory
+perennial
+perennially
+perennials
+perfect
+perfected
+perfecter
+perfecting
+perfection
+perfectionist
+perfectionist's
+perfectionists
+perfections
+perfective
+perfectively
+perfectiveness
+perfectly
+perfectness
+perfects
+perforce
+perform
+performance
+performance's
+performances
+performed
+performer
+performers
+performing
+performs
+perfume
+perfumed
+perfumer
+perfumes
+perfuming
+perhaps
+peril
+peril's
+perilous
+perilously
+perilousness
+perils
+period
+period's
+periodic
+periodical
+periodically
+periodicals
+periods
+peripheral
+peripherally
+peripherals
+peripheries
+periphery
+periphery's
+perish
+perishable
+perishable's
+perishables
+perished
+perisher
+perishers
+perishes
+perishing
+perishingly
+permanence
+permanent
+permanently
+permanentness
+permanents
+permeate
+permeated
+permeates
+permeating
+permeation
+permeations
+permeative
+permissibility
+permissible
+permissibleness
+permissibly
+permission
+permissions
+permissive
+permissively
+permissiveness
+permit
+permit's
+permits
+permitted
+permitting
+permutation
+permutation's
+permutations
+permute
+permuted
+permutes
+permuting
+perpendicular
+perpendicularly
+perpendiculars
+perpetrate
+perpetrated
+perpetrates
+perpetrating
+perpetration
+perpetrations
+perpetrator
+perpetrator's
+perpetrators
+perpetual
+perpetually
+perpetuate
+perpetuated
+perpetuates
+perpetuating
+perpetuation
+perplex
+perplexed
+perplexedly
+perplexes
+perplexing
+perplexities
+perplexity
+persecute
+persecuted
+persecutes
+persecuting
+persecution
+persecutive
+persecutor
+persecutor's
+persecutors
+perseverance
+persevere
+persevered
+perseveres
+persevering
+persist
+persisted
+persistence
+persistent
+persistently
+persister
+persisting
+persists
+person
+person's
+personable
+personableness
+personage
+personage's
+personages
+personal
+personalities
+personality
+personality's
+personally
+personals
+personification
+personifications
+personified
+personifier
+personifies
+personify
+personifying
+personnel
+persons
+perspective
+perspective's
+perspectively
+perspectives
+perspicuous
+perspicuously
+perspicuousness
+perspiration
+perspirations
+persuadable
+persuade
+persuaded
+persuader
+persuaders
+persuades
+persuading
+persuasion
+persuasion's
+persuasions
+persuasive
+persuasively
+persuasiveness
+pertain
+pertained
+pertaining
+pertains
+pertinent
+pertinently
+perturb
+perturbation
+perturbation's
+perturbations
+perturbed
+perturbing
+perusal
+peruse
+perused
+peruser
+perusers
+peruses
+perusing
+pervade
+pervaded
+pervades
+pervading
+pervasive
+pervasively
+pervasiveness
+pervert
+perverted
+pervertedly
+pervertedness
+perverter
+perverting
+perverts
+pessimistic
+pest
+pester
+pestered
+pestering
+pesters
+pestilence
+pestilences
+pests
+pet
+petal
+petal's
+petals
+peter
+petered
+peters
+petition
+petitioned
+petitioner
+petitioning
+petitions
+petroleum
+pets
+petted
+petter
+petter's
+petters
+petticoat
+petticoat's
+petticoated
+petticoats
+pettier
+pettiest
+pettiness
+pettinesses
+petting
+petty
+pew
+pew's
+pews
+pewter
+pewterer
+phantom
+phantom's
+phantoms
+phase
+phased
+phaser
+phasers
+phases
+phasing
+pheasant
+pheasant's
+pheasants
+phenomena
+phenomenal
+phenomenally
+phenomenological
+phenomenologically
+phenomenologies
+phenomenology
+phenomenon
+philosopher
+philosopher's
+philosophers
+philosophic
+philosophical
+philosophically
+philosophies
+philosophy
+philosophy's
+phone
+phone's
+phoned
+phoneme
+phoneme's
+phonemes
+phonemic
+phonemics
+phones
+phonetic
+phonetics
+phoning
+phonograph
+phonographer
+phonographs
+phosphate
+phosphate's
+phosphates
+phosphoric
+photo
+photo's
+photocopied
+photocopier
+photocopies
+photocopy
+photocopying
+photograph
+photographed
+photographer
+photographers
+photographic
+photographing
+photographs
+photography
+photos
+phrase
+phrased
+phrases
+phrasing
+phrasings
+phyla
+phylum
+physic
+physical
+physically
+physicalness
+physicals
+physician
+physician's
+physicians
+physicist
+physicist's
+physicists
+physics
+physiological
+physiologically
+physiology
+physique
+physiqued
+pi
+piano
+piano's
+pianos
+piazza
+piazza's
+piazzas
+picayune
+pick
+picked
+picker
+pickering
+pickers
+picket
+picketed
+picketer
+picketers
+picketing
+pickets
+picking
+pickings
+pickle
+pickled
+pickles
+pickling
+picks
+pickup
+pickup's
+pickups
+picnic
+picnic's
+picnics
+pictorial
+pictorially
+pictorialness
+picture
+pictured
+pictures
+picturesque
+picturesquely
+picturesqueness
+picturing
+pie
+piece
+pieced
+piecemeal
+piecer
+pieces
+piecewise
+piecing
+pied
+pier
+pierce
+pierced
+pierces
+piercing
+piercingly
+piers
+pies
+pieties
+piety
+pig
+pig's
+pigeon
+pigeon's
+pigeons
+pigment
+pigmented
+pigments
+pigs
+pike
+pike's
+piked
+piker
+pikes
+piking
+pile
+piled
+pilers
+piles
+pilferage
+pilgrim
+pilgrim's
+pilgrimage
+pilgrimage's
+pilgrimages
+pilgrims
+piling
+pilings
+pill
+pill's
+pillage
+pillaged
+pillager
+pillages
+pillaging
+pillar
+pillared
+pillars
+pillow
+pillow's
+pillows
+pills
+pilot
+pilot's
+piloted
+piloting
+pilots
+pin
+pin's
+pinch
+pinched
+pincher
+pinches
+pinching
+pine
+pineapple
+pineapple's
+pineapples
+pined
+pines
+ping
+pinger
+pinging
+pining
+pinion
+pinioned
+pinions
+pink
+pinked
+pinker
+pinkest
+pinking
+pinkly
+pinkness
+pinks
+pinnacle
+pinnacle's
+pinnacled
+pinnacles
+pinnacling
+pinned
+pinning
+pinnings
+pinpoint
+pinpointed
+pinpointing
+pinpoints
+pins
+pint
+pint's
+pinter
+pints
+pioneer
+pioneered
+pioneering
+pioneers
+pious
+piously
+piousness
+pipe
+piped
+pipeline
+pipelined
+pipelines
+pipelining
+piper
+pipers
+pipes
+piping
+pipingly
+pipings
+pique
+piqued
+piquing
+pirate
+pirate's
+pirated
+pirates
+pirating
+piss
+pissed
+pisser
+pisses
+pissing
+pistil
+pistil's
+pistils
+pistol
+pistol's
+pistols
+piston
+piston's
+pistons
+pit
+pit's
+pitch
+pitched
+pitcher
+pitchers
+pitches
+pitching
+piteous
+piteously
+piteousness
+pitfall
+pitfall's
+pitfalls
+pith
+pithed
+pithes
+pithier
+pithiest
+pithiness
+pithing
+pithy
+pitiable
+pitiableness
+pitied
+pitier
+pitiers
+pities
+pitiful
+pitifully
+pitifulness
+pitiless
+pitilessly
+pitilessness
+pits
+pitted
+pity
+pitying
+pityingly
+pivot
+pivotal
+pivotally
+pivoted
+pivoting
+pivots
+pixel
+pixel's
+pixels
+placard
+placard's
+placards
+place
+placed
+placement
+placement's
+placements
+placer
+places
+placid
+placidly
+placidness
+placing
+plague
+plagued
+plaguer
+plagues
+plaguing
+plaid
+plaid's
+plaided
+plaids
+plain
+plainer
+plainest
+plainly
+plainness
+plains
+plaintiff
+plaintiff's
+plaintiffs
+plaintive
+plaintively
+plaintiveness
+plait
+plait's
+plaiter
+plaiting
+plaits
+plan
+plan's
+planar
+planarity
+plane
+plane's
+planed
+planer
+planers
+planes
+planet
+planet's
+planetary
+planets
+planing
+plank
+planking
+planks
+planned
+planner
+planner's
+planners
+planning
+plans
+plant
+plantation
+plantation's
+plantations
+planted
+planter
+planters
+planting
+plantings
+plants
+plasma
+plaster
+plastered
+plasterer
+plasterers
+plastering
+plasters
+plastic
+plasticity
+plasticly
+plastics
+plate
+plateau
+plateau's
+plateaus
+plated
+platelet
+platelet's
+platelets
+platen
+platen's
+platens
+plater
+platers
+plates
+platform
+platform's
+platforms
+plating
+platings
+platinum
+platter
+platter's
+platters
+plausibility
+plausible
+plausibleness
+play
+playable
+played
+player
+player's
+players
+playful
+playfully
+playfulness
+playground
+playground's
+playgrounds
+playing
+playmate
+playmate's
+playmates
+plays
+plaything
+plaything's
+playthings
+playwright
+playwright's
+playwrights
+plea
+plea's
+plead
+pleaded
+pleader
+pleading
+pleadingly
+pleadings
+pleads
+pleas
+pleasant
+pleasantly
+pleasantness
+please
+pleased
+pleasely
+pleaser
+pleases
+pleasing
+pleasingly
+pleasingness
+pleasurable
+pleasurableness
+pleasure
+pleasured
+pleasures
+pleasuring
+plebeian
+plebeianly
+plebiscite
+plebiscite's
+plebiscites
+pledge
+pledged
+pledger
+pledges
+pledging
+plenary
+plenteous
+plenteously
+plenteousness
+plenties
+plentiful
+plentifully
+plentifulness
+plenty
+pleurisy
+plication
+plied
+plier
+pliers
+plies
+plight
+plighter
+plod
+plods
+plot
+plot's
+plots
+plotted
+plotter
+plotter's
+plotters
+plotting
+ploy
+ploy's
+ploys
+pluck
+plucked
+plucker
+pluckier
+pluckiness
+plucking
+plucky
+plug
+plug's
+plugged
+plugging
+plugs
+plum
+plum's
+plumage
+plumaged
+plumages
+plumb
+plumb's
+plumbed
+plumber
+plumbers
+plumbing
+plumbs
+plume
+plumed
+plumes
+pluming
+plummeting
+plump
+plumped
+plumpen
+plumper
+plumply
+plumpness
+plums
+plunder
+plundered
+plunderer
+plunderers
+plundering
+plunders
+plunge
+plunged
+plunger
+plungers
+plunges
+plunging
+plural
+plurality
+plurally
+plurals
+plus
+pluses
+plush
+plushly
+plushness
+ply
+plying
+pneumonia
+poach
+poached
+poacher
+poachers
+poaches
+poaching
+pocket
+pocketbook
+pocketbook's
+pocketbooks
+pocketed
+pocketing
+pockets
+pod
+pod's
+pods
+poem
+poem's
+poems
+poet
+poet's
+poetic
+poetical
+poetically
+poeticalness
+poetics
+poetries
+poetry
+poetry's
+poets
+point
+pointed
+pointedly
+pointedness
+pointer
+pointers
+pointier
+pointiest
+pointing
+pointless
+pointlessly
+pointlessness
+points
+pointy
+poise
+poised
+poises
+poising
+poison
+poisoned
+poisoner
+poisoning
+poisonous
+poisonously
+poisonousness
+poisons
+poke
+poked
+poker
+pokes
+poking
+polar
+polarities
+polarity
+polarity's
+pole
+poled
+polemic
+polemics
+poler
+poles
+police
+police's
+policed
+policeman
+policeman's
+policemen
+policemen's
+polices
+policies
+policing
+policy
+policy's
+poling
+polish
+polished
+polisher
+polishers
+polishes
+polishing
+polite
+politely
+politeness
+politer
+politest
+politic
+political
+politically
+politician
+politician's
+politicians
+politics
+poll
+polled
+pollen
+poller
+polling
+polls
+pollute
+polluted
+polluter
+pollutes
+polluting
+pollution
+pollutive
+polo
+polygon
+polygon's
+polygons
+polymer
+polymer's
+polymers
+polynomial
+polynomial's
+polynomials
+polyphonic
+pomp
+pompous
+pompously
+pompousness
+pond
+ponder
+pondered
+ponderer
+pondering
+ponderous
+ponderously
+ponderousness
+ponders
+ponds
+ponies
+pony
+pony's
+poof
+pool
+pooled
+pooling
+pools
+poor
+poorer
+poorest
+poorly
+poorness
+pop
+pop's
+pope
+pope's
+popes
+poplar
+popped
+poppied
+poppies
+popping
+poppy
+poppy's
+pops
+populace
+popular
+popularity
+popularly
+populate
+populated
+populates
+populating
+population
+populations
+populous
+populously
+populousness
+porcelain
+porch
+porch's
+porches
+porcupine
+porcupine's
+porcupines
+pore
+pored
+pores
+poring
+pork
+porker
+porn
+pornographic
+porridge
+port
+portability
+portable
+portables
+portably
+portal
+portal's
+portals
+portamento
+portamento's
+ported
+portend
+portended
+portending
+portends
+porter
+portering
+porters
+porting
+portion
+portion's
+portioned
+portioning
+portions
+portlier
+portliness
+portly
+portrait
+portrait's
+portraits
+portray
+portrayed
+portrayer
+portraying
+portrays
+ports
+pose
+posed
+poser
+posers
+poses
+posing
+posit
+posited
+positing
+position
+positional
+positioned
+positioning
+positions
+positive
+positively
+positiveness
+positives
+posits
+possess
+possessed
+possessedly
+possessedness
+possesses
+possessing
+possession
+possession's
+possessional
+possessions
+possessive
+possessive's
+possessively
+possessiveness
+possessives
+possessor
+possessor's
+possessors
+possibilities
+possibility
+possibility's
+possible
+possibles
+possibly
+possum
+possum's
+possums
+post
+postage
+postal
+postcard
+postcard's
+postcards
+postcondition
+postconditions
+posted
+poster
+poster's
+posterior
+posteriorly
+posterity
+posters
+posting
+postings
+postman
+postmaster
+postmaster's
+postmasters
+postpone
+postponed
+postponer
+postpones
+postponing
+posts
+postscript
+postscript's
+postscripts
+postulate
+postulated
+postulates
+postulating
+postulation
+postulations
+posture
+posture's
+postured
+posturer
+postures
+posturing
+pot
+pot's
+potash
+potassium
+potato
+potatoes
+potent
+potentate
+potentate's
+potentates
+potential
+potentialities
+potentiality
+potentially
+potentials
+potentiating
+potentiometer
+potentiometer's
+potentiometers
+potently
+pots
+potted
+potter
+potter's
+potterer
+potteries
+potters
+pottery
+potting
+pouch
+pouch's
+pouched
+pouches
+poultry
+pounce
+pounced
+pounces
+pouncing
+pound
+pounded
+pounder
+pounders
+pounding
+pounds
+pour
+poured
+pourer
+pourers
+pouring
+pouringly
+pours
+pout
+pouted
+pouter
+pouting
+pouts
+poverty
+powder
+powdered
+powderer
+powdering
+powders
+power
+powered
+powerful
+powerfully
+powerfulness
+powering
+powerless
+powerlessly
+powerlessness
+powers
+pox
+poxes
+practicable
+practicableness
+practicably
+practical
+practicalities
+practicality
+practically
+practicalness
+practice
+practice's
+practices
+practitioner
+practitioner's
+practitioners
+pragmatic
+pragmatically
+pragmatics
+prairie
+prairies
+praise
+praised
+praiser
+praisers
+praises
+praising
+praisingly
+prance
+pranced
+prancer
+prances
+prancing
+prancingly
+prank
+prank's
+pranks
+prate
+prated
+prater
+prates
+prating
+pratingly
+pray
+prayed
+prayer
+prayer's
+prayers
+praying
+prays
+preach
+preached
+preacher
+preachers
+preaches
+preaching
+preachingly
+preallocate
+preallocated
+preallocates
+preallocating
+preallocation
+preallocation's
+preallocations
+preallocator
+preallocators
+preassign
+preassigned
+preassigning
+preassigns
+precarious
+precariously
+precariousness
+precaution
+precaution's
+precautioned
+precautioning
+precautions
+precede
+preceded
+precedence
+precedence's
+precedences
+precedent
+precedented
+precedents
+precedes
+preceding
+precept
+precept's
+preceptive
+preceptively
+precepts
+precinct
+precinct's
+precincts
+precious
+preciously
+preciousness
+precipice
+precipitate
+precipitated
+precipitately
+precipitateness
+precipitates
+precipitating
+precipitation
+precipitative
+precipitous
+precipitously
+precipitousness
+precise
+precisely
+preciseness
+precision
+precisions
+preclude
+precluded
+precludes
+precluding
+precocious
+precociously
+precociousness
+preconceive
+preconceived
+preconception
+preconception's
+preconceptions
+precondition
+preconditioned
+preconditions
+precursor
+precursor's
+precursors
+predate
+predated
+predates
+predating
+predation
+predecessor
+predecessor's
+predecessors
+predefine
+predefined
+predefines
+predefining
+predefinition
+predefinition's
+predefinitions
+predetermine
+predetermined
+predeterminer
+predetermines
+predetermining
+predicament
+predicate
+predicated
+predicates
+predicating
+predication
+predications
+predicative
+predict
+predictability
+predictable
+predictably
+predicted
+predicting
+prediction
+prediction's
+predictions
+predictive
+predictively
+predictor
+predictors
+predicts
+predominant
+predominantly
+predominate
+predominated
+predominately
+predominates
+predominating
+predomination
+preempt
+preempted
+preempting
+preemption
+preemptive
+preemptively
+preempts
+preface
+prefaced
+prefacer
+prefaces
+prefacing
+prefer
+preferable
+preferableness
+preferably
+preference
+preference's
+preferences
+preferential
+preferentially
+preferred
+preferring
+prefers
+prefix
+prefixed
+prefixes
+prefixing
+pregnant
+pregnantly
+prehistoric
+prejudge
+prejudged
+prejudger
+prejudice
+prejudiced
+prejudices
+prejudicing
+prelate
+preliminaries
+preliminary
+prelude
+prelude's
+preluded
+preluder
+preludes
+preluding
+premature
+prematurely
+prematureness
+prematurity
+premeditated
+premeditatedly
+premier
+premier's
+premiere
+premiered
+premieres
+premiering
+premiers
+premise
+premise's
+premised
+premises
+premising
+premium
+premium's
+premiums
+preoccupation
+preoccupations
+preoccupied
+preoccupies
+preoccupy
+preparation
+preparation's
+preparations
+preparative
+preparative's
+preparatively
+preparatives
+preparatory
+prepare
+prepared
+preparedly
+preparedness
+preparer
+prepares
+preparing
+prepend
+prepended
+prepender
+prependers
+prepending
+prepends
+preposition
+preposition's
+prepositional
+prepositionally
+prepositions
+preposterous
+preposterously
+preposterousness
+preprint
+preprinted
+preprinting
+preprints
+preprocessor
+preprocessors
+preproduction
+preprogrammed
+prerequisite
+prerequisite's
+prerequisites
+prerogative
+prerogative's
+prerogatived
+prerogatives
+prescribe
+prescribed
+prescriber
+prescribes
+prescribing
+prescription
+prescription's
+prescriptions
+prescriptive
+prescriptively
+preselect
+preselected
+preselecting
+preselects
+presence
+presence's
+presences
+present
+presentation
+presentation's
+presentations
+presented
+presenter
+presenters
+presenting
+presently
+presentness
+presents
+preservation
+preservations
+preservative
+preservative's
+preservatives
+preserve
+preserved
+preserver
+preservers
+preserves
+preserving
+preset
+presets
+preside
+presided
+presidency
+president
+president's
+presidential
+presidentially
+presidents
+presider
+presides
+presiding
+press
+pressed
+presser
+presses
+pressing
+pressingly
+pressings
+pressure
+pressured
+pressures
+pressuring
+prestige
+presumably
+presume
+presumed
+presumer
+presumes
+presuming
+presumingly
+presumption
+presumption's
+presumptions
+presumptuous
+presumptuously
+presumptuousness
+presuppose
+presupposed
+presupposes
+presupposing
+pretend
+pretended
+pretendedly
+pretender
+pretenders
+pretending
+pretends
+pretentious
+pretentiously
+pretentiousness
+pretext
+pretext's
+pretexts
+prettied
+prettier
+pretties
+prettiest
+prettily
+prettiness
+pretty
+prettying
+prevail
+prevailed
+prevailing
+prevailingly
+prevails
+prevalence
+prevalent
+prevalently
+prevent
+preventable
+preventably
+prevented
+preventer
+preventing
+prevention
+preventions
+preventive
+preventively
+preventiveness
+preventives
+prevents
+preview
+previewed
+previewer
+previewers
+previewing
+previews
+previous
+previously
+previousness
+prey
+preyed
+preyer
+preying
+preys
+price
+priced
+priceless
+pricer
+pricers
+prices
+pricing
+prick
+pricked
+pricker
+pricking
+pricklier
+prickliness
+prickly
+pricks
+pride
+prided
+prides
+priding
+pried
+prier
+pries
+priest
+priestliness
+priestly
+priests
+primacy
+primaries
+primarily
+primary
+primary's
+prime
+primed
+primely
+primeness
+primer
+primers
+primes
+primeval
+primevally
+priming
+primitive
+primitively
+primitiveness
+primitives
+primrose
+prince
+princelier
+princeliness
+princely
+princes
+princess
+princess's
+princesses
+principal
+principalities
+principality
+principality's
+principally
+principals
+principle
+principled
+principles
+print
+printable
+printably
+printed
+printer
+printers
+printing
+printout
+printouts
+prints
+prior
+priori
+priorities
+priority
+priority's
+priorly
+priors
+priory
+prism
+prism's
+prisms
+prison
+prisoner
+prisoner's
+prisoners
+prisons
+privacies
+privacy
+private
+privately
+privateness
+privates
+privation
+privations
+privative
+privatively
+privies
+privilege
+privileged
+privileges
+privy
+privy's
+prize
+prized
+prizer
+prizers
+prizes
+prizing
+pro
+pro's
+probabilistic
+probabilistically
+probabilities
+probability
+probable
+probably
+probate
+probated
+probates
+probating
+probation
+probationer
+probationers
+probative
+probe
+probed
+prober
+probes
+probing
+probings
+problem
+problem's
+problematic
+problematical
+problematically
+problems
+procedural
+procedurally
+procedure
+procedure's
+procedures
+proceed
+proceeded
+proceeder
+proceeding
+proceedings
+proceeds
+process
+process's
+processed
+processes
+processing
+procession
+processor
+processor's
+processors
+proclaim
+proclaimed
+proclaimer
+proclaimers
+proclaiming
+proclaims
+proclamation
+proclamation's
+proclamations
+proclivities
+proclivity
+proclivity's
+procrastinate
+procrastinated
+procrastinates
+procrastinating
+procrastination
+procrastinator
+procrastinator's
+procrastinators
+procure
+procured
+procurement
+procurement's
+procurements
+procurer
+procurers
+procures
+procuring
+prodigal
+prodigally
+prodigious
+prodigiously
+prodigiousness
+produce
+produced
+producer
+producers
+produces
+producible
+producing
+product
+product's
+production
+production's
+productions
+productive
+productively
+productiveness
+productivities
+productivity
+products
+profane
+profaned
+profanely
+profaneness
+profaner
+profaning
+profess
+professed
+professedly
+professes
+professing
+profession
+profession's
+professional
+professionalism
+professionalisms
+professionally
+professionals
+professions
+professor
+professor's
+professors
+proffer
+proffered
+proffering
+proffers
+proficiencies
+proficiency
+proficient
+proficiently
+profile
+profiled
+profiler
+profiler's
+profilers
+profiles
+profiling
+profit
+profit's
+profitability
+profitable
+profitableness
+profitably
+profited
+profiteer
+profiteer's
+profiteers
+profiter
+profiters
+profiting
+profits
+profound
+profoundest
+profoundly
+profoundness
+progeny
+program
+program's
+programmability
+programmable
+programmed
+programmer
+programmer's
+programmers
+programming
+programs
+progress
+progressed
+progresses
+progressing
+progression
+progression's
+progressions
+progressive
+progressively
+progressiveness
+prohibit
+prohibited
+prohibiter
+prohibiting
+prohibition
+prohibition's
+prohibitions
+prohibitive
+prohibitively
+prohibitiveness
+prohibits
+project
+project's
+projected
+projecting
+projection
+projection's
+projections
+projective
+projectively
+projector
+projector's
+projectors
+projects
+prolegomena
+proletariat
+proliferate
+proliferated
+proliferates
+proliferating
+proliferation
+proliferative
+prolific
+prolificness
+prolog
+prolog's
+prologs
+prologue
+prologue's
+prologues
+prolong
+prolonged
+prolonger
+prolonging
+prolongs
+promenade
+promenade's
+promenader
+promenades
+promenading
+prominence
+prominent
+prominently
+promiscuity
+promiscuity's
+promiscuous
+promiscuously
+promiscuousness
+promise
+promised
+promiser
+promises
+promising
+promisingly
+promontories
+promontory
+promote
+promoted
+promoter
+promoters
+promotes
+promoting
+promotion
+promotional
+promotions
+promotive
+promotiveness
+prompt
+prompted
+prompter
+prompters
+promptest
+prompting
+promptings
+promptly
+promptness
+prompts
+promulgate
+promulgated
+promulgates
+promulgating
+promulgation
+promulgations
+prone
+pronely
+proneness
+prong
+pronged
+prongs
+pronoun
+pronoun's
+pronounce
+pronounceable
+pronounced
+pronouncedly
+pronouncement
+pronouncement's
+pronouncements
+pronouncer
+pronounces
+pronouncing
+pronouns
+pronunciation
+pronunciation's
+pronunciations
+proof
+proof's
+proofed
+proofer
+proofing
+proofs
+prop
+propaganda
+propagate
+propagated
+propagates
+propagating
+propagation
+propagations
+propagative
+propel
+propelled
+propeller
+propeller's
+propellers
+propels
+propensities
+propensity
+proper
+properly
+properness
+propertied
+properties
+property
+prophecies
+prophecy
+prophecy's
+prophesied
+prophesier
+prophesies
+prophesy
+prophesying
+prophet
+prophet's
+prophetic
+prophets
+propitious
+propitiously
+propitiousness
+proponent
+proponent's
+proponents
+proportion
+proportional
+proportionally
+proportionately
+proportioned
+proportioner
+proportioning
+proportionment
+proportions
+proposal
+proposal's
+proposals
+propose
+proposed
+proposer
+proposers
+proposes
+proposing
+proposition
+propositional
+propositionally
+propositioned
+propositioning
+propositions
+propound
+propounded
+propounder
+propounding
+propounds
+proprietary
+proprietor
+proprietor's
+proprietors
+propriety
+props
+propulsion
+propulsion's
+propulsions
+pros
+prose
+prosecute
+prosecuted
+prosecutes
+prosecuting
+prosecution
+prosecutions
+proser
+prosing
+prosodic
+prosodics
+prospect
+prospected
+prospecting
+prospection
+prospection's
+prospections
+prospective
+prospectively
+prospectiveness
+prospectives
+prospector
+prospector's
+prospectors
+prospects
+prospectus
+prosper
+prospered
+prospering
+prosperity
+prosperous
+prosperously
+prosperousness
+prospers
+prostitution
+prostrate
+prostrated
+prostration
+protect
+protected
+protectedly
+protecting
+protection
+protection's
+protections
+protective
+protectively
+protectiveness
+protector
+protector's
+protectorate
+protectors
+protects
+protege
+protege's
+proteges
+protein
+protein's
+proteins
+protest
+protest's
+protestants
+protestation
+protestations
+protested
+protester
+protester's
+protesters
+protesting
+protestingly
+protests
+protocol
+protocol's
+protocols
+proton
+proton's
+protons
+protoplasm
+prototype
+prototype's
+prototyped
+prototypes
+prototypical
+prototypically
+prototyping
+protrude
+protruded
+protrudes
+protruding
+protrusion
+protrusion's
+protrusions
+proud
+prouder
+proudest
+proudly
+provability
+provable
+provableness
+provably
+prove
+proved
+proven
+provenly
+prover
+proverb
+proverb's
+proverbs
+provers
+proves
+provide
+provided
+providence
+provider
+providers
+provides
+providing
+province
+province's
+provinces
+provincial
+provincially
+proving
+provision
+provisional
+provisionally
+provisioned
+provisioner
+provisioning
+provisions
+provocation
+provoke
+provoked
+provokes
+provoking
+provokingly
+prow
+prow's
+prowess
+prowl
+prowled
+prowler
+prowlers
+prowling
+prowls
+prows
+proximal
+proximally
+proximate
+proximately
+proximateness
+proximity
+prudence
+prudent
+prudently
+prune
+pruned
+pruner
+pruners
+prunes
+pruning
+pry
+prying
+pryingly
+psalm
+psalm's
+psalms
+pseudo
+psyche
+psyche's
+psyches
+psychiatrist
+psychiatrist's
+psychiatrists
+psychiatry
+psychological
+psychologically
+psychologist
+psychologist's
+psychologists
+psychology
+psychosocial
+psychosocially
+pub
+pub's
+public
+publication
+publication's
+publications
+publicity
+publicly
+publicness
+publics
+publish
+published
+publisher
+publishers
+publishes
+publishing
+pubs
+pucker
+puckered
+puckering
+puckers
+pudding
+pudding's
+puddings
+puddle
+puddled
+puddler
+puddles
+puddling
+puff
+puffed
+puffer
+puffers
+puffing
+puffs
+pull
+pulled
+puller
+pulley
+pulley's
+pulleys
+pulling
+pullings
+pulls
+pulp
+pulper
+pulping
+pulpit
+pulpit's
+pulpits
+pulse
+pulsed
+pulser
+pulses
+pulsing
+pump
+pumped
+pumper
+pumping
+pumpkin
+pumpkin's
+pumpkins
+pumps
+pun
+pun's
+punch
+punched
+puncher
+puncher's
+punchers
+punches
+punching
+punchings
+punctual
+punctually
+punctualness
+punctuation
+puncture
+puncture's
+punctured
+punctures
+puncturing
+punier
+puniness
+punish
+punishable
+punished
+punisher
+punishes
+punishing
+punishment
+punishment's
+punishments
+punitive
+punitively
+punitiveness
+puns
+punt
+punted
+punter
+punters
+punting
+punts
+puny
+pup
+pup's
+pupa
+pupas
+pupil
+pupil's
+pupils
+puppet
+puppet's
+puppets
+puppies
+puppy
+puppy's
+pups
+purchasable
+purchase
+purchased
+purchaser
+purchasers
+purchases
+purchasing
+pure
+purely
+pureness
+purer
+purest
+purge
+purged
+purger
+purges
+purging
+purification
+purifications
+purified
+purifier
+purifiers
+purifies
+purify
+purifying
+purity
+purple
+purpled
+purpler
+purples
+purplest
+purpling
+purport
+purported
+purportedly
+purporter
+purporters
+purporting
+purports
+purpose
+purposed
+purposeful
+purposefully
+purposefulness
+purposely
+purposes
+purposing
+purposive
+purposively
+purposiveness
+purr
+purred
+purring
+purringly
+purrs
+purse
+pursed
+purser
+pursers
+purses
+pursing
+pursue
+pursued
+pursuer
+pursuers
+pursues
+pursuing
+pursuit
+pursuit's
+pursuits
+purview
+push
+pushbutton
+pushbuttons
+pushdown
+pushed
+pusher
+pushers
+pushes
+pushing
+puss
+pussier
+pussies
+pussy
+put
+puts
+putter
+putterer
+puttering
+putters
+putting
+puzzle
+puzzled
+puzzlement
+puzzler
+puzzlers
+puzzles
+puzzling
+puzzlings
+pygmies
+pygmy
+pygmy's
+pyramid
+pyramid's
+pyramids
+quack
+quacked
+quacking
+quacks
+quadrant
+quadrant's
+quadrants
+quadratic
+quadratical
+quadratically
+quadratics
+quadrature
+quadrature's
+quadratures
+quadruple
+quadrupled
+quadruples
+quadrupling
+quadword
+quadword's
+quadwords
+quagmire
+quagmire's
+quagmires
+quail
+quail's
+quails
+quaint
+quaintly
+quaintness
+quake
+quaked
+quaker
+quakers
+quakes
+quaking
+qualification
+qualifications
+qualified
+qualifiedly
+qualifier
+qualifiers
+qualifies
+qualify
+qualifying
+qualitative
+qualitatively
+qualities
+quality
+quality's
+qualm
+qualms
+quandaries
+quandary
+quandary's
+quanta
+quantifiable
+quantification
+quantifications
+quantified
+quantifier
+quantifiers
+quantifies
+quantify
+quantifying
+quantitative
+quantitatively
+quantitativeness
+quantities
+quantity
+quantity's
+quantum
+quarantine
+quarantine's
+quarantined
+quarantines
+quarantining
+quarrel
+quarrels
+quarrelsome
+quarrelsomely
+quarrelsomeness
+quarried
+quarrier
+quarries
+quarry
+quarry's
+quarrying
+quart
+quarter
+quartered
+quarterer
+quartering
+quarterlies
+quarterly
+quarters
+quartet
+quartet's
+quartets
+quarts
+quartz
+quash
+quashed
+quashes
+quashing
+quasi
+quaver
+quavered
+quavering
+quaveringly
+quavers
+quay
+quays
+queen
+queen's
+queenly
+queens
+queer
+queerer
+queerest
+queerly
+queerness
+queers
+quell
+quelled
+queller
+quelling
+quells
+quench
+quenched
+quencher
+quenches
+quenching
+queried
+querier
+queries
+query
+querying
+quest
+quested
+quester
+questers
+questing
+question
+questionable
+questionableness
+questionably
+questioned
+questioner
+questioners
+questioning
+questioningly
+questionings
+questionnaire
+questionnaire's
+questionnaires
+questions
+quests
+queue
+queue's
+queued
+queuer
+queuer's
+queuers
+queues
+quick
+quicken
+quickened
+quickener
+quickening
+quickens
+quicker
+quickest
+quickly
+quickness
+quicksilver
+quiet
+quieted
+quieten
+quietened
+quietening
+quietens
+quieter
+quietest
+quieting
+quietly
+quietness
+quiets
+quietude
+quill
+quills
+quilt
+quilted
+quilter
+quilting
+quilts
+quinine
+quit
+quite
+quits
+quitter
+quitter's
+quitters
+quitting
+quiver
+quivered
+quivering
+quivers
+quiz
+quizzed
+quizzes
+quizzing
+quo
+quota
+quota's
+quotas
+quotation
+quotation's
+quotations
+quote
+quoted
+quotes
+quoth
+quotient
+quotients
+quoting
+rabbit
+rabbit's
+rabbited
+rabbiter
+rabbiting
+rabbits
+rabble
+rabbled
+rabbler
+rabbling
+raccoon
+raccoon's
+raccoons
+race
+raced
+racehorse
+racehorse's
+racehorses
+racer
+racers
+races
+racial
+racially
+racing
+rack
+racked
+racker
+racket
+racket's
+racketeer
+racketeering
+racketeers
+rackets
+racking
+racks
+radar
+radar's
+radars
+radial
+radially
+radiance
+radiant
+radiantly
+radiate
+radiated
+radiately
+radiates
+radiating
+radiation
+radiations
+radiative
+radiatively
+radiator
+radiator's
+radiators
+radical
+radically
+radicalness
+radicals
+radio
+radioed
+radioing
+radiology
+radios
+radish
+radish's
+radishes
+radius
+radiuses
+radix
+radixes
+raft
+rafter
+raftered
+rafters
+rafts
+rag
+rag's
+rage
+raged
+rages
+ragged
+raggedly
+raggedness
+raging
+rags
+raid
+raided
+raider
+raiders
+raiding
+raids
+rail
+railed
+railer
+railers
+railing
+railroad
+railroaded
+railroader
+railroaders
+railroading
+railroads
+rails
+railway
+railway's
+railways
+raiment
+rain
+rain's
+rainbow
+rainbows
+raincoat
+raincoat's
+raincoats
+raindrop
+raindrop's
+raindrops
+rained
+rainfall
+rainier
+rainiest
+raining
+rains
+rainy
+raise
+raised
+raiser
+raisers
+raises
+raisin
+raising
+raisins
+rake
+raked
+raker
+rakes
+raking
+rallied
+rallies
+rally
+rallying
+ram
+ram's
+ramble
+rambled
+rambler
+ramblers
+rambles
+rambling
+ramblingly
+ramblings
+ramification
+ramification's
+ramifications
+ramp
+ramp's
+rampart
+ramparts
+ramped
+ramping
+ramps
+rams
+ramses
+ran
+ranch
+ranched
+rancher
+ranchers
+ranches
+ranching
+random
+randomly
+randomness
+rang
+range
+ranged
+ranger
+rangers
+ranges
+ranging
+rank
+ranked
+ranker
+ranker's
+rankers
+rankest
+ranking
+ranking's
+rankings
+rankle
+rankled
+rankles
+rankling
+rankly
+rankness
+ranks
+ransack
+ransacked
+ransacker
+ransacking
+ransacks
+ransom
+ransomer
+ransoming
+ransoms
+rant
+ranted
+ranter
+ranters
+ranting
+rantingly
+rants
+rap
+rap's
+rape
+raped
+raper
+rapes
+rapid
+rapidity
+rapidly
+rapidness
+rapids
+raping
+raps
+rapt
+raptly
+raptness
+rapture
+rapture's
+raptured
+raptures
+rapturing
+rapturous
+rapturously
+rapturousness
+rare
+rarely
+rareness
+rarer
+rarest
+raring
+rarities
+rarity
+rarity's
+rascal
+rascally
+rascals
+rash
+rasher
+rashes
+rashly
+rashness
+rasp
+raspberry
+rasped
+rasper
+rasping
+raspingly
+raspings
+rasps
+raster
+rasters
+rat
+rat's
+rate
+rated
+rater
+raters
+rates
+rather
+ratification
+ratifications
+ratified
+ratifies
+ratify
+ratifying
+rating
+ratings
+ratio
+ratio's
+ration
+rational
+rationale
+rationale's
+rationales
+rationalities
+rationality
+rationally
+rationalness
+rationed
+rationing
+rations
+ratios
+rats
+rattle
+rattled
+rattler
+rattlers
+rattles
+rattlesnake
+rattlesnake's
+rattlesnakes
+rattling
+rattlingly
+ravage
+ravaged
+ravager
+ravagers
+ravages
+ravaging
+rave
+raved
+raven
+ravened
+ravener
+ravening
+ravenous
+ravenously
+ravenousness
+ravens
+raver
+raves
+ravine
+ravine's
+ravined
+ravines
+raving
+ravings
+raw
+rawer
+rawest
+rawly
+rawness
+raws
+ray
+ray's
+rayed
+rays
+razor
+razor's
+razors
+re
+reabbreviate
+reabbreviated
+reabbreviates
+reabbreviating
+reach
+reachable
+reachably
+reached
+reacher
+reaches
+reaching
+reacquainted
+react
+reacted
+reacting
+reaction
+reaction's
+reactionaries
+reactionary
+reactionary's
+reactions
+reactivate
+reactivated
+reactivates
+reactivating
+reactivation
+reactive
+reactively
+reactiveness
+reactivity
+reactor
+reactor's
+reactors
+reacts
+read
+readability
+readable
+readableness
+readapting
+reader
+reader's
+readers
+readied
+readier
+readies
+readiest
+readily
+readiness
+reading
+readings
+readjustable
+readjusted
+readjustments
+readjusts
+readout
+readout's
+readouts
+reads
+ready
+readying
+reaffirm
+reaffirmed
+reaffirming
+reaffirms
+reagents
+real
+realest
+realign
+realigned
+realigning
+realignment
+realignments
+realigns
+realism
+realist
+realist's
+realistic
+realistically
+realists
+realities
+reality
+realizable
+realizable's
+realizableness
+realizables
+realizablies
+realizably
+realization
+realization's
+realizations
+realize
+realized
+realizer
+realizers
+realizes
+realizing
+realizing's
+realizingly
+realizings
+reallocate
+reallocated
+reallocates
+reallocating
+reallocation
+reallocation's
+reallocations
+reallocator
+reallocator's
+reallocators
+reallotments
+reallots
+reallotted
+reallotting
+really
+realm
+realm's
+realms
+realness
+reals
+ream
+ream's
+reamed
+reamer
+reaming
+reams
+reanalysis
+reap
+reaped
+reaper
+reaping
+reappear
+reappeared
+reappearing
+reappears
+reapplying
+reapportioned
+reappraisal
+reappraisals
+reappraised
+reappraises
+reaps
+rear
+reared
+rearer
+rearing
+rearmed
+rearms
+rearrange
+rearrangeable
+rearranged
+rearrangement
+rearrangement's
+rearrangements
+rearranges
+rearranging
+rearrest
+rearrested
+rears
+reason
+reasonable
+reasonableness
+reasonably
+reasoned
+reasoner
+reasoning
+reasonings
+reasons
+reassemble
+reassembled
+reassembler
+reassembles
+reassembling
+reasserts
+reassess
+reassessed
+reassesses
+reassessing
+reassessment
+reassessment's
+reassessments
+reassign
+reassignable
+reassigned
+reassigning
+reassignment
+reassignment's
+reassignments
+reassigns
+reassurances
+reassure
+reassured
+reassures
+reassuring
+reassuringly
+reawaken
+reawakened
+reawakening
+reawakens
+rebate
+rebate's
+rebated
+rebater
+rebates
+rebating
+rebel
+rebel's
+rebelled
+rebelling
+rebellion
+rebellion's
+rebellions
+rebellious
+rebelliously
+rebelliousness
+rebells
+rebels
+rebidding
+rebids
+rebirth
+rebirth's
+rebonds
+reboot
+rebooted
+rebooter
+rebooters
+rebooting
+reboots
+reborn
+rebound
+rebounded
+rebounder
+rebounding
+rebounds
+rebroadcast
+rebroadcasts
+rebuff
+rebuffed
+rebuffing
+rebuffs
+rebuild
+rebuilding
+rebuilds
+rebuilt
+rebuke
+rebuked
+rebuker
+rebukes
+rebuking
+rebut
+rebuttal
+rebuttals
+rebutted
+rebutting
+recalculate
+recalculated
+recalculates
+recalculating
+recalculation
+recalculations
+recall
+recalled
+recaller
+recalling
+recalls
+recapitulate
+recapitulated
+recapitulates
+recapitulating
+recapitulation
+recapped
+recapping
+recapture
+recaptured
+recaptures
+recapturing
+recast
+recasting
+recasts
+recede
+receded
+recedes
+receding
+receipt
+receipt's
+receipted
+receipting
+receipts
+receivable
+receivables
+receive
+received
+receiver
+receiver's
+receivers
+receives
+receiving
+recent
+recently
+recentness
+receptacle
+receptacle's
+receptacles
+reception
+reception's
+receptions
+receptive
+receptively
+receptiveness
+receptivity
+receptor
+receptor's
+receptors
+recess
+recessed
+recesses
+recessing
+recession
+recession's
+recessions
+recessive
+recessively
+recessiveness
+recharged
+recharges
+rechartering
+rechecked
+rechecks
+recipe
+recipe's
+recipes
+recipient
+recipient's
+recipients
+reciprocal
+reciprocally
+reciprocals
+reciprocate
+reciprocated
+reciprocates
+reciprocating
+reciprocation
+reciprocative
+reciprocity
+recirculate
+recirculated
+recirculates
+recirculating
+recirculation
+recital
+recital's
+recitals
+recitation
+recitation's
+recitations
+recite
+recited
+reciter
+recites
+reciting
+reckless
+recklessly
+recklessness
+reckon
+reckoned
+reckoner
+reckoning
+reckonings
+reckons
+reclaim
+reclaimable
+reclaimed
+reclaimer
+reclaimers
+reclaiming
+reclaims
+reclamation
+reclamations
+reclassification
+reclassified
+reclassifies
+reclassify
+reclassifying
+recline
+reclined
+reclines
+reclining
+reclustered
+reclusters
+recode
+recoded
+recodes
+recoding
+recognition
+recognition's
+recognitions
+recoil
+recoiled
+recoiling
+recoils
+recoinage
+recollect
+recollected
+recollecting
+recollection
+recollection's
+recollections
+recollects
+recombination
+recombination's
+recombinational
+recombinations
+recombine
+recombined
+recombines
+recombining
+recommenced
+recommences
+recommend
+recommendation
+recommendation's
+recommendations
+recommended
+recommender
+recommending
+recommends
+recompense
+recompilations
+recompile
+recompiled
+recompiles
+recompiling
+recompute
+recomputed
+recomputes
+recomputing
+reconcile
+reconciled
+reconciler
+reconciles
+reconciliation
+reconciliation's
+reconciliations
+reconciling
+reconditioned
+reconfigurable
+reconfiguration
+reconfiguration's
+reconfigurations
+reconfigure
+reconfigured
+reconfigurer
+reconfigures
+reconfiguring
+reconnect
+reconnected
+reconnecter
+reconnecting
+reconnection
+reconnects
+reconsider
+reconsideration
+reconsidered
+reconsidering
+reconsiders
+reconsolidated
+reconsolidates
+reconstituted
+reconstitutes
+reconstruct
+reconstructed
+reconstructible
+reconstructing
+reconstruction
+reconstructions
+reconstructive
+reconstructs
+recontacted
+reconvened
+reconvenes
+reconverts
+record
+recorded
+recorder
+recorders
+recording
+recordings
+records
+recored
+recount
+recounted
+recounter
+recounting
+recounts
+recourse
+recourses
+recover
+recoverability
+recoverable
+recovered
+recoverer
+recoveries
+recovering
+recovers
+recovery
+recovery's
+recreate
+recreated
+recreates
+recreating
+recreation
+recreational
+recreations
+recreative
+recruit
+recruit's
+recruited
+recruiter
+recruiter's
+recruiters
+recruiting
+recruits
+recta
+rectangle
+rectangle's
+rectangles
+rectangular
+rectangularly
+rector
+rector's
+rectors
+rectum
+rectum's
+rectums
+recur
+recurrence
+recurrence's
+recurrences
+recurrent
+recurrently
+recurring
+recurs
+recurse
+recursed
+recurses
+recursing
+recursion
+recursion's
+recursions
+recursive
+recursively
+recursiveness
+recurved
+recyclable
+recycle
+recycled
+recycles
+recycling
+red
+redbreast
+redden
+reddened
+reddening
+redder
+reddest
+reddish
+reddishness
+redeclare
+redeclared
+redeclares
+redeclaring
+redecorated
+redecorates
+redeem
+redeemed
+redeemer
+redeemers
+redeeming
+redeems
+redefine
+redefined
+redefines
+redefining
+redefinition
+redefinition's
+redefinitions
+redemption
+redemptioner
+redeploys
+redeposit
+redeposit's
+redeposited
+redepositing
+redepositor
+redepositor's
+redepositors
+redeposits
+redesign
+redesigned
+redesigning
+redesigns
+redetermination
+redetermines
+redevelop
+redeveloped
+redeveloper
+redevelopers
+redeveloping
+redevelopment
+redevelops
+redials
+redirect
+redirected
+redirecting
+redirection
+redirections
+redirector
+redirector's
+redirectors
+redirects
+rediscovered
+rediscovers
+redisplay
+redisplayed
+redisplaying
+redisplays
+redistribute
+redistributed
+redistributes
+redistributing
+redistribution
+redistribution's
+redistributions
+redistributive
+redly
+redness
+redoing
+redone
+redouble
+redoubled
+redoubles
+redoubling
+redoubtable
+redraw
+redrawing
+redrawn
+redraws
+redress
+redressed
+redresser
+redresses
+redressing
+reds
+reduce
+reduced
+reducer
+reducers
+reduces
+reducibility
+reducible
+reducibly
+reducing
+reduction
+reduction's
+reductions
+redundancies
+redundancy
+redundant
+redundantly
+reduplicated
+reed
+reed's
+reeder
+reeding
+reeds
+reeducation
+reef
+reefer
+reefing
+reefs
+reel
+reelect
+reelected
+reelecting
+reelects
+reeled
+reeler
+reeling
+reels
+reemerged
+reenactment
+reenforcement
+reenlists
+reenter
+reentered
+reentering
+reenters
+reentrant
+reestablish
+reestablished
+reestablishes
+reestablishing
+reestimating
+reevaluate
+reevaluated
+reevaluates
+reevaluating
+reevaluation
+reeves
+reexamine
+reexamined
+reexamines
+reexamining
+refaced
+refaces
+refelled
+refelling
+refer
+referee
+referee's
+refereed
+refereeing
+referees
+reference
+referenced
+referencer
+references
+referencing
+referendum
+referent
+referent's
+referential
+referentiality
+referentially
+referents
+referral
+referral's
+referrals
+referred
+referrer
+referring
+refers
+refill
+refillable
+refilled
+refilling
+refills
+refine
+refined
+refinement
+refinement's
+refinements
+refiner
+refines
+refining
+refinished
+reflect
+reflected
+reflecting
+reflection
+reflection's
+reflections
+reflective
+reflectively
+reflectiveness
+reflectivity
+reflector
+reflector's
+reflectors
+reflects
+reflex
+reflex's
+reflexed
+reflexes
+reflexive
+reflexively
+reflexiveness
+reflexivity
+reflexly
+refluent
+refocus
+refocused
+refocuses
+refocusing
+refolded
+reform
+reformable
+reformat
+reformation
+reformative
+reformats
+reformatted
+reformatter
+reformatting
+reformed
+reformer
+reformers
+reforming
+reforms
+reformulate
+reformulated
+reformulates
+reformulating
+reformulation
+refractoriness
+refractory
+refrain
+refrained
+refraining
+refrains
+refresh
+refreshed
+refreshen
+refresher
+refreshers
+refreshes
+refreshing
+refreshingly
+refreshment
+refreshment's
+refreshments
+refried
+refries
+refrigerator
+refrigerator's
+refrigerators
+refry
+refrying
+refuel
+refuels
+refuge
+refuged
+refugee
+refugee's
+refugees
+refuges
+refuging
+refund
+refund's
+refunded
+refunder
+refunders
+refunding
+refunds
+refusal
+refusals
+refuse
+refused
+refuser
+refuses
+refusing
+refutable
+refutation
+refute
+refuted
+refuter
+refutes
+refuting
+regain
+regained
+regaining
+regains
+regal
+regaled
+regaling
+regally
+regard
+regarded
+regarding
+regardless
+regardlessly
+regardlessness
+regards
+regenerate
+regenerated
+regenerately
+regenerateness
+regenerates
+regenerating
+regeneration
+regenerative
+regeneratively
+regenerators
+regent
+regent's
+regents
+regime
+regime's
+regimen
+regiment
+regimented
+regiments
+regimes
+region
+region's
+regional
+regionally
+regions
+register
+registered
+registering
+registers
+registration
+registration's
+registrations
+regreets
+regress
+regressed
+regresses
+regressing
+regression
+regression's
+regressions
+regressive
+regressively
+regressiveness
+regret
+regretful
+regretfully
+regretfulness
+regrets
+regrettable
+regrettably
+regretted
+regretting
+regrids
+regroup
+regrouped
+regrouping
+regular
+regularities
+regularity
+regularly
+regulars
+regulate
+regulated
+regulates
+regulating
+regulation
+regulations
+regulative
+regulator
+regulator's
+regulators
+rehash
+rehashed
+rehashes
+rehashing
+rehearsal
+rehearsal's
+rehearsals
+rehearse
+rehearsed
+rehearser
+rehearses
+rehearsing
+rehoused
+rehouses
+reign
+reigned
+reigning
+reigns
+reimbursed
+reimbursement
+reimbursement's
+reimbursements
+rein
+reincarnate
+reincarnated
+reincarnation
+reincorporating
+reincorporation
+reindeer
+reined
+reinforce
+reinforced
+reinforcement
+reinforcement's
+reinforcements
+reinforcer
+reinforces
+reinforcing
+reining
+reins
+reinsert
+reinserted
+reinserting
+reinsertions
+reinserts
+reinstall
+reinstalled
+reinstaller
+reinstalling
+reinstalls
+reinstate
+reinstated
+reinstatement
+reinstates
+reinstating
+reintegrated
+reinterpret
+reinterpretations
+reinterpreted
+reinterpreting
+reinterprets
+reinterviewed
+reintroduce
+reintroduced
+reintroduces
+reintroducing
+reinvent
+reinvented
+reinventing
+reinvention
+reinvents
+reinvested
+reinvoked
+reinvokes
+reissue
+reissued
+reissuer
+reissuer's
+reissuers
+reissues
+reissuing
+reiterate
+reiterated
+reiterates
+reiterating
+reiteration
+reiterations
+reiterative
+reiteratively
+reiterativeness
+reject
+rejected
+rejecter
+rejecting
+rejectingly
+rejection
+rejection's
+rejections
+rejective
+rejector
+rejector's
+rejectors
+rejects
+rejoice
+rejoiced
+rejoicer
+rejoices
+rejoicing
+rejoicingly
+rejoin
+rejoined
+rejoining
+rejoins
+rekindle
+rekindled
+rekindler
+rekindles
+rekindling
+reknit
+relabel
+relabels
+relapse
+relapsed
+relapser
+relapses
+relapsing
+relate
+related
+relatedly
+relatedness
+relater
+relates
+relating
+relation
+relational
+relationally
+relations
+relationship
+relationship's
+relationships
+relative
+relatively
+relativeness
+relatives
+relativism
+relativistic
+relativistically
+relativity
+relativity's
+relax
+relaxation
+relaxation's
+relaxations
+relaxed
+relaxedly
+relaxedness
+relaxer
+relaxes
+relaxing
+relay
+relayed
+relaying
+relays
+relearns
+release
+released
+releaser
+releases
+releasing
+relegate
+relegated
+relegates
+relegating
+relegation
+relent
+relented
+relenting
+relentless
+relentlessly
+relentlessness
+relents
+relevance
+relevances
+relevant
+relevantly
+reliabilities
+reliability
+reliable
+reliableness
+reliably
+reliance
+relic
+relic's
+relicense
+relicensed
+relicenser
+relicenses
+relicensing
+relics
+relied
+relief
+reliefs
+relier
+relies
+relieve
+relieved
+relievedly
+reliever
+relievers
+relieves
+relieving
+religion
+religion's
+religions
+religious
+religiously
+religiousness
+relinking
+relinquish
+relinquished
+relinquishes
+relinquishing
+relish
+relished
+relishes
+relishing
+relive
+relives
+reliving
+reload
+reloaded
+reloader
+reloading
+reloads
+relocate
+relocated
+relocates
+relocating
+relocation
+relocations
+reluctance
+reluctances
+reluctant
+reluctantly
+rely
+relying
+remade
+remain
+remainder
+remainder's
+remaindered
+remaindering
+remainders
+remained
+remaining
+remains
+remark
+remarkable
+remarkableness
+remarkably
+remarked
+remarking
+remarks
+remarriages
+remarried
+remedied
+remedies
+remedy
+remedying
+remember
+remembered
+rememberer
+remembering
+remembers
+remembrance
+remembrance's
+remembrancer
+remembrances
+remind
+reminded
+reminder
+reminders
+reminding
+reminds
+reminiscence
+reminiscence's
+reminiscences
+reminiscent
+reminiscently
+remissions
+remittance
+remittances
+remixed
+remnant
+remnant's
+remnants
+remodel
+remodels
+remodulate
+remodulated
+remodulates
+remodulating
+remodulation
+remodulator
+remodulator's
+remodulators
+remolding
+remonstrate
+remonstrated
+remonstrates
+remonstrating
+remonstration
+remonstrative
+remonstratively
+remorse
+remote
+remotely
+remoteness
+remotest
+remotion
+remoulds
+removable
+removableness
+removal
+removal's
+removals
+remove
+removed
+remover
+removes
+removing
+renaissance
+renal
+rename
+renamed
+renames
+renaming
+renatured
+renatures
+rend
+render
+rendered
+renderer
+rendering
+renderings
+renders
+rendezvous
+rendezvoused
+rendezvouses
+rendezvousing
+rending
+rendition
+rendition's
+renditions
+rends
+renegotiable
+renegotiated
+renegotiates
+renew
+renewal
+renewals
+renewed
+renewer
+renewing
+renews
+reno
+renominated
+renominates
+renounce
+renounced
+renouncer
+renounces
+renouncing
+renown
+renowned
+rent
+rental
+rental's
+rentals
+rented
+renter
+renter's
+renters
+renting
+rents
+renumber
+renumbered
+renumbering
+renumbers
+reopen
+reopened
+reopening
+reopens
+reorder
+reordered
+reordering
+reorders
+reoriented
+repackage
+repackaged
+repackager
+repackages
+repackaging
+repacks
+repaid
+repaint
+repainted
+repainter
+repainters
+repainting
+repaints
+repair
+repaired
+repairer
+repairers
+repairing
+repairman
+repairs
+reparable
+reparation
+reparation's
+reparations
+repartition
+repartitioned
+repartitioner
+repartitioners
+repartitioning
+repartitions
+repast
+repast's
+repasts
+repaving
+repay
+repayable
+repaying
+repayments
+repays
+repeal
+repealed
+repealer
+repealing
+repeals
+repeat
+repeatable
+repeated
+repeatedly
+repeater
+repeaters
+repeating
+repeats
+repel
+repels
+repent
+repentance
+repented
+repenter
+repenting
+repents
+repercussion
+repercussion's
+repercussions
+repertoire
+repetition
+repetition's
+repetitions
+repetitive
+repetitively
+repetitiveness
+rephrase
+rephrased
+rephrases
+rephrasing
+repine
+repined
+repiner
+repining
+replace
+replaceable
+replaced
+replacement
+replacement's
+replacements
+replacer
+replaces
+replacing
+replanted
+replay
+replayed
+replaying
+replays
+repleader
+replenish
+replenished
+replenisher
+replenishes
+replenishing
+replete
+repleteness
+repletion
+replica
+replica's
+replicas
+replicate
+replicated
+replicates
+replicating
+replication
+replications
+replicative
+replied
+replier
+replies
+reply
+replying
+report
+reported
+reportedly
+reporter
+reporters
+reporting
+reports
+repose
+reposed
+reposes
+reposing
+reposition
+repositioned
+repositioning
+repositions
+repositories
+repository
+repository's
+repost
+reposted
+reposter
+reposting
+repostings
+reposts
+represent
+representable
+representably
+representation
+representation's
+representational
+representationally
+representations
+representative
+representatively
+representativeness
+representatives
+represented
+representer
+representing
+represents
+repress
+repressed
+represses
+repressing
+repression
+repression's
+repressions
+repressive
+repressively
+repressiveness
+reprieve
+reprieved
+reprieves
+reprieving
+reprint
+reprinted
+reprinter
+reprinting
+reprints
+reprisal
+reprisal's
+reprisals
+reproach
+reproached
+reproacher
+reproaches
+reproaching
+reproachingly
+reprobates
+reprocessed
+reproduce
+reproduced
+reproducer
+reproducers
+reproduces
+reproducibilities
+reproducibility
+reproducible
+reproducibly
+reproducing
+reproduction
+reproduction's
+reproductions
+reproductive
+reproductively
+reproductivity
+reprogrammed
+reprogrammer
+reprogrammer's
+reprogrammers
+reprogramming
+reproof
+reprove
+reproved
+reprover
+reproving
+reprovingly
+reptile
+reptile's
+reptiles
+republic
+republic's
+republican
+republican's
+republicans
+republication
+republics
+republish
+republished
+republisher
+republisher's
+republishers
+republishes
+republishing
+repudiate
+repudiated
+repudiates
+repudiating
+repudiation
+repudiations
+repulse
+repulsed
+repulses
+repulsing
+repulsion
+repulsions
+repulsive
+repulsively
+repulsiveness
+reputable
+reputably
+reputation
+reputation's
+reputations
+repute
+reputed
+reputedly
+reputes
+reputing
+request
+requested
+requester
+requesters
+requesting
+requestioned
+requests
+requiem
+requiem's
+requiems
+require
+required
+requirement
+requirement's
+requirements
+requirer
+requires
+requiring
+requisite
+requisiteness
+requisites
+requisition
+requisitioned
+requisitioner
+requisitioning
+requisitions
+requite
+requited
+requiter
+requiting
+reran
+reread
+rereading
+rereads
+reroute
+rerouted
+rerouter
+rerouters
+reroutes
+reroutings
+rerun
+rerunning
+reruns
+res
+resalable
+resaturated
+resaturates
+rescaled
+rescan
+rescanned
+rescanning
+rescans
+reschedule
+rescheduled
+rescheduler
+reschedules
+rescheduling
+rescue
+rescued
+rescuer
+rescuers
+rescues
+rescuing
+resealed
+research
+researched
+researcher
+researcher's
+researchers
+researches
+researching
+reselect
+reselected
+reselecting
+reselects
+resell
+reseller
+resellers
+reselling
+resells
+resemblance
+resemblance's
+resemblances
+resemble
+resembled
+resembles
+resembling
+resends
+resent
+resented
+resentful
+resentfully
+resentfulness
+resenting
+resentment
+resents
+resequenced
+reservation
+reservation's
+reservations
+reserve
+reserved
+reservedly
+reservedness
+reserver
+reserves
+reserving
+reservoir
+reservoir's
+reservoirs
+reset
+reseted
+reseter
+reseting
+resets
+resetting
+resettings
+resettled
+resettles
+resettling
+reshape
+reshaped
+reshaper
+reshapes
+reshaping
+reside
+resided
+residence
+residence's
+residences
+resident
+resident's
+residential
+residentially
+residents
+resider
+resides
+residing
+residue
+residue's
+residues
+resifted
+resign
+resignation
+resignation's
+resignations
+resigned
+resignedly
+resignedness
+resigner
+resigning
+resigns
+resin
+resin's
+resined
+resining
+resins
+resist
+resistance
+resistances
+resistant
+resistantly
+resisted
+resister
+resistible
+resistibly
+resisting
+resistive
+resistively
+resistiveness
+resistivity
+resistor
+resistor's
+resistors
+resists
+resize
+resized
+resizes
+resizing
+resold
+resoluble
+resolute
+resolutely
+resoluteness
+resolution
+resolutions
+resolutive
+resolvable
+resolve
+resolved
+resolver
+resolvers
+resolves
+resolving
+resonance
+resonances
+resonant
+resonantly
+resort
+resorted
+resorter
+resorting
+resorts
+resound
+resounding
+resoundingly
+resounds
+resource
+resource's
+resourced
+resourceful
+resourcefully
+resourcefulness
+resources
+resourcing
+respecified
+respect
+respectability
+respectable
+respectableness
+respectably
+respected
+respecter
+respectful
+respectfully
+respectfulness
+respecting
+respective
+respectively
+respectiveness
+respects
+respiration
+respirations
+respired
+respires
+respite
+respited
+respiting
+resplendent
+resplendently
+respond
+responded
+respondent
+respondent's
+respondents
+responder
+responders
+responding
+responds
+response
+responser
+responses
+responsibilities
+responsibility
+responsible
+responsibleness
+responsibly
+responsions
+responsive
+responsively
+responsiveness
+rest
+restart
+restarted
+restarter
+restarting
+restarts
+restate
+restated
+restatement
+restates
+restating
+restaurant
+restaurant's
+restaurants
+rested
+rester
+restful
+restfully
+restfulness
+resting
+restive
+restively
+restiveness
+restless
+restlessly
+restlessness
+restoration
+restoration's
+restorations
+restore
+restored
+restorer
+restorers
+restores
+restoring
+restrain
+restrained
+restrainedly
+restrainer
+restrainers
+restraining
+restrains
+restraint
+restraint's
+restraints
+restrict
+restricted
+restrictedly
+restricting
+restriction
+restriction's
+restrictions
+restrictive
+restrictively
+restrictiveness
+restricts
+restroom
+restroom's
+restrooms
+restructure
+restructured
+restructures
+restructuring
+rests
+resubmit
+resubmits
+resubmitted
+resubmitting
+result
+resultant
+resultantly
+resultants
+resulted
+resulting
+results
+resumable
+resume
+resumed
+resumes
+resuming
+resumption
+resumption's
+resumptions
+resupplier
+resupplier's
+resuppliers
+resurface
+resurfaced
+resurfacer
+resurfacer's
+resurfacers
+resurfaces
+resurfacing
+resurged
+resurges
+resurrect
+resurrected
+resurrecting
+resurrection
+resurrection's
+resurrections
+resurrects
+resuspended
+retail
+retailed
+retailer
+retailers
+retailing
+retails
+retain
+retained
+retainer
+retainers
+retaining
+retainment
+retains
+retaliation
+retard
+retarded
+retarder
+retarding
+retention
+retentions
+retentive
+retentively
+retentiveness
+rethinks
+rethreading
+reticence
+reticent
+reticently
+reticle
+reticle's
+reticles
+reticular
+reticulate
+reticulated
+reticulately
+reticulates
+reticulating
+reticulation
+retied
+retina
+retina's
+retinal
+retinas
+retinue
+retinues
+retire
+retired
+retiredly
+retiredness
+retirement
+retirement's
+retirements
+retires
+retiring
+retiringly
+retiringness
+retitled
+retold
+retort
+retorted
+retorting
+retorts
+retrace
+retraced
+retraces
+retracing
+retract
+retractable
+retracted
+retracting
+retraction
+retractions
+retractor
+retractor's
+retractors
+retracts
+retrain
+retrained
+retraining
+retrains
+retranslated
+retransmission
+retransmission's
+retransmissions
+retransmit
+retransmits
+retransmitted
+retransmitting
+retreat
+retreated
+retreater
+retreating
+retreats
+retried
+retrier
+retriers
+retries
+retrievable
+retrieval
+retrieval's
+retrievals
+retrieve
+retrieved
+retriever
+retrievers
+retrieves
+retrieving
+retroactively
+retrospect
+retrospection
+retrospective
+retrospectively
+retry
+retrying
+return
+returnable
+returned
+returner
+returners
+returning
+returns
+retype
+retyped
+retypes
+retyping
+reunion
+reunion's
+reunions
+reunite
+reunited
+reuniting
+reupholstering
+reusable
+reuse
+reused
+reuses
+reusing
+revalidated
+revalidates
+revalidation
+revalued
+revalues
+revamp
+revamped
+revamping
+revamps
+reveal
+revealed
+revealer
+revealing
+reveals
+revel
+revelation
+revelation's
+revelations
+revelry
+revels
+revenge
+revenge's
+revenged
+revenger
+revenges
+revenging
+revenue
+revenuer
+revenuers
+revenues
+revere
+revered
+reverence
+reverencer
+reverend
+reverend's
+reverends
+reverently
+reveres
+reverified
+reverifies
+reverify
+reverifying
+revering
+reversal
+reversal's
+reversals
+reverse
+reversed
+reversely
+reverser
+reverses
+reversible
+reversing
+reversion
+reversioner
+reversions
+revert
+reverted
+reverter
+reverting
+revertive
+reverts
+revetting
+review
+reviewed
+reviewer
+reviewers
+reviewing
+reviews
+revile
+reviled
+reviler
+reviling
+revise
+revised
+reviser
+revises
+revising
+revision
+revision's
+revisions
+revisit
+revisited
+revisiting
+revisits
+revival
+revival's
+revivals
+revive
+revived
+reviver
+revives
+reviving
+revocation
+revocations
+revoke
+revoked
+revoker
+revokes
+revoking
+revolt
+revolted
+revolter
+revolting
+revoltingly
+revolts
+revolution
+revolution's
+revolutionaries
+revolutionariness
+revolutionary
+revolutionary's
+revolutions
+revolve
+revolved
+revolver
+revolvers
+revolves
+revolving
+reward
+rewarded
+rewarder
+rewarding
+rewardingly
+rewards
+rewind
+rewinded
+rewinder
+rewinding
+rewinds
+rewired
+rewires
+reword
+reworded
+rewording
+rewording's
+rewordings
+rewords
+rework
+reworked
+reworking
+reworks
+rewound
+rewrite
+rewriter
+rewrites
+rewriting
+rewritings
+rewritten
+rewrote
+rhetoric
+rheumatism
+rhinoceros
+rhubarb
+rhyme
+rhymed
+rhymer
+rhymes
+rhyming
+rhythm
+rhythm's
+rhythmic
+rhythmical
+rhythmically
+rhythmics
+rhythms
+rib
+rib's
+ribbed
+ribbing
+ribbon
+ribbon's
+ribbons
+ribs
+rice
+ricer
+rices
+rich
+richen
+richened
+richening
+richer
+riches
+richest
+richly
+richness
+rickshaw
+rickshaw's
+rickshaws
+rid
+ridden
+riddle
+riddled
+riddler
+riddles
+riddling
+ride
+rider
+rider's
+riders
+rides
+ridge
+ridge's
+ridged
+ridges
+ridging
+ridicule
+ridiculed
+ridiculer
+ridicules
+ridiculing
+ridiculous
+ridiculously
+ridiculousness
+riding
+ridings
+rids
+rifle
+rifled
+rifleman
+rifler
+rifles
+rifling
+rift
+rig
+rig's
+rigged
+rigging
+right
+righted
+righten
+righteous
+righteously
+righteousness
+righter
+rightful
+rightfully
+rightfulness
+righting
+rightly
+rightmost
+rightness
+rights
+rightward
+rightwards
+rigid
+rigidities
+rigidity
+rigidly
+rigidness
+rigorous
+rigorously
+rigorousness
+rigs
+rill
+rim
+rim's
+rime
+rimer
+riming
+rims
+rind
+rind's
+rinded
+rinds
+ring
+ringed
+ringer
+ringers
+ringing
+ringingly
+ringings
+rings
+rinse
+rinsed
+rinser
+rinses
+rinsing
+riot
+rioted
+rioter
+rioters
+rioting
+riotous
+riotously
+riotousness
+riots
+rip
+ripe
+ripely
+ripen
+ripened
+ripener
+ripeness
+ripening
+ripens
+riper
+ripest
+ripped
+ripping
+ripple
+rippled
+rippler
+ripples
+rippling
+rips
+rise
+risen
+riser
+risers
+rises
+rising
+risings
+risk
+risked
+risker
+risking
+risks
+rite
+rite's
+rited
+rites
+ritual
+ritually
+rituals
+rival
+rivalries
+rivalry
+rivalry's
+rivals
+rive
+rived
+riven
+river
+river's
+rivers
+riverside
+rivet
+riveted
+riveter
+riveting
+rivets
+riving
+rivulet
+rivulet's
+rivulets
+road
+road's
+roads
+roadside
+roadsides
+roadster
+roadster's
+roadsters
+roadway
+roadway's
+roadways
+roam
+roamed
+roamer
+roaming
+roams
+roar
+roared
+roarer
+roaring
+roaringest
+roars
+roast
+roasted
+roaster
+roasting
+roasts
+rob
+robbed
+robber
+robber's
+robberies
+robbers
+robbery
+robbery's
+robbing
+robe
+robed
+robes
+robin
+robin's
+robing
+robins
+robot
+robot's
+robotic
+robotics
+robots
+robs
+robust
+robustly
+robustness
+rock
+rocked
+rocker
+rockers
+rocket
+rocket's
+rocketed
+rocketing
+rockets
+rockier
+rockies
+rockiness
+rocking
+rocks
+rocky
+rod
+rod's
+rode
+rods
+roe
+roes
+rogue
+rogue's
+rogues
+roguing
+role
+role's
+roles
+roll
+rolled
+roller
+rollers
+rolling
+rolls
+romance
+romanced
+romancer
+romancers
+romances
+romancing
+romantic
+romantic's
+romantically
+romantics
+romp
+romped
+romper
+rompers
+romping
+romps
+roof
+roofed
+roofer
+roofers
+roofing
+roofs
+rook
+rooks
+room
+roomed
+roomer
+roomers
+rooming
+rooms
+roost
+rooster
+roosters
+root
+root's
+rooted
+rootedness
+rooter
+rooting
+roots
+rope
+roped
+roper
+ropers
+ropes
+roping
+rose
+rose's
+rosebud
+rosebud's
+rosebuds
+roses
+rosier
+rosiness
+rosy
+rot
+rotary
+rotate
+rotated
+rotates
+rotating
+rotation
+rotational
+rotationally
+rotations
+rotative
+rotatively
+rotator
+rotator's
+rotators
+rots
+rotten
+rottenly
+rottenness
+rouge
+rough
+roughed
+roughen
+roughened
+roughening
+roughens
+rougher
+roughest
+roughly
+roughness
+rouging
+round
+roundabout
+roundaboutness
+rounded
+roundedness
+rounder
+rounders
+roundest
+rounding
+roundly
+roundness
+roundoff
+rounds
+roundup
+roundup's
+roundups
+rouse
+roused
+rouser
+rouses
+rousing
+rout
+route
+routed
+router
+routers
+routes
+routine
+routinely
+routines
+routing
+routings
+rove
+roved
+rover
+roves
+roving
+row
+rowed
+rowen
+rower
+rowers
+rowing
+rows
+royal
+royalist
+royalist's
+royalists
+royally
+royalties
+royalty
+royalty's
+rub
+rubbed
+rubber
+rubber's
+rubbers
+rubbing
+rubbish
+rubbishes
+rubble
+rubbled
+rubbling
+rubies
+rubout
+rubs
+ruby
+ruby's
+rudder
+rudder's
+rudders
+ruddier
+ruddiness
+ruddy
+rude
+rudely
+rudeness
+ruder
+rudest
+rudiment
+rudiment's
+rudimentariness
+rudimentary
+rudiments
+rue
+ruefully
+rues
+ruffian
+ruffianly
+ruffians
+ruffle
+ruffled
+ruffler
+ruffles
+ruffling
+rug
+rug's
+rugged
+ruggedly
+ruggedness
+rugs
+ruin
+ruination
+ruination's
+ruinations
+ruined
+ruiner
+ruing
+ruining
+ruinous
+ruinously
+ruinousness
+ruins
+rule
+ruled
+ruler
+rulers
+rules
+ruling
+rulings
+rum
+rumble
+rumbled
+rumbler
+rumbles
+rumbling
+rumen
+rumens
+rump
+rumple
+rumpled
+rumples
+rumplier
+rumpling
+rumply
+rumps
+run
+runaway
+runaways
+rung
+rung's
+rungs
+runnable
+runner
+runner's
+runners
+running
+runs
+runtime
+rupture
+ruptured
+ruptures
+rupturing
+rural
+rurally
+rush
+rushed
+rusher
+rushes
+rushing
+russet
+russeted
+russeting
+russets
+rust
+rusted
+rustic
+rusticate
+rusticated
+rusticates
+rusticating
+rustication
+rustier
+rustiness
+rusting
+rustle
+rustled
+rustler
+rustlers
+rustles
+rustling
+rusts
+rusty
+rut
+rut's
+ruthless
+ruthlessly
+ruthlessness
+ruts
+rye
+rye's
+sable
+sable's
+sables
+sabotage
+sabotaged
+sabotages
+sabotaging
+sack
+sacked
+sacker
+sacking
+sacks
+sacred
+sacredly
+sacredness
+sacrifice
+sacrificed
+sacrificer
+sacrificers
+sacrifices
+sacrificial
+sacrificially
+sacrificing
+sad
+sadden
+saddened
+saddening
+saddens
+sadder
+saddest
+saddle
+saddled
+saddler
+saddles
+saddling
+sadism
+sadist
+sadist's
+sadistic
+sadistically
+sadists
+sadly
+sadness
+safe
+safeguard
+safeguarded
+safeguarding
+safeguards
+safely
+safeness
+safer
+safes
+safest
+safetied
+safeties
+safety
+safetying
+sag
+sagacious
+sagaciously
+sagaciousness
+sagacity
+sage
+sagely
+sageness
+sages
+sags
+said
+sail
+sailed
+sailer
+sailing
+sailor
+sailorly
+sailors
+sails
+saint
+sainted
+saintliness
+saintly
+saints
+sake
+saker
+sakes
+salable
+salad
+salad's
+salads
+salaried
+salaries
+salary
+sale
+sale's
+sales
+salesman
+salesmen
+salespeople
+salespeople's
+salesperson
+salesperson's
+salient
+saliently
+saline
+saliva
+sallied
+sallies
+sallow
+sallowness
+sally
+sallying
+salmon
+salmons
+salon
+salon's
+salons
+saloon
+saloon's
+saloons
+salt
+salted
+salter
+salters
+saltier
+saltiest
+saltiness
+salting
+saltness
+salts
+salty
+salutariness
+salutary
+salutation
+salutation's
+salutations
+salute
+saluted
+saluter
+salutes
+saluting
+salvage
+salvaged
+salvager
+salvages
+salvaging
+salvation
+salve
+salver
+salves
+salving
+same
+sameness
+sample
+sample's
+sampled
+sampler
+samplers
+samples
+sampling
+samplings
+sanctification
+sanctified
+sanctifier
+sanctify
+sanction
+sanctioned
+sanctioning
+sanctions
+sanctities
+sanctity
+sanctuaries
+sanctuary
+sanctuary's
+sand
+sandal
+sandal's
+sandals
+sanded
+sander
+sanders
+sandier
+sandiness
+sanding
+sandpaper
+sands
+sandstone
+sandstones
+sandwich
+sandwiched
+sandwiches
+sandwiching
+sandy
+sane
+sanely
+saneness
+saner
+sanest
+sang
+sanguine
+sanguinely
+sanguineness
+sanitarium
+sanitariums
+sanitary
+sanitation
+sanity
+sank
+sap
+sap's
+sapling
+sapling's
+saplings
+sapphire
+saps
+sarcasm
+sarcasm's
+sarcasms
+sarcastic
+sash
+sashed
+sashes
+sat
+satchel
+satchel's
+satchels
+sate
+sated
+satellite
+satellite's
+satellites
+sates
+satin
+sating
+satire
+satire's
+satires
+satirist
+satirist's
+satirists
+satisfaction
+satisfaction's
+satisfactions
+satisfactorily
+satisfactoriness
+satisfactory
+satisfiability
+satisfiable
+satisfied
+satisfier
+satisfiers
+satisfies
+satisfy
+satisfying
+satisfyingly
+saturate
+saturated
+saturater
+saturates
+saturating
+saturation
+saturations
+satyr
+sauce
+saucepan
+saucepan's
+saucepans
+saucer
+saucers
+sauces
+saucier
+sauciness
+saucing
+saucy
+saunter
+sauntered
+saunterer
+sauntering
+saunters
+sausage
+sausage's
+sausages
+savage
+savaged
+savagely
+savageness
+savager
+savagers
+savages
+savaging
+save
+saved
+saver
+savers
+saves
+saving
+savings
+saw
+sawed
+sawer
+sawing
+sawmill
+sawmill's
+sawmills
+saws
+sawtooth
+say
+sayer
+sayers
+saying
+sayings
+says
+scabbard
+scabbard's
+scabbards
+scaffold
+scaffolding
+scaffoldings
+scaffolds
+scalable
+scalar
+scalar's
+scalars
+scald
+scalded
+scalding
+scalds
+scale
+scaled
+scaler
+scalers
+scales
+scalier
+scaliness
+scaling
+scalings
+scallop
+scalloped
+scalloper
+scalloping
+scallops
+scalp
+scalp's
+scalper
+scalping
+scalps
+scaly
+scam
+scam's
+scamper
+scampered
+scampering
+scampers
+scams
+scan
+scandal
+scandal's
+scandalous
+scandalously
+scandalousness
+scandals
+scanned
+scanner
+scanner's
+scanners
+scanning
+scans
+scant
+scantier
+scanties
+scantiest
+scantily
+scantiness
+scantly
+scantness
+scanty
+scar
+scar's
+scarce
+scarcely
+scarceness
+scarcer
+scarcest
+scarcity
+scare
+scared
+scarer
+scares
+scarf
+scarfs
+scarier
+scaring
+scarlet
+scars
+scary
+scatter
+scattered
+scatterer
+scattering
+scatteringly
+scatters
+scavenger
+scavenger's
+scavengers
+scenario
+scenario's
+scenarios
+scene
+scene's
+sceneries
+scenery
+scenes
+scenic
+scenics
+scent
+scented
+scents
+schedule
+schedule's
+scheduled
+scheduler
+scheduler's
+schedulers
+schedules
+scheduling
+schema
+schema's
+schemas
+schemata
+schematic
+schematically
+schematics
+scheme
+scheme's
+schemed
+schemer
+schemers
+schemes
+scheming
+schizophrenia
+scholar
+scholarly
+scholars
+scholarship
+scholarship's
+scholarships
+scholastic
+scholastically
+scholastics
+school
+schoolboy
+schoolboy's
+schoolboys
+schooled
+schooler
+schoolers
+schoolhouse
+schoolhouse's
+schoolhouses
+schooling
+schoolmaster
+schoolmaster's
+schoolmasters
+schoolroom
+schoolroom's
+schoolrooms
+schools
+schoolyard
+schoolyard's
+schoolyards
+schooner
+science
+science's
+sciences
+scientific
+scientifically
+scientist
+scientist's
+scientists
+scissor
+scissored
+scissoring
+scissors
+scoff
+scoffed
+scoffer
+scoffing
+scoffs
+scold
+scolded
+scolder
+scolding
+scolds
+scoop
+scooped
+scooper
+scooping
+scoops
+scope
+scoped
+scopes
+scoping
+scorch
+scorched
+scorcher
+scorches
+scorching
+scorchingly
+score
+score's
+scored
+scorer
+scorers
+scores
+scoring
+scorings
+scorn
+scorned
+scorner
+scornful
+scornfully
+scornfulness
+scorning
+scorns
+scorpion
+scorpion's
+scorpions
+scoundrel
+scoundrel's
+scoundrelly
+scoundrels
+scour
+scoured
+scourer
+scourge
+scourger
+scourging
+scouring
+scourings
+scours
+scout
+scouted
+scouter
+scouting
+scouts
+scow
+scowl
+scowled
+scowler
+scowling
+scowls
+scramble
+scrambled
+scrambler
+scrambles
+scrambling
+scrap
+scrap's
+scrape
+scraped
+scraper
+scrapers
+scrapes
+scraping
+scrapings
+scrapped
+scraps
+scratch
+scratched
+scratcher
+scratchers
+scratches
+scratching
+scrawl
+scrawled
+scrawler
+scrawling
+scrawls
+scream
+screamed
+screamer
+screamers
+screaming
+screamingly
+screams
+screech
+screeched
+screecher
+screeches
+screeching
+screen
+screened
+screener
+screening
+screenings
+screens
+screw
+screwed
+screwer
+screwing
+screws
+scribble
+scribbled
+scribbler
+scribbles
+scribbling
+scribe
+scriber
+scribes
+scribing
+script
+script's
+scripted
+scripting
+scripts
+scripture
+scriptures
+scroll
+scrolled
+scrolling
+scrolls
+scrooge
+scrooge's
+scrooges
+scrub
+scrubs
+scruple
+scrupled
+scruples
+scrupling
+scrupulous
+scrupulously
+scrupulousness
+scrutiny
+scuffle
+scuffled
+scuffles
+scuffling
+sculpt
+sculpted
+sculpting
+sculptor
+sculptor's
+sculptors
+sculpts
+sculpture
+sculptured
+sculptures
+sculpturing
+scum
+scum's
+scums
+scurried
+scurry
+scurrying
+scuttle
+scuttled
+scuttles
+scuttling
+scythe
+scythe's
+scythes
+scything
+sea
+seaboard
+seacoast
+seacoast's
+seacoasts
+seal
+sealed
+sealer
+sealing
+seals
+sealy
+seam
+seaman
+seamanly
+seamed
+seamen
+seamer
+seaming
+seams
+seaport
+seaport's
+seaports
+sear
+search
+searched
+searcher
+searcher's
+searchers
+searches
+searching
+searchingly
+searchings
+seared
+searing
+searingly
+sears
+seas
+seashore
+seashore's
+seashores
+seaside
+season
+season's
+seasonable
+seasonableness
+seasonably
+seasonal
+seasonally
+seasoned
+seasoner
+seasoners
+seasoning
+seasonings
+seasonly
+seasons
+seat
+seated
+seater
+seating
+seats
+seaward
+seawards
+seaweed
+seaweeds
+secede
+seceded
+seceder
+secedes
+seceding
+secluded
+secludedly
+secludedness
+seclusion
+second
+secondaries
+secondarily
+secondariness
+secondary
+seconded
+seconder
+seconders
+secondhand
+seconding
+secondly
+seconds
+secrecy
+secret
+secretarial
+secretaries
+secretary
+secretary's
+secrete
+secreted
+secretes
+secreting
+secretion
+secretions
+secretive
+secretively
+secretiveness
+secretly
+secrets
+sect
+sect's
+section
+sectional
+sectionally
+sectioned
+sectioning
+sections
+sector
+sector's
+sectored
+sectoring
+sectors
+sects
+secular
+secularly
+secure
+secured
+securely
+secureness
+securer
+secures
+securing
+securings
+securities
+security
+sedge
+sediment
+sediment's
+sediments
+seduce
+seduced
+seducer
+seducers
+seduces
+seducing
+seductive
+seductively
+seductiveness
+see
+seed
+seeded
+seeder
+seeders
+seeding
+seedings
+seedling
+seedling's
+seedlings
+seeds
+seeing
+seek
+seeker
+seekers
+seeking
+seekingly
+seeks
+seem
+seemed
+seeming
+seemingly
+seemlier
+seemliness
+seemly
+seems
+seen
+seep
+seeped
+seeping
+seeps
+seer
+seers
+sees
+seethe
+seethed
+seethes
+seething
+segment
+segmentation
+segmentation's
+segmentations
+segmented
+segmenting
+segments
+segregate
+segregated
+segregates
+segregating
+segregation
+segregative
+seismic
+seizable
+seize
+seized
+seizer
+seizers
+seizes
+seizin
+seizing
+seizings
+seizins
+seizor
+seizors
+seizure
+seizure's
+seizures
+seldom
+select
+selected
+selecting
+selection
+selection's
+selections
+selective
+selectively
+selectiveness
+selectivity
+selectness
+selector
+selector's
+selectors
+selects
+self
+selfish
+selfishly
+selfishness
+selfness
+selfsame
+selfsameness
+sell
+seller
+sellers
+selling
+sells
+selves
+semantic
+semantical
+semantically
+semanticist
+semanticist's
+semanticists
+semantics
+semaphore
+semaphore's
+semaphores
+semblance
+semester
+semester's
+semesters
+semiautomated
+semicolon
+semicolon's
+semicolons
+semiconductor
+semiconductor's
+semiconductors
+seminal
+seminally
+seminar
+seminar's
+seminaries
+seminars
+seminary
+seminary's
+semipermanent
+semipermanently
+senate
+senate's
+senates
+senator
+senator's
+senators
+send
+sender
+senders
+sending
+sends
+senior
+senior's
+seniority
+seniors
+sensation
+sensation's
+sensational
+sensationally
+sensations
+sense
+sensed
+senseless
+senselessly
+senselessness
+senses
+sensibilities
+sensibility
+sensible
+sensibleness
+sensibly
+sensing
+sensitive
+sensitively
+sensitiveness
+sensitives
+sensitivities
+sensitivity
+sensor
+sensor's
+sensors
+sensory
+sent
+sentence
+sentenced
+sentences
+sentencing
+sentential
+sententially
+sentiment
+sentiment's
+sentimental
+sentimentally
+sentiments
+sentinel
+sentinel's
+sentinels
+sentries
+sentry
+sentry's
+separable
+separableness
+separate
+separated
+separately
+separateness
+separates
+separating
+separation
+separations
+separative
+separator
+separator's
+separators
+sequel
+sequel's
+sequels
+sequence
+sequenced
+sequencer
+sequencers
+sequences
+sequencing
+sequencings
+sequential
+sequentiality
+sequentially
+sequester
+sequestered
+sequestering
+serendipitous
+serendipitously
+serendipity
+serene
+serenely
+sereneness
+serenity
+serf
+serf's
+serfs
+sergeant
+sergeant's
+sergeants
+serial
+serially
+serials
+series
+serious
+seriously
+seriousness
+sermon
+sermon's
+sermons
+serpent
+serpent's
+serpentine
+serpentinely
+serpents
+serum
+serum's
+serums
+servant
+servant's
+servants
+serve
+served
+server
+server's
+servers
+serves
+service
+serviceable
+serviceableness
+serviced
+servicer
+services
+servicing
+servile
+servilely
+servileness
+serving
+servings
+servitude
+session
+session's
+sessions
+set
+set's
+sets
+setter
+setter's
+setters
+setting
+settings
+settle
+settled
+settlement
+settlement's
+settlements
+settler
+settlers
+settles
+settling
+settlings
+setup
+setups
+seven
+sevens
+seventeen
+seventeens
+seventeenth
+seventh
+seventies
+seventieth
+seventy
+sever
+several
+severally
+severals
+severance
+severe
+severed
+severely
+severeness
+severer
+severest
+severing
+severities
+severity
+severity's
+severs
+sew
+sewed
+sewer
+sewers
+sewing
+sews
+sex
+sexed
+sexes
+sexism
+sexism's
+sexist
+sexist's
+sexists
+sexual
+sexuality
+sexually
+shabbier
+shabbiness
+shabby
+shack
+shacked
+shackle
+shackled
+shackler
+shackles
+shackling
+shacks
+shade
+shaded
+shader
+shades
+shadier
+shadiest
+shadily
+shadiness
+shading
+shadings
+shadow
+shadowed
+shadower
+shadowiness
+shadowing
+shadows
+shadowy
+shady
+shaft
+shaft's
+shafted
+shafting
+shafts
+shaggier
+shagginess
+shaggy
+shakable
+shakably
+shake
+shaken
+shaker
+shakers
+shakes
+shakier
+shakiness
+shaking
+shaky
+shale
+shales
+shall
+shallow
+shallower
+shallowly
+shallowness
+shallows
+sham
+sham's
+shambles
+shame
+shamed
+shameful
+shamefully
+shamefulness
+shameless
+shamelessly
+shamelessness
+shames
+shaming
+shams
+shan't
+shanties
+shanty
+shanty's
+shape
+shaped
+shapeless
+shapelessly
+shapelessness
+shapelier
+shapeliness
+shapely
+shaper
+shapers
+shapes
+shaping
+sharable
+share
+sharecropper
+sharecropper's
+sharecroppers
+shared
+shareholder
+shareholder's
+shareholders
+sharer
+sharers
+shares
+sharing
+shark
+shark's
+sharks
+sharp
+sharped
+sharpen
+sharpened
+sharpener
+sharpening
+sharpens
+sharper
+sharpest
+sharping
+sharply
+sharpness
+sharps
+shatter
+shattered
+shattering
+shatteringly
+shatters
+shave
+shaved
+shaven
+shaver
+shaves
+shaving
+shavings
+shawl
+shawl's
+shawls
+she
+she'd
+she'll
+she's
+sheaf
+shear
+sheared
+shearer
+shearers
+shearing
+shears
+sheath
+sheather
+sheathing
+sheaths
+sheaves
+shed
+sheds
+sheep
+sheer
+sheered
+sheerly
+sheerness
+sheet
+sheeted
+sheeter
+sheeting
+sheets
+shelf
+shelfs
+shell
+shell's
+shelled
+sheller
+shelling
+shells
+shelter
+sheltered
+shelterer
+sheltering
+shelters
+shelve
+shelved
+shelver
+shelves
+shelving
+shepherd
+shepherd's
+shepherded
+shepherding
+shepherds
+sheriff
+sheriff's
+sheriffs
+shied
+shield
+shielded
+shielder
+shielding
+shields
+shier
+shies
+shiest
+shift
+shifted
+shifter
+shifters
+shiftier
+shiftiest
+shiftily
+shiftiness
+shifting
+shifts
+shifty
+shilling
+shillings
+shimmer
+shimmered
+shimmering
+shin
+shine
+shined
+shiner
+shiners
+shines
+shingle
+shingle's
+shingled
+shingler
+shingles
+shingling
+shinier
+shininess
+shining
+shiningly
+shiny
+ship
+ship's
+shipboard
+shipboards
+shipbuilding
+shipment
+shipment's
+shipments
+shippable
+shipped
+shipper
+shipper's
+shippers
+shipping
+ships
+shipwreck
+shipwrecked
+shipwrecks
+shirk
+shirker
+shirking
+shirks
+shirt
+shirting
+shirts
+shit
+shiver
+shivered
+shiverer
+shivering
+shivers
+shoal
+shoal's
+shoals
+shock
+shocked
+shocker
+shockers
+shocking
+shockingly
+shocks
+shod
+shoe
+shoed
+shoeing
+shoemaker
+shoer
+shoes
+shone
+shook
+shoot
+shooter
+shooters
+shooting
+shootings
+shoots
+shop
+shop's
+shopkeeper
+shopkeeper's
+shopkeepers
+shopped
+shopper
+shopper's
+shoppers
+shopping
+shops
+shore
+shore's
+shored
+shores
+shoring
+shorn
+short
+shortage
+shortage's
+shortages
+shortcoming
+shortcoming's
+shortcomings
+shortcut
+shortcut's
+shortcuts
+shorted
+shorten
+shortened
+shortener
+shortening
+shortens
+shorter
+shortest
+shorthand
+shorthanded
+shorthands
+shorting
+shortly
+shortness
+shorts
+shot
+shot's
+shotgun
+shotgun's
+shotguns
+shots
+should
+shoulder
+shouldered
+shouldering
+shoulders
+shouldest
+shouldn't
+shout
+shouted
+shouter
+shouters
+shouting
+shouts
+shove
+shoved
+shovel
+shovels
+shover
+shoves
+shoving
+show
+showed
+shower
+showered
+showering
+showers
+showing
+showings
+shown
+shows
+shrank
+shred
+shred's
+shredder
+shredder's
+shredders
+shreds
+shrew
+shrew's
+shrewd
+shrewdest
+shrewdly
+shrewdness
+shrews
+shriek
+shrieked
+shrieking
+shrieks
+shrill
+shrilled
+shrilling
+shrillness
+shrilly
+shrimp
+shrine
+shrine's
+shrines
+shrink
+shrinkable
+shrinker
+shrinking
+shrinks
+shrivel
+shrivels
+shroud
+shrouded
+shrouding
+shrouds
+shrub
+shrub's
+shrubbery
+shrubs
+shrug
+shrugs
+shrunk
+shrunken
+shudder
+shuddered
+shuddering
+shudders
+shuffle
+shuffled
+shuffler
+shuffles
+shuffling
+shun
+shuns
+shut
+shutdown
+shutdown's
+shutdowns
+shuts
+shutter
+shuttered
+shuttering
+shutters
+shutting
+shuttle
+shuttled
+shuttles
+shuttling
+shy
+shying
+shyly
+shyness
+sibling
+sibling's
+siblings
+sick
+sicken
+sickened
+sickener
+sickening
+sickeningly
+sicker
+sickerly
+sickest
+sicking
+sickle
+sickled
+sicklied
+sickliness
+sickling
+sickly
+sicklying
+sickness
+sickness's
+sicknesses
+sicks
+side
+sideboard
+sideboard's
+sideboards
+sideburns
+sided
+sidedness
+sidelight
+sidelight's
+sidelights
+sides
+sidetrack
+sidetracked
+sidetracking
+sidetracks
+sidewalk
+sidewalk's
+sidewalks
+sideways
+sidewise
+siding
+sidings
+siege
+siege's
+sieges
+sieging
+sierra
+sierras
+sieve
+sieve's
+sievers
+sieves
+sieving
+sift
+sifted
+sifter
+sifting
+siftings
+sifts
+sigh
+sighed
+sigher
+sighing
+sighs
+sight
+sighted
+sighter
+sighting
+sightings
+sightliness
+sightly
+sights
+sign
+signal
+signally
+signals
+signature
+signature's
+signatures
+signed
+signer
+signers
+signet
+significance
+significances
+significant
+significantly
+significants
+signification
+signified
+signifier
+signifies
+signify
+signifying
+signing
+signs
+silence
+silenced
+silencer
+silencers
+silences
+silencing
+silent
+silently
+silentness
+silents
+silhouette
+silhouetted
+silhouettes
+silicon
+silicone
+silicons
+silk
+silken
+silkier
+silkiest
+silkily
+silkiness
+silks
+silky
+sill
+sill's
+sillier
+silliest
+silliness
+sills
+silly
+silt
+silted
+silting
+silts
+silver
+silvered
+silverer
+silveriness
+silvering
+silverly
+silvers
+silvery
+similar
+similarities
+similarity
+similarly
+similitude
+simmer
+simmered
+simmering
+simmers
+simple
+simpleness
+simpler
+simples
+simplest
+simplex
+simplexes
+simplicities
+simplicity
+simplicity's
+simplification
+simplifications
+simplified
+simplifier
+simplifiers
+simplifies
+simplify
+simplifying
+simplistic
+simply
+simulate
+simulated
+simulates
+simulating
+simulation
+simulations
+simulative
+simulator
+simulator's
+simulators
+simultaneity
+simultaneous
+simultaneously
+simultaneousness
+sin
+sin's
+since
+sincere
+sincerely
+sincereness
+sincerest
+sincerity
+sine
+sines
+sinew
+sinew's
+sinews
+sinful
+sinfully
+sinfulness
+sing
+singable
+singed
+singer
+singer's
+singers
+singing
+singingly
+single
+singled
+singleness
+singles
+singleton
+singleton's
+singletons
+singling
+singly
+sings
+singular
+singularities
+singularity
+singularity's
+singularly
+sining
+sinister
+sinisterly
+sinisterness
+sink
+sinked
+sinker
+sinkers
+sinkhole
+sinkholes
+sinking
+sinks
+sinned
+sinner
+sinner's
+sinners
+sinning
+sins
+sinusoidal
+sinusoidally
+sinusoids
+sip
+sips
+sir
+sire
+sired
+siren
+sirens
+sires
+siring
+sirs
+sirup
+sister
+sister's
+sistered
+sistering
+sisterly
+sisters
+sit
+site
+site's
+sited
+sites
+siting
+sits
+sitter
+sitter's
+sitters
+sitting
+sittings
+situate
+situated
+situates
+situating
+situation
+situational
+situationally
+situations
+six
+sixes
+sixpence
+sixpences
+sixteen
+sixteens
+sixteenth
+sixth
+sixthly
+sixties
+sixtieth
+sixty
+sizable
+sizableness
+size
+sized
+sizer
+sizers
+sizes
+sizing
+sizings
+skate
+skated
+skater
+skater's
+skaters
+skates
+skating
+skeletal
+skeletally
+skeleton
+skeleton's
+skeletons
+skeptic
+skeptic's
+skeptical
+skeptically
+skeptics
+sketch
+sketched
+sketcher
+sketches
+sketchier
+sketchily
+sketchiness
+sketching
+sketchy
+skew
+skewed
+skewer
+skewered
+skewering
+skewers
+skewing
+skewness
+skews
+ski
+skied
+skien
+skier
+skies
+skiing
+skill
+skilled
+skillful
+skillfully
+skillfulness
+skilling
+skills
+skim
+skim's
+skimmed
+skimmer
+skimmer's
+skimmers
+skimming
+skimmings
+skimp
+skimped
+skimping
+skimps
+skims
+skin
+skin's
+skinned
+skinner
+skinner's
+skinners
+skinning
+skins
+skip
+skipped
+skipper
+skipper's
+skippered
+skippering
+skippers
+skipping
+skips
+skirmish
+skirmished
+skirmisher
+skirmishers
+skirmishes
+skirmishing
+skirt
+skirted
+skirter
+skirting
+skirts
+skis
+skulk
+skulked
+skulker
+skulking
+skulks
+skull
+skull's
+skulled
+skulls
+skunk
+skunk's
+skunks
+sky
+sky's
+skying
+skylark
+skylarker
+skylarking
+skylarks
+skylight
+skylight's
+skylights
+skyscraper
+skyscraper's
+skyscrapers
+slab
+slabs
+slack
+slacked
+slacken
+slackened
+slackening
+slackens
+slacker
+slackest
+slacking
+slackly
+slackness
+slacks
+slain
+slam
+slammed
+slamming
+slams
+slander
+slandered
+slanderer
+slandering
+slanders
+slang
+slanging
+slant
+slanted
+slanting
+slantingly
+slants
+slap
+slapped
+slapping
+slaps
+slash
+slashed
+slasher
+slashes
+slashing
+slashingly
+slat
+slat's
+slate
+slated
+slater
+slaters
+slates
+slating
+slats
+slaughter
+slaughtered
+slaughterer
+slaughtering
+slaughters
+slave
+slaved
+slaver
+slavered
+slavering
+slavery
+slaves
+slaving
+slay
+slayer
+slayers
+slaying
+slays
+sled
+sled's
+sledge
+sledge's
+sledges
+sledging
+sleds
+sleek
+sleekly
+sleekness
+sleep
+sleeper
+sleepers
+sleepier
+sleepily
+sleepiness
+sleeping
+sleepless
+sleeplessly
+sleeplessness
+sleeps
+sleepy
+sleet
+sleeve
+sleeve's
+sleeved
+sleeves
+sleeving
+sleigh
+sleighs
+sleken
+slekened
+slekening
+slender
+slenderer
+slenderly
+slenderness
+slept
+slew
+slewed
+slewing
+slice
+sliced
+slicer
+slicers
+slices
+slicing
+slick
+slicker
+slickers
+slickly
+slickness
+slicks
+slid
+slide
+slider
+sliders
+slides
+sliding
+slier
+sliest
+slight
+slighted
+slighter
+slightest
+slighting
+slightingly
+slightly
+slightness
+slights
+slim
+slime
+slimed
+slimes
+slimier
+sliminess
+sliming
+slimly
+slimness
+slimy
+sling
+slinger
+slinging
+slings
+slip
+slip's
+slippage
+slipped
+slipper
+slipper's
+slipperier
+slipperiness
+slippers
+slippery
+slipping
+slips
+slit
+slit's
+slits
+slogan
+slogan's
+slogans
+slop
+slope
+sloped
+sloper
+slopers
+slopes
+sloping
+slopped
+sloppier
+sloppiness
+slopping
+sloppy
+slops
+slot
+slot's
+sloth
+sloths
+slots
+slotted
+slouch
+slouched
+sloucher
+slouches
+slouching
+slow
+slowed
+slower
+slowest
+slowing
+slowly
+slowness
+slows
+slug
+sluggish
+sluggishly
+sluggishness
+slugs
+slum
+slum's
+slumber
+slumber's
+slumbered
+slumberer
+slumbering
+slumbers
+slump
+slumped
+slumps
+slums
+slung
+slur
+slur's
+slurs
+sly
+slyly
+smack
+smacked
+smacker
+smacking
+smacks
+small
+smaller
+smallest
+smallness
+smallpox
+smart
+smarted
+smarten
+smartened
+smartening
+smarter
+smartest
+smarting
+smartly
+smartness
+smarts
+smash
+smashed
+smasher
+smashers
+smashes
+smashing
+smashingly
+smear
+smeared
+smearer
+smearing
+smears
+smell
+smelled
+smeller
+smellier
+smelling
+smells
+smelly
+smelt
+smelter
+smelts
+smile
+smiled
+smiler
+smiles
+smiling
+smilingly
+smite
+smiter
+smith
+smith's
+smithies
+smiths
+smithy
+smiting
+smitten
+smock
+smocking
+smocks
+smog
+smokable
+smoke
+smoked
+smoker
+smoker's
+smokers
+smokes
+smokier
+smokies
+smokiness
+smoking
+smoky
+smolder
+smoldered
+smoldering
+smolderingly
+smolders
+smooth
+smoothed
+smoothen
+smoothened
+smoothening
+smoother
+smoothers
+smoothes
+smoothest
+smoothing
+smoothly
+smoothness
+smote
+smother
+smothered
+smothering
+smothers
+smug
+smuggle
+smuggled
+smuggler
+smugglers
+smuggles
+smuggling
+smugly
+smugness
+snail
+snail's
+snails
+snake
+snaked
+snakes
+snaking
+snap
+snapped
+snapper
+snapper's
+snappers
+snappier
+snappiest
+snappily
+snappiness
+snapping
+snappy
+snaps
+snapshot
+snapshot's
+snapshots
+snare
+snared
+snarer
+snares
+snarf
+snarfed
+snarfing
+snarfings
+snarfs
+snaring
+snarl
+snarled
+snarler
+snarling
+snarls
+snatch
+snatched
+snatcher
+snatches
+snatching
+sneak
+sneaked
+sneaker
+sneakered
+sneakers
+sneakier
+sneakiest
+sneakily
+sneakiness
+sneaking
+sneakingly
+sneaks
+sneaky
+sneer
+sneered
+sneerer
+sneering
+sneers
+sneeze
+sneezed
+sneezer
+sneezes
+sneezing
+sniff
+sniffed
+sniffer
+sniffing
+sniffs
+snoop
+snooped
+snooper
+snooping
+snoops
+snore
+snored
+snorer
+snores
+snoring
+snort
+snorted
+snorter
+snorting
+snorts
+snout
+snout's
+snouted
+snouts
+snow
+snowed
+snowier
+snowiest
+snowily
+snowiness
+snowing
+snowman
+snowmen
+snows
+snowshoe
+snowshoe's
+snowshoed
+snowshoer
+snowshoes
+snowy
+snuff
+snuffed
+snuffer
+snuffing
+snuffs
+snug
+snuggle
+snuggled
+snuggles
+snuggling
+snugly
+snugness
+snugs
+so
+soak
+soaked
+soaker
+soaking
+soaks
+soap
+soaped
+soaping
+soaps
+soar
+soared
+soarer
+soaring
+soars
+sob
+sober
+sobered
+soberer
+soberest
+sobering
+soberly
+soberness
+sobers
+sobs
+soccer
+sociability
+sociable
+sociably
+social
+socialism
+socialist
+socialist's
+socialists
+socially
+societal
+societally
+societies
+society
+society's
+sociological
+sociologically
+sociology
+sock
+socked
+socket
+socket's
+sockets
+socking
+socks
+sod
+sod's
+soda
+sodium
+sodomy
+sods
+sofa
+sofa's
+sofas
+soft
+soften
+softened
+softener
+softening
+softens
+softer
+softest
+softly
+softness
+software
+software's
+softwares
+soil
+soiled
+soiling
+soils
+sojourn
+sojourner
+sojourners
+solace
+solaced
+solacer
+solacing
+solar
+sold
+solder
+soldered
+solderer
+soldering
+solders
+soldier
+soldiered
+soldiering
+soldierly
+soldiers
+sole
+soled
+solely
+solemn
+solemnity
+solemnly
+solemnness
+soleness
+soles
+solicit
+solicited
+soliciting
+solicitor
+solicitors
+solicits
+solid
+solidification
+solidified
+solidifies
+solidify
+solidifying
+solidity
+solidly
+solidness
+solids
+soling
+solingen
+solitaire
+solitariness
+solitary
+solitude
+solitude's
+solitudes
+solo
+solo's
+soloed
+soloing
+solos
+solubility
+soluble
+solution
+solution's
+solutions
+solvable
+solve
+solved
+solvent
+solvent's
+solvently
+solvents
+solver
+solvers
+solves
+solving
+somber
+somberly
+somberness
+some
+somebody
+somebody's
+someday
+somehow
+someone
+someone's
+someplace
+someplace's
+somers
+something
+sometime
+sometimes
+somewhat
+somewhere
+somewheres
+son
+son's
+sonar
+sonars
+song
+song's
+songs
+sonly
+sonnet
+sonnet's
+sonnets
+sons
+soon
+sooner
+soonest
+soot
+sooth
+soothe
+soothed
+soother
+soothes
+soothing
+soothingly
+soothingness
+soothly
+sophisticated
+sophisticatedly
+sophistication
+sophomore
+sophomore's
+sophomores
+sorcerer
+sorcerer's
+sorcerers
+sorcery
+sordid
+sordidly
+sordidness
+sore
+sorely
+soreness
+sorer
+sores
+sorest
+sorrier
+sorriest
+sorriness
+sorrow
+sorrow's
+sorrower
+sorrowful
+sorrowfully
+sorrowfulness
+sorrows
+sorry
+sort
+sorted
+sorter
+sorters
+sorting
+sorts
+sos
+sought
+soul
+soul's
+souled
+souls
+sound
+sounded
+sounder
+soundest
+sounding
+sounding's
+soundingly
+soundings
+soundly
+soundness
+sounds
+soup
+soup's
+soups
+sour
+source
+source's
+sources
+soured
+sourer
+sourest
+souring
+sourly
+sourness
+sours
+south
+souther
+southerly
+southern
+southerner
+southerners
+southernly
+southernness
+southing
+sovereign
+sovereign's
+sovereignly
+sovereigns
+soviet
+soviet's
+soviets
+space
+spaced
+spacer
+spacers
+spaces
+spaceship
+spaceship's
+spaceships
+spacing
+spacings
+spade
+spaded
+spader
+spades
+spading
+spaghetti
+span
+span's
+spank
+spanked
+spanker
+spanking
+spanks
+spanned
+spanner
+spanner's
+spanners
+spanning
+spans
+spare
+spared
+sparely
+spareness
+sparer
+spares
+sparest
+sparing
+sparingly
+spark
+sparked
+sparker
+sparking
+sparks
+sparrow
+sparrow's
+sparrows
+sparse
+sparsely
+sparseness
+sparser
+sparsest
+spat
+spate
+spate's
+spates
+spatial
+spatially
+spats
+spatter
+spattered
+spawn
+spawned
+spawner
+spawning
+spawns
+speak
+speakable
+speaker
+speaker's
+speakers
+speaking
+speaks
+spear
+speared
+spearer
+spearing
+spears
+special
+specialist
+specialist's
+specialists
+specially
+specialness
+specials
+species
+specifiable
+specific
+specifically
+specification
+specifications
+specificities
+specificity
+specifics
+specified
+specifier
+specifiers
+specifies
+specify
+specifying
+specimen
+specimen's
+specimens
+speck
+speck's
+speckle
+speckled
+speckles
+speckling
+specks
+spectacle
+spectacled
+spectacles
+spectacular
+spectacularly
+spectator
+spectator's
+spectators
+spectra
+spectrogram
+spectrogram's
+spectrograms
+spectroscopically
+spectrum
+spectrums
+speculate
+speculated
+speculates
+speculating
+speculation
+speculations
+speculative
+speculatively
+speculator
+speculator's
+speculators
+sped
+speech
+speech's
+speeches
+speechless
+speechlessly
+speechlessness
+speed
+speeded
+speeder
+speeders
+speedier
+speedily
+speediness
+speeding
+speeds
+speedup
+speedup's
+speedups
+speedy
+spell
+spelled
+speller
+spellers
+spelling
+spellings
+spells
+spend
+spender
+spenders
+spending
+spends
+spent
+sphere
+sphere's
+spheres
+spherical
+spherically
+sphering
+spice
+spiced
+spices
+spicier
+spiciness
+spicing
+spicy
+spider
+spider's
+spiders
+spied
+spier
+spies
+spike
+spiked
+spiker
+spikes
+spiking
+spill
+spilled
+spiller
+spilling
+spills
+spin
+spinach
+spinal
+spinally
+spindle
+spindled
+spindler
+spindles
+spindling
+spine
+spines
+spinner
+spinner's
+spinners
+spinning
+spins
+spiral
+spirally
+spirals
+spire
+spire's
+spired
+spires
+spiring
+spirit
+spirited
+spiritedly
+spiritedness
+spiriting
+spirits
+spiritual
+spiritually
+spiritualness
+spirituals
+spit
+spite
+spited
+spiteful
+spitefully
+spitefulness
+spites
+spiting
+spits
+spitting
+splash
+splashed
+splasher
+splashers
+splashes
+splashing
+spleen
+splendid
+splendidly
+splendidness
+splice
+spliced
+splicer
+splicers
+splices
+splicing
+splicings
+spline
+spline's
+splined
+splines
+splinter
+splintered
+splintering
+splinters
+split
+split's
+splits
+splitter
+splitter's
+splitters
+splitting
+splittings
+spoil
+spoiled
+spoiler
+spoilers
+spoiling
+spoils
+spoke
+spoked
+spoken
+spokes
+spokesman
+spokesmen
+spoking
+sponge
+sponged
+sponger
+spongers
+sponges
+sponging
+sponsor
+sponsored
+sponsoring
+sponsors
+sponsorship
+spontaneous
+spontaneously
+spontaneousness
+spook
+spookier
+spookiness
+spooky
+spool
+spooled
+spooler
+spoolers
+spooling
+spools
+spoon
+spooned
+spooning
+spoons
+spore
+spore's
+spored
+spores
+sporing
+sport
+sported
+sporting
+sportingly
+sportive
+sportively
+sportiveness
+sports
+sportsman
+sportsmanly
+spot
+spot's
+spotless
+spotlessly
+spotlessness
+spotlight
+spotlight's
+spotlighted
+spotlighting
+spotlights
+spots
+spotted
+spotter
+spotter's
+spotters
+spotting
+spouse
+spouse's
+spouses
+spousing
+spout
+spouted
+spouter
+spouting
+spouts
+sprang
+sprawl
+sprawled
+sprawling
+sprawls
+spray
+sprayed
+sprayer
+spraying
+sprays
+spread
+spreader
+spreaders
+spreading
+spreadings
+spreads
+spreadsheet
+spreadsheets
+spree
+spree's
+sprees
+sprig
+sprightlier
+sprightliness
+sprightly
+spring
+springer
+springers
+springier
+springiest
+springiness
+springing
+springs
+springtime
+springy
+sprinkle
+sprinkled
+sprinkler
+sprinklered
+sprinkles
+sprinkling
+sprint
+sprinted
+sprinter
+sprinters
+sprinting
+sprints
+sprite
+sprout
+sprouted
+sprouting
+sprouts
+spruce
+spruced
+sprucely
+spruceness
+sprucer
+sprucest
+sprucing
+sprung
+spun
+spur
+spur's
+spurious
+spuriously
+spuriousness
+spurn
+spurned
+spurner
+spurning
+spurns
+spurs
+spurt
+spurted
+spurting
+spurts
+sputter
+sputtered
+sputterer
+spy
+spying
+squabble
+squabbled
+squabbler
+squabbles
+squabbling
+squad
+squad's
+squadron
+squadron's
+squadrons
+squads
+squall
+squall's
+squaller
+squalls
+square
+squared
+squarely
+squareness
+squarer
+squares
+squarest
+squaring
+squash
+squashed
+squasher
+squashes
+squashing
+squat
+squatly
+squatness
+squats
+squawk
+squawked
+squawker
+squawking
+squawks
+squeak
+squeaked
+squeaker
+squeaking
+squeaks
+squeal
+squealed
+squealer
+squealing
+squeals
+squeeze
+squeezed
+squeezer
+squeezes
+squeezing
+squid
+squids
+squint
+squinted
+squinter
+squinting
+squintingly
+squints
+squire
+squire's
+squires
+squiring
+squirm
+squirmed
+squirming
+squirms
+squirrel
+squirrelly
+squirrels
+stab
+stabbed
+stabbing
+stabilities
+stability
+stability's
+stable
+stabled
+stableness
+stabler
+stables
+stablest
+stabling
+stably
+stabs
+stack
+stack's
+stacked
+stacker
+stacking
+stacks
+staff
+staff's
+staffed
+staffer
+staffers
+staffing
+staffs
+stag
+stag's
+stage
+stagecoach
+staged
+stager
+stagers
+stages
+stagger
+staggered
+staggerer
+staggering
+staggeringly
+staggers
+staging
+stagnant
+stagnantly
+stags
+staid
+staidly
+staidness
+stain
+stained
+stainer
+staining
+stainless
+stainlessly
+stains
+stair
+stair's
+staircase
+staircase's
+staircases
+stairs
+stairway
+stairway's
+stairways
+stake
+staked
+stakes
+staking
+stale
+staled
+stalely
+staleness
+staler
+stales
+stalest
+staling
+stalk
+stalked
+stalker
+stalking
+stalks
+stall
+stalled
+stalling
+stallings
+stalls
+stalwart
+stalwartly
+stalwartness
+stamen
+stamen's
+stamens
+stamina
+stammer
+stammered
+stammerer
+stammering
+stammers
+stamp
+stamped
+stampede
+stampeded
+stampeder
+stampedes
+stampeding
+stamper
+stampers
+stamping
+stamps
+stance
+stance's
+stances
+stanch
+stancher
+stanchest
+stand
+standard
+standardly
+standards
+standby
+stander
+standing
+standings
+standpoint
+standpoint's
+standpoints
+stands
+standstill
+stanza
+stanza's
+stanzas
+staple
+stapled
+stapler
+staplers
+staples
+stapling
+star
+star's
+starboard
+starboarded
+starboarding
+starboards
+starch
+starched
+starches
+starching
+stare
+stared
+starer
+stares
+starfish
+staring
+stark
+starkest
+starkly
+starkness
+starlet
+starlet's
+starlets
+starlight
+starred
+starrier
+starring
+starry
+stars
+start
+started
+starter
+starters
+starting
+startle
+startled
+startles
+startling
+startlingly
+startlingness
+starts
+startup
+startup's
+startups
+starvation
+starve
+starved
+starver
+starves
+starving
+state
+state's
+stated
+statelier
+stateliness
+stately
+statement
+statement's
+statements
+stater
+states
+statesman
+statesman's
+statesmanly
+static
+statically
+statics
+stating
+station
+stationaries
+stationary
+stationed
+stationer
+stationing
+stations
+statistic
+statistic's
+statistical
+statistically
+statistician
+statistician's
+statisticians
+statistics
+stative
+statue
+statue's
+statued
+statues
+statuesque
+statuesquely
+statuesqueness
+stature
+status
+statuses
+statute
+statute's
+statutes
+statutorily
+statutoriness
+statutory
+staunch
+staunchest
+staunchly
+staunchness
+stave
+staved
+staves
+staving
+stay
+stayed
+stayer
+stayers
+staying
+stays
+stdio
+stead
+steadfast
+steadfastly
+steadfastness
+steadied
+steadier
+steadies
+steadiest
+steadily
+steadiness
+steading
+steady
+steadying
+steak
+steak's
+steaks
+steal
+stealer
+stealing
+steals
+stealth
+stealthier
+stealthily
+stealthiness
+stealthy
+steam
+steamboat
+steamboat's
+steamboats
+steamed
+steamer
+steamers
+steaming
+steams
+steamship
+steamship's
+steamships
+steed
+steeds
+steel
+steeled
+steelers
+steeling
+steels
+steep
+steeped
+steepen
+steepened
+steepening
+steeper
+steepest
+steeping
+steeple
+steeple's
+steeples
+steeply
+steepness
+steeps
+steer
+steered
+steerer
+steering
+steers
+stellar
+stem
+stem's
+stemmed
+stemming
+stems
+stench
+stench's
+stenches
+stencil
+stencil's
+stencils
+stenographer
+stenographer's
+stenographers
+step
+step's
+stepmother
+stepmother's
+stepmothers
+stepped
+stepper
+stepping
+steps
+stepwise
+stereo
+stereo's
+stereos
+stereotype
+stereotyped
+stereotyper
+stereotypers
+stereotypes
+stereotypical
+stereotypically
+stereotyping
+sterile
+sterling
+sterlingly
+sterlingness
+stern
+sternly
+sternness
+sterns
+stew
+steward
+steward's
+stewards
+stewed
+stewing
+stews
+stick
+sticked
+sticker
+stickers
+stickier
+stickiest
+stickily
+stickiness
+sticking
+sticks
+sticky
+stiff
+stiffen
+stiffened
+stiffener
+stiffeners
+stiffening
+stiffens
+stiffer
+stiffest
+stiffly
+stiffness
+stiffnesses
+stiffs
+stifle
+stifled
+stifler
+stifles
+stifling
+stiflingly
+stigma
+stigmas
+stile
+stile's
+stiles
+still
+stilled
+stiller
+stillest
+stilling
+stillness
+stills
+stimulant
+stimulant's
+stimulants
+stimulate
+stimulated
+stimulates
+stimulating
+stimulation
+stimulations
+stimulative
+stimuli
+stimulus
+sting
+stinger
+stinging
+stingingly
+stings
+stink
+stinker
+stinkers
+stinking
+stinkingly
+stinks
+stint
+stint's
+stinted
+stinter
+stinting
+stints
+stipend
+stipend's
+stipends
+stipple
+stippled
+stippler
+stipples
+stippling
+stipulate
+stipulated
+stipulates
+stipulating
+stipulation
+stipulations
+stir
+stirred
+stirrer
+stirrer's
+stirrers
+stirring
+stirringly
+stirrings
+stirrup
+stirrups
+stirs
+stitch
+stitched
+stitcher
+stitches
+stitching
+stochastic
+stochastically
+stock
+stockade
+stockade's
+stockaded
+stockades
+stockading
+stocked
+stocker
+stockers
+stockholder
+stockholder's
+stockholders
+stocking
+stockinged
+stockings
+stocks
+stole
+stole's
+stoled
+stolen
+stoles
+stomach
+stomached
+stomacher
+stomaches
+stomaching
+stone
+stone's
+stoned
+stoner
+stones
+stonier
+stoniness
+stoning
+stony
+stood
+stool
+stools
+stoop
+stooped
+stooping
+stoops
+stop
+stop's
+stopcock
+stopcocks
+stopgap
+stopgap's
+stopgaps
+stoppable
+stoppage
+stoppages
+stopped
+stopper
+stopper's
+stoppered
+stoppering
+stoppers
+stopping
+stops
+storage
+storage's
+storages
+store
+stored
+storehouse
+storehouse's
+storehouses
+stores
+storied
+stories
+storing
+stork
+stork's
+storks
+storm
+stormed
+stormier
+stormiest
+storminess
+storming
+storms
+stormy
+story
+story's
+storying
+stout
+stouten
+stoutened
+stoutening
+stouter
+stoutest
+stoutly
+stoutness
+stove
+stove's
+stover
+stoves
+stow
+stowed
+stowing
+stows
+straggle
+straggled
+straggler
+stragglers
+straggles
+straggling
+straight
+straighten
+straightened
+straightener
+straighteners
+straightening
+straightens
+straighter
+straightest
+straightforward
+straightforwardly
+straightforwardness
+straightforwards
+straightly
+straightness
+straightway
+strain
+strained
+strainer
+strainers
+straining
+strains
+strait
+straiten
+straitened
+straitening
+straitly
+straitness
+straits
+strand
+stranded
+strandedness
+strander
+stranding
+strands
+strange
+strangely
+strangeness
+stranger
+stranger's
+strangers
+strangest
+strangle
+strangled
+strangler
+stranglers
+strangles
+strangling
+stranglings
+strangulation
+strangulation's
+strangulations
+strap
+strap's
+straps
+stratagem
+stratagem's
+stratagems
+strategic
+strategics
+strategies
+strategy
+strategy's
+stratification
+stratifications
+stratified
+stratifies
+stratify
+stratifying
+stratum
+straw
+straw's
+strawberries
+strawberry
+strawberry's
+straws
+stray
+stray's
+strayed
+strayer
+straying
+strays
+streak
+streaked
+streaking
+streaks
+stream
+streamed
+streamer
+streamers
+streaming
+streamline
+streamlined
+streamliner
+streamlines
+streamlining
+streams
+street
+streetcar
+streetcar's
+streetcars
+streeters
+streets
+strength
+strengthen
+strengthened
+strengthener
+strengthening
+strengthens
+strengths
+strenuous
+strenuously
+strenuousness
+stress
+stressed
+stresses
+stressing
+stretch
+stretched
+stretcher
+stretchers
+stretches
+stretching
+strew
+strewing
+strewn
+strews
+strewth
+stricken
+strict
+stricter
+strictest
+strictly
+strictness
+stride
+strider
+strides
+striding
+strife
+strike
+striker
+strikers
+strikes
+striking
+strikingly
+string
+string's
+stringed
+stringent
+stringently
+stringer
+stringers
+stringier
+stringiest
+stringiness
+stringing
+strings
+stringy
+strip
+strip's
+stripe
+striped
+striper
+stripes
+striping
+stripped
+stripper
+stripper's
+strippers
+stripping
+strips
+strive
+striver
+strives
+striving
+strivings
+strobe
+strobe's
+strobed
+strobes
+strobing
+stroboscopic
+strode
+stroke
+stroked
+stroker
+strokers
+strokes
+stroking
+stroll
+strolled
+stroller
+strolling
+strolls
+strong
+stronger
+strongest
+stronghold
+strongly
+strove
+struck
+structural
+structurally
+structure
+structured
+structurer
+structures
+structuring
+struggle
+struggled
+struggler
+struggles
+struggling
+strung
+strut
+struts
+strutted
+strutter
+strutting
+stub
+stub's
+stubbed
+stubbing
+stubble
+stubborn
+stubbornly
+stubbornness
+stubs
+stuck
+stud
+stud's
+student
+student's
+students
+studied
+studiedly
+studiedness
+studier
+studies
+studio
+studio's
+studios
+studious
+studiously
+studiousness
+studs
+study
+studying
+stuff
+stuffed
+stuffer
+stuffier
+stuffiest
+stuffiness
+stuffing
+stuffings
+stuffs
+stuffy
+stumble
+stumbled
+stumbler
+stumbles
+stumbling
+stumblingly
+stump
+stumped
+stumper
+stumping
+stumps
+stun
+stung
+stunning
+stunningly
+stuns
+stunt
+stunt's
+stunted
+stuntedness
+stunting
+stunts
+stupefy
+stupefying
+stupendous
+stupendously
+stupendousness
+stupid
+stupider
+stupidest
+stupidities
+stupidity
+stupidly
+stupidness
+stupor
+sturdier
+sturdiness
+sturdy
+style
+styled
+styler
+stylers
+styles
+styling
+stylish
+stylishly
+stylishness
+stylistic
+stylistically
+stylistics
+sub
+subatomic
+subclass
+subclass's
+subclasses
+subcommittee
+subcommittee's
+subcommittees
+subcomponent
+subcomponent's
+subcomponents
+subcomputation
+subcomputation's
+subcomputations
+subconscious
+subconsciously
+subconsciousness
+subculture
+subculture's
+subcultures
+subdivide
+subdivided
+subdivider
+subdivides
+subdividing
+subdivision
+subdivision's
+subdivisions
+subdue
+subdued
+subduedly
+subduer
+subdues
+subduing
+subexpression
+subexpression's
+subexpressions
+subfield
+subfield's
+subfields
+subfile
+subfile's
+subfiles
+subgoal
+subgoal's
+subgoals
+subgraph
+subgraphs
+subgroup
+subgroup's
+subgrouping
+subgroups
+subinterval
+subinterval's
+subintervals
+subject
+subject's
+subjected
+subjecting
+subjection
+subjective
+subjectively
+subjectiveness
+subjectivity
+subjects
+sublimation
+sublimations
+sublime
+sublimed
+sublimely
+sublimeness
+sublimer
+subliming
+sublist
+sublist's
+sublists
+submarine
+submarined
+submariner
+submariners
+submarines
+submarining
+submerge
+submerged
+submerges
+submerging
+submission
+submission's
+submissions
+submit
+submits
+submitted
+submitting
+submode
+submodes
+submodule
+submodule's
+submodules
+subnetwork
+subnetwork's
+subnetworks
+subordinate
+subordinated
+subordinately
+subordinateness
+subordinates
+subordinating
+subordination
+subordinative
+subproblem
+subproblem's
+subproblems
+subprocess
+subprocess's
+subprocesses
+subprogram
+subprogram's
+subprograms
+subproject
+subproof
+subproof's
+subproofs
+subrange
+subrange's
+subranges
+subroutine
+subroutine's
+subroutines
+subs
+subschema
+subschema's
+subschemas
+subscribe
+subscribed
+subscriber
+subscribers
+subscribes
+subscribing
+subscript
+subscripted
+subscripting
+subscription
+subscription's
+subscriptions
+subscripts
+subsection
+subsection's
+subsections
+subsegment
+subsegment's
+subsegments
+subsequence
+subsequence's
+subsequences
+subsequent
+subsequently
+subsequentness
+subset
+subset's
+subsets
+subside
+subsided
+subsides
+subsidiaries
+subsidiary
+subsidiary's
+subsidies
+subsiding
+subsidy
+subsidy's
+subsist
+subsisted
+subsistence
+subsisting
+subsists
+subspace
+subspace's
+subspaces
+substance
+substance's
+substances
+substantial
+substantially
+substantialness
+substantiate
+substantiated
+substantiates
+substantiating
+substantiation
+substantiations
+substantiative
+substantive
+substantively
+substantiveness
+substantivity
+substitutability
+substitutable
+substitute
+substituted
+substituter
+substitutes
+substituting
+substitution
+substitutions
+substitutive
+substitutively
+substrate
+substrate's
+substrates
+substring
+substrings
+substructure
+substructure's
+substructures
+subsume
+subsumed
+subsumes
+subsuming
+subsystem
+subsystem's
+subsystems
+subtask
+subtask's
+subtasks
+subterranean
+subterraneanly
+subtitle
+subtitle's
+subtitled
+subtitles
+subtitling
+subtle
+subtleness
+subtler
+subtlest
+subtleties
+subtlety
+subtly
+subtopic
+subtopic's
+subtopics
+subtract
+subtracted
+subtracter
+subtracter's
+subtracters
+subtracting
+subtraction
+subtractions
+subtractive
+subtracts
+subtrahend
+subtrahend's
+subtrahends
+subtree
+subtree's
+subtrees
+subunit
+subunit's
+subunits
+suburb
+suburb's
+suburban
+suburbs
+subversion
+subvert
+subverted
+subverter
+subverting
+subverts
+subway
+subway's
+subways
+succeed
+succeeded
+succeeder
+succeeding
+succeeds
+success
+successes
+successful
+successfully
+successfulness
+succession
+succession's
+successions
+successive
+successively
+successiveness
+successor
+successor's
+successors
+succinct
+succinctly
+succinctness
+succumb
+succumbed
+succumbing
+succumbs
+such
+suck
+sucked
+sucker
+suckered
+suckering
+suckers
+sucking
+suckle
+suckled
+suckles
+suckling
+sucks
+suction
+sudden
+suddenly
+suddenness
+suds
+sudser
+sudsing
+sue
+sued
+sueded
+sueding
+suer
+sues
+suffer
+sufferance
+suffered
+sufferer
+sufferers
+suffering
+sufferings
+suffers
+suffice
+sufficed
+sufficer
+suffices
+sufficiency
+sufficient
+sufficiently
+sufficing
+suffix
+suffixed
+suffixer
+suffixes
+suffixing
+suffocate
+suffocated
+suffocates
+suffocating
+suffocatingly
+suffocation
+suffocative
+suffrage
+sugar
+sugared
+sugaring
+sugarings
+sugars
+suggest
+suggested
+suggester
+suggestible
+suggesting
+suggestion
+suggestion's
+suggestions
+suggestive
+suggestively
+suggestiveness
+suggests
+suicidal
+suicidally
+suicide
+suicide's
+suicided
+suicides
+suiciding
+suing
+suit
+suit's
+suitability
+suitable
+suitableness
+suitably
+suitcase
+suitcase's
+suitcases
+suite
+suited
+suiters
+suites
+suiting
+suitor
+suitor's
+suitors
+suits
+sulk
+sulked
+sulkies
+sulkiness
+sulking
+sulks
+sulky
+sullen
+sullenly
+sullenness
+sulphate
+sulphates
+sulphur
+sulphured
+sulphuric
+sultan
+sultan's
+sultans
+sultrier
+sultriness
+sultry
+sum
+sum's
+sumer
+summand
+summand's
+summands
+summaries
+summary
+summary's
+summation
+summation's
+summations
+summed
+summer
+summer's
+summered
+summering
+summers
+summing
+summit
+summon
+summoned
+summoner
+summoners
+summoning
+summons
+summonses
+sumptuous
+sumptuously
+sumptuousness
+sums
+sun
+sun's
+sunbeam
+sunbeam's
+sunbeams
+sunburn
+sundown
+sundowner
+sundowners
+sundries
+sundry
+sung
+sunglass
+sunglasses
+sunk
+sunken
+sunlight
+sunlights
+sunned
+sunnier
+sunniness
+sunning
+sunny
+sunrise
+sunrises
+suns
+sunset
+sunsets
+sunshine
+sunshines
+sup
+super
+superb
+superbly
+superbness
+superclass
+superclass's
+supercomputer
+supercomputer's
+supercomputers
+supered
+superego
+superego's
+superegos
+superficial
+superficially
+superficialness
+superfluities
+superfluity
+superfluity's
+superfluous
+superfluously
+superfluousness
+superhuman
+superhumanly
+superhumanness
+superimpose
+superimposed
+superimposes
+superimposing
+supering
+superintend
+superintendent
+superintendent's
+superintendents
+superior
+superior's
+superiority
+superiorly
+superiors
+superlative
+superlatively
+superlativeness
+superlatives
+supermarket
+supermarket's
+supermarkets
+superpose
+superposed
+superposes
+superposing
+superscript
+superscripted
+superscripting
+superscripts
+supersede
+superseded
+superseder
+supersedes
+superseding
+superset
+superset's
+supersets
+superstition
+superstition's
+superstitions
+superstitious
+superstitiously
+superstitiousness
+supertitle
+supertitle's
+supertitled
+supertitles
+supertitling
+superuser
+superuser's
+superusers
+supervise
+supervised
+supervises
+supervising
+supervision
+supervisions
+supervisor
+supervisor's
+supervisors
+supervisory
+supper
+supper's
+suppers
+supplant
+supplanted
+supplanter
+supplanting
+supplants
+supple
+suppled
+supplely
+supplement
+supplemental
+supplementaries
+supplementary
+supplemented
+supplementer
+supplementing
+supplements
+suppleness
+suppler
+supplication
+supplied
+supplier
+supplier's
+suppliers
+supplies
+suppling
+supply
+supply's
+supplying
+support
+supportable
+supported
+supporter
+supporters
+supporting
+supportingly
+supportive
+supportively
+supports
+suppose
+supposed
+supposedly
+supposer
+supposes
+supposing
+supposition
+supposition's
+suppositions
+suppress
+suppressed
+suppresses
+suppressing
+suppression
+suppressions
+suppressive
+suppressiveness
+supremacy
+supreme
+supremely
+supremeness
+sure
+sured
+surely
+sureness
+surer
+surest
+sureties
+surety
+surf
+surface
+surfaced
+surfaceness
+surfacer
+surfacers
+surfaces
+surfacing
+surfer
+surfer's
+surfers
+surfing
+surge
+surged
+surgely
+surgeon
+surgeon's
+surgeons
+surgeries
+surgery
+surges
+surgical
+surgically
+surging
+surlier
+surliness
+surly
+surmise
+surmised
+surmiser
+surmises
+surmising
+surmount
+surmounted
+surmounting
+surmounts
+surname
+surname's
+surnamed
+surnames
+surpass
+surpassed
+surpasses
+surpassing
+surpassingly
+surplus
+surplus's
+surpluses
+surprise
+surprise's
+surprised
+surpriser
+surprises
+surprising
+surprisingly
+surrender
+surrendered
+surrenderer
+surrendering
+surrenders
+surrogate
+surrogate's
+surrogates
+surrogation
+surround
+surrounded
+surrounding
+surroundings
+surrounds
+survey
+surveyed
+surveying
+surveyor
+surveyor's
+surveyors
+surveys
+survival
+survivals
+survive
+survived
+surviver
+survives
+surviving
+survivor
+survivor's
+survivors
+susceptible
+suspect
+suspected
+suspecter
+suspecting
+suspects
+suspend
+suspended
+suspender
+suspender's
+suspenders
+suspending
+suspends
+suspense
+suspenses
+suspension
+suspensions
+suspensive
+suspensively
+suspicion
+suspicion's
+suspicioned
+suspicioning
+suspicions
+suspicious
+suspiciously
+suspiciousness
+sustain
+sustained
+sustainer
+sustaining
+sustains
+suture
+sutured
+sutures
+suturing
+swagger
+swaggered
+swaggering
+swain
+swain's
+swains
+swallow
+swallowed
+swallower
+swallowing
+swallows
+swam
+swamp
+swamped
+swamper
+swampier
+swampiness
+swamping
+swamps
+swampy
+swan
+swan's
+swans
+swap
+swapped
+swapper
+swapper's
+swappers
+swapping
+swaps
+swarm
+swarmed
+swarmer
+swarming
+swarms
+swarthier
+swarthiness
+swarthy
+swatted
+sway
+swayed
+swayer
+swaying
+sways
+swear
+swearer
+swearing
+swears
+sweat
+sweated
+sweater
+sweaters
+sweating
+sweats
+sweep
+sweeper
+sweepers
+sweeping
+sweepingly
+sweepingness
+sweepings
+sweeps
+sweet
+sweeten
+sweetened
+sweetener
+sweeteners
+sweetening
+sweetenings
+sweetens
+sweeter
+sweetest
+sweetheart
+sweetheart's
+sweethearts
+sweetie
+sweetie's
+sweeties
+sweeting
+sweetly
+sweetness
+sweets
+swell
+swelled
+swelling
+swellings
+swells
+swept
+swerve
+swerved
+swerves
+swerving
+swift
+swifter
+swiftest
+swiftly
+swiftness
+swim
+swimmer
+swimmer's
+swimmers
+swimming
+swimmingly
+swims
+swimsuit
+swimsuit's
+swimsuits
+swine
+swing
+swinger
+swingers
+swinging
+swingingly
+swings
+swipe
+swiped
+swipes
+swiping
+swirl
+swirled
+swirler
+swirling
+swirlingly
+swirls
+swish
+swished
+swisher
+switch
+switch's
+switchboard
+switchboard's
+switchboards
+switched
+switcher
+switchers
+switches
+switching
+switchings
+swollen
+swoon
+swooned
+swooner
+swooning
+swooningly
+swoons
+swoop
+swooped
+swooper
+swooping
+swoops
+sword
+sword's
+swords
+swore
+sworn
+swum
+swung
+sycamore
+syllabi
+syllable
+syllable's
+syllabled
+syllables
+syllabling
+syllabus
+syllogism
+syllogism's
+syllogisms
+symbiosis
+symbiotic
+symbol
+symbol's
+symbolic
+symbolic's
+symbolically
+symbolics
+symbolism
+symbolisms
+symbols
+symmetric
+symmetrical
+symmetrically
+symmetricalness
+symmetries
+symmetry
+symmetry's
+sympathetic
+sympathies
+sympathy
+sympathy's
+symphonies
+symphony
+symphony's
+symposium
+symposiums
+symptom
+symptom's
+symptomatic
+symptoms
+synapse
+synapse's
+synapsed
+synapses
+synapsing
+synchronous
+synchronously
+synchronousness
+synchrony
+syndicate
+syndicated
+syndicates
+syndicating
+syndication
+syndrome
+syndrome's
+syndromes
+synergism
+synergistic
+synonym
+synonym's
+synonymous
+synonymously
+synonyms
+synopses
+synopsis
+syntactic
+syntactical
+syntactically
+syntacticly
+syntactics
+syntax
+syntaxes
+syntheses
+synthesis
+synthetic
+synthetics
+syringe
+syringed
+syringes
+syringing
+syrup
+system
+system's
+systematic
+systematically
+systematicness
+systematics
+systems
+tab
+tabernacle
+tabernacle's
+tabernacled
+tabernacles
+tabernacling
+table
+tableau
+tableau's
+tableaus
+tablecloth
+tablecloths
+tabled
+tables
+tablespoon
+tablespoon's
+tablespoonful
+tablespoonful's
+tablespoonfuls
+tablespoons
+tablet
+tablet's
+tablets
+tabling
+taboo
+taboo's
+taboos
+tabs
+tabular
+tabularly
+tabulate
+tabulated
+tabulates
+tabulating
+tabulation
+tabulations
+tabulator
+tabulator's
+tabulators
+tachometer
+tachometer's
+tachometers
+tachometry
+tacit
+tacitly
+tacitness
+tack
+tacked
+tacker
+tacking
+tackle
+tackle's
+tackled
+tackler
+tackles
+tackling
+tacks
+tact
+tactics
+tactile
+tactilely
+tag
+tag's
+tagged
+tagging
+tags
+tail
+tailed
+tailer
+tailing
+tailings
+tailor
+tailored
+tailoring
+tailors
+tails
+taint
+tainted
+taints
+take
+taken
+taker
+takers
+takes
+taketh
+taking
+takings
+tale
+tale's
+talent
+talented
+talents
+taler
+tales
+talion
+talk
+talkative
+talkatively
+talkativeness
+talked
+talker
+talkers
+talkie
+talking
+talks
+tall
+taller
+tallest
+tallness
+tallow
+tame
+tamed
+tamely
+tameness
+tamer
+tames
+tamest
+taming
+tamper
+tampered
+tamperer
+tampering
+tampers
+tan
+tandem
+tang
+tanged
+tangent
+tangent's
+tangential
+tangentially
+tangents
+tangible
+tangibleness
+tangibly
+tangier
+tangle
+tangled
+tangles
+tangling
+tangly
+tangy
+tank
+tanked
+tanker
+tankers
+tanking
+tanks
+tanner
+tanner's
+tanners
+tans
+tantamount
+tantrum
+tantrum's
+tantrums
+tap
+tap's
+tape
+taped
+taper
+tapered
+taperer
+tapering
+tapers
+tapes
+tapestried
+tapestries
+tapestry
+tapestry's
+taping
+tapings
+tapped
+tapper
+tapper's
+tappers
+tapping
+taproot
+taproot's
+taproots
+taps
+tar
+tardier
+tardies
+tardiness
+tardy
+target
+targeted
+targeting
+targets
+tariff
+tariff's
+tariffs
+taring
+tarried
+tarries
+tarry
+tarrying
+tars
+tart
+tartly
+tartness
+tarts
+task
+tasked
+tasking
+tasks
+taste
+tasted
+tasteful
+tastefully
+tastefulness
+tasteless
+tastelessly
+tastelessness
+taster
+tasters
+tastes
+tasting
+tatter
+tattered
+tattoo
+tattooed
+tattooer
+tattoos
+tau
+taught
+taunt
+taunted
+taunter
+taunting
+tauntingly
+taunts
+taut
+tauten
+tautened
+tautening
+tautly
+tautness
+tautological
+tautologically
+tautologies
+tautology
+tautology's
+tavern
+tavern's
+taverner
+taverns
+tawnier
+tawnies
+tawniness
+tawny
+tax
+taxable
+taxation
+taxed
+taxer
+taxes
+taxi
+taxi's
+taxicab
+taxicab's
+taxicabs
+taxied
+taxiing
+taxing
+taxingly
+taxis
+taxonomic
+taxonomically
+taxonomy
+taxpayer
+taxpayer's
+taxpayers
+tea
+teach
+teachable
+teachableness
+teacher
+teacher's
+teachers
+teaches
+teaching
+teachings
+team
+team's
+teamed
+teaming
+teams
+tear
+tear's
+teared
+tearer
+tearful
+tearfully
+tearfulness
+tearing
+tears
+teas
+tease
+teased
+teaser
+teases
+teasing
+teasingly
+teaspoon
+teaspoon's
+teaspoonful
+teaspoonful's
+teaspoonfuls
+teaspoons
+technical
+technicalities
+technicality
+technicality's
+technically
+technicalness
+technician
+technician's
+technicians
+technique
+technique's
+techniques
+technological
+technologically
+technologies
+technologist
+technologist's
+technologists
+technology
+technology's
+tedious
+tediously
+tediousness
+tedium
+teem
+teemed
+teeming
+teemingly
+teemingness
+teems
+teen
+teenage
+teenaged
+teenager
+teenagers
+teener
+teens
+teeth
+teethe
+teethed
+teether
+teethes
+teething
+telecommunication
+telecommunications
+teleconference
+teleconference's
+teleconferenced
+teleconferences
+teleconferencing
+telegram
+telegram's
+telegrams
+telegraph
+telegraphed
+telegrapher
+telegraphers
+telegraphic
+telegraphing
+telegraphs
+teleological
+teleologically
+teleology
+telephone
+telephoned
+telephoner
+telephoners
+telephones
+telephonic
+telephoning
+telephony
+telescope
+telescoped
+telescopes
+telescoping
+teletype
+teletype's
+teletypes
+televise
+televised
+televises
+televising
+television
+televisions
+televisor
+televisor's
+televisors
+tell
+teller
+tellers
+telling
+tellingly
+tellings
+tells
+temper
+temperament
+temperamental
+temperamentally
+temperaments
+temperance
+temperate
+temperately
+temperateness
+temperature
+temperature's
+temperatures
+tempered
+temperer
+tempering
+tempers
+tempest
+tempests
+tempestuous
+tempestuously
+tempestuousness
+template
+template's
+templates
+temple
+temple's
+templed
+temples
+temporal
+temporally
+temporaries
+temporarily
+temporariness
+temporary
+tempt
+temptation
+temptation's
+temptations
+tempted
+tempter
+tempters
+tempting
+temptingly
+tempts
+ten
+ten's
+tenacious
+tenaciously
+tenaciousness
+tenant
+tenant's
+tenants
+tend
+tended
+tendencies
+tendency
+tender
+tendered
+tendering
+tenderly
+tenderness
+tenders
+tending
+tends
+tenement
+tenement's
+tenements
+tennis
+tenor
+tenor's
+tenors
+tens
+tense
+tensed
+tensely
+tenseness
+tenser
+tenses
+tensest
+tensing
+tension
+tensioned
+tensioner
+tensioning
+tensions
+tensive
+tensor
+tensor's
+tensors
+tent
+tentacle
+tentacled
+tentacles
+tentative
+tentatively
+tentativeness
+tented
+tenter
+tenth
+tenthes
+tenting
+tents
+tenure
+tenured
+tenures
+tequila
+tequila's
+term
+termcap
+termed
+termer
+terminal
+terminal's
+terminally
+terminals
+terminate
+terminated
+terminates
+terminating
+termination
+terminations
+terminative
+terminatively
+terminator
+terminator's
+terminators
+terming
+terminologies
+terminology
+terminus
+termly
+terms
+ternary
+terrace
+terraced
+terraces
+terracing
+terrain
+terrain's
+terrains
+terrestrial
+terrestrial's
+terrestrially
+terrestrials
+terrible
+terribleness
+terribly
+terrier
+terrier's
+terriers
+terrific
+terrificly
+terrified
+terrifies
+terrify
+terrifying
+terrifyingly
+territorial
+territorially
+territories
+territory
+territory's
+terror
+terror's
+terrorism
+terrorist
+terrorist's
+terroristic
+terrorists
+terrors
+tertiaries
+tertiary
+test
+test's
+testability
+testable
+testament
+testament's
+testaments
+tested
+tester
+tester's
+testers
+testicle
+testicle's
+testicles
+testified
+testifier
+testifiers
+testifies
+testify
+testifying
+testimonies
+testimony
+testimony's
+testing
+testings
+tests
+text
+text's
+textbook
+textbook's
+textbooks
+textile
+textile's
+textiles
+texts
+textual
+textually
+texture
+textured
+textures
+texturing
+than
+thank
+thanked
+thanker
+thankful
+thankfully
+thankfulness
+thanking
+thankless
+thanklessly
+thanklessness
+thanks
+thanksgiving
+thanksgiving's
+thanksgivings
+that
+that's
+thatch
+thatched
+thatcher
+thatches
+thatching
+thats
+thaw
+thawed
+thawing
+thaws
+the
+theatrical
+theatrically
+theatricals
+theft
+theft's
+thefts
+their
+their's
+theirs
+them
+thematic
+theme
+theme's
+themes
+themselves
+then
+thence
+thenceforth
+theologian
+theologian's
+theologians
+theological
+theologically
+theologies
+theology
+theorem
+theorem's
+theorems
+theoretic
+theoretical
+theoretically
+theoreticians
+theoretics
+theories
+theorist
+theorist's
+theorists
+theory
+theory's
+therapeutic
+therapeutics
+therapies
+therapist
+therapist's
+therapists
+therapy
+therapy's
+there
+there's
+thereabouts
+thereafter
+thereby
+therefore
+therein
+thereof
+thereon
+thereto
+thereupon
+therewith
+thermodynamic
+thermodynamics
+thermometer
+thermometer's
+thermometers
+thermostat
+thermostat's
+thermostated
+thermostats
+these
+theses
+thesis
+they
+they'd
+they'll
+they're
+they've
+thick
+thicken
+thickened
+thickener
+thickeners
+thickening
+thickens
+thicker
+thickest
+thicket
+thicket's
+thicketed
+thickets
+thickly
+thickness
+thicknesses
+thicks
+thief
+thieve
+thieves
+thieving
+thigh
+thighed
+thighs
+thimble
+thimble's
+thimbles
+thin
+thiner
+thinest
+thing
+thingamajig
+thingamajig's
+thingamajigs
+thingness
+things
+think
+thinkable
+thinkableness
+thinkably
+thinker
+thinkers
+thinking
+thinkingly
+thinkingness
+thinks
+thinly
+thinner
+thinners
+thinness
+thinnest
+thins
+third
+thirdly
+thirds
+thirst
+thirsted
+thirster
+thirstier
+thirstiness
+thirsts
+thirsty
+thirteen
+thirteens
+thirteenth
+thirties
+thirtieth
+thirty
+this
+thistle
+thong
+thonged
+thorn
+thorn's
+thornier
+thorniness
+thorns
+thorny
+thorough
+thoroughfare
+thoroughfare's
+thoroughfares
+thoroughly
+thoroughness
+those
+though
+thought
+thought's
+thoughtful
+thoughtfully
+thoughtfulness
+thoughtless
+thoughtlessly
+thoughtlessness
+thoughts
+thousand
+thousands
+thousandth
+thrash
+thrashed
+thrasher
+thrashes
+thrashing
+thread
+threaded
+threader
+threaders
+threading
+threads
+threat
+threaten
+threatened
+threatener
+threatening
+threateningly
+threatens
+threats
+three
+three's
+threes
+threescore
+threshold
+threshold's
+thresholded
+thresholding
+thresholds
+threw
+thrice
+thrift
+thriftier
+thriftiness
+thrifty
+thrill
+thrilled
+thriller
+thrillers
+thrilling
+thrillingly
+thrills
+thrive
+thrived
+thriver
+thrives
+thriving
+thrivingly
+throat
+throated
+throating
+throats
+throb
+throbbed
+throbbing
+throbs
+throne
+throne's
+thrones
+throng
+throng's
+thronging
+throngs
+throning
+throttle
+throttled
+throttler
+throttles
+throttling
+through
+throughly
+throughout
+throughput
+throw
+thrower
+throwing
+thrown
+throws
+thrush
+thrushes
+thrust
+thruster
+thrusters
+thrusting
+thrusts
+thud
+thuds
+thug
+thug's
+thugs
+thumb
+thumbed
+thumbing
+thumbs
+thump
+thumped
+thumper
+thumping
+thumps
+thunder
+thunderbolt
+thunderbolt's
+thunderbolts
+thundered
+thunderer
+thunderers
+thundering
+thunderingly
+thunders
+thunderstorm
+thunderstorm's
+thunderstorms
+thunderstruck
+thus
+thusly
+thwart
+thwarted
+thwarter
+thwarting
+thwartly
+thwarts
+thyself
+tick
+ticked
+ticker
+tickers
+ticket
+ticket's
+ticketed
+ticketing
+tickets
+ticking
+tickle
+tickled
+tickler
+tickles
+tickling
+ticklish
+ticklishly
+ticklishness
+ticks
+tidal
+tidally
+tide
+tided
+tides
+tidied
+tidier
+tidies
+tidiness
+tiding
+tidings
+tidy
+tidying
+tie
+tied
+tier
+tiered
+tiers
+ties
+tiger
+tiger's
+tigers
+tight
+tighten
+tightened
+tightener
+tighteners
+tightening
+tightenings
+tightens
+tighter
+tightest
+tightly
+tightness
+tights
+tilde
+tildes
+tile
+tiled
+tiler
+tiles
+tiling
+till
+tillable
+tilled
+tiller
+tillered
+tillering
+tillers
+tilling
+tills
+tilt
+tilted
+tilter
+tilters
+tilting
+tilts
+timber
+timbered
+timbering
+timbers
+time
+timed
+timeless
+timelessly
+timelessness
+timelier
+timeliness
+timely
+timeout
+timeouts
+timer
+timers
+times
+timeshare
+timeshared
+timeshares
+timesharing
+timetable
+timetable's
+timetabled
+timetables
+timetabling
+timid
+timidity
+timidly
+timidness
+timing
+timings
+tin
+tin's
+tinge
+tinged
+tinging
+tingle
+tingled
+tingles
+tingling
+tinglingly
+tinier
+tiniest
+tinily
+tininess
+tinker
+tinkered
+tinkerer
+tinkering
+tinkers
+tinkle
+tinkled
+tinkles
+tinkling
+tinned
+tinnier
+tinniest
+tinnily
+tinniness
+tinning
+tinny
+tins
+tint
+tinted
+tinter
+tinting
+tints
+tiny
+tip
+tip's
+tipped
+tipper
+tipper's
+tippers
+tipping
+tips
+tiptoe
+tiptoed
+tire
+tired
+tiredly
+tiredness
+tireless
+tirelessly
+tirelessness
+tires
+tiresome
+tiresomely
+tiresomeness
+tiring
+tissue
+tissue's
+tissued
+tissues
+tissuing
+tit
+tit's
+tithe
+tithe's
+tither
+tithes
+tithing
+title
+titled
+titles
+titling
+tits
+titter
+tittered
+tittering
+titters
+tizzies
+tizzy
+to
+toad
+toad's
+toads
+toast
+toasted
+toaster
+toasters
+toastier
+toasting
+toasts
+toasty
+tobacco
+today
+today's
+todays
+toe
+toe's
+toed
+toes
+together
+togetherness
+toggle
+toggled
+toggles
+toggling
+toil
+toiled
+toiler
+toilet
+toilet's
+toilets
+toiling
+toils
+token
+token's
+tokens
+told
+tolerability
+tolerable
+tolerably
+tolerance
+tolerances
+tolerant
+tolerantly
+tolerate
+tolerated
+tolerates
+tolerating
+toleration
+tolerative
+toll
+tolled
+tolling
+tolls
+tom
+tom's
+tomahawk
+tomahawk's
+tomahawks
+tomato
+tomatoes
+tomb
+tomb's
+tombs
+tomography
+tomorrow
+tomorrow's
+tomorrows
+toms
+ton
+ton's
+tone
+toned
+toner
+tones
+tongs
+tongue
+tongued
+tongues
+tonguing
+tonic
+tonic's
+tonics
+tonight
+toning
+tonnage
+tons
+tonsil
+too
+took
+tool
+tooled
+tooler
+toolers
+tooling
+toolkit
+toolkit's
+toolkits
+tools
+tooth
+toothbrush
+toothbrush's
+toothbrushes
+toothbrushing
+toothed
+toothing
+toothpick
+toothpick's
+toothpicks
+top
+toped
+toper
+topic
+topic's
+topical
+topically
+topics
+toping
+topmost
+topological
+topologically
+topologies
+topology
+topple
+toppled
+topples
+toppling
+tops
+torch
+torch's
+torches
+tore
+torment
+tormented
+tormenter
+tormenters
+tormenting
+torments
+torn
+tornado
+tornadoes
+tornados
+torpedo
+torpedoed
+torpedoes
+torpedoing
+torpedos
+torque
+torquer
+torquers
+torques
+torquing
+torrent
+torrent's
+torrents
+torrid
+torridly
+torridness
+tortoise
+tortoise's
+tortoises
+torture
+tortured
+torturer
+torturers
+tortures
+torturing
+torus
+torus's
+toruses
+toss
+tossed
+tosser
+tosses
+tossing
+total
+total's
+totalities
+totality
+totality's
+totally
+totals
+totter
+tottered
+tottering
+totteringly
+totters
+touch
+touchable
+touched
+toucher
+touches
+touchier
+touchiest
+touchily
+touchiness
+touching
+touchingly
+touchy
+tough
+toughen
+toughened
+toughening
+toughens
+tougher
+toughest
+toughly
+toughness
+tour
+toured
+tourer
+touring
+tourist
+tourist's
+tourists
+tournament
+tournament's
+tournaments
+tours
+tow
+toward
+towardliness
+towardly
+towards
+towed
+towel
+towel's
+towels
+tower
+towered
+towering
+toweringly
+towers
+towing
+town
+town's
+towner
+towns
+township
+township's
+townships
+tows
+toxicity
+toxin
+toxin's
+toxins
+toy
+toyed
+toyer
+toying
+toys
+trace
+traceable
+traceableness
+traced
+traceless
+tracelessly
+tracer
+tracers
+traces
+tracing
+tracings
+track
+tracked
+tracker
+trackers
+tracking
+tracks
+tract
+tract's
+tractability
+tractable
+tractive
+tractor
+tractor's
+tractors
+tracts
+trade
+traded
+trademark
+trademark's
+trademarks
+tradeoff
+tradeoffs
+trader
+traders
+trades
+tradesman
+trading
+tradition
+tradition's
+traditional
+traditionally
+traditions
+traffic
+traffic's
+trafficked
+trafficker
+trafficker's
+traffickers
+trafficking
+traffics
+tragedies
+tragedy
+tragedy's
+tragic
+tragically
+trail
+trailed
+trailer
+trailers
+trailing
+trailings
+trails
+train
+trained
+trainee
+trainee's
+trainees
+trainer
+trainers
+training
+trains
+trait
+trait's
+traitor
+traitor's
+traitors
+traits
+trajectories
+trajectory
+trajectory's
+tramp
+tramped
+tramper
+tramping
+trample
+trampled
+trampler
+tramples
+trampling
+tramps
+trance
+trance's
+trances
+trancing
+tranquil
+tranquility
+tranquillity
+tranquilly
+tranquilness
+transact
+transacted
+transacting
+transaction
+transaction's
+transactions
+transacts
+transceiver
+transceiver's
+transceivers
+transcend
+transcended
+transcendent
+transcendently
+transcending
+transcends
+transcontinental
+transcribe
+transcribed
+transcriber
+transcribers
+transcribes
+transcribing
+transcript
+transcript's
+transcription
+transcription's
+transcriptions
+transcripts
+transfer
+transfer's
+transferability
+transferable
+transferal
+transferal's
+transferals
+transfered
+transference
+transferral
+transferral's
+transferrals
+transferred
+transferrer
+transferrer's
+transferrers
+transferring
+transfers
+transfinite
+transform
+transformable
+transformation
+transformation's
+transformational
+transformations
+transformed
+transformer
+transformers
+transforming
+transforms
+transgress
+transgressed
+transgresses
+transgressing
+transgression
+transgression's
+transgressions
+transgressive
+transience
+transiency
+transient
+transiently
+transients
+transistor
+transistor's
+transistors
+transit
+transition
+transitional
+transitionally
+transitioned
+transitions
+transitive
+transitively
+transitiveness
+transitivity
+transitoriness
+transitory
+translatability
+translatable
+translate
+translated
+translates
+translating
+translation
+translational
+translations
+translative
+translator
+translator's
+translators
+translucent
+translucently
+transmission
+transmission's
+transmissions
+transmit
+transmits
+transmittal
+transmitted
+transmitter
+transmitter's
+transmitters
+transmitting
+transmogrification
+transmogrify
+transparencies
+transparency
+transparency's
+transparent
+transparently
+transparentness
+transpire
+transpired
+transpires
+transpiring
+transplant
+transplanted
+transplanter
+transplanting
+transplants
+transport
+transportability
+transportation
+transportations
+transported
+transporter
+transporters
+transporting
+transports
+transpose
+transposed
+transposes
+transposing
+transposition
+trap
+trap's
+trapezoid
+trapezoid's
+trapezoidal
+trapezoids
+trapped
+trapper
+trapper's
+trappers
+trapping
+trappings
+traps
+trash
+trashed
+trasher
+trashes
+trashing
+traumatic
+travail
+travails
+travel
+travels
+traversal
+traversal's
+traversals
+traverse
+traversed
+traverser
+traverses
+traversing
+travesties
+travesty
+travesty's
+tray
+tray's
+trays
+treacheries
+treacherous
+treacherously
+treacherousness
+treachery
+treachery's
+tread
+treaded
+treader
+treading
+treads
+treason
+treasure
+treasured
+treasurer
+treasures
+treasuries
+treasuring
+treasury
+treasury's
+treat
+treated
+treater
+treaters
+treaties
+treating
+treatise
+treatise's
+treatises
+treatment
+treatment's
+treatments
+treats
+treaty
+treaty's
+treble
+trebled
+trebles
+trebling
+tree
+tree's
+treed
+trees
+treetop
+treetop's
+treetops
+trek
+trek's
+treks
+tremble
+trembled
+trembler
+trembles
+trembling
+tremendous
+tremendously
+tremendousness
+tremor
+tremor's
+tremors
+trench
+trenched
+trencher
+trenchers
+trenches
+trend
+trending
+trends
+trespass
+trespassed
+trespasser
+trespassers
+trespasses
+tress
+tress's
+tressed
+tresses
+trial
+trial's
+trials
+triangle
+triangle's
+triangles
+triangular
+triangularly
+tribal
+tribally
+tribe
+tribe's
+tribes
+tribunal
+tribunal's
+tribunals
+tribune
+tribune's
+tribunes
+tributary
+tribute
+tribute's
+tributes
+tributing
+trichotomy
+trick
+tricked
+tricker
+trickier
+trickiest
+trickiness
+tricking
+trickle
+trickled
+trickles
+trickling
+tricks
+tricky
+tried
+trier
+triers
+tries
+trifle
+trifled
+trifler
+trifles
+trifling
+trigger
+triggered
+triggering
+triggers
+trigonometric
+trigonometry
+trihedral
+trill
+trilled
+triller
+trillion
+trillions
+trillionth
+trim
+trimer
+trimly
+trimmed
+trimmer
+trimmest
+trimming
+trimmings
+trimness
+trims
+trinket
+trinket's
+trinketed
+trinketer
+trinkets
+trip
+trip's
+triple
+tripled
+triples
+triplet
+triplet's
+triplets
+triplication
+tripling
+triply
+trips
+triumph
+triumphal
+triumphantly
+triumphed
+triumphing
+triumphs
+trivia
+trivial
+trivialities
+triviality
+trivially
+trod
+troff
+troff's
+troffer
+troll
+troll's
+trolley
+trolley's
+trolleyed
+trolleys
+trolls
+troop
+trooped
+trooper
+troopers
+trooping
+troops
+trophied
+trophies
+trophy
+trophy's
+trophying
+tropic
+tropic's
+tropical
+tropically
+tropics
+trot
+trots
+trouble
+troubled
+troublemaker
+troublemaker's
+troublemakers
+troubler
+troubles
+troubleshoot
+troubleshooted
+troubleshooter
+troubleshooters
+troubleshooting
+troubleshoots
+troublesome
+troublesomely
+troublesomeness
+troubling
+trough
+trouser
+trousered
+trousers
+trout
+trouts
+trowel
+trowel's
+trowels
+truant
+truant's
+truants
+truce
+trucing
+truck
+trucked
+trucker
+truckers
+trucking
+trucks
+trudge
+trudged
+trudger
+trudges
+trudging
+true
+trued
+trueness
+truer
+trues
+truest
+truing
+truism
+truism's
+truisms
+truly
+trump
+trumped
+trumpet
+trumpeted
+trumpeter
+trumpeting
+trumpets
+trumps
+truncate
+truncated
+truncates
+truncating
+truncation
+truncation's
+truncations
+trunk
+trunk's
+trunked
+trunks
+trust
+trusted
+trustee
+trustee's
+trusteed
+trustees
+truster
+trustful
+trustfully
+trustfulness
+trustier
+trusties
+trustiness
+trusting
+trustingly
+trusts
+trustworthiness
+trustworthy
+trusty
+truth
+truthful
+truthfully
+truthfulness
+truths
+try
+trying
+tryingly
+tty
+tty's
+ttys
+tub
+tub's
+tube
+tubed
+tuber
+tuberculosis
+tubers
+tubes
+tubing
+tubs
+tuck
+tucked
+tucker
+tuckered
+tuckering
+tucking
+tucks
+tuft
+tuft's
+tufted
+tufter
+tufts
+tug
+tugs
+tuition
+tuitions
+tulip
+tulip's
+tulips
+tumble
+tumbled
+tumbler
+tumblers
+tumbles
+tumbling
+tumult
+tumult's
+tumults
+tumultuous
+tumultuously
+tumultuousness
+tunable
+tunableness
+tune
+tuned
+tuner
+tuners
+tunes
+tunic
+tunic's
+tunics
+tuning
+tuning's
+tunings
+tunnel
+tunnels
+tuple
+tuple's
+tuples
+turban
+turban's
+turbaned
+turbans
+turbulence
+turbulence's
+turbulent
+turbulently
+turf
+turkey
+turkey's
+turkeys
+turmoil
+turmoil's
+turmoils
+turn
+turnable
+turned
+turner
+turners
+turning
+turnings
+turnip
+turnip's
+turnips
+turnkey
+turnkeys
+turnover
+turnovers
+turns
+turpentine
+turquoise
+turret
+turret's
+turreted
+turrets
+turtle
+turtle's
+turtles
+turtling
+tutor
+tutored
+tutorial
+tutorial's
+tutorials
+tutoring
+tutors
+twain
+twang
+twanging
+twas
+tweak
+tweaked
+tweaker
+tweaking
+tweaks
+tweed
+tweezer
+tweezers
+twelfth
+twelve
+twelves
+twenties
+twentieth
+twenty
+twice
+twig
+twig's
+twigs
+twilight
+twilight's
+twilights
+twill
+twilled
+twilling
+twin
+twin's
+twine
+twined
+twiner
+twines
+twining
+twinkle
+twinkled
+twinkler
+twinkles
+twinkling
+twins
+twirl
+twirled
+twirler
+twirling
+twirlingly
+twirls
+twist
+twisted
+twister
+twisters
+twisting
+twists
+twitch
+twitched
+twitcher
+twitching
+twitter
+twittered
+twitterer
+twittering
+two
+two's
+twofold
+twos
+tying
+type
+type's
+typed
+typedef
+typedefs
+typer
+types
+typewriter
+typewriter's
+typewriters
+typhoid
+typical
+typically
+typicalness
+typification
+typified
+typifies
+typify
+typifying
+typing
+typist
+typist's
+typists
+typographic
+typographical
+typographically
+typography
+typos
+tyranny
+tyrant
+tyrant's
+tyrants
+ubiquitous
+ubiquitously
+ubiquitousness
+ubiquity
+ugh
+uglier
+ugliest
+ugliness
+ugly
+ulcer
+ulcer's
+ulcered
+ulcering
+ulcers
+ultimate
+ultimately
+ultimateness
+umbrella
+umbrella's
+umbrellas
+umpire
+umpire's
+umpired
+umpires
+umpiring
+unabashed
+unabashedly
+unabated
+unabatedly
+unabbreviated
+unable
+unabridged
+unaccelerated
+unacceptability
+unacceptable
+unacceptably
+unaccessible
+unaccommodated
+unaccompanied
+unaccomplished
+unaccountably
+unaccounted
+unaccustomed
+unaccustomedly
+unachievable
+unachieved
+unacknowledged
+unacquainted
+unadaptable
+unadjustable
+unadjusted
+unadopted
+unadorned
+unadulterated
+unadulteratedly
+unadvised
+unadvisedly
+unaffected
+unaffectedly
+unaffectedness
+unaffectionate
+unaffectionately
+unafraid
+unaggregated
+unaided
+unalienability
+unalienable
+unaligned
+unallocated
+unalloyed
+unalterable
+unalterableness
+unalterably
+unaltered
+unambiguous
+unambiguously
+unambitious
+unanchored
+unanimous
+unanimously
+unannounced
+unanswerable
+unanswered
+unanticipated
+unanticipatedly
+unapologetically
+unappealing
+unappealingly
+unappreciated
+unapproachability
+unapproachable
+unappropriated
+unapt
+unaptly
+unaptness
+unarguable
+unarguably
+unarmed
+unarticulated
+unary
+unashamed
+unashamedly
+unasked
+unassailable
+unassailableness
+unassembled
+unassigned
+unassigns
+unassisted
+unassuming
+unassumingness
+unattached
+unattainability
+unattainable
+unattended
+unattenuated
+unattractive
+unattractively
+unattractiveness
+unattributed
+unauthentic
+unauthenticated
+unavailability
+unavailable
+unavailing
+unavailingly
+unavailingness
+unavoidable
+unavoidably
+unaware
+unawarely
+unawareness
+unawares
+unbacked
+unbalanced
+unbalancedness
+unbanned
+unbanning
+unbans
+unbarbered
+unbarred
+unbated
+unbearable
+unbearably
+unbeatable
+unbeatably
+unbeaten
+unbeautifully
+unbecoming
+unbecomingly
+unbecomingness
+unbelievable
+unbelievably
+unbelieving
+unbelievingly
+unbelted
+unbendable
+unbetrothed
+unbiased
+unbiasedness
+unbidden
+unblemished
+unblinded
+unblinking
+unblinkingly
+unblock
+unblocked
+unblocking
+unblocks
+unblown
+unblushing
+unblushingly
+unbodied
+unbolted
+unboned
+unbonneted
+unborn
+unbound
+unbounded
+unboundedness
+unbowed
+unbranched
+unbreakable
+unbreathable
+unbred
+unbridled
+unbroken
+unbudging
+unbudgingly
+unbuffered
+unbuilt
+unbundled
+unburdened
+unbureaucratic
+unburied
+unburned
+unbuttered
+unbuttoned
+unbuttons
+uncaged
+uncalculating
+uncalled
+uncandidly
+uncanniness
+uncanny
+uncared
+uncaring
+uncatchable
+uncaught
+uncaused
+unceasing
+unceasingly
+uncensored
+uncertain
+uncertainly
+uncertainness
+uncertainties
+uncertainty
+uncertified
+unchallenged
+unchangeability
+unchangeable
+unchangeably
+unchanged
+unchanging
+unchangingly
+unchangingness
+uncharacteristically
+uncharged
+uncharitable
+uncharitableness
+uncharted
+unchartered
+uncheckable
+unchecked
+unchivalrously
+unchosen
+uncivil
+uncivilly
+unclaimed
+unclamorous
+unclamorously
+unclamorousness
+unclarity
+unclassified
+uncle
+uncle's
+unclean
+uncleanliness
+uncleanly
+uncleanness
+unclear
+uncleared
+unclenched
+uncles
+unclipped
+unclosed
+unclothed
+unclouded
+uncloudedly
+unclustered
+uncluttered
+uncoated
+uncoded
+uncoiled
+uncoined
+uncomfortable
+uncomfortably
+uncomforted
+uncommented
+uncommitted
+uncommon
+uncommonly
+uncommonness
+uncomplaining
+uncomplainingly
+uncompleted
+uncomplimentary
+uncomprehending
+uncomprehendingly
+uncompress
+uncompressed
+uncompresses
+uncompressing
+uncompromising
+uncompromisingly
+uncomputable
+unconceivable
+unconcerned
+unconcernedly
+unconcernedness
+unconditional
+unconditionally
+unconditioned
+unconfined
+unconfirmed
+unconformity
+unconnected
+unconquerable
+unconscious
+unconsciously
+unconsciousness
+unconsidered
+unconsolidated
+unconstitutional
+unconstitutionality
+unconstitutionally
+unconstrained
+uncontaminated
+uncontested
+uncontrollability
+uncontrollable
+uncontrollably
+uncontrolled
+unconventional
+unconventionally
+unconvertible
+unconvinced
+unconvincing
+unconvincingly
+unconvincingness
+uncool
+uncooled
+uncooperative
+uncoordinated
+uncorked
+uncorrectable
+uncorrected
+uncorrelated
+uncountable
+uncountably
+uncounted
+uncouth
+uncouthly
+uncouthness
+uncovenanted
+uncover
+uncovered
+uncovering
+uncovers
+uncreated
+uncritically
+uncrowned
+uncrushable
+uncured
+uncurled
+uncynical
+uncynically
+undamaged
+undamped
+undaunted
+undauntedly
+undebatable
+undecidable
+undecided
+undeclared
+undecomposable
+undecorated
+undefended
+undefinability
+undefinable
+undefined
+undefinedness
+undeformed
+undelete
+undeleted
+undemocratic
+undemocratically
+undemonstrative
+undemonstratively
+undemonstrativeness
+undeniable
+undeniableness
+undeniably
+undepicted
+under
+underbrush
+underdone
+underestimate
+underestimated
+underestimates
+underestimating
+underestimation
+underestimations
+underflow
+underflowed
+underflowing
+underflows
+underfoot
+undergo
+undergoes
+undergoing
+undergone
+undergrad
+undergrad's
+undergrads
+undergraduate
+undergraduate's
+undergraduates
+underground
+undergrounder
+underivable
+underived
+underlie
+underlies
+underline
+underlined
+underlines
+underling
+underling's
+underlings
+underlining
+underlinings
+underly
+underlying
+undermine
+undermined
+undermines
+undermining
+underneath
+underpayment
+underpayment's
+underpayments
+underpinning
+underpinnings
+underplay
+underplayed
+underplaying
+underplays
+underscore
+underscored
+underscores
+understand
+understandability
+understandable
+understandably
+understanding
+understandingly
+understandings
+understands
+understated
+understood
+undertake
+undertaken
+undertaker
+undertaker's
+undertakers
+undertakes
+undertaking
+undertakings
+undertook
+underway
+underwear
+underwent
+underworld
+underwrite
+underwriter
+underwriters
+underwrites
+underwriting
+undescended
+undesigned
+undesigning
+undesirability
+undesirable
+undesirableness
+undesirably
+undesired
+undetectable
+undetected
+undetermined
+undeveloped
+undeviated
+undeviating
+undeviatingly
+undid
+undies
+undifferentiated
+undigested
+undignified
+undiluted
+undiminished
+undimmed
+undiplomatic
+undirected
+undisciplined
+undisclosed
+undiscovered
+undiscussed
+undisguised
+undisguisedly
+undismayed
+undisputed
+undisrupted
+undissociated
+undistinguished
+undistorted
+undistributed
+undisturbed
+undivided
+undo
+undocumented
+undoer
+undoes
+undoing
+undoings
+undomesticated
+undone
+undoubled
+undoubted
+undoubtedly
+undrained
+undramatically
+undreamed
+undress
+undressed
+undresses
+undressing
+undried
+undrinkable
+undue
+unduly
+undumper
+undumper's
+undutiful
+undutifully
+undutifulness
+undying
+unearned
+unearthliness
+unearthly
+uneasily
+uneasiness
+uneasy
+uneconomical
+unedited
+unelected
+unembellished
+unemotional
+unemotionally
+unemphatic
+unemphatically
+unemployable
+unemployed
+unemployment
+unencumbered
+unending
+unendingly
+unendurable
+unendurableness
+unendurably
+unenlightening
+unenthusiastic
+unenthusiastically
+unenumerated
+unenvied
+unequal
+unequally
+unequivocal
+unequivocally
+unerring
+unerringly
+unessential
+unethically
+unevaluated
+uneven
+unevenly
+unevenness
+uneventful
+uneventfully
+unexamined
+unexampled
+unexceptionally
+unexcused
+unexpanded
+unexpected
+unexpectedly
+unexpectedness
+unexpended
+unexperienced
+unexplainable
+unexplained
+unexploited
+unexplored
+unexpressed
+unextended
+unfading
+unfadingly
+unfair
+unfairly
+unfairness
+unfaith
+unfaithful
+unfaithfully
+unfaithfulness
+unfaltering
+unfalteringly
+unfamiliar
+unfamiliarity
+unfamiliarly
+unfashionable
+unfashionably
+unfastened
+unfathered
+unfeathered
+unfeigned
+unfeignedly
+unfenced
+unfettered
+unfilial
+unfilially
+unfilled
+unfinished
+unfired
+unfit
+unfitly
+unfitness
+unfitted
+unfixed
+unflagging
+unflaggingly
+unflattering
+unflatteringly
+unfledged
+unflinching
+unflinchingly
+unfocused
+unfold
+unfolded
+unfolding
+unfolds
+unforeseen
+unforgeable
+unforgettable
+unforgettably
+unforgivable
+unforgiving
+unforgivingness
+unformatted
+unformed
+unforthcoming
+unfortunate
+unfortunately
+unfortunates
+unfounded
+unfrequented
+unfriendliness
+unfriendly
+unfrosted
+unfruitful
+unfruitfully
+unfruitfulness
+unfulfilled
+unfunded
+unfunnily
+unfurnished
+ungainliness
+ungainly
+ungallantly
+ungenerously
+ungirt
+unglazed
+unglued
+ungot
+ungotten
+ungoverned
+ungraceful
+ungracefully
+ungracefulness
+ungraciously
+ungraded
+ungrammatical
+ungrateful
+ungratefully
+ungratefulness
+ungratified
+ungrounded
+unguarded
+unguardedly
+unguardedness
+unguessable
+unguessed
+unguided
+unhallow
+unhallowed
+unhampered
+unhandily
+unhandsomely
+unhappier
+unhappiest
+unhappily
+unhappiness
+unhappy
+unharmed
+unhealthily
+unhealthiness
+unhealthy
+unheard
+unheeded
+unheeding
+unhelm
+unhelpfully
+unheralded
+unhesitating
+unhesitatingly
+unhinged
+unhitched
+unhooks
+unhoped
+unhurriedly
+unhysterical
+unhysterically
+unicorn
+unicorn's
+unicorns
+unidentifiable
+unidentified
+unidirectional
+unidirectionality
+unidirectionally
+unification
+unifications
+unified
+unifier
+unifiers
+unifies
+uniform
+uniformed
+uniforming
+uniformities
+uniformity
+uniformly
+uniformness
+uniforms
+unify
+unifying
+unilluminating
+unimaginable
+unimaginably
+unimaginatively
+unimpaired
+unimpassioned
+unimpeded
+unimplemented
+unimportance
+unimportant
+unimpressed
+unimproved
+unincorporated
+unindented
+uninfected
+uninfluenced
+uninformatively
+uninformed
+uninhabited
+uninhibited
+uninhibitedly
+uninhibitedness
+uninitiated
+uninjured
+uninspired
+uninspiring
+uninstantiated
+uninsulated
+unintelligent
+unintelligently
+unintelligibility
+unintelligible
+unintelligibleness
+unintelligibly
+unintended
+unintentional
+unintentionally
+uninteresting
+uninterestingly
+uninterpretable
+uninterpreted
+uninterrupted
+uninterruptedly
+uninterruptedness
+uninterviewed
+uninvited
+union
+union's
+unions
+unique
+uniquely
+uniqueness
+unison
+unit
+unit's
+unite
+united
+unitedly
+uniter
+unites
+unities
+uniting
+unitive
+units
+unity
+unity's
+univalve
+univalve's
+univalves
+universal
+universality
+universally
+universalness
+universals
+universe
+universe's
+universes
+universities
+university
+university's
+unjacketed
+unjam
+unjammed
+unjamming
+unjoined
+unjust
+unjustifiable
+unjustified
+unjustly
+unjustness
+unkind
+unkindliness
+unkindly
+unkindness
+unknit
+unknowable
+unknowing
+unknowingly
+unknown
+unknowns
+unlaced
+unlamented
+unlashed
+unlaundered
+unlawful
+unlawfully
+unlawfulness
+unleaded
+unleash
+unleashed
+unleashes
+unleashing
+unleavened
+unless
+unlettered
+unlicensed
+unlicked
+unlike
+unlikelihood
+unlikelihoods
+unlikeliness
+unlikely
+unlikeness
+unlimbers
+unlimited
+unlimitedly
+unlined
+unlink
+unlinked
+unlinking
+unlinks
+unlisted
+unload
+unloaded
+unloader
+unloaders
+unloading
+unloads
+unlock
+unlocked
+unlocking
+unlocks
+unlogged
+unloved
+unluckily
+unluckiness
+unlucky
+unmade
+unmagnified
+unmaintainable
+unmaintained
+unmaliciously
+unmanageable
+unmanageably
+unmanaged
+unmanned
+unmannered
+unmanneredly
+unmannerliness
+unmannerly
+unmapped
+unmaps
+unmarked
+unmarried
+unmarrieds
+unmasked
+unmatchable
+unmatched
+unmated
+unmates
+unmeant
+unmeasurable
+unmentionable
+unmentionables
+unmentioned
+unmerciful
+unmercifully
+unmeshed
+unmistakable
+unmistakably
+unmitigated
+unmitigatedly
+unmitigatedness
+unmixed
+unmoderated
+unmodifiable
+unmodified
+unmolested
+unmotivated
+unmount
+unmountable
+unmounted
+unmoved
+unmurmuring
+unnameable
+unnamed
+unnatural
+unnaturally
+unnaturalness
+unnecessarily
+unnecessary
+unneeded
+unnegated
+unnerve
+unnerved
+unnerves
+unnerving
+unnervingly
+unnoticed
+unnourished
+unnumbered
+unobservable
+unobservables
+unobserved
+unobtainable
+unoccupied
+unofficial
+unofficially
+unopened
+unordered
+unoriginals
+unorthodoxly
+unpack
+unpackaged
+unpackages
+unpacked
+unpacker
+unpacking
+unpacks
+unpadded
+unpaged
+unpaid
+unpainted
+unpaired
+unparliamentary
+unparsed
+unpartitioned
+unpatriotic
+unpaved
+unperceived
+unperformed
+unperturbed
+unperturbedly
+unplaced
+unplagued
+unplanned
+unpleasant
+unpleasantly
+unpleasantness
+unpleased
+unplowed
+unplugged
+unplugging
+unplugs
+unplumbed
+unpolled
+unpolluted
+unpopular
+unpopularity
+unprecedented
+unprecedentedly
+unpredictability
+unpredictable
+unpredictably
+unpredicted
+unprejudiced
+unprescribed
+unpreserved
+unpretending
+unpretentious
+unpretentiously
+unpretentiousness
+unpriced
+unprimed
+unprincipled
+unprincipledness
+unprintable
+unprinted
+unprivileged
+unproblematic
+unproblematical
+unproblematically
+unprocessed
+unprofitable
+unprofitableness
+unprofitably
+unprojected
+unpromising
+unpromisingly
+unprompted
+unpronounceable
+unpropagated
+unpropertied
+unprotected
+unprotectedly
+unprovability
+unprovable
+unproved
+unproven
+unprovided
+unpublished
+unpunched
+unpunished
+unqualified
+unqualifiedly
+unquantifiable
+unquenched
+unquestionably
+unquestioned
+unquestioningly
+unquoted
+unranked
+unrated
+unravel
+unravels
+unreachable
+unreacted
+unread
+unreadability
+unreadable
+unreal
+unrealism
+unrealistic
+unrealistically
+unrealized
+unrealizes
+unreasonable
+unreasonableness
+unreasonably
+unreassuringly
+unreconstructed
+unrecordable
+unrecorded
+unrecoverable
+unredeemed
+unreferenced
+unrefined
+unreflected
+unregister
+unregistered
+unregistering
+unregisters
+unregulated
+unrehearsed
+unreinforced
+unrelated
+unreleased
+unrelenting
+unrelentingly
+unreliabilities
+unreliability
+unreliable
+unreliably
+unremarked
+unreported
+unrepresentable
+unrepresented
+unrequested
+unrequited
+unreserved
+unreservedly
+unreservedness
+unresisted
+unresisting
+unresolved
+unresponsive
+unresponsively
+unresponsiveness
+unrest
+unrestrained
+unrestrainedly
+unrestrainedness
+unrestricted
+unrestrictedly
+unrestrictive
+unreturned
+unrevealing
+unrifled
+unrighteous
+unrighteously
+unrighteousness
+unroll
+unrolled
+unrolling
+unrolls
+unromantically
+unrotated
+unruffled
+unruled
+unruliness
+unruly
+unsafe
+unsafely
+unsaid
+unsalted
+unsanitary
+unsatisfactorily
+unsatisfactory
+unsatisfiability
+unsatisfiable
+unsatisfied
+unsatisfying
+unsaturated
+unsaved
+unscheduled
+unschooled
+unscientific
+unscientifically
+unscramble
+unscrambled
+unscrambler
+unscrambles
+unscrambling
+unscratched
+unscreened
+unscrews
+unscripted
+unscrupulous
+unscrupulously
+unscrupulousness
+unsealed
+unseals
+unseasonable
+unseasonableness
+unseasonably
+unseasoned
+unsecured
+unseeded
+unseeing
+unseemly
+unseen
+unsegmented
+unsegregated
+unselected
+unselfish
+unselfishly
+unselfishness
+unsent
+unserved
+unserviced
+unsettled
+unsettledness
+unsettling
+unsettlingly
+unshaded
+unshakable
+unshaken
+unshared
+unsharpened
+unshaved
+unshaven
+unsheathing
+unshelled
+unsheltered
+unshielded
+unshod
+unsigned
+unsimplified
+unsized
+unskilled
+unskillful
+unskillfully
+unskillfulness
+unslings
+unsloped
+unslung
+unsmiling
+unsmilingly
+unsnap
+unsnapped
+unsnapping
+unsnaps
+unsociability
+unsociable
+unsociableness
+unsociably
+unsocial
+unsocially
+unsolicited
+unsolvable
+unsolved
+unsophisticated
+unsophistication
+unsorted
+unsought
+unsound
+unsounded
+unsoundly
+unsoundness
+unsparing
+unsparingly
+unspeakable
+unspecified
+unspent
+unspoiled
+unspoken
+unspotted
+unsprayed
+unsprung
+unstable
+unstableness
+unstably
+unstacked
+unstacks
+unstained
+unstapled
+unstaring
+unstated
+unsteadily
+unsteadiness
+unsteady
+unstemmed
+unstinting
+unstintingly
+unstoppable
+unstopped
+unstrained
+unstratified
+unstreamed
+unstressed
+unstriped
+unstructured
+unstrung
+unstuck
+unsubscripted
+unsubstantially
+unsubstantiated
+unsubstituted
+unsuccessful
+unsuccessfully
+unsuffixed
+unsuitability
+unsuitable
+unsuitably
+unsuited
+unsung
+unsupportable
+unsupported
+unsure
+unsurpassed
+unsurprised
+unsurprising
+unsurprisingly
+unsuspected
+unsuspecting
+unsuspended
+unswerving
+unsymmetrically
+unsympathetic
+untamed
+untampered
+untaped
+untapped
+untaught
+untented
+unterminated
+untestable
+untested
+unthematic
+unthinkable
+unthinkably
+unthinkingly
+untidiness
+untidy
+untie
+untied
+unties
+until
+untimeliness
+untimely
+untitled
+unto
+untold
+untouchable
+untouchable's
+untouchables
+untouched
+untoward
+untowardly
+untowardness
+untraceable
+untraced
+untracked
+untrained
+untransformed
+untranslated
+untransposed
+untreated
+untried
+untrod
+untroubled
+untrue
+untruly
+untrusted
+untrustworthiness
+untruth
+untruthful
+untruthfully
+untruthfulness
+untutored
+untwisted
+untying
+untyped
+unusable
+unused
+unusual
+unusually
+unusualness
+unuttered
+unvalued
+unvarnished
+unvarying
+unveil
+unveiled
+unveiling
+unveils
+unventilated
+unverified
+unvisited
+unvoiced
+unwaged
+unwanted
+unwarily
+unwarranted
+unwashed
+unwashedness
+unwatched
+unwavering
+unwaveringly
+unwearied
+unweariedly
+unweighed
+unwelcome
+unwept
+unwholesome
+unwholesomely
+unwieldiness
+unwieldy
+unwilled
+unwilling
+unwillingly
+unwillingness
+unwind
+unwinder
+unwinders
+unwinding
+unwinds
+unwinking
+unwired
+unwise
+unwisely
+unwiser
+unwisest
+unwitnessed
+unwitting
+unwittingly
+unwonted
+unwontedly
+unwontedness
+unworldliness
+unworldly
+unworn
+unworthiness
+unworthy
+unwound
+unwounded
+unwoven
+unwrap
+unwrapped
+unwrapping
+unwraps
+unwrinkled
+unwritable
+unwritten
+unyielded
+unyielding
+unyieldingly
+up
+upbraid
+upbraider
+upbringing
+update
+updated
+updater
+updates
+updating
+upfield
+upgrade
+upgraded
+upgrades
+upgrading
+upheld
+uphill
+uphold
+upholder
+upholders
+upholding
+upholds
+upholster
+upholstered
+upholsterer
+upholsterers
+upholstering
+upholsters
+upkeep
+upland
+uplander
+uplands
+uplift
+uplifted
+uplifter
+uplifting
+uplifts
+upload
+uploaded
+uploading
+uploads
+upon
+upper
+uppermost
+uppers
+upright
+uprightly
+uprightness
+uprising
+uprising's
+uprisings
+uproar
+uproot
+uprooted
+uprooter
+uprooting
+uproots
+ups
+upset
+upsets
+upsetting
+upshot
+upshot's
+upshots
+upside
+upsides
+upstairs
+upstream
+upturn
+upturned
+upturning
+upturns
+upward
+upwardly
+upwardness
+upwards
+urban
+urchin
+urchin's
+urchins
+urge
+urged
+urgent
+urgently
+urger
+urges
+urging
+urgings
+urinate
+urinated
+urinates
+urinating
+urination
+urine
+urn
+urn's
+urning
+urns
+us
+usability
+usable
+usably
+usage
+usages
+use
+used
+useful
+usefully
+usefulness
+useless
+uselessly
+uselessness
+user
+user's
+users
+uses
+usher
+ushered
+ushering
+ushers
+using
+usual
+usually
+usualness
+usurp
+usurped
+usurper
+utensil
+utensil's
+utensils
+utilities
+utility
+utility's
+utmost
+utopian
+utopian's
+utopians
+utter
+utterance
+utterance's
+utterances
+uttered
+utterer
+uttering
+utterly
+uttermost
+utters
+uucp
+uucp's
+vacancies
+vacancy
+vacancy's
+vacant
+vacantly
+vacantness
+vacate
+vacated
+vacates
+vacating
+vacation
+vacationed
+vacationer
+vacationers
+vacationing
+vacations
+vacillate
+vacillated
+vacillates
+vacillating
+vacillatingly
+vacillation
+vacillations
+vacillator
+vacillator's
+vacillators
+vacuo
+vacuous
+vacuously
+vacuousness
+vacuum
+vacuumed
+vacuuming
+vacuums
+vagabond
+vagabond's
+vagabonds
+vagaries
+vagary
+vagary's
+vagina
+vagina's
+vaginas
+vagrant
+vagrantly
+vagrants
+vague
+vaguely
+vagueness
+vaguer
+vaguest
+vainly
+vale
+vale's
+valedictorian
+valedictorian's
+valence
+valence's
+valences
+valentine
+valentine's
+valentines
+vales
+valet
+valet's
+valets
+valiant
+valiantly
+valiantness
+valid
+validate
+validated
+validates
+validating
+validation
+validations
+validity
+validly
+validness
+valley
+valley's
+valleys
+valuable
+valuableness
+valuables
+valuably
+valuation
+valuation's
+valuations
+valuator
+valuators
+value
+valued
+valuer
+valuers
+values
+valuing
+valve
+valve's
+valved
+valves
+valving
+van
+van's
+vane
+vane's
+vaned
+vanes
+vanilla
+vanish
+vanished
+vanisher
+vanishes
+vanishing
+vanishingly
+vanities
+vanity
+vanquish
+vanquished
+vanquisher
+vanquishes
+vanquishing
+vans
+vantage
+vantages
+variability
+variable
+variable's
+variableness
+variables
+variably
+variance
+variance's
+variances
+variant
+variantly
+variants
+variation
+variation's
+variations
+varied
+variedly
+varier
+varies
+varieties
+variety
+variety's
+various
+variously
+variousness
+varnish
+varnish's
+varnished
+varnisher
+varnishers
+varnishes
+varnishing
+vary
+varying
+varyingly
+varyings
+vase
+vase's
+vases
+vassal
+vassals
+vast
+vaster
+vastest
+vastly
+vastness
+vat
+vat's
+vats
+vaudeville
+vault
+vaulted
+vaulter
+vaulting
+vaults
+vaunt
+vaunted
+vaunter
+veal
+vealer
+vealing
+vector
+vector's
+vectored
+vectoring
+vectors
+veer
+veered
+veering
+veeringly
+veers
+vegetable
+vegetable's
+vegetables
+vegetarian
+vegetarian's
+vegetarians
+vegetate
+vegetated
+vegetates
+vegetating
+vegetation
+vegetative
+vegetatively
+vegetativeness
+vehemence
+vehement
+vehemently
+vehicle
+vehicle's
+vehicles
+vehicular
+veil
+veiled
+veiling
+veils
+vein
+veined
+veiner
+veining
+veins
+velocities
+velocity
+velocity's
+velvet
+vend
+vender
+vending
+vendor
+vendor's
+vendors
+venerable
+venerableness
+vengeance
+venison
+venom
+venomous
+venomously
+venomousness
+vent
+vented
+venter
+ventilate
+ventilated
+ventilates
+ventilating
+ventilation
+ventilations
+ventilative
+venting
+ventral
+ventrally
+ventricle
+ventricle's
+ventricles
+vents
+venture
+ventured
+venturer
+venturers
+ventures
+venturing
+venturings
+veracity
+veranda
+veranda's
+verandaed
+verandas
+verb
+verb's
+verbal
+verbally
+verbose
+verbosely
+verboseness
+verbs
+verdict
+verdicts
+verdure
+verdured
+verge
+verger
+verges
+verier
+veriest
+verifiability
+verifiable
+verifiableness
+verification
+verifications
+verified
+verifier
+verifier's
+verifiers
+verifies
+verify
+verifying
+verily
+veritable
+veritableness
+vermin
+versa
+versatile
+versatilely
+versatileness
+versatility
+verse
+versed
+verser
+verses
+versing
+version
+versions
+versus
+vertebrate
+vertebrate's
+vertebrates
+vertebration
+vertex
+vertexes
+vertical
+vertically
+verticalness
+verticals
+vertices
+very
+vessel
+vessel's
+vessels
+vest
+vested
+vestige
+vestige's
+vestiges
+vestigial
+vestigially
+vesting
+vests
+veteran
+veteran's
+veterans
+veterinarian
+veterinarian's
+veterinarians
+veterinary
+veto
+vetoed
+vetoer
+vetoes
+vetoing
+vetting
+vex
+vexation
+vexed
+vexedly
+vexes
+vexing
+vi
+vi's
+via
+viability
+viable
+viably
+vial
+vial's
+vials
+vibrate
+vibrated
+vibrates
+vibrating
+vibration
+vibrations
+vice
+vice's
+viceroy
+vices
+vicing
+vicinities
+vicinity
+vicious
+viciously
+viciousness
+vicissitude
+vicissitude's
+vicissitudes
+victim
+victim's
+victims
+victor
+victor's
+victories
+victorious
+victoriously
+victoriousness
+victors
+victory
+victory's
+victual
+victuals
+video
+videos
+videotape
+videotape's
+videotaped
+videotapes
+videotaping
+vie
+vied
+vier
+vies
+view
+viewable
+viewed
+viewer
+viewers
+viewing
+viewings
+viewpoint
+viewpoint's
+viewpoints
+views
+vigilance
+vigilant
+vigilante
+vigilante's
+vigilantes
+vigilantly
+vignette
+vignette's
+vignetted
+vignetter
+vignettes
+vignetting
+vigorous
+vigorously
+vigorousness
+vii
+viii
+vile
+vilely
+vileness
+viler
+vilest
+vilification
+vilifications
+vilified
+vilifier
+vilifies
+vilify
+vilifying
+villa
+villa's
+village
+village's
+villager
+villagers
+villages
+villain
+villain's
+villainous
+villainously
+villainousness
+villains
+villainy
+villas
+vindictive
+vindictively
+vindictiveness
+vine
+vine's
+vinegar
+vinegars
+vines
+vineyard
+vineyard's
+vineyards
+vining
+vintage
+vintager
+vintages
+violate
+violated
+violates
+violating
+violation
+violations
+violative
+violator
+violator's
+violators
+violence
+violent
+violently
+violet
+violet's
+violets
+violin
+violin's
+violinist
+violinist's
+violinists
+violins
+viper
+viper's
+vipers
+viral
+virally
+virgin
+virgin's
+virginity
+virgins
+virtual
+virtually
+virtue
+virtue's
+virtues
+virtuoso
+virtuoso's
+virtuosos
+virtuous
+virtuously
+virtuousness
+virus
+virus's
+viruses
+vis
+visa
+visaed
+visage
+visaged
+visaing
+visas
+viscosities
+viscosity
+viscount
+viscount's
+viscounts
+viscous
+viscously
+viscousness
+visibilities
+visibility
+visible
+visibleness
+visibly
+vision
+vision's
+visionariness
+visionary
+visioned
+visioning
+visions
+visit
+visitation
+visitation's
+visitations
+visited
+visiting
+visitor
+visitor's
+visitors
+visits
+visor
+visor's
+visored
+visors
+vista
+vista's
+vistaed
+vistas
+visual
+visually
+visuals
+vita
+vitae
+vital
+vitality
+vitally
+vitals
+vitamin
+vitamin's
+vitamins
+vivid
+vividly
+vividness
+vizier
+vocabularies
+vocabulary
+vocal
+vocally
+vocals
+vocation
+vocation's
+vocational
+vocationally
+vocations
+vogue
+voice
+voiced
+voicer
+voicers
+voices
+voicing
+void
+voided
+voider
+voiding
+voidness
+voids
+volatile
+volatileness
+volatiles
+volatilities
+volatility
+volcanic
+volcano
+volcano's
+volcanos
+volley
+volleyball
+volleyball's
+volleyballs
+volleyed
+volleyer
+volleying
+volleys
+volt
+voltage
+voltages
+volts
+volume
+volume's
+volumed
+volumes
+voluming
+voluntarily
+voluntariness
+voluntary
+volunteer
+volunteered
+volunteering
+volunteers
+vomit
+vomited
+vomiter
+vomiting
+vomits
+vortex
+vortexes
+vote
+voted
+voter
+voters
+votes
+voting
+votive
+votively
+votiveness
+vouch
+voucher
+vouchers
+vouches
+vouching
+vow
+vowed
+vowel
+vowel's
+vowels
+vower
+vowing
+vows
+voyage
+voyaged
+voyager
+voyagers
+voyages
+voyaging
+voyagings
+vulgar
+vulgarly
+vulnerabilities
+vulnerability
+vulnerable
+vulnerableness
+vulture
+vulture's
+vultures
+wade
+waded
+wader
+waders
+wades
+wading
+wafer
+wafer's
+wafered
+wafering
+wafers
+waffle
+waffle's
+waffled
+waffles
+waffling
+waft
+wafter
+wag
+wage
+waged
+wager
+wagered
+wagerer
+wagering
+wagers
+wages
+waging
+wagon
+wagon's
+wagons
+wags
+wail
+wailed
+wailer
+wailing
+wails
+waist
+waist's
+waistcoat
+waistcoat's
+waistcoated
+waistcoats
+waisted
+waister
+waists
+wait
+waited
+waiter
+waiter's
+waiters
+waiting
+waitress
+waitress's
+waitresses
+waits
+waive
+waived
+waiver
+waiverable
+waivers
+waives
+waiving
+wake
+waked
+waken
+wakened
+wakener
+wakening
+waker
+wakes
+waking
+walk
+walked
+walker
+walkers
+walking
+walks
+walkway
+walkway's
+walkways
+wall
+wall's
+walled
+waller
+wallet
+wallet's
+wallets
+walling
+wallow
+wallowed
+wallower
+wallowing
+wallows
+walls
+walnut
+walnut's
+walnuts
+walrus
+walrus's
+walruses
+waltz
+waltzed
+waltzer
+waltzes
+waltzing
+wan
+wand
+wander
+wandered
+wanderer
+wanderers
+wandering
+wanderings
+wanders
+wane
+waned
+wanes
+waning
+wanly
+wanness
+want
+wanted
+wanter
+wanting
+wanton
+wantoner
+wantonly
+wantonness
+wants
+war
+war's
+warble
+warbled
+warbler
+warbles
+warbling
+ward
+warded
+warden
+wardens
+warder
+warding
+wardrobe
+wardrobe's
+wardrobes
+wards
+ware
+warehouse
+warehoused
+warehouser
+warehouses
+warehousing
+wares
+warfare
+warier
+wariest
+warily
+wariness
+waring
+warlike
+warm
+warmed
+warmer
+warmers
+warmest
+warming
+warmly
+warmness
+warms
+warmth
+warn
+warned
+warner
+warning
+warningly
+warnings
+warns
+warp
+warp's
+warped
+warper
+warping
+warps
+warrant
+warranted
+warranter
+warranties
+warranting
+warrants
+warranty
+warranty's
+warred
+warring
+warrior
+warrior's
+warriors
+wars
+warship
+warship's
+warships
+wart
+wart's
+warted
+warts
+wary
+was
+wash
+washed
+washer
+washers
+washes
+washing
+washings
+wasn't
+wasp
+wasp's
+wasps
+waste
+wasted
+wasteful
+wastefully
+wastefulness
+waster
+wastes
+wasting
+wastingly
+watch
+watched
+watcher
+watchers
+watches
+watchful
+watchfully
+watchfulness
+watching
+watchings
+watchman
+watchword
+watchword's
+watchwords
+water
+watered
+waterer
+waterfall
+waterfall's
+waterfalls
+wateriness
+watering
+waterings
+waterproof
+waterproofed
+waterproofer
+waterproofing
+waterproofness
+waterproofs
+waters
+waterway
+waterway's
+waterways
+watery
+wave
+waved
+waveform
+waveform's
+waveforms
+wavefront
+wavefront's
+wavefronts
+wavelength
+wavelengths
+waver
+wavered
+waverer
+wavering
+waveringly
+wavers
+waves
+waving
+wax
+waxed
+waxen
+waxer
+waxers
+waxes
+waxier
+waxiness
+waxing
+waxy
+way
+way's
+ways
+wayside
+waysides
+wayward
+waywardly
+waywardness
+we
+we'd
+we'll
+we're
+we've
+weak
+weaken
+weakened
+weakener
+weakening
+weakens
+weaker
+weakest
+weakliness
+weakly
+weakness
+weakness's
+weaknesses
+wealth
+wealthier
+wealthiest
+wealthiness
+wealths
+wealthy
+wean
+weaned
+weaner
+weaning
+weapon
+weapon's
+weaponed
+weapons
+wear
+wearable
+wearer
+wearied
+wearier
+wearies
+weariest
+wearily
+weariness
+wearing
+wearingly
+wearisome
+wearisomely
+wearisomeness
+wears
+weary
+wearying
+weasel
+weasel's
+weasels
+weather
+weathercock
+weathercock's
+weathercocks
+weathered
+weatherer
+weathering
+weatherly
+weathers
+weave
+weaver
+weavers
+weaves
+weaving
+web
+web's
+weber
+webs
+wed
+wedded
+wedding
+wedding's
+weddings
+wedge
+wedged
+wedges
+wedging
+weds
+wee
+weed
+weeded
+weeder
+weeding
+weeds
+week
+week's
+weekday
+weekday's
+weekdays
+weekend
+weekend's
+weekender
+weekends
+weeklies
+weekly
+weeks
+weep
+weeped
+weeper
+weepers
+weeping
+weeps
+weigh
+weighed
+weigher
+weighing
+weighings
+weighs
+weight
+weighted
+weighter
+weighting
+weightings
+weights
+weird
+weirdly
+weirdness
+welcome
+welcomed
+welcomely
+welcomeness
+welcomer
+welcomes
+welcoming
+weld
+welded
+welder
+welders
+welding
+weldings
+welds
+welfare
+well
+welled
+welling
+wellness
+wells
+wench
+wench's
+wencher
+wenches
+went
+wept
+were
+weren't
+west
+wester
+westered
+westering
+westerlies
+westerly
+western
+westerner
+westerners
+westing
+westward
+westwards
+wet
+wetly
+wetness
+wets
+wetted
+wetter
+wettest
+wetting
+whack
+whacked
+whacker
+whacking
+whacks
+whale
+whaler
+whales
+whaling
+whammies
+whammy
+wharf
+wharfs
+wharves
+what
+what's
+whatchamacallit
+whatchamacallit's
+whatchamacallits
+whatever
+whatsoever
+wheat
+wheaten
+wheel
+wheeled
+wheeler
+wheelers
+wheeling
+wheelings
+wheels
+whelp
+when
+whence
+whenever
+whens
+where
+where's
+whereabouts
+whereas
+whereby
+wherein
+whereupon
+wherever
+whether
+whew
+whey
+which
+whichever
+while
+whiled
+whiles
+whiling
+whim
+whim's
+whimper
+whimpered
+whimpering
+whimpers
+whims
+whimsical
+whimsically
+whimsicalness
+whimsied
+whimsies
+whimsy
+whimsy's
+whine
+whined
+whiner
+whines
+whining
+whiningly
+whip
+whip's
+whipped
+whipper
+whipper's
+whippers
+whipping
+whipping's
+whippings
+whips
+whirl
+whirled
+whirler
+whirling
+whirlpool
+whirlpool's
+whirlpools
+whirls
+whirlwind
+whirr
+whirring
+whisk
+whisked
+whisker
+whiskered
+whiskers
+whiskey
+whiskey's
+whiskeys
+whisking
+whisks
+whisper
+whispered
+whisperer
+whispering
+whisperingly
+whisperings
+whispers
+whistle
+whistled
+whistler
+whistlers
+whistles
+whistling
+whit
+white
+whited
+whitely
+whiten
+whitened
+whitener
+whiteners
+whiteness
+whitening
+whitens
+whiter
+whites
+whitespace
+whitest
+whitewash
+whitewashed
+whitewasher
+whitewashing
+whiting
+whittle
+whittled
+whittler
+whittles
+whittling
+whittlings
+whiz
+whizzed
+whizzes
+whizzing
+who
+who's
+whoever
+whole
+wholehearted
+wholeheartedly
+wholeness
+wholes
+wholesale
+wholesaled
+wholesaler
+wholesalers
+wholesales
+wholesaling
+wholesome
+wholesomely
+wholesomeness
+wholly
+whom
+whomever
+whoop
+whooped
+whooper
+whooping
+whoops
+whore
+whore's
+whores
+whoring
+whorl
+whorl's
+whorled
+whorls
+whose
+why
+wick
+wicked
+wickedly
+wickedness
+wicker
+wicking
+wicks
+wide
+widely
+widen
+widened
+widener
+wideness
+widening
+widens
+wider
+widespread
+widest
+widget
+widget's
+widgets
+widow
+widowed
+widower
+widowers
+widows
+width
+widths
+wield
+wielded
+wielder
+wielding
+wields
+wife
+wife's
+wifeliness
+wifely
+wig
+wig's
+wigs
+wigwam
+wild
+wildcat
+wildcat's
+wildcats
+wilder
+wilderness
+wildest
+wilding
+wildly
+wildness
+wile
+wiled
+wiles
+wilier
+wiliness
+wiling
+will
+willed
+willer
+willful
+willfully
+willfulness
+willing
+willingly
+willingness
+willings
+willow
+willow's
+willower
+willows
+wills
+wilt
+wilted
+wilting
+wilts
+wily
+win
+wince
+winced
+winces
+wincing
+wind
+winded
+winder
+winders
+windier
+windiness
+winding
+windmill
+windmill's
+windmilling
+windmills
+window
+window's
+windowed
+windowing
+windows
+winds
+windy
+wine
+wined
+winer
+winers
+wines
+wing
+winged
+winger
+wingers
+winging
+wings
+wining
+wink
+winked
+winker
+winking
+winks
+winner
+winner's
+winners
+winning
+winningly
+winnings
+wins
+winter
+wintered
+winterer
+wintering
+winterly
+winters
+wintrier
+wintriness
+wintry
+wipe
+wiped
+wiper
+wipers
+wipes
+wiping
+wire
+wired
+wireless
+wirer
+wires
+wiretap
+wiretap's
+wiretaps
+wirier
+wiriness
+wiring
+wirings
+wiry
+wisdom
+wisdoms
+wise
+wised
+wisely
+wiseness
+wiser
+wises
+wisest
+wish
+wished
+wisher
+wishers
+wishes
+wishful
+wishfully
+wishfulness
+wishing
+wising
+wisp
+wisp's
+wisps
+wistful
+wistfully
+wistfulness
+wit
+wit's
+witch
+witchcraft
+witches
+witching
+with
+withal
+withdraw
+withdrawal
+withdrawal's
+withdrawals
+withdrawer
+withdrawing
+withdrawn
+withdrawnness
+withdraws
+withdrew
+wither
+withered
+withering
+witheringly
+withers
+withheld
+withhold
+withholder
+withholders
+withholding
+withholdings
+withholds
+within
+without
+withstand
+withstanding
+withstands
+withstood
+witness
+witnessed
+witnesses
+witnessing
+wits
+wittier
+wittiest
+wittiness
+witty
+wives
+wizard
+wizard's
+wizardly
+wizards
+woe
+woeful
+woefully
+woeness
+woke
+wolf
+wolfer
+wolves
+woman
+woman's
+womanhood
+womanliness
+womanly
+womb
+womb's
+wombed
+wombs
+women
+women's
+womens
+won't
+wonder
+wondered
+wonderer
+wonderful
+wonderfully
+wonderfulness
+wondering
+wonderingly
+wonderland
+wonderland's
+wonderment
+wonders
+wondrous
+wondrously
+wondrousness
+wont
+wonted
+wontedly
+wontedness
+wonting
+woo
+wood
+wood's
+woodchuck
+woodchuck's
+woodchucks
+woodcock
+woodcock's
+woodcocks
+wooded
+wooden
+woodenly
+woodenness
+woodier
+woodiness
+wooding
+woodland
+woodlander
+woodman
+woodpecker
+woodpecker's
+woodpeckers
+woods
+woodser
+woodwork
+woodworker
+woodworking
+woody
+wooed
+wooer
+woof
+woofed
+woofer
+woofers
+woofing
+woofs
+wooing
+wool
+wooled
+woolen
+woolens
+woollier
+woollies
+woolliness
+woolly
+wools
+wooly
+woos
+word
+word's
+worded
+wordier
+wordily
+wordiness
+wording
+wordings
+words
+wordy
+wore
+work
+workable
+workableness
+workably
+workaround
+workaround's
+workarounds
+workbench
+workbench's
+workbenches
+workbook
+workbook's
+workbooks
+worked
+worker
+worker's
+workers
+workhorse
+workhorse's
+workhorses
+working
+workingman
+workings
+workload
+workloads
+workman
+workmanly
+workmanship
+workmen
+workmen's
+works
+workshop
+workshop's
+workshops
+workstation
+workstation's
+workstations
+world
+world's
+worlders
+worldliness
+worldly
+worlds
+worldwide
+worm
+wormed
+wormer
+worming
+worms
+worn
+worried
+worriedly
+worrier
+worriers
+worries
+worrisome
+worrisomely
+worrisomeness
+worry
+worrying
+worryingly
+worse
+worser
+worship
+worshipful
+worshipfully
+worshipfulness
+worships
+worst
+worsted
+worth
+worthier
+worthies
+worthiest
+worthiness
+worthing
+worthless
+worthlessly
+worthlessness
+worths
+worthwhile
+worthwhileness
+worthy
+would
+wouldest
+wouldn't
+wound
+wounded
+wounding
+wounds
+wove
+woven
+wrangle
+wrangled
+wrangler
+wranglers
+wrangles
+wrangling
+wrap
+wrap's
+wrapped
+wrapper
+wrapper's
+wrappers
+wrapping
+wrappings
+wraps
+wrath
+wreak
+wreaks
+wreath
+wreathed
+wreathes
+wreathing
+wreck
+wreckage
+wrecked
+wrecker
+wreckers
+wrecking
+wrecks
+wren
+wren's
+wrench
+wrenched
+wrenches
+wrenching
+wrenchingly
+wrens
+wrest
+wrested
+wrester
+wresting
+wrestle
+wrestled
+wrestler
+wrestles
+wrestling
+wrestlings
+wrests
+wretch
+wretched
+wretchedly
+wretchedness
+wretches
+wriggle
+wriggled
+wriggler
+wriggles
+wriggling
+wring
+wringer
+wringing
+wrings
+wrinkle
+wrinkled
+wrinkles
+wrinkling
+wrist
+wrist's
+wrists
+wristwatch
+wristwatch's
+wristwatches
+writ
+writ's
+writable
+write
+writer
+writer's
+writers
+writes
+writhe
+writhed
+writhes
+writhing
+writing
+writings
+writs
+written
+wrong
+wronged
+wronger
+wrongest
+wronging
+wrongly
+wrongness
+wrongs
+wrote
+wrought
+wrung
+xi
+xii
+xiii
+xiv
+xix
+xv
+xvi
+xvii
+xviii
+xx
+yacc
+yacc's
+yank
+yanked
+yanking
+yanks
+yard
+yard's
+yarded
+yarding
+yards
+yardstick
+yardstick's
+yardsticks
+yarn
+yarn's
+yarned
+yarning
+yarns
+yawn
+yawner
+yawning
+yawningly
+yawns
+yea
+yeah
+year
+year's
+yearly
+yearn
+yearned
+yearner
+yearning
+yearningly
+yearnings
+yearns
+years
+yeas
+yeast
+yeast's
+yeasts
+yecch
+yell
+yelled
+yeller
+yelling
+yellow
+yellowed
+yellower
+yellowest
+yellowing
+yellowish
+yellowness
+yellows
+yells
+yelp
+yelped
+yelper
+yelping
+yelps
+yeoman
+yeomanly
+yeomen
+yes
+yeses
+yesterday
+yesterday's
+yesterdays
+yet
+yield
+yielded
+yielder
+yielding
+yields
+yoke
+yoke's
+yokes
+yoking
+yon
+yonder
+you
+you'd
+you'll
+you're
+you've
+young
+younger
+youngest
+youngly
+youngness
+youngster
+youngster's
+youngsters
+your
+your's
+yours
+yourself
+yourselves
+youth
+youth's
+youthes
+youthful
+youthfully
+youthfulness
+yuck
+yummier
+yummy
+yuppie
+yuppie's
+yuppies
+zap
+zapped
+zapping
+zaps
+zeal
+zealous
+zealously
+zealousness
+zebra
+zebra's
+zebras
+zenith
+zero
+zeroed
+zeroes
+zeroing
+zeros
+zeroth
+zest
+zigzag
+zinc
+zinc's
+zodiac
+zodiacs
+zonal
+zonally
+zone
+zoned
+zonely
+zoner
+zones
+zoning
+zoo
+zoo's
+zoological
+zoologically
+zoom
+zoomed
+zooming
+zooms
+zoos
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.1 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.1
new file mode 100644
index 00000000000..658faad3d19
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.1
@@ -0,0 +1,20864 @@
+AI
+ALU
+AMA
+ANSI's
+ARCO
+ARPA
+Aaron
+Abe
+Abe's
+Abigail
+Abigail's
+Abilene
+Abilene's
+Abner
+Abner's
+Abraham
+Abrams
+Abramson
+Acapulco
+Ackerman
+Acta
+Adam
+Adams
+Adamson
+Addison
+Addressograph
+Adirondack
+Adirondacks
+Adonis
+Adriatic
+Aegean
+Aeneid
+Afghani
+Afghani's
+Afghanis
+Afrikaans
+Agatha
+Aggie
+Aggies
+Agnes
+Aires
+Ajax
+Akron
+Al
+Al's
+Alabamans
+Alameda
+Alamo
+Alamos
+Alan
+Alan's
+Albany
+Albert
+Alberta
+Alberto
+Albuquerque
+Alcoa
+Alec
+Aleck
+Aler
+Aleut
+Alex
+Alexander
+Alexanders
+Alexandra
+Alexandre
+Alexandria
+Alfa
+Algiers
+Alhambra
+Alice
+Alicia
+Alistair
+Allan
+Alleghenies
+Allegheny
+Allen
+Allendale
+Allentown
+Allison
+Allstate
+Alsatian
+Alsatians
+Alvarez
+Alvin
+Amadeus
+Amarillo
+Amarillo's
+Americanism
+Amherst
+Amherst's
+Amoco
+Amoco's
+Amos
+Ampex
+Ampex's
+Amy
+Amy's
+Anaheim
+Anaheim's
+Andean
+Andean's
+Andersen
+Andersen's
+Anderson
+Anderson's
+Andes
+Andover
+Andover's
+Andre
+Andre's
+Andrew
+Andrew's
+Andromeda
+Andy
+Andy's
+Angela
+Angeles
+Angelina
+Angeline
+Angelo
+Angie
+Anglia
+Anglo
+Angus
+Anheuser
+Anita
+Ankara
+Ann
+Anna
+Annapolis
+Anne
+Anne's
+Annie
+Anson
+Antares
+Anthony
+Antietam
+Antioch
+Antoine
+Antoinette
+Antony
+Apollinaire
+Appaloosas
+Appian
+Appleton
+Appomattox
+Aquinas
+Araby
+Arcadia
+Archibald
+Archimedes
+Arcturus
+Argonne
+Argus
+Ariadne
+Aristotelean
+Arkansan
+Arlene
+Arlington
+Armonk
+Arnold
+Arnold's
+Arpanet
+Arthur
+Aruba
+Asheville
+Ashland
+Ashley
+Assad
+Assyria
+Astaire
+Astaires
+Astor
+Astoria
+Atari
+Atkins
+Atkinson
+Atlanta
+Atlantis
+Atreus
+Attica
+Augean
+Augustan
+Augustine
+Augustus
+Aurelius
+Auschwitz
+Australis
+Aventine
+Aventino
+Avis
+Aviv
+Avogadro
+Avon
+Aztec
+Aztecan
+BCD
+BS
+BTW
+Babcock
+Babylon
+Babylonian
+Babylonians
+Bacchus
+Baghdad
+Bahama
+Bahamas
+Bailey
+Baileys
+Bakelite
+Bakersfield
+Baldwin
+Bali
+Balinese
+Ballard
+Ballards
+Baltimore
+Balzac
+Bamberger
+Bambi
+Bancroft
+Bangor
+Baptiste
+Barbara
+Barcelona
+Barclay
+Barnabas
+Barnard
+Barney
+Barron
+Barry
+Barry's
+Barrymore
+Barrymores
+Barstow
+Barth
+Bartholomew
+Bartlett
+Bartok
+Bascom
+Basie
+Bassett
+Batavia
+Batista
+Baudelaire
+Bauer
+Bauhaus
+Bavaria
+Bavarian
+Bayesian
+Baylor
+Bayonne
+Beatrice
+Beauchamps
+Beaujolais
+Beaumont
+Beauregard
+Beaverton
+Bechtel
+Becky
+Bedford
+Beelzebub
+Beelzebub's
+Beirut
+Belfast
+Belgrade
+Bella
+Bellatrix
+Belleville
+Bellwood
+Belmont
+Beloit
+Belton
+Beltsville
+Ben
+Ben's
+Bendix
+Benjamin
+Bennett
+Bennington
+Benny
+Benson
+Bentham
+Bentley
+Bentleys
+Benz
+Beowulf
+Bergson
+Beringer
+Berkowitz
+Berkshire
+Berkshires
+Berlioz
+Berlitz
+Bern
+Bernadine
+Bernard
+Bernardine
+Bernice
+Bernie
+Bernoulli
+Bernstein
+Berra
+Bert
+Bertha
+Bertrand
+Bess
+Bessemer
+Bessie
+Betelgeuse
+Bethesda
+Bethlehem
+Betsy
+Betties
+Betty
+Bhutan
+Biddle
+Bienville
+Bierce
+Bigelow
+Billie
+Bimini
+Bingham
+Binghamton
+Biscayne
+Bismarck
+Blackburn
+Blackfeet
+Blackman
+Blackmer
+Blackstone
+Blackwell
+Blackwells
+Blair
+Blake
+Blakey
+Blanche
+Blanton
+Blatz
+Bloomfield
+Bloomington
+Blvd
+Bobbie
+Bobbsey
+Bobrow
+Bodenheim
+Boeing
+Boer
+Bogart
+Bogartian
+Bogota
+Boheme
+Bohemia
+Bohemian
+Bohr
+Boise
+Bolshevist
+Bolshevistic
+Bolshoi
+Bolton
+Boltzmann
+Bombay
+Bombay's
+Bonaparte
+Bonaventure
+Bonham
+Boniface
+Bonn
+Bonneville
+Bonnie
+Bontempo
+Boone
+Bootle
+Bordeaux
+Borden
+Borealis
+Boreas
+Borg
+Borroughs
+Bose
+Bostitch
+Boswell
+Bouvier
+Bowes
+Boyce
+Bradbury
+Bradford
+Bradley
+Bradshaw
+Brady
+Brahms
+Brainard
+Brainards
+Branchville
+Brandeis
+Brandel
+Brandenburg
+Brandon
+Braniff
+Brannon
+Brasilia
+Braun
+Brenda
+Brian
+Bridewell
+Bridgeport
+Bridgetown
+Bridgewater
+Brien
+Brigadoon
+Brigham
+Brinkley
+Britannic
+Britannica
+Brittany
+Britten
+Britten's
+Broadway
+Brock
+Bronx
+Brookdale
+Brooke
+Brookfield
+Brookhaven
+Brooklyn
+Brookmont
+Browne
+Brownell
+Brownian
+Bruce
+Brunhilde
+Bruno
+Brussels
+Bruxelles
+Bryan
+Bryant
+Bryce
+Bryn
+Buchanan
+Bucharest
+Buchwald
+Bucky
+Budapest
+Budd
+Buddha
+Buddhism
+Buddhist
+Buddhists
+Budweiser
+Budweisers
+Bugatti
+Buick
+Bulba
+Bulgaria
+Bulgarian
+Bumbry
+Bundestag
+Bundy
+Bunsen
+Bunsen's
+Bunsens
+Bunyan
+Bunyan's
+Burbank
+Burbank's
+Burch
+Burgundian
+Burgundies
+Burgundy
+Burlingame
+Burma
+Burmese
+Burne
+Burnes
+Burnett
+Burnside
+Burnsides
+Burroughs
+Burt
+Burton
+Burundi
+Busch
+Bushnell
+Butterfield
+Byrne
+Byron
+Byron's
+Byronic
+Byronism
+Byzantine
+Byzantium
+CACM
+CDT
+CIA
+CPA
+CPR
+CRT
+CST
+Cadillac
+Cadillacs
+Caesar
+Cain
+Caine
+Cairo
+Cal
+CalComp
+Calcutta
+Calcutta's
+Calder
+Calgary
+Calif
+Caligula
+Callisto
+Caltech
+Calumet
+Calvinist
+Cambodia
+Camelot
+Camille
+Camino
+Campbellsport
+Canadian
+Canadians
+Canaveral
+Canberra
+Candide
+Candlewick
+Canis
+Canoga
+Canterbury
+Cantonese
+Canute
+Capet
+Capetown
+Capistrano
+Capitan
+Cappy
+Capricorn
+Capt
+Caracas
+Carbondale
+Carbones
+Caribbean
+Carl
+Carl's
+Carla
+Carleton
+Carletonian
+Carlos
+Carlsbad
+Carlson
+Carlton
+Carlyle
+Carmichael
+Carnegie
+Caroline
+Caroline's
+Carolinian
+Carolinians
+Carolyn
+Carrie
+Carson
+Carthage
+Carty
+Caruso
+Casey
+Cassandra
+Cassiopeia
+Cassite
+Cassius
+Castro
+Catalina
+Catawba
+Catherine
+Cathy
+Catskill
+Catskills
+Caucasian
+Caucasians
+Caucasus
+Cauchy
+Cavendish
+Cecil
+Cecilia
+Celanese
+Celsius
+Celtic
+Cenozoic
+Centralia
+Cerberus
+Cervantes
+Cessna
+Cetus
+Ceylon
+Cezanne
+Cezannes
+Chablis
+Chad
+Chaffey
+Chalmers
+Champlain
+Chancellorsville
+Chandy
+Chandy's
+Chang
+Channing
+Chantilly
+Chaplin
+Chapman
+Charles
+Charleston
+Charley
+Charlie
+Charlotte
+Charlottesville
+Charybdis
+Chattahoochee
+Chattanooga
+Chaucer
+Chautauqua
+Chekhov
+Chen
+Cheng
+Cheriton
+Cheriton's
+Cherokee
+Cherokees
+Cheryl's
+Chesapeake
+Cheshire
+Chesterfield
+Chesterton
+Chevrolet
+Chevy
+Cheyenne
+Cheyennes
+Chicago
+Chicago's
+Chicagoan
+Chicagoans
+Chicana
+Chicana's
+Chicanas
+Chicano
+Chicano's
+Chicanos
+Chickasaws
+Chile
+Chiles
+Chimiques
+Chinaman
+Chinamen
+Ching
+Chinook
+Chippendale
+Chippewa
+Chisholm
+Choctaw
+Choctaws
+Chomsky
+Chomsky's
+Chopin
+Chris
+Christ
+Christendom
+Christenson
+Christianity
+Christie
+Christine
+Christlike
+Christopher
+Christopher's
+Christy
+Chrysler
+Churchill
+Churchillian
+Cicero
+Ciceronian
+Cincinnati
+Cinderella
+Cinerama
+Circe
+Citroen
+Claire
+Clara
+Clare
+Claremont
+Clarence
+Clark
+Clarke
+Clarridge
+Claude
+Claudia
+Claudio
+Claus
+Clausen
+Clearwater
+Clemens
+Clemente
+Clemson
+Cleveland
+Clifford
+Clint
+Clinton
+Clinton's
+Clio
+Clive
+Clyde
+Clytemnestra
+Coates
+Cochise
+Coffman
+Cohen
+Cohn
+Colby
+Coleridge
+Colgate
+Colombia
+Colombian
+Colombians
+Colosseum
+Columbia
+Columbian
+Columbus
+Comanche
+Commie
+Compuserve
+Compuserve's
+Concorde
+Concordia
+Conestoga
+Confucian
+Confucianism
+Confucius
+Congo
+Connecticut
+Connelly
+Connie
+Conrad
+Conrad's
+Conrail
+Conrail's
+Constantinople
+Coolidge
+Coors
+Copeland
+Copenhagen
+Copernicus
+Copperfield
+Corinthian
+Corinthians
+Cornell
+Cornell's
+Cornish
+Cornwall
+Cornwallis
+Corp
+Corsica
+Corsican
+Cortland
+Costello
+Covent
+Coventry
+Craig
+Cramer
+Crandall
+Cranford
+Cranston
+Crawford
+Cree
+Creighton
+Creole
+Creon
+Crestview
+Cretaceous
+Cretaceously
+Cretan
+Crete
+Crimea
+Crimean
+Croatian
+Crockett
+Croix
+Cromwell
+Cromwellian
+Crosby
+Crowley
+Crusoe
+Cuba
+Cuban
+Cubans
+Culver
+Culvers
+Cumberland
+Cunard
+Cunningham
+Cupid
+Cushman
+Cyanamid
+Cygnus
+Cynthia
+Cyprian
+Cypriot
+Cyprus
+Cyril
+Cyrus
+Czech
+Czechoslovakia
+DAG
+DB
+DECsystem
+DECtape
+DNA
+Dacron
+Dadaism
+Dadaist
+Dade
+Daedalus
+Daimler
+Dakar
+Dakota
+Dali
+Dallas
+Dalton
+Daly
+Damascus
+Danbury
+Dane
+Danes
+Daniel
+Daniels
+Danielson
+Danish
+Danny
+Danny's
+Dante
+Danube
+Danville
+Danzig
+Daphne
+Darlene
+Darlington
+Darrell
+Darrow
+Dartmouth
+Darwin
+Darwinian
+Darwinism
+Datamedia
+Datsun
+Dave
+Dave's
+David
+David's
+Davidson
+Davie
+Davies
+Davinich
+Davis
+Davy
+Dawson
+Dayton
+DeKalb
+Dearborn
+Debby
+Deborah
+Debra
+Debussy
+Dec
+Decca
+Deere
+Defoe
+Delhi
+Delhi's
+Delilah
+Dellwood
+Delphi
+Delphic
+Dempsey
+Deneen
+Dennis
+Denny
+Denver
+Dependant
+Dependants
+Dept
+Derbyshire
+Descartes
+Desmond
+Deutsch
+Devon
+Devonshire
+Dewey
+Dewitt
+Dexedrine
+DiMaggio
+Diana
+Diane
+Dianne
+Dick's
+Dickinson
+Dickson
+Diego
+Dietrich
+Dijon
+Dillon
+Dinah
+Diogenes
+Dion
+Dionysian
+Dionysus
+Dirac
+Disney
+Disneyland
+Disraeli
+Dixie
+Dixiecrats
+Dixieland
+Djakarta
+Dmitri
+Doberman
+Doc
+Dodington
+Dogtown
+Dolores
+Domesday
+Domingo
+Dominic
+Dominican
+Dominicans
+Donahue
+Donald
+Donald's
+Donaldson
+Donna
+Donnelly
+Donovan
+Doolittle
+Doppler
+Dora
+Dora's
+Dorado
+Dorchester
+Doris
+Dorothy
+Dostoevsky
+Doubleday
+Doug
+Dougherty
+Douglas
+Douglass
+Dow
+Downey
+Doyle
+Dr
+Dramamine
+Drexel
+Dreyfuss
+Drury
+Dryden
+DuPont
+DuPonts
+Duane
+Dublin
+Dubuque
+Duffy
+Dulles
+Duluth
+Dumas
+Dumont
+Dumpty
+Duncan
+Dunham
+Dunkirk
+Dunlap
+Dunne
+Dupont
+Duponts
+Durham
+Durkee
+Dusenberg
+Dusseldorf
+Dustin
+Dutch
+Dutchman
+Dutchmen
+Dvorak
+Dwight
+Dyke
+EBCDIC
+EEG
+EPA
+Earp
+Easthampton
+Eastland
+Eastman
+Eastwick
+Eastwood
+Econometrica
+Ecuador
+Eddie
+Edgar
+Edgerton
+Edgewater
+Edgewood
+Edinburgh
+Edison
+Edith
+Edmund
+Edna
+Eduard
+Edward
+Edwardian
+Edwards
+Edwin
+Edwina
+Egerton
+Egypt
+Egyptian
+Egyptians
+Eichmann
+Eileen
+Einstein
+Einsteinian
+Eisenhower
+Ekberg
+Ektachrome
+Elaine
+Elba
+Eleanor
+Electra
+Eli
+Elijah
+Eliot
+Elisabeth
+Elise
+Elise's
+Elizabeth
+Elizabethan
+Elizabethans
+Elkhart
+Ella
+Ellie
+Elliot
+Elliott
+Ellis
+Ellison
+Ellsworth
+Elmhurst
+Elmira
+Elmsford
+Eloise
+Elroy
+Elsie
+Elsinore
+Elysees
+Elysium
+Emanuel
+Emerson
+Emily
+Emma
+Emmanuel
+Emory
+Endicott
+Englewood
+Englishman
+Englishmen
+Enoch
+Enos
+Enrico
+Ensolite
+Eocene
+Ephesian
+Ephesians
+Ephraim
+Epicurus
+Episcopalian
+Epsom
+Epstein
+Erasmus
+Eratosthenes
+Eric
+Erich
+Erickson
+Ericsson
+Erie
+Erik
+Erik's
+Erikson
+Ernest
+Ernestine
+Ernie
+Ernst
+Eros
+Errol
+Ervin
+Erwin
+Eskimo
+Eskimos
+Esp
+Espagnol
+Essex
+Esther
+Ethan
+Ethel
+Ethiopia
+Ethiopians
+Etruscan
+Eucharist
+Euclid
+Euclidean
+Eugene
+Eugenia
+Euler
+Eulerian
+Eunice
+Euphrates
+Eurasia
+Eurasian
+Euripides
+Europa
+Eurydice
+Eva
+Evangeline
+Evans
+Evanston
+Evansville
+Evelyn
+Eveready
+Everett
+Everglades
+Ewen
+Exeter
+Exxon
+Ezekiel
+Ezra
+FAQ's
+FAQs
+FBI
+FCC
+FDA
+FTP
+Fagin
+Fahrenheit
+Fahrenheits
+Fairchild
+Fairfax
+Fairfield
+Fairmont
+Fairport
+Fairview
+Falk
+Falstaff
+Fannies
+Fanny
+Faraday
+Farber
+Fargo
+Farley
+Farmington
+Farrell
+Fatima
+Faulkner
+Faulknerian
+Fauntleroy
+Faust
+Faustian
+Faustus
+Fawkes
+Fayetteville
+Featherman
+Feb
+Feldman
+Felice
+Felicia
+Felix
+Fellini
+Fenwick
+Ferdinand
+Ferdinando
+Fermi
+Fernando
+Fess
+Fiberglas
+Fibonacci
+Fidel
+Figaro
+Filipino
+Filipinos
+Filippo
+Fillmore
+Finland
+Finn
+Finnegan
+Finnish
+Finns
+Fiorello
+Fiori
+Firestone
+Fischer
+Fishkill
+Fisk
+Fitch
+Fitchburg
+Fitzgerald
+Fitzpatrick
+Fitzroy
+Flanagan
+Flanders
+Fledermaus
+Fleischman
+Fleisher
+Fleming
+Flemings
+Flemish
+Flemished
+Flemishes
+Flemishing
+Florence
+Florentine
+Floridian
+Floridians
+Floyd
+Flynn
+Folsom
+Fontainebleau
+Fontana
+Foote
+Forbes
+Fordham
+Formica
+Formosa
+Formosan
+Foxhall
+Fran
+Fran's
+Francaise
+Francesca
+Francesco
+Francie
+Francis
+Franciscan
+Franciscans
+Francisco
+Franco
+Francois
+Frankford
+Frankfort
+Frankfurt
+Frankie
+Franny
+Franz
+Frau
+Frayne
+Frazier
+Fred
+Freddie
+Freddy
+Freddy's
+Frederic
+Frederick
+Fredericks
+Frederico
+Fredrick
+Fredrickson
+Freeport
+Freida
+Frenchman
+Frenchmen
+Fresnel
+Fresno
+Freud
+Freudian
+Frey
+Fri
+Frick
+Friedman
+Frigga
+Frigidaire
+Frisbee
+Frito
+Fritz
+Frostbelt
+Frostbelt's
+Fuchs
+Fuji
+Fulbright
+Fullerton
+GM
+GNP
+GSA
+Gabriel
+Gabrielle
+Gaelic
+Gail
+Gainesville
+Gaithersburg
+Galahad
+Galapagos
+Galatea
+Galbreath
+Galilee
+Galloway
+Gallup
+Galois
+Galveston
+Ganges
+Ganymede
+Garcia
+Gardner
+Garfield
+Garibaldi
+Garnett
+Garrett
+Garry
+Garvey
+Gary
+Gary's
+Gascony
+Gasset
+Gaston
+Gatlinburg
+Gatsby
+Gauguin
+Gaul
+Gauntley
+Gaussian
+Gavin
+Gaylor
+Gaylord
+Gaynor
+Geary
+Gehrig
+Geiger
+Gemini
+Geneva
+Geneva's
+Genevieve
+Genevieve's
+George
+George's
+Georges
+Georgetown
+Georgia
+Georgian
+Georgians
+Gerald
+Geraldine
+Gerard
+Gerber
+Gerhard
+Gerhardt
+Germania
+Germanic
+Germantown
+Gerome
+Gerry
+Gerry's
+Gershwin
+Gershwins
+Gertrude
+Getty
+Gettysburg
+Ghana
+Ghent
+Giacomo
+Gibbs
+Gibby
+Gibraltar
+Giddings
+Gideon
+Gifford
+Gilbertson
+Gilda
+Gilda's
+Giles
+Gilkson
+Gillespie
+Gillette
+Gilligan
+Gimbel
+Gioconda
+Giorgio
+Giovanni
+Gladstone
+Gladys
+Glasgow
+Gleason
+Glenda
+Glendale
+Glenn
+Gloria
+Gloucester
+Glynn
+Godot
+Goethe
+Gogh
+Golda
+Goldberg
+Goldman
+Goldstein
+Goldstein's
+Goldwater
+Goliath
+Gomez
+Gonzales
+Goodman
+Goodrich
+Goodwin
+Goodyear
+Gordian
+Gordon
+Gorham
+Gorky
+Gotham
+Gothicism
+Gracie
+Grady
+Grafton
+Granville
+Grayson
+Grecian
+Greece
+Greenberg
+Greenblatt
+Greenbriar
+Greenfeld
+Greenfield
+Greenland
+Greensboro
+Greensville
+Greentree
+Greenville
+Greenwich
+Gregg
+Gregory
+Grendel
+Grenier
+Grenoble
+Grenville
+Greta
+Gretchen
+Gretel
+Gretel's
+Griffith
+Grimm
+Gris
+Groot
+Grosset
+Grossman
+Grosvenor
+Groton
+Grumman
+Grusky
+Guadalupe
+Guam
+Guatemala
+Guatemalan
+Guggenheim
+Guhleman
+Guiana
+Gunderson
+Gunnar
+Gus
+Gutenberg
+Guthrie
+Guyana
+Gwen
+HP
+Hackett
+Hades
+Hafiz
+Hague
+Haifa
+Haiti
+Haitian
+Hal
+Halifax
+Hallinan
+Halloween
+Hamey
+Hamilton
+Hamiltonian
+Hamiltonians
+Hammett
+Hammond
+Hampshire
+Hampton
+Hancock
+Hannah
+Hannibal
+Hanoi
+Hanover
+Hanoverian
+Hans
+Hansel
+Hansen
+Hanson
+Hanukkah
+Hapgood
+Harcourt
+Hardin
+Harlem
+Harold
+Harriet
+Harris
+Harrisburg
+Harrison
+Harrisonburg
+Harry's
+Hartford
+Hartley
+Hartman
+Harvard
+Harvey
+Harveys
+Haskell
+Haskins
+Hatchure
+Hatfield
+Hattie
+Hauser
+Havana
+Hawaii
+Hawaiian
+Hawkins
+Hawley
+Hawthorne
+Haydn
+Hayes
+Haynes
+Hayward
+Haywood
+Hearst
+Heartwood
+Heathkit
+Heathman
+Hebraic
+Hebrew
+Hebrews
+Hecuba
+Hedda
+Hegel
+Hegelian
+Heidegger
+Heidelberg
+Heidi
+Heidi's
+Heinz
+Heinze
+Heisenberg
+Heiser
+Helen
+Helena
+Helene
+Heliopolis
+Hellenic
+Helmholtz
+Helmut
+Helsinki
+Hemingway
+Henderson
+Hendrick
+Hendricks
+Hendrickson
+Hendrix
+Hennessey
+Hennessey's
+Henrietta
+Hepburn
+Hera
+Heraclitus
+Herbert
+Herculean
+Hercules
+Hereford
+Herman
+Hermes
+Hermite
+Hermosa
+Hernandez
+Herodotus
+Herr
+Herrington
+Herschel
+Hersey
+Hershel
+Hershey
+Hesperus
+Hess
+Hessian
+Hessians
+Heublein
+Heywood
+Hiawatha
+Hibernia
+Hickey
+Hickeys
+Hickok
+Hieronymus
+Highfield
+Hilbert
+Hillary
+Hillcrest
+Hillel
+Hillsboro
+Hillsdale
+Hilton
+Himalayas
+Himmler
+Hindi
+Hindu
+Hindu's
+Hinduism
+Hindus
+Hinkle
+Hinsdale
+Hiram
+Hirey
+Hiroshima
+Hispanic
+Hispanic's
+Hispanics
+Hitachi
+Hitchcock
+Hitler
+Hobbes
+Hobbs
+Hobday
+Hoboken
+Hoffman
+Holbrook
+Hollerith
+Hollister
+Hollywood
+Hollywood's
+Holmes
+Holocene
+Holst
+Holstein
+Holyoke
+Holzman
+Homeric
+Hondo
+Honduras
+Honeywell
+Honolulu
+Hoosier
+Hoover
+Hoover's
+Hopi
+Hopkins
+Hopkinsian
+Horace
+Horatio
+Hornblower
+Horowitz
+Horton
+Houdini
+Houston
+Howard
+Howe
+Howell
+Hubble
+Hubble's
+Hubert
+Huck
+Hudson
+Huey
+Hugh
+Hughes
+Hugo
+Humboldt
+Hume
+Humphrey
+Humphreys
+Humpty
+Hungarian
+Hungary
+Huntsville
+Huron
+Hurst
+Hutchins
+Hutchinson
+Hutchison
+Huxley
+Hyannis
+ICC
+ISO
+ITT
+IUD
+IUDs
+Iberia
+Iberian
+Ibero
+Ibsen
+Icarus
+Iceland
+Iceland's
+Icelander
+Icelandic
+Idaho
+Igor
+Iliad
+Imbrium
+Inca
+Incas
+Indianapolis
+Indies
+Indira
+Indochina
+Indonesia
+Indonesian
+Indy
+Ingersoll
+Ingram
+Inverness
+Io
+Iowa
+Iraq
+Iraqi
+Irene
+Irish
+Irishman
+Irishmen
+Irma
+Iroquois
+Irvine
+Irving
+Irwin's
+Isaac
+Isaacs
+Isabel
+Islam
+Islamic
+Islandia
+Israelite
+Israelites
+Istanbul
+Italy
+Ithaca
+Ithacan
+Ivan
+Ivanhoe
+Izaak
+Izvestia
+Jackie
+Jackman
+Jackson
+Jacksonian
+Jacksons
+Jacksonville
+Jacky
+Jacob
+Jacobean
+Jacobian
+Jacobite
+Jacobs
+Jacobsen
+Jacoby
+Jacqueline
+Jacques
+Jakarta
+Jake
+Jakes
+Jamaica
+Jamaican
+Jameson
+Jamestown
+Jan
+Jane
+Jane's
+Janeiro
+Janesville
+Janet
+Janet's
+Janice
+Janis
+Jansen
+Janus
+Jason
+Jastrow
+Java
+Javanese
+Jaycee
+Jaycees
+Jeanette
+Jeanie
+Jeanne
+Jeannie
+Jeff
+Jeffersonian
+Jeffersonians
+Jeffrey
+Jeffreys
+Jehovah
+Jello
+Jenkins
+Jennie
+Jennifer
+Jennings
+Jeremiah
+Jeremy
+Jericho
+Jerome
+Jerry's
+Jerusalem
+Jesse
+Jesse's
+Jessica
+Jessie
+Jessy
+Jesuit
+Jesuits
+Jesus
+Jew
+Jewelled
+Jewish
+Jewishness
+Jews
+Jim
+Jim's
+Jimmie
+Jimmy's
+Jinny
+Joan
+Joanna
+Joanne
+Joanne's
+Joannes
+Joaquin
+Jobrel
+Jodi
+Jodi's
+Jody
+Joe
+Joel
+Joes
+Johann
+Johannes
+Johannesburg
+Johansen
+Johanson
+Johnny
+Johnny's
+Johnsen
+Johnson
+Johnstown
+Joliet
+Jon
+Jon's
+Jonas
+Jonathan
+Jones
+Joneses
+Joplin
+Jordan
+Jorge
+Jorgensen
+Jorgenson
+Jose
+Josef
+Joseph
+Josephine
+Josephson
+Josephus
+Joshua
+Josiah
+Jovanovich
+Jove
+Jovian
+Joyce
+Juan
+Juanita
+Jubal
+Judaism
+Judas
+Jude
+Judea
+Judith
+Judy
+Jules
+Julia
+Julian
+Juliet
+Julio
+Julius
+Juneau
+Jungian
+Juno
+Jupiter
+Justine
+Justinian
+Jutish
+KGB
+Kabuki
+Kabul
+Kaddish
+Kafka
+Kafkaesque
+Kalamazoo
+Kamikazes
+Kankakee
+Kansas
+Kant
+Karen
+Karl
+Karol
+Kate
+Katherine
+Kathleen
+Kathy
+Katie
+Katie's
+Katmandu
+Kay
+Keaton
+Keats
+Keegan
+Keenan
+Keith
+Keller
+Kelley
+Kellogg
+Kelly
+Kelly's
+Kelvin
+Kenilworth
+Kennecott
+Kennedy
+Kenneth
+Kenny
+Kenosha
+Kensington
+Kent
+Kentucky
+Kenya
+Kepler
+Kepler's
+Kermit
+Kettering
+Kevin
+Kewaskum
+Kewaunee
+Keynes
+Keynesian
+Khmer
+Khrushchev
+Khrushchevs
+Kickapoo
+Kiel
+Kiev
+Killebrew
+Kim
+Kingsbury
+Kingsley
+Kingston
+Kingstown
+Kingwood
+Kinnickinnic
+Kinsey
+Kipling
+Kirby
+Kirchoff
+Kirk
+Kirk's
+Kirkland
+Kirkpatrick
+Kirkwood
+Kiwanis
+Klan
+Klaus
+Knobeloch
+Knowles
+Knox
+Knoxville
+Knudsen
+Knudson
+Knutsen
+Knutson
+Koch
+Kodachrome
+Kodak
+Kodaks
+Kodiak
+Koenig
+Koenigsberg
+Kohler
+Kong
+Konrad
+Korea
+Korean
+Koreans
+Kraemer
+Krakatoa
+Krakow
+Kramer
+Krause
+Kremlin
+Kresge
+Kris
+Krishna
+Kristina
+Krueger
+Kruger
+Kurd
+Kurdish
+Kurt
+Kuwait
+Kyle
+Kyoto
+LIFO
+Labrador
+Lacey
+Lackawanna
+Lafayette
+Lagrange
+Laguna
+Lakehurst
+Lakewood
+Lancashire
+Lancaster
+Landis
+Landwehr
+Lange
+Langeland
+Langford
+Langley
+Lansing
+Laocoon
+Laos
+Laotian
+Laotians
+Laplace
+Laramie
+Laredo
+Larry
+Larry's
+Lars
+Larsen
+Larson
+Lathrop
+Latinate
+Lattimer
+Lauderdale
+Laundromat
+Laundromats
+Laura's
+Lauren
+Laurence
+Laurentian
+Lawford
+Lawrence
+Lawrenceville
+Lawson
+Lazarus
+Leary
+Leavenworth
+Lebanese
+Lebanon
+Lebesgue
+Lee's
+Lehigh
+Leigh
+Leighton
+Leila
+Lemke
+Lenin
+Leningrad
+Leninism
+Leninist
+Lenny
+Leo
+Leon
+Leona
+Leonard
+Leonardo
+Leone
+Leopold
+Leopoldville
+Leroy
+Leslie
+Levi
+Levine
+Levis
+Leviticus
+Lewellyn
+Lexington
+Leyden
+Liberace
+Liberia
+Libya
+Libyan
+Lichtenstein
+Lichter
+Lieberman
+Liechtenstein
+Lilliputian
+Lima
+Lincoln
+Linda
+Lindberg
+Lindy
+Linotype
+Linus
+Lionel
+Lipton
+Lisa
+Lisbon
+Liss
+Liston
+Lithuanian
+Littleton
+Litton
+Livermore
+Liverpool
+Livingston
+Lizzie
+Lizzy
+Lloyd
+Locke
+Lockhart
+Lockheed
+Lockian
+Lockwood
+Logan
+Lois
+Lola
+Lombard
+London
+Londonderry
+Londoner
+Longfellow
+Longstreet
+Lopez
+Lorelei
+Lorentzian
+Lorenz
+Lorenz's
+Lorraine
+Lothario
+Lottie
+Louis
+Louisa
+Louise
+Louisiana
+Louisianan
+Louisville
+Lovejoy
+Lovelace
+Loveland
+Lowell
+Loy
+Loyola
+Ltd
+Lubbock
+Lucas
+Lucerne
+Lucia
+Lucian
+Lucien
+Lucifer
+Lucille
+Lucius
+Lucretia
+Lucretius
+Lucy
+Ludmilla
+Ludwig
+Lufthansa
+Luftwaffe
+Luke
+Luke's
+Luna
+Luna's
+Luther
+Lutheran
+Luxembourg
+Lydia
+Lynchburg
+Lyndon
+Lynn
+Lyon
+MAG
+MBA
+MD
+MDT
+MIG
+MIGs
+MIMD
+MPH
+MST
+MTS
+MTV
+Mac
+MacArthur
+MacDonald
+MacGregor
+MacKenzie
+MacMillan
+Macarthur
+Macaulay
+Macbeth
+Macdonald
+Macedon
+Macedonia
+Macedonian
+Macgregor
+Mach
+Machiavelli
+Mackenzie
+Mackinac
+Macmillan
+Macon
+Madagascar
+Madame
+Madames
+Madeleine
+Madeleine's
+Madeline
+Madeline's
+Madison
+Madonna
+Madonnas
+Madrid
+Maelstrom
+Magdalene
+Maggie
+Magill
+Magruder
+Maguire
+Maguires
+Mahler
+Mahler's
+Maine
+Malamud
+Malay
+Malaysia
+Malaysian
+Malcolm
+Mallory
+Malone
+Malta
+Maltese
+Malthusian
+Managua
+Manchester
+Manfred
+Manitoba
+Manitowoc
+Mankowski
+Mansfield
+Manville
+Mao
+Maori
+Maplecrest
+Marcotte
+Marcus
+Marcy
+Mardi
+Mardis
+Marguerite
+Maria's
+Marian
+Marian's
+Marie
+Marie's
+Marietta
+Marilyn
+Marin
+Marino
+Mario
+Marion
+Marjorie
+Mark's
+Markov
+Markovian
+Markovitz
+Marlborough
+Marlene
+Marlowe
+Marquette
+Marriott
+Marseilles
+Marsha
+Marshall
+Marshalled
+Marshalling
+Martha
+Martian
+Martians
+Martinez
+Martinique
+Martinson
+Marty
+Marvin
+Marx
+Marxism
+Marxisms
+Marxist
+Masonic
+Masonite
+Mathews
+Mathewson
+Mathias
+Mathieu
+Matilda
+Matisse
+Matisses
+Matthew
+Matthews
+Mattie
+Maude
+Maureen
+Maurice
+Mauritania
+Mauritius
+Mawr
+Maximilian
+Maxine
+Maxwellian
+Maya
+Mayans
+Mayfair
+Mayflower
+Maynard
+Mazda
+McAdams
+McAllister
+McAllister's
+McBride
+McBride's
+McCabe
+McCabe's
+McCall
+McCall's
+McCarthy
+McCarthy's
+McCauley
+McCauley's
+McClain
+McClain's
+McClellan
+McClellan's
+McClure
+McClure's
+McCluskey
+McCluskey's
+McConnell
+McConnell's
+McCoy
+McCoy's
+McCracken
+McCracken's
+McDaniel
+McDaniel's
+McDermott
+McDermott's
+McDonald
+McDonald's
+McDonnell
+McDonnell's
+McDougall
+McDougall's
+McFadden
+McFadden's
+McFarland
+McFarland's
+McGill
+McGill's
+McGovern
+McGovern's
+McGrath
+McGrath's
+McGraw
+McGraw's
+McGregor
+McGregor's
+McGuire
+McGuire's
+McIntosh
+McIntosh's
+McIntyre
+McIntyre's
+McKay
+McKay's
+McKee
+McKee's
+McKesson
+McKesson's
+McKinley
+McKinley's
+McKinney
+McKinney's
+McKnight
+McKnight's
+McLanahan
+McLaughlin
+McLaughlin's
+McLean
+McLean's
+McLeod
+McLeod's
+McMillan
+McMillan's
+McNaughton
+McNaughton's
+McNeil
+McNeil's
+McPherson
+McPherson's
+Medea
+Medfield
+Medicaid
+Medicare
+Medici
+Medicis
+Mediterranean
+Meister
+Meistersinger
+Mekong
+Mel
+Melanesia
+Melanesian
+Melanie
+Melbourne
+Melinda
+Melisande
+Melissa
+Mellon
+Melville
+Melvin
+Memphis
+Mencken
+Mendelssohn
+Mendoza
+Menelaus
+Menlo
+Mennonite
+Mennonites
+Menominee
+Mensch
+Mephistopheles
+Mercator
+Mercedes
+Meredith
+Meriwether
+Merle
+Merriam
+Merrick
+Merrill
+Merrimac
+Merrimack
+Mesozoic
+Messrs
+Methuselah
+Methuselahs
+Mexican
+Mexicans
+Mexico
+Meyer
+Meyers
+Miami
+Michael
+Michael's
+Michaelangelo
+Michaels
+Michaelson
+Michelangelo
+Michelin
+Michelson
+Mick
+Mickelson
+Mickey
+Mickey's
+Mickie
+Micky
+Micronesia
+Micronesian
+Middlebury
+Middlesex
+Middleton
+Middletown
+Midwestern
+Midwesterner
+Midwesterners
+Miguel
+Mikhail
+Mikoyan
+Milan
+Mildred
+Millard
+Millie
+Milquetoast
+Milquetoasts
+Milton
+Miltonic
+Milwaukee
+Mimi
+Minerva
+Minneapolis
+Minnie
+Minoan
+Miocene
+Mira
+Miranda
+Miriam
+Mississippi
+Mississippian
+Mississippians
+Missoula
+Missouri
+Missy
+Mitch
+Mitch's
+Mitchell
+Mitchell's
+Mobil
+Modesto
+Mohammed
+Mohammedan
+Mohawk
+Moines
+Moliere
+Moline
+Molly
+Molotov
+Mon
+Monaco
+Monet
+Monfort
+Mongolia
+Mongolian
+Monica
+Monroe
+Monrovia
+Monsanto
+Montague
+Montaigne
+Montclair
+Monterey
+Montevideo
+Montgomery
+Monticello
+Montpelier
+Montreal
+Monty
+Mooney
+Moore
+Moorish
+Moravia
+Moravian
+Morehouse
+Moreland
+Morgan
+Moriarty
+Mormon
+Moroccan
+Morrison
+Morristown
+Morse
+Mortimer
+Morton
+Morton's
+Moscone
+Moscow
+Moses
+Mossberg
+Mozart
+Mozart's
+Muhammad
+Muir
+Mulligan's
+Mumford
+Muncie
+Mundt
+Munich
+Munroe
+Munson
+Muriel
+Murphy
+Murray
+Murrow
+Muscat
+Muscovy
+Muskegon
+Mussolini
+Mussolini's
+Mussolinis
+Mussorgsky
+Mussorgsky's
+Muzak
+Mycenae
+Mycenaean
+Myron
+NAACP
+NASA
+NATO
+NBC
+NBS
+NCAA
+NCC
+NCR
+NOAA
+NSF
+NYSE
+NaCl
+Nabisco
+Nagasaki
+Nairobi
+Nakamura
+Nakoma
+Nan
+Nancy
+Nancy's
+Nanette
+Nanking
+Nanook
+Nantucket
+Naomi
+Naples
+Napoleon
+Napoleonic
+Nash
+Nashua
+Nashville
+Nassau
+Nat
+Natalie
+Natalie's
+Natchez
+Nate
+Nathan
+Nathaniel
+Navaho
+Navajo
+Navona
+Nazarene
+Nazareth
+Nazism
+Neal's
+Neanderthal
+Neapolitan
+Needham
+Nepali
+Neptune
+Nero
+Nestor
+Neumann
+Nevada
+Newark
+Newbury
+Newburyport
+Newcastle
+Newell
+Newman
+Newport
+Newsweek
+Newsweekly
+Niagara
+Nicaean
+Nicaragua
+Niccolo
+Nicholas
+Nichols
+Nicholson
+Nicklaus
+Nicodemus
+Nielsen
+Nielson
+Nietzsche
+Nigeria
+Nigerian
+Nijinsky
+Nile
+Nilsen
+Nilsson
+Nina
+Niobe
+Nippon
+Nixon
+Noah
+Nobel
+Noel
+Norfolk
+Norma
+Norman
+Normandy
+Norris
+Norristown
+Norse
+Northampton
+Northfield
+Northumberland
+Norton
+Norwalk
+Norway
+Norwegian
+Norwich
+Nostradamus
+Notre
+Nottingham
+Noyes
+Nubian
+Nugent
+O'Brien
+O'Brien's
+O'Clock
+O'Connell
+O'Connell's
+O'Connor
+O'Connor's
+O'Dell
+O'Dell's
+O'Donnell
+O'Donnell's
+O'Dwyer
+O'Dwyer's
+O'Er
+O'Hare
+O'Hare's
+O'Leary
+O'Leary's
+O'Shea
+O'Shea's
+O'Sullivan
+O'Sullivan's
+OK's
+OPEC
+Oakland
+Oakley
+Oakmont
+Oberlin
+Occam
+Occam's
+Oconomowoc
+Octavia
+Odessa
+Odysseus
+Oedipal
+Oedipally
+Offenbach
+Ogden
+Okamoto
+Okinawa
+Olaf
+Oldenburg
+Oldsmobile
+Oleg
+Olga
+Olivers
+Olivetti
+Olivia
+Olsen
+Olson
+Olympia
+Olympian
+Olympic
+Olympics
+Olympus
+Omaha
+Oman
+Oneida
+Ontario
+Opel
+Oppenheimer
+Oregon
+Oregonians
+Orlando
+Orleans
+Orlick
+Orpheus
+Orphic
+Ortega
+Orwell
+Orwellian
+Osaka
+Osbert
+Osborn
+Osborne
+Oscar
+Oshkosh
+Oslo
+Ostrander
+Oswald
+Othello
+Ottawa
+Otto
+Otto's
+Ottoman
+Ovid
+Owen
+Owens
+Oxford
+Oxnard
+Oz
+Ozark
+Ozarks
+Ozzie
+PBS
+PDT
+PM
+PST
+PTA
+Pablo
+Pabst
+Packwood
+Paganini
+Paine
+Pakistan
+Pakistani
+Pakistanis
+Palatine
+Paleolithic
+Paleozoic
+Palermo
+Palestine
+Palmolive
+Palmyra
+Palomar
+Pam
+Pam's
+Pamela
+Pancho
+Pandora
+Pappas
+Paraguay
+Paris
+Parisian
+Parkersburg
+Parkhouse
+Parkinson
+Parrish
+Parthenon
+Pasadena
+Passaic
+Passover
+Pasternak
+Pasteur
+Patagonia
+Patagonians
+Patrice
+Patricia
+Patrick
+Patsies
+Patsy
+Patterson
+Patton
+Paul
+Paul's
+Paula
+Paulette
+Paulette's
+Pauli
+Pauline
+Pauling
+Paulsen
+Paulson
+Pavlov
+Pawtucket
+Payne
+Paynes
+Payson
+Peabody
+Peachtree
+Pearce
+Pearson
+Pecos
+Pedro
+Pegasus
+Peggy
+Peking
+Pelham
+Pendleton
+Penn
+Pensacola
+Pentecost
+Peoria
+Pepsi
+Pepsico
+Percy
+Perez
+Pergamon
+Pericles
+Perkins
+Pernod
+Perry
+Perry's
+Perseus
+Pershing
+Persia
+Persian
+Persians
+Perth
+Peru
+Peruvian
+Peruvians
+Pete
+Pete's
+Petersburg
+Petersen
+Peterson
+Pettibone
+Peugeot
+Pewaukee
+Peyton
+Peyton's
+Pfizer
+Ph
+Phaedra
+Phil
+Philadelphia
+Philco
+Philip
+Philippe
+Philippians
+Philippine
+Philippines
+Philistine
+Philistines
+Phillies
+Phillips
+Philly
+Phyllis
+Picasso
+Piccadilly
+Pickford
+Pickman
+Pierre
+Pierson
+Pillsbury
+Pinehurst
+Pipestone
+Pisa
+Pisces
+Pitney
+Pitt
+Pittsburgh
+Pittsburghers
+Pittsfield
+Pittston
+Pius
+Plainfield
+Plainview
+Plato
+Platonism
+Platonist
+Platteville
+Pleiades
+Pleistocene
+Plexiglas
+Pliny
+Pliocene
+Plutarch
+Pluto
+Plymouth
+Pocahontas
+Pocono
+Poconos
+Poe
+Poincare
+Poindexter
+Poisson
+Polaris
+Polaroid
+Polk
+Pollux
+Polynesian
+Polyphemus
+Pomerania
+Pomeranian
+Pomona
+Pompeii
+Pompey
+Pontiac
+Popsicle
+Popsicles
+Portland
+Portsmouth
+Portugal
+Portuguese
+Poseidon
+Potemkin
+Potomac
+Potsdam
+Pottawatomie
+Potts
+Poughkeepsie
+Poussin
+Poussins
+Powell
+Prague
+Pratt
+Prattville
+Pravda
+Precambrian
+Prentice
+Prenticed
+Prenticing
+Presbyterian
+Presbyterianism
+Prescott
+Presley
+Preston
+Preston's
+Pretoria
+Priestley
+Princeton
+Principia
+Priscilla
+Procrustes
+Procyon
+Prokofieff
+Promethean
+Prometheus
+Protestantism
+Proust
+Proxmire
+Prussia
+Prussian
+Ptolemaic
+Ptolemaists
+Ptolemy
+Puccini
+Puerto
+Pulaski
+Pulitzer
+Pullman
+Pullmans
+Purcell
+Purdue
+Purina
+Pygmalion
+Pyhrric
+Pyrex
+Pythagoras
+Pythagorean
+Pythagoreans
+Quakeress
+Quantico
+Quasimodo
+Quebec
+Quinn
+Quinn's
+Quixote
+RCA
+RISC
+RMS
+ROTC
+RPM
+RSVP
+Rachel
+Rachmaninoff
+Racine
+Radcliffe
+Rafael
+Rajive
+Rajive's
+Raleigh
+Ralph
+Ralph's
+Ralston
+Ramada
+Ramirez
+Ramona
+Ramsey
+Rand
+Randall
+Randolph
+Randy's
+Rangoon
+Raoul
+Raphael
+Rapunzel
+Rasmussen
+Rawlings
+Rawlins
+Rawlinson
+Rawson
+Rayburn
+Rayleigh
+Raymond
+Raymondville
+Raytheon
+Reagan
+Rebecca
+Redhook
+Redstone
+Reedville
+Reese
+Regina
+Reginald
+Regulus
+Reich
+Reichenberg
+Reichstag
+Reilly
+Reinhard
+Reinhardt
+Reinhold
+Rembrandt
+Remington
+Remus
+Renaults
+Renee
+Renee's
+Renoir
+Renville
+Reuben
+Reuters
+Reuther
+Rev
+Rex
+Reynolds
+Rhea
+Rheims
+Rheinholdt
+Rhenish
+Rhine
+Rhinelander
+Rhodes
+Rhodesia
+Rhonda
+Rican
+Ricans
+Richard
+Richard's
+Richards
+Richardson
+Richey
+Richfield
+Richland
+Richmond
+Richter
+Rickenbaugh
+Ridgefield
+Ridgway
+Riemann
+Riggs
+Riley
+Rilke
+Rinehart
+Rio
+Ripley
+Ritter
+Ritz
+Riverview
+Riviera
+Riyadh
+Robbie
+Robbins
+Roberta
+Roberto
+Robertson
+Robertsons
+Robinsonville
+Rochester
+Rochester's
+Rockaway
+Rockaways
+Rockefeller
+Rockford
+Rockland
+Rockville
+Rockwell
+Rodgers
+Rodney
+Rodney's
+Rodriguez
+Roger
+Roger's
+Rogers
+Roland
+Rollie
+Rollins
+Romano
+Rome
+Romeo
+Romeos
+Romulus
+Ron
+Ronald
+Ronnie
+Rooney
+Roosevelt
+Roosevelt's
+Rooseveltian
+Rorschach
+Rosa
+Rosabelle
+Rosalie
+Roseland
+Rosella
+Rosen
+Rosenberg
+Rosetta
+Rosie
+Ross
+Rossi
+Roswell
+Rotarian
+Rotarians
+Roth
+Rousseau
+Rousseau's
+Rowena
+Rowena's
+Rowland
+Rowland's
+Rowley
+Rowley's
+Roxy
+Roxy's
+Rozelle
+Rozelle's
+Rudolph
+Rudolph's
+Rudy
+Rufus
+Rumania
+Rumanian
+Rumanians
+Rumford
+Rummel
+Runnymede
+Runyon
+Ruppert
+Rushmore
+Russ
+Russell
+Russia
+Rutgers
+Ruth
+Rutherford
+Rutland
+Rutledge
+Ryan
+Ryder
+SCSI
+SIMD
+SMSA
+SMSA's
+SMSAs
+SPSS
+Sabine
+Sacramento
+Sadie
+Saginaw
+Sahara
+Saigon
+Salem
+Salerno
+Salisbury
+Salk
+Salvador
+Salvadoran
+Salvatore
+Sammy
+Sammy's
+Samoa
+Samoan
+Sampson
+Samson
+Samuel
+Samuels
+Samuelson
+Sanchez
+Sancho
+Sandburg
+Sanderson
+Sandia
+Sandra
+Sandusky
+Sanford
+Sanhedrin
+Sanskrit
+Sanskritic
+Santa
+Santayana
+Santiago
+Sara
+Sarah
+Sarasota
+Saratoga
+Sargent
+Sartre
+Saskatchewan
+Satan
+Saturn
+Satyanarayanan
+Satyanarayanan's
+Saud
+Saudi
+Saukville
+Saunders
+Savannah
+Saviour
+Savonarola
+Saxon
+Saxons
+Saxony
+Saxton
+Scandinavia
+Scandinavian
+Scandinavians
+Schaefer
+Schaeffer
+Schafer
+Schaffner
+Schapiro
+Scheherezade
+Schelling
+Schenectady
+Schlitz
+Schmidt
+Schmitt
+Schneider
+Schopenhauer
+Schroeder
+Schroedinger
+Schubert
+Schultz
+Schulz
+Schumacher
+Schuman
+Schumann
+Schuster
+Schwartz
+Scorpio
+Scot
+Scotchgard
+Scotchman
+Scotia
+Scotian
+Scots
+Scotsman
+Scotsmen
+Scott
+Scottish
+Scottsdale
+Scotty
+Scranton
+Scribners
+Scripps
+Scylla
+Scythia
+Seaborg
+Seabrook
+Seaquarium
+Seattle
+Seattle's
+Sebastian
+Sedgwick
+Seeley
+Segundo
+Selectric
+Selfridge
+Selma
+Seminole
+Semite
+Seneca
+Senegal
+Senora
+Seoul
+Serafin
+Serbian
+Serbo
+Serra
+Seville
+Seward
+Seymour
+Shakespeare
+Shakespearean
+Shakespearian
+Shanghai
+Shanghaiing
+Shapiro
+Sharon
+Shasta
+Shawano
+Shawnee
+Sheboygan
+Sheffield
+Sheffielder
+Sheffielders
+Sheila
+Shelby
+Sheldon
+Shelley
+Shelton
+Shenandoah
+Sheraton
+Sheridan
+Sherman
+Sherwin
+Sherwood
+Shiite
+Shiite's
+Shiites
+Shillong
+Shiloh
+Shinto
+Shintoism
+Shirley
+Shorewood
+Shreveport
+Shylock
+Shylockian
+Siamese
+Siberia
+Siberian
+Sicilian
+Siciliana
+Sicilians
+Sicily
+Sidney
+Siegfried
+Sigmund
+Signora
+Sikh
+Sikh's
+Sikhes
+Sikhs
+Sikorsky
+Silas
+Silverman
+Simmons
+Simmonsville
+Simms
+Simon
+Simpson
+Sinai
+Sinatra
+Sinclair
+Sioux
+Sirius
+Sistine
+Sisyphean
+Sisyphus
+Siva
+Skippy
+Skye
+Slav
+Slavic
+Slavs
+Slesinger
+Sloan
+Sloane
+Smallwood
+Smithfield
+Smithsonian
+Smithtown
+Smucker
+Snead
+Sneed
+Snodgrass
+Snowbelt
+Snowbelt's
+Snyder
+Socrates
+Socratic
+Sofia
+Sol
+Solly
+Solomon
+Somali
+Somalis
+Somerset
+Somerville
+Sonoma
+Sonora
+Sophia
+Sophias
+Sophie
+Sophoclean
+Sophocles
+Sorensen
+Sorenson
+Sorrentine
+Sousa
+Southampton
+Southfield
+Spahn
+Spalding
+Spaniard
+Spaniards
+Sparkman
+Sparta
+Spartan
+Spencerian
+Spenglerian
+Sperry
+Spiegel
+Spokane
+Springfield
+Squaresville
+Squibb
+Squibbing
+Stacy
+Stacy's
+Stafford
+Staffordshire
+Staley
+Staley's
+Stalin
+Stalin's
+Stalinist
+Stalins
+Stamford
+Stan
+Stan's
+Standish
+Standish's
+Stanford
+Stanford's
+Stanley
+Stans
+Stanton
+Stapleton
+Starkey
+Starr
+Staten
+Statler
+Stauffer
+Stearns
+Steinbecks
+Steinberg
+Stella
+Stephan
+Stephanie
+Stephanie's
+Stephen
+Stephens
+Stephenson
+Sterno
+Stetson
+Stetsons
+Steuben
+Steve
+Steve's
+Steven
+Steven's
+Stevens
+Stevenson
+Stevie
+Stewart
+Stewart's
+Stillwell
+Stimson
+Stirling
+Stockholm
+Stockton
+Stonehenge
+Stouffer
+Stowe
+Strasbourg
+Stratford
+Strauss
+Stravinsky
+Stromberg
+Strongheart
+Stuart
+Stubblefield
+Stubblefields
+Studebaker
+Stuttgart
+Stuyvesant
+Stygian
+Styrofoam
+Styx
+Sudan
+Sudanese
+Sudanic
+Suez
+Suffolk
+Sukarno
+Sullivan
+Sulzberger
+Sumatra
+Sumerian
+Summerdale
+Sumter
+Sunbelt
+Sunbelt's
+Sunnyvale
+Superman's
+Susan
+Susan's
+Susanne
+Susanne's
+Susie
+Susie's
+Susquehanna
+Susquehanna's
+Sussex
+Sussex's
+Sutherland
+Sutherland's
+Sutton
+Sutton's
+Suwanee
+Suwanee's
+Suzanne
+Suzanne's
+Suzuki
+Suzuki's
+Swabian
+Swabian's
+Swabians
+Swahili
+Swahili's
+Swanson
+Swarthmore
+Swartz
+Swaziland
+Swede
+Sweden
+Swedes
+Swedish
+Sweeney
+Sweeneys
+Swenson
+Swinburne
+Switzer
+Switzerland
+Sybil
+Sydney
+Sylvania
+Sylvester
+Sylvia
+Sylvie
+Symington
+Syracuse
+Syria
+Syrian
+Syrian's
+Syrians
+TNT
+TRW
+TTL
+TV
+TVA
+TWA
+Tacitus
+Tacoma
+Taft
+Tahiti
+Tahoe
+Taipei
+Taiwan
+Taiwanese
+Talladega
+Tallahassee
+Tallahatchie
+Tallahoosa
+Tallchief
+Talleyrand
+Talmud
+Tammany
+Tampa
+Tanganyika
+Tanganyika's
+Tannenbaum
+Tantalus
+Tanya
+Tanzania
+Tapdance
+Tara
+Tarrytown
+Tartuffe
+Tarzan
+Tasmania
+Tate
+Tawney
+Taylor
+Taylors
+Tchaikovsky
+Teddy
+Teheran
+Tehran
+Teledyne
+Telefunken
+Telemann
+Telex
+Templeman
+Templeton
+Tenex
+Tenneco
+Tenney
+Tennyson
+Teresa
+Terra
+Terran
+Tess
+Tessie
+Teutonic
+Tex
+Texaco
+Texan
+Texans
+Textron
+Thai
+Thailand
+Thames
+Thebes
+Thelma
+Theodore
+Theodosian
+Theodosius
+Theresa
+Theseus
+Thiensville
+Thomas
+Thompson
+Thompson's
+Thomson
+Thor
+Thoreau
+Thornburg
+Thornton
+Thorpe
+Throneberry
+Thruway
+Thruways
+Thu
+Thule
+Thurber
+Thurman
+Tiber
+Tibet
+Tibetan
+Tiburon
+Ticonderoga
+Tieck
+Tigris
+Tijuana
+Tillich
+Tillie
+Tim
+Tim's
+Timex
+Timmy
+Timon
+Tims
+Tioga
+Tippecanoe
+Tipperary
+Tito
+Titus
+Tobago
+Todd
+Todd's
+Togo
+Tokyo
+Toland
+Toledo
+Tolley
+Tolstoy
+Tombigbee
+Tommie
+Toni
+Tonio
+Toomey
+Topeka
+Topsy
+Torah
+Toronto
+Torquemada
+Tosca
+Tosca's
+Toscanini
+Toscanini's
+Toshiba
+Toshiba's
+Toto
+Toulouse
+Townley
+Townsend
+Towsley
+Toynbee
+Toyota
+Tractarians
+Tracy
+Transylvania
+Travis
+Treadwell
+Trenton
+Trianon
+Trimble
+Trinidad
+Tristan
+Trojan
+Tropez
+Trotsky
+Troutman
+Truckee
+Trudy
+Trujillo
+Truman
+Trumbull
+Tsunematsu
+Tucson
+Tudor
+Tue
+Tulane
+Tulsa
+Tunis
+Tunisia
+Tunisian
+Turin
+Turkish
+Tuscaloosa
+Tuscan
+Tuscany
+Tuskegee
+Tuttle
+Tyler
+Typhon
+Tyson
+UN
+UNESCO
+USA
+USAF
+USART
+USDA
+USPS
+USSR
+Udall
+Uganda
+Ukrainian
+Ukrainians
+Ullman
+Ulysses
+Unibus
+Uniroyal
+Unisys
+Univac
+Upton
+Uranus
+Urbana
+Ursa
+Ursula
+Ursuline
+Uruguay
+Utica
+Uzi
+Uzi's
+VGA
+VHF
+VLSI
+Vail
+Valerie
+Valhalla
+Valkyrie
+Vance
+Vancouver
+Vandenberg
+Vanderbilt
+Vanderburgh
+Varian
+Varityping
+Vatican
+Vaudois
+Vaughn
+Vega
+Vegas
+Velasquez
+Venetian
+Venetian's
+Venetians
+Venezuela
+Venezuelan
+Venice
+Venn
+Venus
+Venusian
+Venusians
+Vera
+Vergil
+Verlag
+Vermont
+Vern
+Verne
+Vernon
+Verona
+Veronica
+Versailles
+Vic
+Vic's
+Vichy
+Vichy's
+Vickers
+Vickie
+Vickie's
+Vicksburg
+Vicksburg's
+Vicky
+Vicky's
+Victoria
+Victoria's
+Victorian
+Victorians
+Victrola
+Victrola's
+Victrolas
+Vidal
+Vidal's
+Vienna
+Vienna's
+Viennese
+Viennese's
+Viet
+Vietnam
+Vietnam's
+Vietnamese
+Vietnamese's
+Viking
+Vikings
+Vince
+Vincent
+Vincent's
+Vinson
+Virginian
+Virginians
+Virgo
+Virgo's
+Virgos
+Vishnu
+Visigoth
+Visigoths
+Vitus
+Vivaldi
+Vivian
+Vladimir
+Vladivostok
+Vogel
+Vol
+Volkswagen
+Volkswagens
+Volstead
+Volta
+Voltaire
+Volvo
+Vulcan
+WFF
+WWW
+Wabash
+Waco
+Wade's
+Wagner
+Wainwright
+Wakefield
+Walbridge
+Walcott
+Walden
+Waldensian
+Waldo
+Waldorf
+Walford
+Walgreen
+Wallace
+Wallenstein
+Wally's
+Walpole
+Walsh
+Walt
+Walter
+Walters
+Walton
+Walworth
+Wang
+Wansee
+Wansley
+Warfield
+Warfield's
+Warsaw
+Warsaw's
+Warwick
+Warwick's
+Washburn
+Washoe
+Wasserman
+Waterbury
+Watergate
+Waterhouse
+Watertown
+Watkins
+Watson
+Watson's
+Wattenberg
+Watterson
+Waukesha
+Waunona
+Waupaca
+Waupun
+Wausau
+Wauwatosa
+Waveland
+Wayne
+Waynesboro
+Weatherford
+Webber
+Webster
+Webster's
+Websterville
+Weider
+Weidman
+Weinberg
+Weiner
+Weinstein
+Weiss
+Weissman
+Weissmuller
+Welch
+Welcher
+Welches
+Weldon
+Weldwood
+Wellesley
+Wellington
+Wellman
+Wellsville
+Welmers
+Wendell
+Wendy
+Wentworth
+Werner
+Wesley
+Wesleyan
+Wesson
+Westbrook
+Westchester
+Westfield
+Westhampton
+Westinghouse
+Westminster
+Westmore
+Weston
+Westphalia
+Westport
+Westwood
+Weyerhauser
+Wharton
+Wheatland
+Wheaton
+Wheatstone
+Wheelock
+Whelan
+Wheller
+Whippany
+Whipple
+Whitcomb
+Whitehall
+Whiteleaf
+Whiteley
+Whitewater
+Whitfield
+Whitlock
+Whitman
+Whitney
+Whittaker
+Whittier
+Wichita
+Wieland
+Wiggins
+Wilcox
+Wiley
+Wilfred
+Wilhelm
+Wilhelmina
+Wilkes
+Wilkinson
+Willamette
+Willard
+Willcox
+Willem
+William
+Williams
+Williamsburg
+Williamson
+Willie
+Willied
+Willies
+Willoughby
+Willy
+Wilma
+Wilmette
+Wilmington
+Wilshire
+Wilsonian
+Winchell
+Windsor
+Winehead
+Winfield
+Winifred
+Winnebago
+Winnetka
+Winnie
+Winnipeg
+Winograd
+Winooski
+Winsborough
+Winsett
+Winslow
+Winston
+Winthrop
+Wisconsin
+Wisconsin's
+Witherspoon
+Wolcott
+Wolfgang
+Wolverton
+Woodard
+Woodberry
+Woodbury
+Woodlawn
+Woodrow
+Woodward
+Woodwards
+Woolworth
+Woonsocket
+Wooster
+Worcester
+Worcestershire
+Worcestershire's
+Wordsworth
+Worthington
+Wrigley
+Wronskian
+Wyman
+Wyoming
+XOR
+Xanthus
+Xavier
+Xenia
+Xerox
+Xerox's
+Xerxes
+YMCA
+YWCA
+Yakima
+Yale
+Yalies
+Yalta
+Yankee
+Yankees
+Yaqui
+Yates
+Yeager
+Yeats
+Yemen
+Yiddish
+Yoknapatawpha
+Yokohama
+Yonkers
+Yorick
+Yorktown
+Yosemite
+Youngstown
+Ypsilanti
+Yuba
+Yucatan
+Yugoslav
+Yugoslavia
+Yukon
+Yuri
+Yves
+Yvette
+Zachary
+Zaire
+Zanzibar
+Zeffirelli
+Zeiss
+Zellerbach
+Zen
+Zennist
+Zeus
+Zeus's
+Ziegfeld
+Ziegfeld's
+Ziegfelds
+Ziegler
+Ziegler's
+Ziggy
+Zimmerman
+Zimmerman's
+Zion
+Zion's
+Zionism
+Zionist
+Zionist's
+Zionists
+Zions
+Zoroaster
+Zoroastrian
+Zoroastrians
+Zurich
+Zurich's
+aardvark
+aardvark's
+aardvarks
+abalone
+abalone's
+abalones
+abdicate
+abdicated
+abdicates
+abdicating
+abdication
+abeyant
+abominate
+abominated
+abominates
+abominating
+abomination
+abominations
+aborning
+aboveboard
+abrasive
+abrasively
+abrasiveness
+abrasives
+abscissae
+abstemiously
+abstinent
+abstinently
+abusable
+academician
+academicianship
+acceptant
+accessors
+accordant
+accordantly
+accrual
+accruals
+acetic
+achromatic
+acknowledgeable
+acquiescent
+acquiescently
+acquisitive
+acquisitively
+acrylate
+actinic
+actinide
+actuaries
+addend
+addle
+addled
+addles
+addling
+adios
+adjectival
+adjectivally
+adjoint
+administrable
+administrate
+administrated
+administrates
+administrating
+administratrix
+adsorbate
+adsorptive
+adsorptively
+advert
+adverted
+adverting
+adverts
+aeolian
+afforest
+afforestation
+afro
+afterbirth
+afterglow
+afterlife
+aftershave
+agribusiness
+agriculturalists
+aha
+ahem
+ahoy
+ain't
+airfare
+airmass
+airpark
+airplay
+airtight
+airtightness
+ala
+albatross
+aldehyde
+aleph
+alewife
+allegiant
+alliterate
+alliterated
+alliterates
+alliterating
+allocable
+allotropic
+allspice
+alluvial
+alluvium
+almagest
+almshouses
+alp
+altercate
+altho
+altimeter
+altimeter's
+altimeters
+alway
+ambrose
+ambrosia
+ambulant
+amethyst
+amethystine
+aminobenzoic
+ammeter
+ammeter's
+ammeters
+amoebae
+amperage
+amperages
+anachronistic
+anaglyph
+analgesic
+anamorphic
+anastigmatic
+androgynous
+angelfish
+angiosperm
+angora
+anhydride
+anhydrite
+animadversion
+animadvert
+anneal
+annealed
+annealer
+annealers
+annealing
+anneals
+annuities
+annuity
+annular
+annularly
+annulus
+anodic
+antacid
+antebellum
+anthropogenic
+anthropometric
+anthropometrics
+anthropometry
+anticlimactic
+antifreeze
+antigone
+antilogs
+antimatter
+antimatter's
+antipasto
+antiperspirant
+antiquary
+antisemitic
+antisemitism
+antisemitism's
+antithetic
+anytime
+apache
+apaches
+apolar
+apparency
+applesauce
+applicate
+apposite
+appositely
+appositeness
+apposition
+appositive
+appositively
+appropriable
+arbitrage
+arbitrager
+arboretum
+arcana
+archetypical
+archetypically
+arcsine
+arctangent
+ardency
+areawide
+arenaceous
+armada
+armature
+armatures
+arrangeable
+arrear
+arrestee
+arrestee's
+arrestees
+arrowroot
+arsenate
+arsenide
+artesian
+articulable
+artier
+artiness
+arty
+ascriptive
+ashame
+ashier
+ashy
+asperity
+asphyxiate
+asphyxiation
+asplenium
+assertional
+assignation
+assignations
+assimilationist
+assn
+associable
+assumability
+asteria
+astigmatic
+astigmatism
+astraddle
+astronautic
+astronomic
+astrophysicist
+astrophysicist's
+astrophysicists
+athwart
+attestation
+attributional
+audibility
+audiotape
+audiovisual
+audiovisuals
+auntie
+auric
+australites
+autoloader
+autostart
+aviate
+aviations
+aviatrix
+axiology
+azimuthal
+azimuthally
+babbitt
+babbitted
+babbitting
+babbitts
+baboon
+babysitting
+baccarat
+bachelorhood
+backarrow
+backboard
+backchaining
+backfill
+backfilled
+backfilling
+backfills
+backhand
+backhanded
+backhandedly
+backhander
+backorder
+backplate
+backplates
+backside
+backstop
+backwood
+badland
+badmen
+baggageman
+baggagemen
+baldy
+baleen
+ballfields
+bandaid
+bandoleers
+bandstop
+bangkok
+barefaced
+barefacedly
+barefacedness
+barkeep
+barkeeper
+barnacle
+barnacled
+barnful
+barnsful
+baronet
+barrette
+barrette's
+barrettes
+barstool
+barstool's
+barstools
+bartend
+baseband
+basemen
+baseplate
+basilar
+basilisk
+basophilic
+basswood
+bates
+batik
+batwings
+bayberries
+bayberry
+beadsman
+beadworker
+beasties
+beautician
+beauticians
+beaux
+bebop
+bedmate
+bedmate's
+bedmates
+bedpan
+bedpan's
+bedpans
+bedstraw
+beechwood
+befuddlement
+begonia
+behemoths
+belate
+belladonna
+bellflower
+bellyache
+bellyacher
+bellyaching
+bellyfull
+belove
+belvedere
+beman
+bemuse
+bemused
+bemusedly
+benefice
+beneficent
+beneficently
+berg
+bergen
+berger
+bergs
+beribbon
+berserk
+berserker
+bespoke
+bestir
+bestirring
+bestubble
+bestubbled
+betatron
+bethel
+bethought
+betoken
+betokened
+betokening
+bettor
+bewhisker
+bezel
+biaxial
+biaxially
+bicep
+bichromate
+bichromated
+biconnected
+bidiagonal
+biharmonic
+bilayer
+bilayers
+bilingualism
+billies
+billy
+bimetallic
+bimetallism
+bindery
+bindle
+biochemist
+biochemists
+biograph
+biologic
+biomass
+biometric
+biometrics
+biometry
+biomolecule
+biomolecules
+biophysic
+biophysical
+biophysically
+biophysicist
+biophysicists
+biophysics
+bioscience
+biosciences
+biosphere
+biostatistic
+biostatistics
+biotic
+birdseed
+birdwatch
+birth's
+birthrate
+birthrate's
+birthrates
+biserial
+bisexual
+bisexual's
+bisexually
+bisexuals
+bishopric
+bistable
+bistate
+bisyllabic
+bittern
+bitternut
+bitterroot
+bitumen
+blackball
+blackballed
+blackballing
+blackballs
+blackbodies
+blackbody
+bladdernut
+bladderwort
+blameworthiness
+blameworthy
+blanc
+blatancy
+blather
+blathered
+blatherer
+blathering
+blatting
+blazon
+blazoned
+blazoner
+blazoning
+bldg
+bleeps
+blest
+blindside
+blindsided
+blindsides
+blindsiding
+blockier
+blocky
+bloodbath
+bloodroot
+blotch
+blowtorch
+blueback
+bluebill
+bluebook
+bluebush
+bluegill
+bluegrass
+bluejacket
+boa
+boas
+bobble
+bobbled
+bobbles
+bobbling
+bobcat
+bobsled
+bobsledding
+bock
+bockwurst
+bodhisattva
+bodyweight
+bogey
+bogeyed
+bogeying
+bogeymen
+bogeys
+bogging
+boggy
+bogies
+bogy
+boilermaker
+boilermaker's
+boilermakers
+bolivar
+bolo
+bolometer
+bolometer's
+bolometers
+bolos
+bona
+bongo
+bonito
+bonjour
+bonzes
+boogie
+bookbind
+bookbinder
+bookbinders
+bookbinding
+bookend
+bookends
+bookkeep
+bookplate
+bookplates
+boomtown
+boomtowns
+boosterism
+bootblack
+bootblacks
+bop
+bopping
+borosilicate
+boson
+bossier
+bossies
+bossiness
+bossy
+botanic
+botfly
+bottommost
+botulin
+bouillon
+boutique
+boutiques
+bowie
+boxier
+boxiness
+boxy
+bpi
+brachia
+brachium
+bracken
+brad
+braggadocio
+brakeman
+brakemen
+brakemen's
+brandywine
+bratwurst
+breadfruit
+breadfruits
+breastfed
+breastfeed
+breastfeeding
+breastplate
+bribery
+brickmason
+brickmasons
+brickyard
+brimming
+brimstone
+brinier
+brininess
+briny
+bristlier
+bristly
+bristol
+bristols
+broadloom
+bronc
+bronchiolar
+bronchiolitis
+bronco
+broncos
+broncs
+broodiness
+broody
+brookside
+brouhaha
+brucellosis
+brushwork
+bubonic
+buckaroo
+buckaroos
+bucketful
+bucketful's
+buckeye
+buckhorn
+bufflehead
+bugaboo
+bugbears
+bugeyed
+bulblet
+bullfinch
+bullfrog
+bullhead
+bullheaded
+bullheadedly
+bullheadedness
+bullhide
+bullseye
+bullshit
+bullwhackers
+bullyboy
+bullyboys
+bulrush
+burble
+burbled
+burbler
+burbles
+burbling
+burg
+burgers
+burlap
+burley
+bushmaster
+busyness
+butch
+butene
+butterball
+buttercup
+buttermilk
+buttery
+buttonweed
+bypath
+byroad
+cabal
+cabals
+cabana
+cabanas
+cabaret
+cabarets
+cabdriver
+cabdrivers
+cabinetmaker
+cabinetmaker's
+cabinetmakers
+cabinetry
+cacao
+cacciatore
+cackly
+cacophonist
+cacophony
+cadaver
+cadaverous
+cadaverously
+caddies
+caddy
+cadent
+cadenza
+cadet
+cadge
+cadged
+cadger
+cadges
+cadging
+cadmium
+cadre
+caffeine
+caffeine's
+cagey
+cageyness
+cahoot
+cahoots
+cairn
+cairned
+cairns
+calamitous
+calamitously
+calamitousness
+calcareous
+calcareously
+calcareousness
+calcification
+calcified
+calcify
+calcite
+calculability
+calculable
+calculableness
+calculi
+calfskin
+californium
+caliphate
+calisthenic
+calisthenics
+callable
+callee
+callee's
+calligraph
+calligrapher
+calligraphers
+calligraphy
+calliope
+callow
+callowness
+caloric
+calorimeter
+calorimeter's
+calorimeters
+calorimetric
+calorimetry
+calumniate
+calumniated
+calumniation
+calumny
+calvary
+calve
+calving
+calypso
+cam
+camaraderie
+camber
+cambered
+cambering
+camellias
+cameo
+cameos
+cameraman
+cameramen
+campesinos
+campfire
+campground
+campgrounds
+campsite
+campsites
+cams
+cancerous
+cancerously
+candidacy
+candlelight
+candlelighter
+canine
+canines
+canister
+canisters
+cannabis
+canneries
+cannery
+cannibalism
+cannibalism's
+cannibalistic
+cannier
+canniness
+cannonball
+canny
+canonic
+canonist
+cant
+cantaloupe
+cantaloupe's
+cantaloupes
+canted
+canteen
+canteens
+canter
+cantered
+canticle
+cantilever
+cantilevers
+canting
+canvasback
+capacitate
+capacitative
+capitalistic
+capitulate
+capitulated
+capitulates
+capitulation
+caprice
+capsize
+capsized
+capsizes
+capsizing
+capstan
+capstans
+capstone
+capsule
+capsuled
+capsules
+capsuling
+captaincy
+captious
+captiously
+captiousness
+caramel
+caraway
+carbide
+carbine
+carbines
+carbonaceous
+carbonyl
+carborundum
+carboy
+carbuncle
+carbuncled
+carcinogen
+carcinogenic
+carcinogens
+carcinoma
+cardiology
+cardiomegaly
+cardiovascular
+careen
+careened
+careening
+careerism
+caretaker
+caretakers
+careworn
+caricature
+caricatured
+caricatures
+caricaturist
+carload
+carloading
+carloads
+carmine
+carnage
+carnal
+carnality
+carnally
+carob
+carouse
+caroused
+carouser
+carousing
+carp
+carped
+carpentry
+carper
+carping
+carpingly
+carport
+carps
+carrageen
+carrel
+carrels
+carrion
+carte
+cartels
+cartilage
+cartographer
+cartographers
+cartographic
+cartoonist
+cartoonists
+cartwheel
+cartwheeler
+cartwheels
+carven
+casbah
+casebook
+casebooks
+casein
+casework
+caseworker
+caseworkers
+cashew
+cashews
+cashmere
+casino
+casinos
+cassette
+cassettes
+cassock
+cassocked
+castanet
+castanets
+castigate
+castigated
+castigates
+castigation
+castor
+cataclysmic
+catalysis
+catalytic
+catalytically
+catapult
+catapulted
+catapulting
+catapults
+catastrophically
+catatonia
+catbird
+catchier
+catchword
+catchwords
+catchy
+catechism
+catecholamine
+catecholamines
+categoric
+catenate
+catenation
+catfish
+catharsis
+cathodic
+catholicism
+catlike
+catnip
+cattail
+cattier
+catties
+cattiness
+cattleman
+cattlemen
+catty
+catwalk
+catwalk's
+catwalks
+caucus
+caucuses
+caucusing
+cauliflower
+cauliflowers
+caulk
+caulker
+caulks
+causate
+causative
+causatively
+cautionary
+cavalcade
+cavalcades
+cavalrymen
+caveman
+cavemen
+cavernous
+cavernously
+caviar
+cavil
+cavort
+cavorted
+cavorting
+cayenne
+cede
+ceded
+ceder
+cedilla
+ceding
+celebrant
+celebrants
+celerity
+celesta
+cello
+cellophane
+cellos
+cellulose
+celluloses
+censorial
+centaur
+centaurs
+centenary
+centennial
+centennially
+centigrade
+centigrades
+centrality
+centrifugal
+centrifugally
+centrifugals
+centrifugate
+centrifugation
+centrist
+centroid
+centroids
+ceramic
+ceramics
+cerate
+cerated
+cerebellum
+cerebrate
+cerebrated
+cerebrates
+cerebrating
+cerebration
+cerebrations
+ceremonious
+ceremoniously
+ceremoniousness
+cerise
+cerium
+certiorari
+certitude
+certitudes
+cerulean
+cervical
+cesium
+cession
+cetera
+ceteras
+chainlike
+chairlady
+chairwoman
+chairwomen
+chaise
+chalkline
+chalky
+chambermaid
+chambermaids
+chamfer
+chamfered
+chamfering
+chamfers
+chamois
+champ
+champers
+champs
+chanceries
+chancery
+chancier
+chanciness
+chancy
+chantey
+chantries
+chantry
+chaparral
+chaperone
+chaperones
+chapping
+charisma
+charismatic
+charitably
+charlatans
+charred
+chartist
+chartists
+chartreuse
+chartroom
+chartrooms
+charwomen
+chassis
+chastisement
+chastisements
+chastity
+chateaux
+chatted
+chattel
+chattels
+chattier
+chattiness
+chatting
+chatty
+chaw
+checkerboard
+checkerboards
+checklist
+checklists
+checksummed
+checksumming
+checkup
+checkups
+cheekbone
+cheekbones
+cheekier
+cheekiness
+cheeky
+cheerleader
+cheerleaders
+cheesecloth
+cheesier
+cheesiness
+cheesy
+cheetah
+chelate
+chelated
+chelating
+chelation
+chelations
+chemic
+chemotherapy
+chemotherapy's
+chevalier
+chevron
+chevroned
+chianti
+chic
+chicanery
+chicly
+chicness
+chicory
+chiefdom
+chiefdoms
+chigger
+chiggers
+chilblain
+chilblains
+childbearing
+childbirth
+childless
+childlessness
+childlike
+childlikeness
+childrearing
+chili
+chimera
+chimeric
+chimpanzee
+chimpanzees
+china
+chinchilla
+chinless
+chipboard
+chipped
+chipper
+chipping
+chiropractor
+chiropractors
+chive
+chives
+chivying
+chlorate
+chloride
+chlorides
+chlorinate
+chlorinated
+chlorinates
+chlorination
+chloroform
+chlorophyll
+choirmaster
+chokeberry
+cholesterol
+cholinesterase
+chomp
+choosier
+choosy
+choppier
+choppiness
+choppy
+chorale
+chorales
+chordal
+chordata
+chordate
+choreograph
+choreographed
+choreographer
+choreographers
+choreographic
+choreography
+chorines
+chortle
+chortled
+chortles
+chortling
+chow
+chowder
+chowders
+chrissake
+chromate
+chromatic
+chromaticness
+chromatics
+chromatogram
+chromatogram's
+chromatograms
+chromatograph
+chromatographic
+chromatography
+chrome
+chromed
+chromes
+chromic
+chroming
+chromite
+chromium
+chromosphere
+chronically
+chronograph
+chronography
+chrysalis
+chrysanthemum
+chrysanthemum's
+chrysanthemums
+chub
+chubs
+chug
+chugging
+chugs
+chummier
+chumminess
+chumming
+chummy
+chunkier
+chunky
+churchgoers
+churchgoing
+churchmen
+churchwoman
+churchwomen
+churl
+churls
+chutney
+chutneys
+ciao
+cicada
+cicadas
+cilia
+ciliate
+ciliated
+ciliately
+ciliates
+cinch
+cinches
+cinema
+cinemas
+cinematic
+cinnabar
+circa
+circlet
+circulant
+circulatory
+circumcise
+circumcised
+circumciser
+circumcises
+circumcising
+circumcision
+circumcisions
+circumferential
+circumferentially
+circumpolar
+circumscribe
+circumscribed
+circumscribes
+circumscribing
+circumscriptions
+circumspection
+circumspections
+circumsphere
+circumvention
+circumventions
+citizenry
+citrate
+citrated
+citric
+citron
+citrus
+citruses
+cityscape
+cityscapes
+citywide
+civet
+cladding
+clairvoyance
+clammier
+clamminess
+clamming
+clammy
+clamshell
+clamshells
+clandestine
+clandestinely
+clandestineness
+clank
+clanked
+clanking
+clankingly
+clannish
+clannishly
+clannishness
+clapboard
+clapboards
+clapped
+clapping
+claret
+clarets
+clarinet
+clarinets
+clarion
+classicist
+classier
+classiest
+classificatory
+classiness
+classless
+classlessness
+classy
+clattery
+claustrophobia
+claustrophobic
+clave
+claver
+clavicle
+clavicle's
+clavicles
+clearcut
+clearheaded
+clearheadedly
+clearheadedness
+clearinghouse
+cleat
+cleated
+cleating
+cleats
+clemence
+clemency
+clement
+clemently
+clements
+clergymen
+cleric
+clerics
+clientele
+cliffhanging
+climactic
+climatological
+climatologically
+climatology
+clinician
+clinicians
+clinometer
+clinometer's
+clinometers
+clipboard
+clipboards
+cloakroom
+cloakrooms
+clockwatcher
+cloddish
+cloddishness
+clodhopper
+clodhopper's
+clodhoppers
+clomp
+clomped
+clomping
+clomps
+closeup
+closeups
+clot
+clothbound
+clothesbrush
+clothesline
+clotheslines
+clothesman
+clothesmen
+clothier
+clotted
+clotting
+cloture
+clotured
+clotures
+cloturing
+cloudburst
+cloudbursts
+cloy
+cloying
+cloyingly
+clubhouse
+clubroom
+clubrooms
+clunkiness
+clunky
+clunkyly
+cm
+coachmen
+coachwork
+coadjutor
+coagulable
+coalescence
+coalescent
+coastline
+coattail
+coattails
+coauthor
+cobalt
+cobble
+cobbled
+cobbles
+cobblestone
+cobblestoned
+cobblestones
+cobbling
+coble
+cobra
+cocaine
+cochineal
+cochlea
+cockatoo
+cockcrow
+cockeye
+cockeyed
+cockeyedly
+cockeyedness
+cockier
+cockiness
+cockle
+cocklebur
+cockleshell
+cockpit
+cockpits
+cockscomb
+cocksure
+cocky
+coda
+coddle
+coddled
+coddler
+coddles
+coddling
+codebook
+codebooks
+codebreak
+codetermine
+codetermines
+codfish
+codicil
+coed
+coedited
+coediting
+coeditor
+coeditor's
+coeditors
+coedits
+coeds
+coeducation
+coequal
+coequally
+coercible
+coexistent
+coextensive
+coextensively
+cofactor
+cofactors
+coffeecup
+coffeepot
+cog
+cognac
+cognate
+cognately
+cognates
+cognation
+cognations
+cogs
+cohabitational
+coherency
+cohort
+cohort's
+cohorts
+coiffure
+coiffured
+coincident
+coincidently
+coital
+coitally
+coitus
+cola
+colander
+colanders
+colatitude
+colatitudes
+coleus
+colicky
+coliform
+coliseum
+collagen
+collapsibility
+collapsible
+collarbone
+collard
+collectivities
+collegian
+collegians
+collimate
+collimated
+collimates
+collimating
+collimation
+collinear
+collinearity
+collocation
+colloidal
+colloidally
+colloquia
+colloquial
+colloquialism
+colloquialism's
+colloquialisms
+colloquially
+colloquium
+collude
+colluded
+colludes
+colluding
+collusion
+collusions
+colonialism
+colonialist
+colonnade
+colonnaded
+colonnades
+coloration
+coloratura
+coltish
+coltishly
+coltishness
+columbines
+columnist
+columnists
+coma
+comas
+comatose
+combatted
+combinable
+combo
+combos
+combustible
+combustibles
+comeback
+cometary
+comeuppance
+commando
+commandos
+commendable
+commendatory
+commensurable
+commercialism
+commies
+commingle
+commingled
+commiserate
+commiserated
+commiserates
+commiserating
+commiseration
+commiserative
+commissary
+committable
+committal
+committeeman
+committeemen
+committeewoman
+committeewomen
+commodious
+commodiously
+commodiousness
+communicable
+communicational
+communique
+communiques
+communism
+communistic
+commutable
+commutate
+commutated
+commutates
+commutating
+commutation
+commutations
+compaction
+compatriot
+compatriots
+compellable
+compendia
+compensable
+competencies
+competency
+complacency
+complacent
+complainant
+complainants
+complaisance
+complaisant
+complaisantly
+complementarity
+complementation
+compliant
+compliantly
+comport
+comported
+comportment
+compositor
+compositors
+compost
+compote
+compressibility
+compressor
+compressors
+compulsive
+compulsively
+compulsiveness
+compulsives
+compulsivity
+con
+concave
+conceptuality
+concertina
+concertmaster
+concerto
+concertos
+concessionaire
+concessionaires
+conch
+conches
+concierge
+concierges
+conciliate
+conciliated
+conciliates
+conciliation
+conciliations
+conciliative
+conciliator
+conciliatory
+conclave
+conclaves
+concoct
+concocted
+concocter
+concoctive
+concocts
+concordance
+concordant
+concordantly
+concourse
+concourses
+concubine
+concubines
+concussion
+concussions
+condemnate
+condemnatory
+condensate
+condensates
+condensations
+condensible
+condescension
+condiment
+condiments
+condo
+condo's
+condolence
+condolences
+condominium
+condominium's
+condominiums
+condoms
+condos
+conduce
+conduced
+conduces
+conducing
+conductance
+conductances
+coneflower
+coney
+confabulate
+confabulated
+confabulates
+confabulation
+confabulations
+confect
+confectionery
+confects
+conferee
+conferees
+conferrable
+confessional
+confessionally
+confessionals
+confirmatory
+confiscatory
+conflagration
+conflagrations
+confluent
+confluents
+conformal
+conformance
+conformation
+conformation's
+conformational
+conformationally
+conformations
+conformist
+conformists
+confrontational
+confute
+confuted
+confuter
+confutes
+confuting
+congeal
+congealed
+congealing
+congeals
+congeniality
+congenital
+congenitally
+congest
+congesting
+congestive
+congests
+conglomerate
+conglomerated
+conglomerates
+conglomeration
+conglomerations
+conglomerative
+congratulatory
+congregationalism
+congregationalist
+congregationalists
+congressmen
+congresswoman
+congresswomen
+congruity
+congruous
+congruously
+congruousness
+conic
+conical
+conically
+conicalness
+conics
+conifer
+coniferous
+conifers
+conjectural
+conjecturally
+conjoin
+conjoining
+conjoins
+conjoint
+conjointly
+conjugal
+conjugally
+conjugate
+conjugated
+conjugately
+conjugateness
+conjugates
+conjugating
+conjugation
+conjugations
+conjugative
+conjuncture
+conjunctures
+conk
+conked
+conker
+conkers
+conking
+conks
+conn
+conned
+conner
+conning
+connivance
+connive
+connived
+conniver
+connives
+conniving
+connotation
+connotations
+connotative
+connotatively
+connubial
+connubially
+conquistador
+conquistadores
+conquistadors
+consanguine
+consanguineous
+consanguineously
+consanguinity
+conscionable
+conscript
+conscripted
+conscripting
+conscription
+conscriptions
+conscripts
+consensual
+consensually
+conservator
+conservatory
+consistence
+consonance
+consonantal
+conspiratorial
+conspiratorially
+constance
+consternate
+consternated
+consternates
+consternating
+constrict
+constricted
+constricting
+constriction
+constrictions
+constrictive
+constrictor
+constrictors
+constricts
+constructional
+constructionally
+consular
+cont'd
+contaminant
+contaminants
+contentious
+contentiously
+contentiousness
+contestant
+contestants
+continence
+continuant
+contort
+contorted
+contorting
+contortion
+contortions
+contortive
+contorts
+contraband
+contrabass
+contraception
+contraceptive
+contraceptives
+contradictorily
+contraindicate
+contraindicated
+contraindicates
+contraindicating
+contraindication
+contraindication's
+contraindications
+contraindicative
+contrarily
+contravene
+contravened
+contravener
+contravenes
+contravening
+contravention
+contrite
+contritely
+contriteness
+contrition
+controversialists
+controvertible
+contumacy
+contumely
+contusion
+contusions
+convalesce
+convalescent
+convalescing
+convection
+convections
+conventionality
+conversationalist
+convexity
+conveyor
+conveyors
+convivial
+convivially
+convocation
+convocations
+convoke
+convoked
+convokes
+convoking
+convolute
+convolutely
+convolution
+convolutions
+convolve
+convolved
+convolves
+convolving
+convulse
+convulsed
+convulses
+convulsing
+convulsive
+convulsively
+convulsiveness
+cookbook
+cookbooks
+coolant
+coolants
+coolheaded
+coplanar
+copolymer
+copolymers
+copperhead
+coppersmith
+coppersmiths
+coppery
+copter
+copters
+copybook
+copybooks
+copyist
+copywriter
+coquette
+coquetted
+coquetting
+cordage
+cordite
+cordon
+corduroy
+corduroys
+coriander
+corkscrew
+corkscrews
+cornbread
+cornea
+cornet
+cornflower
+cornier
+corniest
+corniness
+cornmeal
+cornstarch
+cornucopia
+corny
+corona
+coronal
+coronate
+coroner
+coroners
+corporeal
+corporeality
+corporeally
+corporealness
+corpsman
+corpsmen
+corpulence
+corpulences
+corpulent
+corpulently
+corpulentness
+corpulentnesses
+corpuscular
+corral
+corralled
+corralling
+corrals
+corrigendum
+corrigible
+corrode
+corroded
+corrodes
+corrodible
+corroding
+corrosive
+corrosively
+corrosiveness
+corrosives
+corrugate
+corrugated
+corrugates
+corrugating
+corrugation
+corrugations
+corruptible
+corsage
+corsages
+cortex
+cortexes
+cortical
+cortically
+corticosteroid
+corticosteroids
+cortisone
+corundum
+coruscate
+coruscated
+coruscates
+coruscating
+coruscation
+coruscations
+corvette
+cosily
+cosmic
+cosmical
+cosmically
+cosmological
+cosmologically
+cosmologist
+cosmologist's
+cosmologists
+cosmopolitanism
+cosmos
+cosmoses
+cosponsor
+cosponsored
+cosponsors
+cossack
+cossacks
+cosy
+cotangent
+coterminous
+coterminously
+cotillion
+cotter
+cotters
+cottonmouth
+cottonseed
+cottonwood
+cottony
+cougar
+cougars
+could've
+coulomb
+councilman
+councilmen
+councilwoman
+councilwomen
+counterargument
+counterarguments
+counterattack
+counterattacker
+counterbalance
+counterbalanced
+counterbalances
+counterbalancing
+counterclaim
+countercyclical
+counterflow
+counterforce
+counterintuitive
+counterman
+countermand
+countermanded
+countermanding
+countermands
+countermen
+counterpoise
+counterproposal
+countersink
+countersinking
+countersinks
+countersunk
+countervail
+countervailed
+countervailing
+countervails
+counterweight
+counterweight's
+counterweighted
+counterweighting
+counterweights
+countrified
+countrify
+countrymen
+countrywide
+coup
+coupe
+couplet
+couplet's
+couplets
+coups
+courtesan
+covalent
+covalently
+covariance
+covariances
+covariant
+covariants
+covariate
+covariates
+covariation
+covary
+coven
+coverall
+coveralled
+coveralls
+covington
+cowbell
+cowbird
+cowbirds
+cowhand
+cowhands
+cowherd
+cowhide
+cowhided
+cowhiding
+cowlick
+coworker
+coworker's
+coworkers
+cowpoke
+cowpony
+cowpox
+cowpunch
+cowpuncher
+coxcomb
+coxcombs
+coy
+coyly
+coyness
+cozen
+crabapple
+crabbed
+crabbedly
+crabbedness
+crabbing
+crackpot
+crackpots
+craftsmanship
+craftsmen
+craftspeople
+craggier
+cragginess
+craggy
+crammed
+cramming
+cranelike
+crania
+cranium
+crankcase
+crankshaft
+crannied
+crannies
+cranny
+crappie
+crappier
+crass
+crassest
+crassly
+crassness
+craw
+crawlspace
+crawlway
+crawly
+crayfish
+crayon
+crayons
+creakier
+creaky
+creamery
+creationism
+creationism's
+credent
+credential
+credentials
+credenza
+credo
+credos
+creedal
+creekside
+creepier
+creepiness
+creepy
+crematory
+crescendo
+cress
+crestfallen
+crestfallenly
+crestfallenness
+cretinous
+crewcut
+crewel
+crewman
+crewmen
+cribbing
+criminality
+crimp
+crimped
+crimper
+crimping
+crimps
+crinkle
+crinkled
+crinkles
+crinkling
+crinkly
+criss
+crisscross
+crisscrossed
+crisscrosses
+criticality
+crock
+crocked
+crocker
+crockery
+crocks
+crocodile
+crocodiles
+crocus
+crocuses
+croft
+crofter
+crofters
+crone
+crones
+cronies
+crony
+croon
+crooned
+crooner
+crooners
+crooning
+croons
+crossarm
+crosshatch
+crosshatched
+crosshatches
+crosshatching
+crosspoint
+crossproduct
+crossproducts
+crossroad
+crossroading
+crossroads
+crosstalk
+crosswalk
+crossway
+crossways
+crosswise
+crotch
+crotched
+crotches
+crotchetiness
+crotchety
+croupier
+croutons
+crowbait
+crowbar
+crowbar's
+crowbars
+crowfoot
+crowfoots
+crucible
+crucifix
+crucifixion
+crud
+cruddy
+crudities
+crudity
+cruft
+crufty
+crummier
+crummies
+crummy
+crump
+crushproof
+cryogenic
+cryogenics
+cryostat
+crypt
+cryptanalyst
+cryptanalytic
+cryptogram
+cryptogram's
+cryptograms
+cryptographer
+cryptologic
+cryptological
+cryptologist
+crypts
+crystallite
+crystallites
+crystallographer
+crystallographers
+crystallographic
+crystallography
+cubbyhole
+cubicles
+cubism
+cubist
+cubists
+cud
+cuddlier
+cuddly
+cufflink
+cufflinks
+cuisine
+culinary
+culpa
+culpable
+culpableness
+culpas
+cultist
+cultists
+cultivable
+culvert
+cumin
+cumulate
+cumulated
+cumulates
+cumulating
+cumulation
+cumulations
+cumulus
+cupcakes
+cupidity
+cupric
+cuprous
+curate
+curative
+curatively
+curator
+curators
+curbside
+curd
+curdle
+curdled
+curdles
+curdling
+curia
+curiae
+curie
+curio
+curios
+curlicue
+curricula
+curtsey
+curtseyed
+curtseying
+curtseys
+curvaceous
+curvaceously
+curvilinear
+curvilinearity
+curvilinearly
+cushiest
+cushy
+custodial
+customhouse
+customhouses
+cutaneous
+cutaneously
+cutback
+cutbacks
+cutlass
+cutlet
+cutlets
+cutout
+cutouts
+cutthroat
+cuttlebone
+cuttlebones
+cuttlefish
+cuttlefishes
+cutworm
+cyanate
+cyanic
+cyanide
+cyclical
+cyclist
+cyclists
+cyclohexanol
+cyclopean
+cyclops
+cylindric
+cynic
+cynicism
+cynics
+cytochemistry
+cytolysis
+cytoplasm
+czarevitch
+czarina
+czarism
+czarist
+czarship
+d'art
+d'etat
+d'etre
+d'oeuvre
+d's
+dab
+dabbed
+dabbing
+dabs
+dachshund
+dactyl
+dactylic
+dactyls
+daffier
+daffy
+dairyland
+dairyman
+dairymen
+dais
+daises
+dallied
+dallier
+dally
+dallying
+dammed
+damming
+dammit
+dancelike
+dandily
+dang
+danged
+dank
+dankly
+dankness
+dapper
+dapperly
+dapperness
+dapple
+dappled
+dapples
+dappling
+dashboard
+dashboards
+dastard
+dastardliness
+dastardly
+databanks
+datafile
+datagram
+datagram's
+datagrams
+dataset
+datasets
+dateline
+datelined
+datelines
+daub
+daubed
+dauber
+daubs
+davenport
+davits
+dawdle
+dawdled
+dawdler
+dawdlers
+dawdles
+dawdling
+daybed
+deaconess
+deactivate
+deactivated
+deactivates
+deactivating
+deactivation
+deadhead
+deadheads
+deadweight
+deadwood
+dealerships
+dearie
+deassign
+deassigns
+deathbed
+deathward
+debacle
+debacles
+debar
+debarring
+debars
+debase
+debased
+debaser
+debases
+debasing
+debauch
+debauched
+debauchedly
+debauchedness
+debaucher
+debauchery
+debauches
+debenture
+debentures
+debility
+debit
+debited
+debiting
+debits
+debonair
+debonairly
+debonairness
+debrief
+debriefed
+debriefing
+debriefs
+debunk
+debunker
+debunking
+debunks
+debut
+debutante
+debutante's
+debutantes
+debuting
+debuts
+decaffeinate
+decaffeinated
+decaffeinates
+decaffeinating
+decal
+decant
+decanted
+decanter
+decanters
+decanting
+decants
+decapitated
+decathlon
+decathlons
+decedent
+decennial
+decennially
+decertification
+decertify
+dechlorinate
+dechlorinated
+dechlorinates
+dechlorination
+decibel
+decibels
+deciduous
+deciduously
+deciduousness
+decile
+decisional
+declaim
+declaimed
+declaimer
+declaiming
+declaims
+declamation
+declamations
+declamatory
+declarator
+declarators
+declaratory
+declassification
+declassifications
+declassify
+declension
+declensions
+declivity
+decolletage
+decolletages
+decollimate
+decompress
+decompressed
+decompresser
+decompresses
+decompressing
+decontaminated
+decontrol
+decontrolled
+decontrolling
+decor
+decorator
+decorators
+decorous
+decorously
+decorousness
+decorticate
+decorticated
+decorticates
+decorticating
+decortication
+decried
+decrier
+decries
+decry
+decrying
+decrypt
+decrypted
+decrypting
+decryption
+decrypts
+deductibility
+deductible
+deductibles
+deemphasis
+deerskin
+deerskins
+deerstalker
+deface
+defacement
+defacer
+defaces
+defacing
+defame
+defamed
+defamer
+defames
+defaming
+defecate
+defecated
+defecates
+defecating
+defecation
+defecations
+defensible
+deferent
+deferents
+deflate
+deflated
+deflater
+deflates
+deflating
+deflation
+deflect
+deflected
+deflecting
+deflection
+deflections
+deflective
+deflector
+deflects
+defocus
+defocusing
+deforestation
+deform
+deformational
+deforming
+deforms
+defraud
+defrauded
+defrauder
+defrauding
+defrauds
+defray
+defrayed
+defraying
+defrays
+defrost
+defrosted
+defroster
+defrosting
+defrosts
+deft
+defter
+deftest
+deftness
+defunct
+degrease
+degum
+degumming
+dehumidification
+dehumidifications
+dehumidified
+dehumidifier
+dehumidify
+dehydrate
+dehydrated
+dehydrates
+dehydrating
+dehydration
+deification
+deify
+deja
+deject
+dejection
+delectable
+delectableness
+delectation
+delegable
+deleterious
+deleteriously
+deleteriousness
+deli
+deli's
+delicatessen
+delicti
+delimitation
+delirium
+deliriums
+delis
+deliveryman
+deliveryman's
+deliverymen
+deliverymen's
+delouse
+deloused
+delouses
+delousing
+deltoid
+deltoids
+delusive
+delusively
+delusiveness
+deluxe
+demagnification
+demagnify
+demagogue
+demagogues
+demarcate
+demarcated
+demarcates
+demarcating
+demarcation
+demean
+demeaned
+demeaning
+demeans
+demented
+dementedly
+dementedness
+demerit
+demerits
+demigod
+demiscible
+demit
+demitted
+demitting
+demographer
+demographer's
+demographers
+demographical
+demographically
+demography
+demoniac
+demonic
+demonstrably
+demote
+demoted
+demotes
+demoting
+demotion
+demountable
+demultiplex
+demurred
+demurrer
+demurring
+denature
+denatured
+denatures
+denaturing
+denim
+denims
+denominate
+denominated
+denominationally
+denominative
+denouement
+densitometer
+densitometer's
+densitometers
+densitometric
+densitometry
+dentistry
+denture
+dentures
+denude
+denuded
+denuder
+denudes
+denuding
+denumerable
+denunciate
+denunciated
+denunciates
+denunciating
+denunciation
+denunciations
+denunciative
+deodorant
+deodorant's
+deodorants
+deoxyribonucleic
+depiction
+depictions
+deplorably
+deployable
+depositary
+depository
+depravities
+depravity
+deprecate
+deprecated
+deprecates
+deprecating
+deprecatingly
+deprecation
+deprecations
+deprecatory
+depreciable
+depredations
+depressant
+depressants
+depressible
+depressors
+deputation
+deputations
+depute
+deputed
+deputes
+deputing
+derange
+deranged
+derangement
+deranges
+deranging
+deregulate
+derelict
+dereliction
+derelicts
+derisive
+derisively
+derisiveness
+derivate
+derogate
+derogated
+derogates
+derogating
+derogation
+derogative
+derogatory
+derrick
+derricked
+derricking
+derricks
+derriere
+dervish
+dervishes
+descant
+descendent
+descendent's
+descendents
+desecrate
+desecrated
+desecrater
+desecrates
+desecration
+desegregate
+desegregated
+desegregates
+desegregating
+desegregation
+desist
+desorption
+desperado
+desperadoes
+despicably
+despoil
+despoiled
+despoiler
+despoilers
+despoiling
+despoils
+despond
+despondency
+despondent
+despondently
+despotism
+dessicate
+destinate
+destruct
+destructor
+destructs
+desuetude
+desultoriness
+desultory
+detachable
+detente
+detentions
+deter
+detergency
+detergent
+detergents
+determinability
+deterred
+deterrence
+deterrent
+deterrently
+deterrents
+deterring
+deters
+detersive
+detersives
+detestation
+detestations
+detonable
+detonator
+detonator's
+detonators
+detour
+detoured
+detouring
+detours
+detrimental
+detrimentally
+detune
+detuned
+detunes
+detuning
+deuce
+deuced
+deucedly
+deuces
+deucing
+deus
+deuterium
+deuteriums
+devaluation
+devalue
+devalued
+devalues
+devaluing
+deviance
+deviances
+devious
+deviously
+deviousness
+devoice
+devoiced
+devoices
+devoicing
+devolve
+devolved
+devolves
+devolving
+devotional
+devotionally
+dewar
+dewars
+dexter
+dextrous
+diabase
+diabetic
+diabetics
+diabolic
+diabolical
+diabolically
+diabolicalness
+diachronic
+diachronicness
+diacritical
+diacritically
+diacriticals
+diagnometer
+diagnometer's
+diagnometers
+diagnostician
+diagnosticians
+diagrammaticality
+dialectal
+dialectally
+dialectic
+dialectical
+dialectically
+dialectics
+dialysis
+diamagnetic
+diametric
+diaphanous
+diaphanously
+diaphanousness
+diathermy
+diathesis
+diatom
+diatomic
+diatoms
+diatonic
+dichloride
+dichotomous
+dichotomously
+dichotomousness
+dick
+dicker
+dickered
+dickering
+dickers
+dickey
+dicks
+dicotyledon
+dictatorial
+dictatorially
+dictatorialness
+didactic
+didactics
+diddle
+diddled
+diddler
+diddling
+diehard
+diehards
+diem
+diesel
+diesels
+dietaries
+dietary
+dietetic
+dietetics
+diethylaminoethyl
+diethylstilbestrol
+dietician
+dieticians
+differentiability
+differentiable
+differentiator
+difficile
+diffidence
+diffident
+diffidently
+diffract
+diffracted
+diffracting
+diffraction
+diffractions
+diffractometer
+diffractometer's
+diffractometers
+diffracts
+diffusible
+digitalis
+dignitaries
+dignitary
+digram
+dihedral
+dilapidate
+dilapidated
+dilapidates
+dilapidating
+dilapidation
+dilatation
+dilator
+dilatoriness
+dilatory
+dilettante
+dilettantes
+dilithium
+dill
+dillinger
+dilogarithm
+dimensionless
+dimethyl
+dimethylglyoxime
+ding
+dinghies
+dinghy
+dingo
+dinnertime
+dinnerware
+dinosaur
+dinosaurs
+diocesan
+diocese
+diorama
+dioramas
+dioxalate
+diphthong
+diphthongs
+dipodic
+dipody
+dipole
+dipole's
+dipoles
+directivity
+directorate
+directorship
+directrices
+directrix
+direful
+direfully
+disablement
+disaffected
+disaffectedly
+disaffectedness
+disaffection
+disaffiliate
+disaffiliated
+disaffiliates
+disaffiliating
+disaffiliation
+disaggregate
+disaggregated
+disaggregating
+disaggregation
+disaggregative
+disapprobation
+disarranged
+disarray
+disarrays
+disarticulated
+disassembly
+disavow
+disavowal
+disavowals
+disavowed
+disavowing
+disavows
+disbar
+disbars
+disbelief
+discipleship
+discomfit
+discomfited
+discomfiting
+discomfits
+discontinuation
+discordant
+discordantly
+discorporate
+discorporated
+discourteous
+discourteously
+discourteousness
+discrepant
+discrepantly
+discretionary
+discriminable
+discriminant
+discursive
+discursively
+discursiveness
+discus
+discuses
+discussant
+discussants
+disdainful
+disdainfully
+disdainfulness
+disembodied
+disembowel
+disembowels
+disenchantment
+disengagement
+disequilibrium
+disgruntle
+disgruntles
+disgruntling
+disgustful
+disgustfully
+disharmony
+dishevel
+dishevels
+dishonesty
+dishwater
+disincentives
+disinclination
+disincorporated
+disinherit
+disinheritance
+disinherited
+disinheriting
+disinherits
+disintegrate
+disintegrated
+disintegrates
+disintegrating
+disintegration
+disintegrations
+disintegrative
+disinterest
+disinterred
+disjoin
+diskette
+diskettes
+dislodgement
+disloyal
+disloyally
+disloyalty
+dismantle
+dismantled
+dismantles
+dismantling
+dismembered
+dismemberment
+disobedient
+disobediently
+disoriented
+disparage
+disparaged
+disparagement
+disparager
+disparages
+disparaging
+disparagingly
+dispassionate
+dispassionately
+dispassionateness
+dispensary
+dispensate
+dispersal
+dispersement
+dispersible
+dispositional
+dispossessed
+dispossession
+disproportion
+disproportional
+disproportionate
+disproportionately
+disproportionation
+disputable
+disputant
+disquietude
+disquisition
+disrepair
+disreputable
+disreputableness
+disrepute
+disrespect
+disrobe
+dissect
+dissected
+dissecting
+dissection
+dissects
+dissemble
+dissembled
+dissembler
+dissembling
+dissimulation
+dissociable
+dissonant
+dissonantly
+dissuade
+dissuaded
+dissuader
+dissuades
+dissuading
+distaff
+distaffs
+distend
+distended
+distension
+distillate
+distillates
+distillations
+distilleries
+distillery
+distortable
+distributorship
+disulfide
+disunion
+disunited
+disunity
+disuse
+disused
+disvalues
+disyllable
+dither
+dithered
+ditherer
+dithering
+ditties
+ditto
+dittos
+ditty
+diurnal
+diva
+divalent
+diversionary
+divertimento
+divestiture
+divination
+divisible
+divisional
+divisive
+divisively
+divisiveness
+divorcee
+divorcees
+divvied
+divvies
+divvying
+dizzily
+doable
+docile
+docilely
+docket
+docketed
+docketing
+dockets
+dockside
+dockyard
+doctrinaire
+doctrinal
+doctrinally
+dodecahedra
+dodecahedral
+dodecahedron
+doe
+doff
+doffing
+doffs
+doggone
+doggoned
+doggoning
+doghouse
+dogleg
+dogmatic
+dogmatically
+dogmatics
+dogtooth
+dogtrot
+dogwood
+doldrum
+doldrums
+dolomite
+dolomites
+dolomitic
+dolt
+doltish
+doltishly
+doltishness
+domesticity
+domicile
+domiciled
+dominator
+domineer
+domineering
+domineeringly
+domineeringness
+domino
+donned
+donning
+donnish
+donnishly
+donnishness
+donnybrook
+donor
+donors
+donuts
+doodle
+doodled
+doodler
+doodles
+doodling
+doomsday
+doorbell
+doorkeep
+doorkeeper
+doorkeepers
+doorknob
+doorknobs
+doorman
+doormen
+dopant
+dorm
+dormer
+dosage
+dosages
+dosimeter
+dosimeter's
+dosimeters
+dosimetry
+dossier
+dossiers
+dotage
+dotard
+doubleheader
+doubleton
+doubloon
+dour
+dourly
+dourness
+dovetail
+dowager
+dowagers
+dowdier
+dowdies
+dowdiness
+dowdy
+dowel
+dower
+downbeat
+downgrade
+downgraded
+downgrades
+downgrading
+downhill
+downpour
+downside
+downslope
+downspout
+downswings
+downtrend
+downtrodden
+downturn
+downturns
+downwind
+dowries
+dowry
+dowse
+dowser
+dowses
+dowsing
+draftee
+draftees
+dragger
+dragnet
+dragonfly
+dragonhead
+dram
+dramatical
+dramaturgy
+dreadnought
+dreamboat
+dreamless
+dreamlessly
+dreamlessness
+dreamlike
+dreamt
+dreg
+dressier
+dressiness
+dressmaking
+dressy
+drib
+dribble
+dribbled
+dribbler
+dribbles
+dribbling
+dribs
+dripped
+drippier
+dripping
+drippy
+drizzle
+drizzled
+drizzles
+drizzling
+drizzlingly
+drizzly
+droll
+drollness
+dromedary
+droopier
+droopy
+drophead
+droplet
+droplets
+dropout
+dropouts
+drosophila
+dross
+drowse
+drowsed
+drowses
+drowsily
+drowsing
+drub
+drubbing
+drudge
+drudger
+drudges
+drudging
+drudgingly
+drugged
+drugging
+drugless
+drugstore
+drugstores
+druid
+drumhead
+dryer
+dryers
+dryness
+drywall
+dualism
+dubbed
+ducat
+duce
+duces
+duckling
+duct
+ducted
+ductile
+ducting
+ducts
+ductwork
+dud
+duds
+duet
+duets
+duff
+duffel
+duffer
+duffers
+dugout
+dukedom
+dulcet
+dulcetly
+dulcify
+dullard
+dumbfound
+dumbfounded
+dumbfounder
+dumbfounds
+dumpier
+dumpiness
+dumpy
+dun
+dung
+dunk
+dunker
+duopolist
+duopoly
+dupe
+duped
+duper
+dupes
+duping
+dupion
+duplex
+duplexer
+duplicable
+duplicity
+durational
+duress
+dustbin
+dustbins
+dutiable
+dwarves
+dwelt
+dyad
+dyadic
+dyads
+dynamical
+dynamism
+dynamo
+dynamos
+dynastic
+dysentery
+dyspeptic
+dysprosium
+dystopia
+dystrophy
+e'er
+e's
+eardrum
+eardrums
+earphone
+earphones
+earsplitting
+earthier
+earthiness
+earthmen
+earthmover
+earthmoving
+earthy
+easel
+eastbound
+easternmost
+easygoing
+easygoingness
+eatable
+eatables
+eave
+ebullient
+ebulliently
+ecclesiastic
+echelon
+echelons
+echinoderm
+eclectic
+eclectically
+ecliptic
+ecological
+ecologically
+ecologists
+econometric
+econometricians
+econometrics
+ecosystem
+ecosystems
+ecstatic
+ecstatics
+ecumenic
+ecumenic's
+ecumenical
+ecumenically
+ecumenicist
+ecumenicist's
+ecumenicists
+ecumenics
+ecumenist
+ecumenist's
+ecumenists
+ed
+edelweiss
+eden
+edgewise
+edgier
+edginess
+edgy
+edification
+edified
+edifies
+edify
+edifying
+editorialist
+editorship
+educe
+educing
+eelgrass
+eerily
+efface
+effaceable
+effaced
+effacer
+effaces
+effacing
+effectual
+effectualness
+effectuate
+effectuated
+effectuates
+effectuating
+effectuation
+efferent
+efferently
+effete
+effetely
+effeteness
+efficacious
+efficaciously
+efficaciousness
+effloresce
+efflorescent
+effluent
+effluents
+effluvia
+effluvium
+efflux
+effluxion
+effuse
+effused
+effuses
+effusing
+effusion
+effusive
+effusively
+effusiveness
+egalitarian
+egalitarianism
+egghead
+eggheaded
+eggheadedness
+eggplant
+eggshell
+egocentric
+egotism
+egotist
+egotistic
+egotistical
+egotistically
+egotists
+egregious
+egregiously
+egregiousness
+egress
+egret
+egrets
+eh
+eider
+eidetic
+eigenstate
+eigenstates
+eigenvector
+eigenvectors
+eightfold
+einsteinium
+ejection
+ejector
+ejectors
+elan
+elastomer
+electorate
+electress
+electrician
+electricians
+electro
+electrocardiogram
+electrocardiogram's
+electrocardiograms
+electrocardiograph
+electrodynamic
+electrodynamicly
+electrodynamics
+electroencephalogram
+electroencephalogram's
+electroencephalograms
+electrolysis
+electromagnet
+electromagnetism
+electromagnetisms
+electromagnets
+electromyograph
+electromyographic
+electromyographically
+electromyography
+electrophoresis
+electrophorus
+electroshock
+electroshocks
+electrostatic
+electrostatics
+electrotherapist
+electrotypers
+electroweak
+elegiac
+elegies
+elegy
+elephantine
+elfin
+elision
+elisions
+elite
+eliteness
+elites
+ellipsometer
+ellipsometer's
+ellipsometers
+ellipsometry
+ellipticity
+elocution
+elope
+eloped
+eloper
+elopes
+eloping
+eluate
+eluates
+elute
+eluted
+eluting
+elution
+elysian
+emaciate
+emaciates
+emaciating
+emaciation
+emanate
+emanated
+emanates
+emanation
+emanations
+emanative
+emancipate
+emancipated
+emancipates
+emancipating
+emasculate
+emasculated
+emasculates
+emasculating
+emasculation
+embalm
+embalmer
+embalmers
+embalming
+embalms
+embank
+embanked
+embanking
+embankment
+embankments
+embanks
+embarcadero
+embargo
+embargoed
+embargoes
+embargoing
+embattle
+embattled
+embattles
+embattling
+embedder
+embezzlement
+embittered
+emblematic
+embolden
+emboldened
+emboldens
+emboss
+embossed
+embosser
+embossers
+embosses
+embossing
+embower
+embraceable
+embrittle
+embroil
+embroiled
+embroiling
+embroils
+embryonic
+emcee
+emceed
+emend
+emendable
+emender
+emeritus
+emirate
+emissaries
+emissary
+emission
+emission's
+emissions
+emissivities
+emissivity
+emittance
+emitter
+emitters
+emitting
+emolument
+emoluments
+emotionalism
+emotionality
+empath
+empathetically
+empathic
+emphysema
+emphysematous
+empiric
+empiricism
+emplace
+employability
+emporium
+emporiums
+emulsification
+emulsified
+emulsifier
+emulsifies
+emulsify
+emulsion
+emulsions
+encampment
+encase
+encased
+encephalitis
+encephalographic
+enchain
+enchained
+enchantress
+enchiladas
+enclave
+enclaves
+encomium
+encomiums
+encore
+encored
+encores
+encoring
+encroach
+encroached
+encroacher
+encroaches
+encroaching
+encroachment
+encrust
+encrusted
+encrusting
+encrusts
+encumbrance
+encumbrancer
+encumbrances
+encyclical
+endearment
+endearments
+endemicity
+endgame
+endnote
+endnote's
+endnotes
+endogamous
+endogamy
+endogenous
+endogenously
+endosperm
+endothelial
+endothermic
+endpoint
+endpoints
+energetically
+enervate
+enervated
+enervates
+enervating
+enervation
+enervative
+enfeeble
+enfeebled
+enfeebles
+enfeebling
+enforceability
+enforceable
+enforcible
+engorge
+engorged
+engorges
+engorging
+engulfed
+engulfing
+engulfs
+enigma
+enjoinder
+enlargeable
+enmesh
+enmeshed
+enquiries
+enquiry
+enrapture
+enraptured
+enraptures
+enrapturing
+enrichment
+enrollee
+enrollees
+ensconced
+enshroud
+enslavement
+entailment
+entanglement
+enthalpy
+enthralled
+enthralling
+enthrone
+enthroned
+enthrones
+enthroning
+enthuse
+enthused
+enthuses
+enthusing
+enticements
+entitlement
+entitlements
+entomb
+entombed
+entomologist
+entomology
+entourage
+entourages
+entrain
+entrained
+entrainer
+entraining
+entrains
+entranceway
+entrant
+entrants
+entrap
+entrapment
+entrapments
+entrapped
+entraps
+entree
+entrees
+entrenchment
+entrenchments
+entrepreneurial
+entrepreneurship
+entwine
+entwined
+entwines
+entwining
+enunciable
+enunciate
+enunciated
+enunciates
+enunciating
+envenom
+envenomed
+envenoming
+envenoms
+enviable
+enviableness
+enzymatic
+enzymatically
+enzyme
+enzymes
+enzymology
+eohippus
+ephemerides
+ephemeris
+epicure
+epicurean
+epicycle
+epicycles
+epicyclic
+epicyclical
+epicyclically
+epidemiological
+epidemiologically
+epidemiology
+epidermic
+epidermis
+epigenetic
+epigram
+epigrammatic
+epigrams
+epigraph
+epigrapher
+epilepsy
+epileptic
+epileptics
+epilogue
+epilogues
+epiphany
+epiphenomena
+episcopate
+epistolatory
+epitaxy
+epithelial
+epithelium
+epitome
+epitomes
+epochal
+epochally
+epoxy
+equable
+equableness
+equanimities
+equanimity
+equestrian
+equestrians
+equidistant
+equidistantly
+equilateral
+equilaterals
+equilibrate
+equilibrated
+equilibrates
+equilibrating
+equilibration
+equilibria
+equine
+equines
+equinox
+equipotent
+equiproportional
+equiproportionality
+equiproportionate
+equivocal
+equivocally
+equivocalness
+equivocation
+eradicable
+erbium
+ergodic
+ergodicity
+erode
+eroded
+erodes
+erodible
+eroding
+erosible
+erosion
+erosive
+erosiveness
+erotic
+erotica
+erotically
+errancies
+errancy
+errant
+errantly
+errantry
+errants
+errata
+erratas
+erratically
+erratum
+ersatz
+erstwhile
+erudite
+eruditely
+erudition
+erupt
+erupted
+erupting
+eruptive
+eruptively
+erupts
+escadrille
+escapist
+escarpment
+escarpment's
+escarpments
+escritoire
+escrow
+escutcheon
+escutcheons
+esophagi
+esplanade
+espousal
+espousals
+essayists
+esters
+estimable
+estimableness
+estimator
+estimators
+estoppal
+estrange
+estranged
+estrangement
+estranger
+estranges
+estranging
+estuaries
+estuarine
+estuary
+et
+eta
+etas
+etcetera
+etceteras
+etched
+ethane
+ethanol
+ethicist
+ethicists
+ethnically
+ethnicities
+ethnicity
+ethnographers
+ethnographic
+ethnography
+ethnology
+ethnomethodology
+ethology
+ethos
+ethyl
+ethylene
+etymological
+etymologically
+etymologies
+etymology
+eucalyptus
+eugenic
+eugenics
+eulogies
+eulogy
+euphemist
+euphony
+euphoric
+eureka
+europium
+euthanasia
+evanescent
+evangelic
+evangelical
+evangelicalism
+evangelically
+evangelism
+evangelist
+evangelistic
+evangelists
+evasion
+evasions
+evasive
+evasively
+evasiveness
+evensong
+eventide
+eventides
+eventuate
+eventuated
+eventuates
+eventuating
+everyman
+evidential
+evidentially
+evildoer
+evildoers
+evocable
+evocate
+evocation
+evocations
+evocative
+evocatively
+evocativeness
+evolutionists
+ex
+exaltation
+exaltations
+examinable
+excelsior
+excisable
+excitability
+excitatory
+exclamatory
+exclusionary
+excoriate
+excoriated
+excoriates
+excoriating
+excoriation
+excoriations
+excrescence
+excrescences
+excretory
+excruciate
+excruciated
+excruciates
+excruciating
+excruciation
+exculpatory
+excursus
+excursuses
+exec
+execrable
+execrableness
+execrate
+execrated
+execrates
+execrating
+execration
+execrative
+executrix
+executrixes
+exegesis
+exegete
+exemption
+exemptions
+exercisable
+exhilarate
+exhilarated
+exhilarates
+exhilarating
+exhilaratingly
+exhilaration
+exhilarative
+exhort
+exhorted
+exhorter
+exhorting
+exhorts
+exhumation
+exhumations
+exhume
+exhumed
+exhumer
+exhumes
+exhuming
+exigent
+exigently
+exodus
+exogamous
+exogamy
+exogenous
+exogenously
+exonerate
+exonerated
+exonerates
+exonerating
+exoneration
+exonerative
+exorciser
+exorcism
+exorcist
+exoskeleton
+exothermic
+exotica
+expansible
+expansionist
+expectable
+expectorant
+expectorate
+expectoration
+expediency
+expellable
+experiential
+experientially
+experimentalism
+experimentalist
+experimentalist's
+experimentalists
+expiable
+expiate
+expiated
+expiates
+expiating
+expiation
+expletive
+expletives
+explicable
+explicate
+explicated
+explicates
+explicating
+explication
+explicative
+explicatively
+exportation
+exposit
+exposited
+expressionism
+expressionist
+expressionistic
+expressionists
+expressionless
+expressionlessly
+expressionlessness
+expressway
+expressways
+expurgate
+expurgated
+expurgates
+expurgating
+expurgation
+extemporaneous
+extemporaneously
+extemporaneousness
+extempore
+extendibility
+extensional
+extensionally
+extensor
+exterminator
+exterminator's
+exterminators
+extern
+externalities
+extirpate
+extirpated
+extirpating
+extirpation
+extirpative
+extolled
+extoller
+extolling
+extort
+extorted
+extorter
+extorting
+extortive
+extorts
+extracellular
+extracellularly
+extraditable
+extralegal
+extralegally
+extramarital
+extraterrestrial
+extravaganza
+extravaganzas
+extrema
+extremism
+extricable
+extricate
+extricated
+extricates
+extricating
+extrication
+extroversion
+extrovert
+extroverted
+extroverts
+extrude
+extruded
+extruder
+extrudes
+extruding
+extrusion
+extrusive
+exuberant
+exuberantly
+exudation
+exude
+exuded
+exudes
+exuding
+exultant
+exultantly
+eyeful
+eyelash
+eyelashes
+eyeless
+eyelet
+eyelets
+eyesore
+eyesore's
+eyesores
+eyeteeth
+f's
+faceplate
+facetious
+facetiously
+facetiousness
+facilitators
+facilitatory
+factious
+factiously
+factiousness
+facto
+factuality
+fad
+fadeout
+fads
+faerie
+faery
+failsafe
+fairgoer
+fairgoers
+fairgrounds
+fairless
+fairway
+fairways
+falafel
+falconry
+falloff
+fallout
+fallouts
+fallow
+fallowness
+familial
+fanatical
+fanaticalness
+fanaticism
+fanfare
+fanfold
+fangled
+fanout
+fantasia
+fantasist
+fantastically
+farcical
+farcically
+farfetched
+farfetchedness
+farina
+farmland
+farmlands
+farmworker
+farmworkers
+farsighted
+farsightedly
+farsightedness
+fascicle
+fascicled
+fascicles
+fasciculate
+fasciculated
+fasciculation
+fasciculations
+fascism
+fascist
+fascists
+fastidious
+fastidiously
+fastidiousness
+fatalistic
+fatalists
+fateful
+fatefully
+fatefulness
+fatherhood
+fatherless
+fatso
+fattier
+fatties
+fattiness
+fatty
+fatuity
+fatuous
+fatuously
+fatuousness
+faucet
+faucets
+faun
+fauna
+fax
+fax's
+faxes
+faze
+fazed
+fazes
+fazing
+fealty
+fearsome
+fearsomely
+fearsomeness
+feasibly
+featherbed
+featherbedding
+featherbrain
+featherbrained
+feathertop
+featherweight
+feathery
+febrile
+feces
+fecund
+fecundability
+fecundity
+federalism
+federalist
+federalists
+federate
+federated
+federates
+federating
+federations
+federative
+federatively
+fedora
+feint
+feinted
+feinting
+feints
+feldspar
+felicitous
+felicitously
+felicitousness
+feline
+felinely
+felines
+fella
+fellas
+felon
+felonious
+feloniously
+feloniousness
+felons
+felony
+feminism
+femme
+femmes
+fencepost
+fend
+fender
+fenders
+fennel
+fermion
+fermion's
+fermions
+fermium
+fernery
+ferret
+ferreted
+ferreter
+ferreting
+ferrets
+ferric
+ferris
+ferro
+ferroelectric
+ferromagnet
+ferromagnetic
+ferrous
+fervid
+fervidly
+fervidness
+fest
+fester
+festered
+festering
+festers
+fetal
+fete
+feted
+fetes
+fetish
+fetishes
+fettle
+fettled
+fettles
+fettling
+feudalistic
+feudatory
+fiance
+fiancee
+fiasco
+fiat
+fiats
+fib
+fibbing
+fibrin
+fibrosis
+fiche
+fictive
+fictively
+fiddlestick
+fiddlesticks
+fide
+fidget
+fidgeted
+fidgeting
+fidgets
+fiducial
+fiducially
+fiduciary
+fief
+fiefdom
+fieldstone
+fieldwork
+fieldworker
+fieldworkers
+fiendish
+fiendishly
+fiendishness
+fierily
+fiesta
+fifths
+figment
+figural
+figurine
+figurines
+filamentary
+filbert
+filberts
+filch
+filched
+filches
+filet
+filets
+filibuster
+filibustered
+filibusterer
+filibustering
+filibusters
+filigree
+filigreed
+fillet
+filleted
+filleting
+fillets
+fillies
+filly
+filmdom
+filmier
+filminess
+filmstrip
+filmstrips
+filmy
+filtrate
+filtrated
+filtrates
+filtrating
+finale
+finale's
+finales
+finalist
+finalists
+finch
+findable
+finesse
+finessed
+finessing
+fingernail
+fingernails
+fingerprint
+fingerprinted
+fingerprinting
+fingerprints
+fingertip
+fingertips
+finial
+finickiness
+finicky
+fink
+finned
+finny
+fireball
+fireballs
+fireboat
+firebreak
+firebreaks
+firebug
+firecracker
+firecrackers
+firefight
+firefighters
+firefighting
+firefights
+firehouse
+firehouses
+firemen
+firepower
+fireproof
+firewall
+firework
+fishier
+fishmeal
+fishmonger
+fishmongers
+fishpond
+fishy
+fissile
+fission
+fissioned
+fissioning
+fissions
+fisticuff
+fisticuffs
+fittest
+fivefold
+fizz
+fizzer
+fizzle
+fizzled
+fizzles
+fizzling
+fjord
+fjords
+flabbergast
+flabbergasted
+flabbergasting
+flabbergastingly
+flabbergasts
+flagellate
+flagellated
+flagellates
+flagellating
+flagellation
+flagman
+flagpole
+flagpoles
+flagstaff
+flagstone
+flail
+flailed
+flailing
+flails
+flair
+flak
+flakier
+flakiness
+flaky
+flam
+flamboyant
+flamboyantly
+flamen
+flamethrower
+flange
+flanged
+flanges
+flapped
+flapper
+flappers
+flashback
+flashbacks
+flashbulb
+flashbulbs
+flashier
+flashiness
+flashy
+flatbed
+flathead
+flatiron
+flatirons
+flatland
+flatlander
+flatlands
+flatulence
+flatulent
+flatulently
+flatworm
+flautist
+flaxseed
+fleawort
+fleck
+flecked
+flecker
+flecking
+flecks
+fledge
+fledges
+fledging
+fletch
+fletched
+fletcher
+fletches
+fletching
+fletching's
+fletchings
+flex
+flexed
+flexing
+flexural
+flexure
+flimsier
+flimsies
+flimsiness
+flimsy
+flintier
+flintiness
+flintless
+flintlock
+flinty
+flipflop
+flippant
+flippantly
+flipped
+flippers
+flipping
+flirtation
+flirtations
+flirtatious
+flirtatiously
+flirtatiousness
+flitting
+flocculate
+flocculated
+flocculates
+flocculating
+flocculation
+floe
+floes
+flog
+flogged
+flogging
+flogs
+floodgate
+floodlight
+floorboard
+floorboards
+flophouses
+flopped
+flopping
+floral
+florally
+florid
+floridly
+floridness
+florist
+florists
+flotation
+flotations
+flotilla
+flotillas
+flounce
+flounced
+flounces
+flouncing
+floury
+flout
+flouted
+flouter
+flouting
+flouts
+flowerpot
+flowstone
+flu
+flub
+flubbed
+flubbing
+flubs
+flue
+fluency
+fluff
+fluffs
+fluke
+fluoresce
+fluorescent
+fluorescer
+fluoresces
+fluoridate
+fluoridated
+fluoridates
+fluoridating
+fluoridation
+fluoridations
+fluoride
+fluorides
+fluorimetric
+fluorinated
+fluorine
+fluorite
+fluorocarbon
+flushable
+fluster
+flustered
+flustering
+flusters
+flutist
+flux
+fluxed
+fluxes
+flyaway
+flycatcher
+flycatchers
+flywheel
+flywheels
+foal
+foals
+foamier
+foaminess
+foamy
+fob
+foible
+foibles
+foist
+foisted
+foisting
+foists
+foldout
+foldouts
+foliate
+foliated
+foliates
+foliating
+foliation
+foliations
+folio
+folios
+folklike
+folksier
+folksiness
+folksong
+folksongs
+folksy
+follicle
+follicles
+follicular
+followup
+followup's
+followups
+foment
+fomented
+fomenter
+fomenting
+foments
+foolhardiness
+foolhardy
+footage
+footages
+footbridge
+footbridges
+footfall
+footfalls
+foothill
+foothills
+footloose
+footmen
+footpad
+footpads
+footpath
+footstool
+footstools
+footwear
+footwork
+fop
+foppery
+foppish
+foppishly
+foppishness
+fops
+forbore
+forebears
+foreclosed
+foreclosing
+forefeet
+forefront
+foreknowledge
+foreknown
+foreleg
+foremen
+forensic
+forensics
+forepart
+forepaws
+forerunner
+forerunners
+foresaw
+foreseeing
+foreshortened
+foreshortening
+forestry
+foreword
+forfeiture
+forfeitures
+forfend
+forfended
+forfending
+forfends
+forgo
+forgoer
+forgoing
+forklift
+formability
+formaldehyde
+formate
+formates
+formic
+formidably
+formulaic
+forsook
+forswear
+forswears
+forthcome
+forthright
+forthrightly
+forthrightness
+fortiori
+fossiliferous
+foulmouth
+foulmouthed
+foundling
+foundlings
+fountainhead
+fourfold
+foursome
+foursomes
+foursquare
+fourths
+fovea
+foxglove
+foxhole
+foxholes
+foxhound
+foxier
+foxiness
+foxtail
+foxy
+foyer
+fracases
+fractionated
+fractionation
+fractious
+fractiously
+fractiousness
+fragmentarily
+fragmentation
+francium
+frankfurter
+frankfurters
+franklin
+fraudulent
+fraudulentness
+frazzle
+frazzled
+frazzles
+frazzling
+freakish
+freakishly
+freakishness
+freeboot
+freebooter
+freebooters
+freeborn
+freedman
+freedmen
+freehand
+freehanded
+freehandedly
+freehold
+freeholder
+freeholders
+freemen
+freestone
+freethinkers
+freewheel
+freewheeled
+freewheeler
+freewheelers
+freewheeling
+freewheelingness
+freewheels
+frenetic
+freon
+fresco
+frescoed
+frescoes
+frescoing
+frescos
+freshwater
+fretted
+fretting
+friable
+friableness
+frictional
+frictionally
+friendlily
+frigid
+frigidly
+frigidness
+frilly
+friskier
+friskiness
+frisky
+fritter
+fritterer
+fritters
+frivolity
+frizzle
+frizzled
+frizzles
+frizzling
+fro
+frolicking
+frontage
+frontal
+frontally
+frontiersman
+frontiersmen
+frostbite
+frostbiting
+frostbitten
+frothier
+frothiness
+frothy
+frowzier
+frowzy
+frugality
+frustum
+fuchsia
+fuck
+fuck's
+fucked
+fucker
+fucker's
+fuckers
+fucking
+fucks
+fudge
+fudged
+fudges
+fudging
+fugue
+fulcrum
+fullback
+fullbacking
+fulminate
+fulminated
+fulminates
+fulminating
+fulmination
+fulminations
+fulsome
+fulsomely
+fulsomeness
+fumigant
+fumigate
+fumigated
+fumigates
+fumigation
+fumigations
+functionalism
+functionalist
+functionalists
+functionary
+fundamentalism
+funereal
+funereally
+fungal
+fungi
+fungible
+fungicides
+fungoid
+funk
+furbish
+furbisher
+furbishes
+furbishing
+furl
+furled
+furlong
+furlongs
+furlough
+furloughed
+furor
+furor's
+furors
+furrier
+furriers
+furring
+furry
+furthermost
+furthest
+fuselage
+fuselages
+fusible
+fusiform
+fusillade
+fusillades
+fussier
+fussily
+fussiness
+fussy
+fustiness
+fusty
+fuzz
+fuzzed
+g's
+gab
+gabbing
+gadfly
+gadgetry
+gaffe
+gaffer
+gaffes
+gaggle
+gagwriter
+gagwriters
+gainful
+gainfully
+gainfulness
+gal
+gala
+galactic
+galen
+galena
+galenite
+gallium
+gallivant
+gallivanted
+gallivanting
+gallivants
+gallonage
+gallstone
+gallstones
+gals
+galvanic
+galvanism
+galvanometer
+galvanometer's
+galvanometers
+gambit
+gambits
+gambol
+gambols
+gamecock
+gamut
+gander
+gangland
+gangling
+ganglion
+gangplank
+gangway
+gangways
+gantries
+gantry
+gardenia
+gardenias
+gargantuan
+gargoyle
+gargoyled
+gargoyles
+garish
+garishly
+garishness
+garnet
+garret
+garrets
+garrulous
+garrulously
+garrulousness
+gasification
+gasifications
+gasified
+gasifier
+gasifiers
+gasifies
+gasify
+gasifying
+gasket
+gaskets
+gaslight
+gaslighted
+gaslights
+gassiness
+gassy
+gastronome
+gastronomes
+gastronomy
+gator
+gauche
+gauchely
+gaucheness
+gaugeable
+gauntlet
+gauntleted
+gauss
+gausses
+gavel
+gawk
+gawker
+gawkier
+gawks
+gawky
+gazelle
+gazelles
+gazette
+gazetted
+gazetteer
+gazetteers
+gazettes
+gazetting
+gee
+geek
+geek's
+geeks
+geest
+geisha
+geishas
+gelable
+gelatine
+gelatinous
+gelatinously
+gelatinousness
+geld
+gelding
+geldings
+gemlike
+genealogies
+genealogists
+genealogy
+genera
+generational
+genesis
+geneticist
+geneticist's
+geneticists
+genie
+genie's
+genies
+genitive
+genitive's
+genitives
+genotype
+genotype's
+genotypes
+gent
+gentian
+gentians
+gentile
+gentiles
+gentility
+gentlemen
+gentlewomen
+gentlewomen's
+gentrification
+gents
+geocentric
+geocentricism
+geochemical
+geochemically
+geochemistry
+geochronology
+geodesic
+geodesics
+geodetic
+geographer
+geographer's
+geographers
+geologic
+geology
+geometer
+geometer's
+geometers
+geometrical
+geometrically
+geometrician
+geomorphological
+geomorphology
+geophysical
+geophysically
+geophysicist
+geophysicists
+geophysics
+geopolitic
+geopolitical
+geopolitically
+geopolitics
+geosynchronous
+gerbil
+geriatric
+geriatrics
+germanium
+germicidal
+germicide
+germicides
+germinal
+germinally
+gerontologist
+gerontologists
+gerontology
+gerrymandering
+gerund
+gerundive
+gestapo
+gestate
+gestated
+gestates
+gestating
+gestation
+gestation's
+gestations
+gesticulate
+gesticulated
+gesticulates
+gesticulating
+gesticulation
+gesticulations
+gesticulative
+gesticulatively
+getaway
+getaways
+geyser
+geysered
+geysering
+geysers
+gherkin
+gherkins
+ghetto
+ghettos
+ghostlike
+ghoul
+ghoulish
+ghoulishly
+ghoulishness
+ghouls
+giantess
+gibber
+gibbered
+gibbering
+gibbers
+gibbet
+gibbeted
+gibbeting
+gibbets
+gibbon
+gibbons
+gibbous
+gibbously
+gibbousness
+gibe
+giber
+gibes
+gibing
+giblet
+giblets
+giddap
+giddily
+gigacycle
+gigacycles
+gigahertz
+gigavolt
+gigawatt
+gigging
+gila
+gilbert
+gimpy
+ginkgo
+ginmill
+ginning
+ginseng
+girlie
+girlish
+girlishly
+girlishness
+gist
+git
+giveaway
+giveaways
+glaciate
+glaciated
+glaciates
+glaciating
+glaciation
+gladden
+gladdened
+gladdening
+gladdens
+gladdy
+gladiator
+gladiators
+gladiolus
+glamorous
+glamorously
+glamorousness
+glandular
+glandularly
+glassless
+glassware
+glasswort
+glaucoma
+glaucous
+glaziers
+glib
+glibly
+glibness
+glim
+gloat
+gloated
+gloater
+gloats
+glob
+globetrotter
+globule
+globulin
+globulins
+glommed
+glottis
+gloveless
+gluey
+glum
+glumly
+glumness
+glut
+gluten
+glutinous
+glutinously
+glutinousness
+gluts
+glutted
+glutting
+glutton
+glutton's
+gluttons
+glyceride
+glycerin
+glycerinate
+glycerinated
+glycerine
+glycerol
+glycol
+glycols
+glyph
+gnarl
+gnarled
+gnarls
+gnash
+gnashes
+gnashing
+gneiss
+gnome
+gnomelike
+gnomes
+gnomonic
+gnostic
+gnu
+gnus
+gob
+gobbledygook
+goddamn
+goddamned
+godfather
+godhead
+godless
+godlessness
+godparent
+godsend
+godsends
+godson
+goggle
+goggled
+goggler
+gogglers
+goggles
+goggling
+goldenrod
+goldenseal
+goldfinch
+goldfish
+goldsmiths
+golly
+gondola
+gondolas
+goober
+goodwill
+gooey
+goof
+goofed
+goofier
+goofiness
+goofing
+goofs
+goofy
+gooseberry
+gopher
+gophers
+gorgon
+goshawk
+gosling
+gossamer
+gourd
+gourmand
+gourmand's
+gourmands
+gourmet
+gourmets
+gout
+governance
+grad
+gradate
+gradated
+gradates
+gradating
+grads
+gradualist
+gradualists
+graffiti
+grail
+grails
+grammarian
+grammarians
+grammatic
+grammaticality
+grandchild
+grandchildren
+granddaughter
+granddaughters
+grandiloquent
+grandiloquently
+grandnephew
+grandnephews
+grandniece
+grandnieces
+grandstand
+grandstanded
+grandstander
+grandstanding
+grandstands
+granola
+grantee
+grantor
+granular
+granularly
+granule
+granules
+granulocytic
+grapefruit
+grapheme
+grasshoppers
+grassland
+grasslands
+grassroots
+gratis
+graven
+gravestone
+gravestones
+graveyard
+graveyards
+gravid
+gravidly
+gravidness
+gravimetric
+gravitate
+gravitated
+gravitates
+gravitating
+gravitations
+gravitative
+graybeard
+graybeards
+greatcoat
+greatcoated
+greatcoats
+greenbelt
+greenery
+greengrocer
+greenwood
+gregarious
+gregariously
+gregariousness
+greyhound
+griddle
+gridiron
+griffin
+grillwork
+grimace
+grimaced
+grimacer
+grimaces
+grimacing
+grime
+grimes
+grimmer
+grinned
+grinning
+grinningly
+grisliness
+grisly
+grist
+gristlier
+gristliness
+gristly
+gristmill
+grittier
+grittiness
+gritty
+grizzle
+grizzled
+grizzles
+grizzling
+groat
+groats
+groggier
+grogginess
+groggy
+groin
+grok
+grokked
+grokking
+groks
+grommet
+groomsmen
+grosbeak
+grottoes
+grouchier
+grouchiness
+grouchy
+groundhog
+groundhog's
+groundhogs
+groundless
+groundlessly
+groundlessness
+groundskeepers
+grout
+grouted
+grouter
+grouting
+grouts
+grovelike
+grubbier
+grubbiness
+grubbing
+grubby
+guano
+guardhouse
+gubernatorial
+guerilla
+guernsey
+guernseys
+guesswork
+guffaw
+guffaws
+guidepost
+guideposts
+guildhall
+guileless
+guilelessly
+guilelessness
+guitarist
+guitarists
+gullet
+gullets
+gullible
+gumbo
+gummier
+gumminess
+gumming
+gummy
+gumption
+gumshoe
+gunboat
+gunfight
+gunfighter
+gunfights
+gunflint
+gunk
+gunky
+gunman
+gunmen
+gunnery
+gunny
+gunshot
+gunsling
+gunslinger
+gunslinging
+gusset
+gussets
+gustiness
+gusto
+gusty
+gutsier
+gutsiness
+gutsy
+gutted
+gutting
+guttural
+gutturalness
+guzzle
+guzzled
+guzzler
+guzzles
+guzzling
+gymnosperm
+gyp
+gypping
+gypsite
+gypsum
+gyrate
+gyrated
+gyrates
+gyrating
+gyro
+gyrocompass
+gyros
+gyroscopic
+h's
+habeas
+haberdasheries
+haberdashery
+habitant
+habitants
+habituate
+habituated
+habituates
+habituating
+habituation
+hacienda
+haciendas
+hackle
+hackled
+hackler
+hackles
+hackling
+hackney
+hackneyed
+hackneying
+hackneys
+hacksaw
+hacksaws
+hackwork
+haddock
+haddocks
+hadron
+hafnium
+haggle
+haggled
+haggler
+haggles
+haggling
+haiku
+hailstone
+hailstorm
+hairdo
+hairdos
+hairdressing
+hairline
+hairpin
+halcyon
+halfback
+halfbacks
+halfhearted
+halfheartedly
+halfheartedness
+halftime
+halibut
+halibuts
+halide
+halides
+halite
+hallelujah
+hallelujahs
+hallucinate
+hallucinated
+hallucinates
+hallucinating
+hallucination
+hallucinations
+hallucinative
+halo
+halocarbon
+halogen
+halogens
+halos
+hammerhead
+hammerless
+hamming
+hamster
+hamsters
+handclasp
+handgun
+handguns
+handhold
+handicapper
+handicapping
+handicraft
+handicrafter
+handicrafts
+handicraftsman
+handicraftsmen
+handleable
+handlebar
+handlebars
+handless
+handmade
+handmaiden
+handout
+handouts
+handrail
+handset
+handsets
+handspike
+handspikes
+handstand
+handstands
+handwrite
+handwrites
+handwritings
+handyman
+handymen
+hangable
+hangman
+hangman's
+hangmen
+hangout
+hangouts
+hank
+hanker
+hankered
+hankerer
+hankering
+hankers
+hansom
+happenstance
+harangue
+harangued
+haranguer
+harangues
+haranguing
+harbinger
+harbingers
+hardboard
+hardboiled
+hardhat
+hardscrabble
+hardshell
+hardtack
+hardtop
+hardtops
+hardwire
+hardwired
+hardwires
+hardwiring
+hardwood
+hardwoods
+hardworking
+harelip
+harelips
+harem
+harmonic
+harmonics
+harpies
+harpist
+harpoon
+harpoon's
+harpooned
+harpooner
+harpooning
+harpoons
+harpsichord
+harpsichordist
+harpsichords
+harpy
+harpy's
+harrumph
+harrumphed
+harrumphes
+harrumphing
+harvestman
+hashish
+hasp
+hasps
+hatchway
+hatless
+hatted
+hatters
+haulage
+haw
+hawing
+hawser
+hawthorn
+hayfield
+hayfields
+hayloft
+hayloft's
+haylofts
+haystack
+haystacks
+hazelnut
+hazelnuts
+headboard
+headboards
+headdress
+headier
+headiness
+headless
+headlessness
+headlight
+headlights
+headmaster
+headquarter
+headquartered
+headroom
+headset
+headsets
+headship
+headsman
+headsmen
+headstand
+headstands
+headstone
+headstones
+headwall
+headwalls
+headwater
+headwaters
+heady
+hearse
+heartbeat
+heartbeats
+heartbreak
+heartbreaking
+heartbreakingly
+heartburn
+heartburning
+heartfelt
+heartland
+heartland's
+heartthrob
+heartthrob's
+heartthrobs
+heathenish
+heathenishly
+heavenward
+heavenwards
+heavyweight
+hebephrenic
+hecatomb
+heck
+heckle
+heckled
+heckler
+hecklers
+heckles
+heckling
+hectares
+hectic
+hector
+hedonism
+hedonist
+hedonistic
+hedonists
+heedful
+heedfully
+heedfulness
+heft
+hefted
+heftier
+heftiness
+hefts
+hefty
+hegemonic
+hegemonies
+hegemony
+heist
+heist's
+heisted
+heister
+heisting
+heists
+helical
+helically
+helices
+helicon
+helicopter
+heliocentric
+heliotrope
+helium
+helix
+helixes
+hellbender
+hellfire
+hellish
+hellishly
+hellishness
+helluva
+helmsman
+helmsmen
+helpmate
+hematite
+hemispheric
+hemispherical
+hemmed
+hemming
+hemoglobin
+hemolytic
+hemorrhage
+hemorrhaged
+hemorrhages
+hemorrhaging
+hemorrhoids
+henning
+henpeck
+henpecked
+henry
+hepatitis
+heptane
+herbal
+herdsman
+hereof
+hereunto
+heritable
+heritor
+hermeneutics
+hermetic
+hermitian
+herpes
+herpetologist
+herpetologists
+herpetology
+herringbone
+hertz
+hertzes
+hesitance
+hesitancy
+heterodyne
+heterogamous
+heterogamy
+heterogeneity
+heterosexual
+heterosexually
+heterosexuals
+heterostructure
+heterozygous
+hewn
+hexachloride
+hexadecimal
+hexadecimally
+hexadecimals
+hexafluoride
+hexagon
+hexagons
+hexameter
+heyday
+hi
+hiatus
+hiatuses
+hibachi
+hibernate
+hibernated
+hibernates
+hibernating
+hibernation
+hick
+hicks
+hideaway
+hierarchal
+hierarchic
+hieratic
+hieroglyphic
+hieroglyphics
+hifalutin
+highball
+highboy
+highfalutin
+highhanded
+highroad
+highs
+hight
+hightail
+highwayman
+highwaymen
+hilarity
+hillbilly
+hillier
+hillman
+hillmen
+hilly
+hindmost
+hindquarters
+hinterland
+hinterlands
+hippies
+hipping
+hippo
+hippodrome
+hippopotamus
+hippos
+hippy
+hipster
+hipsters
+hireling
+hirelings
+histochemic
+histochemical
+histochemistry
+histology
+historicism
+historicity
+historiography
+histrionic
+histrionics
+hitless
+ho
+hoagie
+hoagies
+hoagy
+hoarfrost
+hob
+hobbing
+hobbyhorse
+hobo
+hobos
+hoc
+hock
+hocker
+hocking
+hocks
+hodge
+hodgepodge
+hodges
+hogan
+hogging
+hokey
+hokeyer
+hokeyest
+hokeyness
+holdover
+holdovers
+holdup
+holdups
+hollandaise
+holler
+hollered
+hollering
+hollers
+hollowware
+hollyhock
+hollyhocks
+holmium
+holography
+holster
+holstered
+holstering
+holsters
+holystone
+holystones
+homebound
+homebuilder
+homebuilders
+homebuilding
+homecoming
+homecomings
+homeland
+homemake
+homemaking
+homeowner
+homeowners
+homeownership
+homerists
+homicidal
+homicidally
+homicide
+homicides
+homily
+homo
+homogamy
+homogenate
+homogenates
+homologous
+homologue
+homology
+homonym
+homonym's
+homonyms
+homopolymers
+homos
+homosexual
+homosexually
+homosexuals
+homozygous
+homozygously
+hon
+honeybee
+honeybees
+honeydew
+hong
+honk
+honked
+honker
+honkers
+honkies
+honking
+honks
+honky
+honky's
+hooch
+hoodlum
+hoodlums
+hoofmark
+hoofmarks
+hookup
+hookups
+hookworm
+hooligan
+hooliganism
+hooligans
+hoopla
+hoosegow
+hoosegows
+hooves
+hoppled
+hopples
+hopscotch
+hornier
+horniness
+horny
+horoscope
+horoscopes
+hors
+horsedom
+horseflesh
+horseflies
+horsefly
+horsehair
+horselike
+horsemanship
+horsemen
+horsens
+horseplay
+horseplayer
+horsetail
+horsewoman
+horticulture
+hosiery
+hospice
+hospices
+hostelries
+hostelry
+hotbed
+hotbox
+hotdogs
+hotelman
+hothead
+hotheaded
+hotheadedly
+hotheadedness
+hothouse
+hotrod
+hough
+hourglass
+houseboat
+houseboats
+housebreak
+housebreaker
+housebreakers
+housebreaking
+housebroken
+housekeep
+housewares
+housewives
+hove
+howdy
+hoy
+hubba
+hubbies
+hubbub
+hubby
+huckleberry
+huckster
+huckstered
+huckstering
+hucksters
+hugged
+hugging
+huggings
+hulk
+hulked
+hulking
+hulks
+humanism
+humanist
+humanistic
+humanists
+humanitarian
+humanitarians
+humidistat
+hummingbird
+hummingbirds
+hummock
+hummocks
+humorist
+humorist's
+humorists
+humpback
+humpbacked
+humpbacks
+humus
+hundredfold
+huntress
+hurray
+hurrays
+hurtful
+hurtfully
+hurtfulness
+hurtle
+hurtled
+hurtles
+hurtling
+husbandman
+husbandmen
+huskily
+hutch
+huzzahs
+hyacinths
+hydrant
+hydrants
+hydrate
+hydrated
+hydrates
+hydrating
+hydration
+hydrations
+hydride
+hydrides
+hydro
+hydrocarbon
+hydrocarbons
+hydrochemistry
+hydrochloric
+hydrochloride
+hydroelectric
+hydrofluoric
+hydrogenate
+hydrogenation
+hydrological
+hydrologically
+hydrology
+hydrolysis
+hydrometer
+hydrometer's
+hydrometers
+hydrophilic
+hydrophobia
+hydrophobic
+hydros
+hydrosphere
+hydrostatic
+hydrostatics
+hydrothermal
+hydrothermally
+hydrous
+hydroxide
+hydroxides
+hydroxy
+hydroxyl
+hydroxyl's
+hydroxylate
+hydroxylation
+hydroxyls
+hydroxyzine
+hyena
+hygienic
+hygienics
+hygrometer
+hygrometer's
+hygrometers
+hygroscopic
+hying
+hymen
+hymens
+hymnal
+hyperbola
+hyperbole
+hyperbolically
+hyperboloid
+hyperboloidal
+hypercellularity
+hypercube
+hypercube's
+hypercubes
+hyperemia
+hyperemic
+hyperfine
+hypergamous
+hypergamously
+hypergamy
+hyperplasia
+hypertensive
+hypertrophied
+hypertrophy
+hypervelocity
+hyphenate
+hyphenated
+hyphenates
+hyphenating
+hyphenation
+hyphenations
+hypnosis
+hypnotic
+hypnotically
+hypnotics
+hypoactive
+hypocellularity
+hypocritical
+hypocritically
+hypophyseal
+hypotenuse
+hypotenuses
+hypothalamic
+hypothalamically
+hypothalamus
+hypothermia
+hypothetic
+hypothyroid
+hypothyroidism
+hysterectomy
+hysteria
+hysteric
+hysterics
+i's
+iambic
+ibid
+ibis
+ibises
+icebox
+icicle
+icicles
+iconic
+iconoclasm
+iconoclast
+icosahedral
+icosahedron
+idealist
+idealogical
+ideate
+ideates
+ideation
+idempotent
+idempotents
+identifiability
+ideologist
+ideologists
+idiolect
+idiom
+idiomatic
+idiomaticness
+idioms
+idiosyncratically
+idiotically
+idyll
+idyllic
+iffiness
+iffy
+igloo
+igloos
+igneous
+ignite
+ignited
+igniter
+ignites
+igniting
+ignitions
+ignominious
+ignominiously
+ignoramus
+ileum
+iliac
+ilk
+ilk's
+illegible
+illegitimacy
+illegitimate
+illegitimately
+illimitable
+illimitableness
+illiteracy
+illogic
+illume
+illumed
+illumine
+illumined
+illumines
+illuming
+illusionary
+illusoriness
+illusory
+imagery
+imbecile
+imbecilely
+imbibe
+imbibed
+imbiber
+imbibing
+imbroglio
+imbruing
+imbue
+imbued
+imbuing
+imitable
+imitators
+immanent
+immanently
+immeasurable
+immeasurableness
+immeasurably
+immensities
+immensity
+imminence
+immobile
+immobility
+immoderate
+immoderately
+immoderateness
+immoderation
+immodest
+immodestly
+immodesty
+immunological
+immunologically
+impairment
+impale
+impaled
+impales
+impaling
+impalpable
+impartation
+impartiality
+impassable
+impassableness
+impeccable
+impeccably
+impelled
+impeller
+impellers
+impelling
+impend
+imperceivable
+imperceptible
+imperceptibly
+imperfectability
+imperishable
+imperishableness
+impermeable
+impermeableness
+imperturbable
+impiety
+impish
+impishly
+impishness
+implacable
+implacableness
+implantation
+implausibly
+implementability
+impolite
+impolitely
+impoliteness
+impolitic
+impoliticly
+impoliticness
+imponderable
+imponderableness
+imponderables
+importunate
+importunately
+importunateness
+importune
+importunely
+importuner
+importuners
+importunities
+impost
+imposter
+imposts
+impotency
+impound
+impounded
+impounding
+impoundments
+impounds
+imprecate
+imprecated
+imprecates
+imprecating
+imprecation
+imprecations
+impregnate
+impregnated
+impregnates
+impregnating
+impregnation
+impregnations
+impresario
+impressible
+impressionism
+imprimatur
+improbably
+impropitious
+impropriety
+improvident
+improvidently
+imprudent
+imprudently
+impudence
+impugn
+impugned
+impugner
+impugning
+impugns
+imputation
+imputations
+inaction
+inactivate
+inadvertence
+inalienable
+inanity
+inappeasable
+inarticulate
+inarticulately
+inarticulateness
+inattention
+inaudibility
+inboard
+inbreed
+inbreeder
+inbreeding
+incalculability
+incalculable
+incalculableness
+incandescent
+incandescently
+incant
+incanted
+incapacitate
+incapacitated
+incapacitates
+incapacitation
+incapacity
+incarcerate
+incarcerated
+incarcerates
+incarcerating
+incarceration
+incarnate
+incept
+incepted
+incepting
+inceptive
+inceptively
+inceptor
+incepts
+incest
+incestuous
+incestuously
+incestuousness
+incinerate
+incinerated
+incinerates
+incinerating
+incineration
+incinerations
+incinerator
+incinerators
+incipience
+incipiency
+incise
+incised
+incises
+incising
+incisive
+incisively
+incisiveness
+incisor
+incisor's
+incisors
+incitement
+incitements
+inclemency
+inclement
+inclemently
+inclinometer
+inclinometer's
+inclinometers
+incoercible
+incombustible
+incommensurable
+incommodious
+incommodiously
+incommodiousness
+incommunicable
+incommunicado
+incommutable
+incompetency
+incompressibility
+incondensable
+incongruities
+incongruity
+incongruous
+incongruously
+incongruousness
+inconsistence
+inconsonance
+inconstant
+incontinence
+incontrovertible
+incorporable
+incorporeally
+incorrigible
+incorrigibleness
+incorruptibility
+incorruptible
+increasable
+incriminating
+incubi
+incubus
+inculcate
+inculcated
+inculcates
+inculcation
+inculpable
+incumbent
+incumbents
+incursion
+incursions
+indecipherable
+indecorous
+indecorously
+indecorousness
+indefatigable
+indefatigableness
+indefensible
+indelible
+indelibly
+indelicate
+indelicately
+indelicateness
+indemnification
+indemonstrably
+indenture
+indentured
+indentures
+indenturing
+indestructible
+indestructibleness
+indicant
+indicants
+indict
+indicted
+indicter
+indigent
+indiscoverable
+indiscretion
+indispose
+indisposing
+indisposition
+indisputable
+indisputableness
+indisputably
+indissociable
+indissoluble
+indissolubleness
+indium
+individualism
+individualist
+individualists
+individuate
+individuated
+individuates
+individuating
+individuation
+indolence
+indubitable
+indubitableness
+inducible
+inductee
+inductees
+inductile
+indulgent
+indulgently
+industrialism
+inebriate
+inebriated
+inebriates
+inebriating
+inebriation
+ineffable
+ineffableness
+ineffaceable
+ineffectual
+ineffectually
+ineffectualness
+inefficacious
+inefficaciously
+inefficaciousness
+inegalitarian
+inelastic
+ineligibility
+ineligible
+ineluctable
+inept
+ineptly
+ineptness
+inequitable
+inequivalent
+ineradicable
+inertial
+inertially
+inexpediency
+inexpert
+inexpertly
+inexpertness
+inexpiable
+inexplicit
+inextinguishable
+inextricable
+inextricably
+infamy
+infanticide
+infanticide's
+infantile
+infantryman
+infantrymen
+infatuation
+infauna
+infecund
+infelicitous
+infelicitously
+infelicity
+inferable
+infertile
+infestation
+infestations
+infield
+infield's
+infielder
+infielder's
+infielders
+infinitude
+infirm
+infirmary
+infirmed
+infirmly
+inflammation
+inflammatory
+inflect
+inflected
+inflecting
+inflection
+inflectional
+inflectionally
+inflections
+inflective
+inflects
+inflexed
+infliction
+inflow
+influx
+info
+infra
+infraction
+infrared
+infusible
+infusibleness
+ingenuous
+ingenuously
+ingenuousness
+ingest
+ingested
+ingestible
+ingestion
+ingestive
+ingrain
+ingrate
+ingratiate
+ingratiating
+ingratiatingly
+ingratiation
+inhabitation
+inhalant
+inhalation
+inhibitor
+inhibitory
+inhomogeneous
+inimical
+inimically
+inimitable
+inimitableness
+iniquitous
+iniquitously
+iniquitousness
+injectable
+injunctive
+inlay
+inlayer
+inlaying
+innovators
+innuendo
+innuendoes
+innuendos
+inoculate
+inoculated
+inoculates
+inoculating
+inoculation
+inoculations
+inoculative
+inoperative
+inoperativeness
+inorganically
+inputted
+inquest
+inquisitor
+insatiable
+insatiableness
+inscrutability
+inscrutable
+inscrutableness
+insecticide
+insecticides
+inseminate
+insemination
+insensate
+insensately
+insensateness
+insensibility
+inseparability
+inseparably
+inset
+insincere
+insincerely
+insipid
+insipidly
+insobriety
+insolvency
+insolvent
+insomnia
+insomniac
+insomniacs
+insouciance
+insouciant
+insouciantly
+inspirational
+inspirationally
+instable
+instep
+instill
+instillation
+instilled
+instiller
+instilling
+instinctual
+institutionalist
+instrumentalities
+insubordinate
+insubordinately
+insubordination
+insubstantial
+insufferable
+insular
+insularity
+insularly
+insulin
+insuperably
+insuppressible
+insurgence
+insusceptibility
+intake
+intaking
+integrable
+integrand
+integument
+intellectuality
+intelligentsia
+intendant
+intendants
+intensional
+intensionally
+inter
+interaxial
+intercalate
+intercalated
+intercalates
+intercalating
+intercalation
+intercalative
+intercase
+intercaste
+intercede
+interceder
+intercedes
+intercensal
+interception
+interceptor
+interclass
+intercohort
+intercollegiate
+intercom
+intercontinental
+intercorrelated
+interdenominational
+interdepartmental
+interdepartmentally
+interdict
+interdictive
+interfaith
+interferometer
+interferometer's
+interferometers
+interferometric
+interferometry
+interferon
+intergalactic
+intergeneration
+intergenerational
+interglacial
+intergovernmental
+intergroup
+interindex
+interindustry
+interject
+interjected
+interjecting
+interjects
+interlayer
+interlayering
+interlibrary
+interlingua
+interlining
+interlobular
+interlock
+interlocked
+interlocker
+interlocking
+interlocks
+interlocutor
+interlude
+interludes
+intermarriage
+interment
+intermeshed
+intermetrics
+interminableness
+interminably
+intermission
+intermissions
+intermolecular
+intermolecularly
+internationalist
+internationalists
+internetwork
+interpenetrates
+interplanetary
+interpol
+interposition
+interpretative
+interpretatively
+interpretor
+interpretors
+interprocessor
+interquartile
+interracial
+interred
+interregional
+interregnum
+interrogator
+interrogatories
+interrogators
+interrogatory
+interspecies
+interstellar
+interstice
+interstices
+interstitial
+interstitially
+intersurvey
+intervenor
+interventionist
+intervocalic
+interweaving
+intestate
+intimal
+intonate
+intone
+intoning
+intorsion
+intoxicant
+intra
+intracity
+intraclass
+intracohort
+intradepartmental
+intrafamily
+intragenerational
+intraindustry
+intraline
+intrametropolitan
+intramuscular
+intramuscularly
+intranasal
+intransigence
+intraoffice
+intrapulmonary
+intraregional
+intrasectoral
+intrastate
+intratissue
+intravenous
+intravenously
+intrepid
+intrepidly
+intrepidness
+intro
+introject
+introjected
+introjects
+introversion
+intuitable
+inunction
+inundate
+inundated
+inundates
+inundating
+inundation
+inundations
+inure
+inured
+inuring
+inutile
+invalidism
+invasive
+invasiveness
+invective
+invectively
+invectiveness
+inveigh
+inveigher
+inveigle
+inveigled
+inveigler
+inveigling
+investigatory
+inveterate
+inveterately
+invidious
+invidiously
+invidiousness
+invigorate
+invigorated
+invigorates
+invigorating
+invigoratingly
+invigoration
+inviolability
+inviolable
+inviolate
+inviolately
+inviolateness
+invitational
+invitee
+invitees
+invocable
+invocate
+involute
+involutely
+involution
+involutions
+involutorial
+invulnerability
+iodate
+iodated
+iodating
+iodation
+iodide
+iodinate
+iodinated
+iodinating
+iodination
+ionic
+ionosphere
+ionospheric
+iota
+ipecac
+ipso
+iridium
+ironic
+ironside
+ironsides
+ironstone
+ironwood
+irradiate
+irradiated
+irradiation
+irradiative
+irreconcilable
+irreconcilableness
+irredeemable
+irredeemably
+irredentism
+irredentist
+irrelevancies
+irrelevancy
+irremediable
+irremediableness
+irremovable
+irreparable
+irreparableness
+irreparably
+irreplaceable
+irreplaceableness
+irreproachable
+irreproachableness
+irreproducibility
+irreproducible
+irresistibility
+irresistibly
+irresolute
+irresolutely
+irresoluteness
+irresolution
+irresolvable
+irresponsibility
+irretrievable
+irreverence
+irreverent
+irreverently
+irreversibly
+irrevocable
+irrevocableness
+irrevocably
+irritability
+irritable
+irritableness
+irritably
+irritant
+irritants
+irruption
+irruptions
+isinglass
+isochronal
+isochronally
+isochronous
+isochronously
+isocline
+isocyanate
+isodine
+isolationism
+isolationistic
+isomer
+isomers
+isomorph
+isopleth
+isopleths
+isotherm
+isothermal
+isothermally
+isotherms
+isotonic
+isotopic
+isotropic
+isotropically
+isotropy
+issuant
+itinerant
+itinerantly
+j's
+jabberings
+jackass
+jackboot
+jackbooted
+jackboots
+jackdaw
+jackdaws
+jackknife
+jackpot
+jackpots
+jag
+jagged
+jaggedly
+jaggedness
+jaggers
+jagging
+jaguar
+jalopies
+jalopy
+jamboree
+jangle
+jangled
+jangler
+jangles
+jangling
+janissaries
+janissary
+janitorial
+jasper
+jaspers
+jaundice
+jaundiced
+jaundices
+jaundicing
+jawbone
+jazzier
+jazziness
+jazzmen
+jazzy
+jejune
+jejunely
+jejuneness
+jejunum
+jeopard
+jeopardies
+jeopardy
+jerry
+jess
+jetliner
+jetliners
+jettison
+jibe
+jibed
+jibes
+jibing
+jiffies
+jiffy
+jigger
+jiggered
+jigging
+jiggle
+jiggled
+jiggles
+jiggling
+jigsaw
+jilt
+jilted
+jilter
+jilts
+jimmied
+jimmies
+jimmy
+jimmying
+jinx
+jitter
+jitterbug
+jitters
+jittery
+jive
+jived
+jives
+jiving
+jobbery
+jobbing
+jobholder
+jobholders
+jobless
+joblessness
+jock
+jockey
+jockeyed
+jockeying
+jockeys
+jockstrap
+jockstraps
+jocose
+jocosely
+jocoseness
+jocular
+jocularly
+joey
+joggle
+joggled
+joggler
+joggles
+joggling
+jollities
+jollity
+jonquil
+jonquils
+josh
+joshed
+josher
+joshes
+joshing
+joss
+joule
+jounce
+jounced
+jounces
+jouncing
+journalese
+journaleses
+journeyman
+journeymen
+jovial
+joviality
+jovially
+jowl
+jowled
+jowls
+joyless
+joylessly
+joylessness
+joyride
+joyrider
+joyriding
+joystick
+joysticks
+jubilant
+jubilantly
+jubilate
+jubilated
+jubilates
+jubilating
+jubilation
+jubilations
+judgeship
+judicatory
+judicature
+judicatures
+judo
+jugate
+jugging
+juju
+jujube
+juke
+jukes
+juking
+julep
+juleps
+jumbo
+jumbos
+junkerdom
+junket
+junketed
+junketeer
+junketeering
+junketer
+junketing
+junkets
+junta
+juridical
+juridically
+jurisdictional
+jurisdictionally
+jurisprudence
+jurisprudent
+jurisprudential
+jurisprudentially
+jurist
+jurists
+justiciable
+jute
+jutes
+jutting
+juxtaposition
+k's
+kaboom
+kaleidescope
+kamikaze
+kangaroo
+kangaroos
+kaolin
+kaolinite
+kappa
+karat
+karate
+kazoo
+kazoos
+kcal
+kebob
+keg
+kegs
+kelp
+keno
+ketone
+ketosis
+keyhole
+keyholes
+keynote
+keynoter
+keynotes
+keypunch
+keypunched
+keypuncher
+keypunches
+keypunching
+keystone
+keystones
+khaki
+khan
+kibbutzim
+kibitz
+kibitzer
+kickback
+kickbacks
+kickoff
+kickoffs
+kidder
+kiddie
+kiddies
+kidless
+killable
+killjoy
+kilobaud
+kilobuck
+kilogauss
+kilohertz
+kilohm
+kilojoule
+kiloton
+kilotons
+kilovolt
+kilovolts
+kilowatt
+kilowatts
+kiloword
+kilts
+kimono
+kinematic
+kinematics
+kinesics
+kinetic
+kinetics
+kingbird
+kingfisher
+kinglet
+kingpin
+kink
+kinsmen
+kinsmen's
+kiosk
+kiosks
+kitchenette
+kitchenettes
+kittenish
+kittenishly
+kittenishness
+klaxon
+kleenex
+klystron
+klystrons
+km
+kneecap
+kneecaps
+kneepad
+kneepads
+knick
+knicker
+knickerbocker
+knickers
+knitted
+knitting
+knobby
+knockdown
+knockdowns
+knockout
+knockouts
+knockwurst
+knottier
+knottiness
+knotty
+knuckleball
+knuckleballer
+knurl
+koala
+kohlrabi
+kooks
+kosher
+koshered
+koshering
+kraft
+kraut
+krauts
+krill
+krypton
+kudzu
+kumquat
+kurtosis
+l's
+la
+labial
+labially
+labile
+labiodental
+lackadaisic
+lackey
+lackeyed
+lackeying
+lackeys
+lacrosse
+lacrosses
+lactate
+lactated
+lactates
+lactating
+lactation
+lactational
+lactationally
+lactose
+lacuna
+lacunae
+lacunas
+ladle
+ladled
+ladles
+ladling
+ladylike
+laggard
+laggardly
+laggardness
+laggards
+lagging
+laing
+laissez
+laity
+lakeside
+lamas
+lamentably
+laminate
+laminated
+laminates
+laminating
+lamination
+laminations
+lammed
+lamming
+lampblack
+lamplight
+lamplighter
+lampoon
+lampooned
+lampooner
+lampooning
+lampoons
+lamprey
+lampreys
+landau
+landfill
+landhold
+landholder
+landholders
+landholding
+landholdings
+landless
+landownership
+landslide
+landslides
+languor
+lank
+lankier
+lankiness
+lankly
+lankness
+lanky
+lanthanide
+lanthanum
+lapidary
+lapped
+lapping
+laptop
+laptop's
+laptops
+larceny
+larch
+largemouth
+largesse
+lariat
+larval
+laryngeal
+laryngeally
+larynx
+larynxes
+las
+lascivious
+lasciviously
+lasciviousness
+lasing
+lasso
+lassoed
+lassoer
+lathe
+latitudinal
+latitudinally
+latitudinary
+laud
+laudably
+laudanum
+laudatory
+lauder
+lauds
+laughingstock
+laughingstocks
+laundresses
+laundrymen
+laura
+laureate
+laureated
+laureates
+laureating
+laureation
+lawbreaker
+lawbreakers
+lawbreaking
+lawgiver
+lawgivers
+lawgiving
+lawmakers
+lawmaking
+lawman
+lawmen
+lawrencium
+lax
+laxative
+laxatively
+laxativeness
+laxatives
+laxity
+laxly
+laxness
+layoff
+layperson
+layup
+layup's
+layups
+lazybones
+lb
+lbs
+leach
+leachate
+leaches
+leaching
+leaderless
+leadsman
+leadsmen
+leafhopper
+leakier
+leakiness
+leaky
+leapfrog
+leasehold
+leaseholder
+leatherneck
+leathery
+lebensraum
+lecher
+lechery
+leek
+leery
+leeward
+leewards
+leeway
+lefties
+lefty
+legate
+legated
+legatee
+legates
+legating
+legation
+legations
+legato
+legerdemain
+leggier
+legging
+leggy
+leghorn
+legume
+legumes
+leguminous
+leitmotif
+leitmotiv
+lemming
+lemmings
+lengthily
+lenticular
+leonine
+leper
+lepers
+lesbian
+lesbians
+lesion
+lesions
+lessor
+lethal
+lethality
+lethally
+lethargies
+lethargy
+letterhead
+letterheads
+letterman
+lettermen
+levitate
+levitated
+levitates
+levitating
+levitation
+levities
+levity
+lewis
+lex
+libation
+libations
+libel
+libels
+liberalism
+liberality
+libertarian
+libertarians
+libertine
+libertines
+libidinous
+libidinously
+libidinousness
+librettist
+librettists
+libretto
+libretto's
+librettos
+lice
+licensor
+licentious
+licentiously
+licentiousness
+licit
+licitly
+licorice
+lidding
+lidless
+lieut
+lifeblood
+lifeboat
+lifeboats
+lifeguard
+lifeguards
+lifesaving
+lifespan
+lifespans
+ligament
+ligaments
+ligand
+ligands
+ligature
+ligatured
+ligatures
+ligaturing
+lighthearted
+lightheartedly
+lightheartedness
+lightproof
+lightships
+lignite
+lignum
+likeable
+lilt
+lilting
+liltingly
+liltingness
+limbic
+limbo
+limbos
+limelight
+limerick
+limerick's
+limericks
+limitless
+limitlessly
+limitlessness
+limousine
+limousines
+limpid
+limpidly
+limpidness
+lineage
+lineages
+lineal
+lineally
+linebacker
+linebackers
+lineman
+linemen
+lineup
+lineups
+lingerie
+lingo
+lingua
+lingual
+lingually
+liniment
+liniments
+lipid
+lipid's
+lipids
+liquefaction
+liqueur
+liquidate
+liquidated
+liquidates
+liquidating
+listless
+listlessly
+listlessness
+litanies
+litany
+literalism
+lithium
+lithograph
+lithographer
+lithographers
+lithographs
+lithography
+lithology
+lithosphere
+lithospheric
+litigant
+litigants
+litigious
+litigiously
+litigiousness
+litmus
+litterbug
+littleneck
+littoral
+liturgic
+liturgical
+liturgically
+liturgics
+liturgy
+livability
+liverwort
+livestock
+livid
+lividness
+loadable
+loam
+loamy
+lob
+lobotomy
+lobular
+lobularity
+lobularly
+lobule
+lobules
+locale
+locales
+localisms
+locational
+locationally
+locknut
+locksmith
+locksmithing
+locomotor
+locomotory
+locoweed
+lodestone
+lodgepole
+lodgment
+logarithmic
+loge
+loggerhead
+logion
+logions
+logistical
+logistically
+logjam
+loincloth
+loll
+loller
+lollies
+lolling
+lolly
+longevity
+longhand
+longhorn
+longhorns
+longish
+longitudinal
+longitudinally
+longshoremen
+longstanding
+longterm
+longtime
+looseleaf
+lop
+lope
+loped
+loper
+loping
+lopped
+lopping
+lops
+lopsided
+lopsidedly
+lopsidedness
+loquacious
+loquaciously
+loquaciousness
+loquacity
+lossage
+lossless
+lotion
+lotions
+loudspeaking
+louse
+loused
+louses
+lousewort
+lousing
+lovebird
+lovebirds
+loveless
+lovelessly
+lovelessness
+lovelorn
+lovelornness
+lowboy
+lowdown
+lowercase
+lowercased
+lowercases
+lowercasing
+lowlight
+lowlight's
+lowlights
+loyalist
+loyalists
+lozenge
+lozenged
+lozenges
+lubricate
+lubricated
+lubricates
+lubricating
+lubrications
+lubricative
+lubricious
+lubriciously
+lubricity
+lucent
+lucently
+lucid
+lucidity
+lucidly
+lucidness
+lucrative
+lucratively
+lucrativeness
+lucre
+lug
+luge
+luger
+lugged
+lugging
+lugs
+lulu
+lumbar
+lumberman
+lumbermen
+lumberyard
+lumen
+luminaries
+luminary
+luminescence
+luminescent
+luminosity
+lummox
+lumpier
+lumpiness
+lumpish
+lumpishly
+lumpishness
+lumpy
+lunacy
+lunary
+lunate
+lunated
+lunately
+lunation
+lunchroom
+lunchrooms
+lunchtime
+lunge
+lupine
+lurid
+luridly
+luridness
+lush
+lushes
+lushly
+lushness
+lustful
+lustfully
+lustfulness
+lutanist
+luxe
+luxes
+luxuriance
+luxuriate
+luxuriated
+luxuriating
+lycopodium
+lye
+lymphocyte
+lymphocytes
+lymphoma
+lyrical
+lyrically
+lyricalness
+lyricism
+lyricist
+lyricists
+m's
+ma
+macabre
+macabrely
+machinable
+machination
+machination's
+machinations
+machinelike
+machinist
+machinists
+machismo
+macho
+macintosh
+mack
+mackinaw
+mackintosh
+macrodynamic
+macromolecular
+macrophage
+macrophages
+macroscopically
+macrosimulation
+macrosocioeconomic
+madcap
+madding
+madhouse
+madmen
+madrigal
+madrigaling
+madrigals
+maestro
+magenta
+maggoty
+magi
+magisterial
+magisterially
+magnanimity
+magnanimous
+magnanimously
+magnanimousness
+magnate
+magnates
+magnesia
+magnesite
+magnetite
+magneto
+magnetos
+magnolia
+magnolias
+magnum
+magnums
+magpie
+magpies
+maidenhair
+maidservant
+maier
+mailman
+mailmen
+mainline
+mainlined
+mainliner
+mainliners
+mainlines
+mainlining
+mainstream
+majestically
+maladapt
+maladapted
+maladaptive
+maladjust
+maladjusted
+maladjustive
+maladjustment
+maladjustments
+maladroit
+maladroitly
+malaise
+malaprop
+malapropism
+malarial
+malarious
+malcontent
+malcontent's
+malcontented
+malcontentedly
+malcontentedness
+malcontents
+maledict
+malediction
+malevolence
+malevolencies
+malevolent
+malevolently
+malfeasant
+malformation
+malformations
+malformed
+malign
+malignancies
+malignancy
+maligned
+malignly
+malingering
+mallard
+mallards
+malleable
+malleableness
+malnourished
+malocclusion
+malposed
+malpractice
+maltreat
+mambo
+mambos
+mammalian
+manatee
+mandamus
+mandamused
+mandamuses
+mandamusing
+mandarin
+mandarins
+mandrake
+mandrakes
+manganese
+manhole
+manholes
+mania
+maniacal
+maniacally
+manic
+manicurists
+manikin
+manikins
+manna
+mannequin
+mannequins
+mannerism
+mannerisms
+manorial
+manservant
+manslaughter
+mantlepiece
+mantrap
+marathon
+marathons
+marauders
+margarine
+marginalia
+marginality
+maria
+marina
+marinade
+marinades
+marinas
+marionette
+marionettes
+marital
+maritally
+marksman
+marksmanship
+marlin
+marmalade
+marmalades
+maroon
+marooned
+marquee
+marquees
+marquess
+marquesses
+marred
+marriageable
+marring
+marrowbone
+marrowbones
+marshland
+marshlands
+marshmallow
+marshmallows
+martin
+martingale
+martini
+martinis
+mascara
+mascaras
+mascot
+mascot's
+mascots
+maser
+masque
+masquer
+masquers
+masques
+massless
+mastermind
+masterminded
+masterminding
+masterminds
+mastiff
+mastodon
+mastodons
+matchbook
+matchmake
+materialistic
+materiel
+maternity
+mathematic
+matinee
+matriarch
+matriarchal
+matriculate
+matriculated
+matriculates
+matriculating
+matrimonial
+matrimonially
+matting
+maturate
+maturated
+maturates
+maturating
+maturational
+maturations
+maturative
+maudlin
+maudlinly
+maul
+mauler
+maulers
+mauling
+mauls
+mausoleum
+mausoleums
+mauve
+maverick
+mavericks
+maw
+mawkish
+mawkishly
+mawkishness
+maxima
+maxwell
+mayorship
+meadowland
+meadowsweet
+mealier
+mealies
+mealtime
+mealy
+measle
+measled
+measlier
+measly
+meatier
+meatiest
+meatiness
+meaty
+mecca
+mechanist
+mechanistic
+mechanochemically
+mediator
+mediators
+medicate
+medicated
+medicates
+medicating
+medication
+medications
+medicative
+medico
+medicos
+medievalist
+medievalist's
+medievalists
+mediocre
+mediocrities
+mediocrity
+mediumistic
+medley
+medleys
+meetinghouse
+megahertz
+megalomania
+megalomaniac
+megalopolises
+megaton
+megatons
+megavolt
+megawatt
+megohm
+megohms
+melamine
+melange
+melanin
+melanoma
+melee
+meliorate
+meliorated
+meliorates
+meliorating
+melioration
+meliorations
+meliorative
+melodic
+melodically
+melodramatic
+melodramatics
+memento
+mementoes
+mementos
+memorabilia
+memoriam
+menarche
+menarches
+mendacious
+mendaciously
+mendaciousness
+mendacity
+mendelevium
+menfolk
+menfolks
+menopause
+menstrual
+menstruate
+menstruated
+menstruates
+menstruating
+menstruation
+menstruations
+mensurable
+mensurableness
+mensuration
+mensurations
+mercantile
+mercer
+mercers
+merchantability
+mercurial
+mercurially
+mercurialness
+mercuric
+meretricious
+meretriciously
+meretriciousness
+meringue
+meringues
+meritocracy
+meritocratic
+merlin
+mermaid
+mermaid's
+mermaids
+merman
+merman's
+mermen
+merrymaking
+mesa
+mescaline
+mesmeric
+meson
+mesquite
+metabolic
+metabolism
+metabolisms
+metabolite
+metabolites
+metalliferous
+metallography
+metalloid
+metallurgic
+metallurgical
+metallurgically
+metallurgists
+metalsmith
+metalsmithes
+metalwork
+metalworker
+metalworking
+metalworkings
+metamorphic
+metamorphism
+metamorphose
+metamorphosed
+metaphoric
+metaphosphate
+metaphysic
+meteorite
+meteorites
+meteoritic
+meteoritics
+meteoroid
+meteoroid's
+meteoroids
+meteorological
+methane
+methanol
+methodism
+methyl
+methylene
+meticulous
+meticulously
+meticulousness
+metro
+metronome
+metronomes
+metros
+mettle
+mettled
+mettles
+mettlesome
+mezzo
+mezzos
+miasma
+miasmal
+micro
+microamp
+microanalysis
+microanalytic
+microbial
+microchemistry
+microcosm
+microeconomic
+microfossils
+micrography
+microjoule
+microlevel
+micrometeorites
+micrometeoritic
+micrometer
+micrometer's
+micrometers
+micron
+microns
+microorganism
+microorganisms
+micros
+microscopical
+microscopically
+microscopy
+microsimulation
+microsimulations
+microsomal
+microvolt
+microvolts
+midair
+midas
+midband
+middleman
+middlemen
+middleweight
+middleweights
+midge
+midges
+midi
+midland
+midlander
+midlands
+midlife
+midmorn
+midmorning
+midrange
+midscale
+midsection
+midship
+midshipman
+midshipmen
+midships
+midspan
+midstream
+midterm
+midterm's
+midterms
+midweek
+midweekly
+midwife
+midwifed
+midwifing
+midwives
+midyear
+mignon
+migrant
+migrant's
+migrants
+migratories
+migratory
+mike
+mil
+milieu
+milieus
+militarist
+militate
+militated
+militates
+militating
+militiamen
+milkweed
+millenarian
+millenarianism
+millennia
+millennialism
+millennium
+milliamp
+milliampere
+milliamperes
+millidegree
+millidegrees
+millijoule
+millijoules
+milliners
+millinery
+millivolt
+millivoltmeter
+millivoltmeter's
+millivoltmeters
+millivolts
+milliwatt
+milliwatts
+millwright
+millwrights
+mime
+mimeograph
+mimeographed
+mimeographes
+mimeographing
+mimer
+mimesis
+mimetic
+mimetically
+miming
+mincemeat
+minefield
+mineralogical
+mineralogies
+mineralogist
+mineralogists
+mineralogy
+minesweeper
+minesweepers
+mini
+minidress
+minidresses
+minified
+minifies
+minify
+minifying
+minima
+minimalist
+minimalist's
+minimalists
+minimax
+minis
+miniscule
+miniskirt
+ministerial
+ministerially
+ministrations
+miniver
+minuend
+minuends
+minuet
+minuscule
+minuteman
+minutemen
+minutiae
+mirage
+miraged
+mirages
+miraging
+mirthless
+mirthlessly
+mirthlessness
+misalign
+misaligned
+misaligning
+misalignment
+misalignment's
+misalignments
+misaligns
+misanthrope
+misanthropic
+misbegotten
+misbehave
+misbehaved
+misbehaver
+misbehaves
+misbrand
+misbranded
+misbranding
+misbrands
+miscalculated
+miscarriage
+miscarriages
+miscarried
+miscarries
+miscarry
+miscarrying
+miscegenation
+miscegenations
+miscellanies
+miscellany
+misclassification
+misclassified
+misclassifying
+miscode
+miscoded
+miscodes
+miscoding
+misconstruction
+misconstructions
+miscount
+miscounted
+miscounting
+miscounts
+miscreant
+miscreants
+miscue
+miscue's
+miscues
+misdeed
+misdeeds
+misdemeanant
+misdemeanants
+misdirector
+misdirectors
+misfire
+misfired
+misfires
+misfiring
+misgauge
+misgauged
+misgauges
+misgauging
+misidentification
+misidentified
+misidentifies
+misidentify
+misidentifying
+misinterpretation
+misinterpretations
+misjudge
+misjudged
+misjudges
+misjudging
+misjudgingly
+mismanage
+mismanaged
+mismanages
+mismanaging
+misname
+misnamed
+misnames
+misnaming
+misogynist
+misogynist's
+misogynists
+misogyny
+misplacement
+misplacements
+mispronounce
+mispronounced
+mispronounces
+mispronouncing
+mispronunciation
+misquoted
+misrelated
+misreporting
+misrepresent
+misrepresented
+misrepresenter
+misrepresenting
+misrepresents
+misroute
+misrouted
+misroutes
+misshapen
+misshapenly
+misshapenness
+misshapennesses
+misspecification
+misspecified
+misstatement
+misstatements
+misstep
+mistletoe
+mistook
+mistrial
+miswritten
+mitzvahs
+mixup
+mm
+mobbed
+mobbing
+mobcap
+mobcaps
+mobile
+mobiles
+mobster
+mobsters
+mockingbird
+mockup
+mockups
+mod
+modernism
+modernistic
+modernists
+modicum
+modish
+modishly
+modishness
+mods
+moieties
+moiety
+moire
+molal
+molar
+molars
+moldboard
+molehill
+moll
+mollie
+mollification
+mollifications
+mollified
+mollifies
+mollify
+mollifying
+mollusk
+mollusks
+mollycoddle
+mollycoddled
+mollycoddler
+mollycoddles
+mollycoddling
+molybdenite
+molybdenum
+momenta
+momma
+mommy
+monad
+monadic
+monads
+monarchic
+monasticism
+monaural
+monaurally
+monetarism
+moneylenders
+moneymaking
+mongoose
+mongooses
+monies
+monkish
+monochromatic
+monochromator
+monocle
+monocled
+monocles
+monoclinic
+monocular
+monocularly
+monogamous
+monogamously
+monogamousness
+monogamy
+monolingual
+monolingualism
+monolinguals
+monolith
+monolithically
+monologist
+monologists
+monologue
+monologues
+monomer
+monomer's
+monomeric
+monomers
+monomial
+mononuclear
+monophonic
+monopolistic
+monopolists
+monosyllabic
+monosyllable
+monosyllables
+monotheistic
+monsieur
+monsoon
+monsoons
+monstrosities
+monstrosity
+montage
+montaged
+montages
+montaging
+monumentality
+moo
+moodily
+mooed
+moos
+mope
+mopes
+mopped
+mopping
+moraine
+moralist
+moralistic
+moratorium
+moratoriums
+morbidity
+mordant
+mordantly
+morgen
+morgue
+morgues
+moribund
+morocco
+moronic
+morose
+morosely
+moroseness
+morpheme
+morphemic
+morphine
+morphines
+morphism
+morphism's
+morphisms
+morphologic
+morphophonemic
+morphophonemics
+morris
+mortgagee
+mortgagees
+mortician
+morticians
+mosque
+mosques
+motherhood
+motherland
+moths
+motional
+motivator
+motorman
+motormen
+mottle
+mottled
+mottler
+mottles
+mottling
+mountable
+mountainside
+mountainsides
+mousier
+mousiness
+mousy
+mouthpiece
+mouthpieces
+mucilage
+mucky
+mucus
+mudding
+muddlehead
+muddleheaded
+muddleheadedness
+muddleheads
+mudguard
+mudsling
+mudslinger
+mudslingers
+mudslinging
+muggers
+muggier
+mugginess
+mugging
+muggings
+muggy
+mulatto
+mulattoes
+mulattos
+mulch
+mulched
+mulches
+mulching
+mulct
+mulish
+mulishly
+mulishness
+mull
+mullah
+mullen
+muller
+mulligan
+mulligatawny
+mulling
+multi
+multichannel
+multicollinearity
+multicolumn
+multicomputer
+multicomputer's
+multicomputers
+multidimensionality
+multidisciplinary
+multifaceted
+multifigure
+multifunctioned
+multilateral
+multilaterally
+multimedia
+multimegaton
+multimillionaire
+multinomial
+multiplet
+multiplets
+multipliable
+multipurpose
+multisyllabic
+multitudinous
+multitudinously
+multitudinousness
+multivalent
+multiversity
+mum
+mummification
+mummifications
+mummified
+mummify
+munge
+munged
+munger
+mungers
+munges
+munging
+mungings
+munificent
+munificently
+muon
+muriatic
+murk
+muscovite
+muscovites
+musculature
+mush
+musher
+musicality
+musicianship
+musicologists
+musicology
+muskellunge
+muskmelon
+muskox
+muskoxen
+muss
+mussed
+musses
+mussing
+must've
+mustachio
+mustachioed
+mustachios
+mustang
+mustangs
+mustn't
+mutant
+mutants
+mutational
+mutationally
+mutineer
+mutt
+mutuality
+mycology
+myers
+mylar
+mynah
+myocardial
+myocardium
+myopia
+myopic
+mystification
+mystified
+mystifier
+mystifies
+mystify
+mystifying
+mystifyingly
+mystique
+mythic
+mythographer
+mythographers
+mythography
+mythological
+mythologically
+myths
+n's
+nab
+nabbed
+nabbing
+nadir
+nagged
+nagging
+naggingly
+nameplate
+nameplates
+naphtha
+napped
+napping
+narcissist
+narcosis
+narrate
+narrated
+narrates
+narrating
+narration
+narrations
+narrator
+narrators
+nary
+nasality
+nascent
+nasturtium
+natal
+natalist
+natality
+natch
+nationalism
+nationalisms
+nationalistic
+nationhood
+nattier
+nattiness
+natty
+naturalistic
+nausea
+nauseas
+nauseate
+nauseated
+nauseates
+nauseating
+nauseatingly
+nautical
+nautically
+nautilus
+navel
+navels
+nd
+nearsighted
+nearsightedly
+nearsightedness
+nebulae
+nebular
+nebulous
+nebulously
+nebulousness
+neckline
+necromancer
+necromancers
+necromancy
+necromantic
+necropsy
+necrosis
+necrotic
+nectar
+nectaries
+nectarous
+nectary
+nee
+needlepoint
+negativism
+negativisms
+negativity
+negligee
+negligees
+negligent
+negligently
+negotiant
+negroid
+nelson
+nematic
+nematode
+nematodes
+nemesis
+neoclassic
+neoclassical
+neocortex
+neodymium
+neolithic
+neologism
+neologism's
+neologisms
+neomycin
+neon
+neonatal
+neonatally
+neoned
+neoplasms
+neoprene
+neptunium
+nerveless
+nervelessly
+nervelessness
+nervier
+nerviness
+nervy
+netherworld
+nettlesome
+neuralgia
+neurasthenic
+neuritis
+neuroanatomy
+neurologist
+neurology
+neuromuscular
+neuronal
+neuropathology
+neurophysiology
+neuropsychiatric
+neuroses
+neurosis
+neurotic
+neuter
+neutered
+neuterer
+neuterers
+neutering
+neuterings
+neuters
+neutralism
+neutralist
+neutralists
+neutron
+neutrons
+newel
+newfound
+newfoundland
+newlywed
+newlyweds
+newsboy
+newsboys
+newscast
+newscaster
+newscasters
+newscasting
+newscasts
+newspaperman
+newspapermen
+newsreel
+newsstand
+newsworthiness
+newsworthy
+newton
+nexus
+nexuses
+nichrome
+niggard
+niggardliness
+niggardly
+niggle
+niggled
+niggler
+niggles
+niggling
+nigglingly
+nightcap
+nightclub
+nightclubs
+nightdress
+nighthawk
+nightmarish
+nightmarishly
+nightshirt
+nighttime
+nihilism
+nihilisms
+nihilist
+nihilistic
+nilpotent
+nimbus
+nimbused
+nimbuses
+ninefold
+niobium
+nipped
+nipping
+nippingly
+nipple
+nipples
+nirvana
+nitpick
+nitrate
+nitrated
+nitrates
+nitrating
+nitration
+nitrations
+nitric
+nitride
+nitriding
+nitrite
+nitrogenous
+nitroglycerine
+nitrous
+nm
+nob
+nobelium
+noblemen
+noblesse
+nocturne
+nodal
+nodally
+nodular
+nodule
+nodules
+noisemake
+noisemaker
+noisemakers
+noisemaking
+nominee
+nominees
+nonacid
+nonadjacent
+nonagricultural
+nonbusiness
+noncarbohydrate
+nonchalant
+nonchalantly
+nonchalantness
+noncombatant
+noncommissioned
+noncommittal
+noncommittally
+noncompliance
+nonconformist
+nonconformists
+noncontiguous
+nondiscriminatory
+nondurable
+noneconomic
+nonemergency
+nonequivalence
+nonequivalent
+nonessential
+nonferrous
+nonfiction
+nonionic
+nonlinguistic
+nonliterary
+nonmagical
+nonmetallic
+nonogenarian
+nonpartisan
+nonpayment
+nonperturbing
+nonpoisonous
+nonpolitical
+nonprescription
+nonprofit
+nonracial
+nonrandom
+nonreducing
+nonresident
+nonresidential
+nonresistance
+nonrespondent
+nonrespondents
+nonresponse
+nonsingular
+nonstop
+nonsupervisory
+nonverbal
+nonverbally
+nonveteran
+nonveterans
+nonviolent
+nonviolently
+nonvolunteer
+nonvolunteers
+nonwhite
+noodle
+noodled
+noodles
+noodling
+noontime
+noose
+nooses
+noosing
+noradrenalin
+noradrenaline
+normative
+normatively
+normativeness
+northbound
+northernmost
+northland
+norths
+nosebleed
+nosebleed's
+nosebleeds
+nosier
+nosiness
+nostalgia
+nostalgic
+nostalgically
+nosy
+notary
+notate
+notated
+notates
+notating
+notative
+notoriety
+nouveau
+nouvelle
+nova
+nova's
+novas
+novitiate
+novitiates
+noxious
+noxiously
+noxiousness
+nozzle
+nozzles
+nth
+nuance
+nuanced
+nubile
+nucleate
+nucleated
+nucleation
+nuclei
+nucleic
+nucleoli
+nucleolus
+nuclide
+nude
+nudely
+nudeness
+nuder
+nudes
+nudest
+nudge
+nudged
+nudger
+nudges
+nudging
+nudism
+nudist
+nudists
+nudity
+nugatory
+nugget
+nuggets
+nullity
+numerable
+numerate
+numerated
+numerates
+numerating
+numeration
+numerations
+numerological
+numerology
+numinous
+numismatic
+numismatics
+numismatist
+nutate
+nutated
+nutates
+nutating
+nutation
+nutcrack
+nutcracker
+nutmeg
+nutrient
+nutrients
+nutritional
+nutritionally
+nutritionist
+nutritionists
+nutritious
+nutritiously
+nutritiousness
+nutritive
+nutritively
+nutshell
+nuttier
+nuttiness
+nutty
+nuzzle
+nuzzled
+nuzzles
+nuzzling
+nylon
+nylons
+nymphomania
+nymphomaniac
+nymphomaniacs
+o's
+oaf
+oafs
+oakwood
+oases
+obduracy
+obdurate
+obdurately
+obdurateness
+obeisant
+obeisantly
+obelisk
+obese
+obesity
+obfuscatory
+obit
+obiter
+obituaries
+obituary
+objectification
+objectifications
+objectified
+objectifies
+objectify
+objectifying
+objectivity
+obligational
+obnoxious
+obnoxiously
+obnoxiousness
+oboe
+oboes
+oboist
+obscenities
+obscenity
+obsequies
+obsequious
+obsequiously
+obsequiousness
+obsequy
+observably
+observational
+observationally
+obsess
+obsessed
+obsesses
+obsessive
+obsessively
+obsessiveness
+obsidian
+obsolescent
+obsolescently
+obtrude
+obtruded
+obtruder
+obtrudes
+obtruding
+obtrusive
+obtrusively
+obtrusiveness
+obtuse
+obtusely
+obtuseness
+obtuser
+obtusest
+obverse
+obversely
+ocarina
+occident
+occidental
+occidentally
+occipital
+occipitally
+occlusive
+occult
+occulter
+occultly
+oceanic
+oceanographic
+oceanography
+oceanside
+ocelot
+octagon
+octagonal
+octagonally
+octagons
+octahedron
+octane
+octennial
+octet
+octile
+octillion
+octogenarian
+octoroon
+ocular
+oculist
+odium
+odometer
+odometer's
+odometers
+odyssey
+offal
+offbeat
+offertories
+offertory
+offhand
+offhanded
+offhandedly
+offhandedness
+officeholder
+officeholders
+officemate
+officemates
+officialdom
+offload
+offloaded
+offloading
+offloads
+offramp
+offsetting
+offshoot
+offshore
+offstage
+ogive
+ogled
+ohm
+ohmic
+ohmmeter
+ohmmeter's
+ohmmeters
+ohms
+oilman
+oilmen
+oilseed
+oilseeds
+oldies
+oldster
+oldsters
+oldy
+oleander
+oleanders
+oleomargarine
+oligarchic
+oligarchy
+oligopolistic
+oligopoly
+omega
+omegas
+omelet
+omelets
+omicron
+omni
+omnibus
+omnipotence
+omnipotent
+omnipotently
+oncology
+oncoming
+onetime
+oneupmanship
+onlooker
+onlookers
+onrush
+onrushing
+onslaught
+onslaughts
+ontogeny
+ontological
+ontologically
+ontology
+onus
+onyx
+oodles
+opalescent
+opalescently
+operant
+operantly
+operants
+operatic
+operetta
+ophthalmic
+ophthalmologist
+opinionated
+opinionatedly
+opinionatedness
+opossum
+opposable
+opprobrium
+opthalmic
+opthalmologic
+opthalmology
+opticians
+optimist
+optimists
+optionality
+optometric
+optometrist
+optometrists
+optometry
+opulent
+opulently
+opus
+opuses
+orangutan
+orate
+orated
+orates
+orating
+oratorical
+oratorically
+oratorio
+oratorios
+orchestral
+orchestrally
+orchestrate
+orchestrated
+orchestrater
+orchestrates
+orchestrating
+orchestration
+orchestrations
+ordnance
+ordnances
+oregano
+organdy
+organically
+organismic
+organometallic
+orgasm
+orgasms
+orgiastic
+oriental
+orientally
+oriole
+orioles
+ornate
+ornately
+ornateness
+orneriness
+ornery
+orographic
+orography
+orphanage
+orphanages
+orphanhood
+orthodontic
+orthodontics
+orthodontist
+orthodontists
+orthodoxy
+orthographic
+orthographies
+orthography
+orthonormal
+orthophosphate
+orthophosphates
+osmium
+osmosis
+osmotic
+osprey
+ospreys
+osseous
+osseously
+ossification
+ossifications
+ossified
+ossify
+ostensible
+ostensibly
+ostentatious
+ostentatiously
+ostentatiousness
+osteology
+osteopath
+osteopathic
+osteopaths
+osteopathy
+osteoporosis
+ostracism
+otherworld
+otherworldliness
+otherworldly
+ouch
+oughtn't
+oust
+ousted
+ouster
+ousting
+outage
+outage's
+outages
+outback
+outboard
+outboards
+outclass
+outclassed
+outcrops
+outdated
+outdatedness
+outdistanced
+outdistancing
+outdo
+outdrew
+outface
+outfield
+outfielder
+outfielders
+outfitted
+outflow
+outflows
+outfought
+outfox
+outgeneraled
+outgrip
+outhouse
+outland
+outlander
+outlanders
+outlandish
+outlandishly
+outlandishness
+outlawry
+outliers
+outlying
+outmatched
+outmigration
+outmoded
+outnumber
+outnumbered
+outnumbering
+outnumbers
+outpatient
+outpatients
+outplayed
+outpour
+outpouring
+outpourings
+outreach
+outrigger
+outriggers
+outscoring
+outshone
+outsized
+outsmart
+outsmarted
+outsmarting
+outsmarts
+outspoken
+outspokenly
+outspokenness
+outspread
+outstate
+outstation
+outworn
+ouzo
+ova
+ovate
+ovates
+ovation
+ovationed
+ovationing
+ovations
+overabundance
+overactive
+overage
+overaggressive
+overarching
+overbearing
+overbearingly
+overbearingness
+overburden
+overburdened
+overburdening
+overburdeningly
+overburdens
+overcerebral
+overconfident
+overconfidently
+overconsumption
+overcooked
+overcooled
+overcorrection
+overcurious
+overdeveloped
+overdoing
+overdriving
+overeager
+overeagerly
+overeagerness
+overeat
+overeaten
+overeater
+overeating
+overeducated
+overexcited
+overexploitation
+overexploited
+overexpose
+overextend
+overextended
+overextending
+overextends
+overextension
+overfall
+overfeed
+overfill
+overfilled
+overfilling
+overfills
+overgenerous
+overgrazing
+overgrown
+overhand
+overhanded
+overheat
+overheated
+overheating
+overheats
+overindulged
+overlords
+overloud
+overpaid
+overpayment
+overplayed
+overplaying
+overpopulated
+overpopulation
+overpressure
+overprice
+overpriced
+overprotection
+overprotective
+overran
+overrated
+overreach
+overreached
+overreacher
+overreaches
+overrepresented
+oversample
+oversampled
+oversampling
+oversaturate
+overshoes
+oversize
+oversized
+oversizes
+oversoft
+oversoftness
+overspill
+overstay
+overstepping
+overstraining
+overstrike
+overstrikes
+overstriking
+oversubscribed
+oversupply
+overtaxed
+overwrap
+oviform
+ovulatory
+owlish
+owlishly
+owlishness
+owly
+oxalate
+oxalic
+oxaloacetic
+oxcart
+oxidant
+oxidate
+oxidations
+oxidative
+oxidatively
+oxygenate
+oxygenated
+oxygenates
+oxygenating
+oxygenation
+oxygenations
+oxyhydroxides
+ozone
+p's
+pH
+pacemaker
+pacesetting
+pacifism
+pacifist
+pacifistic
+paddock
+padlock
+padlocked
+padlocks
+padre
+paean
+paeans
+paganism
+pageantry
+pagoda
+pagodas
+paintbrush
+palatability
+palatable
+palatableness
+palatal
+palatally
+palefaces
+palette
+palindrome
+palindromes
+palindromic
+palisade
+palisades
+palladium
+pallet
+palmetto
+palmist
+palpable
+palpably
+palsied
+palsies
+palsy
+palsying
+paltrier
+paltriness
+paltry
+pamper
+pampered
+pamperer
+pampering
+pampers
+panama
+pancreatic
+pandemic
+panicked
+panicky
+panjandrum
+panoplied
+panoply
+panorama
+panoramas
+panoramic
+pantheism
+pantheist
+pantheon
+pantomime
+pantomimed
+pap
+papen
+paperboard
+paperhangers
+paperiness
+paperweight
+paperweights
+papery
+papillary
+papoose
+pappies
+pappy
+papyri
+papyrus
+papyruses
+parable
+parables
+parabola
+parabolic
+paraboloid
+paraboloidal
+paradigmatic
+paradoxic
+parakeet
+parakeets
+parallelepiped
+parallelepipeds
+paramagnet
+paramagnetic
+paramedical
+parametrically
+paranoiac
+paranoiacs
+paranormal
+paranormally
+paraphernalia
+paraplegic
+paraprofessional
+paraprofessionals
+parapsychology
+parasol
+parasols
+parasympathetic
+paratroop
+paratrooper
+paratroopers
+paratroops
+parboil
+parboiled
+parenthetic
+pariah
+parimutuel
+parimutuels
+parishioner
+parishioners
+parkish
+parkland
+parklike
+parkway
+parlance
+parlay
+parlayed
+parley
+parleys
+parliamentarian
+parliamentarians
+parochial
+parochialism
+parochialism's
+parochialisms
+parochially
+parodied
+parodies
+parody
+parolee
+parolees
+parquet
+parqueted
+parqueting
+parrotlike
+parsec
+parsecs
+parsimonious
+parsimoniously
+parsnip
+parsonage
+participial
+participially
+participle
+participles
+particularistic
+particularity
+particulate
+particulates
+partook
+parvenu
+passable
+passband
+passerby
+passersby
+pasta
+pasteboard
+pastel
+pastels
+pasteup
+pastiche
+pastier
+pasties
+pastiness
+pasty
+patchier
+patchiness
+patchy
+patentee
+patentees
+paternalism
+paternalistic
+paternity
+paternoster
+pathless
+pathlessness
+pathogen
+pathogenesis
+pathogenic
+pathogens
+pathologic
+patina
+patinas
+patio
+patios
+patriarchal
+patriarchies
+patriarchy
+patrimonial
+patrimony
+patristic
+patristics
+patrolled
+patrolling
+patrolman
+patrolmen
+patroness
+patted
+patting
+paunch
+paunchier
+paunchiness
+paunchy
+pauper
+pawnshop
+pawnshop's
+pawnshops
+payday
+payload
+payload's
+payloads
+paymaster
+paymasters
+peacemaking
+peacetime
+peacetimes
+peaky
+peasanthood
+pecan
+pecans
+peccadilloes
+peccary
+pectoral
+pectorals
+peculate
+peculated
+peculates
+peculating
+peculation
+pecuniary
+pedagogue
+pedagogy
+pedal
+pedals
+pedant
+pedantry
+peddle
+peddled
+peddles
+peddling
+pediatrician
+pedigree
+pedigreed
+pediment
+pedimented
+peephole
+peepy
+peerage
+peevish
+peevishly
+peevishness
+pegboard
+pegboards
+pegged
+pegging
+pejorative
+pejoratively
+pejoratives
+pelican
+pelicans
+pellagra
+pelvic
+pelvis
+pelvises
+pemmican
+penal
+penally
+penchant
+pendant
+penicillin
+penitential
+penitentially
+penknife
+penknife's
+penknives
+penman
+penmen
+pennant
+pennants
+pentagonal
+pentagonally
+pentecostal
+penultimate
+penultimately
+penurious
+penuriously
+penuriousness
+penury
+peonies
+peony
+peppergrass
+peppermint
+peppermints
+pepperoni
+peppery
+peppier
+peppiness
+pepping
+peppy
+peptidase
+peptidases
+peptide
+peptides
+percept
+percolator
+percolators
+percussion
+percussions
+percussive
+percussively
+percussiveness
+perdition
+perditions
+perfectibility
+perfectible
+perfectionism
+perfidious
+perfidiously
+perfidiousness
+perfidy
+perforate
+perforated
+perforates
+perforating
+perforation
+perforations
+perfumery
+perfunctorily
+perfunctoriness
+perfunctory
+perfusion
+perihelion
+perimeter
+periodicities
+periodicity
+periodontal
+periodontally
+peripatetic
+periphrastic
+periscope
+periscopes
+periwinkle
+periwinkles
+perjure
+perjured
+perjurer
+perjures
+perjuring
+perjury
+perk
+perked
+perkier
+perkiness
+perking
+perks
+perky
+permalloy
+permanency
+permeable
+permeableness
+pernicious
+perniciously
+perniciousness
+peroxide
+perpetuity
+perquisite
+perquisites
+persecutory
+persiflage
+persimmon
+persimmons
+persona
+personae
+perspicacious
+perspicaciously
+perspicaciousness
+perspicuity
+perspire
+perspired
+perspires
+perspiring
+pert
+pertinacious
+pertinaciously
+pertinaciousness
+pertinence
+pertly
+pertness
+pervasion
+perverse
+perversely
+perverseness
+perversion
+perversions
+perversive
+peskier
+pesky
+pessimism
+pessimist
+pessimists
+pesticide
+pesticides
+pestilent
+pestilential
+pestilentially
+pestilently
+pestle
+pestled
+pestles
+pestling
+petite
+petiteness
+petits
+petri
+petrification
+petrified
+petrify
+petrochemical
+petroglyph
+petrol
+petrology
+pettish
+pettishly
+pettishness
+petulance
+petulances
+petulant
+petulantly
+petunia
+peyote
+pfennig
+phagocyte
+phagocytes
+phalanger
+phalanx
+phalanxes
+phantasy
+pharmaceutic
+pharmaceutical
+pharmaceutically
+pharmaceuticals
+pharmaceutics
+pharmacies
+pharmacist
+pharmacists
+pharmacological
+pharmacologically
+pharmacology
+pharmacy
+pharyngeal
+pharynx
+pharynxes
+phenol
+phenolic
+phenotype
+phenyl
+phi
+philander
+philandered
+philanderer
+philanderer's
+philanderers
+philandering
+philanders
+philanthropic
+philanthropies
+philanthropist
+philanthropists
+philanthropy
+philharmonic
+philodendron
+philological
+philologically
+philologists
+philology
+phlegm
+phlox
+phobic
+phoebe
+phoenix
+phonetically
+phonic
+phonics
+phonier
+phonies
+phoniness
+phonologic
+phonological
+phonologically
+phonology
+phony
+phosphide
+phosphine
+phosphines
+phosphor
+phosphoresce
+phosphorescent
+phosphorescently
+phosphors
+phosphorus
+photochemical
+photochemically
+photoelectronic
+photoelectrons
+photoengravers
+photogenic
+photographically
+photoluminescence
+photolysis
+photolytic
+photometric
+photometry
+photomicrograph
+photomicrography
+photon
+photon's
+photons
+photorealism
+photosensitive
+phrasemaking
+phraseologies
+phraseology
+phraseology's
+phylogeny
+physiochemical
+physiognomy
+physiologic
+physiologist
+physiotherapist
+physiotherapy
+phytoplankton
+pianism
+pianissimo
+pianist
+pianistic
+pianists
+pica
+piccolo
+pickaxe
+pickerel
+pickerels
+pickier
+pickoff
+pickoffs
+picky
+picnicked
+picnicker
+picnickers
+picnicking
+picofarad
+picofarads
+picojoule
+piddle
+piddling
+pidgin
+piedmont
+piezoelectric
+piezoelectricity
+pigeonhole
+pigeonholed
+pigeonholes
+pigeonholing
+pigging
+piggish
+piggishly
+piggishness
+piggy
+pigmentation
+pigmentations
+pigpen
+pigpens
+pigroot
+pigskin
+pigsty
+pigtail
+pigtailed
+pilfer
+pilfered
+pilferer
+pilfering
+pilfers
+pilloried
+pillories
+pillory
+pillorying
+pimento
+pimp
+pimping
+pimple
+pimpled
+pimples
+pimplike
+pimply
+pimps
+pinafore
+pinafores
+pinball
+pincushion
+pinhead
+pinheaded
+pinheadedness
+pinheads
+pinhole
+pinholes
+pinkie
+pinkies
+pinkish
+pinkishness
+pinochle
+pintail
+pintails
+pinto
+pinwheel
+pion
+pip
+pipet
+pipette
+piquant
+piquantly
+piquantness
+piracy
+pirouette
+pirouetting
+pistachio
+pistole
+pistoleers
+pitchblende
+pitchfork
+pitchfork's
+pitchforks
+pitchstone
+pitman
+piton
+piton's
+pitons
+pittance
+pittance's
+pittances
+pitting
+pituitary
+pixies
+pixiness
+pixmap
+pixmap's
+pixmaps
+pixy
+pizza
+pizzicato
+placate
+placated
+placater
+placates
+placating
+placation
+placative
+placeable
+placeless
+placelessly
+placenta
+placental
+plagiarism
+plagiarist
+plainclothes
+planeload
+planetaria
+planetarium
+planetesimal
+planetoid
+planetoids
+plankton
+planoconcave
+planoconvex
+plantain
+plaque
+plaques
+plasm
+plastically
+platitude
+platitudes
+platitudinous
+platitudinously
+platonic
+platoon
+platoons
+platted
+plausibly
+playback
+playbacks
+playboy
+playboys
+playhouse
+playhouses
+playoff
+playroom
+playtime
+playwriting
+plaza
+plazas
+pleat
+pleated
+pleater
+pleats
+plenipotentiary
+plenitude
+plenum
+plethora
+pleura
+pleural
+pleuras
+pliable
+pliableness
+pliancy
+pliant
+pliantly
+pliantness
+plink
+plinked
+plinker
+plinking
+plinks
+plodded
+plodding
+ploddingly
+plop
+plopped
+plopping
+plosive
+plover
+plovers
+pluggable
+plummer
+plummet
+plummeted
+plummets
+plunk
+plunker
+plunkers
+plunking
+pluralism
+pluralist
+pluralistic
+pluralists
+plushier
+plushiness
+plushy
+plutonium
+plywood
+pneumatic
+pneumatics
+pock
+pocketful
+pocketknife
+pocketknife's
+pocketknives
+podge
+podger
+podgers
+podia
+podium
+poesies
+poesy
+pogo
+pogrom
+pogroms
+poignancy
+poignant
+poignantly
+poinsettia
+pokerface
+pokerfaced
+pol
+polarimeter
+polarimeter's
+polarimeters
+polarimetry
+polariscope
+polarogram
+polarogram's
+polarograms
+polarograph
+polarography
+polecat
+polemical
+polemically
+policymaker
+policymakers
+policymaking
+polio
+polis
+politburo
+politicking
+politico
+politicos
+polities
+polka
+polka's
+polkas
+pollock
+pollutant
+pollutants
+polonaise
+polonium
+polybutene
+polybutenes
+polychemicals
+polycrystalline
+polyelectrolytes
+polyester
+polyesters
+polyether
+polyethers
+polyethylene
+polygamous
+polygamously
+polygamy
+polygonal
+polygonally
+polygynous
+polyhedra
+polyhedral
+polyhedron
+polyisobutylene
+polyisocyanates
+polymerase
+polymeric
+polymorph
+polymorphic
+polymyositis
+polyphony
+polyphosphate
+polyphosphates
+polypropylene
+polystyrene
+polytechnic
+polytonal
+polytonally
+polyunsaturated
+pomegranate
+pompadour
+pompano
+pompons
+pomposity
+poncho
+pons
+pontiff
+pontifical
+pontificals
+pontificate
+pontificated
+pontificates
+pontificating
+pontification
+pooch
+pooched
+poodle
+pooh
+popcorn
+poplin
+popper
+poppyseed
+popularism
+porcine
+porgy
+pornographer
+pornography
+porosity
+porous
+porously
+porousness
+porpoise
+porpoises
+portage
+portaged
+portaging
+portent
+portentous
+portentously
+portentousness
+portents
+porterhouse
+portfolio
+portfolios
+portmanteau
+portmanteaus
+portraiture
+portrayal
+portrayals
+poseur
+poseurs
+posh
+poshest
+positivism
+positivist
+positivists
+positron
+posse
+posses
+postdate
+postdated
+postdates
+postdating
+postdoctoral
+posteriori
+postfix
+postfixed
+postfixes
+postfixing
+postgraduate
+posthumous
+posthumously
+posthumousness
+postlude
+postludes
+postmarital
+postmark
+postmarked
+postmarks
+postmen
+postmortem
+postoperative
+postoperatively
+postorder
+postpartum
+postponement
+postpositions
+postsecondary
+postvocalic
+postwar
+potable
+potableness
+potage
+potbellied
+potbelly
+potboil
+potboiler
+potboilers
+potency
+pothole
+potholed
+potholing
+potion
+potions
+potlatch
+potlatches
+potluck
+potpourri
+poultice
+poultices
+pow
+powderpuff
+powdery
+practicability
+pragmatism
+pragmatist
+pragmatists
+praiseworthiness
+praiseworthy
+pram
+prams
+praseodymium
+prattle
+prattled
+prattler
+prattles
+prattling
+prattlingly
+praxes
+praxis
+prayerful
+prayerfully
+prayerfulness
+preamble
+preambles
+prearranged
+precautionary
+precess
+precessed
+precesses
+precessing
+precession
+prechlorination
+precipitable
+precocity
+precode
+precoded
+precollege
+precolonial
+preconscious
+precooked
+precut
+predator
+predator's
+predators
+predatory
+predecline
+predestined
+predicator
+predigested
+predilect
+predilection
+predilections
+predispose
+predisposed
+predisposes
+predisposition
+predispositions
+predoctoral
+predominance
+preeminence
+preeminent
+preeminently
+preemployment
+preemptor
+preen
+preener
+preening
+preexistent
+preexisting
+prefab
+prefabricate
+prefabricated
+prefabrication
+prefatory
+prefect
+prefects
+prefecture
+prefectures
+preferment
+prefiguration
+preflight
+preflighted
+preflighting
+preflights
+pregnancies
+pregnancy
+preindustrial
+preinterview
+preisolated
+prejudicial
+prejudicially
+prejudicialness
+preliterate
+premarital
+premaritally
+premarket
+premeditate
+premeditation
+premeditative
+premix
+premixed
+premonition
+premonitions
+premonitory
+preordainment
+prep
+prepackaged
+prepayment
+preponderance
+preponderances
+preponderant
+preponderantly
+preponderate
+preponderately
+preponderating
+preponderation
+prepping
+preprepared
+preprocessing
+prepubescent
+prepublication
+preradiation
+presage
+presaged
+presager
+presages
+presaging
+preschool
+preschooler
+prescience
+prescience's
+prescript
+presentable
+presentableness
+presentational
+presentments
+presoaks
+pressman
+pressmen
+prestidigitate
+prestidigitation
+prestidigitator
+prestigious
+prestigiously
+prestigiousness
+presto
+prestos
+presumable
+presupposition
+presuppositions
+pretest
+pretested
+pretesting
+pretests
+pretrial
+pretzels
+prevision
+previsioned
+previsioning
+previsions
+prewar
+prickle
+prickled
+prickling
+priestess
+priestesses
+prig
+priggish
+priggishly
+priggishness
+prim
+primal
+primate
+primates
+primitivism
+primly
+primness
+primordial
+primordially
+primp
+primping
+printmake
+printmaker
+printmakers
+printmaking
+prismatic
+prissier
+prissiness
+prissy
+pristine
+pristinely
+privateer
+privateer's
+privateers
+probabilist
+probity
+procaine
+processional
+processionally
+procreate
+procreation
+procreative
+procreativity
+procrustean
+proctor
+proctor's
+proctored
+proctoring
+proctors
+prod
+prodded
+prodding
+prodigies
+prodigy
+prof
+profanity
+professorial
+professorially
+professorship
+profligate
+profligately
+profligates
+profoundity
+profundity
+profuse
+profusely
+profuseness
+profusion
+progenitor
+prognoses
+prognosis
+prognosticate
+prognostication
+prognosticative
+prognosticator
+progressivism
+prohibitory
+projectile
+projectiles
+projectionist
+projectionists
+prolate
+prolifically
+prolix
+prolixity
+prolixly
+prolongate
+prolongated
+prolongates
+prolongating
+prolongation
+promethium
+promptitude
+promulgators
+pronto
+proofreader
+proofreading
+proofreads
+propagandist
+propagandistic
+propagandists
+propane
+propellant
+propellants
+propelling
+prophetically
+propinquity
+propionate
+propitiate
+propitiation
+proportionality
+proportionate
+propped
+propping
+proprietorship
+proprietorships
+proprioception
+proprioceptive
+propylene
+prorate
+prorated
+prorating
+proration
+prosaic
+proscenium
+prosceniums
+proscribe
+proscribed
+proscriber
+proscribes
+proscribing
+proscription
+prosecutor
+prosecutors
+prosodies
+prosody
+prostate
+prosthetic
+prosthetics
+prostitute
+prostitutes
+protactinium
+protagonist
+protagonists
+protean
+protease
+proteases
+protectionist
+proteolysis
+proteolytic
+protestant
+protoplasmic
+prototypic
+protozoa
+protozoan
+protract
+protracted
+protractive
+protrusive
+protrusively
+protrusiveness
+protuberance
+protuberant
+provenance
+proverbial
+proverbially
+provident
+providential
+providentially
+providently
+provincialism
+proviso
+provocateur
+provocateurs
+provocative
+provocatively
+provocativeness
+provost
+proxies
+proxy
+prudential
+prudentially
+prurient
+pruriently
+psalmist
+pseudonym
+pseudonym's
+pseudonyms
+psi
+psych
+psychedelic
+psychiatric
+psychic
+psychic's
+psychical
+psychically
+psychics
+psycho
+psychoacoustic
+psychoacoustics
+psychoactive
+psychoanalysis
+psychoanalyst
+psychoanalytic
+psychobiology
+psychocultural
+psycholinguistic
+psycholinguistics
+psychometric
+psychometrics
+psychometry
+psychopath
+psychopathic
+psychophysic
+psychophysical
+psychophysically
+psychophysics
+psychophysiology
+psychos
+psychoses
+psychosis
+psychosomatic
+psychosomatics
+psychotherapeutic
+psychotherapeutics
+psychotherapists
+psychotherapy
+psychotic
+ptarmigan
+puberty
+pubescent
+publicists
+puck
+puckish
+puckishly
+puckishness
+puddly
+pudgier
+pudginess
+pudgy
+pueblo
+pueblos
+puerile
+puerilely
+puffball
+puffballs
+puffery
+puffin
+puffiness
+puffins
+puffy
+puissant
+puissantly
+puke
+puked
+pukes
+puking
+pullover
+pulmonary
+pulsar
+pulsar's
+pulsars
+pulsate
+pulsated
+pulsates
+pulsating
+pulsation
+pulsations
+pulverable
+puma
+puma's
+pumice
+pumiced
+pumicing
+pummel
+pummels
+punctuality
+punctuate
+punctuated
+punctuates
+punctuating
+pundit
+punditry
+pundits
+pungency
+pungent
+pungently
+punk
+punkier
+punkies
+punkiness
+punks
+punky
+punster
+punsters
+pupal
+pupate
+pupated
+pupates
+pupating
+pupation
+puppeteer
+puppeteers
+puppyish
+purgation
+purgative
+purgatory
+purism
+purist
+purists
+puritan
+puritanic
+puritanical
+puritanically
+puritans
+purloin
+purloined
+purloiner
+purloining
+purloins
+purposeless
+purposelessly
+purposelessness
+pursuant
+purvey
+purveyed
+purveying
+purveyor
+purveyors
+purveys
+pus
+pushier
+pushiness
+pushup
+pushy
+pussycat
+putative
+putatively
+putrefy
+putrid
+putridly
+putridness
+putt
+putted
+puttied
+putties
+putty
+puttying
+pyknotic
+pyramidal
+pyramidally
+pyre
+pyridine
+pyrolysis
+pyrometer
+pyrometer's
+pyrometers
+pyrometry
+pyrophosphate
+pyrotechnic
+pyrotechnics
+pyroxene
+pyroxenite
+python
+pythons
+q's
+quackery
+quad
+quadrangle
+quadrangles
+quadrangular
+quadrapole
+quadrennial
+quadrennially
+quadric
+quadriceps
+quadrilateral
+quadrilaterals
+quadrille
+quadrilles
+quadrillion
+quadrillionth
+quadripartite
+quadripartitely
+quadripartition
+quadriplegic
+quadrivium
+quadruplicate
+quadruplicated
+quadruplicates
+quadruplicating
+quadruplication
+quadruplications
+quaff
+quaffer
+quahog
+quantile
+quantiles
+quarryman
+quarrymen
+quarterback
+quarterbacks
+quartermaster
+quartermasters
+quartile
+quartiles
+quartzite
+quasar
+quasar's
+quasars
+quaternaries
+quaternary
+quatrain
+queasier
+queasiness
+queasy
+querulous
+querulously
+querulousness
+quibble
+quibbled
+quibbler
+quibbles
+quibbling
+quiche
+quiches
+quickie
+quickies
+quicklime
+quicksand
+quicksands
+quickstep
+quicksteps
+quiescent
+quiescently
+quiescentness
+quincy
+quinquennial
+quinquennially
+quint
+quintessential
+quintet
+quintets
+quintile
+quintiles
+quintillion
+quintillionth
+quip
+quipping
+quips
+quirk
+quirking
+quirks
+quirt
+quixotic
+quizzical
+quizzically
+quonset
+quorum
+r's
+rabbi
+rabbinical
+rabbinically
+rabid
+rabidly
+rabidness
+rabies
+racetrack
+racetracker
+raceway
+racier
+raciness
+racism
+racist
+racists
+rackety
+racquet
+racquets
+racy
+radian
+radians
+radicalism
+radices
+radii
+radioactive
+radioactively
+radioactivities
+radioactivity
+radioastronomy
+radiocarbon
+radiochemical
+radiochemically
+radiochemistry
+radiographic
+radiography
+radiologic
+radiological
+radiologically
+radioman
+radiomen
+radiometer
+radiometer's
+radiometers
+radiometric
+radiometry
+radionics
+radiophysics
+radiotherapy
+radium
+radon
+raffish
+raffishly
+raffishness
+raffle
+raffled
+raffles
+raffling
+ragging
+ragout
+ragweed
+ragweeds
+railbird
+railbirds
+railhead
+railheads
+raillery
+rainless
+rainstorm
+rainwater
+rajah
+rakish
+rakishly
+rakishness
+ramified
+ramifies
+ramify
+ramifying
+rammed
+ramming
+rampage
+rampaged
+rampages
+rampaging
+rampant
+rampantly
+ramrod
+ramrods
+rancho
+ranchos
+rancid
+rancidity
+rancidness
+rancorous
+rancorously
+randies
+randy
+rangeland
+rangelands
+rangier
+ranginess
+rangy
+rapacious
+rapaciously
+rapaciousness
+rapier
+rapists
+rapped
+rappel
+rapper
+rapper's
+rappers
+rapping
+rapport
+rapprochement
+rarefied
+rarefy
+ratable
+ratchet
+ratchet's
+ratcheted
+ratcheting
+ratchets
+rateable
+ratiocinate
+ratiocinated
+ratiocinates
+ratiocinating
+ratiocination
+ratiocinative
+rationalism
+rationalist
+rationalistic
+rationalists
+rattail
+rattier
+ratty
+raucous
+raucously
+raucousness
+ravish
+ravisher
+ravishes
+ravishing
+ravishingly
+rawboned
+rawhide
+rawhided
+rawhiding
+raze
+razed
+razer
+razes
+razing
+razorback
+rd
+reachability
+reactant
+reactants
+readably
+readership
+readership's
+readjust
+readjuster
+readjusting
+readjustment
+reaffirmation
+reafforest
+reagent
+realtor
+realtors
+realty
+reappearance
+reapplication
+reapportionment
+reappraise
+reappraising
+reassert
+reasserted
+reasserting
+reassurance
+recalcitrant
+recallable
+recant
+recanted
+recappable
+recency
+receptionist
+receptionists
+recertification
+recheck
+rechecking
+recherche
+recherches
+recipiency
+recitative
+recluse
+recluse's
+recluses
+reclusion
+reclusive
+recoilless
+recommence
+recommencing
+recommendable
+recommendatory
+recommittal
+recomposition
+reconciliatory
+recondite
+reconditely
+reconditeness
+recondition
+reconditioning
+reconditionings
+reconditions
+reconfigurability
+reconnaissance
+reconquer
+reconquered
+reconquering
+reconquers
+recontamination
+reconvene
+reconvening
+reconvention
+reconverting
+recopied
+recopies
+recopy
+recoup
+recouped
+recouping
+recoups
+recriminate
+recriminated
+recriminates
+recriminating
+recrimination
+recriminations
+recriminative
+recruitment
+rectification
+rectifications
+rectified
+rectifier
+rectifiers
+rectify
+rectilinear
+rectilinearly
+rectitude
+rectory
+recumbent
+recumbently
+recuperate
+recuperated
+recuperates
+recuperating
+recuperation
+recuperative
+recurred
+recusant
+recuse
+redact
+redactions
+redactor
+redbird
+redbirds
+redbud
+redcoat
+redcoats
+redding
+redecorating
+redecoration
+rededicate
+redemptive
+redeposition
+redhead
+redheaded
+redheader
+redheads
+rediscover
+rediscovering
+rediscovery
+redistricting
+redneck
+rednecked
+rednecks
+redo
+redound
+reduct
+reductionism
+reductive
+redwood
+redwoods
+reedier
+reedy
+reek
+reeked
+reeker
+reeking
+reeks
+reelection
+reemission
+reemission's
+reemissions
+reenact
+reentry
+reenumerate
+reenumeration
+reestimate
+reeve
+reexamination
+refactoring
+refashion
+refectories
+refectory
+referenda
+refinance
+refineries
+refinery
+reflectance
+reflux
+refluxed
+refluxes
+refluxing
+reforestation
+reformability
+reformatories
+reformatory
+reformism
+reformist
+reformists
+refract
+refracted
+refracting
+refraction
+refractive
+refractively
+refractiveness
+refractometer
+refractometer's
+refractometers
+refrigerate
+refrigerated
+refrigeration
+refurbish
+refurbished
+refurbisher
+refurbishing
+regale
+regalia
+regatta
+regattas
+regency
+regimentation
+regionalism
+registrable
+registrant
+registrants
+registrar
+registrars
+registries
+registry
+regressors
+reground
+regulatory
+rehabilitate
+rehabilitated
+rehabilitates
+rehabilitating
+rehabilitation
+rehabilitations
+rehabilitative
+rehearing
+reimbursable
+reimburse
+reimburses
+reimbursing
+reinstitution
+reinterpretation
+reinterview
+reinvest
+reinvestigation
+reinvigoration
+rejigger
+rejoinder
+relativist
+releasable
+relevancy
+reliant
+reliantly
+relict
+religionists
+religiosity
+relocatable
+remake
+remaking
+remand
+remanded
+remanding
+remarriage
+remarry
+remarrying
+rematch
+remediable
+remediableness
+remedial
+reminisce
+reminisced
+reminisces
+reminiscing
+remiss
+remission
+remissly
+remissness
+remit
+remits
+remitted
+remitting
+remorseful
+remorsefully
+remorsefulness
+remorseless
+remorselessly
+remorselessness
+remounting
+remunerate
+remunerated
+remunerates
+remunerating
+remuneration
+remunerations
+remunerative
+remuneratively
+remunerativeness
+renascent
+renaturation
+renature
+renaturing
+renegotiate
+renegotiation
+renewable
+renovate
+renovated
+renovates
+renovation
+renumeration
+renunciate
+renunciation
+renunciations
+renunciative
+reorient
+reorientation
+repacked
+repairable
+repairmen
+repartee
+repatriations
+repayment
+repeatability
+repelled
+repellent
+repellently
+repelling
+repentant
+repentantly
+repertory
+repetitious
+repetitiously
+repetitiousness
+replenishment
+replenishments
+reportage
+reportorial
+reportorially
+reprehensible
+reprehensibleness
+representativity
+reprimand
+reprimanded
+reprise
+reprised
+reprising
+reprobate
+reprobating
+reprobation
+reprobative
+reps
+reptilian
+republicanism
+repugnance
+repugnant
+repugnantly
+resale
+rescaling
+rescind
+rescinded
+rescinder
+researchable
+resemblant
+resettlement
+residency
+residual
+residually
+residuals
+residuary
+residuum
+resilience
+resilient
+resiliently
+resinlike
+resonate
+resonated
+resonates
+resonating
+resonator
+resonators
+respirator
+respirators
+respiratory
+respire
+respiring
+restaurateur
+restitution
+restock
+restorability
+restorative
+restoratively
+restorativeness
+restructurability
+restudy
+resupplied
+resupplies
+resupply
+resupply's
+resupplying
+resurgence
+resurgent
+resuscitate
+resuscitated
+resuscitates
+resuscitating
+resuscitation
+resuscitative
+resuspension
+retaliate
+retaliated
+retaliates
+retaliating
+retaliative
+retaliatory
+retardant
+retardation
+retch
+retching
+retell
+retelling
+retest
+rethink
+rethinker
+rethinking
+rethought
+reticulum
+retiree
+retorsion
+retouching
+retrenching
+retrenchment
+retributed
+retribution
+retroactive
+retrofit
+retrofitting
+retroflection
+retroflex
+retroflexed
+retroflexion
+retrogradations
+retrograde
+retrogradely
+retrograding
+retrogressive
+retrogressively
+retrorocket
+retrovision
+revaluation
+revelatory
+revengeful
+revengefully
+revengefulness
+reverberate
+reverberated
+reverberation
+reverberations
+reverberative
+reverent
+reverie
+reveries
+reversibility
+revet
+revetments
+revisable
+revisionary
+revisionist
+revisionists
+revivalism
+revivified
+revocable
+revolutionists
+revue
+revues
+revulsion
+revved
+revving
+rhapsodic
+rhapsody
+rhenium
+rheology
+rheostat
+rheostats
+rhetorical
+rhetorically
+rhetoricalness
+rhetorician
+rhetoricians
+rheum
+rheumatic
+rheumatics
+rhinestone
+rhinestones
+rhino
+rhinos
+rhinotracheitis
+rho
+rhodium
+rhododendron
+rhododendrons
+rhodolite
+rhodonite
+rhombic
+rhombus
+rhombuses
+ribald
+riboflavin
+ribonucleic
+ribosomal
+ribosome
+ribosomes
+rickets
+rickety
+ricochet
+ricocheted
+ricocheting
+ricochets
+ridable
+riddance
+ridding
+ridgepole
+riflemen
+rigamarole
+rigger
+riggers
+rightist
+rigmarole
+rigmaroles
+rimless
+rimmed
+rimming
+ringlet
+ringlets
+ringside
+ringsiders
+rink
+rinker
+riparian
+risible
+risibles
+riskier
+riskiness
+risky
+riverbank
+riverbanks
+riverboat
+riverfront
+riverine
+roach
+roaches
+roadbed
+roadbeds
+roadblock
+roadblocks
+roadhouse
+roadhouses
+robotism
+rockabye
+rockbound
+rodder
+rodding
+rodent
+rodents
+rodeo
+rodeos
+roebuck
+roebucks
+roentgen
+roguish
+roguishly
+roguishness
+roil
+roiling
+rollback
+rollicking
+rollickingly
+romanticism
+rondo
+rondos
+rood
+rooftop
+rooftops
+rookie
+rookies
+roomful
+roomier
+roominess
+roommate
+roommate's
+roommates
+roomy
+rootless
+rootlessness
+rosaries
+rosary
+roseate
+roseately
+rosebush
+rosemary
+rosette
+rosettes
+roster
+rostrum
+rotogravure
+rotogravures
+rotor
+rotors
+rototill
+rotting
+rotund
+rotunda
+rotundity
+rotundly
+rotundness
+roughish
+roughneck
+roughshod
+roulette
+rouletted
+roulettes
+rouletting
+roundhead
+roundheaded
+roundheadedness
+roundhouse
+roundtable
+roundworm
+roustabout
+rowboat
+rowboats
+rowdier
+rowdies
+rowdiness
+rowdy
+rowel
+rubbery
+rubdown
+rube
+rubella
+rubes
+rubicund
+rubidium
+rubric
+ruckus
+rudderless
+rueful
+ruefulness
+ruminant
+ruminantly
+ruminants
+rummage
+rummaged
+rummager
+rummaging
+rummier
+rummies
+rummy
+rumpus
+runabout
+runabouts
+rundown
+rune
+runes
+runic
+runoff
+runoffs
+runt
+runtiness
+runts
+runty
+runway
+runways
+rupee
+rupees
+rurality
+ruse
+rusk
+rustproof
+rutabaga
+rutabagas
+ruthenium
+rutted
+ruttier
+rutting
+rutty
+s's
+sabbath
+sabbatical
+sabras
+sacral
+sacrament
+sacraments
+sacrilege
+sacrilegious
+sacrilegiously
+sacrosanct
+saddlebag
+saddlebags
+safari
+safekeeping
+saffron
+saga
+sagebrush
+sagged
+sagging
+sailboat
+sailboater
+sailboaters
+sailboating
+sailboats
+sailfish
+sainthood
+salaam
+salacious
+salaciously
+salaciousness
+salamander
+salami
+salamis
+salesgirl
+saleslady
+salesmanship
+saleswomen
+salience
+saliency
+salinger
+salivary
+salivate
+salivated
+salivates
+salivating
+salivation
+saloonkeeper
+salsa
+salsa's
+salsas
+salsify
+saltwater
+salubrious
+salubriously
+salubriousness
+salvageable
+salvo
+salvos
+samovar
+sanatoria
+sanatorium
+sanctimonious
+sanctimoniously
+sanctimoniousness
+sandalwood
+sandbag
+sandbars
+sandblast
+sandblaster
+sandhill
+sandman
+sandpile
+sandpiper
+sanguinary
+sanguineous
+sanitate
+sanitations
+sapped
+sappier
+sappiness
+sapping
+sappy
+sapsucker
+sarcastically
+sarcoma
+sardine
+sardines
+sardonic
+sari
+sartorius
+sashay
+sashayed
+sassafras
+sassing
+satanic
+satiable
+satiate
+satiated
+satiates
+satiating
+satiation
+satiric
+satirical
+satirically
+saturnalia
+saturnine
+saturninely
+saucily
+sauerkraut
+sauna
+sauna's
+saunas
+saute
+sauterne
+sauternes
+savagery
+savoy
+savvied
+savvy
+savvying
+sawdust
+sawyer
+sax
+saxophone
+saxophone's
+saxophones
+saxophonist
+scab
+scabbed
+scabrous
+scabrously
+scabrousness
+scabs
+scalability
+scalpel
+scamp
+scandium
+scapegoat
+scapegoating
+scapegoats
+scapula
+scapular
+scapulars
+scarecrow
+scarface
+scarification
+scarifier
+scarify
+scarred
+scarves
+scat
+scathing
+scathingly
+scatterbrain
+scatterbrained
+scattergun
+scatting
+scavenge
+scavenged
+scavenges
+scavenging
+sceptic
+sceptical
+scepticism
+schism
+schist
+schizoid
+schizomycetes
+schizophrenic
+schmuck
+schnapps
+schoolbook
+schoolbooks
+schoolgirl
+schoolgirlish
+schoolgirls
+schoolmarm
+schoolmate
+schoolmates
+schoolteacher
+schoolwork
+sciatica
+scimitar
+scimitars
+scintillate
+scintillated
+scintillates
+scintillating
+scintillation
+scion
+scions
+sclerosis
+sclerotic
+scoot
+scooted
+scooter
+scooting
+scoots
+scops
+scoreboard
+scoreboards
+scorecard
+scoreless
+scotch
+scrabble
+scrabbled
+scrabbler
+scrabbles
+scrabbling
+scraggly
+scram
+scramming
+scrapbook
+scrapbooks
+scrapping
+scratchier
+scratchiness
+scratchy
+scrawnier
+scrawniness
+scrawny
+screechy
+screed
+screenplay
+screenwriter
+screenwriter's
+screenwriters
+screwball
+screwdriver
+screwdrivers
+screwup
+scrim
+scrimmage
+scrimmaged
+scrimmager
+scrimmages
+scrimmaging
+scrimp
+scrimped
+scrimping
+scrimps
+scriptural
+scripturally
+scriven
+scrivener
+scrollbar
+scrollbar's
+scrollbars
+scrounge
+scrounged
+scrounger
+scroungers
+scrounges
+scrounging
+scrubbed
+scrubber
+scrubbing
+scrumptious
+scrumptiously
+scrupulosity
+scrutable
+scuba
+scuff
+scuffed
+scuffing
+scuffs
+sculptural
+sculpturally
+scurrilous
+scurrilously
+scurrilousness
+scurviness
+scurvy
+seafare
+seafarer
+seafarers
+seafaring
+seafood
+seagull
+seagulls
+seahorse
+sealant
+sealants
+seamanship
+seamanships
+seamier
+seaminess
+seamless
+seamlessly
+seamlessness
+seamstress
+seamstresses
+seamy
+seance
+seaquake
+searchlight
+searchlights
+seaway
+secant
+secants
+secession
+secessionist
+seclude
+secludes
+secluding
+secretariat
+sectarian
+secularism
+secularist
+secularists
+secularity
+sedan
+sedans
+sedate
+sedated
+sedately
+sedateness
+sedates
+sedating
+sedation
+sedative
+sedentary
+sedimentary
+sedimentation
+sedition
+seditious
+seditiously
+seditiousness
+seduction
+seductions
+sedulously
+seedbed
+seedbeds
+seedier
+seediness
+seedless
+seedy
+seepage
+seersucker
+seesaw
+seesawed
+seesawing
+seesaws
+segmental
+segmentally
+segregant
+segregationist
+seismograph
+seismographer
+seismographs
+seismography
+seismological
+seismology
+selectable
+selectional
+selenate
+selenite
+selenium
+selfless
+selflessly
+selflessness
+sellout
+seltzer
+semen
+semi
+semiannual
+semiannually
+semiarid
+semiautomatic
+semicircular
+semidefinite
+semidrying
+semilogarithmic
+seminarian
+seminarians
+semiprofessional
+semiprofessionally
+semiprofessionals
+semipublic
+semiquantitative
+semiquantitatively
+semisecret
+semistructured
+semitic
+semitics
+semitrance
+semitropical
+senatorial
+senile
+senilely
+senor
+senorita
+sensate
+sensately
+sensationalism
+sensual
+sensuality
+sensually
+sensuous
+sensuously
+sensuousness
+sentient
+sentiently
+sentimentalists
+sentimentality
+separability
+sepia
+sept
+septate
+septation
+septennial
+septennially
+septic
+septillion
+septuagenarian
+septum
+sepulchral
+sepulchrally
+sequestration
+sequin
+sequined
+sequins
+sequoia
+serape
+seraph
+seraphim
+serenade
+serenaded
+serenader
+serenades
+serfdom
+serge
+serging
+serological
+serologically
+serology
+serviceability
+serviceman
+servicemen
+serviette
+serviettes
+servitor
+servitors
+servo
+servomechanism
+servomechanisms
+servos
+sesame
+setback
+setbacks
+setscrew
+setscrews
+sevenfold
+severalfold
+severalty
+sewage
+sewerage
+sewn
+sexier
+sexiness
+sextet
+sextillion
+sexton
+sextuple
+sextupled
+sextuplet
+sextupling
+sexy
+shabbily
+shag
+shagging
+shags
+shah
+shakeable
+shakedown
+shakily
+shalom
+shamble
+shambled
+shambling
+shamefacedly
+shampoo
+shampooer
+shampoos
+shamrock
+shank
+shanked
+shards
+sharecrop
+sharecropping
+sharpshoot
+sharpshooter
+sharpshooters
+sharpshooting
+shatterproof
+shaw
+sheathe
+sheave
+sheaving
+shedding
+sheepskin
+sheik
+shenanigan
+shenanigans
+sherbet
+sherlock
+sherries
+sherry
+shibboleth
+shibboleths
+shiftless
+shiftlessly
+shiftlessness
+shill
+shills
+shim
+shimmied
+shimmies
+shimming
+shimmy
+shimmying
+shims
+shinbone
+shindig
+shindig's
+shindigs
+shipbuild
+shipbuilder
+shipman
+shipmate
+shipmates
+shipmen
+shipshape
+shipyard
+shipyards
+shire
+shires
+shirtmake
+shirtmaker
+shirttail
+shivery
+shoddier
+shoddiness
+shoddy
+shoehorn
+shoelace
+shoelaces
+shoemake
+shoemakers
+shoestring
+shoestrings
+shoo
+shoofly
+shooing
+shootout
+shootout's
+shootouts
+shopkeep
+shopworn
+shoreline
+shorelines
+shortfall
+shortfalls
+shortish
+shortsighted
+shortsightedly
+shortsightedness
+shortstop
+showboat
+showcase
+showcase's
+showcased
+showcases
+showcasing
+showdown
+showier
+showiness
+showman
+showmanship
+showmen
+showpiece
+showplace
+showroom
+showy
+shrapnel
+shredded
+shredding
+shrewish
+shrewishly
+shrewishness
+shrift
+shrinkage
+shriver
+shrove
+shrugged
+shrugging
+shuck
+shucker
+shucks
+shuddery
+shuffleboard
+shunned
+shunning
+shunt
+shunted
+shunter
+shunting
+shunts
+shutoff
+shutout
+shuttlecock
+shuttlecocks
+sibilant
+sibilantly
+sic
+sickish
+sickishly
+sickishness
+sickroom
+sidearm
+sidearms
+sideband
+sidebands
+sidecar
+sidecars
+sideline
+sideliner
+sidelines
+sidelong
+sideman
+sidemen
+sidereal
+sidesaddle
+sideshow
+sideshows
+sidestep
+sidestepping
+sidesteps
+sidewall
+sideway
+sidewinder
+sidle
+sidled
+sidles
+sidling
+sienna
+siesta
+sightsee
+sightseeing
+sightseer
+sightseers
+sigma
+sigmas
+signboard
+signpost
+signposted
+signposting
+signposts
+silage
+silica
+silicate
+silicates
+silicide
+silkworm
+silkworms
+silo
+silos
+siltation
+silty
+silversmith
+silversmiths
+silverware
+simile
+simpleminded
+simplemindedly
+simplemindedness
+simpleton
+simulcast
+sinewy
+singe
+singlehanded
+singlehandedly
+singlet
+singsonged
+sinistral
+sinistrally
+sinless
+sinlessly
+sinlessness
+sinter
+sintered
+sinuous
+sinuousities
+sinuously
+sinuousness
+sinus
+sinuses
+sinusoid
+sipped
+sippers
+sipping
+sis
+sisal
+situ
+situs
+sixfold
+sixgun
+sizeable
+sizzle
+sizzled
+sizzler
+sizzling
+skat
+skeet
+skeeter
+skepticism
+sketchbook
+sketchpad
+skid
+skidded
+skidding
+skids
+skiff
+skiffs
+skillet
+skimpier
+skimpiness
+skimpy
+skindive
+skindiving
+skinless
+skinnier
+skinniness
+skinny
+skit
+skits
+skittle
+skullcap
+skullduggery
+skyhook
+skyjack
+skyjacked
+skyjacker
+skyjackers
+skyjacking
+skyline
+skyrocket
+skyscrape
+skyward
+skywave
+skyway
+slag
+slake
+slaked
+slaking
+slalom
+slaloms
+slanderous
+slanderously
+slanderousness
+slapstick
+slatted
+slatting
+slaughterhouse
+slaughterhouses
+slavish
+slavishly
+slavishness
+slaw
+sleazier
+sleaziness
+sleazy
+sledding
+sledgehammer
+sleepwalk
+sleepwalker
+sleety
+sleight
+sleuthing
+slimmer
+slimmers
+slingshot
+slink
+slinked
+slinking
+slinks
+slipstream
+slither
+slithered
+slithering
+slithers
+slitter
+slitters
+slitting
+sliver
+slivered
+slivering
+slivers
+slivery
+slob
+sloe
+slog
+sloganeer
+sloganeering
+slogging
+sloop
+sloops
+sloppily
+slosh
+sloshed
+slothful
+slothfully
+slothfulness
+slough
+sloughed
+sloughing
+sloven
+slovenliness
+slovenly
+slowdown
+sludge
+sludges
+slugged
+slugger
+sluggers
+slugging
+sluice
+sluiced
+sluices
+sluicing
+slumming
+slunk
+slurp
+slurped
+slurping
+slurps
+slurried
+slurries
+slurring
+slurry
+slurrying
+slush
+slyness
+smallish
+smalltime
+smattering
+smatterings
+smiley
+smiley's
+smilies
+smirk
+smirked
+smithereens
+smokehouse
+smokescreen
+smokestack
+smooch
+smooching
+smudge
+smudged
+smudginess
+smudging
+smudgy
+smut
+smuts
+smuttier
+smuttiness
+smutty
+snack
+snacks
+snafu
+snag
+snagged
+snagging
+snags
+snakebird
+snakelike
+snakeroot
+snapback
+snapdragon
+snapdragons
+snappish
+snappishly
+snappishness
+snazzier
+snazzy
+snicker
+snickered
+snickerer
+snickering
+snide
+snidely
+snideness
+snider
+snidest
+sniffle
+sniffled
+sniffler
+sniffles
+sniffling
+snifter
+snip
+snipe
+sniped
+sniper
+sniper's
+snipers
+snipes
+sniping
+snipped
+snipper
+snipper's
+snippers
+snippet
+snippier
+snipping
+snippy
+snips
+snivel
+snob
+snobbery
+snobbish
+snobbishly
+snobbishness
+snobs
+snook
+snooker
+snookers
+snooks
+snoopy
+snorkel
+snorkeled
+snorkeler
+snorkeling
+snotty
+snowball
+snowballed
+snowballing
+snowballs
+snowbank
+snowbank's
+snowbanks
+snowblower
+snowblowers
+snowfall
+snowflake
+snowflakes
+snowmobile
+snowmobiler
+snowmobiling
+snowstorm
+snub
+snubbed
+snubbing
+snubness
+snubs
+snuffboxes
+snuffle
+snuffled
+snuffler
+snuffling
+snugged
+snugging
+snuggly
+soapier
+soapiness
+soapstone
+soapstones
+soapsud
+soapsuds
+soapy
+sobbed
+sobbing
+sobbingly
+sobriety
+sobriquet
+socialistic
+sociality
+socio
+sociocultural
+socioculturally
+sociodemographic
+socioeconomic
+socioeconomically
+socioeconomics
+sociologist
+sociologists
+sociometric
+sociometry
+sodden
+soddened
+soddening
+soddenly
+soddenness
+sodding
+softball
+softwood
+soggier
+sogginess
+soggy
+soiree
+soirees
+soldiery
+solecism
+solenoid
+solenoids
+solicitation
+solicitous
+solicitously
+solicitousness
+solicitude
+solidarity
+soliloquy
+solipsism
+soloist
+soloists
+solstice
+solvating
+solvency
+soma
+somatic
+somebody'll
+someone'll
+somersault
+somersaulting
+somersaults
+sommelier
+sommeliers
+somnolence
+somnolent
+somnolently
+sonata
+sonatas
+songbag
+songbook
+songful
+songfully
+songfulness
+sonic
+sonny
+sonofabitch
+sonorities
+sonority
+sonorous
+sonorously
+sonorousness
+sonuvabitch
+soothsay
+soothsayer
+soothsayers
+soothsaying
+sop
+sophism
+sophist
+sophister
+sophisticate
+sophisticates
+sophistry
+sophomoric
+soporific
+soporific's
+soporifics
+sopping
+soprano
+sopranos
+sops
+sorghum
+sororities
+sorority
+sorrel
+sortie
+soubriquet
+souffle
+soulful
+soulfully
+soulfulness
+soundproof
+soundproofed
+soundproofing
+soundproofs
+sourdough
+southbound
+southeast
+southeaster
+southeasterly
+southeastern
+southernisms
+southernmost
+southland
+southpaw
+southpaws
+southward
+southwards
+southwest
+southwester
+southwesterly
+southwestern
+souvenir
+souvenirs
+sovereignty
+sow
+sowbelly
+sowens
+sower
+sowered
+sowing
+sown
+sox
+soy
+soya
+soybean
+soybeans
+spacecraft
+spacesuit
+spacesuits
+spacious
+spaciously
+spaciousness
+spandrels
+spangle
+spangled
+spangles
+spangling
+spaniel
+spar
+sparkier
+sparkle
+sparkled
+sparkler
+sparkles
+sparkling
+sparky
+sparling
+sparlings
+sparring
+spars
+spasm
+spasms
+spastic
+spatiality
+spatterdock
+spatula
+spavined
+spay
+spayed
+spaying
+speakership
+spearhead
+spearmint
+spec
+specie
+specifiability
+specious
+speciously
+speciousness
+specs
+spectral
+spectrally
+spectralness
+spectrograph
+spectrographically
+spectrography
+spectrometer
+spectrometer's
+spectrometers
+spectrometric
+spectrometry
+spectrophotometer
+spectrophotometer's
+spectrophotometers
+spectrophotometric
+spectrophotometry
+spectroscope
+spectroscopic
+spectroscopy
+specular
+specularity
+specularly
+speedboat
+speedboater
+speedboating
+speedometer
+speedometer's
+speedometers
+speer
+speleological
+speleologist
+speleology
+spellbound
+sperm
+spermatophyte
+sperms
+spew
+spewer
+spewing
+spewings
+spheric
+spherics
+spheroid
+spheroidal
+spheroidally
+spherule
+spherules
+sphinx
+sphinxes
+spic
+spicebush
+spiderwort
+spidery
+spigot
+spigots
+spikier
+spiky
+spillover
+spillover's
+spillovers
+spilt
+spineless
+spinelessly
+spinelessness
+spinier
+spininess
+spinnability
+spinnaker
+spinster
+spiny
+spirituality
+spitfire
+spittle
+splashier
+splashiness
+splashy
+splat
+splattered
+splay
+splayed
+splenetic
+splint
+splinted
+splintery
+splinting
+splints
+splotch
+splotched
+splotches
+splotchy
+splurge
+splurges
+splurging
+splutter
+splutterer
+spoilables
+spoilage
+spokespersons
+spongier
+sponginess
+spongy
+spontaneity
+spoof
+spoonerism
+spoonful
+spoonfuls
+sporadic
+sporadically
+sporadicly
+sportier
+sportiest
+sportiness
+sportsmanship
+sportsmen
+sportswear
+sportswriter
+sporty
+spottier
+spottiness
+spotty
+spousal
+sprain
+sprained
+sprains
+springboard
+sprocket
+sprocketed
+sprocketing
+sprockets
+sprue
+spud
+spume
+spuming
+spumoni
+spunk
+spurge
+spurred
+spurring
+sputnik
+sputniks
+spyglass
+sqrt
+squalid
+squalidly
+squalidness
+squalor
+squamous
+squamously
+squander
+squandered
+squanderer
+squandering
+squanders
+squashier
+squashiness
+squashy
+squatted
+squatter
+squatters
+squatting
+squaw
+squeaky
+squeamish
+squeamishly
+squeamishness
+squeegee
+squeegeed
+squeegees
+squelch
+squelched
+squelcher
+squelches
+squelching
+squirehood
+squirmy
+squirt
+squirted
+squirter
+squirting
+squirts
+squish
+squished
+squishes
+squishier
+squishiest
+squishiness
+squishing
+squishy
+st
+stableman
+stablemen
+staccato
+staccatos
+stackable
+stadium
+stadium's
+stadiums
+stagier
+staginess
+stagnate
+stagnated
+stagnates
+stagnating
+stagnation
+stagy
+stairwell
+stairwells
+stalactite
+stalactite's
+stalactites
+stalag
+stalemate
+stallion
+staminate
+stanchion
+stanchioned
+stanchioning
+stanchions
+standoff
+stank
+stannic
+stannous
+staphylococcus
+starchier
+starchiness
+starchy
+stardom
+stargaze
+stargazer
+stargazes
+stargazing
+starling
+starlings
+starship
+stash
+stashed
+stashes
+stashing
+stasis
+statehood
+stateless
+statelessness
+stateroom
+statesmanlike
+statesmanship
+statesmen
+statewide
+stationarity
+stationeries
+stationery
+stationmaster
+statuary
+statuette
+steamier
+steamily
+steaminess
+steamy
+steelier
+steelies
+steeliness
+steelmaker
+steely
+steeplebush
+steeves
+stein
+steiner
+steiners
+stenography
+stenotype
+stepbrother
+stepchild
+stepchildren
+stepdaughter
+stepfather
+stepladders
+steppe
+steppes
+stepsister
+stepson
+stereography
+stereophonic
+stereoscopy
+stereotypic
+sterility
+sternal
+sternum
+steroid
+steroids
+stethoscope
+stevedore
+stevedores
+stewardess
+stewardesses
+stewardship
+stickle
+stickleback
+stickled
+stickler
+stickling
+stickpin
+stigmata
+stiletto
+stillbirth
+stillbirths
+stillborn
+stilt
+stilted
+stiltedly
+stiltedness
+stilts
+stimulatory
+stingier
+stinginess
+stingy
+stinkpot
+stinky
+stochasticity
+stockbroker
+stockier
+stockiness
+stockpile
+stockpiler
+stockpiling
+stockroom
+stocky
+stodgier
+stodginess
+stodgy
+stoic
+stoichiometric
+stoichiometry
+stoicism
+stoics
+stoke
+stoked
+stoker
+stokes
+stoking
+stolid
+stolidly
+stomachs
+stomp
+stomped
+stomping
+stomps
+stonecutter
+stonecutters
+stonemason
+stonemasons
+stonewall
+stoneware
+stonewort
+stonily
+stooge
+stooges
+stooging
+stopover
+stopovers
+stopwatch
+stopwatches
+storekeep
+storekeeper
+storekeepers
+storeroom
+stormbound
+storyboard
+storyboards
+storyteller
+storytellers
+stowage
+stowages
+straddle
+straddled
+straddler
+straddlers
+straddles
+straddling
+strafe
+strafer
+strafes
+strafing
+straightaway
+strangulate
+strangulated
+strapped
+strapping
+strata
+strategically
+strategist
+strategists
+stratigraphic
+stratigraphy
+stratosphere
+stratospheric
+strawflower
+strawflowers
+streptococcus
+streptomycin
+stressful
+stressfully
+stretchable
+striate
+striated
+striates
+striating
+striation
+stricture
+strictures
+stridency
+strident
+stridently
+strikebreak
+strikebreaker
+strikebreakers
+strikebreaking
+striptease
+stripteaser
+striven
+strongroom
+strongrooms
+strontium
+strop
+strophe
+strophes
+stropped
+stropping
+strops
+structuralist
+structuralists
+strum
+strumming
+strychnine
+stubby
+stucco
+studded
+stultification
+stultify
+stultifying
+stumpage
+stumpy
+stunk
+stunned
+sturgeon
+stutter
+stuttered
+stutterer
+stuttering
+stutters
+styli
+stylist
+stylites
+stylus
+styluses
+stymie
+stymied
+stymies
+styrene
+styrenes
+suable
+suave
+suavely
+suaveness
+suavity
+subaltern
+subareas
+subassembly
+subbing
+subcaste
+subchain
+subclassifications
+subcommand
+subcommands
+subconcept
+subconstituent
+subcontinent
+subcontract
+subcontracting
+subdirectories
+subdirectory
+subdistrict
+subindex
+subjectivist
+subjectivists
+subjugate
+subjugated
+subjugates
+subjugating
+subjugation
+sublease
+sublimate
+sublimated
+sublimates
+sublimating
+subliminal
+subliminally
+subliterary
+sublunary
+submachine
+submersible
+submissive
+submissively
+submissiveness
+submittal
+subnational
+subnet
+subnets
+subnormal
+subnormally
+suboptimal
+subordinator
+subpage
+subparagraph
+subpart
+subparts
+subpoena
+subpoenaed
+subpoenas
+subpopulation
+subpopulations
+subquestion
+subquestion's
+subquestions
+subregion
+subregional
+subregionally
+subregions
+subrogation
+subsample
+subsamples
+subsentence
+subservience
+subservient
+subserviently
+subsistent
+subsocietal
+subsoil
+subsoiler
+subspecies
+substitutionary
+substratum
+subsurface
+subtable
+subtables
+subtended
+subtends
+subterfuge
+subterfuges
+subtest
+subtotals
+subtype
+subtypes
+suburbanite
+suburbanites
+suburbia
+subversive
+subversively
+subversiveness
+subversives
+successorship
+succubus
+suffragette
+suffragettes
+suffuse
+suffused
+suffuses
+suffusing
+suffusion
+suffusive
+suggestibility
+sulfaquinoxaline
+sulfate
+sulfated
+sulfating
+sulfide
+sulfite
+sulfonamide
+sulfonamides
+sulfur
+sulfured
+sulfuric
+sulfuring
+sulfurous
+sulfurously
+sulfurousness
+sulkily
+sullied
+sullies
+sully
+sullying
+sultana
+sumac
+summarily
+summertime
+summitry
+sunbaked
+sunbonnet
+sunburnt
+sunder
+sundered
+sundering
+sunders
+sundial
+sundials
+sunfish
+sunflower
+sunlit
+sunshade
+sunshades
+sunshiny
+sunspot
+suntan
+suntanned
+supercilious
+superciliously
+superciliousness
+superconcept
+supercritical
+superficiality
+superhighways
+superlunary
+supermachine
+supernatant
+supernatural
+supernaturalism
+supernaturally
+supernaturalness
+supernormal
+supernormally
+supernova
+supernova's
+supernovas
+superposable
+superposition
+superpositions
+superpredicate
+supersensitive
+supersensitiveness
+supersonic
+supersonics
+superstructural
+superstructure
+superstructures
+supervene
+supervened
+supine
+supinely
+supineness
+supping
+supplementation
+supplicate
+supplicating
+supposable
+suppressible
+suppressor
+suppressors
+supra
+supranational
+supranationalism
+suprasegmental
+supremacist
+surcease
+surceased
+surceasing
+surcharge
+surcharged
+surcharges
+surcharging
+surfactant
+surfactants
+surfeit
+surfeited
+surfeiter
+surfeits
+surreal
+surrealism
+surrealist
+surrealists
+surreptitious
+surreptitiously
+surreptitiousness
+surrey
+surreys
+surtax
+surveillance
+surveillances
+surveillant
+survivability
+survivalist
+survivalists
+survivorship
+susceptibility
+sushi
+suspensor
+sustainable
+sustainment
+sustenance
+svelte
+sveltely
+svelteness
+swab
+swabbed
+swabbies
+swabbing
+swabby
+swabs
+swaddle
+swaddled
+swaddling
+swag
+swaging
+swami
+swampland
+swampland's
+swamplands
+swank
+swanker
+swankier
+swankiness
+swanky
+swanlike
+swappable
+swart
+swartness
+swash
+swasher
+swastika
+swat
+swatch
+swatches
+swath
+swath's
+swathe
+swathed
+swather
+swathes
+swathing
+swathings
+swats
+swatter
+swatting
+sweatband
+sweatier
+sweatiness
+sweatshirt
+sweatshops
+sweaty
+sweepstake
+sweepstakes
+sweetish
+sweetishly
+sweltering
+swelteringly
+swig
+swigging
+swindle
+swindled
+swindler
+swindles
+swindling
+swingable
+swingier
+swingy
+swinish
+swinishly
+swinishness
+swirlier
+swirly
+swishier
+swishy
+swiss
+switchblade
+switchgear
+switchman
+switchmen
+switchmen's
+swivel
+swivels
+swizzle
+swizzled
+swizzler
+swizzling
+swordfish
+swordplay
+swordplayer
+swordtail
+sycophant
+sycophantic
+sycophantically
+sycophantly
+sycophants
+syllabic
+syllabicity
+syllabification
+syllabify
+syllogistic
+sylvan
+symbiont
+symbolical
+symbolists
+sympathetically
+symphonic
+symposia
+symptomatology
+synagogue
+synagogues
+synaptic
+synchronism
+synchrotron
+syncopate
+syncopated
+syncopation
+syncopative
+syndic
+syndics
+synergy
+synod
+synods
+synonymy
+synoptic
+syphilitic
+syrupy
+sys
+systemic
+tabbies
+tabbing
+tabby
+tableland
+tabletop
+tabletop's
+tabletops
+tabloids
+tabula
+tackiness
+taco
+tacos
+tactful
+tactfully
+tactfulness
+tactic
+tactical
+tactically
+tactlessness
+tactual
+tactually
+tadpoles
+taffeta
+taffies
+taffy
+tailback
+tailgate
+tailgated
+tailgater
+tailgating
+takeoff
+takeoffs
+takeover
+takeovers
+talismanic
+talky
+tallied
+tallies
+tally
+tallyho
+tallying
+talon
+taloned
+talons
+tamable
+tamale
+tamarack
+tamarind
+tambourine
+tamp
+tamping
+tampon
+tangency
+tangerine
+tango
+tangos
+tankard
+tanned
+tannery
+tannin
+tanning
+tantalum
+tao
+taoism
+taoist
+taoists
+taos
+tapeworm
+tapir
+tapirs
+tappet
+tappets
+tarantula
+tarantulas
+tardily
+tarnish
+tarnished
+tarnishes
+tarnishing
+tarp
+tarpapered
+tarpaulin
+tarpaulins
+tarpon
+tarpons
+tarred
+tarring
+tartar
+taskmaster
+tastier
+tastiness
+tasty
+tater
+tattier
+tatting
+tattle
+tattled
+tattler
+tattles
+tattletale
+tattling
+tatty
+tawdrier
+tawdriness
+tawdry
+taxably
+taxiway
+taxiway's
+taxiways
+taxpaying
+teacart
+teacup
+teahouse
+teahouses
+teakettle
+teakwood
+teal
+teals
+teammate
+teammates
+teamster
+teamsters
+teamwork
+teapot
+teapots
+teardrop
+teardrops
+teasel
+teat
+teated
+teats
+tech
+teched
+technetium
+tectonic
+tectonics
+tee
+teeing
+teensier
+teensy
+tees
+teetering
+tektite
+tektites
+telecommunicate
+telegraphy
+telekinesis
+telemeter
+telemeter's
+telemeters
+telemetric
+telemetry
+telepathic
+telepathically
+telepathy
+telephotography
+teleprinter
+teleprocessing
+teleprompter
+telescopic
+telltale
+telltale's
+telltales
+tellurium
+telnet
+telnets
+telomeric
+temerity
+temp
+tempo
+tempos
+temptress
+tenable
+tenableness
+tenacity
+tenancies
+tenancy
+tenderfoot
+tenderloin
+tendon
+tendons
+tenebrous
+tenet
+tenets
+tenfold
+tenon
+tensile
+tensional
+tensionless
+tensorial
+tenspot
+tenths
+tenuous
+tenuously
+tenuousness
+tepees
+tepid
+tepidly
+tepidness
+teratogenic
+teratologies
+teratology
+terbium
+tercel
+terminable
+terminableness
+termini
+terminological
+terminologically
+termite
+termites
+tern
+terpsichorean
+terramycin
+terrapin
+terrapins
+terries
+terry
+terse
+tersely
+terseness
+terser
+tersest
+tertian
+tessellate
+tessellated
+tessellates
+tessellation
+testamentary
+testate
+testator
+testator's
+testators
+testes
+testicular
+testier
+testily
+testimonial
+testimonials
+testiness
+testy
+tetanus
+tether
+tethered
+tethering
+tethers
+tetrachloride
+tetracycline
+tetrafluoride
+tetragonal
+tetragonally
+tetrahalides
+tetrahedra
+tetrahedral
+tetrahedrally
+tetrahedron
+tetrameron
+tetrasodium
+tetravalent
+textural
+texturally
+th
+thallium
+thallophyte
+that'd
+that'll
+theatric
+theatrics
+theism
+theistic
+theocracy
+theoretician
+there'd
+there'll
+therefor
+therefrom
+theretofore
+thereunder
+thermal
+thermally
+thermals
+thermionic
+thermionics
+thermistor
+thermistors
+thermo
+thermocouple
+thermocouples
+thermodynamically
+thermoelastic
+thermoelectric
+thermoformed
+thermoforming
+thermogravimetric
+thermometric
+thermometry
+thermonuclear
+thermopile
+thermoplastic
+thermopower
+thermos
+thermosetting
+thermostable
+thermostatic
+thermostatics
+thesaurus
+thespian
+thespians
+theta
+thetas
+thiamin
+thickish
+thine
+thinned
+thinning
+thinnish
+thiocyanate
+thiouracil
+this'll
+thistledown
+thither
+thoriate
+thoriated
+thorium
+thoroughbred
+thoroughgoing
+thou
+thous
+thousandths
+thrall
+threadbare
+threadbareness
+threefold
+threesome
+thresh
+threshed
+thresher
+threshing
+throatier
+throatiness
+throaty
+throes
+thrombi
+thromboses
+thrombosis
+thrombus
+throwback
+thrum
+thrumming
+thudding
+thuggee
+thulium
+thumbnail
+thumbtack
+thumbtack's
+thumbtacked
+thumbtacking
+thumbtacks
+thunderclap
+thunderclaps
+thunderous
+thunderously
+thunk
+thwack
+thy
+thyratron
+thyroglobulin
+thyroid
+thyroidal
+thyroids
+thyronine
+thyrotoxic
+thyrotrophic
+thyrotrophin
+thyrotropic
+thyrotropin
+thyroxine
+tibia
+tic
+tidbit
+tidbits
+tideland
+tidelands
+tidewater
+tidily
+tiff
+tiffany
+tigress
+tillage
+tilth
+timberland
+timberlands
+timbre
+timepiece
+timeworn
+timothy
+tincture
+tinctured
+tincturing
+tinder
+tine
+tines
+tinfoil
+tinner
+tinplate
+tinsel
+tinselly
+tinsmith
+tinsmiths
+tintable
+tintype
+tinware
+tipoff
+tippier
+tipple
+tippled
+tippler
+tipples
+tippling
+tippy
+tipsier
+tipsiness
+tipsy
+tiptoeing
+tirade
+tirades
+titan
+titanate
+titanic
+titanium
+titans
+titian
+titillate
+titillating
+titillatingly
+titillation
+titillative
+titmouse
+titmouse's
+titrate
+titrated
+titrates
+titrating
+titration
+titular
+titularly
+toadied
+toadies
+toady
+toadying
+toadyism
+tobaggon
+tobaggon's
+tobaggons
+toccata
+today'll
+toddle
+toddled
+toddler
+toddlers
+toddles
+toddling
+toenail
+toenails
+toffee
+tofu
+tog
+togging
+togs
+toilsome
+toilsomely
+toilsomeness
+tokamak
+tollgate
+tollhouse
+toluene
+tomblike
+tombstone
+tombstones
+tome
+tomes
+tomfool
+tommy
+tonal
+tonalities
+tonally
+toneless
+tonelessly
+tonelessness
+tong
+tonger
+tonier
+tonk
+tonks
+tonsillitis
+tony
+toodle
+toolmake
+toolmaker
+toolmakers
+toolmaking
+toolsmith
+toot
+tooted
+tooter
+toothier
+toothily
+toothpaste
+toothy
+tooting
+tootle
+tootled
+tootler
+tootling
+toots
+tootsie
+tootsies
+tootsy
+topaz
+topcoat
+topcoats
+topgallant
+topnotch
+topnotcher
+topocentric
+topographic
+topographical
+topographically
+topographies
+topography
+topped
+toppers
+topping
+toppings
+topside
+topsides
+topsoil
+tori
+tories
+toroid
+toroidal
+toroidally
+toroids
+torpid
+torpidly
+torpor
+torrence
+torsion
+torsional
+torsionally
+torso
+torsos
+tort
+torten
+tortoiseshell
+tortuous
+tortuously
+tory
+tot
+totalistic
+totalitarian
+totalitarianism
+tote
+toted
+totem
+totemic
+toter
+totes
+toting
+tots
+totted
+touchdown
+touchdowns
+touchstone
+touchstones
+toughs
+tourism
+tousle
+tousled
+tousles
+tousling
+tout
+touted
+touter
+touting
+touts
+towboat
+towboats
+towhead
+towheaded
+townhouse
+townsman
+townsmen
+toxic
+traceback
+traceback's
+tracebacks
+tracepoint
+tracepoint's
+tracepoints
+traceried
+tracery
+trachea
+trackage
+trackless
+traction
+tradesmen
+traditionalism
+traditionalistic
+traditionalists
+tragedian
+tragedians
+tragicomic
+trailside
+traineeships
+trainman
+trainman's
+trainmen
+traipse
+traipsing
+traitorous
+traitorously
+tram
+trammel
+trammels
+tramway
+transalpine
+transaminase
+transatlantic
+transcendence
+transcendental
+transcendentalism
+transcendentalists
+transcendentally
+transconductance
+transcultural
+transducer
+transducers
+transduction
+transect
+transected
+transecting
+transects
+transept
+transepts
+transferee
+transferor
+transferors
+transfix
+transfixed
+transfixes
+transfixing
+transfusable
+transfuse
+transfused
+transfusing
+transfusion
+transfusions
+transgressor
+transgressors
+transliterate
+transliteration
+translucence
+translucency
+transmissible
+transmittable
+transmittance
+transmutation
+transmute
+transmuted
+transmutes
+transmuting
+transoceanic
+transom
+transoms
+transpacific
+transpiration
+transpirations
+transplantable
+transplantation
+transportable
+transposable
+transship
+transshipment
+transshipping
+transships
+transversal
+transversally
+transverse
+transversely
+transverses
+transvestite
+transvestitism
+trapdoor
+trapdoors
+trapezium
+trashier
+trashiness
+trashy
+trauma
+traumas
+traversable
+travertine
+trawl
+trawler
+treadle
+treadled
+treadling
+treadmill
+treasonable
+treasonous
+treelike
+trefoil
+trekked
+trekking
+trellis
+trellised
+trellises
+trembly
+tremulous
+tremulously
+tremulousness
+trenchant
+trenchantly
+trencherman
+trenchermen
+trendier
+trendiness
+trendy
+trepidation
+trestle
+trestles
+triable
+triableness
+triad
+triadic
+triamcinolone
+triangulate
+triangulated
+triangulately
+triangulation
+triatomic
+tribesman
+tribesmen
+tribulate
+tribulation
+tribulation's
+tribulations
+trichloroacetic
+trichloroethane
+trichromatic
+trickeries
+trickery
+trickster
+trident
+tridents
+tridiagonal
+triennial
+triennially
+trifluoride
+trig
+trigonal
+trigonally
+trigram
+trigrams
+trilobite
+trilogy
+trimester
+trinitarian
+trinitarians
+trinity
+trio
+triode
+triodes
+trios
+trioxide
+tripartite
+tripartition
+tripe
+triphenylarsine
+triphenylphosphine
+triphenylstibine
+triphosphopyridine
+triplex
+triplicate
+tripod
+tripods
+tripoli
+tripolyphosphate
+tripped
+tripping
+trippingly
+triptych
+trisodium
+tristate
+trisyllable
+trite
+tritely
+triteness
+triter
+tritest
+tritium
+tritium's
+triton
+triumphant
+triune
+trivalent
+trivium
+trodden
+troglodyte
+troika
+trollop
+trombone
+trombone's
+trombones
+trombonist
+troopship
+troopships
+trophic
+tropism
+tropisms
+tropocollagen
+tropospheric
+trotted
+trotter
+trotting
+troughs
+trounce
+trounced
+trounces
+trouncing
+troupe
+trouper
+troupes
+trouping
+troy
+truancy
+truculence
+truculent
+truculently
+trumpery
+trundle
+trundled
+trundler
+trundles
+trundling
+truss
+trusser
+trusses
+trussing
+trusteeship
+trypsin
+tsar
+tsarevich
+tsarina
+tsarism
+tsarist
+tsunami
+tuba
+tubular
+tubularly
+tubule
+tubules
+tugged
+tugging
+tularemia
+tulle
+tum
+tumbrels
+tumid
+tumidly
+tummies
+tummy
+tummy's
+tun
+tuna
+tunas
+tundra
+tuneful
+tunefully
+tunefulness
+tunelessly
+tung
+tungstate
+tungsten
+tupelo
+turbinate
+turbinated
+turbinates
+turbine
+turbines
+turbofan
+turbojet
+turgid
+turgidly
+turgidness
+turk
+turks
+turnabout
+turnaround
+turnarounds
+turnoff
+turnout
+turnouts
+turnpike
+turnpikes
+turnstone
+turntable
+turpitude
+turtleback
+turtlebacks
+turtleneck
+turvy
+tusk
+tusker
+tuskers
+tusks
+tussle
+tussled
+tussles
+tussling
+tut
+tutelage
+tutu
+tuxedo
+tuxedo's
+tuxedoed
+tuxedos
+twaddle
+twaddled
+twaddler
+twaddles
+twaddling
+tweedier
+tweediness
+tweedy
+tweeze
+tweezed
+tweezing
+twelfths
+twiddle
+twiddled
+twiddles
+twiddling
+twigged
+twigging
+twinge
+twinges
+twinging
+twinning
+twirly
+twisty
+twit
+twitchy
+twitting
+twosome
+tycoon
+typeahead
+typeface
+typescript
+typeset
+typesets
+typesetter
+typesetters
+typesetting
+typewrite
+typewriting
+typewritten
+typhoon
+typhus
+typicality
+typo
+typographer
+typological
+typologically
+typologies
+typology
+tyrannic
+tyrannical
+tyrannically
+tyrannicalness
+tyrannicide
+tyrosine
+ulcerate
+ulcerated
+ulcerates
+ulceration
+ulcerations
+ulcerative
+ulster
+ulterior
+ulteriorly
+ultimatum
+ultra
+ultracentrifugally
+ultracentrifugation
+ultracentrifuge
+ultraconservative
+ultrafast
+ultramarine
+ultramodern
+ultrashort
+ultrasonic
+ultrasonically
+ultrasonics
+ultrasound
+ultrastructure
+ultraviolet
+umber
+umbered
+umbering
+umbilical
+umbilici
+umbilicus
+umbilicuses
+umbra
+umbrage
+unaccountable
+unadventurous
+unaggressive
+unallocable
+unambiguity
+unamused
+unanimity
+unappeasable
+unappeasably
+unasterisked
+unbalance
+unbeknownst
+unbend
+unbending
+unbent
+unbind
+unblest
+unbutton
+unbuttoning
+uncap
+unceremonious
+unceremoniously
+unceremoniousness
+uncharacteristic
+uncharitably
+unchastity
+unchristian
+uncircumcised
+unclasping
+uncodable
+uncoiling
+uncombable
+uncomment
+uncommenting
+uncomments
+uncommunicable
+uncommunicative
+unconcern
+uncongeniality
+unconscionable
+unconscionableness
+unconventionality
+uncourageous
+uncousinly
+uncritical
+unction
+undedicated
+undeflected
+undeliverability
+undeliverable
+undependable
+underachievers
+underadjusting
+underarm
+underbedding
+underbelly
+underbracing
+underclassman
+underclassmen
+underclothes
+underclothing
+underconsumption
+undercooked
+undercount
+undercounts
+undercover
+undercurrent
+undercut
+underdeveloped
+underdevelopment
+underdog
+undereducated
+underemployed
+underemployment
+underenumerated
+underenumeration
+undergarments
+undergirding
+undergrowth
+underhanded
+underhandedly
+underhandedness
+underheat
+underlay
+underpaid
+underpins
+underpopulated
+underprivileged
+underrate
+underrated
+underregistration
+underreported
+underreporting
+underrepresentation
+underrepresented
+undersea
+underseas
+undersecretaries
+undersecretary
+undersecretary's
+undershirt
+undershirt's
+undershirts
+undershoot
+undershooting
+undershoots
+undershot
+underside
+underside's
+undersides
+undersize
+undersized
+undersizes
+undersizing
+understate
+understatement
+understatements
+understates
+understating
+understructure
+understructure's
+understructures
+understudies
+understudy
+understudy's
+undertow
+undertow's
+undertows
+undervalued
+underwater
+underwhelm
+underwhelmed
+underwhelming
+underwhelms
+underwood
+undeserved
+undogmatically
+undreamt
+undulate
+undulated
+undulates
+undulating
+undulation
+undulations
+unearth
+unearthed
+unearthing
+unease
+uneconomic
+uneducated
+unemployability
+unencroachable
+unenforceable
+unenforcible
+unenunciated
+unenviable
+unfaded
+unfailing
+unfailingly
+unfailingness
+unfathomable
+unfederated
+unfelt
+unfertile
+unfindable
+unfitting
+unfoldment
+unfrocking
+unfrozen
+unfurl
+unfurled
+ungallant
+unglamorous
+ungodliness
+ungodly
+ungracious
+ungrammaticality
+unhand
+unharmonious
+unheated
+unhelpful
+unhesitant
+unhinge
+unholiness
+unholy
+unhook
+unhooked
+unhooking
+unhurried
+unhurt
+unideal
+unidimensional
+unifilar
+unilateral
+unilaterally
+unimaginative
+unimodal
+unimpeachable
+unimpeachably
+unimposing
+unimpressive
+uninitiate
+uninjectable
+uninominal
+uninterested
+uninvolved
+unipolar
+uniprocessor
+uniprocessor's
+uniprocessors
+unitarian
+unitarianism
+unitarians
+unitary
+univalent
+univariate
+universalism
+universalistic
+unkempt
+unkink
+unlacing
+unlearn
+unlearned
+unliterary
+unloveliness
+unlovely
+unmake
+unmalicious
+unmanliness
+unmanly
+unmarred
+unmask
+unmeasured
+unmeritorious
+unmet
+unmethodical
+unmindful
+unmoving
+unobtrusive
+unobtrusively
+unobtrusiveness
+unorthodox
+unorthodoxy
+unpaintable
+unpalatability
+unpartisan
+unperforated
+unphysical
+unpicturesque
+unpreemphasized
+unpremeditated
+unprepared
+unprocurable
+unproductive
+unprofessional
+unprovocative
+unquestionable
+unquestioning
+unquiet
+unquietly
+unquietness
+unreadiness
+unready
+unreality
+unreason
+unreasoning
+unreasoningly
+unreceptive
+unredeemable
+unreeling
+unreflective
+unrelieved
+unremarkable
+unremitting
+unremittingly
+unremunerated
+unrepentant
+unrepresentative
+unrewarding
+unripe
+unripeness
+unromantic
+unscathed
+unscrew
+unscrewed
+unscrewing
+unseat
+unsee
+unselfconscious
+unselfconsciousness
+unservile
+unshakeable
+unsheathe
+unshed
+unsightly
+unsinkable
+unslaked
+unsold
+unsolder
+unspeaking
+unspecific
+unspectacular
+unsprocketed
+unstilted
+unstriated
+unstuffy
+unsubtle
+unsurmountable
+unsystematic
+unteach
+untellable
+untenable
+untenanted
+unthinking
+untidily
+untraditional
+untrodden
+unutterably
+unvacuolated
+unwaivering
+unwariness
+unwarrantable
+unwary
+unwed
+unweighted
+unwire
+unwomanly
+unworkable
+uparrow
+upbeat
+upbring
+upcome
+upcoming
+upend
+upheaval
+upheavals
+upholstery
+upped
+uppercase
+uppercased
+uppercases
+uppercasing
+upperclassman
+upperclassmen
+uppercut
+upraise
+upraised
+uprise
+upriser
+upriver
+uproarious
+uproariously
+uproariousness
+upsilon
+upslope
+upstanding
+upstandingness
+upstate
+upstater
+upsurge
+upswing
+upswings
+uptake
+uptime
+uptown
+uptrend
+upwind
+uranium
+uranyl
+urbane
+urbanely
+urbanism
+urbanite
+urbanites
+urea
+uremia
+urethane
+urethanes
+urethra
+urgencies
+urgency
+urinal
+urinals
+urinary
+usurer
+usurious
+usuriously
+usuriousness
+usurpation
+usury
+uterine
+utile
+utilitarian
+utopia
+utopianism
+utopias
+vacationland
+vaccinating
+vaccination
+vaccinations
+vaccine
+vaccines
+vaccinia
+vaccinial
+vacuity
+vacuolate
+vacuolated
+vacuolates
+vacuolating
+vacuolation
+vacuole
+vacuoles
+vaginal
+vaginally
+vain
+vainglorious
+vaingloriously
+vaingloriousness
+vainness
+valance
+valanced
+valances
+valedictory
+valuate
+valuated
+valuates
+valuating
+valueless
+valuelessness
+vamp
+vamper
+vampire
+vampires
+vanadium
+vandal
+vandalism
+vandals
+vanguard
+variate
+variated
+variates
+variating
+variegate
+variegated
+variegation
+varistor
+varmint
+vascular
+vasectomies
+vasectomy
+vectorial
+velar
+veldt
+veldt's
+veldts
+vellum
+velour
+velours
+velum
+velvety
+venal
+venally
+vendetta
+vendible
+veneer
+veneerer
+veneering
+venerate
+venerated
+venerates
+venerating
+veneration
+venerations
+venereal
+vengeful
+vengefully
+vengefulness
+venial
+venially
+venialness
+venous
+venously
+ventilator
+venturesome
+venturesomely
+venturesomeness
+venturi
+venturis
+venue
+venue's
+venues
+veracious
+veraciously
+veraciousness
+verandah
+verandahed
+verbatim
+verbiage
+verbosity
+verdant
+verdantly
+veridical
+veridically
+verisimilitude
+verity
+vermiculite
+vermilion
+vermouth
+vernacular
+vernacularly
+vernal
+vernally
+vernier
+vertebra
+vertebrae
+vertebral
+vertebrally
+vertigo
+verve
+vesicle
+vesicles
+vesicular
+vesicularly
+vesper
+vespers
+vestal
+vestally
+vestibule
+vestibuled
+vestments
+vestries
+vestry
+vesture
+vestured
+vestures
+vesturing
+vet
+vetch
+vexatious
+vexatiously
+vexatiousness
+viaduct
+viaducts
+vibes
+vibrancy
+vibrant
+vibrantly
+vibrato
+vibrio
+vibrionic
+vicar
+vicarious
+vicariously
+vicariousness
+viewgraph
+viewgraph's
+viewgraphes
+viewless
+viewlessly
+vigil
+vigilantism
+vindicate
+vindicated
+vindicates
+vindicating
+vindication
+vindicative
+vintner
+vinyl
+viola
+virginal
+virginally
+virgule
+virile
+virility
+virtuosi
+virtuosity
+virulence
+virulent
+virulently
+viscera
+visceral
+viscerally
+viscid
+viscidly
+viscoelastic
+viscoelasticity
+viscometer
+viscometer's
+viscometers
+vise
+vised
+viselike
+vising
+visive
+vitiate
+vitiated
+vitiates
+vitiating
+vitiation
+vitreous
+vitreously
+vitreousness
+vitrification
+vitrify
+vitriol
+vitriolic
+vitro
+vituperative
+vituperatively
+viva
+vivace
+vivacious
+vivaciously
+vivaciousness
+vivacity
+vive
+vivers
+vivification
+vivified
+vivifier
+vivify
+vivo
+vixen
+viz
+vocable
+vocabularian
+vocabularianism
+vocalic
+vocalism
+vocalist
+vocalists
+vocative
+vocatively
+vociferous
+vociferously
+vociferousness
+vocoded
+vocoder
+vodka
+vodka's
+voiceband
+voiceless
+voicelessly
+voicelessness
+voila
+volar
+volcanism
+volition
+volitional
+volitionality
+volitionally
+voltaic
+voltmeter
+voltmeter's
+voltmeters
+voluble
+volubleness
+volumetric
+volumetrically
+voluminous
+voluminously
+voluminousness
+voluptuous
+voluptuously
+voodoo
+voodoos
+voracious
+voraciously
+voraciousness
+voracity
+vortices
+vorticity
+votary
+vouchsafe
+vouchsafed
+vouchsafes
+vouchsafing
+vulpine
+vulturelike
+vying
+wackier
+wackiness
+wacko
+wacko's
+wackos
+wacky
+wad
+wadded
+waddle
+waddled
+waddler
+waddles
+waddling
+wads
+wagged
+wagging
+waggish
+waggishly
+waggishness
+waggle
+waggled
+waggles
+waggling
+wainscot
+wainscoted
+wainscoting
+wainscots
+waistline
+wakeful
+wakefully
+wakefulness
+wakeup
+wale
+waler
+wales
+waling
+walkie
+walkover
+wallaby
+wallboard
+wallies
+wallop
+walloped
+walloper
+walloping
+wallops
+wallpaper
+wallpapers
+wally
+wangle
+wangled
+wangler
+wangles
+wangling
+wapiti
+wapitis
+wardroom
+wardrooms
+warehouseman
+warhead
+warheads
+warless
+warmhearted
+warmheartedly
+warmheartedness
+warmish
+warmonger
+warmongering
+warmongers
+warmup
+warren
+warrener
+warreners
+warrens
+wartime
+wartimes
+warty
+washbasin
+washboard
+washbowl
+washcloths
+washier
+washout
+washy
+waspish
+waspishly
+waspishness
+wastebasket
+wastebaskets
+wasteland
+wastelands
+wastewater
+wastrel
+wastrels
+watchband
+watchdog
+watchmake
+watchmaker
+watchmakers
+watchmaking
+watchmen
+watchpoints
+watercourse
+waterfront
+waterline
+waterlines
+waterloo
+waterman
+watermelon
+watershed
+watersheds
+waterside
+watersider
+watertight
+watertightness
+watt
+wattage
+wattages
+wattle
+wattled
+wattles
+wattling
+watts
+waveguide
+waveguides
+wavenumber
+wavier
+waviness
+wavy
+waxwork
+waxworks
+waylaid
+weaponless
+weaponry
+weatherbeaten
+weatherproof
+weatherproofness
+weatherstrip
+webbing
+wedlock
+weediness
+weedy
+weightier
+weightiness
+weightlessness
+weighty
+weirdo
+weirdos
+weirs
+wellbeing
+welsh
+welsher
+welt
+welter
+weltered
+weltering
+welts
+werewolf
+werewolf's
+werewolves
+westbound
+wetland
+wetlands
+wham
+whamming
+what'd
+what're
+whatnot
+whee
+wheedle
+wheedled
+wheedles
+wheedling
+wheelbarrows
+wheelbase
+wheelchair
+wheelchair's
+wheelhouse
+wheelie
+wheeze
+wheezed
+wheezes
+wheezier
+wheeziness
+wheezing
+wheezy
+whelk
+where'd
+where're
+whereabout
+wherefore
+wherefores
+whereof
+whereon
+wheresoever
+wherewith
+whet
+whets
+whetted
+whetting
+whiff
+whiffle
+whiffled
+whiffler
+whiffles
+whiffling
+whig
+whigs
+whimsey
+whimseys
+whinnied
+whinnies
+whinny
+whinnying
+whiplash
+whiplashes
+whippet
+whipsaw
+whipsawed
+whir
+whirlies
+whirligig
+whirly
+whiskies
+whistleable
+whiteface
+whitehead
+whitetail
+whitey
+whither
+who'd
+who'll
+whoa
+whodunit
+whodunit's
+whodunits
+whomsoever
+whoosh
+whop
+whoppers
+whopping
+whosoever
+wicket
+wickets
+widowhood
+widthwise
+wiener
+wieners
+wigging
+wiggle
+wiggled
+wiggler
+wiggles
+wiggling
+wiggly
+wigmaker
+wildcatter
+wildfire
+wildlife
+wilful
+wilfully
+wilily
+willowy
+wimp
+wimp's
+wimpier
+wimpiest
+wimps
+wimpy
+winch
+winched
+wincher
+winches
+winchester
+winching
+windbag
+windbags
+windbreak
+windbreaks
+windfall
+windless
+windlessly
+windlessness
+windowless
+windowpane
+windowpanes
+windowsill
+windshield
+windstorm
+windup
+windward
+windwardly
+winemake
+winemaster
+winery
+wineskin
+wingback
+wingman
+wingmen
+wingspan
+wingtip
+winkle
+winkled
+winkles
+winkling
+winless
+winnow
+winnower
+wino
+winos
+winsome
+winsomely
+winsomeness
+wintertime
+winy
+wireman
+wiremen
+wiseacre
+wisecrack
+wisecracked
+wisecracker
+wisenheimer
+wishbone
+wishy
+wispy
+witter
+witting
+wittingly
+wive
+wiving
+wizen
+wizened
+wobble
+wobbled
+wobbler
+wobbles
+wobbliness
+wobbling
+wobbly
+woebegone
+woebegoneness
+wok
+woken
+wold
+wolfish
+wolfishly
+wolfishness
+won
+woodcarver
+woodchopper
+woodchoppers
+woodcut
+woodcutters
+woodgrain
+woodgraining
+woodhen
+woodlot
+woodruff
+woodshed
+woodside
+woodwind
+woodyard
+woolgather
+woolgatherer
+woolgathering
+wop
+wops
+wordlessly
+workday
+workhouses
+workingmen
+workmanlike
+workout
+workouts
+workpiece
+workpieces
+workplace
+workplace's
+workplaces
+worksheet
+worksheets
+workspace
+workspaces
+worktable
+wormier
+wormy
+worsen
+worsened
+worsening
+worsens
+would've
+wow
+wracking
+wraith
+wraparound
+wrathful
+wrathfully
+wrathfulness
+wreathe
+wreaths
+wrier
+wriest
+wright
+wrinkly
+wristband
+wrongdoer
+wrongdoing
+wrongful
+wrongfully
+wrongfulness
+wry
+wryly
+xenon
+xenophobia
+xerography
+xterm
+xterm's
+xylem
+xylene
+xylophone
+xylophones
+yacht
+yachters
+yachting
+yachts
+yachtsman
+yachtsmen
+yaks
+yang
+yap
+yapping
+yardage
+yarmulke
+yarrow
+yaw
+yawed
+yawing
+yawl
+yaws
+yearbook
+yeastier
+yeastiness
+yeasty
+yen
+yeomanry
+yeshiva
+yesteryear
+yin
+yip
+yipping
+yodel
+yodels
+yoga
+yogi
+yogurt
+yogurt's
+yokel
+yokels
+yolk
+yolks
+yore
+youngish
+youths
+yow
+yowl
+yr
+ytterbium
+yttrium
+yucca
+yule
+yup
+zag
+zagging
+zags
+zealot
+zeitgeist
+zestful
+zestfully
+zestfulness
+zestier
+zesty
+zeta
+zetas
+zig
+zigged
+zigging
+zigzagged
+zigzagging
+zilch
+zing
+zinger
+zings
+zip
+zipped
+zipper
+zippered
+zippers
+zipping
+zips
+zircon
+zirconium
+zloty
+zlotys
+zodiacal
+zombie
+zombies
+zoologist
+zoologists
+zoology
+zounds
+zymurgy
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.2 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.2
new file mode 100644
index 00000000000..d3ec471e801
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.2
@@ -0,0 +1,37616 @@
+AAA
+AAAS
+AC
+ACS
+AK
+AL
+AR
+ASTM
+AZ
+Aarhus
+Abbott
+Abbott's
+Abel
+Abelian
+Abelson
+Abelson's
+Aberdeen
+Aberdeen's
+Abernathy
+Abernathy's
+Abidjan
+Abos
+Abram
+Abram's
+Abyssinia
+Abyssinians
+Acadia
+Accra
+Achaean
+Ackley
+Actaeon
+Acton
+Acton's
+Adair
+Adair's
+Addis
+Adelaide
+Adelaide's
+Adele
+Adele's
+Adelia
+Adelia's
+Aden
+Aden's
+Adkins
+Adler
+Adler's
+Adlerian
+Adolph
+Adolph's
+Adolphus
+Adrian
+Adrian's
+Adrienne
+Adrienne's
+Aeneas
+Aeolus
+Aerobacter
+Aeschylus
+Aesop
+Afrikaner
+Agamemnon
+Agee
+Agee's
+Agnew
+Agnew's
+Agricola
+Agway
+Ahmedabad
+Aida
+Aida's
+Aiken
+Aiken's
+Ainu
+Aitken
+Aitken's
+Akers
+Aladdin
+Alastair
+Alberich
+Albrecht
+Albrecht's
+Albright
+Albright's
+Alcestis
+Alcmena
+Alcott
+Alcott's
+Aldebaran
+Aldrich
+Aldrich's
+Aleutian
+Alexei
+Alexei's
+Alexis
+Alfonso
+Alfonso's
+Alfred
+Alfred's
+Alfredo
+Alfredo's
+Algenib
+Alger
+Alger's
+Algonquian
+Algonquin
+Algonquin's
+Ali
+Alison
+Alison's
+Allegra
+Allis
+Allyn
+Allyn's
+Almaden
+Almaden's
+Alpert
+Alpert's
+Alpheratz
+Alphonse
+Alphonse's
+Alsop
+Alsop's
+Altair
+Altair's
+Alton
+Alton's
+Alva
+Alva's
+Amerada
+Amharic
+Amman
+Ammerman
+Ammerman's
+Amontillado
+Anabel
+Anabel's
+Anacreon
+Analects
+Anatole
+Anatole's
+Anatolian
+Andalusia
+Andrea
+Andrea's
+Andrei
+Andrei's
+Andromache
+Angelica
+Angelica's
+Anglophile
+Anglophiliac
+Anglophilic
+Anglophilism
+Anglophily
+Anglophobe
+Anglophobic
+Annale
+Annalen
+Annalist
+Annalistic
+Annette
+Anselm
+Anselm's
+Anselmo
+Anselmo's
+Antaeus
+Antilles
+Anton
+Anton's
+Antonio
+Antonio's
+Antwerp
+Apetalous
+Appleby
+Appleby's
+Apr
+Aquila
+Aquila's
+Arachne
+Arachne's
+Arapaho
+Arcadian
+Arden
+Arden's
+Arequipa
+Argentinian
+Argive
+Arlen
+Armata
+Armco
+Armenia
+Arragon
+Arrhenius
+Artemia
+Artie
+Artie's
+Arturo
+Arturo's
+Ashmolean
+Asilomar
+Asilomar's
+Assam
+Astarte
+Aston
+Aston's
+Asuncion
+Atchison
+Atchison's
+Athabascan
+Atlantica
+Atropos
+Attlee
+Atwater
+Atwater's
+Atwood
+Atwood's
+Auberge
+Auberge's
+Aubrey
+Aubrey's
+Audrey
+Audrey's
+Auerbach
+Auerbach's
+Aug
+Auriga
+Avernus
+Avery
+Avery's
+Avignon
+Aylesbury
+Azerbaijan
+Azerbaijan's
+Azores
+BEMA
+BIS
+BITNET
+BMW
+BP
+Baden
+Baden's
+Baffin
+Bahrein
+Bahrein's
+Baird
+Baird's
+Baja
+Bakhtiari
+Baku
+Balboa
+Balfour
+Baltimorean
+Bamako
+Banach
+Banbury
+Banbury's
+Bangui
+Barbour
+Barbour's
+Barhop
+Barlow
+Barlow's
+Barnes
+Barnet
+Barnett
+Barnett's
+Barnhard
+Barnhard's
+Barnum
+Barr
+Barr's
+Barrett
+Barrett's
+Barrington
+Barrington's
+Barton
+Barton's
+Basel
+Basque
+Basque's
+Batchelder
+Batchelder's
+Bateman
+Bateman's
+Bathurst
+Bathurst's
+Bator
+Battelle
+Battelle's
+Bausch
+Bayda
+Bayport
+Bayport's
+Bayreuth
+Beardsley
+Beardsley's
+Beckman
+Beckman's
+Beebe
+Beebe's
+Beecham
+Beecham's
+Beijing
+Bela
+Bela's
+Belize
+Bellamy
+Bellamy's
+Bellingham
+Bellingham's
+Bellini
+Bellini's
+Belshazzar
+Belshazzar's
+Benares
+Benelux
+Benelux's
+Benton
+Benton's
+Beograd
+Berea
+Berea's
+Berenices
+Beresford
+Beresford's
+Bergen
+Bergen's
+Bergland
+Bergland's
+Berglund
+Berglund's
+Bergman
+Bergman's
+Bergstrom
+Bergstrom's
+Berman
+Berman's
+Bernardino
+Bernardino's
+Bernardo
+Bernardo's
+Bernet
+Bernet's
+Bernhard
+Berniece
+Bernini
+Bertie
+Bertram
+Bertram's
+Berwick
+Berwick's
+Betsey
+Betsey's
+Bette
+Bette's
+Bhagavadgita
+Bialystok
+Biggs
+Bilbao
+Billiken
+Billikens
+Biltmore
+Biltmore's
+Bini
+Biochimica
+Biometrika
+Biophysica
+Birgit
+Birmingham
+Bismark
+Bismark's
+Bissau
+Bizet
+Bizet's
+Blackfoot
+Blackfoot's
+Blackfoots
+Blaine
+Blaine's
+Blanchard
+Blanchard's
+Bleeker
+Blenheim
+Blinn
+Blinn's
+Bloch
+Bloch's
+Blomberg
+Blomberg's
+Blomquist
+Blomquist's
+Blum
+Blumenthal
+Blumenthal's
+Blythe
+Blythe's
+Boarsh
+Boca
+Boca's
+Bodleian
+Boeotia
+Boeotian
+Bohemianism
+Bois
+Boonton
+Bootes
+Boris
+Bosch
+Bosporus
+Boucher
+Bourbaki
+Bowditch
+Bowditch's
+Bowdoin
+Bowen
+Bowen's
+Boxford
+Boyd
+Boyd's
+Boyle
+Boyle's
+Boylston
+Boylston's
+Bragg
+Brahmaputra
+Brahmsian
+Brandt
+Brandt's
+Brasstown
+Brazzaville
+Bremen
+Bremen's
+Brendan
+Brendan's
+Brennan
+Brennan's
+Brenner
+Brenner's
+Brent
+Brest
+Brest's
+Breton
+Brett
+Brett's
+Brewster
+Brewster's
+Brice
+Bridget
+Bridget's
+Brie
+Briggs
+Briggs's
+Brighton
+Brighton's
+Brillouin
+Brindisi
+Brisbane
+Brisbane's
+Broglie
+Broglie's
+Bromfield
+Bromfield's
+Bromley
+Bromley's
+Brookline
+Brookline's
+Bruckner
+Bruckner's
+Bruegel
+Bruegel's
+Brumidi
+Brumidi's
+Brunswick
+Brunswick's
+Buchenwald
+Buchenwald's
+Buckley
+Buckley's
+Bucknell
+Bucknell's
+Buena
+Buenos
+Bujumbura
+Burke
+Burkes
+Burlington
+Burlington's
+Burnham
+Burtt
+Burtt's
+Buttrick
+Buxtehude
+Buxtehude's
+Buxton
+Byrd
+CA
+CBS
+CDR
+CERN
+CSNET
+CT
+CUNY
+CURVET
+CZ
+Cabot
+Cabot's
+Cady
+Caesarian
+Caesarian's
+Cahill
+Cajun
+Cajun's
+Cajuns
+Calais
+Caldwell
+Caldwell's
+Caleb
+Caleb's
+Calhoun
+Calhoun's
+Calkins
+Callaghan
+Callaghan's
+Callahan
+Callahan's
+Callan
+Callan's
+Calvert
+Calvert's
+Calvin
+Calvin's
+Cambrian
+Camden
+Camden's
+Camembert
+Cameron
+Cameron's
+Cameroon
+Cameroun
+Cameroun's
+Camilla
+Campbell
+Canaan
+Canaan's
+Canfield
+Canfield's
+Canopus
+Cantabrigian
+Capitoline
+Caputo
+Carboloy
+Carbone
+Cardiff
+Cardiff's
+Carey
+Carey's
+Cargill
+Cargill's
+Carib
+Carlin
+Carlin's
+Carlisle
+Carlisle's
+Carlo
+Carlsbad's
+Carlsbads
+Carmela
+Carmen
+Carmen's
+Carolingian
+Carpathia
+Carpathians
+Carr
+Carr's
+Carrara
+Carroll
+Carroll's
+Carruthers
+Casanova
+Casanova's
+Castillo
+Castillo's
+Castroism
+Catalonia
+Catherwood
+Catherwood's
+Caviness
+Cayley
+Cayley's
+Cayuga
+Cayuga's
+Cecropia
+Cedric
+Celebes
+Celia
+Celia's
+Celt
+Centrex
+Cepheus
+Cesare
+Cesare's
+Chadwick
+Chadwick's
+Chandigarh
+Chao
+Chao's
+Charlemagne
+Charlemagne's
+Charlemagnes
+Charon
+Charon's
+Charta
+Chartres
+Chatham
+Chatham's
+Chatsworth
+Chatsworth's
+Chauncey
+Chauncey's
+Chelsea
+Chelsea's
+Cheney
+Cheney's
+Cheryl
+Chiang
+Chiang's
+Chimique
+Chinatown
+Chinatown's
+Chloe
+Chou
+Chou's
+Christensen
+Christensen's
+Christiana
+Christiana's
+Christianson
+Christianson's
+Christina
+Christina's
+Christmastime
+Christoffel
+Christoph
+Christoph's
+Chungking
+Cindy
+Cindy's
+Clapeyron
+Clarendon
+Clarendon's
+Clausius
+Clayton
+Clayton's
+Clifton
+Clifton's
+Clotho
+Co
+Cobb
+Cobb's
+Cochran
+Cochran's
+Cochrane
+Cochrane's
+Coddington
+Coddington's
+Cody
+Cody's
+Coffey
+Coffey's
+Cole
+Cole's
+Colette
+Colette's
+Collins
+Colombo
+Colombo's
+Cominform
+Compagnie
+Compton
+Compton's
+Conakry
+Conant
+Conant's
+Congolese
+Conklin
+Conklin's
+Conley
+Conley's
+Connally
+Connally's
+Connors
+Constantine
+Constantine's
+Convair
+Convair's
+Conway
+Conway's
+Cooke
+Cooke's
+Cooley
+Cooley's
+Copernican
+Corbett
+Corbett's
+Corcoran
+Corcoran's
+Corey
+Corey's
+Corinth
+Coriolanus
+Cornelia
+Cornelia's
+Cornelian
+Cornelius
+Coronado
+Corsica's
+Cortez
+Corvus
+Corydoras
+Cosgrove
+Cosgrove's
+Cottrell
+Cottrell's
+Coulter
+Coulter's
+Courtney
+Courtney's
+Cowan
+Cowan's
+Crispin
+Crispin's
+Croatia
+Croydon
+Croydon's
+Cruickshank
+Cruickshank's
+Cruz
+Culbertson
+Culbertson's
+Cummings
+Cummins
+Curran
+Curran's
+Curtis
+Cushing
+Cushing's
+Custer
+Custer's
+Cuvier
+Cuzco
+Cyclades
+Cyrillic
+Czerniak
+Czerniak's
+DA's
+DC
+DFL
+DMA
+DOD
+Dacca
+Dacca's
+Dada
+Dadaistic
+Dahl
+Dahl's
+Dahomey
+Dahomey's
+Dailey
+Dailey's
+Dairylea
+Daley
+Daley's
+Dalhousie
+Dalzell
+Dalzell's
+Damocles
+Damon
+Damon's
+Dana
+Dana's
+Danubian
+Darcy
+Darcy's
+Darius
+Darwinistic
+Daryl
+Daryl's
+Datamation
+Daugherty
+Daugherty's
+Davison
+Davison's
+Daytona
+Daytona's
+DeKastere
+Deane
+Deane's
+Deanna
+Deanna's
+Decatur
+Decatur's
+Dee
+Dee's
+Deimos
+Deirdre
+Deirdre's
+Deirdres
+Del
+Delaney
+Delaney's
+Delano
+Delano's
+Delia
+Delia's
+Della
+Della's
+Delmarva
+Delphically
+Delphinus
+Demeter
+Deneb
+Deneb's
+Denebola
+Denton
+Denton's
+Dependance
+Derek
+Derek's
+Detroit
+Dhabi
+Dickerson
+Dickerson's
+Dido
+Dido's
+Diebold
+Diebold's
+Dietz
+Diocletian
+Dirichlet
+Dixon
+Dixon's
+Dnieper
+Dnieper's
+Dobbs
+Dodd
+Dodd's
+Dodson
+Dodson's
+Doherty
+Doherty's
+Dolan
+Dolan's
+Domenico
+Domenico's
+Dominick
+Dominick's
+Dominique
+Dominique's
+Doneck
+Doneck's
+Dooley
+Dooley's
+Dorcas
+Doreen
+Doreen's
+Doria
+Doria's
+Doric
+Doric's
+Dorothea
+Dorothea's
+Dorset
+Dorset's
+Dortmund
+Dortmund's
+Dowling
+Dowling's
+Draco
+Draco's
+Draconian
+Dravidian
+Driscoll
+Driscoll's
+Drummond
+Drummond's
+Dubhe
+Dubhe's
+Dudley
+Dudley's
+Dugan
+Dugan's
+Duma
+Duma's
+Dunbar
+Dunbar's
+Dundee
+Dundee's
+Dunedin
+Dunedin's
+Dunlop
+Dunlop's
+Dunn
+Dunn's
+Duquesne
+Durango
+Durango's
+Durer
+Durkin
+Durkin's
+Durrell
+Durrell's
+Durward
+Durward's
+Dusenbury
+Dusenbury's
+Dutton
+Dutton's
+Dwyer
+Dwyer's
+ECG
+EDT
+EEOC
+ERDA
+ESC
+EST
+Eagan
+Eagan's
+Earthman
+Earthman's
+Earthmen
+Earthmen's
+Eaton
+Eaton's
+Eben
+Eben's
+Eccles
+Ecole
+Edmonds
+Edmondson
+Edmondson's
+Edmonton
+Edmonton's
+Eduardo
+Eduardo's
+Effie
+Effie's
+Egan
+Egan's
+Egyptology
+Ehrlich
+Ehrlich's
+Eire
+Eire's
+Eisner
+Eisner's
+Ekstrom
+Ekstrom's
+Eldon
+Eldon's
+Eleazar
+Eleazar's
+Elena
+Elena's
+Elgin
+Elgin's
+Elinor
+Elinor's
+Elisha
+Elisha's
+Ellwood
+Ellwood's
+Elsevier
+Elsevier's
+Elton
+Elton's
+Elwood
+Elwood's
+Ely
+Ely's
+Elysee
+Elysee's
+Emil
+Emil's
+Emile
+Emile's
+Emilio
+Emilio's
+Emmett
+Emmett's
+Engels
+Engle
+Engle's
+Enid
+Enid's
+Ephesus
+Erastus
+Erato
+Erato's
+Erika
+Erika's
+Erlenmeyer
+Erlenmeyer's
+Erskine
+Erskine's
+Esmark
+Esmark's
+Esposito
+Esposito's
+Essen
+Essen's
+Estella
+Estella's
+Estes
+Estonia
+Estonia's
+Etruria
+Eumenides
+Euridyce
+Euridyce's
+Euterpe
+Euterpe's
+Evensen
+Everglade
+Everhart
+Everhart's
+FAA
+FAQ
+FAQ'S
+FL
+FM
+FMC
+FPC
+FSF
+FSF'S
+FTC
+Faber
+Faber's
+Fabian
+Fabian's
+Fafnir
+Fafnir's
+Fahey
+Fahey's
+Falkland
+Falklands
+Fallopian
+Falmouth
+Falmouth's
+Farkas
+Farnsworth
+Farnsworth's
+Fayette
+Fayette's
+Feeney
+Feeney's
+Fenton
+Fenton's
+Ferber
+Ferber's
+Ferguson
+Ferguson's
+Fermat
+Fermat's
+Ferreira
+Ferrer
+Ferrer's
+Fiji
+Fiji's
+Fijian
+Fijian's
+Fijians
+Finley
+Finley's
+Fischbein
+Fischbein's
+Fiske
+Fiske's
+Fizeau
+Fizeau's
+Flagler
+Flagler's
+Flo
+Flo's
+Fogarty
+Foley
+Foley's
+Fomalhaut
+Fomalhaut's
+Fontaine
+Fontaine's
+Forsythe
+Forsythe's
+Fortescue
+Fortescue's
+Foss
+Francine
+Francine's
+Francoise
+Francoise's
+Frankel
+Frankel's
+Fraser
+Fraser's
+Fredericksburg
+Fredericksburg's
+Fredericton
+Fredericton's
+Fredholm
+Fredholm's
+Freemason
+Freetown
+Freetown's
+Freya
+Freya's
+Friedrich
+Friedrich's
+Friesland
+Friesland's
+Frisian
+Fruehauf
+Fruehauf's
+Frye
+Frye's
+Fujitsu
+Fujitsu's
+Fulbright's
+Fulbrights
+Fulton
+Fulton's
+Furman
+Furman's
+GA
+GAO
+GCD
+GE
+GMT
+GOP
+GPO
+GU
+Gaberones
+Gabon
+Gabon's
+Gaines
+Galatia
+Galatia's
+Galen
+Galen's
+Galilean
+Galileo
+Galileo's
+Gallagher
+Gallagher's
+Galt
+Galt's
+Galway
+Galway's
+Gambia
+Gambia's
+Gandhi
+Gandhi's
+Gandhian
+Gannett
+Gannett's
+Garrisonian
+Garth's
+Gaspee
+Gaspee's
+Gaulle
+Gaulle's
+Gautama
+Gegenschein
+Geigy
+Geigy's
+Geminid
+Gemma
+Genesco
+Genoa
+Genoa's
+Ghanian
+Gil
+Gil's
+Gilchrist
+Gilchrist's
+Gilead
+Gilead's
+Gilmore
+Gilmore's
+Gina
+Gina's
+Gino
+Gino's
+Ginsberg
+Ginsberg's
+Ginsburg
+Ginsburg's
+Giuliano
+Giuliano's
+Giuseppe
+Giuseppe's
+Glaswegian
+Glidden
+Glidden's
+Gloriana
+Gloriana's
+Gobi
+Gobi's
+Goddard
+Goddard's
+Godfrey
+Godfrey's
+Godwin
+Godwin's
+Goff
+Goff's
+Goldfield
+Goldstine
+Goldstine's
+Goleta
+Goleta's
+Gonzalez
+Goode
+Goode's
+Goren
+Goren's
+Gorton
+Gorton's
+Gothically
+Gottfried
+Gottfried's
+Gouda's
+Gould
+Gould's
+Graff
+Graff's
+Greene
+Greene's
+Greenpeace
+Greenpeace's
+Greer
+Greer's
+Gresham
+Gresham's
+Grimaldi
+Grimaldi's
+Grinch
+Grinch's
+Griswold
+Griswold's
+Gruyere
+Guardia
+Guelph
+Guenther
+Guenther's
+Guerin
+Guilford
+Guilford's
+Guinevere
+Guinevere's
+Gujarat
+Gujarati
+Gullah
+Gunther
+Gunther's
+Gurkha
+Gurkha's
+Gustafson
+Gustafson's
+Gustav
+Gustav's
+Gustave
+Gustave's
+Gustavus
+Gwyn
+Gwyn's
+HDL
+Haag
+Haag's
+Haas
+Haberman
+Haberman's
+Habib
+Habib's
+Hadamard
+Haddad
+Haddad's
+Hadley
+Hadley's
+Hadrian
+Hagen
+Hagen's
+Hager
+Hager's
+Hagstrom
+Hagstrom's
+Hahn
+Hahn's
+Haines
+Haley
+Haley's
+Halley
+Halley's
+Halsey
+Halsey's
+Halstead
+Halstead's
+Halverson
+Halverson's
+Hamal
+Hamal's
+Hamburg
+Hamlin
+Hamlin's
+Handel
+Handel's
+Haney
+Haney's
+Hanford
+Hanford's
+Hankel
+Hankel's
+Hanley
+Hanley's
+Hanlon
+Hanlon's
+Hanna
+Hanna's
+Hapsburg
+Hapsburg's
+Harbin
+Harbin's
+Harlan
+Harlan's
+Harley
+Harley's
+Harmon
+Harmon's
+Harmonist
+Harmonistic
+Harmonistically
+Harriman
+Harriman's
+Harrington
+Harrington's
+Hathaway
+Hathaway's
+Hatteras
+Hattiesburg
+Hattiesburg's
+Haugen
+Haugen's
+Hausa
+Hausa's
+Hausdorff
+Hausdorff's
+Havilland
+Havilland's
+Hayden
+Hayden's
+Healey
+Healey's
+Healy
+Healy's
+Hebe
+Hebrides
+Hebrides's
+Hecate
+Hecate's
+Heckman
+Heckman's
+Heidegger's
+Heine
+Heine's
+Heinrich
+Heinrich's
+Helga
+Helga's
+Hellespont
+Helvetica
+Hempstead
+Hempstead's
+Henley
+Henley's
+Hennessy
+Henri
+Henri's
+Hermann
+Hermann's
+Hernandez's
+Hertzog
+Hertzog's
+Hesse
+Hesse's
+Hester
+Hester's
+Hetman
+Hetman's
+Hettie
+Hettie's
+Hetty
+Hetty's
+Heusen
+Heusen's
+Heuser
+Heuser's
+Hewett
+Hewett's
+Hewitt
+Hewitt's
+Hiatt
+Hiatt's
+Hibbard
+Hibbard's
+Hickman
+Hickman's
+Higgins
+Hildebrand
+Hildebrand's
+Himalaya
+Himalaya's
+Hindustan
+Hindustan's
+Hines
+Hinman
+Hinman's
+Hippocrates
+Hippocratic
+Hiroshi
+Hiroshi's
+Hirsch
+Hitlerian
+Hitlerism
+Hitlerite
+Hitlerites
+Hoagland
+Hoagland's
+Hobart
+Hobart's
+Hodge
+Hodge's
+Hodgkin
+Hodgkin's
+Hoff
+Hoff's
+Hogan
+Hogan's
+Holcomb
+Holcomb's
+Hollingsworth
+Hollingsworth's
+Holloway
+Holloway's
+Holm
+Holm's
+Holman
+Holman's
+Holmdel
+Holmdel's
+Honshu
+Honshu's
+Hopi's
+Horus
+Hottentot
+Hottentot's
+Houdaille
+Houdaille's
+Houghton
+Houghton's
+Hoyt
+Hoyt's
+Hrothgar
+Hrothgar's
+Hubbard
+Hubbard's
+Hubbell
+Hubbell's
+Huber
+Huber's
+Huffman
+Huffman's
+Huggins
+Hummel
+Hummel's
+Hun
+Huntington
+Huntington's
+Huntley
+Huntley's
+Hurd
+Hurd's
+Hurdies
+Hurwitz
+Huston
+Huston's
+Huxtable
+Huxtable's
+Hyades
+Hyde
+Hyde's
+Hyman
+IA
+ICL
+IEE
+IGN
+IL
+INTERAMA
+IOT
+IQ
+IR
+IRAF
+IRS
+Ian
+Ian's
+Ibn
+Ida
+Ida's
+Ifni
+Igor's
+Ike
+Ike's
+Ilona
+Ilyushin
+Imagen
+Imagen's
+Indo
+Indochinese
+Indoeuropean
+Indus
+Informatica
+Inman
+Inman's
+Ira
+Iranian
+Iranian's
+Iranians
+Iraqi's
+Iraqis
+Irrawaddy
+Irvin
+Irvin's
+Irwin
+Isaacson
+Isaacson's
+Isabella
+Isabella's
+Isadore
+Isadore's
+Isaiah
+Isaiah's
+Isis
+Islamabad
+Islamabad's
+Isolde
+Isolde's
+Istvan
+Istvan's
+Ito
+Ito's
+Iverson
+Iverson's
+JACM
+Jablonsky
+Jablonsky's
+Jacobi
+Jacobi's
+Jacobson
+Jacobson's
+Jacobus
+Jaeger
+Jaeger's
+Jaime
+Jaime's
+Jamie
+Jamie's
+Janos
+Jansenist
+Jansenist's
+Jarvin
+Jarvin's
+Jed
+Jed's
+Jensen
+Jensen's
+Jeres
+Jesuitism
+Jewell
+Jewell's
+Jewett
+Jewett's
+Jimenez
+Jo
+Jo's
+Johanna
+Johanna's
+Johnston
+Johnston's
+Jolla
+Jolla's
+Judaica
+Judd
+Judd's
+Judder
+Juddered
+Juddering
+Judders
+Judson
+Judson's
+Jugoslavia
+Jul
+Jun
+Jung
+Jung's
+Jura
+Jura's
+Juras
+Jutland
+Jutland's
+KS
+KY
+Kahn
+Kahn's
+Kajar
+Kajar's
+Kalmuk
+Kalmuk's
+Kamchatka
+Kamikaze
+Kamikaze's
+Kampala
+Kampala's
+Kampuchea
+Kampuchea's
+Kane
+Kane's
+Kannada
+Kaplan
+Kaplan's
+Karachi
+Karachi's
+Karamazov
+Karamazov's
+Karp
+Karp's
+Kashmir
+Kaskaskia
+Katharine
+Katharine's
+Katowice
+Katowice's
+Katrina
+Katrina's
+Katz
+Kauffman
+Kauffman's
+Kaufman
+Kaufman's
+Keck
+Keck's
+Kelsey
+Kelsey's
+Kemp
+Ken
+Ken's
+Kendall
+Kendall's
+Kennan
+Kennan's
+Kenney
+Kenney's
+Kenton
+Kenton's
+Kenyon
+Kenyon's
+Kernighan
+Kernighan's
+Kerouac
+Kerouac's
+Kerr
+Kerr's
+Kessler
+Kessler's
+Keyes
+Khartoum
+Khartoum's
+Kidde
+Kidde's
+Kieffer
+Kieffer's
+Kiewit
+Kiewit's
+Kigali
+Kigali's
+Kikuyu
+Kikuyu's
+Kilgore
+Kilgore's
+Kilimanjaro
+Kilimanjaro's
+Kimball
+Kimball's
+Kimberly
+Kimberly's
+Kinney
+Kinney's
+Kinshasha
+Kinshasha's
+Kiowa
+Kirchner
+Kirchner's
+Kirov
+Kirov's
+Kitakyushu
+Kitakyushu's
+Klux
+Knapp
+Knapp's
+Knauer
+Knauer's
+Knightsbridge
+Knightsbridge's
+Knossos
+Knott
+Knott's
+Knowlton
+Knowlton's
+Kobayashi
+Kochab
+Kochab's
+Konrad's
+Koppers
+Koran
+Koran's
+Kovacs
+Kovic
+Kovic's
+Kowalewski
+Kowalewski's
+Kowalski
+Kowalski's
+Kowloon
+Krebs
+Krieger
+Krieger's
+Kristin
+Kristin's
+Kronecker
+Kronecker's
+Kruse
+Kruse's
+Kuhn
+Kuhn's
+Kumar
+L'vov
+LDL
+LSI
+LTV
+Laban
+Laban's
+Lacerta
+Lacerta's
+Lachesis
+Lagos
+Laguerre
+Lahore
+Lahore's
+Laidlaw
+Laidlaw's
+Lamar
+Lamar's
+Lamarck
+Lamborghini
+Lamborghini's
+Lamborghinis
+Lana
+Lana's
+Lancelot
+Lancelot's
+Lang
+Lang's
+Langmuir
+Langmuir's
+Lanka
+Lanka's
+Lao
+Larkin
+Larkin's
+Laszlo
+Laszlo's
+Lateran
+Lateran's
+Latinity
+Latrobe
+Latrobe's
+Latvia
+Latvia's
+Laue
+Laue's
+Laughlin
+Laughlin's
+Laurent
+Laurent's
+Lausanne
+Lausanne's
+Lavoisier
+Lavoisier's
+Layton
+Layton's
+Leander
+Leander's
+Lear
+Leeuwenhoek
+Leeuwenhoek's
+Legendre
+Legendre's
+Lehman
+Lehman's
+Leibniz
+Leipzig
+Leipzig's
+Leland
+Leland's
+Lemuel
+Len
+Len's
+Lena
+Lena's
+Lennon
+Lennon's
+Lennox
+Lennox's
+Lenore
+Lenore's
+Leonid
+Leonid's
+Lesotho
+Lesotho's
+Lethe
+Lethe's
+Letitia
+Letitia's
+Leviable
+Levin
+Levin's
+Levitt
+Levitt's
+Lew
+Lew's
+Libby
+Libby's
+Libreville
+Libreville's
+Lieberman's
+Ligget
+Ligget's
+Liggett
+Liggett's
+Lila
+Lila's
+Lilian
+Lilian's
+Lillian
+Lillian's
+Lilly
+Liman
+Lin
+Lin's
+Lind
+Lind's
+Lindbergh
+Lindbergh's
+Lindholm
+Lindholm's
+Lindquist
+Lindquist's
+Lindsay
+Lindsay's
+Lindsey
+Lindsey's
+Lindstrom
+Lindstrom's
+Linnaeus
+Linton
+Lippincott
+Lippincott's
+Lipschitz
+Lipscomb
+Lipscomb's
+Lise
+Lise's
+Lissajous
+Lithuania
+Liverpudlian
+Lodowick
+Lodowick's
+Loeb
+Loeb's
+Loire
+Loki
+Loki's
+Lomb
+Lomb's
+Lombardy
+Lombardy's
+Lome
+Loomis
+Loren
+Loren's
+Lori
+Lori's
+Lorinda
+Lorinda's
+Lotte
+Lotte's
+Lou
+Lou's
+Lounsbury
+Lounsbury's
+Lourdes
+Louvre
+Lowe
+Lowe's
+Lowry
+Lowry's
+Lubell
+Lubell's
+Ludlow
+Ludlow's
+Luis
+Lumpur
+Lund
+Lund's
+Lundberg
+Lundberg's
+Lundquist
+Lundquist's
+Lura
+Lusaka
+Lusaka's
+Lutz
+Luzon
+Luzon's
+Lykes
+Lyman
+Lyman's
+Lyra
+Lyra's
+Lysenko
+Lysenko's
+MDs
+MIPS
+MN
+MO
+MRI
+Mabel
+Mabel's
+MacDougall
+MacDougall's
+MacMahon
+MacMahon's
+Macadamia
+Macassar
+Macaulayan
+Macaulayism
+Macaulayisms
+Macdougall
+Macdougall's
+Machiavellian
+Mackey
+Mackey's
+Maddox
+Madeira
+Madhya
+Madsen
+Madsen's
+Mae
+Mae's
+Mafiosi
+Magellanic
+Magnuson
+Magnuson's
+Magog
+Magog's
+Maharashtra
+Mahayana
+Mahayanist
+Mahoney
+Mahoney's
+Majorca
+Majorca's
+Malabar
+Malabar's
+Malagasy
+Malagasy's
+Malawi
+Malawi's
+Malden
+Malden's
+Maldive
+Maldive's
+Maldives
+Mali
+Mali's
+Maloney
+Maloney's
+Malraux
+Malthus
+Malton
+Malton's
+Manchuria
+Manley
+Manley's
+Mann
+Mann's
+Manuel
+Manuel's
+Mar
+Marc
+Marc's
+Marceau
+Marceau's
+Marcel
+Marcello
+Marcello's
+Marcia
+Marcia's
+Marcie
+Marcie's
+Marco
+Marco's
+Margaret
+Margaret's
+Margery
+Margery's
+Margo
+Margo's
+Marissa
+Marissa's
+Marjory
+Marjory's
+Markham
+Markham's
+Markism
+Markism's
+Marxian
+Maserati
+Maserati's
+Maseratis
+Mateo
+Mateo's
+Matson
+Matson's
+Matsumoto
+Matsumoto's
+Mattson
+Mattson's
+Maurine
+Maurine's
+Mavis
+May
+Mayer
+Mayer's
+Mayo
+Mayo's
+McCallum
+McCallum's
+McCann
+McCann's
+McCarty
+McCarty's
+McConnel
+McConnel's
+McCormick
+McCormick's
+McCullough
+McCullough's
+McDowell
+McDowell's
+McElroy
+McElroy's
+McGee
+McGee's
+McGillicuddy
+McGillicuddy's
+McGinnis
+McGinty
+McGinty's
+McGowan
+McGowan's
+McHugh
+McHugh's
+McKenna
+McKenna's
+McKeon
+McKeon's
+McMahon
+McMahon's
+McMullen
+McMullen's
+McNally
+McNally's
+McNulty
+McNulty's
+Mcadams
+Mcallister
+Mcallister's
+Mcbride
+Mcbride's
+Mccabe
+Mccabe's
+Mccall
+Mccall's
+Mccallum
+Mccallum's
+Mccann
+Mccann's
+Mccarthy
+Mccarthy's
+Mccarty
+Mccarty's
+Mccauley
+Mccauley's
+Mcclain
+Mcclain's
+Mcclellan
+Mcclellan's
+Mcclure
+Mcclure's
+Mccluskey
+Mccluskey's
+Mcconnel
+Mcconnel's
+Mcconnell
+Mcconnell's
+Mccormick
+Mccormick's
+Mccoy
+Mccoy's
+Mccracken
+Mccracken's
+Mccullough
+Mccullough's
+Mcdaniel
+Mcdaniel's
+Mcdermott
+Mcdermott's
+Mcdonald
+Mcdonald's
+Mcdonnell
+Mcdonnell's
+Mcdougall
+Mcdougall's
+Mcdowell
+Mcdowell's
+Mcelroy
+Mcelroy's
+Mcfadden
+Mcfadden's
+Mcfarland
+Mcfarland's
+Mcgee
+Mcgee's
+Mcgill
+Mcgill's
+Mcginnis
+Mcgovern
+Mcgovern's
+Mcgowan
+Mcgowan's
+Mcgrath
+Mcgrath's
+Mcgraw
+Mcgraw's
+Mcgregor
+Mcgregor's
+Mcguire
+Mcguire's
+Mchugh
+Mchugh's
+Mcintosh
+Mcintosh's
+Mcintyre
+Mcintyre's
+Mckay
+Mckay's
+Mckee
+Mckee's
+Mckenna
+Mckenna's
+Mckenzie
+Mckenzie's
+Mckeon
+Mckeon's
+Mckesson
+Mckesson's
+Mckinley
+Mckinley's
+Mckinney
+Mckinney's
+Mcknight
+Mcknight's
+Mclaughlin
+Mclaughlin's
+Mclean
+Mclean's
+Mcleod
+Mcleod's
+Mcmahon
+Mcmahon's
+Mcmillan
+Mcmillan's
+Mcmullen
+Mcmullen's
+Mcnally
+Mcnally's
+Mcnaughton
+Mcnaughton's
+Mcneil
+Mcneil's
+Mcnulty
+Mcnulty's
+Mcpherson
+Mcpherson's
+Medford
+Medford's
+Medusan
+Meg
+Meg's
+Meier
+Meier's
+Meiji
+Melcher
+Melcher's
+Melpomene
+Melpomene's
+Mendel
+Mendel's
+Mendelian
+Menorca
+Menzies
+Merck
+Merck's
+Merritt
+Merritt's
+Mervin
+Mervin's
+Mesopotamia
+Metcalf
+Metcalf's
+Methuen
+Methuen's
+Metrecal
+Metzler
+Metzler's
+Michel
+Michel's
+Michele
+Michele's
+Michelle
+Michelle's
+Millikan
+Millington
+Milne
+Miltonian
+Miltonism
+Miltonist
+Mindanao
+Mindanao's
+Minos
+Minot's
+Minotaur
+Minotaur's
+Minsk
+Minsk's
+Minsky
+Minsky's
+Mirfak
+Mirfak's
+Mizar
+Mizar's
+Moe
+Moe's
+Moen
+Moen's
+Mogadiscio
+Moghul
+Mohammedanism
+Mohr
+Moiseyev
+Moiseyev's
+Moldavia
+Moloch
+Moluccas
+Mona
+Mona's
+Monash
+Mongolianism
+Monmouth
+Monmouth's
+Monoceros
+Monongahela
+Monongahela's
+Montenegrin
+Montenegrin's
+Monteverdi
+Monteverdi's
+Montmartre
+Montmartre's
+Montrachet
+Montrachet's
+Moran
+Moran's
+Moresby
+Moresby's
+Morley
+Morley's
+Morrill
+Morrill's
+Morris
+Morrissey
+Morrissey's
+Moser
+Moser's
+Moulton
+Moulton's
+Mouton
+Moyer
+Moyer's
+Mpc
+Mt
+Mudd
+Mudd's
+Mueller
+Mueller's
+Muenster
+Mukden
+Mukden's
+Muong
+Muong's
+Muzo
+Muzo's
+Mynheer
+Myra
+Myra's
+Mysore
+NC
+NCO
+NE
+NH
+NIH
+NIMH
+NJ
+NM
+NMR
+NNE
+NNW
+NRC
+NTIS
+NV
+NW
+NY
+NYC
+NYT
+NYU
+Nadine
+Nadine's
+Nagoya
+Nagoya's
+Nagy
+Nagy's
+Nair
+Nair's
+Nakayama
+Narbonne
+Narbonne's
+Narragansett
+Narragansett's
+Nate's
+Neal
+Nebuchadnezzar
+Nebuchadnezzar's
+Ned
+Ned's
+Neff
+Neff's
+Nehru
+Nehru's
+Neil
+Neil's
+Nell
+Nell's
+Nellie
+Nellie's
+Nelsen
+Nelsen's
+Ness
+Neva
+Neva's
+Nevins
+Newbold
+Newbold's
+Newton
+Newton's
+Nguyen
+Nguyen's
+Niamey
+Niamey's
+Nibelung
+Nicholls
+Nicosia
+Nicosia's
+Niger
+Niger's
+Nikko
+Nikko's
+Nikolai
+Nikolai's
+Nineveh
+Noetherian
+Nolan
+Nolan's
+Noll
+Noll's
+Nora
+Nora's
+Nordhoff
+Nordhoff's
+Nordic
+Nordstrom
+Nordstrom's
+Noreen
+Noreen's
+Northrop
+Northrop's
+Northrup
+Northrup's
+Nostrand
+Nostrand's
+Nov
+Novak
+Novak's
+Novosibirsk
+Novosibirsk's
+Nubia
+Nubia's
+Nyquist
+Nyquist's
+O'Neill
+O'Neill's
+OSF
+OSF'S
+Oceania
+Oct
+Odin
+Ojibwa
+Olav
+Olav's
+Olduvai
+Oligocene
+Olin
+Olin's
+Olivier
+Olivier's
+Onondaga
+Onondaga's
+Ophiucus
+Oresteia
+Oresteia's
+Orestes
+Orin
+Orinoco
+Orion
+Orion's
+Orkney
+Orkney's
+Orly
+Orono
+Orono's
+Orphically
+Orr
+Orr's
+Orville
+Orville's
+Osgood
+Osgood's
+Osiris
+Otis
+Ott
+Ott's
+Ouagadougou
+PR
+PVC
+Palladian
+Palo
+Panamanian
+Pandanus
+Pangaea
+Paoli
+Paoli's
+Papua
+Papua's
+Paraguayan
+Paraguayan's
+Paraguayans
+Paramus
+Pareto
+Pareto's
+Parke
+Parke's
+Parkinsonian
+Parmesan
+Parr
+Parr's
+Parrs
+Parsi
+Parsifal
+Parsifal's
+Parthia
+Paso
+Paterson
+Paterson's
+Patti
+Patti's
+Paulo
+Paulo's
+Paulus
+Pavlovian
+Paz
+Peale
+Peale's
+Pease
+Peiping
+Peloponnese
+Pembroke
+Pembroke's
+Penelope
+Penelope's
+Penh
+Penrose
+Pentateuch
+Percival
+Percival's
+Periclean
+Perilla
+Perle
+Perle's
+Permian
+Perseid
+Persephone
+Persephone's
+Peter
+Peters
+Phelps
+Phillip
+Phillip's
+Phipps
+Phobos
+Phoenicia
+Phoenicia's
+Pickett
+Pickett's
+Pict
+Piedfort
+Piedmont
+Pilate
+Pinsky
+Pinsky's
+Piotr
+Piotr's
+Piraeus
+Piscataway
+Piscataway's
+Pizarro
+Pl
+Pollard
+Pollard's
+Poly
+Polyhymnia
+Polynesia
+Polynesia's
+Polys
+Ponce
+Ponchartrain
+Ponchartrain's
+Poole
+Poole's
+Porte
+Porte's
+Portia
+Porto
+Posner
+Posner's
+Poynting
+Poynting's
+Pradesh
+Prado
+Pretorian
+Priam
+Pritchard
+Pritchard's
+Procter
+Procter's
+Proserpine
+Proserpine's
+Protista
+Provence
+Pugh
+Punic
+Punjab
+Punjab's
+Punjabi
+Pusan
+Pusan's
+Pusey
+Pusey's
+Putnam
+Putnam's
+Pyle
+Pyle's
+Pyongyang
+Pyongyang's
+Pyotr
+Pyotr's
+QED
+QM
+Qatar
+Qatar's
+Queensland
+Queensland's
+Quezon
+Quezon's
+Quichua
+Quirinal
+Quito
+Quito's
+Quixotism
+RFI
+RNA
+Rabat
+Rabat's
+Rabin
+Rabin's
+Rae
+Rae's
+Rafferty
+Rafferty's
+Ragusan
+Raman
+Raman's
+Ramo
+Ramo's
+Ranier
+Ranier's
+Rankin
+Rankin's
+Rankine
+Raritan
+Raritan's
+Rastus
+Ratfor
+Raul
+Raul's
+Recife
+Recife's
+Redmond
+Redmond's
+Redondo's
+Regis
+Reid
+Reid's
+Remy
+Rena
+Rena's
+Renault
+Renault's
+Rene
+Rene's
+Rensselaer
+Rensselaer's
+Reub
+Reub's
+Reykjavik
+Reykjavik's
+Rhineland
+Rhoda
+Rhoda's
+Rhode
+Rica
+Ricanism
+Rico
+Riemannian
+Riga
+Rigel
+Rigel's
+Riordan
+Riordan's
+Rocco
+Rochford
+Romanesque
+Romeldale
+Roquemore
+Rosenblum
+Rosenblum's
+Rosenthal
+Rosenthal's
+Rosenzweig
+Rosenzweig's
+Rothschild
+Rothschild's
+Rourke
+Rowe
+Rowe's
+Roxbury
+Roxbury's
+Royce
+Rubaiyat
+Ruben
+Ruben's
+Rubin
+Rubin's
+Rudolf
+Rudolf's
+Rudyard
+Rudyard's
+Runge
+Russo
+Russo's
+Ruthful
+Ruthfully
+Ruthfulness
+Rwanda
+Rwanda's
+Rydberg
+Rydberg's
+SC
+SCM
+SD
+SE
+SIAM
+SIDS
+SIGABRT
+SIGALRM
+SIGBUS
+SIGCHLD
+SIGCLD
+SIGCONT
+SIGEMT
+SIGFPE
+SIGHUP
+SIGILL
+SIGINT
+SIGIO
+SIGIOT
+SIGKILL
+SIGPIPE
+SIGPROF
+SIGQUIT
+SIGSEGV
+SIGSTOP
+SIGSYS
+SIGTERM
+SIGTRAP
+SIGTSTP
+SIGTTIN
+SIGTTOU
+SIGURG
+SIGUSR
+SIGVTALRM
+SIGWINCH
+SIGXCPU
+SIGXFSZ
+SOS
+SSE
+SST
+SSW
+SUNY
+SW
+Sabina
+Sabina's
+Sachs
+Sachsen
+Sadler
+Sadler's
+Sagittarius
+Sal
+Salesian
+Salina
+Salina's
+Salish
+Salle
+Sally
+Salton
+Samaritan
+San
+Sana
+Sanborn
+Sanborn's
+Sanderling
+Santo
+Santos
+Sappho
+Sappho's
+Saracen
+Saracen's
+Saracens
+Saran
+Sardinia
+Sardinia's
+Sarge's
+Satanism
+Satanist
+Saturnism
+Saul
+Saul's
+Sault
+Savoy
+Savoyard
+Savoyards
+Scala
+Scala's
+Scarborough
+Scarlatti
+Scarlatti's
+Scarsdale
+Scarsdale's
+Schantz
+Scheherazade
+Scheherazade's
+Schiller
+Schiller's
+Schlesinger
+Schlesinger's
+Schloss
+Schnabel
+Schnabel's
+Schoenberg
+Schoenberg's
+Schofield
+Schofield's
+Schottky
+Schottky's
+Schuyler
+Schuyler's
+Schuylkill
+Schwab
+Schweitzer
+Schweitzer's
+Seagram
+Seagram's
+Sean
+Sean's
+Sebring
+Sebring's
+Segovia
+Seidel
+Selena
+Selena's
+Selkirk
+Selkirk's
+Selwyn
+Selwyn's
+Sep
+Sepoy
+Serbia
+Serbia's
+Sergei
+Sergei's
+Serpens
+Seth
+Seth's
+Seton
+Severn
+Severn's
+Sextans
+Seychelles
+Shafer
+Shafer's
+Shaffer
+Shaffer's
+Shannon
+Shantung
+Shari
+Shari's
+Sharpe
+Shattuck
+Shattuck's
+Shea
+Shedir
+Sheehan
+Sheehan's
+Shepard
+Sheppard
+Sheppard's
+Sheri
+Sheri's
+Sherrill
+Sherrill's
+Shipley
+Shiva
+Shiva's
+Shmuel
+Shockley
+Shockley's
+Shoshone
+Shoshone's
+Shu
+Shu's
+Shulman
+Shulman's
+Sian
+Sian's
+Sibley
+Siegel
+Siegel's
+Sieglinda
+Sieglinda's
+Siegmund
+Siegmund's
+Siemens
+Siena
+Sifford
+Siggraph
+Sigil
+Simla
+Simonson
+Simonson's
+Sims
+Sinbad
+Sinbad's
+Singborg
+Sino
+Sitar
+Sitarist
+Skopje
+Slavonic
+Slocum
+Slocum's
+Slovakia
+Slovakia's
+Slovenia
+Slovenia's
+Smalley
+Smalley's
+Smithson
+Smithson's
+Smyrna
+Smyrna's
+Smythe
+Soc
+Societe
+Soddy
+Solon
+Soloviev
+Somalia
+Sommerfeld
+Sommerfeld's
+Sonenberg
+Sony
+Sony's
+Southernwood
+Southey
+Spacewar
+Spaulding
+Spaulding's
+Speakerphone
+Spector's
+Spica
+Spicas
+Spiro
+Spiro's
+Spitz
+Sposato
+Sprague
+Sprague's
+Sproul
+Sproul's
+Sri
+Sri's
+Stahl
+Stahl's
+Stanhope
+Stanhope's
+Stargate
+Stargate's
+Staunton
+Steele
+Steele's
+Steen
+Steen's
+Stefan
+Stefan's
+Stendhal
+Stendler
+Sternberg
+Sternberg's
+Stone
+Stone's
+Storey
+Storeyed
+Storeys
+Stratton
+Stratton's
+Strickland
+Strickland's
+Strindberg
+Strom
+Strom's
+Sturbridge
+Sturbridge's
+Sturm
+Sturm's
+Stylar
+Subapically
+Sumeria
+Sumner
+Sumner's
+Sus
+Svetlana
+Svetlana's
+Swansea
+Swansea's
+Swarthout
+Swarthout's
+Swink
+Sykes
+Sylow
+Sylvie's
+Synge
+Szilard
+TA
+TN
+TOEFL
+TTY
+TWX
+TX
+Talmudism
+Tamil
+Tanaka
+Tanaka's
+Tananarive
+Tarbell
+Tarbell's
+Tartary
+Tass
+Taurus
+Tegucigalpa
+Tegucigalpa's
+Terpsichore
+Terpsichore's
+Terre
+Terre's
+Tesseract
+Thalia
+Thalia's
+Thayer
+Thayer's
+Thea
+Thea's
+Thermofax
+Thessalonian
+Thessalonians
+Thessaly
+Thetis
+Thomistic
+Thomistic's
+Thorstein
+Thrace
+Thrace's
+Thracian
+Thuban
+Thuban's
+Tientsin
+Tientsin's
+Tina
+Tina's
+Tirana
+Tirana's
+Tito's
+Toby
+Toby's
+Tom
+Tom's
+Tomlinson
+Tomlinson's
+Tompkins
+Tories
+Torrance
+Torrance's
+Tory
+Transite
+Transite's
+Transputer
+Transvaal
+Transvaal's
+Transylvania's
+Trevelyan
+Trevor
+Triangulum
+Triassic
+Trichinella
+Trichinella's
+Triplett
+Triplett's
+Trobriand
+Troy
+Truk
+Tutankhamen
+Tutenkhamon
+Twombly
+Twombly's
+Tyburn
+Tyburn's
+Tyrannosaurus's
+Tzeltal
+UK
+USGS
+USIA
+USN
+UT
+UV
+Ukraine
+Ukraine's
+Ulan
+UniPlus
+UniPlus's
+UniSoft
+UniSoft's
+Urania
+Urdu
+Uri
+Uris
+Urquhart
+Utrecht
+Utrecht's
+VA
+VAX
+VT
+Vaduz
+Valery
+Valery's
+Valletta
+Valletta's
+Valois
+Valparaiso
+Vancement
+Vanderpoel
+Vanderpoel's
+Varitype
+Varitype's
+Vasquez
+Vasquez's
+Vassar
+Vassar's
+Vaughan
+Vaughan's
+Veda
+Veda's
+Veganism
+Vella
+Vella's
+Veneto
+Veneto's
+Verde
+Verde's
+Verderer
+Verdi
+Verdi's
+Verna
+Verna's
+Versatec
+Versatec's
+Vesuvius
+Vida
+Vida's
+Vientiane
+Vientiane's
+Vikram
+Vinci
+Vinci's
+Virgil
+Virgil's
+Vito
+Vito's
+Volterra
+Volterra's
+Voss
+Vought
+Vought's
+Vreeland
+Vreeland's
+Vulcanism
+WA
+WAC
+WI
+WV
+WY
+Waals
+Wadsworth
+Wadsworth's
+Wagnerian
+Wahl
+Wahl's
+Waite
+Waite's
+Waldron
+Waldron's
+Wallis
+Waltham
+Waltham's
+Wappinger
+Wappinger's
+Warburton
+Watanabe
+Watanabe's
+Webb
+Webb's
+Wehr
+Wehr's
+Wei
+Wei's
+Weierstrass
+Weisenheimer
+Weller
+Welles
+Welton
+Werther
+Werther's
+Whalen
+Whalen's
+Whatley
+Whatley's
+Whitaker
+Whitaker's
+Whitehorse
+Whitehorse's
+Wightman
+Wightman's
+Wilkie
+Wilkie's
+Wilkins
+Willa
+Willa's
+Willis
+Wiltshire
+Wiltshire's
+Winchester
+Wisenheimer
+Witt
+Witt's
+Wittgenstein
+Wittgenstein's
+Wolfe
+Wolfe's
+Wolff
+Wolff's
+Wong
+Wong's
+Woodstock
+Woodstock's
+Woody
+Woody's
+Wotan
+Wotan's
+Wu
+Wu's
+Wyatt
+Wyatt's
+Wyeth
+Wyeth's
+Wylie
+Wylie's
+Wynn
+Wynn's
+Xenakis
+Xhosa
+Yankton
+Yankton's
+Yaounde
+Yaounde's
+Yarmouth
+Yarmouth's
+Yellowknife
+Yellowknife's
+Yellowstone
+Yellowstone's
+Yorkshire
+Yorkshire's
+Yost
+Yost's
+Zagreb
+Zagreb's
+Zambia
+Zambia's
+Zan
+Zan's
+Zoe
+Zoe's
+Zorn
+ab
+abacterial
+abacus
+abacuses
+abandonee
+abashment
+abatis
+abatises
+abattoir
+abaxial
+abbacy
+abbas
+abberations
+abbreviator
+abdicable
+abdicator
+abduce
+abduced
+abducens
+abducent
+abducentes
+abducing
+abeam
+abecedarian
+aberrance
+aberrancy
+aberrated
+aberrational
+abetment
+abhorrence
+abidance
+abiogenesis
+abiogenetic
+abiogenetical
+abiogenetically
+abiogenist
+abiological
+abiologically
+abiotic
+abiotically
+abjuration
+ablaut
+abloom
+abluted
+ablutionary
+abnegate
+abnegates
+abnegation
+abnegator
+aboil
+abolishable
+abolitionary
+abolitionism
+abomasal
+abominably
+abominator
+abominators
+aboral
+aborally
+abortifacient
+abortionist
+abortionists
+abovementioned
+abracadabra
+abradable
+abradant
+abreact
+abridgement
+abrin
+abroach
+abruption
+abscise
+abscised
+abscisin
+abscising
+abscission
+absinth
+absolutism
+absolutist
+absolutistic
+absorbability
+absorbable
+absorbance
+absorbancy
+absorbant
+absorbtions
+absorptance
+absorptional
+abstemious
+abstentious
+abstractable
+abstractional
+abstrict
+abstriction
+abstrictions
+abstrusity
+absurdism
+absurdist
+absurdum
+abubble
+abuilding
+abutilon
+abuttals
+abuzz
+abyssal
+academe
+academical
+academicism
+academism
+acanthocephalan
+acanthopterygian
+acanthus
+acanthuses
+acarpellous
+acarpelous
+acatalectic
+acaulescence
+acaulescent
+accelerando
+accentless
+acceptation
+accessary
+accessibleness
+accessional
+accessorial
+acciaccatura
+accidence
+accidentalism
+accidentalist
+accipiter
+acclivity
+accommodational
+accommodator
+accommodators
+accompanyist
+accompanyists
+accomplishable
+accordionist
+accordionists
+accostable
+accountantship
+accreditable
+accrete
+accreted
+accreting
+accretionary
+accretive
+accruable
+accruement
+acculturational
+acculturationist
+accumbency
+accumbent
+accumulable
+accurses
+accursing
+accurst
+accusatory
+accusor
+accustomation
+acedia
+acellular
+acentric
+acephalous
+acerb
+acerbate
+acerbic
+acerbically
+acerbity
+acervate
+acervately
+acervation
+acetal
+acetaldehyde
+acetamide
+acetaminophen
+acetification
+acetifier
+acetify
+acetonic
+acetous
+acetyl
+acetylate
+acetylation
+acetylative
+acetylenic
+achier
+achiest
+achiness
+achromat
+achromatically
+achromaticity
+achromatism
+achy
+acidhead
+acidiferous
+acidifiable
+acidification
+acidifier
+acidify
+acidimeter
+acidimeter's
+acidimeters
+acidimetric
+acidimetry
+acidulant
+acidulate
+acidulation
+acidulent
+acinus
+acock
+acold
+acquaintanceship
+acquirement
+acquisitional
+acquisitionist
+acquisititious
+acquitment
+acquittance
+acridity
+acrobacy
+acrobatically
+acrocentric
+acrodont
+acronymic
+acronymically
+acropetal
+acropetally
+acrophobia
+acrophobic
+acrostic
+acrostical
+acrostically
+actability
+actable
+actinolite
+actionable
+actionably
+actionless
+activistic
+actorish
+actuary
+aculeate
+acuminate
+acumination
+acupuncture
+acyl
+acylate
+acylated
+acylates
+adamance
+adamancy
+adamantine
+adaptaplex
+adaptational
+adaptationally
+adaptitude
+adaptivity
+adaxial
+addable
+addible
+addlepated
+addressor
+adducible
+adenine
+adenoid
+adenoidal
+adenoids
+adenoma
+adenomatous
+adenosine
+adherend
+adhesional
+adiabaticlly
+adieux
+adipic
+adipose
+adiposity
+adject
+adjudicator
+adjudicatory
+adjunction
+adjuration
+adjuratory
+adjustability
+adjustmental
+adjutancy
+adjuvant
+adle
+adman
+admeasure
+admeasurement
+administrant
+administrational
+administrationist
+admirability
+admissive
+admitter
+admitters
+admonitorily
+admonitory
+adoptability
+adoptable
+adoptee
+adoptees
+adoptianism
+adoptianist
+adoptionism
+adoptionist
+adorability
+adorably
+adoze
+adposition
+adrenalin
+adrenergic
+adrenocortical
+adscititious
+adsorbability
+adsorbable
+adsorbent
+adulator
+adulatory
+adulterant
+adulterator
+adulteress
+adulteresses
+adulterine
+adultlike
+adust
+advection
+advections
+advective
+adventuresome
+adventuresomeness
+adventuress
+adventuresses
+adventurism
+adventurist
+adventuristic
+adventurists
+adversative
+adversatively
+advertence
+advertency
+advertent
+advertently
+advocator
+adynamic
+adz
+adze
+aeolotropic
+aeolotropy
+aeonian
+aeonic
+aerialist
+aerie
+aerier
+aerily
+aero
+aeroballistic
+aeroballistics
+aerobatic
+aerobatics
+aerobe
+aerobically
+aerobiological
+aerobiologically
+aerobiology
+aerobiosis
+aerobiotic
+aerobiotically
+aerodynamical
+aerodynamically
+aerodynamicist
+aerodyne
+aeroembolism
+aerogene
+aerogenes
+aerogram
+aerogram's
+aerograms
+aerographer
+aerography
+aerolite
+aerolith
+aerolitic
+aerological
+aerologist
+aerology
+aeromagnetic
+aeromechanics
+aeromedical
+aeromedicine
+aerometeorograph
+aerometer
+aerometer's
+aerometers
+aeronaut
+aeroneurosis
+aeronomer
+aeronomic
+aeronomical
+aeronomics
+aeronomist
+aeropause
+aerosphere
+aerostat
+aerostatics
+aerothermodynamics
+aery
+aesthesiometer
+aesthesiometer's
+aesthesiometers
+afeard
+afeared
+affability
+affably
+affaire
+affaires
+affectability
+affectable
+affectate
+affectional
+affectionally
+affectionless
+affectivity
+affectless
+affectlessness
+affiance
+affiant
+afficionado
+affine
+affined
+affinely
+affirmable
+affirmance
+affixable
+affixal
+affixation
+affixial
+affixment
+affluency
+afflux
+affray
+affusion
+afghani
+aficionada
+aflatoxin
+aflutter
+afreet
+afrika
+afrikaans
+afterburner
+afterburners
+aftercare
+afterclap
+afterdamp
+afterdeck
+afterimage
+afterpiece
+aftertaste
+aftertax
+aftertime
+afterword
+afterworld
+agamete
+agamic
+agamically
+agapeic
+agapeically
+agave
+agaze
+ageing
+agelong
+agendaless
+agendum
+agene
+agenesis
+agentry
+aggie
+aggies
+agglutinability
+agglutinogen
+agglutinogenic
+aggradation
+aggrade
+aggregational
+aggress
+aggressivity
+agio
+agios
+agitational
+agitato
+agitprop
+aglare
+aglitter
+agnate
+agnatic
+agnatically
+agnation
+agnomen
+agnosticism
+agon
+agone
+agonic
+agonist
+agonistic
+agonistical
+agonistically
+agonists
+agoraphobia
+agoraphobic
+agouti
+agrarianism
+agreeability
+agriculturalist
+agriculturist
+agrimony
+agriology
+agrobiological
+agrobiologically
+agrobiology
+agrologic
+agrological
+agrologically
+agrologist
+agrology
+agronomic
+agronomical
+agronomically
+agronomics
+agronomist
+agronomy
+aground
+aguish
+aguishly
+ahistoric
+ahistorical
+ahold
+aidman
+aigrette
+ailanthus
+aile
+airbrush
+airburst
+airbus
+aircrew
+airdrome
+airfreight
+airglow
+airmanship
+airmobile
+airpost
+airscrew
+airsick
+airsickness
+airstream
+airwave
+airwaves
+airworthiness
+airworthy
+aitch
+alabastrine
+alack
+alacritous
+alai
+alamogordo
+alarmism
+alary
+alate
+alated
+alation
+alb
+albedo
+albinic
+albinism
+albino
+albinotic
+albuminoid
+albuminous
+alcaic
+alcazar
+alchemic
+alchemical
+alchemically
+alchemist
+alchemistic
+alchemistical
+alcoholically
+alcoholometer
+alcoholometer's
+alcoholometers
+alcoholometry
+aldermanic
+aldrin
+aleatoric
+aleatory
+alehouse
+alembic
+alexandrine
+alexandrite
+alexia
+alfa
+algal
+algebraist
+algicidal
+algicide
+algid
+algidity
+algin
+algophobia
+alia
+alicyclic
+alidade
+alienability
+alienable
+alienage
+alienator
+alienee
+alienism
+alienist
+alienor
+aliform
+alightment
+alimentary
+alimentation
+alimentative
+aline
+alinement
+aliphatic
+aliquot
+aliquot's
+aliquots
+alizarin
+alk
+alkahest
+alkahestic
+alkalescence
+alkalescent
+alkalify
+alkalimeter
+alkalimeter's
+alkalimeters
+alkalimetry
+alkalinity
+alkaloidal
+alkalosis
+alla
+allan
+allegate
+allegorist
+allelic
+allelism
+allelomorph
+alleluia
+allemand
+allergen
+allergenic
+allergist
+allery
+alleviatory
+allheal
+alliaceous
+allium
+allocatable
+allocution
+allogamous
+allogamy
+allogeneic
+allograft
+allograph
+allographic
+allomerism
+allomerous
+allometric
+allometry
+allomorph
+allomorphic
+allomorphism
+allonge
+allons
+allopath
+allopathic
+allopathically
+allopathy
+allopatric
+allopatrically
+allopatry
+allophane
+allopurinol
+allosteric
+allosterically
+allotee
+allotransplant
+allotransplantation
+allotrope
+allotropically
+allotropy
+allottee
+allottees
+allotype
+allotypic
+allotypically
+allotypy
+allover
+allseed
+alluvion
+allyl
+allylic
+almandine
+almandite
+almsgiver
+almsgiving
+almshouse
+alogical
+alogically
+aloin
+alongshore
+alpaca
+alpenglow
+alpenstock
+alpestrine
+alphameric
+alphamerical
+alphamerics
+alphanumerical
+alphanumerically
+alpinism
+alpinist
+alright
+altarpiece
+altazimuth
+alterability
+alterably
+alterate
+alterative
+alterman
+altern
+althea
+altimetry
+altitudinal
+altitudinous
+altocumulus
+altricial
+alumina
+aluminate
+aluminosilicate
+aluminous
+alunite
+alveolate
+alveolation
+alyssum
+alytical
+amah
+amalgamator
+amanita
+amanuenses
+amaranth
+amassment
+amative
+amatively
+amativeness
+amaurosis
+amaurotic
+amazonite
+ambage
+ambages
+ambagious
+ambassadorial
+ambassadorship
+ambassadress
+ambergris
+ambidexterity
+ambience
+ambiences
+ambit
+ambitionless
+ambiversion
+ambiversive
+ambivert
+ambrotype
+ambsace
+ambulacral
+ambulacrum
+ambulate
+ambulation
+ambulatorily
+ambushment
+ameliorator
+amelioratory
+amenabilities
+amenability
+amenably
+amendable
+amendatory
+amende
+ament
+amentia
+amerce
+amercement
+amerciable
+amercing
+ametropia
+ametropic
+ami
+amiability
+amiably
+amicability
+amidships
+amiens
+amine
+amis
+amitosis
+amitotic
+amitotically
+amitrole
+ammino
+ammoniacal
+ammoniate
+ammoniation
+ammonification
+ammonifier
+ammonify
+ammonite
+ammonites
+ammonitic
+ammonoid
+amnesia
+amnesiac
+amnesic
+amnestic
+amnia
+amniocentesis
+amnion
+amniote
+amniotic
+amoeban
+amoebiasis
+amoebic
+amoebocyte
+amoeboid
+amoralism
+amoretto
+amorphism
+amort
+amphibia
+amphibole
+amphibolite
+amphibolitic
+amphioxis
+amphioxus
+amphipathic
+amphiploid
+amphipod
+amphitheatric
+amphitheatrical
+amphitheatrically
+amphitropous
+amplexicaul
+amplexus
+amplidyne
+ampul
+ampule
+amputator
+amputee
+amra
+amuck
+amygdaloid
+amylolytic
+ana
+anabaptism
+anabasis
+anabatic
+anabiosis
+anabiotic
+anabolic
+anabolism
+anachronic
+anachronous
+anachronously
+anaclitic
+anacoluthic
+anacoluthically
+anaculture
+anadiplosis
+anaerobe
+anaerobically
+anaerobiosis
+anaglyphic
+anagrammatic
+anagrammatical
+anagrammatically
+analemma
+analemma's
+analemmas
+analeptic
+analgesia
+analgetic
+analogic
+analogist
+analphabet
+analphabetic
+analphabetism
+analysand
+anaphase
+anaphasic
+anaphylaxis
+anaplasia
+anaplastic
+anarch
+anarchism
+anarchistic
+anarcho
+anastasia
+anastigmat
+anastrophe
+anatomist
+anatoxin
+anatropous
+ancestress
+anchoress
+anchoret
+anchoritic
+anchoritically
+anchorless
+anchorman
+ancientry
+andalusite
+andante
+andantino
+andesine
+andesite
+andesitic
+andiron
+andradite
+androgen
+androgenic
+androgyny
+android
+anecdotage
+anecdotalist
+anecdotalists
+anecdotic
+anecdotical
+anecdotically
+anecdotist
+anemograph
+anemographic
+anemometric
+anemometrical
+anent
+aneroid
+aneurism
+aneurysm
+aneurysmal
+anfractuosity
+anfractuous
+angary
+angelical
+angelically
+angerless
+angina
+anginal
+anginose
+angiocardiographic
+angiocardiography
+anglesite
+angleworm
+anglia
+anglice
+anglicism
+angularity
+angulation
+ani
+anile
+animalcular
+animalcule
+animalculum
+animalism
+animalist
+animalistic
+animality
+animallike
+animist
+animistic
+animus
+aniseed
+aniseikonia
+anisette
+anisotropically
+anisotropism
+ankerite
+ankh
+anklebone
+anklebones
+anklet
+annelid
+annexational
+annexationist
+annexe
+annihilator
+annihilatory
+annotator
+annotators
+annuary
+annuitant
+annularity
+annulate
+annulated
+annulately
+annulation
+annulet
+annuli
+annunciatory
+annunicates
+anodal
+anodally
+anodically
+anodyne
+anodynic
+anointment
+anomalistic
+anomalistical
+anomer
+anomeric
+anonym
+anorectic
+anoretic
+anorexigenic
+anorthic
+anorthite
+anorthitic
+anorthosite
+anosmia
+anosmic
+anovulant
+anovulatory
+anoxemia
+anoxemic
+anoxia
+anoxic
+anserine
+antecede
+antecedence
+antecessor
+antechamber
+antechambers
+antechoir
+antediluvian
+antefix
+antefixal
+anteing
+antemortem
+antenatal
+antennal
+antennule
+anteroom
+anterooms
+anthelion
+anthesis
+anthill
+anthologist
+anthracitic
+anthracnose
+anthrax
+anthrop
+anthropic
+anthropical
+anthropocentric
+anthropocentrically
+anthropocentricity
+anthropogenesis
+anthropogenetic
+anthropography
+anthropoid
+anthropometrical
+anthropometrically
+anthropomorphism
+anthropomorphist
+anthropopathism
+anthropophagous
+anthropophagus
+anthropophagy
+anthroposophy
+antiaircraft
+antianxiety
+antibiosis
+antibiotically
+antiblack
+antiblackism
+antically
+anticancer
+anticancerous
+anticatalyst
+anticholinergic
+anticipant
+anticipants
+anticipatable
+anticipator
+anticlerical
+anticlericalism
+anticlimactical
+anticlimactically
+anticlimax
+anticlimaxes
+anticlinal
+anticline
+anticlockwise
+anticoagulant
+anticoagulate
+anticodon
+anticonvulsant
+anticonvulsive
+antidepressant
+antiderivative
+antidiuretic
+antidotal
+antidotally
+antienzyme
+antiestablishment
+antifertility
+antiform
+antifouling
+antifriction
+antifungal
+antigenic
+antigenically
+antigenicity
+antiglobulin
+antigorite
+antigravity
+antihemophilic
+antihistamine
+antihistaminic
+antihypertensive
+antiknock
+antileukemic
+antilitter
+antilog
+antilogarithm
+antilogarithms
+antimacassar
+antimacassars
+antimagnetic
+antimalarial
+antimalarials
+antimedieval
+antimedieval's
+antimedievals
+antimetabolite
+antimitotic
+antimonial
+antimonic
+antimonious
+antineoplastic
+antineutrino
+antineutron
+antinodal
+antinode
+antinovel
+antinovelist
+antinucleon
+antioxidant
+antiparasitic
+antiparticle
+antipathetic
+antipathetically
+antiperiodic
+antiperiplanar
+antipersonnel
+antiphlogistic
+antiphon
+antiphonary
+antiphony
+antiphrasis
+antipodal
+antipodean
+antipoetic
+antipollution
+antipope
+antiproton
+antipyretic
+antipyrine
+antiquarianism
+antirheumatic
+antirrhinum
+antisemite
+antisemite's
+antisemites
+antisepsis
+antiseptically
+antispasmodic
+antistrophe
+antistrophic
+antistrophically
+antitank
+antitoxic
+antitrades
+antitubercular
+antituberculous
+antitumor
+antitumoral
+antitussive
+antivenin
+antiviral
+antivitamin
+antonym
+antonymic
+antonymous
+antonyms
+antonymy
+antrorse
+antrorsely
+anywise
+aortal
+aortic
+aortographic
+aortography
+apalachicola
+apartmental
+apathetically
+apatite
+apeak
+apelike
+aperient
+aperiodically
+aperitif
+aphaeresis
+aphaeretic
+aphanite
+aphanitic
+aphasiac
+aphelion
+aphetic
+aphetically
+aphides
+aphorist
+aphoristic
+aphoristically
+aphotic
+aphrodisiac
+aphrodisiacal
+aphyllous
+aphylly
+apian
+apiarian
+apiarist
+apices
+apiculate
+apicultural
+apiculture
+apiculturist
+aplacental
+aplanatic
+aplasia
+aplastic
+apocalyptical
+apocalyptically
+apocalypticism
+apocalyptism
+apocalyptist
+apocarpous
+apocarpy
+apochromatic
+apocope
+apocrine
+apodal
+apodeictic
+apodictic
+apodictically
+apodosis
+apodous
+apogamic
+apogamous
+apogean
+apolitical
+apolitically
+apollinaire
+apologie
+apologue
+apolune
+apomixis
+apomorphine
+aponeurosis
+aponeurotic
+apoplectic
+apoplectically
+apoplexy
+aport
+aposematic
+aposematically
+apostasy
+apostleship
+apostolate
+apostolicity
+apostrophic
+apothecial
+apothecium
+apothegm
+apothegmatic
+apothegmatical
+apothegmatically
+apothem
+apotropaic
+apotropaically
+appaloosas
+apparitional
+appealability
+appealable
+appeasable
+appellee
+appendant
+appendectomy
+appendicular
+apperceive
+apperception
+apperceptive
+appestat
+appetence
+appetency
+appetent
+applaudable
+applaudably
+applicatory
+appointe
+appomattox
+apport
+appose
+apposed
+apposing
+appositional
+appositionally
+appraisement
+appreciator
+appreciatory
+apprehensibly
+appressed
+approbatory
+approvable
+approvably
+approx
+approximable
+approximant
+appurtenant
+apractic
+apraxia
+apraxic
+apriority
+apsidal
+apsides
+apterous
+apteryx
+aptitudinal
+aptitudinally
+apyrase
+aquacade
+aquaculture
+aquafortis
+aqualunger
+aquamarine
+aquanaut
+aquaplane
+aquaplaner
+aquarelle
+aquarellist
+aquarist
+aquatically
+aquatint
+aquatinter
+aquatintist
+aquavit
+aquicultural
+aquiculture
+aquidneck
+aquiferous
+aquilegia
+aquiline
+aquilinity
+aquiver
+arability
+arachnoid
+arbitrable
+arbitrageur
+arbitral
+arbitrament
+arbitrational
+arboreous
+arborescence
+arborescent
+arborescently
+arboriculture
+arboriculturist
+arborist
+arborist's
+arborists
+arborvitae
+arbovirus
+arbritrary
+arbutus
+arcanum
+arccos
+arccosine
+archae
+archaist
+archaistic
+archangelic
+archbishopric
+archdeacon
+archdeaconate
+archdeaconry
+archdiocesan
+archducal
+archduchess
+archduchy
+archduke
+archdukedom
+archegonial
+archetypal
+archetypally
+archfiend
+archipelagic
+architectonically
+architrave
+archivolt
+archon
+archpriest
+archway
+arclength
+arco
+arcsin
+arctan
+arctically
+arcuate
+arcuately
+arcuation
+areal
+areally
+areaway
+areola
+areolar
+areolate
+areolation
+areole
+argent
+argentic
+argentiferous
+argentine
+argentite
+argentous
+arger
+argillaceous
+arginine
+argos
+argosy
+argufier
+argufy
+argumentum
+argyle
+argyll
+arhat
+aria
+arianist
+arianists
+arithmetician
+armamentarium
+armentieres
+armillaria
+armless
+armlet
+armlike
+armoire
+armorial
+armorially
+armorist
+armorist's
+armorists
+armorless
+armrest
+armsful
+aromatically
+aromaticity
+arpanet
+arras
+arrearage
+arrestant
+arrestment
+arrhythmia
+arrhythmic
+arrhythmical
+arrhythmically
+arris
+arrises
+arriviste
+arrondissement
+arrowwood
+arrowworm
+arrowy
+arsenical
+arsenious
+arsenite
+arsis
+arsonist
+arsonous
+arte
+artefact
+artefacts
+artemisia
+arteriogram
+arteriogram's
+arteriograms
+arteriographic
+arteriography
+arteriolosclerosis
+arteritis
+arthritic
+arthritically
+arthropathy
+arthrosis
+arthrospore
+arthrosporic
+articular
+artilleryman
+artily
+artiodactyl
+artiste
+artmobile
+arum
+aryl
+asap
+asbestosis
+asbestus
+ascendable
+ascendance
+ascendence
+ascendible
+ascensional
+ascensive
+ascertainment
+ascesis
+ascetical
+ascetically
+ascidian
+ascidium
+ascites
+ascitic
+ascomycetes
+ascorbate
+ascospore
+ascosporic
+ascosporous
+ascus
+asdic
+asepsis
+aseptically
+asexual
+asexually
+ashcan
+ashcans
+ashless
+ashmen
+ashram
+asininity
+askant
+askesis
+aslant
+aslope
+asparagine
+aspartate
+aspartic
+aspartokinase
+aspectual
+aspencade
+aspencades
+asperges
+asperse
+aspersed
+aspersing
+asphaltic
+asphaltite
+asphaltum
+aspheric
+aspherical
+asphodel
+asphyxiator
+aspiate
+aspidistra
+assagai
+assai
+assailable
+assassinator
+assegai
+assemblagist
+assemblyman
+assemblywoman
+assentation
+assentor
+assessable
+asseverate
+asseveration
+asseverative
+assignability
+assignat
+assignational
+assignor
+assimilability
+assimilable
+assimilationism
+assimilator
+assimilatory
+assize
+assizer
+assizers
+assizes
+associateship
+assoil
+assoilment
+assortative
+assuagement
+assuasive
+assumable
+assumably
+assumpsit
+assumptive
+assurgent
+assuror
+astaires
+astarboard
+astatic
+astatically
+astaticism
+asteriated
+asteriskless
+asterism
+asterisms
+astern
+asthenia
+asthenic
+asthenosphere
+asthmatic
+asthmatically
+astigmat
+astigmatically
+astir
+astonied
+astrachan
+astragal
+astragalus
+astrakhan
+astrobiological
+astrobiologist
+astrobiology
+astrocyte
+astrocytic
+astrocytoma
+astrodome
+astrol
+astrolabe
+astrologer
+astrologer's
+astrologers
+astrological
+astrologically
+astrology
+astron
+astronautical
+astronautically
+astronavigation
+astrophotography
+astrosphere
+aswarm
+aswirl
+aswoon
+asymptomatic
+asynapsis
+async
+asyndetic
+asyndetically
+asyndeton
+ataractic
+ataraxic
+atari
+atavism
+atavist
+atavistically
+ataxia
+ataxic
+atelectasis
+atelier
+atheistical
+atheistically
+athenaeum
+atheneum
+athirst
+athletically
+athwartship
+athwartships
+atilt
+atinate
+atingle
+atlantes
+atman
+atment
+atmometer
+atmometer's
+atmometers
+atmospherically
+atmospherium
+atomicity
+atomism
+atomist
+atomistic
+atomistically
+atomistics
+atonalism
+atonalist
+atonalistic
+atonality
+atonic
+atonicity
+atony
+atopic
+atopy
+atremble
+atresia
+atrial
+atrioventricular
+atrip
+atrium
+atriums
+atropine
+attachable
+attackman
+attainability
+attainder
+attaint
+attar
+attemptable
+atticism
+attis
+attorn
+attorneyship
+attornment
+attractable
+attractant
+attractivity
+attrited
+attritional
+attunement
+atune
+atwitter
+atypic
+atypicality
+auctorial
+aud
+auden
+audient
+audile
+auding
+audiofrequencies
+audiofrequency
+audiogenic
+audiophile
+auditable
+audivi
+augend
+augite
+augitic
+augmentable
+augmentative
+augmentor
+augury
+auk
+auld
+aunthood
+auntlike
+aurar
+aureate
+aureola
+auricle
+auricula
+auricular
+auriculate
+aurochs
+aurorae
+auroral
+aurorean
+aurous
+auscultatory
+auslander
+auspicate
+austenite
+austral
+australite
+australopithecine
+authoress
+authorial
+autoantibody
+autobahn
+autobiographer
+autobus
+autocade
+autocatalysis
+autocatalytic
+autocephalous
+autochthonous
+autoclave
+autoclaved
+autocoder
+autocratical
+autocross
+autocueing
+autodidact
+autodidactic
+autodyne
+autoecious
+autoeciously
+autoecism
+autoerotic
+autoerotically
+autoeroticism
+autoerotism
+autogamous
+autogamy
+autogenesis
+autogenetic
+autogenetically
+autogenic
+autogenous
+autogenously
+autogiro
+autograft
+autographic
+autographically
+autography
+autogyro
+autohypnosis
+autohypnotic
+autoimmune
+autoimmunity
+autoinfection
+autoinoculation
+autointoxication
+autoloading
+autologous
+autolysate
+autolysin
+autolysis
+autolytic
+automaker
+automanipulation
+automanipulative
+automat
+automatable
+automaticity
+automatism
+automatist
+automobil
+automobilist
+automorphism
+autonomically
+autonomist
+autoparagraph
+autophyte
+autophytic
+autophytically
+autoplastic
+autoplastically
+autoplasty
+autoradiogram
+autoradiogram's
+autoradiograms
+autoradiograph
+autoradiographic
+autoradiography
+autorotate
+autorotation
+autorotational
+autosexing
+autosomal
+autosomally
+autosome
+autosuggest
+autosuggestible
+autosuggestion
+autotable
+autotelic
+autotetraploid
+autotetraploidy
+autotomic
+autotomous
+autotomy
+autotransplant
+autotransplantation
+autotroph
+autotrophic
+autotrophically
+autotrophy
+autunite
+aux
+auxesis
+auxetic
+auxetically
+auxil
+auxin
+auxinic
+auxinically
+auxotroph
+auxotrophic
+auxotrophy
+avaliable
+avast
+avatar
+avaunt
+avec
+avellan
+avellane
+aventail
+aventine
+aventino
+aventurine
+averment
+avesta
+aviarist
+aviatress
+aviculture
+aviculturist
+avidin
+avifauna
+avifaunal
+avifaunally
+avifaunistic
+avigation
+avirulent
+avitaminosis
+avitaminotic
+avocate
+avocational
+avocationally
+avocet
+avoirdupois
+avouchment
+avowal
+avulse
+avulsing
+avulsion
+avuncular
+awardable
+awardee
+aweary
+aweather
+aweigh
+aweless
+awestricken
+awestruck
+awhirl
+awless
+awn
+awnless
+awoken
+axal
+axel
+axenic
+axenically
+axiality
+axil
+axile
+axilla
+axillar
+axillary
+axisymmetric
+axisymmetrical
+axisymmetrically
+axisymmetry
+axletree
+axman
+ayin
+azathioprine
+azeotropic
+azide
+azido
+azine
+azonal
+azote
+azurite
+azusa
+babblement
+baboonish
+babushka
+babysat
+baccate
+bacchanal
+bacchanalia
+bacchanalian
+bacchant
+bacchante
+bacchantes
+bacchantic
+bacchic
+bacciferous
+baci
+bacillar
+bacillary
+bacitracin
+backbite
+backbiter
+backcountry
+backcourt
+backcourtman
+backcross
+backfield
+backfire
+backfired
+backfires
+backfiring
+backgammon
+backgammon's
+backhoe
+backhouse
+backless
+backpedal
+backrest
+backsaw
+backseat
+backset
+backslap
+backslapper
+backslide
+backslider
+backspin
+backstay
+backstretch
+backstroke
+backswept
+backswing
+backsword
+backwash
+backwoodsman
+bactericidal
+bactericidally
+bactericide
+bacterin
+badinage
+bafflement
+bagful
+baggily
+bagley
+bagman
+baguette
+bailable
+bailee
+baileefe
+bailie
+bailiffship
+bailiwick
+bailment
+bailor
+bailsman
+bainite
+bairn
+baize
+bakeshop
+balderdash
+baldhead
+baldheaded
+baldish
+baldpate
+balefire
+balenciaga
+balkline
+ballade
+balladeer
+balladic
+balladist
+balladry
+ballcarrier
+balletic
+balletomane
+balletomania
+ballfield
+ballfield's
+ballgown
+ballgown's
+ballista
+ballistically
+balloonist
+ballottement
+ballyhooey
+balmily
+baloney
+balsamic
+baluster
+bam
+bambino
+bamboozle
+bamboozled
+bamboozlement
+bamboozles
+bamboozling
+banality
+banausic
+bancroft
+bandana
+bandanna
+bandbox
+bandeau
+bandeaux
+bandgap
+banditry
+banditti
+bandleader
+bandmaster
+bandoleer
+bandolier
+bandsman
+baneberry
+bangish
+bangtail
+banjoes
+banjoist
+bankable
+bankbook
+bankbooks
+bankroll
+bankroller
+bankside
+banneret
+bannerette
+bannister
+bannisters
+bannock
+banns
+banquette
+bantamweight
+bantling
+banyan
+banzai
+baobab
+barbarianism
+barbarically
+barbarism
+barbate
+barbe
+barberry
+barbershop
+barbitone
+barbudo
+barbudos
+barbwire
+bareback
+barebacked
+bareheaded
+bareheadedness
+bareknuckle
+bareknuckled
+bargeboard
+bargeman
+bariatrician
+bariatrics
+baric
+baritonal
+barkier
+barkless
+barky
+barleycorn
+barmaid
+barman
+barmier
+barmy
+barny
+barogram
+barogram's
+barograms
+barograph
+barographic
+barometrical
+barometrically
+barometry
+baronage
+baronetage
+baronetcy
+barramunda
+barramundi
+barranca
+barranco
+barrater
+barrator
+barratry
+barre
+barrelful
+barrelhouse
+barrelsful
+barrio
+barrister
+barristers
+barron
+barroom
+barrooms
+barware
+barycentric
+baryon
+baryon's
+baryonic
+baryons
+basaltic
+bascom
+bascule
+baseborn
+baselevel
+basementless
+basepoint
+baserunning
+bashaw
+basicity
+basidial
+basidiomycete
+basidiomycetes
+basidiomycetous
+basidiospore
+basidiosporous
+basidium
+basie
+basification
+basify
+basilary
+basileis
+basilica
+basilican
+basinal
+basinet
+basipetal
+basipetally
+basketful
+basketlike
+basketry
+basketwork
+basler
+baslot
+basophil
+basophile
+basophilia
+bassi
+bassis
+bassist
+bassoon
+bassoon's
+bassoonist
+bassoonist's
+bassoonists
+bassoons
+bast
+bastardy
+bastile
+bastille
+batboy
+bate
+bateau
+batfish
+batfowl
+bathhouse
+bathhouses
+bathometer
+bathometer's
+bathometers
+bathtubful
+bathwater
+batista
+batiste
+batman
+batrachian
+batrachotoxin
+batsman
+batt
+battailous
+battalia
+batteau
+battement
+battier
+battiness
+battlewagon
+battu
+battue
+batty
+batwing
+baubee
+baudrons
+baulk
+baulked
+baulking
+baulks
+baum
+bauxitic
+bawcock
+bawd
+bawden
+bawdily
+bawdry
+bayadere
+bayaderka
+bayanihan
+bazon
+bazooka
+bazookas
+bea
+beachboy
+beachboys
+beachcomb
+beachcomber
+beachcombers
+beachfront
+beachside
+beachwear
+beachy
+beadroll
+beadwork
+beale
+beall
+beame
+beamish
+beamishly
+beamy
+beanball
+beanie
+bearability
+bearbaiting
+bearberry
+beardown
+bearskin
+beastie
+beatie
+beatifically
+beatless
+beauchamps
+beauclerk
+beaverboard
+beaverton
+bebopper
+bechance
+becket
+beckett
+becloud
+bedabble
+bedaub
+bedaubing
+bedchamber
+bedclothes
+bede
+bedeck
+bedevilment
+bedew
+bedfellow
+bedim
+bedimmed
+bedimming
+bedlamite
+bedouin
+bedplate
+bedrid
+bedroll
+bedsore
+beduin
+beduins
+beebread
+beefcake
+beefeater
+beefwood
+beekeeper
+beekeeping
+beelike
+beeline
+beerier
+beery
+beestings
+beeswax
+beeves
+befoh
+befool
+beforehandedness
+beforetime
+begat
+begetter
+begone
+begrime
+begrimed
+begriming
+beguilement
+beguine
+behaviorist
+behaviorist's
+behavioristically
+behaviorists
+behemoth
+behemothic
+behindhand
+behoof
+beigy
+bel
+belaud
+beldam
+beldame
+beleaguer
+belge
+belike
+belittlement
+belive
+bellbird
+belligerency
+bellpull
+bellum
+bellwood
+bellwort
+bellyband
+belowground
+beltless
+belton
+beltway
+beluga
+beluga's
+bemadden
+bemaddening
+bemire
+bemock
+bemusement
+benchmar
+benday
+benedictory
+benefaction
+benefactress
+benefic
+beneficiate
+beneficiation
+benefitted
+benefitting
+benight
+benignancy
+benignant
+benignantly
+benignity
+benthal
+benthic
+benthonic
+benthos
+bentonite
+bentonitic
+benumb
+bepaint
+beplaster
+bequeathal
+berberine
+berceuse
+berceuses
+bergamot
+beringer
+bernardine
+berne
+berrylike
+berteros
+berto
+beseem
+besetment
+beshrew
+besmear
+besom
+besot
+besotter
+bespatter
+bespoken
+besprent
+besprinkle
+bestead
+besteaded
+besteading
+bestiality
+bestiary
+bestrew
+bestride
+bestrides
+bestriding
+bestsellerdom
+betaine
+betake
+betel
+bethink
+betimes
+betony
+betted
+betweenbrain
+betweentimes
+betweenwhiles
+bewigged
+bewitchery
+bewitchment
+bewray
+bey
+biassed
+biassin
+biassing
+biathlon
+bibb
+bibber
+bibbery
+bibcock
+bibelot
+bibelots
+bibless
+biblicism
+biblicist
+bibliographer
+bibliolater
+bibliolatrous
+bibliolatry
+bibliology
+bibliomania
+bibliomaniac
+bibliomaniacal
+bibliopegic
+bibliopegically
+bibliopegist
+bibliopegistic
+bibliopegy
+bibliophilic
+bibliophilism
+bibliophilist
+bibliophily
+bibliopole
+bibliopolic
+bibliopolist
+bibliotheca
+bibliothecal
+bibliotic
+bibliotics
+bibliotist
+bibulous
+bibulously
+bibulousness
+bicameralism
+bicapsular
+bicentenary
+bicentric
+bicentricity
+bichloride
+bichrome
+bicipital
+biconcavity
+biconditional
+biconvexity
+bicorne
+bicornuate
+bicultural
+biculturalism
+bicuspid
+bicuspidate
+bicyclic
+bicyclist
+biddability
+biddably
+bidet
+bidialectal
+bidialectalism
+bierce
+bietnar
+bifacial
+biff
+bifid
+bifidity
+bifidly
+bifilar
+bifilarly
+biflagellate
+biform
+bigamist
+bigamous
+bigamously
+bigamy
+bigeminal
+bigeminy
+bigeneric
+bigeye
+biggety
+biggin
+bigging
+biggish
+biggity
+bighead
+bigheaded
+bighearted
+bigheartedly
+bigheartedness
+bighorn
+bighorn's
+bighorns
+bigmouthed
+bignonia
+bigwig
+bijou
+bijouterie
+bikeway
+bilabiate
+bilateralism
+bilbo
+bilboa
+bilgier
+bilgy
+bilharziasis
+biliary
+bilious
+biliously
+biliousness
+billable
+billfold
+billfold's
+billfolds
+billhead
+billhook
+billionaire
+billon
+billowy
+billposter
+billposting
+billycock
+bilobal
+bilobed
+bilocular
+biloculate
+bimanual
+bimanually
+bimester
+bimestrial
+bimetal
+bimillenary
+bimillenial
+bimodality
+bimorphemic
+binational
+bindweed
+bine
+bingle
+binnacle
+binned
+binning
+binocularity
+bint
+binucleate
+binucleated
+bio
+bioactive
+bioassay
+bioastronautical
+bioastronautics
+biocatalyst
+biocatalytic
+biocenology
+biocenosis
+biocenotic
+biochemic
+biocidal
+biocide
+bioclean
+bioclimatic
+biocoenosis
+biocoenotic
+biodegradability
+biodegradable
+biodegradation
+biodegrade
+bioecological
+bioecologist
+bioecology
+bioelectric
+bioelectrical
+bioelectricity
+bioengineering
+bioenvironmental
+bioflavonoid
+biog
+biogen
+biogenesis
+biogenetic
+biogenetically
+biogenic
+biogeochemical
+biogeochemistry
+biogeographic
+biogeographical
+biogeography
+biographee
+bioinstrumentation
+biologism
+biologistic
+bioluminescence
+bioluminescent
+biomacromolecule
+biomacromolecules
+biomaterial
+biome
+biometrical
+biometrically
+biomolecular
+bionic
+bionics
+bionomic
+bionomical
+bionomically
+bionomics
+biopolymer
+biopolymers
+biosatellite
+bioscientific
+bioscientist
+biosynthesis
+biosynthetic
+biosynthetically
+biosystematic
+biosystematist
+biosystematy
+biota
+biotechnological
+biotechnology
+biotelemetric
+biotelemetry
+biotin
+biotite
+biotitic
+biotope
+biotransformation
+biotron
+biotype
+biotypic
+biovular
+bipack
+biparental
+biparentally
+bipartisanism
+bipartisanship
+bipedal
+biphenyl
+bipinnate
+bipinnately
+bipod
+bipolarity
+bipropellant
+biquadratic
+biracialism
+biradial
+biramous
+birchbark
+birdbrain
+birdbrained
+birdcage
+birdcage's
+birdcages
+birdcall
+birdhouse
+birdieback
+birdieing
+birdlime
+birdman
+birdyback
+bireme
+biretta
+birgitta
+birk
+birkhead
+birkie
+birl
+birler
+birr
+birse
+birthmark
+birthroot
+birthstone
+birthwort
+biscayne
+bisectional
+bisectionally
+bisexuality
+bistort
+bistro
+bistroic
+bistros
+bisulfate
+bisulfide
+bisulfite
+bitartrate
+bitchery
+bitchier
+bitchily
+bitchiness
+bitchy
+bitstock
+bitsy
+bitt
+bitted
+bitterish
+bitterweed
+bitting
+bittock
+bitty
+bituminoid
+bivalent
+biyearly
+biz
+blabber
+blabbered
+blabbering
+blabby
+blackamoor
+blackamoors
+blackcap
+blackcock
+blackdamp
+blackface
+blackfin
+blackfish
+blackfly
+blackguard
+blackguard's
+blackguardism
+blackguardly
+blackguards
+blackhander
+blackhead
+blackheart
+blackish
+blackland
+blackleg
+blackmer
+blackpoll
+blacksnake
+blacktail
+blackthorn
+blacktop
+blacktop's
+blacktops
+blackwash
+blackwater
+bladderlike
+blakey
+blamably
+blameful
+blamefully
+blancmange
+blandish
+blandisher
+blandishment
+blandishments
+blanketflower
+blanketlike
+blanton
+blarney
+blasingame
+blastema
+blastematic
+blastemic
+blastie
+blastment
+blastula
+blastula's
+blastular
+blastulas
+blastulation
+blat
+blate
+blatted
+blatter
+blazonry
+bleachable
+bleakish
+blearily
+blench
+blende
+blether
+blevins
+blimpishly
+blimpishness
+blindfish
+blindworm
+blintz
+blintze
+blipping
+blique
+blistery
+blithesome
+blithesomely
+blizzardy
+blobbing
+blockbuster
+blockbusters
+blockbusting
+blockhead
+blockheads
+blockish
+blockishly
+blondish
+bloodcurdling
+bloodcurdlingly
+bloodfin
+bloodguilt
+bloodguiltiness
+bloodguilty
+bloodily
+bloodletting
+bloodline
+bloodline's
+bloodlines
+bloodmobile
+bloodred
+bloodstock
+bloodstone
+bloodsucker
+bloodsucking
+bloodthirstily
+bloodthirstiness
+bloodthirsty
+bloodworm
+bloodwort
+bloomy
+bloop
+blooper
+bloops
+blossomy
+blotchily
+blotchy
+blotter
+blotty
+blouson
+blowfly
+blowgun
+blowhard
+blowhole
+blowout
+blowpipe
+blowsy
+blowtube
+blowy
+blowzy
+blubbery
+blucher
+bluebeard
+bluebell
+bluebottle
+bluecoat
+bluefin
+blueing
+bluejack
+bluenose
+bluepoint
+bluesman
+bluestem
+bluestone
+bluesy
+bluet
+bluetongue
+blueweed
+bluey
+blume
+blunderbuss
+blurrily
+blushful
+blusterous
+blutwurst
+blyth
+boardlike
+boardman
+boardmanship
+boardroom
+boardsmanship
+boardwalk
+boart
+boatel
+boatels
+boatmanship
+boatsmanship
+boaz
+bobber
+bobbery
+bobbinet
+bobbsey
+bobeche
+bobrow
+bobsledder
+bobstay
+bobtail
+bobtailed
+bocaccio
+bocci
+boccie
+bod
+bodacious
+bodaciously
+bodega
+bodement
+bodenheim
+bodiless
+bodkin
+bodysurf
+bodysurfer
+bodywork
+boehmer
+boehmite
+boer
+boff
+boffin
+boffo
+boffola
+boffos
+bogartian
+bogeyman
+bogeyman's
+boggs
+bogie
+bogle
+boheme
+bohlen
+boies
+boite
+boites
+bola
+boland
+bolas
+bolases
+bole
+bolero
+bolet
+boletus
+boliou
+bollard
+bollix
+bollworm
+bolometric
+bolometrically
+boloney
+boltrope
+bolus
+bombardier
+bombardiers
+bombardon
+bombastically
+bombazine
+bombe
+bombinate
+bombination
+bombshell
+bombsight
+bombus
+bon
+bonbon
+bondable
+bondholder
+bondmaid
+bondman
+bondstone
+bondwoman
+bonefish
+bonehead
+boneheaded
+boneless
+boneset
+bonesetter
+boney
+boneyard
+bonfiglio
+bongoes
+bongoist
+bonham
+bonheur
+bonhomie
+bonkers
+bonne
+bonner
+bonnily
+bonnor
+bonsai
+bonspiel
+bontempo
+bonze
+bonzer
+boobify
+boodle
+booger
+boogerman
+boogeyman
+bookbindery
+bookful
+booklist
+bookmaker
+bookmakers
+bookmaking
+bookman
+bookmark
+bookmark's
+bookmarker
+bookmarkers
+bookmarks
+bookmobile
+bookmobiles
+bookselling
+bookstall
+bookworm
+bookworm's
+bookworms
+booky
+boomier
+boomlet
+boomy
+boondocks
+boondoggle
+boondoggler
+boondoggling
+boonies
+bootee
+bootie
+bootjack
+bootlace
+bootle
+bootless
+bootlessly
+bootlessness
+bootlick
+bootlicker
+bootprint
+boozily
+boozy
+bopper
+bora
+borage
+borak
+borane
+borazon
+bordel
+bordereau
+boreal
+boresight
+boresights
+borglum
+boride
+borland
+borneol
+boronic
+bort
+bosomy
+bosonic
+bosphorus
+bosque
+bosquet
+bossdom
+bossism
+bostitch
+bot
+botan
+botchwork
+botchy
+botel
+botheration
+bots
+bottlecap
+bottlecap's
+bottlecaps
+bottleful
+bottomland
+bottomry
+botulinal
+botulinum
+boucle
+boudoir
+bouffe
+bougainvillaea
+bougainvillea
+bougie
+bouillabaisse
+bouldery
+boule
+boulevardier
+bouleversement
+boulez
+boulle
+bouncily
+bounderish
+bounderishly
+bountiful
+bountifully
+bountifulness
+bourbonism
+bourdon
+bourg
+bourgeoise
+bourgeoisify
+bourgeon
+bourguiba
+bourn
+bourse
+bouse
+bousing
+boustrophedon
+bouton
+boutonniere
+bouvardier
+bouvier
+bouzouki
+bovinity
+bowan
+bowelless
+bowerbird
+bowerbird's
+bowerbirds
+bowery
+bowes
+bowfin
+bowfront
+bowhead
+bowknot
+bowlder
+bowleg
+bowlegged
+bowlful
+bowmen
+bowse
+bowsprit
+bowwow
+bowyer
+boxful
+boxhaul
+boxlike
+boxthorn
+boyar
+boyard
+boyars
+bozo
+bozos
+brabble
+brabbled
+brabbling
+brachial
+brachiate
+bract
+bradded
+bradding
+braggart
+braggest
+braggy
+brahma
+brail
+braillewriter
+braincase
+brainish
+brainless
+brainlessly
+brainlessness
+brainpan
+brainpower
+brainsick
+brainsickly
+brainstem
+brainstem's
+brainstems
+brainteaser
+braise
+braised
+braiser
+braises
+braising
+brakeless
+braky
+branchia
+branchial
+branchiate
+branchless
+branchlet
+branchy
+brandel
+brandin
+brandling
+brank
+branks
+brannon
+brant
+brants
+branum
+braque
+braques
+brassard
+brassbound
+brasserie
+brassica
+brassily
+brattice
+brattiness
+brattish
+brattishing
+brattle
+brattled
+brattling
+bratty
+brava
+bravoes
+braw
+braweling
+brawle
+brawlier
+brawly
+brawnier
+brawnily
+brawniness
+brawny
+brazos
+breadbasket
+breadbaskets
+breadroot
+breadstuff
+breadthways
+breadthwise
+breadwinning
+breakfront
+breakneck
+breakoff
+breakout
+bream
+breams
+breastbone
+breaststroke
+breaststroker
+breathability
+breccia
+breccias
+brecciate
+brecciation
+breechblock
+breechcloth
+breechclout
+breechloader
+breeks
+breezeless
+breezeway
+bregma
+bregmatic
+breviaries
+breviary
+brewage
+briard
+bribable
+bricating
+brickbat
+brickle
+bricktop
+brickwork
+bridewell
+bridgeboard
+bridgeless
+briefless
+brien
+briery
+brigadoon
+brigand
+brigand's
+brigandage
+brigandine
+brigandism
+brigands
+brightwork
+brill
+brilliantine
+brimless
+brimmer
+brinded
+bringdown
+brinkley
+brinksmanship
+brio
+brioche
+briolette
+briquet
+briquette
+brisance
+brisant
+brisket
+brisling
+brist
+bristlecone
+bristlecone's
+bristlecones
+bristlelike
+bristletail
+brit
+broadax
+broadcloth
+broadleaf
+broadminded
+broadsheet
+broadsword
+broadtail
+broadwife
+brocatelle
+brochette
+brockage
+brocket
+brockle
+brocoli
+brogue
+broider
+broidery
+brokenhearted
+brollies
+brolly
+bromate
+bromated
+bromating
+bromegrass
+bromeliad
+bromelin
+bromic
+bromidic
+brominate
+bromination
+bromism
+bromo
+bromos
+bronchialy
+broncobuster
+brontosaur
+brontosaurus
+bronzy
+broomball
+broomballer
+broomcorn
+broome
+broomrape
+broths
+brougham
+broughams
+broun
+brownnose
+brownnoser
+brownout
+brownshirt
+brownstone
+brownstones
+browny
+browsability
+broxodent
+bruit
+brunet
+brushability
+brushback
+brushcut
+brushland
+brushstroke
+brushstroke's
+brushstrokes
+brushup
+brushwood
+brusk
+brusquerie
+brut
+bruxelles
+bruxism
+bryophyta
+bryophyte
+bryozoa
+bs
+bubby
+buccal
+buccaneer
+buccaneer's
+buccaneerish
+buccaneers
+bucer
+buckbean
+buckeroo
+bucketsful
+buckhead
+buckman
+bucko
+buckoes
+bucksaw
+buckshee
+bucktail
+buckthorn
+bucktooth
+bucky
+bucolically
+budder
+buddle
+budgeteer
+budgie
+budlong
+bufferred
+buffi
+buffo
+buffoonery
+buffoonish
+buffos
+bugatti
+bugbear
+bugeye
+buggery
+bughouse
+bugleweed
+bugloss
+bugseed
+builtin
+bulba
+bulbaceous
+bulbar
+bulbil
+bulbous
+bulbously
+bulbul
+bulginess
+bulgur
+bulgy
+bulkily
+bulla
+bullace
+bullae
+bullbaiting
+bullbat
+bulldogger
+bullfight
+bullfighter
+bullfighting
+bullhorn
+bullnecked
+bulloch
+bullock
+bullocky
+bullous
+bullpout
+bullring
+bullrush
+bullrush's
+bullrushes
+bullterrier
+bullwhack
+bullwhip
+bullyrag
+bumbershoot
+bumboat
+bumbry
+bumkin
+bumpier
+bumpily
+bumpiness
+bumpkin
+bumpkin's
+bumpkinish
+bumpkinly
+bumpkins
+bumpy
+bunchily
+bunchy
+bunco
+bund
+bundist
+bundoora
+bundy
+bung
+bunger
+bunghole
+bunglesome
+bunko
+bunkos
+bunkum
+buntline
+buoyance
+burbank
+burbly
+burdock
+bureaucratically
+bureaux
+buret
+burette
+burettes
+burgage
+burgee
+burglarious
+burglariously
+burgonet
+burgoo
+burgoos
+burin
+burking
+burladero
+burle
+burlily
+burlingame
+burnable
+burne
+burnes
+burnoose
+burnous
+burnout
+burrier
+burrstone
+burry
+bursae
+bursal
+bursar
+bursary
+burse
+burseed
+bursty
+burthen
+burweed
+busbies
+busby
+bushbuck
+bushbucks
+bushelage
+bushelman
+bushfire
+bushily
+bushland
+bushland's
+bushman
+businesswoman
+businesswoman's
+businesswomen
+busk
+busker
+buskin
+busload
+busload's
+busloads
+busty
+busybody
+busywork
+butadiene
+butanol
+buteo
+butterfingered
+butterfingers
+butterfish
+butterflyer
+butterless
+butterscotch
+butterweed
+butterwort
+butties
+buttinski
+buttinsky
+buttonball
+buttonbush
+buttonhook
+buttonless
+buttonwood
+buttony
+buttstock
+butty
+butut
+butylate
+butylation
+butylene
+butyraceous
+butyral
+butyraldehyde
+butyric
+bwana
+byelaw
+byelaws
+byinge
+bylot
+byname
+bypast
+byplay
+byre
+bystreet
+cabala
+cabalism
+cabalist
+cabalistic
+caballed
+caballero
+caballing
+cabbala
+cabbie
+cabbies
+cabby
+cabinetmaking
+cabinetwork
+cablegram
+cablegram's
+cablegrams
+cablet
+cableway
+cabman
+caboodle
+caboose
+cabotage
+cabriole
+cabriolet
+cabstand
+cachalot
+cachectic
+cachepot
+cachet
+cachou
+cacodemon
+cacodemonic
+cacogenesis
+cacogenic
+cacogenics
+cacographical
+cacography
+cacophonous
+cacophonously
+cacuminal
+cadastral
+cadastrally
+cadastre
+cadaveric
+cadaverine
+caddie
+caddis
+caddish
+caddishly
+caddishness
+cade
+cadency
+cadential
+cadetship
+caducean
+caduceus
+caducity
+caducous
+caffeinic
+caftan
+cageling
+cagier
+cagily
+caginess
+cagy
+cahier
+caiman
+caisson
+caitiff
+cajolement
+cajolery
+cakewalk
+cakewalker
+calabash
+calaboose
+calamine
+calamint
+calamite
+calamus
+calash
+calcaneal
+calcaneum
+calcaneus
+calcic
+calcific
+calcifuge
+calcifugous
+calcimine
+calcination
+calcine
+calcined
+calcining
+calcinosis
+calcitic
+calcomp
+calculably
+calculatingly
+calculous
+caldera
+caldron
+caleche
+calender
+calenderer
+calendric
+calendrical
+calends
+calendula
+calenture
+calflike
+calif
+caliginous
+caliphal
+calk
+calker
+calla
+callant
+callback
+callboy
+calligraphic
+calligraphically
+calligraphist
+callose
+callosity
+callus
+calluses
+calmative
+calomel
+calorically
+calorific
+calorimetrically
+calory
+calotte
+calque
+caltech
+calthrop
+caltrop
+caltrops
+calumniator
+calumnious
+calumniously
+calypsonian
+calyx
+camarilla
+cambial
+cambium
+cambric
+camelback
+cameleer
+camelia
+camellia
+camelopard
+cameralism
+cameralist
+camise
+camisole
+caml
+camlet
+camomile
+camorra
+camorrista
+camouflageable
+camouflagic
+campanile
+campanologist
+campanology
+campanula
+campanulate
+campcraft
+campership
+camphene
+camphine
+camphor
+camphoraceous
+camphorate
+camphorated
+camphoric
+campily
+campiness
+campion
+campobello
+camporee
+campos
+campstool
+campy
+camshaft
+camshafts
+canalboat
+canaliculate
+canard
+canasta
+cancan
+cancroid
+candela
+candelabra
+candelabrum
+candent
+candescence
+candescent
+candida
+candidature
+candleholder
+candlepin
+candlepins
+candlepower
+candlepowers
+candlesnuffer
+candlewick
+canebrake
+canescent
+caneware
+canful
+canicular
+cankerous
+cankerworm
+canna
+cannel
+cannibalic
+cannily
+cannonade
+cannoneer
+cannonry
+canoeing
+canoeist
+canoeist's
+canoeists
+canoness
+canonicity
+canorous
+canorously
+canorousness
+canst
+cantabile
+cantata
+cantatas
+canterelle
+canthi
+canthus
+cantillate
+cantillation
+cantina
+cantle
+cantles
+cantonal
+cantonment
+cantus
+canty
+canute
+canvaslike
+capelet
+capella
+capeskin
+capet
+capework
+capful
+capias
+capillarity
+capitalistically
+capitan
+capitate
+capitates
+capitation
+capitular
+capitulary
+capitulum
+capo
+capon
+caporal
+capper
+cappers
+cappy
+capriccio
+caprification
+caprine
+capriole
+capsular
+capsulate
+capsulated
+capt
+captainship
+captan
+captionless
+captivator
+capuchin
+capybara
+carabao
+carabid
+carabineer
+carabiner
+carabinero
+carabinier
+carabiniere
+caracole
+carafe
+carapace
+carapace's
+carapaces
+carat
+caravanner
+caravansary
+caravel
+carbarn
+carbaryl
+carbazole
+carbolated
+carboline
+carboniferous
+carbonium
+carbonless
+carbonous
+carbonylic
+carboxy
+carboxyl
+carboxylate
+carboxylation
+carboxylic
+carbuncular
+carburet
+carburetion
+carburetor
+carburetors
+carcase
+carcinogenesis
+carcinogenicity
+carcinoid
+cardamom
+cardialgia
+cardigan
+cardigan's
+cardigans
+cardinalship
+cardiogram
+cardiogram's
+cardiograms
+cardiograph
+cardiographer
+cardiographic
+cardiographs
+cardiography
+cardioid
+cardioid's
+cardioids
+cardiological
+cardiologist
+cardiopathy
+cardiopulmonary
+cardiorespiratory
+cardiotonic
+cardiovasculatory
+cardplayer
+cardsharp
+cardsharper
+careerist
+careerists
+carefuller
+carefullest
+carfare
+carful
+carhop
+caribe
+caricatural
+carioca
+cariole
+carious
+carle
+carling
+carlsbad
+carmaker
+carnallite
+carne
+carnelian
+carney
+carnivore
+caroche
+carom
+carotene
+carousal
+carousel
+carousel's
+carousels
+carpal
+carpellary
+carpetbag
+carpetbag's
+carpetbagged
+carpetbagger
+carpetbagger's
+carpetbaggers
+carpetbaggery
+carpetbagging
+carpetbags
+carpi
+carpospore
+carposporic
+carpus
+carrefour
+carriageway
+carriageways
+carriole
+carronade
+carroty
+carrousel
+carryall
+carryon
+carryout
+carsick
+cartage
+cartel
+cartilaginous
+cartload
+cartloads
+cartogram
+cartogram's
+cartograms
+cartographical
+cartomancy
+cartop
+carty
+caruncular
+carunculate
+carunculated
+casa
+casaba
+casaba's
+casabas
+cascara
+caseate
+caseation
+casebearer
+casemate
+caseous
+casern
+caserne
+cashable
+cashbook
+cashless
+casque
+cassaba
+cassava
+cassino
+cassite
+castaway
+casteism
+castigator
+castigators
+castoff
+castoffs
+castrate
+castrated
+castrater
+castraters
+castrates
+castrating
+castration
+castrato
+castrator
+castrators
+castratory
+casuistic
+casuistical
+casuistry
+catabolic
+catabolically
+catabolism
+catabolite
+catachresis
+catachresti
+catachrestic
+catachrestical
+cataclysm
+cataclysmal
+catacomb
+catacombic
+catadromous
+catafalque
+catalatic
+catalectic
+catalepsy
+cataleptic
+cataleptically
+catalpa
+catamaran
+catamount
+cataplasm
+cataplastic
+cataplexy
+cataractal
+catarrh
+catarrhal
+catarrhally
+catastasis
+catatonic
+catawba
+catboat
+catcall
+catchall
+catchee
+catchment
+catchpenny
+catchpole
+catchpoll
+catchup
+cate
+catechesis
+catechetical
+catechin
+catechismal
+catechist
+catechistic
+catena
+catenary
+catenulate
+cateran
+catercorner
+cateress
+caterwaul
+cates
+catface
+catfacing
+catgut
+catharses
+cathartic
+cathead
+cathect
+cathectic
+cathedra
+cathexes
+cathexis
+cathodically
+catholically
+catholicate
+catholicity
+cathouse
+cation
+cationic
+cationically
+cations
+catkin
+catnap
+catnaps
+catoptric
+catoptrically
+catoptrics
+catted
+cattily
+catting
+caudal
+caudally
+caudate
+caudated
+caudation
+caudillo
+caudle
+caul
+cauldron
+cauldrons
+caulescent
+caulicle
+caulicles
+cauline
+causeless
+causerie
+causey
+causeys
+caustically
+causticity
+cautery
+cavalierism
+cavalryman
+cavernicolous
+caviare
+cavies
+cavitary
+cavitate
+cavitation
+cay
+cayman
+cc
+ceasefire
+ceasefire's
+cedarn
+cedarwood
+ceil
+ceilometer
+ceilometer's
+ceilometers
+ceinture
+celandine
+celebrator
+celebrators
+celeriac
+celiac
+celibacy
+cellarage
+cellarages
+cellaret
+cellarets
+cellarette
+cellarettes
+cellularity
+cellule
+celluloid
+celluloid's
+cellulosic
+cementation
+cementite
+cementitious
+cenobite
+cenobitic
+cenobitical
+cenogenetic
+cenogenetically
+cenospecies
+cenotaph
+cense
+censer
+censing
+censorious
+censoriously
+censoriousness
+censurable
+cental
+centare
+centaurea
+centaury
+centavo
+centenarian
+centesimal
+centesimo
+centiare
+centillion
+centime
+centimo
+centner
+cento
+centones
+centra
+centrale
+centralism
+centralist
+centralistic
+centralists
+centric
+centrically
+centricity
+centriole
+centrism
+centroidal
+centromere
+centromeric
+centrosome
+centrosomic
+centrosphere
+centrosymmetric
+centrum
+centum
+centurion
+cephalad
+cephalic
+cephalically
+cephalometric
+cephalometry
+cepstrum
+ceraceous
+ceramicist
+ceramist
+ceramium
+cere
+cerebellar
+cerebroside
+cerebrosides
+cerebrovascular
+cerebrum
+cerement
+ceremonialism
+ceremonialist
+ceremonialists
+ceres
+cereus
+cering
+cernuous
+certes
+certifiably
+certificatory
+cerumen
+ceruminous
+ceruse
+cervices
+cervine
+cervix
+cervixes
+cesarean
+cesarian
+cesspit
+cesspool
+cesta
+cesti
+cetacean
+cetacean's
+cetaceans
+cf
+chaffey
+chaffy
+chainomatic
+chalcedonic
+chalcedony
+chalcid
+chalcocite
+chaldron
+chalet
+chalkboard
+chalone
+chambray
+chambrays
+chameleon
+chameleonic
+chameleons
+chamfron
+chamfrons
+chammy
+chamoix
+chamomile
+champak
+champertous
+champerty
+champlainian
+chanceful
+chancel
+chancellery
+chancellorship
+chancellorships
+chancellory
+chancels
+chancre
+chancres
+chancroid
+chancroidal
+chancrous
+chandelle
+chandler
+chandlery
+changeful
+changefully
+changefulness
+changeless
+changelessly
+changelessness
+changeling
+channing
+chanson
+chanteuse
+chanteuses
+chantier
+chanties
+chanty
+chaotically
+chapati
+chapbook
+chape
+chapeau
+chapeaus
+chapeaux
+chapelles
+chaperonage
+chapfallen
+chapiter
+chaplaincies
+chaplaincy
+chaplet
+chapleted
+chaplets
+chaplinesque
+charabanc
+characin
+characterful
+characterless
+characterological
+characterologically
+charactery
+charade
+charades
+charcuterie
+chard
+chare
+charier
+charily
+chariness
+charioteer
+charioteers
+charism
+charismata
+charisms
+charlatan
+charlatanism
+charlatanry
+charmless
+charnel
+charnock
+charring
+chartularies
+chartulary
+charwoman
+chary
+chassepot
+chasseur
+chasten
+chastened
+chastener
+chastening
+chateaubriand
+chatelain
+chatelaine
+chatelaines
+chatelains
+chatoyance
+chatoyancy
+chatoyant
+chattahoochee
+chatterbox
+chatterboxes
+chattily
+chauffers
+chaussure
+chaussures
+chauvinistically
+cheapie
+cheapish
+cheapishly
+cheapskate
+cheapskates
+checkerberry
+checkless
+checkmark
+checkmarks
+checkmate
+checkmated
+checkmates
+checkmating
+checkoff
+checkrein
+checkroom
+checkrooms
+checkrow
+cheddar
+cheekful
+cheekily
+cheep
+cheeps
+cheerio
+cheeseburger
+cheeseburgers
+cheesecake
+cheesecake's
+cheesecakes
+cheesecloths
+cheesemaker
+cheesemakers
+cheesemaking
+cheeseparer
+cheeseparing
+cheeseparings
+cheetahs
+chefdom
+chekhov
+chelatable
+chelonian
+chemiluminescence
+chemiluminescent
+chemische
+chemism
+chemisorb
+chemisorption
+chemoautotrophic
+chemoautotrophically
+chemoautotrophy
+chemoprophylaxis
+chemoreception
+chemoreceptive
+chemoreceptivity
+chemoreceptor
+chemoreceptors
+cheng
+chenille
+cherishable
+cheroot
+cherrylike
+cherrystone
+chert
+cherubic
+cherubically
+cherublike
+chervil
+chervils
+chessboard
+chessboards
+chessman
+chessmen
+chestful
+chestier
+chesty
+cheveron
+cheviot
+chevrotain
+chewable
+chewy
+chi
+chiaroscurist
+chiaroscuro
+chiasma
+chiasmatic
+chiasmus
+chiaus
+chicalote
+chicaning
+chichi
+chickasaws
+chickenhearted
+chickpea
+chickpea's
+chickpeas
+chickweed
+chickweeds
+chicle
+chicos
+chidden
+chieftaincies
+chieftaincy
+chieftainship
+chiffonier
+chignon
+childbed
+childbirths
+chilies
+chillily
+chimaera
+chimere
+chimerical
+chimerically
+chimerism
+chimneypiece
+chimp
+chimps
+chinaware
+chinbone
+chinch
+chine
+chines
+chinoiserie
+chinos
+chinquapin
+chintzier
+chintzy
+chirographer
+chirographic
+chirographical
+chirography
+chiromancer
+chiromancy
+chiropodist
+chiropodists
+chiropody
+chiropractic
+chiropter
+chiropteran
+chirpily
+chirpy
+chirrup
+chirruped
+chirruping
+chirrups
+chit
+chitchat
+chitin
+chitinous
+chitlings
+chiton
+chits
+chitter
+chittered
+chittering
+chitterlings
+chitters
+chivalric
+chivied
+chivvied
+chivvy
+chivvying
+chivy
+chloral
+chlordane
+chloric
+chlorinity
+chlorite
+chloritic
+chlorobenzene
+chlorohydrin
+chlorophyllose
+chlorophyllous
+chloroplatinate
+chockablock
+chocolaty
+choirboy
+choky
+choler
+choleraic
+choleric
+choline
+cholinergic
+chondrite
+choosey
+chopfallen
+chophouse
+choppily
+chopstick
+chopsticks
+choreman
+choreographically
+choric
+chorically
+chorine
+chorister
+chorizo
+chorographic
+chorography
+choryza
+chowderhead
+chowderheaded
+chowhound
+chowtime
+chrestomathy
+christsake
+chromatically
+chromaticism
+chromaticity
+chromatid
+chromatin
+chromatographically
+chromatolytic
+chromide
+chrominance
+chromo
+chromosomal
+chromosome
+chromosome's
+chromosomes
+chromosomic
+chromospheric
+chronical
+chronicity
+chronogram
+chronogram's
+chronogrammatic
+chronogrammatical
+chronograms
+chronographic
+chronographs
+chronologer
+chronologers
+chronologic
+chronologist
+chronologists
+chronometer
+chronometer's
+chronometers
+chronometric
+chronometrical
+chronometrically
+chronometry
+chronoscope
+chronoscopes
+chrysolite
+chubbily
+chuckhole
+chucklehead
+chuckleheaded
+chuckleheads
+chucklesome
+chuckwalla
+chuff
+chuffed
+chuffier
+chuffing
+chuffy
+chugalug
+chugger
+chummily
+chumship
+chunkily
+churchgoer
+churchianity
+churchless
+churchmanship
+churchy
+churlish
+churlishly
+churlishness
+chutist
+chutists
+chutzpa
+chutzpah
+cigarillo
+cigarillos
+ciliary
+cincture
+cindery
+cinemagoer
+cinemagoers
+cinematically
+cinematograph
+cinematographer
+cinematographic
+cinematographical
+cinematographically
+cinematography
+cinquefoil
+ciphertext
+ciphony
+circadian
+circinate
+circinately
+circuital
+circuity
+circulatable
+circulator
+circulators
+circumambient
+circumambiently
+circumambulate
+circumambulates
+circumcircle
+circumfluent
+circumfluous
+circumfuse
+circumfused
+circumfuses
+circumfusing
+circumfusion
+circumfusions
+circumjacent
+circumlocutory
+circumlunar
+circumnavigate
+circumnavigated
+circumnavigates
+circumnavigating
+circumnavigation
+circumnavigations
+circumnavigator
+circumnavigators
+circumscissile
+circumscription
+circumstantiality
+circumstantiate
+circumstantiated
+circumstantiates
+circumstantiating
+circumvallate
+circumvallated
+circumvallates
+circumvallating
+circumvallation
+circumvallations
+circumvolution
+circumvolutions
+circusy
+cirque
+cirques
+cirrhoses
+cirrhosis
+cirrhotic
+cirrous
+cirrus
+cislunar
+cist
+cit
+citable
+citational
+citified
+citify
+citizeness
+citral
+citronella
+civically
+civie
+civies
+civilists
+civvy
+clabber
+clack
+clacker
+clackers
+clacks
+cladophora
+clamant
+clamantly
+clambake
+clambakes
+clammily
+clamorist
+clamorist's
+clamorists
+clampdown
+clangorous
+clangorously
+clansman
+clansmen
+clapper
+clappers
+claptrap
+claque
+claques
+clarinetist
+clarinettist
+clarridge
+classicalism
+classicalist
+classicality
+classicism
+classicistic
+classificatorily
+clausal
+claustral
+clavichord
+clavichordist
+clavicular
+clavier
+clavierist
+clavieristic
+claybank
+clayey
+clayish
+clayware
+cleanable
+cleanhanded
+clearable
+clef
+clef's
+clefs
+clemens
+clemente
+clepe
+cleped
+clepes
+cleping
+clericalism
+clericalist
+clerkship
+cleverish
+clevis
+clientage
+cliental
+cliffhanger
+cliffy
+climacteric
+climactically
+climatologist
+climatologists
+climbable
+cline
+clines
+clingy
+clinometric
+clinometry
+clipsheet
+cliquey
+cliquish
+cliquishly
+cliquishness
+clitoral
+clitoric
+clitoris
+cloaca
+cloacal
+cloche
+clocklike
+cloddy
+clodhopping
+cloistral
+cloistress
+clonal
+clonally
+clonic
+clonicity
+clonk
+clonked
+clonking
+clonks
+clop
+clopped
+clopping
+clops
+closable
+closeable
+closefisted
+closemouthed
+closeout
+closetful
+clotheshorse
+clothespin
+clothespress
+cloths
+cloudily
+cloudland
+cloudlet
+cloudlets
+cloven
+cloverleaf
+cloverleaves
+clownery
+clownish
+clownishly
+clownishness
+clubable
+clubbable
+clubber
+clubbier
+clubbiness
+clubby
+clubfoot
+clubfooted
+clueing
+clumpy
+clunk
+clunked
+clunker
+clunking
+clunks
+clustery
+clutchy
+coact
+coaction
+coactive
+coadapted
+coadjutrices
+coadjutrix
+coadunate
+coadunated
+coadunates
+coadunating
+coadunation
+coagulability
+coagulant
+coagulants
+coagulase
+coalification
+coalify
+coalitionist
+coapt
+coaptation
+coaptation's
+coapted
+coapting
+coapts
+coarctate
+coarctation
+coarticulation
+coarticulatory
+coastguard
+coastguardman
+coastguardsman
+coastland
+coastward
+coastwards
+coastwise
+coatrack
+coatroom
+cob
+cob's
+cobaltic
+cobby
+cobelligerent
+cobia
+cobs
+cobwebbed
+cobwebby
+coca
+cocainism
+cocci
+coccidiosis
+cochairman
+cochairmen
+cochise
+cockade
+cockaded
+cockamamie
+cockatrice
+cockerel
+cockfight
+cockfight's
+cockfighting
+cockfights
+cockhorse
+cockily
+cockney
+cockneyish
+cockneyism
+cockneys
+cockshy
+coco
+coconscious
+coconsciousness
+coconspirator
+coconspirators
+cocos
+cocurricular
+codable
+codeclination
+codefendant
+codeine
+codeless
+codeposit
+codetermination
+codex
+codger
+codices
+codicillary
+codifiability
+codling
+codomain
+codominant
+codon
+codpiece
+codpieces
+coeducational
+coeducationally
+coenzyme
+coequality
+coercivity
+coeternal
+coeternally
+coeternity
+coeval
+coevality
+coevolution
+cofeature
+coffeehouse
+coffle
+coffles
+cofunction
+cogency
+cogged
+cogging
+cogitable
+cogito
+cognitional
+cognitivity
+cognomen
+cognoscenti
+cogwheel
+cogwheels
+cohabitant
+cohabitants
+coheir
+coheiress
+cohesionless
+coho
+cohomology
+cohosh
+coidentity
+coif
+coiffeur
+coiffeuse
+coiffing
+coign
+coilability
+coinsurance
+coinsure
+coinsurer
+coition
+coitional
+col
+colasanto
+coldblood
+coldhearted
+coldheartedly
+coldheartedness
+coldish
+coleslaw
+coli
+colic
+colitis
+coll
+collaborationism
+collaborationist
+collaborationists
+collage
+collages
+collagist
+collagists
+collarless
+collaterality
+colleagueship
+colleaguesmanship
+collectable
+collectivism
+collectivist
+collectivistic
+collectivistically
+collectivists
+collectivity
+collectorate
+collectorates
+collectorship
+collegial
+collegiality
+collegially
+collegium
+collet
+collieries
+colliery
+colligate
+colligation
+colligative
+collimator
+collisional
+collisionally
+collocate
+collocates
+collocational
+collodion
+collogue
+collogued
+colloguing
+colloq
+colloquiality
+colloquist
+colloquoy
+colloquy
+collusive
+collusively
+colluvial
+colly
+colog
+cologarithm
+colonelcy
+colonialistic
+colonic
+colophon
+colophony
+colossi
+colossus
+colossuses
+colostomy
+colostral
+colostrum
+coltsfoot
+columbine
+columniation
+columnistic
+colza
+com
+comae
+comaker
+combinability
+combinate
+combinative
+combinatory
+comblike
+combust
+combuster
+combustibility
+combustibly
+combusting
+combustive
+combustor
+combustors
+comedie
+comedienne
+comediennes
+comedown
+cometic
+comfier
+comfit
+comfits
+comfortless
+comfy
+comicality
+comique
+comity
+commandable
+commandership
+commandery
+commemorator
+commemorators
+commendably
+commensal
+commensalism
+commensally
+commensurability
+commensurably
+commentate
+commentates
+commercialist
+commercialistic
+commie
+commination
+comminatory
+comminute
+comminuted
+comminution
+commissar
+commissariat
+commissionaire
+commissionership
+commissural
+commissure
+commix
+commixture
+commode
+commodes
+commonage
+commonalty
+commonsense
+commonsensible
+commonsensibly
+commonsensical
+commonweal
+commove
+commoved
+commoves
+commoving
+communalism
+communalist
+communalists
+communalities
+communality
+communard
+communards
+communese
+communicability
+communicableness
+communicably
+communicatee
+communicatory
+communistically
+communitarian
+communitarianism
+commutator
+commutators
+comoving
+compactible
+compactify
+companionably
+companionate
+companionway
+companionways
+comparatist
+comparativist
+compart
+compartmental
+compartmentation
+compartmentations
+compassable
+compassionless
+compatability
+compatriotic
+compeer
+compellation
+compeller
+compend
+compendious
+compendiously
+compendiousness
+compensability
+compensational
+compensator
+compensators
+compere
+compered
+compering
+competitory
+complacence
+compleat
+complected
+complemental
+complementarily
+comples
+complexation
+complexional
+complexometric
+complexometry
+compliancy
+complicacy
+complice
+complimentarily
+compline
+complot
+compo
+componential
+componentry
+compos
+compoundable
+comprehendible
+comprehensibly
+compressional
+comprisable
+comprisal
+comprisals
+comptrollership
+compulsorily
+compunctious
+compurgation
+compurgations
+compurgator
+computerite
+computerlike
+computernik
+comradery
+comsat
+comsummatively
+concavity
+concealable
+conceivability
+conceivableness
+concentrically
+concentricity
+conceptacle
+conceptional
+conceptualism
+conceptualist
+conceptualistic
+conceptualistically
+conceptus
+concernment
+concertante
+concertgoer
+concerti
+concertmeister
+concessional
+concessionary
+concessive
+concessively
+conciliar
+conciliarly
+concinnity
+concoction
+concomitance
+concordat
+concorde
+concrescence
+concrescences
+concrescent
+concretionary
+concretism
+concretist
+concretistic
+concubinage
+concupiscence
+concupiscent
+concupiscible
+concuss
+concussed
+concusses
+concussing
+concussive
+concussively
+condemnable
+condemnor
+condensable
+condensational
+condescendence
+condign
+condignly
+condimental
+conditionable
+conditionality
+condolatory
+condole
+condoled
+condoling
+condom
+condominial
+condonable
+condonation
+condor
+conductibility
+conductible
+conductimetric
+conductometric
+conductorial
+conductress
+conduplicate
+conduplication
+confab
+confabbed
+confabbing
+confabulator
+confabulatory
+confection
+confectionary
+confectioner
+confectioners
+confections
+confederal
+confederalist
+confederalists
+conferential
+conferment
+conferments
+conferral
+conferrals
+confessable
+confessionalism
+confessionalist
+confetti
+confidante
+confidantes
+configural
+configurate
+configurated
+configurates
+configurating
+configurational
+configurationally
+configurative
+confirmability
+confirmable
+confirmational
+confiscable
+confiscatable
+confiscator
+confiscators
+conflagrant
+conflagrate
+conflagrated
+conflagrates
+conflagrator
+conflagrators
+conflagratory
+conflate
+conflated
+conflates
+conflating
+conflation
+conflations
+conflatrate
+conflatrating
+conflictful
+confliction
+conflictions
+conflictless
+conflictual
+confluence
+confluences
+conflux
+confluxes
+confocal
+conformable
+conformably
+conformism
+confraternities
+confraternity
+confrere
+confreres
+confrontal
+confrontationism
+confrontationist
+confusional
+confutation
+confutations
+confutative
+confutator
+confutators
+cong
+conga
+congealment
+congelation
+congelations
+congener
+conger
+congeries
+conglomeratic
+conglomerator
+conglutinate
+conglutinated
+conglutinates
+conglutinating
+conglutination
+congratulator
+congregant
+congregational
+congregator
+congretants
+congruency
+conicity
+conjugacy
+conjugality
+conjugant
+conjugants
+conjugational
+conjugationally
+conjunctional
+conjunctionally
+conjunctiva
+conjunctival
+conjunctivitis
+conjuration
+conjurations
+conjuror
+connate
+connately
+connatural
+connaturality
+connaturally
+connectable
+connectible
+connectional
+connelly
+conniption
+connivent
+connivery
+connoisseurship
+connotational
+connubialism
+connubiality
+conscienceless
+conscribe
+conscribed
+conscribes
+conscribing
+consecrator
+consecratory
+consecution
+consentaneous
+consentaneously
+conservancy
+conservational
+conservatorial
+consignable
+consignation
+consignee
+consignment
+consignor
+consistorial
+consistory
+consociate
+consociation
+consociational
+consol
+consolatory
+consolette
+consolidator
+consolidators
+consols
+consonancy
+conspecific
+conspectus
+conspectuses
+conspicuity
+conspiration
+conspirational
+conspirations
+constabulary
+constellate
+constellatory
+constipate
+constipated
+constipates
+constipating
+constipation
+constitutionalism
+constitutionalist
+constitutionless
+constringe
+constringed
+constringent
+constringes
+constringing
+construable
+construal
+constructionist
+constructivism
+constructivist
+consubstantial
+consubstantiate
+consubstantiation
+consuetude
+consuetudinary
+consulship
+consultancies
+consultancy
+consultantship
+consultor
+consumerism
+consumerist
+consumership
+consummator
+consummatory
+contagium
+containerboard
+contaminator
+contemplator
+contemporaneity
+contemporarily
+contemptibly
+contendere
+conterminous
+conterminously
+contestation
+contexture
+contingence
+continua
+continuate
+continuated
+continuates
+continuating
+continuative
+continuatively
+continuator
+continuo
+contortionist
+contortionistic
+contortionists
+contrabandist
+contrabassist
+contrabassoon
+contractibility
+contractible
+contractile
+contractility
+contractional
+contracture
+contradictable
+contradictious
+contradictor
+contradistinct
+contradistinctive
+contradistinctively
+contradistinguish
+contrail
+contralateral
+contralto
+contraoctave
+contraposition
+contrapuntal
+contrapuntally
+contrapuntist
+contrarieties
+contrariety
+contrarious
+contrariwise
+contrastable
+contrasty
+contravariant
+contretemps
+controllership
+controllerships
+controlment
+controlments
+controversialism
+controversialist
+controvert
+controverted
+controverter
+controverting
+controverts
+contumacious
+contumaciously
+contumelious
+contumeliously
+contuse
+contused
+contuses
+contusing
+conurbation
+conurbations
+convect
+convected
+convecting
+convectional
+convective
+convector
+convectors
+convects
+conveniency
+conventicle
+conventicler
+conventionalism
+conventionalist
+conventioneer
+conventual
+conventually
+convergency
+conversable
+conversance
+conversancy
+conversional
+convertibly
+convertiplane
+convertor
+conviviality
+convocate
+convocational
+convolutional
+convulsant
+convulsionary
+cony
+cooch
+cookout
+cookouts
+cookshack
+cookshop
+cookware
+coolish
+coomb
+coombs
+coonskin
+cooperage
+cooperationist
+coot
+cootie
+copacetic
+coparcenary
+coparcener
+copartner
+copartnership
+copeck
+copemate
+copesetic
+copesmate
+copestone
+copilot
+coplanarity
+copliots
+copperas
+copperplate
+coppice
+copping
+copra
+coprinus
+coprocessor
+coprocessor's
+coprocessors
+coproduct
+coproduct's
+coproducts
+coprolite
+coprolitic
+copula
+copulas
+copulate
+copulated
+copulates
+copulating
+copulation
+copulative
+copulatively
+copulatory
+copyboy
+copycat
+copycats
+copycatted
+copycatting
+copydesk
+copyhold
+copyholder
+copyreader
+coquet
+coquetry
+coquettish
+coquettishly
+coquettishness
+coquina
+coralberry
+coralline
+corbel
+cordate
+cordately
+cordiality
+cordiform
+cordless
+cordwain
+cordwainer
+cordwainery
+cordwood
+corecipient
+corelate
+corelation
+coreligionist
+corequisite
+corespondent
+corkboard
+corkboards
+corkier
+corky
+cornball
+corncob
+corncrib
+corneal
+corneous
+cornerman
+cornerways
+cornerwise
+cornetist
+cornettist
+cornhusking
+cornice
+corniced
+cornices
+corniche
+cornicing
+cornification
+cornily
+cornstalk
+cornucopian
+cornwallis
+corolla
+corollate
+coronagraph
+coronograph
+corpocracies
+corpocracy
+corpora
+corporality
+corporatism
+corporatist
+corporativism
+corporator
+corporeity
+corporis
+corposant
+corpulencies
+corpulency
+corpuscle
+corpuscle's
+corpuscles
+corpusculated
+corpuscule
+corpuscules
+corrade
+corraded
+corrading
+corrasion
+corrasions
+corrasive
+correctional
+correctitude
+correlatable
+correlational
+correspondency
+corresponsive
+corrigenda
+corrigibility
+corrigibly
+corroborant
+corroborator
+corroborators
+corroboratory
+corroboree
+corruptibility
+corruptibly
+corruptionist
+corsair
+corse
+corsica
+corsican
+cortege
+corteges
+corticate
+corticated
+cortices
+corticoid
+corvallis
+cos
+cosec
+coset
+cosh
+cosher
+cosigner
+cosmetician
+cosmeticians
+cosmetologist
+cosmetologists
+cosmetology
+cosmo
+cosmochemical
+cosmochemistry
+cosmogenic
+cosmogonic
+cosmogonical
+cosmogonist
+cosmogony
+cosmographer
+cosmographic
+cosmographical
+cosmographically
+cosmography
+cosmologic
+cosmonaut
+cosmopolite
+cosmopolitism
+cosponsorship
+cosset
+cosseted
+cosseting
+cossets
+costa
+costal
+costless
+costlessly
+costmary
+costumery
+costumey
+costumier
+cote
+coterie
+coteries
+cotillon
+cotman
+cotoneaster
+cotta
+cottagey
+cottontail
+cottontail's
+cottontails
+cotty
+couldst
+councilmanic
+countability
+countdown
+countdown's
+countdowns
+counteraction
+counterblow
+counterchallenge
+counterchange
+countercheck
+countercurrent
+countercurrently
+counterespionage
+counterfoil
+counterintelligence
+counterirritant
+countermarch
+countermove
+countermovement
+counteroffensive
+counteroffer
+counterpane
+counterplan
+counterplea
+counterplot
+counterpose
+counterposed
+counterposes
+counterposing
+counterpunch
+counterpuncher
+counterreformation
+counterrevolutionaries
+counterrevolutionary
+counterrevolutionary's
+counterrevolutionist
+countershaft
+countershafts
+countersign
+countersignature
+counterspy
+counterstatement
+countertenor
+countertenors
+counterterrorism
+counterterrorist
+counterthreat
+counterthreat's
+counterthreats
+countertrend
+counterview
+countryfied
+countryish
+countryseat
+countrywoman
+countywide
+coupal
+couplement
+courtmartial
+couscous
+cousinage
+cousinhood
+cousinship
+couth
+couture
+couturier
+couturiere
+covalence
+covalency
+covenantal
+covenantee
+covenantor
+covent
+coventry
+coverless
+coverture
+covertures
+covetable
+covey
+coveys
+cowage
+cowbane
+cowcatcher
+cowman
+cowmen
+cowpea
+cowry
+cox
+coypu
+cozily
+cpr
+crabber
+crabbier
+crabby
+crabwise
+crackajack
+crackdown
+crackerjack
+craftily
+craftsmanlike
+craftsperson
+craftswoman
+craftswomen
+cragged
+craggily
+cragsman
+crammer
+crampon
+crampon's
+crampons
+craneman
+cranemen
+cranial
+cranially
+craniate
+crape
+crapper
+crapping
+crappy
+crapshooter
+crapulous
+crashworthiness
+crashworthy
+crassitude
+craterlet
+crayonist
+creakily
+creamily
+creaseless
+creatural
+creaturehood
+creche
+creches
+creditability
+cree
+creepage
+creese
+creighton
+crematorium
+crenate
+crenated
+crenately
+crenation
+crenelle
+crenulate
+crenulated
+crenulation
+creosol
+creosote
+crepey
+crepitant
+crepitate
+crepitation
+crepuscle
+crepuscular
+crepuscule
+crepy
+crescentic
+crescive
+crescively
+cresol
+cresset
+crestal
+crestless
+cretinism
+cretonne
+crevasse
+crewelwork
+crewless
+crewmember
+crewmembers
+cribbage
+cribbage's
+cribber
+cribriform
+crick
+criminate
+criminating
+crimination
+criminological
+criminologically
+criminologist
+criminology
+criminous
+crimpier
+crimpy
+crinoid
+crinoline
+crispier
+crispiness
+crispy
+criticaster
+croaky
+croatian
+crocket
+crocketed
+crocodilian
+croissant
+croissants
+cronyism
+crookback
+crookbacked
+cropland
+cropland's
+croplands
+croquet
+croquette
+crore
+crossability
+crossbearer
+crossbill
+crossbones
+crossbow
+crossbowman
+crossbred
+crossbreed
+crosscurrent
+crosscurrents
+crosscut
+crosslet
+crosslink
+crosslink's
+crosslinks
+crosspatch
+crosspiece
+crosstown
+crosstree
+crosswind
+crotchet
+crotcheted
+crotcheting
+crotchets
+croton
+croup
+croupous
+croupy
+crouse
+crouton
+crowberry
+crowfeet
+crowkeeper
+crownet
+cruciate
+cruciately
+crucifer
+cruciferous
+cruciform
+cruciformly
+crudded
+crudding
+crueller
+cruellest
+cruet
+cruller
+crumbier
+crumby
+crumpet
+crupper
+crustacea
+crustaceous
+crustal
+crustier
+crustification
+crustily
+crustiness
+crustose
+crusty
+crybaby
+crymotherapy
+cryobiological
+cryobiologically
+cryobiologist
+cryobiologists
+cryobiology
+cryogen
+cryogenically
+cryogeny
+cryolite
+cryonic
+cryonics
+cryophilic
+cryoscope
+cryoscopic
+cryoscopy
+cryosurgery
+cryotherapy
+cryotron
+cryptal
+cryptical
+cryptically
+crypto
+cryptogenic
+cryptogrammic
+cryptograph
+cryptographically
+cryptos
+cryst
+cubage
+cubature
+cubbies
+cubby
+cubical
+cubically
+cubicle
+cubiform
+cubistic
+cubit
+cuboid
+cuboidal
+cuckold
+cuckoldry
+cucullate
+cucullated
+cucullates
+cucurbit
+cuddleback
+cuddlesome
+cuddy
+cueing
+cuffless
+cuke
+culation
+cullender
+culminant
+culotte
+culottes
+culpably
+cultch
+cultic
+cultigen
+cultism
+cultivability
+cultivar
+cultivars
+cultivatable
+cumbrous
+cumbrously
+cumbrousness
+cumulous
+cunctation
+cunctative
+cuneate
+cuneately
+cuneiform
+cunner
+cunnilinctus
+cunnilingus
+cunt
+cupbearer
+cupcake
+cuplike
+cupola
+cuppier
+cuppy
+cupreous
+cupriferous
+cuprite
+cupsful
+cupular
+cupulate
+cupule
+curability
+curatorial
+curatorship
+curbstone
+cureless
+curet
+curettage
+curette
+curetted
+curettement
+curetting
+curite
+curium
+curlew
+curmudgeon
+curmudgeonly
+curricle
+currie
+curriery
+currish
+currishly
+cursorial
+curst
+curtailment
+curtal
+curtesy
+curtilage
+curule
+curvacious
+curveball
+curvilineal
+curvy
+cushily
+cushionless
+cushiony
+cuspate
+cuspated
+cuspid
+cuspidate
+cuspidated
+cuspidation
+cuspidor
+cussword
+cusswords
+custodianship
+custodianships
+customshouse
+cutability
+cutaround
+cutaway
+cutch
+cutesy
+cutey
+cuteys
+cuticle
+cuticles
+cuticular
+cutie
+cutler
+cutlery
+cutline
+cutover
+cutpurse
+cutset
+cuttable
+cutup
+cutups
+cutwater
+cutwork
+cybernated
+cybernation
+cybernetical
+cybernetically
+cybernetician
+cyberneticist
+cyborg
+cycad
+cyclamate
+cyclitol
+cyclo
+cycloaddition
+cyclometer
+cyclometer's
+cyclometers
+cyclonic
+cyclonically
+cyclorama
+cyclos
+cyclotomic
+cyclotron
+cygnet
+cygnet's
+cygnets
+cymbalist
+cymbalists
+cynosure
+cypher
+cyphers
+cystamine
+cysteine
+cystic
+cytaster
+cytokinin
+cytologic
+cytological
+cytologically
+cytologist
+cytolysin
+cytolytic
+cytopathogenicity
+cytophilic
+cytoplasmic
+cytoplasmically
+cytosine
+cytostatic
+cytostatically
+cytotoxicity
+cytotoxin
+cytotropic
+dabber
+dabbers
+dachshunde
+dactylus
+daedal
+daff
+daft
+dafter
+daftest
+daftly
+daftness
+daggerman
+daguerreotype
+daguerreotype's
+daguerreotypes
+daguerreotypic
+daguerreotypy
+dahlia
+dahlias
+daimon
+daimones
+daimonic
+daimons
+daiquiri
+daiquiris
+dairymaid
+daishiki
+dali
+dalliance
+dalloway
+dallyes
+dalmatian
+dalmatians
+dalmatic
+damnable
+damnableness
+damnably
+damnatory
+damndest
+damnify
+dampish
+damselflies
+damselfly
+danceability
+danceable
+dander
+dandiacal
+dandiacally
+dandification
+dandify
+dandle
+dandled
+dandling
+dandruff
+dandruffy
+dandyish
+dandyishly
+dandyism
+dandys
+danseur
+daphnia
+daredevil
+daredevilry
+daredevils
+daredeviltry
+dareful
+daresay
+darkish
+darkle
+darkroom
+darkrooms
+darksome
+darlington
+darrow
+darry
+datable
+datamedia
+dataswitch
+dataswitches
+datcap
+dateable
+dateless
+datetime
+datura
+daughterless
+dauphin
+dauphine
+davit
+daybook
+daydreamlike
+daylong
+daymare
+dayroom
+dayrooms
+daystar
+db
+de
+deacidification
+deacidify
+deactivator
+deadbeat
+deadeye
+deadfall
+deadlight
+deadpan
+deadpanner
+deaerate
+deaerates
+deaeration
+dealate
+dealated
+dealates
+dealation
+dealership
+deaminate
+deamination
+deanery
+deanship
+deathblow
+deathless
+deathlessly
+deathlessness
+deathsman
+deathwatch
+debark
+debarkation
+debarks
+debarment
+debasement
+debatement
+debator
+debators
+debauchee
+debone
+deboner
+debones
+deboning
+debouch
+debouchment
+debouchure
+debtless
+debutant
+decadency
+decagon
+decagram
+decahedron
+decalcification
+decalcify
+decalcomania
+decalescence
+decalogue
+decalogues
+decametric
+decamp
+decampment
+decamps
+decanol
+decantation
+decapitate
+decapitates
+decapitating
+decapitation
+decapitator
+decapod
+decapod's
+decapods
+decarbonate
+decarbonated
+decarbonates
+decarbonating
+decarbonation
+decarbonator
+decasyllabic
+decasyllable
+deceivable
+deceivableness
+decelerator
+decennium
+deceptional
+decerebrate
+decerebrated
+decerebrates
+decerebrating
+decerebration
+deciare
+decidua
+decidual
+deciduate
+decillion
+decipherable
+decipherment
+decistere
+deckhand
+deckhouse
+deckle
+declarable
+declarant
+declass
+declasse
+declensional
+declensionally
+declinable
+declinate
+declinational
+declivitous
+decoct
+decocted
+decocting
+decoction
+decoctions
+decocts
+decollate
+decollated
+decollates
+decollating
+decollation
+decollations
+decolonise
+decommission
+decompensate
+decompensation
+decompensatory
+deconcentrate
+deconcentrator
+decondition
+decongest
+decongestant
+decongestion
+decongestive
+deconsecrate
+deconsecration
+decontaminate
+decontaminates
+decontaminating
+decontamination
+decontaminations
+deconvolution
+deconvolve
+decorticator
+decorticators
+decoupage
+decoupages
+decremental
+decrepid
+decrepit
+decrepitate
+decrepitation
+decrepitly
+decrepitude
+decrescendo
+decrescent
+decretal
+decretals
+decretive
+decretory
+decrial
+decrials
+decryptograph
+decsystem
+dectape
+decumbent
+decuple
+decurved
+decussate
+decussately
+decussation
+decwriter
+dedicator
+dedicatory
+dedifferentiate
+dedifferentiated
+dedifferentiation
+deedless
+deejay
+defalcate
+defalcation
+defalcator
+defamation
+defamatory
+defat
+defeasance
+defeasibility
+defeasible
+defeature
+defeatured
+defeatures
+defeaturing
+defector
+defector's
+defectors
+defendable
+defensibility
+defensibly
+deferential
+deferentially
+deferral
+defervescence
+defervescences
+defervescent
+defial
+defibrillation
+defibrillator
+defilement
+definably
+definement
+definitude
+deflagrate
+deflagrated
+deflagrates
+deflagrating
+deflagration
+deflationary
+deflator
+deflexed
+defloration
+deflorations
+deflower
+defoamer
+defoamers
+defoe
+defoliant
+defoliate
+defoliated
+defoliates
+defoliating
+defoliation
+defoliator
+deforce
+deforcement
+deforciant
+deforest
+deforester
+deformative
+defraudation
+defrayable
+defrayal
+defrayals
+defrock
+defuse
+defused
+defusing
+defyed
+defys
+degas
+degassing
+degauss
+degaussed
+degausses
+degaussing
+degeneracy
+degranulation
+degressive
+degressively
+dehydrase
+dehydrator
+deism
+deist
+deistic
+deistical
+deistically
+dejeuner
+dejeuners
+delaminate
+delamination
+delate
+delated
+delates
+delating
+delation
+delator
+delectability
+delectably
+delectate
+delegacy
+delft
+delict
+delightsome
+delightsomely
+delimitate
+delimitative
+delineament
+delineaments
+delineator
+deliquesce
+deliquescent
+delist
+deliverability
+dellwood
+delphine
+delphinium
+deltaic
+delusional
+delusionary
+delusory
+demagog
+demagogic
+demagogical
+demagogically
+demagogism
+demagoguery
+demagogy
+demandable
+demandant
+demantoid
+demark
+demarkation
+dementia
+demential
+demi
+demigoddess
+demijohn
+demission
+demitasse
+demiurge
+democratique
+demographiques
+demolishment
+demolitionist
+demoniacal
+demoniacally
+demonian
+demonical
+demonically
+demonology
+demonstrability
+demonstrational
+demonstrationist
+demotic
+demount
+demounted
+demounting
+demounts
+demulcent
+demure
+demurely
+demureness
+demurrage
+demurral
+demystified
+demystifies
+demystify
+demystifying
+denaturant
+denaturation
+denaturational
+denazification
+denazify
+dendriform
+dendrite
+dendrite's
+dendrites
+dendritic
+dendroid
+dendrologic
+dendrological
+dendrologist
+dendrology
+deneen
+denegation
+denervate
+denervated
+denervates
+denervating
+denervation
+denigrator
+denigratory
+denitrification
+denitrify
+denominational
+denominationalism
+denominationalist
+denotement
+denouncement
+densification
+densify
+densimeter
+densimeter's
+densimeters
+densimetric
+dentate
+dentated
+dentately
+dentation
+denticle
+denticulate
+denticulated
+denticulately
+denticulation
+dentiform
+dentifrice
+dentigerous
+dentil
+dentin
+dentinal
+dentine
+dentition
+dentulous
+denudation
+denudational
+denudement
+denumerably
+denunciatory
+denys
+deontological
+deontologist
+deontology
+deoxidation
+deoxycholate
+deoxygenation
+deoxyribose
+depigmentation
+depilate
+depilated
+depilates
+depilating
+depilation
+depilatory
+deplane
+deplaned
+deplanes
+deplaning
+depletable
+depone
+deponed
+deponent
+depones
+deponing
+depopulate
+depopulation
+depopulator
+deportable
+depositional
+depravation
+depravations
+depravement
+deprecatorily
+depreciator
+depreciators
+depreciatory
+depredate
+depredated
+depredates
+depredating
+depredation
+depredator
+depredators
+depredatory
+depressily
+depressor
+depthless
+derailment
+derate
+derating
+deration
+derisory
+derivational
+derma
+dermal
+dermatoid
+dermatologic
+dermatological
+dermatologist
+dermatology
+dermatosis
+derogatorily
+derrickman
+derrickmen
+desalination
+desalting
+descendible
+descension
+descrating
+desecrator
+desertic
+desex
+deshabille
+desiccant
+desiccate
+desiccated
+desiccates
+desiccation
+desiccative
+desiccator
+desiderate
+desideration
+desiderative
+designatory
+designee
+designment
+desistance
+deskman
+desolator
+desorb
+desorbable
+desorbed
+despicable
+despicableness
+despisement
+despiteful
+despitefully
+despitefulness
+despiteous
+despiteously
+despoilment
+despondence
+despondences
+despotically
+destructibility
+destructible
+destructionist
+destructivity
+desultorily
+detab
+detachability
+detachably
+detainee
+detainment
+detectability
+detectaphone
+detent
+determent
+determents
+determinably
+determinantal
+determinator
+determinist
+deterrer
+detestably
+dethrone
+dethronement
+detinue
+detonabilities
+detonability
+detonatable
+detonational
+detoxicant
+detoxicants
+detoxicate
+detoxicated
+detoxicates
+detoxicating
+detoxication
+detoxicator
+detoxification
+detoxified
+detoxifies
+detoxify
+detoxifying
+detraction
+detractions
+detrain
+detrained
+detraining
+detrainment
+detrains
+detritus
+detumescence
+detumescences
+detumescent
+deuterate
+deuterated
+deuterates
+deuterating
+deuteration
+deuterations
+deuteron
+deuteron's
+devaluate
+devaluations
+devastator
+devastators
+developable
+deverbative
+devest
+deviancies
+deviancy
+deviationism
+deviationist
+deviator
+deviators
+devilkin
+devilment
+devilments
+devilry
+deviltry
+devisability
+devisable
+devisal
+devisee
+devisor
+devitrification
+devitrify
+devoir
+devoirs
+devolution
+devolutionary
+devolutionist
+devotement
+dewater
+dewatered
+dewaterer
+dewatering
+dewaters
+dewily
+deworm
+dexedrine
+dexterous
+dexterously
+dexterousness
+dextral
+dextrality
+dextrally
+dextrine
+dextro
+dextrose
+dextrose's
+dey
+dharma
+diabolism
+diabolist
+diachronically
+diachrony
+diaconal
+diaconate
+diacritic
+diacritic's
+diacritics
+diadromous
+diagnoseable
+diagnostical
+diagnostically
+diagrammatical
+diakinesis
+diakinetic
+dialectician
+dialecticians
+dialectological
+dialectologically
+dialectologist
+dialectology
+dialogic
+dialogical
+dialogically
+dialogist
+dialogistic
+dialup
+dialup's
+dialups
+dialytic
+diamagnet
+diamagnetism
+diamagnets
+diametral
+diametrical
+dianne
+diapason
+diapause
+diapausing
+diaphaneity
+diaphone
+diaphragmatic
+diaphragmatically
+diaphragmic
+diapositive
+diarchy
+diarist
+diaspora
+diaspore
+diastole
+diastolic
+diastrophic
+diastrophically
+diastrophism
+diathermic
+diathetic
+diation
+diatomaceous
+diatomite
+diatonically
+diatropic
+diatropism
+diatropisms
+dibble
+dibs
+dicarboxylic
+dicey
+dichondra
+dichotic
+dichotically
+dichotomist
+dichroic
+dichroism
+dichroitic
+dichromat
+dichromate
+dichromatic
+dichromatism
+dichromats
+dicier
+dickcissel
+dicta
+dictionally
+dicyclic
+didact
+didactical
+didactically
+didacticism
+dieing
+diel
+dieldrin
+dieresis
+dietarily
+dietetically
+diety
+dieu
+dieux
+diffeomorphic
+diffeomorphism
+differentia
+diffusional
+difluoride
+digamma
+digenesis
+digenetic
+digestibility
+digitalin
+digitate
+digitated
+digitately
+digitation
+digitigrade
+digitonin
+digressional
+digressionary
+dihybrid
+dihydroxy
+dijon
+dilapidator
+dilatability
+dilatable
+dilatational
+dilatometer
+dilatometer's
+dilatometers
+dilatometric
+dilatometry
+dilatorily
+dildo
+dildos
+dilemmatic
+dilemmatical
+dilettanti
+dilettantish
+dilettantism
+dilettantist
+dillydally
+diluent
+dilutor
+diluvial
+dimaggio
+dimeric
+dimerism
+dimerous
+dimeter
+dimeter's
+dimeters
+dimethoxymethane
+diminishable
+diminishment
+diminuendo
+diminuendo's
+diminuendos
+diminutional
+dimmable
+dimorphic
+dimorphism
+dimorphous
+dimout
+dimply
+dimwit
+dimwits
+dimyristoyl
+dinette
+dingbat
+dingbats
+dingdong
+dingily
+dingle
+dinkey
+dinnerless
+dinning
+dinosaurian
+dinosauric
+diogenes
+dion
+dioptometer
+dioptometer's
+dioptometers
+dioptometry
+dioptric
+dioptrics
+dioramic
+diorite
+diphase
+diphasic
+diphenyl
+diphtherial
+diphtherian
+diphtheritic
+diphtheroid
+diphthongal
+diplex
+diploid
+diploid's
+diploids
+diploidy
+diplomate
+diplomatically
+diplomatist
+dipod
+dipolar
+dipperful
+dipropellant
+dipsomania
+dipsomaniac
+dipsomaniacal
+dipstick
+diptych
+directionless
+directorial
+dirigible
+dirigibles
+disaccharide
+disaccharides
+disaccord
+disaccustom
+disadvantageous
+disadvantageously
+disadvantageousness
+disaffect
+disaffirm
+disaffirmance
+disaffirmation
+disagreeability
+disagreeably
+disallowance
+disannul
+disapprovative
+disarrange
+disarrangement
+disarranges
+disarticulate
+disarticulation
+disassociate
+disassociated
+disassociates
+disassociating
+disassociation
+disavowable
+disbandment
+disbarment
+disburden
+disburdenment
+discardable
+discernable
+dischargeable
+dischargee
+disciform
+disciplinable
+disciplinal
+disciplinarian
+disciplinarily
+disciplinarity
+disclamation
+disco
+disco's
+discographer
+discographic
+discographical
+discographically
+discography
+discoid
+discoidal
+discoidin
+discombobulate
+discomfiture
+discomfitures
+discomfortable
+discomfortably
+discommend
+discommendable
+discommendation
+discommode
+discommodes
+discommoding
+discompose
+discomposed
+discomposedly
+discomposure
+disconfirm
+disconfirmation
+disconform
+disconformable
+disconformity
+disconsolate
+disconsolately
+disconsolateness
+disconsolation
+discontentment
+discophile
+discordance
+discordances
+discordancy
+discos
+discountenance
+discourageable
+discourtesy
+discoverable
+discreditable
+discreditably
+discriminability
+discriminably
+discriminational
+discriminator
+discriminatorily
+discriminators
+discussable
+discussible
+disembark
+disembarkation
+disembarrass
+disembodiment
+disembody
+disembowelment
+disenchant
+disenchanter
+disenchanting
+disenchantingly
+disencumber
+disencumbrance
+disendow
+disendower
+disendowment
+disentanglement
+disenthralled
+disenthralling
+disequilibrate
+disequilibration
+disestablish
+disestablished
+disestablishment
+disestablishmentarian
+disesteem
+disestimation
+disfeature
+disfeaturement
+disfigurement
+disfigurements
+disfranchise
+disfranchised
+disfranchisement
+disfranchises
+disfranchising
+disfrock
+disfunction
+disfurnish
+disfurnishment
+disgorgement
+disgruntlement
+disguisement
+dishabille
+disharmonic
+disharmonious
+dishcloth
+disheartenment
+disheartenments
+dishrack
+dishracks
+dishy
+disincentive
+disincline
+disinclined
+disinclines
+disinclining
+disinfect
+disinfectant
+disinfectants
+disinfected
+disinfecting
+disinfection
+disinfects
+disinfest
+disinfestant
+disinfestation
+disinfested
+disinfesting
+disinfests
+disinflation
+disinflationary
+disingenuous
+disingenuously
+disingenuousness
+disinhibition
+disinhibitory
+disinsectization
+disintegrator
+disintegrators
+disinter
+disintered
+disintering
+disinterment
+disinters
+disintoxication
+disinvest
+disinvestment
+disjuncture
+disklike
+dislicense
+dislicensed
+dislicenser
+dislicenses
+dislicensing
+dislikable
+dislikably
+dislikeable
+dislimn
+dismantlement
+dismast
+dismember
+dismembering
+dismission
+disoblige
+disobliger
+disoblingingly
+disorient
+disorientation
+disownment
+dispart
+dispassion
+dispensability
+dispensable
+dispensational
+dispensatory
+dispeople
+dispersant
+dispirit
+dispirited
+dispiritedly
+dispiritedness
+dispiriting
+dispirits
+dispiteous
+displaceable
+displant
+displode
+disploded
+displodes
+disploding
+displosion
+disport
+disportment
+disporves
+disposability
+dispositive
+dispossess
+dispossesses
+dispossessing
+dispossessor
+disposure
+disposures
+dispraise
+dispraiser
+dispraisingly
+dispread
+disprize
+disproof
+disprovable
+disputation
+disputatious
+disputatiously
+disputatiousness
+disquantity
+disraeli
+disrate
+disregardful
+disrelate
+disrelated
+disrelation
+disrelish
+disremember
+disremembrance
+disreputability
+disreputably
+disrespectability
+disrespectable
+disrespectful
+disrespectfully
+disrespectfulness
+dissatisfactory
+dissatisfies
+dissatisfy
+dissatisfying
+dissector
+disseminator
+disseminators
+dissentient
+dissention
+dissert
+dissertate
+dissertator
+disserve
+dissever
+disseverance
+disseverment
+dissidence
+dissimilate
+dissimilated
+dissimilates
+dissimilating
+dissimilation
+dissimilative
+dissimilatory
+dissimilitude
+dissimulate
+dissimulator
+dissociability
+dissocial
+dissociant
+dissolubility
+dissoluble
+dissolute
+dissolutely
+dissoluteness
+dissolvable
+dissolvent
+dissuasion
+dissuasive
+dissuasively
+dissuasiveness
+dissyllable
+dissymmetric
+dissymmetry
+distemperate
+distemperature
+distensibility
+distensible
+distent
+distention
+distinguishability
+distinguishably
+distortional
+distractibility
+distractible
+distrain
+distrainable
+distrainer
+distrainor
+distraint
+distrait
+distressful
+distressfully
+distressfulness
+distributary
+distributee
+distrustful
+distrustfully
+distrustfulness
+disubstituted
+disunionist
+disunite
+disutility
+disvalue
+disyllabic
+dithery
+divagate
+divagation
+divaricate
+divarication
+divergencies
+divergency
+diversionist
+divertissement
+divertissements
+divestment
+dividable
+divinatory
+divisibility
+divisionism
+divisionist
+divorcement
+divot
+divulgence
+divulsion
+divvy
+dixiecrats
+dobbin
+doberman
+dobson
+doc
+docent
+docetic
+docility
+dockage
+dockhand
+dockworker
+doctorless
+doctorship
+doctrinairism
+documental
+documentale
+documentalist
+documentarian
+documentarily
+documentarist
+documentational
+dodder
+doddered
+dodderer
+doddering
+dodders
+doddery
+dodecyl
+dodgery
+dodgy
+dodington
+dodo
+dodo's
+dodos
+dogbane
+dogberry
+dogcart
+dogcatcher
+doge
+dogface
+dogfight
+dogfights
+dogfish
+doggerel
+doggery
+doggie
+doggier
+doggies
+doggish
+doggishly
+doggishness
+doggy
+doglike
+dogmatical
+dogmaticalness
+dogmatist
+dogmatist's
+dogmatists
+dogwatch
+doilies
+doily
+doit
+doited
+dolce
+dolesome
+dollhouse
+dollish
+dollishly
+dollishness
+dollop
+dollop's
+dolloped
+dolloping
+dollops
+dolorous
+dolorously
+dolorousness
+domical
+domicil
+domiciliary
+domiciliate
+domiciliation
+dominical
+dona
+donator
+donee
+doneness
+dong
+donner
+donut
+doodad
+doodlebug
+doohickey
+doomful
+doomfully
+doomsayer
+doomster
+doorjamb
+doorless
+doormat
+doornail
+doorplate
+doorpost
+doorsill
+doorstop
+dooryard
+dopester
+dopey
+dopier
+dopiness
+doppelganger
+dopy
+dormancy
+dormice
+dormie
+dormouse
+dormouse's
+dormy
+dosimetric
+doss
+dossal
+dosser
+dotal
+dotter
+dotterel
+dottier
+dottily
+dottiness
+dotty
+doublespeak
+doublethink
+doubletree
+douce
+douche
+doughboy
+doughface
+doughier
+doughlike
+doughnuttery
+doughtier
+doughtily
+doughtiness
+doughty
+doughy
+dovecot
+dovecote
+dovekie
+dovish
+dovishness
+dowdily
+dowdyish
+dowitcher
+downcourt
+downhaul
+downhearted
+downheartedly
+downheartedness
+download
+downloaded
+downloading
+downloads
+downrange
+downriver
+downshift
+downstage
+downstate
+downstater
+downstroke
+downswing
+downtime
+dozier
+doziness
+dozy
+drabber
+drabbest
+drabbing
+drabble
+drabbled
+drabbling
+draftable
+draggier
+draggle
+draggled
+draggling
+draggy
+dragline
+dragonet
+dragonish
+dragster
+drainpipe
+drainpipes
+dramalogue
+dramamine
+dramaturge
+dramaturgic
+dramaturgical
+dramaturgically
+dramshop
+drapability
+drapable
+drapeability
+drapeable
+drat
+dratted
+dratting
+drawable
+drawbar
+drawdown
+drawee
+drawerful
+drawknife
+drawnwork
+drawplate
+drawstring
+drawstring's
+drawstrings
+drawtube
+dray
+drayage
+drayman
+drayman's
+draymen
+draymen's
+dreamful
+dreamfully
+dreamfulness
+dreamland
+dreamworld
+drear
+drearily
+dreck
+dressage
+dressmake
+driblet
+driftage
+driftier
+driftweed
+driftwood
+driftwood's
+drifty
+drillability
+drillable
+drillmaster
+drinkability
+dripless
+dripper
+drivable
+driveable
+drivel
+driveline
+driverless
+drolleries
+drollery
+drolly
+dropkick
+dropkicker
+droplight
+droppage
+dropperful
+dropshot
+dropsy
+drossy
+droughtiness
+droughty
+drouth
+drownd
+drownded
+drownding
+drubber
+drugget
+drugmaker
+druidess
+druidic
+druidical
+druidism
+drumbeat
+drumbeater
+drumbeating
+drumfire
+drumlike
+drumlin
+drumroll
+drumstick
+drumsticks
+drunkometer
+drunkometer's
+drunkometers
+drupe
+dryable
+dryad
+dryasdust
+drylot
+drypoint
+drys
+drysalter
+drysaltery
+du
+dualist
+dualistic
+dualistically
+dubber
+dubbing
+dubiety
+dubiosity
+dubitable
+dubitation
+dubuque
+ducal
+ducally
+duckbill
+duckbilled
+duckboard
+duckfooted
+duckier
+duckpin
+duckweed
+duckweed's
+duckweeds
+ducky
+duclos
+ductility
+ductless
+ductule
+dudgeon
+dudish
+dudishly
+duende
+duenna
+duennaship
+duetted
+duetting
+duffle
+dugong
+dulcimer
+dulcimore
+dulgence
+dulles
+dullish
+dullishly
+dullsville
+dulness
+dulse
+dumbstruck
+dumbwaiter
+dumbwaiters
+dumdum
+dumka
+dumpily
+dumpish
+dumpling
+dumpling's
+dumplings
+dumpo
+dumpster
+dumpster's
+dumpsters
+dunderhead
+dunderheaded
+duneland
+dunelike
+dungaree
+dunghill
+dungy
+dunkel
+dunne
+duo
+duodecimal
+duodecimo
+duodenal
+duodenum
+duologue
+duomo
+duomos
+duopolistic
+duos
+dupery
+duple
+duplicitous
+duplicitously
+dupont
+duponts
+durance
+durometer
+durometer's
+durometers
+duros
+duskily
+dustcover
+dustheap
+dustily
+dustin
+dustless
+dustlike
+dustman
+dustpan
+dustpans
+dustup
+dutchess
+duteous
+duverger
+dwarfishly
+dwarfishness
+dwarfism
+dwarflike
+dyadically
+dyarchy
+dyeability
+dyeable
+dyerear
+dyestuff
+dyewood
+dynamist
+dynamistic
+dynamitic
+dynamometer
+dynamometer's
+dynamometers
+dynamometric
+dynamometry
+dynamotor
+dynapolis
+dynast
+dynastically
+dynasts
+dynatron
+dyne
+dynode
+dynodes
+dysenteric
+dysfunction
+dysfunctional
+dysgenesis
+dysgenic
+dysgenics
+dyslexia
+dyslexic
+dyslogistic
+dyslogistically
+dyspepsia
+dyspeptically
+dysphagia
+dysphagic
+dysphasia
+dysphasic
+dysphonia
+dysphonic
+dysphoria
+dysphoric
+dysplasia
+dysplastic
+dystrophic
+eV
+eaglet
+eagre
+earache
+eardrop
+eardrops
+earflap
+earful
+earldom
+earlobe
+earlock
+earmuff
+earmuffs
+earp
+earpiece
+earplug
+earthborn
+earthbound
+earthily
+earthlike
+earthling
+earthshaker
+earthshaking
+earthshakingly
+earthshine
+earthstar
+earthward
+earthwards
+earthwork
+earthworks
+earwax
+earwig
+earwigged
+earwigging
+earwitness
+easeful
+easefully
+easthampton
+eastwick
+easure
+eatery
+ebullience
+ebulliency
+ebullition
+eccentrically
+ecclesial
+ecclesiasticism
+ecclesiological
+ecclesiology
+ecdysiast
+ecdysis
+ecesis
+ech
+echidna
+echinulate
+echinulation
+echoey
+echoic
+echolocation
+eclat
+eclecticism
+eclogue
+eclosion
+ecol
+ecologic
+ecologist
+econometrically
+econometrician
+econometrist
+ecophysiological
+ecophysiology
+ecospecies
+ecospecific
+ecosphere
+ecotone
+ecotype
+ecotypic
+ecotypically
+ecru
+ecstatically
+ectoblast
+ectoblastic
+ectoderm
+ectodermal
+ectodermic
+ectogenic
+ectogenous
+ectomere
+ectomeric
+ectomorph
+ectomorphic
+ectoparasite
+ectoparasitic
+ectopic
+ectoplasm
+ectoplasmic
+ectotherm
+ectothermic
+ectotrophic
+ectotropic
+ecumenicalism
+ecumenicism
+ecumenicity
+ecumenism
+eczema
+eczematous
+edacious
+edacity
+edaphic
+edaphically
+edentate
+edentulous
+edgeless
+edgewater
+edgeways
+edgewood
+edgily
+edibility
+edictal
+edificatory
+editable
+editress
+eduard
+educability
+educable
+educationalist
+educationalists
+educationist
+educible
+eduction
+eductor
+eductors
+edulcorate
+edwardine
+eeg
+eellike
+eely
+eeriness
+eery
+effacement
+effectivity
+effectuality
+effeminacy
+effervesce
+effervescence
+effervescent
+effervescently
+efficacity
+efflorescence
+efflrescent
+effluence
+effortful
+effortfully
+effrontery
+effulgence
+effulgent
+eft
+egad
+egads
+egerton
+egestion
+egestive
+eggbeater
+eggcup
+eggnog
+eglantine
+egocentrically
+egocentricity
+egocentrism
+egoism
+egoist
+egoistic
+egoistical
+egoistically
+egoists
+egomania
+egomaniac
+egomaniacal
+egomaniacally
+egomaniacs
+egression
+eichmann
+eiderdown
+eidetically
+eidolon
+eigenfunction
+eigenfunctions
+eigenspace
+eighths
+eightyfold
+ein
+eine
+ejaculatory
+ejecta
+ejectable
+ejectment
+ekistic
+ekistics
+elapid
+elastase
+elastin
+elastomeric
+elaterite
+elbowroom
+elderberry
+eldership
+elecroencephalographic
+electability
+electable
+electioneer
+electioneerer
+electret
+electriques
+electroacoustic
+electroacoustically
+electroacoustics
+electroanalysis
+electroanalytic
+electroanalytical
+electrocardiographic
+electrocardiographically
+electrocardiography
+electrochemical
+electrochemically
+electrochemistry
+electroconvulsive
+electrocorticogram
+electrocorticogram's
+electrocorticograms
+electrodeposit
+electrodeposition
+electrodialysis
+electrodialytic
+electrodynamometer
+electrodynamometer's
+electrodynamometers
+electroencephalograph
+electroencephalography
+electroform
+electrogenesis
+electrogenic
+electrogram
+electrogram's
+electrograms
+electrohydraulic
+electrohydraulically
+electrojet
+electrokinetic
+electrokinetics
+electroless
+electrologist
+electroluminescence
+electroluminescent
+electrolytically
+electromagnetic
+electromagnetically
+electromechanical
+electromechanically
+electrometallurgy
+electrometer
+electrometer's
+electrometers
+electromotive
+electromyogram
+electromyogram's
+electromyograms
+electromyographical
+electronegative
+electronegativity
+electronography
+electrooculogram
+electrooculogram's
+electrooculograms
+electrophilic
+electrophoretic
+electrophoretically
+electrophoretogram
+electrophoretogram's
+electrophoretograms
+electrophotographic
+electrophotography
+electrophysiologic
+electrophysiological
+electrophysiologically
+electrophysiologist
+electrophysiology
+electroplate
+electroplater
+electropositive
+electroretinogram
+electroretinogram's
+electroretinograms
+electroretinograph
+electroretinographic
+electroretinography
+electroscope
+electrostatically
+electrosurgery
+electrosurgical
+electrothermal
+electrothermally
+electrothermic
+electrotonic
+electrotonically
+electrotype
+electrotyper
+electrovalence
+electrovalent
+electrowinning
+electrum
+electuary
+elegancy
+elegiacal
+elegiacally
+elegit
+elementarily
+elephantiasis
+elevenfold
+elfish
+elfishly
+elicitation
+elicitor
+elide
+elided
+elides
+eliding
+eligibly
+eliminable
+elisp
+elitism
+elitist
+elitists
+elixir
+ell
+elle
+ellie
+elliot
+elocutionary
+elocutionist
+elocutionists
+elopement
+elroy
+eluant
+elucidator
+elucubrate
+elucubrated
+elucubrates
+elucubrating
+elucubration
+eluent
+elutriate
+elutriator
+eluvial
+eluviate
+eluviation
+eluvium
+elver
+elvis
+elvish
+elysium
+elytron
+elytrum
+em
+emanational
+emancipationist
+emancipator
+emarginate
+emarginated
+emargination
+emasculator
+embalmment
+embarkation
+embarkment
+embarrassable
+embassage
+embattlement
+embay
+embayment
+embeddable
+embedment
+embitter
+embitterment
+embitters
+emblaze
+emblazed
+emblazes
+emblazing
+emblazon
+emblazoned
+emblazoner
+emblazoning
+emblazonment
+emblazonry
+emblazons
+emblematical
+emblematically
+emblements
+embolic
+embolism
+embolismic
+embosom
+embossable
+embossment
+embouchure
+embowed
+embowel
+embracement
+embraceor
+embracery
+embranchment
+embrangle
+embranglement
+embrasure
+embrittlement
+embrocate
+embrocated
+embrocates
+embrocating
+embrocation
+embroglio
+embroilment
+embrown
+embrue
+embryogenesis
+embryogenetic
+embryogenic
+embryogeny
+embryol
+embryologic
+embryological
+embryologically
+embryologist
+embryonal
+embryonally
+embryonated
+embryonically
+embryotic
+emceeing
+emendate
+emendation
+emendator
+emendatory
+emeriti
+emersed
+emerses
+emersion
+emetic
+emetically
+emigre
+emigre's
+emigree
+eminency
+emir
+emissive
+emollient
+emollients
+emote
+emoted
+emotes
+emoting
+emotionalist
+emotionalistic
+emotionless
+emotionlessness
+emotive
+emotively
+emotivity
+empanel
+empanels
+empathetic
+empennage
+emperies
+emperorship
+empery
+emphasization
+emphasization's
+emplacement
+emplane
+empoison
+empoisonment
+empowerment
+empressement
+emprise
+emptyhanded
+empurple
+empurpled
+empurpling
+ems
+emu
+emulous
+emulously
+emulousness
+emulsible
+emulsifiable
+emulsive
+emunctory
+en
+enactor
+enamelware
+enamine
+encage
+encapsule
+encapsules
+encasement
+encash
+encashment
+encaustic
+enceinte
+encephalic
+encephalitic
+encephalitogenic
+encephalogram
+encephalogram's
+encephalograms
+encephalon
+enchainment
+enchase
+enchased
+enchasing
+enchilada
+encipherment
+encirclement
+enclasp
+enclitic
+encomia
+encompassment
+encrimson
+encrustation
+encyst
+encystation
+encystment
+endamage
+endangerment
+endarch
+endarchy
+endbrain
+endemically
+endergonic
+endermic
+endermically
+endexine
+endite
+endleaf
+endlong
+endmost
+endobiotic
+endoblast
+endoblastic
+endocardial
+endochondral
+endocrine
+endocrinologic
+endocrinological
+endocrinologist
+endocrinology
+endocytic
+endocytosis
+endocytotic
+endoderm
+endodermal
+endodermis
+endodontia
+endodontic
+endodontically
+endodontics
+endodontist
+endoenzyme
+endoergic
+endoerythrocytic
+endogamic
+endogen
+endogenic
+endogeny
+endolymph
+endolymphatic
+endometrial
+endometriosis
+endometrium
+endomitosis
+endomorph
+endomorphic
+endomorphism
+endomorphy
+endonuclease
+endoparasite
+endoparasitism
+endophyte
+endophytic
+endoplasm
+endoplasmic
+endorsable
+endorsee
+endoscope
+endoscopic
+endoscopically
+endoscopy
+endoskeletal
+endoskeleton
+endosmosis
+endosmotic
+endosmotically
+endospermic
+endospermous
+endospore
+endosporic
+endosporous
+endosteal
+endosteally
+endosternite
+endosteum
+endostyle
+endosymbiosis
+endotherm
+endothermal
+endotoxic
+endotoxin
+endotracheal
+endotrophic
+endotropic
+endozoic
+endpaper
+endue
+endued
+enduing
+endways
+endwise
+enemata
+enfant
+enfants
+enfeeblement
+enfetter
+enfever
+enflame
+enflamed
+enflames
+enflaming
+enfold
+engild
+engineroom
+enginerooms
+enginery
+engird
+engirdle
+englacial
+englut
+englutted
+engluttin
+engorgement
+engr
+engraft
+engrailed
+engrain
+engrammic
+engrossment
+engulf
+engulfment
+enhalo
+enharmonic
+enharmonically
+enigmatical
+enigmatically
+enisle
+enjambement
+enjambment
+enkindle
+enlace
+enlacement
+enlistee
+enmeshment
+ennoblement
+enol
+enolase
+enolic
+enologist
+enology
+enplane
+enrapt
+enregister
+enrobe
+enroot
+ens
+ensample
+ensanguine
+ensconce
+ensconces
+ensconcing
+enscroll
+enserf
+enserfment
+ensheathe
+enshrine
+enshrined
+enshrinement
+enshrines
+ensiform
+ensilage
+ensile
+ensiled
+ensiling
+ensional
+ensnarl
+ensolite
+ensoul
+ensphere
+enswathe
+entablature
+entablement
+entablements
+ente
+entendre
+entente
+enterable
+enteral
+enterally
+enteric
+enthronement
+enticement
+entoderm
+entodermal
+entodermic
+entoil
+entoiled
+entombment
+entomological
+entomophagous
+entomophilous
+entomophily
+entrail
+entrails
+entrainment
+entrancement
+entrappingly
+entreatment
+entrustment
+entryway
+entwinement
+entwist
+enucleate
+enucleated
+enucleating
+enucleation
+enunciator
+enunciators
+envelopment
+envelopments
+environmentalism
+environmentalist
+environmentalists
+envisionin
+envoi
+envois
+enwheel
+enwind
+enwinding
+enwrap
+enwreathe
+enzymic
+enzymically
+enzymologist
+eon
+eon's
+eons
+eosine
+epaulette
+ephemerality
+epical
+epically
+epicardial
+epicardium
+epicarp
+epicene
+epicenism
+epicentral
+epicureanism
+epicurism
+epicurus
+epidemical
+epidemically
+epidemicity
+epidemiologic
+epidemiologist
+epidermal
+epigrammatical
+epigrammatically
+epigrammatism
+epigrammatist
+epigraphic
+epigraphical
+epigraphically
+epigraphist
+epigraphy
+epileptically
+epimorphism
+epiphanous
+epiphenomenal
+epiphenomenally
+epiphyseal
+epiphysis
+epiphyte
+epiphytic
+episcope
+episiotomy
+episodical
+episodically
+episomal
+episomally
+episome
+epistasy
+epistatic
+epistemic
+epistemically
+epistemologist
+epistolary
+epistoler
+epistrophe
+epitaphial
+epitaphic
+epithetic
+epithetical
+epode
+epodes
+eponymous
+equability
+equably
+equalitarian
+equalitarianism
+equational
+equationally
+equatorward
+equerries
+equerry
+equestrienne
+equiangular
+equiangularity
+equicaloric
+equilibrator
+equilibrators
+equilibratory
+equilibrist
+equilibristic
+equimolal
+equimolar
+equinoctial
+equipage
+equipoise
+equipollence
+equipollent
+equipollently
+equiponderant
+equiponderate
+equipotential
+equiprobable
+equitability
+equitant
+equitation
+equivalency
+equivocality
+equivocate
+equivocated
+equivocates
+equivocating
+equivocator
+equivoke
+equivoque
+eradicably
+eradicator
+eradicators
+eradictions
+erasabilities
+erasability
+erectable
+erectile
+erectility
+erelong
+erenow
+erewhile
+erewhiles
+erg
+ergative
+ergograph
+ergometer
+ergometer's
+ergometers
+ergometric
+ergonomic
+ergonomics
+ergonomist
+ergonovine
+ergosterol
+ergot
+ergotamine
+ergotic
+ergotism
+ergotropic
+erodibility
+erogenic
+erogenous
+erose
+erosely
+erosional
+erosionally
+erosivity
+erotical
+eroticism
+eroticist
+erotism
+erotogenic
+erratical
+erraticism
+errorless
+eruptible
+escalade
+escalader
+escalades
+escalator
+escalators
+escalatory
+escallop
+escallops
+escapement
+escapements
+escapism
+escapologist
+escapology
+escargot
+escarp
+escheat
+escherichia
+eschewal
+escot
+esculent
+esemplastic
+esker
+esophageal
+esoterica
+esoterically
+esotericism
+esp
+espadrille
+espagnol
+espanol
+esperance
+espial
+espresso
+espressos
+essayist
+essayistic
+essentialism
+essentialist
+essentiality
+establishable
+establishmentarian
+establishmentarianism
+esteemable
+ester
+estop
+estopped
+estopping
+estral
+estray
+estrogen
+estrogenic
+estrogenically
+estrone
+estrous
+estrum
+estrus
+estuarial
+esurience
+esuriency
+esurient
+esuriently
+etagere
+etatism
+etatist
+etch
+etcher
+etches
+etching
+ether
+ether's
+ethereality
+etheric
+etherish
+etherlike
+ethers
+ethicality
+ethician
+ethicians
+ethnical
+ethnobiological
+ethnobiology
+ethnocentric
+ethnocentrically
+ethnocentricity
+ethnocentrism
+ethnographer
+ethnographical
+ethnographically
+ethnol
+ethnologic
+ethnological
+ethnologically
+ethnologist
+ethnomusicology
+ethological
+ethologist
+ethoxy
+ethylate
+ethylation
+ethylenic
+ethylenically
+ethylic
+ethynyl
+etude
+etudes
+etui
+etymologist
+etymologists
+eucaryotic
+eucharistic
+euchre
+euclidian
+eucre
+eugenically
+eugenicist
+euglena
+euhemerism
+euhemerist
+euhemeristic
+euhemeristically
+eukaryote
+eukaryotic
+eulogist
+eulogistic
+eulogistically
+eulogium
+eumorphic
+eunuchism
+euphemistic
+euphemistically
+euphonically
+euphonious
+euphoniously
+euphoniousness
+euphonium
+euphorbia
+euphorically
+euphotic
+euphuism
+euphuist
+euphuistic
+euphuistically
+euplastic
+eurhythmic
+eurhythmics
+europeanish
+eurythmic
+eurythmics
+eurythmy
+eurytopic
+eurytopicity
+eustatic
+eutectic
+euthanasic
+euthenics
+euthenist
+eutherian
+euthyroid
+eutrophic
+eutrophication
+eutrophy
+eux
+evacuator
+evacuee
+evacuees
+evadable
+evagination
+evaluable
+evanesce
+evanesced
+evanescence
+evanesces
+evanescing
+evangel
+evangeline
+evangelistically
+evanishment
+evaporativity
+evaporator
+evaporators
+evaporite
+evaporitic
+evapotranspiration
+evection
+evenfall
+eventless
+everblooming
+eversible
+eversion
+eversions
+evert
+everyplace
+evictee
+evictees
+evictor
+evictors
+evidentiary
+evildoing
+evincible
+eviscerate
+eviscerated
+eviscerates
+eviscerating
+evisceration
+evitable
+evocator
+evocators
+evolutionarily
+evolutionism
+evolutionist
+evolvable
+evolvement
+evulsion
+evulsions
+evzone
+ewen
+exacta
+exactable
+exactor
+exactors
+exaggerator
+exaggerators
+exagitates
+examinant
+examinants
+examinational
+examinatorial
+examinee
+examinees
+exanimate
+exanimated
+exanimates
+exanimating
+excavational
+excavator
+excavators
+exceptionability
+exceptionable
+exceptionably
+exceptionality
+excerption
+excerptions
+excerptor
+excerptors
+exchangeability
+exchangee
+exchangees
+excide
+excided
+excides
+exciding
+excipient
+exciseman
+excitant
+excitants
+excitative
+exciton
+excitor
+exclave
+exclaves
+exclosure
+exclosures
+excludability
+excludable
+excludible
+exclusionist
+exclusionists
+excogitate
+excogitation
+excogitative
+excommunicator
+excrement
+excrement's
+excremental
+excrementitious
+excrements
+excrescency
+excrescent
+excrescently
+excreta
+excretal
+exculpate
+exculpated
+exculpates
+exculpating
+exculpation
+exculpations
+excurrent
+excursionist
+excursionists
+excursive
+excursively
+excursiveness
+excusatory
+execrably
+execrator
+execrators
+executant
+executorial
+executory
+executrices
+exegetic
+exegetical
+exegetically
+exegetics
+exegetist
+exemplarily
+exemplarity
+exenterate
+exenterated
+exenterates
+exenterating
+exenteration
+exenterations
+exercitation
+exergonic
+exeunt
+exfoliate
+exfoliated
+exfoliates
+exfoliating
+exfoliation
+exfoliative
+exhalant
+exhalants
+exhalation
+exhalations
+exhalent
+exhalents
+exhaustibility
+exhaustivity
+exhaustless
+exhaustlessly
+exhaustlessness
+exhibitionism
+exhibitionist
+exhibitionistic
+exhibitory
+exhilarant
+exhortative
+exhortatory
+exigence
+exiguity
+exiguous
+exiguously
+exiguousness
+exilic
+existentialistic
+existentialistically
+exobiological
+exobiologist
+exobiology
+exocrine
+exocyclic
+exodermis
+exodontia
+exodontist
+exoergic
+exogamic
+exonuclease
+exorbitance
+exorbitances
+exorcistic
+exorcistical
+exordial
+exordium
+exoskeleta
+exoskeletal
+exosmosis
+exosmotic
+exosphere
+exospheric
+exospore
+exostosis
+exoteric
+exotericaly
+exothermal
+exothermically
+exotically
+exoticism
+exotism
+expansibility
+expansile
+expansional
+expansionary
+expansionistic
+expansivity
+expatiate
+expatiated
+expatiates
+expatiating
+expatiation
+expatriate
+expatriated
+expatriates
+expatriating
+expatriation
+expecially
+expectably
+expectance
+expectative
+expedience
+expediential
+expeditionary
+expeditor
+expellee
+expeller
+expellers
+expendability
+expertism
+expiator
+expiatory
+expiratory
+expiry
+explanative
+explanatively
+explanatorily
+explant
+explantation
+explants
+expletory
+explicably
+explicator
+explicatory
+explodent
+exploitative
+exploitatively
+explorational
+explorative
+exploratively
+explosibility
+explosible
+expo
+exportability
+exportable
+expos
+expositional
+expositor
+expostulate
+expostulation
+expostulatory
+expressage
+expressional
+expressionistically
+expropriator
+expropriators
+expulsive
+expunction
+expurgator
+expurgatorial
+expurgatory
+exsanguinate
+exsanguination
+exscind
+exsert
+exserted
+exsertile
+exsertion
+exsertions
+exsiccate
+exsiccation
+exstipulate
+ext
+extemporal
+extemporally
+extemporaneity
+extemporarily
+extemporary
+extendable
+extensile
+extensionality
+extensity
+extensometer
+extensometer's
+extensometers
+extenuator
+extenuatory
+exteriority
+exterminatory
+extermine
+externalism
+externality
+externship
+exteroceptive
+exteroceptor
+exterritorial
+exterritoriality
+extinguishable
+extinguishment
+extoll
+extolment
+extortionary
+extortionate
+extortionately
+extrachromosomal
+extracorporeal
+extracorporeally
+extracranial
+extractability
+extractable
+extractible
+extradite
+extradites
+extradition
+extradoses
+extragalactic
+extrajudicial
+extrajudicially
+extralimital
+extralinguistic
+extralinguistically
+extrality
+extramundane
+extramural
+extramurally
+extranuclear
+extrapolator
+extrasensory
+extrasystole
+extrasystolic
+extraterritorial
+extraterritoriality
+extrauterine
+extravagancy
+extravagate
+extravasate
+extravasation
+extravascular
+extravehicular
+extraversion
+extraversive
+extravert
+extraverted
+extremis
+extremum
+extrinsically
+extrorse
+extrorsely
+extrudability
+extrudable
+exuberate
+exudate
+exudative
+exultance
+exultancy
+exurban
+exurbanite
+exurbia
+exuviation
+eyebolt
+eyebright
+eyecup
+eyedropper
+eyedropperful
+eyehole
+eyelike
+eyeliner
+eyepatch
+eyepoint
+eyepopper
+eyeshade
+eyeshot
+eyespot
+eyestalk
+eyestrain
+eyestrings
+eyetooth
+eyewash
+eyewink
+eyre
+eyrie
+fabricant
+fabricator
+fabricators
+fabular
+fabulist
+facedown
+facement
+facepiece
+facepieces
+facetted
+faceup
+facies
+facilitator
+facticity
+factional
+factionalism
+factionally
+factitious
+factitiously
+factitiousness
+factitive
+factitively
+factorable
+factorage
+factorship
+factotum
+factualism
+factualist
+factualists
+facture
+factures
+facula
+facultative
+facultatively
+faddish
+faddishness
+faddism
+faddist
+faddists
+fadeaway
+fadeless
+fadelessly
+fagging
+faggot
+faggoting
+faggots
+faience
+failsoft
+fainthearted
+faintheartedly
+faintheartedness
+faintish
+faintishness
+fairground
+fairish
+fairishly
+fairlead
+fairleader
+fairview
+fairylike
+faitour
+fakery
+fakir
+falcate
+falcated
+falciform
+falconet
+falderal
+falk
+fallback
+fallibly
+falsetto
+falsettos
+familism
+famishment
+fancywork
+fandango
+fane
+fanion
+fanlight
+fanlike
+fanner
+fantastical
+fantasticality
+fantasticalness
+fantasticate
+fantasticated
+fantasticates
+fantasticating
+fantastication
+fantod
+fanwise
+farad
+farceur
+farcicality
+farmhand
+farmhands
+farmstead
+farmsteading
+faro
+farrow
+farseeing
+farthermost
+fasces
+fascia
+fascial
+fasciated
+fasciation
+fascicular
+fascicularly
+fascicule
+fasciculus
+fascinator
+fascinators
+fascistic
+fascistically
+fashionabilities
+fashionability
+fashionmonger
+fastball
+fastball's
+fastballs
+fastuous
+fastuously
+fatalism
+fatalist
+fatalistically
+fatback
+fathead
+fatheaded
+fatheadedness
+fatherlike
+fathomable
+fathomless
+fathomlessly
+fathomlessness
+fatigability
+fatigable
+fatling
+fatted
+fatting
+fattish
+faulknerian
+faultfinder
+faultfinding
+faultily
+faunal
+faunally
+faunistic
+faunistically
+fauntleroy
+fauvism
+fauvist
+faux
+favonian
+fawkes
+fawny
+fay
+featherhead
+featherheaded
+featherless
+featherman
+febrific
+fecal
+feckless
+fecklessly
+fecklessness
+feckly
+feculence
+feculent
+fecundate
+fecundated
+fecundates
+fecundating
+fecundation
+fecundations
+feebleminded
+feeblemindedly
+feeblemindedness
+feedlot
+feedstock
+feedstuff
+feeing
+feetfirst
+feist
+feistier
+feisty
+feldspathic
+felicific
+felicitate
+felicitated
+felicitates
+felicitating
+felicitation
+felicitator
+felinity
+fellable
+fellah
+fellatio
+fellation
+fellations
+fellini
+fellowman
+felones
+felonry
+felsite
+felsitic
+felspar
+feministic
+feminity
+femoral
+fenceless
+fencelessness
+fenestral
+fenestrate
+fenestrated
+fenestrates
+fenestration
+fennec
+fenny
+fenugreek
+feral
+ferdinando
+ferial
+ferine
+fering
+ferity
+fermentable
+fermentative
+fernlike
+ferny
+ferrate
+ferrety
+ferriage
+ferriferous
+ferrimagnet
+ferrimagnetic
+ferrimagnetically
+ferrimagnetism
+ferritic
+ferromagnetism
+ferrotype
+ferruginous
+ferrule
+ferryboat
+ferryman
+fervency
+fescue
+fess
+festinate
+festinately
+festination
+festoon
+festoonery
+festoons
+feta
+fetation
+feterita
+fetishism
+fetishist
+fetishistic
+fetlock
+fetlocks
+fetologist
+fetology
+fetor
+fettuccine
+feudalist
+feudality
+feudist
+feverous
+feverously
+fey
+feyness
+fez
+fezes
+fezzes
+fibber
+fibration
+fibriallating
+fibril
+fibrillar
+fibrillate
+fibrillated
+fibrillates
+fibrillation
+fibrilliform
+fibrillose
+fibrils
+fibronectin
+fibrovascular
+fibula
+fibular
+fichu
+fictile
+fictioneer
+fictioneering
+fictionist
+ficus
+fiddleback
+fiddlehead
+fideism
+fideist
+fideistic
+fidel
+fidgetiness
+fidgety
+fidging
+fie
+fieldfare
+fieldstrip
+fiftyfold
+figaro
+figurable
+figurate
+figuration
+figurations
+figurehead
+filamentous
+filar
+filaria
+filarial
+filature
+filiation
+filiform
+filigreeing
+filippo
+fille
+filles
+fillip
+fillips
+fillment
+filmcard
+filmic
+filmically
+filmily
+filmmake
+filmmaker
+filmmakers
+filmmaking
+filmography
+fils
+filterability
+filterable
+filthily
+filtrable
+filum
+fimbria
+fimbrial
+fimbriate
+fimbriated
+fimbriates
+fimbriation
+finagle
+finagled
+finagler
+finagles
+finagling
+finback
+finery
+finespun
+fingerboard
+fingerlike
+fingerling
+fingerpost
+finical
+finically
+finicalness
+finicking
+finis
+finitude
+finlike
+finning
+fiord
+fiori
+firebird
+firebox
+firebrand
+firebrick
+fireclay
+firedamp
+fireguard
+fireless
+firelock
+fireplug
+fireplugs
+fireroom
+firetrap
+firma
+firmamental
+firstborn
+firstfruits
+firstling
+firstlings
+fisc
+fishability
+fishable
+fishbowl
+fishhook
+fishkill
+fishnet
+fishplate
+fishplates
+fishtail
+fishway
+fishwife
+fishyback
+fissility
+fissionability
+fissionable
+fissional
+fissiparous
+fissiparously
+fissiparousness
+fistfight
+fistful
+fistic
+fistnote
+fitment
+fixable
+fixity
+fixups
+fizzy
+flabbily
+flabellate
+flaccid
+flaccidity
+flaccidly
+flack
+flacon
+flagellant
+flagellantism
+flagellants
+flagellar
+flageolet
+flagger
+flagitious
+flagitiously
+flagitiousness
+flagon
+flagrance
+flagrancies
+flagrancy
+flamb
+flamboyance
+flamboyancy
+flamenco
+flameout
+flameproof
+flamingo
+flammability
+flan
+flan's
+flapdoodle
+flapjack
+flappy
+flareback
+flashboard
+flashgun
+flashguns
+flashily
+flashover
+flashovers
+flashtube
+flatboat
+flatcap
+flatcar
+flatfeet
+flatfoot
+flatfooted
+flatfoots
+flatted
+flatting
+flattish
+flattop
+flatulency
+flatus
+flatware
+flatwise
+flatwork
+flaunty
+flaxier
+flaxy
+flay
+fleabag
+fleabane
+flection
+flective
+fledermaus
+fleeringly
+fleischman
+fleisher
+fleshment
+fleshpot
+fleshpots
+flexile
+flexion
+flexographic
+flexographically
+flexography
+flexor
+flexuous
+flexuously
+flibbertigibbet
+flibbertigibbety
+flickery
+flightier
+flightily
+flightiness
+flightless
+flighty
+flimflam
+flimflammed
+flimflammer
+flimflamming
+flimsily
+flintily
+flintlike
+flippancy
+flipper
+flirty
+flitted
+flitter
+flivver
+floatage
+floatation
+floatplane
+floaty
+floc
+flogger
+floodlit
+floodplain
+floodwall
+floodwater
+floodwater's
+floodwaters
+floodway
+flooey
+floorage
+floorwalker
+floozie
+floozies
+floozy
+flophouse
+flopover
+flopovers
+flopper
+floppers
+florescence
+florescent
+floret
+floriate
+floriated
+floriation
+floriations
+florican
+floricultural
+floriculturally
+floriculture
+floriculturist
+floridity
+floriferous
+floriferously
+floriferousness
+florigen
+florigenic
+floristic
+floristically
+floristics
+floristry
+floruit
+flossier
+flossy
+flotage
+flotsam
+flouncy
+flowage
+flowerage
+floweret
+flowerlike
+fluctuant
+fluegelhorn
+fluidal
+fluidally
+fluidextract
+fluidic
+fluidics
+fluidounce
+fluidram
+flukey
+flukier
+fluky
+flume
+flumed
+flumes
+fluming
+flummery
+flummox
+flump
+flumped
+flumping
+flumps
+flunkeys
+flunky
+fluor
+fluorescein
+fluorimeter
+fluorimeter's
+fluorimeters
+fluorimetry
+fluorinate
+fluorinates
+fluorinating
+fluorination
+fluorinations
+fluoroscopic
+fluorspar
+flutelike
+flutterboard
+fluttery
+fluvial
+fluviatile
+fluxion
+fluxional
+flyblown
+flyboat
+flyboats
+flyby
+flybys
+flyleaf
+flyman
+flyover
+flyovers
+flypaper
+flypast
+flypasts
+flyspeck
+flyswatter
+flytier
+flyting
+flyway
+flyweight
+foamflower
+foamless
+fobbing
+focusless
+fodgel
+foeman
+fogbound
+fogey
+fogeys
+fogger
+foggest
+foghorn
+foghorns
+fogies
+fogless
+fogy
+fogyish
+fogyism
+foilsman
+foldable
+foldaway
+foldboat
+foldboater
+foldboating
+folderol
+folia
+foliaceous
+folic
+folkish
+folkishness
+folkloric
+folklorish
+folklorist
+folkloristic
+folksily
+folksinger
+folksinger's
+folksingers
+folksinging
+folktale
+folktale's
+folktales
+folkway
+folkways
+folliculate
+folliculated
+followership
+followeth
+fomentation
+fomentations
+fondue
+fondues
+fontal
+fontana
+foodless
+foodlessness
+foolery
+foolhardily
+foolscap
+foolscap's
+footboard
+footboards
+footboy
+footboys
+footcandle
+footcloth
+footgear
+footle
+footled
+footler
+footles
+footless
+footlessly
+footlessness
+footlight
+footlights
+footlike
+footling
+footlocker
+footmark
+footpace
+footrace
+footrest
+footrests
+footrope
+footropes
+footslog
+footslogger
+footslogs
+footsore
+footsoreness
+footstall
+footwall
+footway
+footways
+footy
+foozle
+foozled
+fopping
+fora
+foraminifera
+forbiddance
+forbidder
+forbode
+forborne
+forbye
+forceless
+forceps
+forcepslike
+fordable
+fordo
+forebear
+forebode
+foreboded
+foreboder
+forebodes
+forebrain
+foreclose
+forecloses
+foreclosure
+foredeck
+forefeel
+forefoot
+foregather
+forehand
+forehanded
+forehandedly
+forehandedness
+foreignism
+forejudge
+foreknow
+forelady
+foreland
+forelimb
+forelock
+foremanship
+foremast
+foremasts
+foremother
+forename
+forenamed
+forenames
+forensical
+forensically
+foreordain
+foreordained
+foreordaining
+foreordains
+foreordination
+forepassed
+forepast
+forepaw
+forepeak
+foreplay
+forequarter
+forequarters
+forereach
+forerun
+foresaid
+foresail
+foreshadow
+foreshadowed
+foreshadower
+foreshadowing
+foreshadows
+foreshank
+foresheet
+foreshore
+foreshorten
+foreshortens
+foreshow
+foreside
+foresightful
+foreskin
+forespeak
+forestage
+forestal
+forestation
+forestay
+forestial
+foreswear
+foresworn
+foretaste
+foretellable
+forethoughtfully
+forethoughtfulness
+forethougtful
+foretime
+foretoken
+forevermore
+forewoman
+foreworn
+foreyard
+forfeitable
+forgather
+forgeability
+forgeable
+forgetter
+forgiveable
+forgiveably
+forgoes
+forgone
+forjudge
+forkful
+forkier
+forklike
+forky
+forma
+formable
+formalin
+formalist
+formalistic
+formalistically
+formational
+formfitting
+formful
+formidability
+formless
+formlessly
+formlessness
+formulaically
+formulary
+formyl
+fornicate
+fornicated
+fornicates
+fornicating
+fornications
+fornicator
+fornicators
+forrader
+forrarder
+forsooth
+forspent
+forswore
+forsworn
+fortalice
+fortin
+fortman
+fortuity
+fortyfold
+forwent
+forworn
+fossate
+fossorial
+fosterage
+fosterite
+fosterling
+fosterlings
+fou
+foudroyant
+foundational
+foundationally
+foundationless
+founderous
+foundress
+foundrous
+fourdrinier
+foxily
+foxtrot
+foxtrot's
+foxtrots
+fracas
+fracted
+fractionate
+fractionates
+fractionating
+fractionations
+fractionator
+fractionators
+frag
+fragged
+fragging
+fragility
+fragmental
+fragmentally
+fragmentate
+fragmentated
+fragmentates
+fragmentating
+fragmentations
+fragrancy
+frags
+framable
+frambesia
+frameable
+franca
+francaise
+francesca
+francesco
+franchisee
+franchisor
+francie
+francois
+frangibility
+frangible
+frangipani
+frankincense
+frankpledge
+franny
+frap
+frappe
+frapping
+frat
+frater
+fraternalism
+fratricidal
+fratricide
+fraudulence
+frayne
+freakier
+freaky
+freckly
+fredrick
+freeboard
+freedwoman
+freehearted
+freeheartedly
+freeload
+freeloader
+freemasonry
+freestanding
+freestyle
+freethink
+freethinker
+freethinking
+freewill
+freida
+freightage
+frenchification
+frenchify
+frenetically
+frequence
+frequentation
+frequentations
+frequentative
+frequentatives
+freshet
+fretwork
+friability
+friary
+fribble
+fribbled
+fribbles
+fribbling
+fricassee
+fridge
+fridge's
+fridges
+frig
+frigging
+frigidity
+frigorific
+frillery
+fringier
+fringy
+frippery
+friskily
+frisson
+frissons
+frit
+fritillary
+frito
+fritted
+fritting
+frivol
+frizz
+frizzier
+frizzily
+frizziness
+frizzlier
+frizzly
+frizzy
+frogman
+frogmen
+frolick
+frolicked
+frolicks
+frolicsome
+frolicsomely
+frolicsomeness
+frond
+frond's
+fronded
+frondeur
+frondose
+frondosely
+fronds
+frontality
+frontispiece
+frontispieces
+frontless
+fronton
+frostily
+frostwork
+frothily
+froths
+frottage
+froufrou
+froward
+frowardly
+frowardness
+frowsier
+frowstier
+frowsty
+frowsy
+fructification
+fructifications
+fructify
+fructose
+fructose's
+fructoses
+fructuous
+fructuously
+fruitage
+fruitcake
+fruitier
+fruitlet
+fruity
+frump
+frumpier
+frumpish
+frumps
+frumpy
+fryer
+ft
+ftp
+ftper
+ftpers
+ftping
+ftpings
+ftps
+fucose
+fucus
+fuddle
+fuddled
+fuddles
+fuddling
+fugacity
+fugal
+fugally
+fuguist
+fulbright
+fulcra
+fulgent
+fulgently
+fulgurant
+fulgurate
+fulgurated
+fulgurates
+fulgurating
+fulguration
+fulgurations
+fulgurous
+fuliginous
+fuliginously
+fullmouthed
+fulminant
+fulminator
+fulminators
+fulness
+fum
+fumarate
+fumarole
+fumigator
+fumigators
+fumy
+funambulist
+functionalistic
+functionless
+functorial
+fundament
+fundamentalistic
+fundraiser
+fundraiser's
+fundraisers
+fundraising
+funerary
+fungibility
+fungicidal
+fungicidally
+fungicide
+fungiform
+fungo
+fungoes
+fungous
+funicular
+funiculus
+funigating
+funkier
+funkiness
+funky
+funnelform
+funning
+funnyman
+furbearer
+furbelow
+furcate
+furcated
+furcately
+furcates
+furcating
+furcation
+furcations
+furcula
+furcular
+furfural
+furless
+furloughs
+furmity
+furriery
+furtherance
+furuncle
+furuncular
+furunculosis
+furunculous
+furze
+fusee
+fusee's
+fusees
+fusibility
+fusil
+fusile
+fusileer
+fusilier
+fusionist
+fussbudget
+fussbudgety
+fusspot
+fustian
+fustians
+fustigate
+fustigated
+fustigates
+fustigating
+fustigation
+fustigations
+fustily
+futilitarian
+futilitarianism
+futureless
+futurism
+futuristic
+futuristically
+futurity
+gabber
+gabbier
+gabble
+gabbled
+gabbler
+gabbles
+gabbling
+gabbro
+gabby
+gaberdine
+gabfest
+gabfests
+gadabout
+gadabouts
+gadded
+gadder
+gadding
+gadgeteer
+gadgeteers
+gadgety
+gadolinium
+gadwall
+gadzooks
+gaff
+gaffs
+gaga
+gage
+gages
+gagger
+gagman
+gagmen
+gagster
+gagsters
+gaillardia
+gaingiving
+gainless
+gainlessness
+gainsay
+gainsayer
+galactopyranose
+galactopyranoside
+galactopyranosides
+galactopyranosyl
+galactose
+galahad
+galavant
+gallberry
+gallbladder
+galleon
+galleons
+gallet
+gallied
+gallinule
+gallopade
+gallow
+gallus
+galluses
+galore
+galosh
+galoshed
+galoshes
+galoshing
+galumph
+galvanically
+galvanometric
+gam
+gamekeeper
+gamekeepers
+gamesmanship
+gamesome
+gamesomely
+gamesomeness
+gamester
+gamete
+gamete's
+gametes
+gametic
+gametically
+gamey
+gamic
+gamier
+gamily
+gamin
+gamine
+gaminess
+gamming
+gammon
+gamy
+ganglioside
+gangliosides
+gangplow
+gangrenous
+gangsterism
+gannet
+gantlet
+gapping
+gappy
+gar
+garageman
+garagemen
+garde
+gardenful
+garlicky
+garnett
+garnishable
+garnishee
+garnishees
+garnishment
+garnishments
+garniture
+garnitures
+garotte
+garrote
+garroted
+garroter
+garrotes
+garroting
+garrots
+garrulity
+garth
+gasbag
+gasholder
+gashouse
+gaslit
+gasogene
+gasolene
+gasolier
+gasolinic
+gasometer
+gasometer's
+gasometers
+gasses
+gasset
+gast
+gastight
+gastightness
+gastness
+gastral
+gastrectomy
+gastrin
+gastritis
+gastrogenic
+gastrogenous
+gastronomic
+gastronomical
+gastronomically
+gastronomist
+gastrulate
+gastrulation
+gasworker
+gasworks
+gat
+gatefold
+gatekeeper
+gatekeeper's
+gatekeepers
+gatepost
+gatsby
+gaucherie
+gaucheries
+gaud
+gauded
+gaudery
+gaudily
+gauding
+gauds
+gaugeably
+gaum
+gaums
+gauntley
+gaur
+gauzelike
+gauzily
+gauziness
+gauzy
+gavotte
+gavottes
+gawkily
+gawkish
+gawkishly
+gawkishness
+gayety
+gazebo
+gazebo's
+gazebos
+gazpacho
+gazpacho's
+gearbox
+gearless
+gearshift
+geary
+gecko
+geegaw
+geezer
+gehrig
+gelant
+gelate
+gelated
+gelates
+gelating
+gelation
+gelid
+gelidity
+gelidly
+gelin
+geminal
+geminally
+geminate
+geminately
+gemination
+gemmate
+gemmated
+gemmates
+gemmating
+gemmation
+gemming
+gemsbok
+gemstone
+gemstone's
+gemstones
+gendarme
+gendarmerie
+genealogical
+genealogically
+genealogist
+generable
+generale
+generalship
+generalships
+generatrix
+genetical
+geniality
+genic
+genically
+geniculate
+geniculated
+geniculately
+genii
+genital
+genital's
+genitalia
+genitalic
+genitally
+genitals
+genocidal
+genocide
+genocides
+genome
+genome's
+genomes
+genotypic
+genotypical
+genotypically
+genotypicity
+genteelism
+gentilesse
+gentlefolk
+gentlefolks
+gentlemanlike
+gentlemanlikeness
+gentrice
+genuflect
+genuflected
+genuflecting
+genuflection
+genuflectory
+genuflects
+geocentrically
+geochemist
+geochronologic
+geochronological
+geochronologically
+geochronologist
+geochronometric
+geochronometry
+geode
+geode's
+geodes
+geodesist
+geodesy
+geodetical
+geodetically
+geoduck
+geohydrologic
+geohydrology
+geomagnetic
+geomagnetically
+geomagnetism
+geomancy
+geomantic
+geomorphic
+geophyte
+geopolitician
+geoponic
+geoponics
+georgic
+geoscience
+geostrategic
+geostrategist
+geostrategy
+geostrophic
+geostrophically
+geothermal
+geothermally
+geothermic
+geotropic
+geotropically
+geotropism
+geriatrician
+geriatricians
+geriatrist
+germania
+germfree
+germier
+germinability
+germproof
+germy
+gerome
+gerontic
+gerontocracy
+gerrymander
+gerrymandered
+gerundial
+gestational
+gesticulator
+gesticulators
+gesticulatory
+gestural
+getatable
+getup
+getups
+gewgaw
+ghastful
+ghastfully
+ghazal
+ghazals
+ghee
+ghostwrite
+ghostwriter
+ghosty
+gianthood
+gianthoods
+giantism
+giantisms
+giantlike
+gib
+gibberellin
+gibbing
+gibbosity
+gibby
+giddings
+gigantesque
+gigantically
+gigantism
+gigantisms
+giggly
+gigolo
+gigot
+gigots
+gildas
+gimbal
+gimbals
+gimcrackery
+gimlet
+gimlet's
+gimlets
+gimmal
+gimmickry
+gimmicky
+gimp
+gingersnap
+gingery
+gingko
+gioconda
+giraffish
+girlhood
+girlhoods
+girly
+girn
+giro
+gismo
+gismos
+givable
+gizzard
+gizzard's
+gizzards
+glaciologic
+glaciological
+glaciologist
+glaciology
+glacis
+gladded
+gladding
+gladiatorial
+gladiola
+gladsome
+gladsomely
+gladsomeness
+glady
+glandered
+glandless
+glans
+glarier
+glary
+glassblower
+glassblowing
+glassful
+glasshouse
+glassily
+glassine
+glassmaker
+glassmaking
+glasswork
+glassworker
+glassworks
+glazier
+glaziery
+gleamy
+gleanable
+gleesome
+glibber
+glibbest
+glioma
+glissade
+glittery
+gloam
+gloamed
+gloaming
+gloams
+globalism
+globalist
+globalists
+glom
+glomerular
+glomerulate
+glomming
+gloms
+glossarial
+glossarist
+glossily
+glossographer
+glossolalia
+gluconyl
+glucopyranosyl
+glucosamine
+glueing
+gluily
+glumaceous
+glummer
+glummest
+glutamate
+glutamic
+glutamine
+gluteal
+gluttonous
+gluttonously
+gluttonousness
+gluttony
+glyceryl
+glycine
+glycocholate
+glycocholates
+glycoconjugate
+glycoconjugates
+glycodeoxycholate
+glycodeoxycholates
+glycogen
+glycolipid
+glycolipids
+glycopeptide
+glycopeptides
+glycoprotein
+glycoproteins
+glycosidase
+glycosidases
+glycosidic
+glycosphingolipid
+glycosphingolipids
+glycosyl
+glycosylate
+glycosylated
+glycosylates
+glycosylation
+glynn
+gnarly
+gnatty
+gneissic
+gnomic
+gnomish
+gnomon
+gnosticism
+goalie
+goalkeeper
+goalpost
+goaltender
+goaltending
+goatish
+goatlike
+gobbledegook
+godchild
+goddaughter
+godded
+godding
+godforsaken
+godhood
+godkin
+godling
+godot
+godwit
+goethite
+gog
+goggly
+gogo
+goitrogen
+goitrogenic
+golda
+goldbeater
+goldbeating
+goldbrick
+goldbug
+goldeneye
+golem
+gomez
+gonad
+gonad's
+gonadal
+gonadotropic
+gonads
+gondolier
+gondoliers
+goo
+goodish
+goodnight
+goodwife
+goofball
+goofily
+googol
+googolplex
+goon
+gooseflesh
+gooseneck
+goosenecked
+goosey
+gorget
+gorgonian
+gorgously
+gorier
+gorse
+gory
+gossamery
+gossipry
+gossipy
+goucher
+gouda
+goulash
+gourde
+gourmandism
+gouty
+governable
+governessy
+governmentalism
+governmentalist
+governorate
+governorates
+governorship
+goyish
+goys
+grabbier
+grabble
+grabbled
+grabbler
+grabbles
+grabbling
+grabby
+graceless
+gracelessly
+gracelessness
+gracie
+gracileness
+gracility
+grackle
+gradable
+gradational
+gradationally
+gradeless
+gradiometer
+gradiometer's
+gradiometers
+gradualism
+graduator
+graftage
+grafton
+grainier
+graininess
+grainy
+gramicidin
+gramophone
+gramophone's
+gramophones
+gramps
+grandad
+grandaddy
+grandam
+grandame
+granddad
+grande
+grandee
+grandiloquence
+grandiosity
+grandioso
+grandparental
+grandparenthood
+grandsire
+grandsires
+grangerism
+granitic
+granivorous
+grantable
+grantsman
+grantsmanship
+granulator
+granulite
+granulitic
+granulocyte
+granulocytes
+grapeshot
+graphemic
+graphemically
+graphemics
+graphitic
+graphological
+graphologist
+graphology
+graphophone
+grapier
+grapnel
+grapy
+gras
+grasshopper
+grasshopper's
+grasslike
+grata
+graticule
+gratin
+gratulating
+graveless
+gravesend
+gravidity
+gravimeter
+gravimeter's
+gravimeters
+gravimetrically
+gravimetry
+gravitometer
+gravitometer's
+gravitometers
+graviton
+graviton's
+gravitons
+gravure
+grayish
+grayling
+graylings
+graywacke
+grazable
+grazeable
+grazier
+graziers
+greaseless
+greasepaint
+greasepaints
+greaseproof
+greasewood
+greasily
+greathearted
+greatheartedly
+greatheartedness
+greave
+greaves
+grebe
+greenback
+greenbacker
+greenbackism
+greengrocery
+greenhorn
+greenlet
+greenling
+greenroom
+greensward
+greentree
+greenware
+greeny
+gregarine
+gregarinian
+gremlin
+gremlin's
+gremlins
+gremmie
+gremmies
+gremmy
+grenadier
+grenadine
+grenier
+grep
+grewsome
+greylag
+gridlock
+gridlock's
+griefless
+grievant
+grillage
+grille
+grillroom
+grimier
+grimines
+grimmest
+grimy
+gringo
+gringos
+grinner
+grippe
+grippy
+gris
+gristle
+grith
+gritted
+grittily
+gritting
+grog
+groggily
+grogshop
+groomsman
+groot
+groovier
+groovy
+grosse
+grossular
+grossularite
+grotesquerie
+grotesquery
+grouch
+grouch's
+grouched
+grouches
+grouchily
+grouching
+groundling
+groundmass
+groundnut
+groundout
+groundsel
+groundsheet
+groundskeep
+groundwater
+groupable
+groupie
+groupie's
+groupies
+groupoid
+grubber
+grubbily
+grubstake
+grubstaker
+gruel
+grumbly
+grummet
+grump
+grumped
+grumpier
+grumpily
+grumpiness
+grumping
+grumps
+grumpy
+grunion
+gruntle
+gruntled
+gruntles
+gruntling
+grusky
+gryphon
+gtad
+guacamole
+guadalupe
+guanidine
+guanine
+guarantor
+guardant
+guardrail
+guardroom
+guardsman
+guava
+guck
+gudgeon
+guerdon
+guesstimate
+guff
+guggle
+guggled
+guggles
+guggling
+guhleman
+guidable
+guideway
+guignol
+guildship
+guildsman
+guileful
+guilefully
+guilefulness
+guillemot
+guillotine
+guillotine's
+guillotined
+guillotines
+guillotining
+guimet
+guimpe
+guisard
+gul
+gules
+gullable
+gullibly
+gulosity
+gumboil
+gumdrop
+gumdrop's
+gumdrops
+gummatous
+gummed
+gummer
+guncotton
+gundog
+gunlock
+gunmetal
+gunnar
+gunnysack
+gunplay
+gunpoint
+gunpowdery
+gunrunner
+gunrunning
+gunsel
+gunship
+gunsmith
+guppies
+guppy
+gurney
+gurneys
+gushier
+gushily
+gushiness
+gushy
+gustation
+gustative
+gustativeness
+gustatorial
+gustatorially
+gustatorily
+gustatory
+gustily
+gustoes
+gutless
+gutlessness
+guttate
+guttation
+guttersnipe
+guttersnipish
+guttier
+gutturalism
+gutty
+gymkhana
+gymnastically
+gymnosophist
+gypseous
+gyral
+gyrational
+gyrator
+gyrators
+gyratory
+gyre
+gyrene
+gyrfalcon
+gyrofrequency
+gyromagnetic
+gyron
+gyroplane
+gyroscopically
+gyrostat
+haberdasher
+habiles
+habiliment
+habilitate
+habilitated
+habilitates
+habilitating
+habilitation
+habilitations
+habitability
+habitably
+habitude
+habitudes
+habitus
+hac
+hackberry
+hackmatack
+hackstaff
+hadal
+haddix
+hade
+hades
+hadst
+hafiz
+haft
+haggadic
+haggadist
+haggadistic
+haggis
+haggish
+hagiographies
+hagiography
+hagiography's
+hah
+hairbreadth
+hairbrush
+haircloth
+haircutter
+haircutting
+hairlike
+hairpiece
+hairsbreadth
+hairsplitter
+hairsplitting
+hairspring
+hairspring's
+hairsprings
+hairstreak
+hairstyle
+hairstyle's
+hairstyles
+hairstyling
+hairstylist
+halberdier
+halfpennies
+halfpenny
+halftone
+halidom
+halitosis
+halliard
+halliards
+hallinan
+hallo
+halloo
+halloos
+halluces
+hallucinational
+hallucinatory
+hallucinogen
+hallucinogenic
+hallucinogens
+hallucinosis
+halma
+halocline
+haloes
+halogenate
+halogenation
+halogenous
+halomorphic
+halomorphism
+halpern
+haltere
+halvah
+halyard
+hamate
+hamey
+hammerlock
+hammertoe
+hammett
+hammier
+hammily
+hamminess
+hammy
+hamstring
+hamstrung
+handball
+handbill
+handbreadth
+handcar
+handcart
+handcraft
+handcraftman
+handcraftsman
+handcrank
+handcranks
+handfast
+handfasting
+handgrip
+handleless
+handline
+handlist
+handmaid
+handpick
+handpicked
+handpress
+handprint
+handprint's
+handprints
+handsaw
+handsbreadth
+handsful
+handshook
+handspring
+handsprings
+handwaving
+handwheel
+handwheels
+handwork
+handworker
+handwoven
+handwrought
+hangdog
+hangnail
+hangnail's
+hangnails
+hangtag
+hangup
+hankie
+hankies
+hanky
+hant
+hanter
+haole
+hapchance
+hapgood
+haphazardry
+haploid
+haploidy
+haplology
+happenchance
+happing
+hardback
+hardbake
+hardball
+hardboot
+hardbound
+hardcase
+hardcopies
+hardcopy
+hardcover
+hardcovers
+hardfisted
+hardfistedness
+hardhanded
+hardhandedness
+hardhead
+hardheaded
+hardheadedly
+hardheadedness
+hardhearted
+hardheartedly
+hardheartedness
+hardihood
+hardiment
+hardmouthed
+hardpan
+hardstand
+hardstanding
+harebrain
+harebrained
+harelipped
+harlequin
+harlequinade
+harlotry
+harmonica
+harmonica's
+harmonical
+harmonically
+harmonicalness
+harmonicas
+harmonium
+harridan
+harrumphs
+harvestable
+harvesttime
+haskell
+haskins
+hassock
+hassocks
+hast
+hastate
+hastately
+hatband
+hatbox
+hatchability
+hatchable
+hatcheck
+hatchling
+hatchment
+hatchments
+hatchure
+hatter
+hatting
+haulageway
+haulaway
+haulier
+hauser
+hausfrau
+hautboy
+hautboys
+haute
+hauteur
+haversack
+haversack's
+haversacks
+havocked
+havocking
+hawkish
+hawkishly
+hawkishness
+haycock
+hayfork
+haymaker
+haymaking
+haymow
+hayrack
+hayrick
+hayride
+hayseed
+hayseeds
+haywire
+haywood
+hazily
+headachy
+headband
+headcount
+headfirst
+headforemost
+headgroup
+headgroup's
+headgroups
+headhunter
+headily
+headlock
+headman
+headman's
+headmastership
+headmen
+headmen's
+headmistress
+headmost
+headnote
+headpiece
+headpin
+headrest
+headsail
+headshrinker
+headspring
+headstall
+headstock
+headstream
+headstrong
+headwaiter
+headwind
+headwind's
+headwinds
+headword
+headwork
+healths
+heartbroken
+hearthstone
+heartrending
+heartrendingly
+heartsease
+heartsick
+heartsickness
+heartsome
+heartsomely
+heartsore
+heartstring
+heartstrings
+heartwarming
+heartwood
+heathendom
+heathenism
+heathenry
+heathery
+heathless
+heathlike
+heathman
+heatless
+heatstroke
+heavyhearted
+heavyheartedly
+heavyheartedness
+heavyset
+hebdomad
+hebdomadal
+hebdomadally
+hebetation
+hebetude
+hebetudinous
+hectare
+hectically
+hectograph
+hectographic
+hedda
+heddle
+heddler
+hedgehop
+hedgehopper
+hedgepig
+hedgerow
+hedonic
+hedonically
+hedonics
+hedonistically
+hee
+heelball
+heelless
+heelpiece
+heeltap
+heftily
+hegel
+heidegger
+heigh
+heinze
+heirless
+heirloom
+heirship
+heiser
+heldentenor
+heliacal
+heliacally
+helicoid
+helicoidal
+helicopt
+helicopted
+helicopters
+helicopting
+heliochrome
+heliogram
+heliogram's
+heliograms
+heliograph
+heliographer
+heliographic
+heliography
+heliogravure
+heliolatrous
+heliolatry
+heliometer
+heliometer's
+heliometers
+heliometric
+heliometrically
+heliophyte
+heliopolis
+heliostat
+heliotaxis
+heliotropic
+heliotropically
+heliotropism
+heliozoan
+heliozoic
+helipad
+heliport
+helistop
+hellbox
+hellbroth
+hellcat
+hellebore
+hellgrammite
+hellhole
+hellhound
+hellion
+helmetlike
+helmsmanship
+helot
+helotism
+helotry
+helpmeet
+helve
+helved
+helves
+helving
+hemacytometer
+hemacytometer's
+hemacytometers
+hemal
+hematic
+hematin
+hematinic
+hematoblast
+hematoblastic
+hematocrit
+hematogenous
+hematologic
+hematological
+hematologist
+hematology
+hematoma
+hematophagous
+hemihedral
+hemihedrally
+hemihydrate
+hemihydrated
+hemimetabolic
+hemimetabolism
+hemimetabolous
+hemimorphic
+hemimorphism
+hemimorphite
+hemiparasite
+hemiparasitic
+hemiplegia
+hemiplegic
+hemispheral
+hemline
+hemmer
+hemoblast
+hemodynamically
+hemodynamics
+hemoflagellate
+hemoglobinic
+hemoglobinopathy
+hemoglobinous
+hemolymph
+hemolysin
+hemophilia
+hemophiliac
+hemophilic
+hemoprotein
+hemoptysis
+hemorrhagic
+hemorrhoid
+hemorrhoidal
+hemosiderin
+hemostasis
+hemostatic
+hempel
+hemus
+henae
+henbane
+henceforward
+hendecasyllabic
+hendecasyllable
+hendiadys
+hendrix
+henequen
+henna
+hennery
+henotheism
+henotheist
+henotheistic
+hent
+hep
+heparin
+hepatic
+hepatica
+hepatocellular
+hepatocyte
+hepatocyte's
+hepatocytes
+hepatoma
+heptagon
+heptagonal
+heptameter
+heptameter's
+heptameters
+heraldic
+heraldically
+heraldry
+herbaceous
+herbage
+herbalist
+herbarium
+herbicidal
+herbicidally
+herbicide
+herbicide's
+herbicides
+herblike
+herdic
+herdlike
+herdsmen
+hereaway
+hereaways
+hereditament
+hereditarian
+hereditarianism
+hereditarily
+hereinabove
+hereinbefore
+hereinbelow
+hereon
+heretical
+heretically
+hereticalness
+hereto
+hereunder
+hereupon
+heritability
+hermaphrodite
+hermaphrodite's
+hermaphrodites
+hermaphroditic
+hermaphroditically
+hermaphroditism
+hermatypic
+hermeneutic
+hermeneutical
+hermeneutically
+hermetical
+hermetically
+hermeticism
+hermetism
+hermetist
+hermitage
+hermitage's
+hermitages
+hermitism
+hern
+hernandez
+hernia
+hernia's
+hernial
+hernias
+herniate
+herniated
+herniates
+herniating
+herniation
+herniations
+heroical
+heroicomic
+heroicomical
+heroinism
+heronry
+herpesvirus
+herpetic
+herpetologic
+herpetological
+herpetologically
+herrington
+hersey
+herty
+hesiometer
+hesiometer's
+hesiometers
+hest
+heterarchy
+heterecious
+hetero
+heteroatom
+heteroautotrophic
+heterocycle
+heterocyclic
+heterocyst
+heterodox
+heterodoxy
+heteroecious
+heteroecism
+heterogamete
+heterogametic
+heterogenesis
+heterogenetic
+heterogeny
+heterogonic
+heterogony
+heterograft
+heterologously
+heterology
+heterolysis
+heterolytic
+heteromorphic
+heteromorphism
+heteromorphous
+heteronomous
+heteronomously
+heteronomy
+heterophil
+heterophile
+heterophony
+heterophyllous
+heterophylly
+heterophyte
+heterophytic
+heteroploid
+heteroploidy
+heteropolar
+heteropolarity
+heteropterous
+heteroscedasticity
+heterosexuality
+heterosis
+heterotic
+heterotopic
+heterotroph
+heterotrophic
+heterotrophically
+heterotypic
+heterotypical
+heterozygosis
+heterozygosity
+heterozygote
+hexad
+hexade
+hexadic
+hexagram
+hexahedron
+hexahydrate
+hexahydrated
+hexahydrite
+hexamethonium
+hexane
+hexaploid
+hexaploidy
+hexapod
+heywood
+hibernal
+hibernator
+hibiscus
+hickok
+hidalgo
+hidebound
+hidrosis
+hidrotic
+hie
+hieing
+hierarch
+hieratically
+hieroglyph
+hieroglyphical
+hieroglyphically
+higgle
+higgled
+higgler
+higgles
+higgling
+highbinder
+highborn
+highbred
+highbrow
+highbrowed
+highbrowism
+highline
+highlines
+hilding
+hillary
+hillocky
+hillyer
+hilum
+himation
+hindbrain
+hindquarter
+hingism
+hinkle
+hipbone
+hipped
+hipper
+hippest
+hippie
+hippocampal
+hippocampus
+hippocras
+hippogriff
+hipsterism
+hirey
+hirsute
+hirsuteness
+hirsutism
+hirsutulous
+hist
+histaminase
+histamine
+histaminergic
+histaminic
+histidine
+histologic
+histological
+histologically
+histologist
+histolysis
+histolytic
+histopathologic
+histopathological
+histopathologically
+histopathologist
+histopathology
+histophysiologic
+histophysiological
+histophysiology
+histoplasmosis
+historicist
+historiographer
+historiographic
+historiographical
+historiographically
+histrionically
+hithermost
+hitherward
+hiveless
+hmm
+hoarsen
+hoarsened
+hoarsening
+hobbledehoy
+hobday
+hobgoblin
+hobnail
+hobnailed
+hobnob
+hobnobbed
+hobnobber
+hobnobbing
+hobnobs
+hockaday
+hocus
+hocused
+hocusing
+hocussed
+hocussing
+hod
+hodad
+hodaddy
+hodoscope
+hoecake
+hoedown
+hoeing
+hogback
+hoggish
+hoggishly
+hoggishness
+hogshead
+hogwash
+hoi
+hoising
+hoistman
+hoistmen
+hokan
+hoke
+hokeypokey
+hoking
+hokum
+holabird
+holandric
+holandry
+holdall
+holdalls
+holdback
+holdfast
+holdout
+holdouts
+holeable
+holey
+holidaymaker
+holily
+holism
+holistically
+hollas
+hollo
+holloa
+holloware
+holoblastic
+holoblastically
+hologamous
+hologamy
+holograph
+holographic
+holographically
+hologynic
+hologyny
+holohedral
+holometabolism
+holometabolous
+holomyarian
+holophrastic
+holophytic
+holotype
+holotypic
+holozoic
+holt
+holzman
+hombre
+homburg
+homebody
+homebred
+homegrown
+homelike
+homeobox
+homeroom
+homesite
+homestretch
+hometown
+homey
+homeyness
+homier
+homiletic
+homiletical
+homiletically
+homiletics
+hominess
+hominid
+hominoid
+hominy
+homocercal
+homochromatic
+homoerotic
+homoeroticism
+homogametic
+homogamic
+homogamous
+homogeny
+homograft
+homograph
+homographic
+homoiotherm
+homoiothermal
+homoiothermic
+homolog
+homologate
+homologation
+homological
+homologically
+homolographic
+homolysis
+homolytic
+homomorphy
+homonuclear
+homonymic
+homonymous
+homonymously
+homonymy
+homoousian
+homophile
+homophobia
+homophone
+homophonic
+homophonous
+homophony
+homophyly
+homoplastic
+homoplastically
+homoplasy
+homopolar
+homopolymer
+homopteran
+homopterous
+homorganic
+homoscedastic
+homoscedasticity
+homosexuality
+homosporous
+homospory
+homothallic
+homothallism
+homotopy
+homotransplant
+homotransplantation
+homozygosis
+homozygosity
+homozygote
+homozygotic
+homunculi
+homunculus
+homy
+honcho
+honchos
+hondo
+honied
+honkeys
+honkie
+honoraria
+honorarily
+honorarium
+honorific
+honorific's
+honorifically
+honorifics
+hoodlike
+hoodlumish
+hoodlumism
+hoodoo
+hoodooism
+hoodoos
+hooey
+hoofbeat
+hoofprint
+hoofprint's
+hoofprints
+hookah
+hookey
+hookeys
+hooklet
+hooky
+hootch
+hootenanny
+hophead
+hopi
+hoplite
+hopple
+hora
+horary
+hord
+horehound
+horizonal
+hormonal
+hormonally
+hormonelike
+hornbeam
+hornbeams
+hornbill
+hornbills
+hornblende
+hornless
+hornlessness
+hornlike
+hornmouth
+hornpipe
+hornpipe's
+hornpipes
+hornswoggle
+hornswoggled
+hornswoggles
+hornswoggling
+horntail
+hornwort
+horologer
+horologic
+horological
+horologist
+horologists
+horology
+horrent
+horrific
+horrifically
+horsecar
+horsehide
+horselaugh
+horsemint
+horseradish
+horseradishes
+horseshit
+horsewhip
+horsewomen
+horsey
+horsier
+horsily
+horsiness
+horsy
+hortative
+hortatively
+hortatory
+horticultural
+horticulturally
+horticulturist
+hosanna
+hostel
+hosteler
+hostels
+hostler
+hotblood
+hotchpot
+hotchpotch
+hotelier
+hotfeet
+hotfoot
+hotfoot's
+hotfoots
+hotshot
+hottish
+houri
+housebound
+houseboy
+houseboys
+houseclean
+housecleaner
+housecleaning
+housecoat
+housedress
+housefather
+housefathers
+housefront
+houseful
+houseguest
+houseless
+houselessness
+houselights
+housemaid
+housemaids
+houseman
+housemate
+housemate's
+housemates
+housemother
+housemothers
+houseplant
+houseroom
+houseward
+housewarming
+housewifery
+howbeit
+howsoever
+howsomever
+hoyden
+hoydenish
+hoyle
+hubcap
+hubcap's
+hubcaps
+hubristic
+hubristically
+huck
+huckaback
+hucksterism
+hud
+huey
+huff
+huffier
+huffiness
+huffish
+huffy
+hugeous
+hugeously
+huggable
+hugger
+huggers
+hullabaloo
+hullabalooed
+hullabalooing
+hullabaloos
+hullo
+humanistically
+humanitarianism
+humankind
+humanlike
+humanoid
+humbug
+humbugged
+humbuggery
+humbugging
+humdinger
+humdrum
+humectant
+humeral
+humeri
+humerus
+humic
+humidor
+humification
+humifications
+humified
+hummable
+hummer
+hummocky
+humoresque
+humorism
+humorism's
+humorisms
+humoristic
+humoristical
+humoristical's
+humoristicals
+humoristics
+humph
+humpier
+humpty
+humpy
+hunchback
+hunchback's
+hunchbacked
+hunchbacks
+hundredweight
+hundredweights
+hup
+hurley
+hurly
+hurtless
+hurty
+hussar
+hussies
+hussy
+hustings
+hutzpah
+huzzah
+hyacinthine
+hyaena
+hyaenas
+hyalin
+hyaline
+hyalite
+hyaloid
+hyaloplasm
+hybridism
+hybridity
+hybris
+hydra
+hydrangea
+hydranth
+hydrator
+hydraulical
+hydrazide
+hydrazine
+hydric
+hydrically
+hydrobiological
+hydrobiologist
+hydrobiology
+hydrocarbonaceous
+hydrocarbonic
+hydrocarbonous
+hydrocephalic
+hydrocephalus
+hydrocephaly
+hydrocyanic
+hydrodynamical
+hydrodynamically
+hydrodynamicist
+hydroelectrically
+hydroelectricity
+hydrofoil
+hydroformer
+hydroforming
+hydrographer
+hydrographic
+hydrographically
+hydrography
+hydroid
+hydrokinetic
+hydrokinetics
+hydrolase
+hydrologic
+hydrologist
+hydrolysate
+hydrolytic
+hydrolytically
+hydromagnetic
+hydromagnetics
+hydromancy
+hydromechanical
+hydromechanics
+hydrometric
+hydrometrical
+hydrometry
+hydromorphic
+hydronic
+hydronically
+hydronium
+hydropathic
+hydropathically
+hydropathy
+hydroperoxide
+hydrophane
+hydrophile
+hydrophobicity
+hydrophone
+hydrophyte
+hydrophytic
+hydroplane
+hydroplaner
+hydroponic
+hydroponically
+hydroponics
+hydroscope
+hydrosere
+hydrosol
+hydrosolic
+hydrospace
+hydrospheric
+hydrostatical
+hydrostatically
+hydrosulfide
+hydrosulfite
+hydrotactic
+hydrotherapy
+hydrothorax
+hydrotropic
+hydrotropically
+hydrotropism
+hydroxylic
+hydroxyproline
+hydrozoan
+hyenic
+hyenoid
+hygienically
+hygienist
+hygienists
+hygrograph
+hygrometric
+hygrometry
+hygrophyte
+hygrophytic
+hygroscope
+hygroscopically
+hygroscopicity
+hyla
+hymenal
+hymeneal
+hymeneally
+hymenial
+hymenium
+hymnary
+hymnbook
+hymnody
+hymnology
+hyperacid
+hyperacidity
+hyperactive
+hyperactivity
+hyperbaric
+hyperbarically
+hyperbolical
+hyperbolist
+hyperborean
+hypercharge
+hypercritic
+hypercritical
+hypercritically
+hypercriticism
+hypereutectic
+hyperglycemia
+hyperglycemic
+hyperirritability
+hyperirritable
+hyperkeratosis
+hyperkeratotic
+hyperkinesis
+hyperkinetic
+hypermeter
+hypermeter's
+hypermeters
+hypermetric
+hypermetrical
+hypermetropia
+hypermetropic
+hypermetropical
+hypermetropy
+hypermnesia
+hypermnesic
+hypermorph
+hypermorphic
+hypermorphism
+hyperon
+hyperope
+hyperopia
+hyperopic
+hyperostosis
+hyperostotic
+hyperparasite
+hyperparasitic
+hyperparasitism
+hyperphagia
+hyperphysical
+hyperphysically
+hyperpituitarism
+hyperpituitary
+hyperplane
+hyperplanes
+hyperplastic
+hyperploid
+hyperploidy
+hypersensitive
+hypersensitiveness
+hypersensitivity
+hypersonic
+hypersonically
+hyperspace
+hypersurface
+hypertension
+hyperthermia
+hyperthermic
+hyperthyroid
+hyperthyroidism
+hypertonic
+hypertonicity
+hypertrophic
+hyperventilation
+hypha
+hyphal
+hyphenless
+hypnagogic
+hypnoanalysis
+hypnogenesis
+hypnogenetic
+hypnogenetically
+hypnogogic
+hypnoid
+hypnoidal
+hypnoses
+hypnotherapy
+hypnotism
+hypnotist
+hypnotists
+hypo
+hypocaust
+hypocentral
+hypochlorite
+hypochlorous
+hypochondria
+hypochondriac
+hypochondriacal
+hypochondriacally
+hypocoristic
+hypocoristical
+hypocoristically
+hypocritic
+hypocycloid
+hypodermically
+hypodermis
+hypoglycemia
+hypoglycemic
+hypoiodite
+hypomorphic
+hypos
+hypotension
+hypotensive
+hypothalmus
+hypothecate
+hypothecation
+hypothecator
+hypothenuse
+hypothermal
+hypothermic
+hypotonic
+hypotonically
+hypotonicity
+hypotrophy
+hypoxemia
+hypoxemic
+hypoxia
+hypoxic
+hypsography
+hypsometer
+hypsometer's
+hypsometers
+hypsometric
+hypsometry
+hysteretic
+hysteron
+iambus
+iambuses
+iatrogenic
+ibero
+ibex
+ibidem
+iceblink
+icebound
+icebreaker
+icecap
+icecap's
+icecaps
+icefall
+icehouse
+iceless
+iceman
+iceman's
+icemans
+ichneumon
+ichorous
+icily
+ickier
+icky
+iconically
+iconicity
+iconoclastic
+iconoclastically
+iconographer
+iconographic
+iconographical
+iconographically
+iconography
+iconolatry
+iconological
+iconology
+iconoscope
+icosahedra
+idealess
+idealistically
+ideality
+idealless
+idealogy
+ideational
+ideationally
+idem
+identic
+ideogram
+ideogram's
+ideogramic
+ideogrammatic
+ideogrammic
+ideograms
+ideograph
+ideographic
+ideographically
+ideography
+ideolect
+ideologic
+ideologue
+ideologues
+ideomotor
+ides
+idetic
+idiographic
+idiolectal
+idiomatically
+idiomorphic
+idiomorphically
+idiopathic
+idiopathically
+idioplasm
+idioplasmatic
+idioplasmic
+idiotical
+idioticalness
+idiotism
+idolater
+idolatrous
+idolatrously
+idolatrousness
+idyllically
+idyllist
+ie
+ignescent
+ignitable
+ignitible
+ignitor
+ignitron
+ignobility
+ignobly
+ignominiosness
+ignominy
+ignorable
+igor
+iguana
+ikon
+ilial
+illation
+illative
+illatively
+illaudable
+illaudably
+illegibility
+illegibly
+illiberal
+illiberalism
+illiberality
+illiberally
+illiberalness
+illimitability
+illimitably
+illiquid
+illiquidity
+illite
+illitic
+illogicality
+illon
+illuminable
+illuminance
+illuminant
+illuminati
+illuminator
+illuminators
+illuminism
+illuminist
+illus
+illusional
+illusionism
+illusionist
+illusionistic
+illusorily
+illust
+illustrational
+illuvial
+illuviate
+illuviation
+illuvium
+ilmenite
+im
+imaginal
+imaginarily
+imaginate
+imagism
+imagist
+imagistic
+imagistically
+imago
+imam
+imamate
+imaret
+imbecilic
+imbecility
+imbed
+imbibition
+imbibitional
+imbitter
+imbosom
+imbricate
+imbricately
+imbrication
+imbrown
+imbrue
+imbrued
+imbrute
+imbruted
+imbruting
+imdtly
+ime
+imidazole
+imide
+imidic
+imido
+imine
+imino
+imipramine
+imit
+imitational
+imitator
+immaculacy
+immane
+immanence
+immanency
+immanentism
+immanentist
+immanentistic
+immaterialism
+immaterialist
+immateriality
+immaturel
+immedicable
+immedicably
+immensurable
+immerge
+immerged
+immergence
+immerging
+immersible
+immesh
+immethodical
+immethodically
+immigrational
+imminency
+immingle
+immiscibility
+immiscible
+immiscibly
+immitigable
+immitigableness
+immitigably
+immittance
+immix
+immixture
+immoderacy
+immolate
+immolation
+immolator
+immoralist
+immotile
+immotility
+immunochemical
+immunochemically
+immunochemistry
+immunoelectrophoresis
+immunofluorescence
+immunofluorescent
+immunogenesis
+immunogenetic
+immunogenetically
+immunogenetics
+immunogenic
+immunogenically
+immunogenicity
+immunohematological
+immunohematology
+immunologic
+immunologist
+immunopathologic
+immunopathological
+immunopathologist
+immunopathology
+immunosuppression
+immunosuppressive
+immunotherapy
+immunotoxin
+immunotoxins
+immure
+immured
+immurement
+immures
+immuring
+immutability
+immutably
+impala
+impalement
+impalpability
+impalpably
+impanel
+imparadised
+imparity
+impartable
+impartible
+impartibly
+impartment
+impassability
+impassably
+impassibility
+impassible
+impassibly
+impassivity
+impeachable
+impeachment
+impeccability
+impecuniosity
+impecunious
+impecuniously
+impecuniousness
+impellor
+impendent
+impenitence
+impenitent
+impenitently
+imperate
+imperator
+imperatorial
+imperceptibility
+imperceptive
+imperceptiveness
+imperceptivity
+imperfectivity
+imperforate
+imperforated
+imperforates
+imperialistic
+imperialistically
+imperilment
+imperishability
+imperishably
+impermanency
+impermeability
+impermeably
+impermissibility
+impermissibly
+impersonality
+impersonator
+impertinence
+impertinency
+imperturbably
+impetrate
+impetrated
+impetrates
+impetrating
+impetration
+impetrations
+impetuosity
+impingement
+implacability
+implacably
+implantable
+implausibility
+implead
+implemental
+implode
+imploded
+implodes
+imploding
+implosion
+implosions
+implosive
+implosively
+impolitical
+impolitically
+imponderability
+imponderably
+importable
+importancy
+importunity
+imposthume
+imposture
+impoundment
+impracticability
+impracticably
+imprecatory
+impregnability
+impregnably
+impregnator
+impregnators
+impressibility
+impressibly
+impressionability
+impressionably
+impressional
+impressionistically
+imprimis
+imprisonable
+improbability
+improvability
+improvable
+improvably
+improvidence
+improvisator
+improvisatorial
+improvisatory
+improvisor
+imprudence
+impudicity
+impugnable
+impuissance
+impuissant
+imputability
+imputable
+imputative
+imputatively
+inadmissibly
+inadvertency
+inalienability
+inalienably
+inalterability
+inalterably
+inamorata
+inanition
+inapparent
+inappetence
+inapplicably
+inapposite
+inappositely
+inappositeness
+inaptitude
+inaugurator
+inaugurators
+inbound
+inbreathe
+incalculably
+incalescence
+incalescences
+incalescent
+incandesce
+incandesced
+incandescence
+incandesces
+incandescing
+incantational
+incantatory
+incapability
+incapacitator
+incardination
+incarnadine
+incase
+incaution
+incendiarism
+incertitude
+incessancy
+inchoate
+inchoately
+inchoateness
+inchoative
+inchoatively
+inchworm
+inchworm's
+inchworms
+incitant
+incitants
+incitation
+inclinable
+inclinational
+inclip
+includable
+includible
+incog
+incogitable
+incogitant
+incognita
+incognito
+incombustibility
+incommensurability
+incommensurably
+incommode
+incommodity
+incommunicability
+incommunicably
+incommunicative
+incommutably
+incompliant
+incompressibly
+incomputably
+inconceivability
+inconcinnity
+incondite
+inconscient
+inconsecutive
+inconsequence
+inconsequent
+inconsequentiality
+inconsolably
+inconsonant
+inconsumable
+inconsumably
+incontestability
+incontestably
+incontinency
+incontinent
+incontrovertibly
+inconveniency
+inconvertibly
+inconvincible
+incoordinate
+incoordination
+incorporator
+incorporeal
+incorporeity
+incorrigibility
+incorrigibly
+incorrupt
+incorrupted
+incorruptibly
+incorruptly
+incorruptness
+increate
+incrementalism
+incrementalist
+incrementalists
+increscent
+incriminate
+incriminated
+incriminates
+incrimination
+incriminatory
+incross
+incrossbred
+incrust
+incrustation
+incubational
+incubatory
+incudes
+inculcator
+inculpate
+inculpation
+inculpative
+inculpatory
+incult
+incumbency
+incumber
+incunabulum
+incurability
+incuriosity
+incurious
+incuriously
+incuriousness
+incurrence
+incurrent
+incurrer
+incurvate
+incurvated
+incurvates
+incurvating
+incurvation
+incurvature
+incurve
+incus
+incuse
+indagate
+indagation
+indagator
+indamine
+indecency
+indeclinable
+indecorum
+indefatigability
+indefatigably
+indefeasibility
+indefeasible
+indefeasibly
+indefectibility
+indefectible
+indefectibly
+indefensibility
+indefensibly
+indefinability
+indefinably
+indefinity
+indehiscence
+indehiscent
+indelibility
+indelicacy
+indemnifier
+indemnify
+indemonstrable
+indention
+independency
+indescribably
+indestructibility
+indestructibly
+indeterminably
+indeterminist
+indexical
+indican
+indicational
+indicatory
+indicia
+indictable
+indiction
+indictor
+indifferency
+indifferentism
+indifferentist
+indigen
+indigence
+indigene
+indigenes
+indigestibility
+indign
+indigotin
+indisciplinable
+indiscrete
+indiscussible
+indissociably
+indissolubility
+indissolubly
+indistinguishability
+indistinguishably
+indite
+indited
+inditer
+inditing
+indivertible
+indivertibly
+individualistically
+indivisibly
+indocile
+indocility
+indoctrinator
+indole
+indomitability
+indomitably
+indrawn
+indubitability
+indubitably
+inducibility
+indue
+indult
+indurate
+induration
+indurative
+indwell
+indweller
+indwelling
+inebriant
+inebriety
+inedible
+ineducability
+ineducable
+ineffability
+ineffably
+ineffaceability
+ineffaceably
+ineffectuality
+inelasticity
+inelegance
+ineliminable
+ineluctability
+ineluctably
+ineludible
+inenarrable
+ineptitude
+inequivalve
+inequivalved
+ineradicability
+ineradicably
+inerrancy
+inerrant
+inertance
+inestimably
+inexhaustibility
+inexhaustibly
+inexistence
+inexorability
+inexpedience
+inexpiably
+inexplicability
+inexpugnable
+inexpugnableness
+inexpugnably
+inexpungible
+inextinguishably
+inextricability
+infall
+infanta
+infantilism
+infantility
+infarct
+infarcted
+infarction
+infatuate
+infatuated
+infatuations
+infaunal
+infectivity
+infector
+infecundibility
+inferrer
+inferrible
+infestant
+infiltrator
+infiltrators
+infinitival
+inflammability
+inflammably
+inflammatorily
+inflationism
+inflationist
+inflator
+inflexion
+inflictor
+inflorescence
+inflorescences
+inflorescent
+informatics
+informatory
+infract
+infractor
+infrahuman
+infrangibility
+infrangible
+infrangibleness
+infrangibly
+infrasonic
+infraspecific
+infrastructural
+infrequence
+infrequency
+infundibular
+infundibulate
+infusibility
+infusoria
+infusorial
+infusorian
+ingather
+ingathering
+ingenue
+ingle
+ingratiatory
+ingress
+ingression
+ingressive
+ingressiveness
+ingrowing
+inguinal
+ingurgitate
+ingurgitation
+inhabitancy
+inhalational
+inhalator
+inharmonic
+inharmony
+inherence
+inheritability
+inhumanity
+inhumation
+inhume
+inhumed
+inhumes
+inhuming
+inimitably
+initialism
+initiatory
+initio
+injectant
+injector
+injectors
+injunct
+inkhorn
+inkiness
+inkle
+inkstand
+inkwell
+inky
+inmost
+innard
+innersole
+innerspring
+innervate
+innervated
+innervates
+innervating
+innervation
+innervational
+innerve
+innkeeper
+innkeeper's
+innkeepers
+innocency
+innominate
+innovational
+innovator
+innovatory
+innumerous
+inobservance
+inobservant
+inoculant
+inoculativity
+inoculator
+inoculum
+inoffensive
+inoffensively
+inoffensiveness
+inoperculate
+inosculate
+inosculated
+inosculates
+inosculating
+inosculation
+inositol
+inotropic
+inpatient
+inphase
+inpour
+inquisitional
+inquisitorial
+inquisitorially
+inrush
+insalubrious
+insalubrity
+insanitation
+insatiability
+insatiably
+insatiate
+insatiately
+insatiateness
+inscriptional
+inscriptive
+inscriptively
+inscroll
+inscrutably
+insculp
+inseam
+insectan
+insectary
+insecticidal
+insecticidally
+insectifuge
+insectile
+insectivore
+insectivore's
+insectivores
+insectivorous
+insectivory
+inseminator
+insentience
+insentient
+insertional
+insessorial
+insetted
+inshore
+insignificancy
+insinuator
+insipidity
+insistency
+insolate
+insolation
+insole
+insolubly
+insolvably
+insoul
+inspan
+inspectorate
+inspectorship
+insphere
+inspirator
+inspiratory
+inspirit
+inspissate
+inspissated
+inspissation
+inspissator
+instalment
+instalments
+instancy
+instantaneity
+instar
+instate
+instating
+instauration
+instil
+instillment
+instils
+institutionalism
+institutor
+instructorship
+instructress
+instrumentalism
+instrumentality
+insubstantiality
+insufferableness
+insufferably
+insufficience
+insufflate
+insufflated
+insufflates
+insufflating
+insufflation
+insufflator
+insugently
+insulant
+insularism
+insupportably
+insuppressibly
+insurability
+insurable
+insurgency
+insurmountably
+insuror
+insurrectional
+insurrectionary
+insurrectionist
+insusceptibly
+intaglio
+intangibility
+integrability
+integrality
+integrationist
+integrator
+integumental
+integumentary
+intellection
+intellectualism
+intellectualist
+intellectualistic
+intellectus
+intelligential
+intendance
+intendment
+intenerate
+inteneration
+intentionality
+intepupillary
+interactant
+interactional
+interatomic
+interbrain
+interbreed
+intercalary
+intercellular
+intercellularly
+intercession
+intercessional
+intercessor
+intercessory
+interclavicle
+interclavicular
+intercolumniation
+intercommunion
+intercomputer
+interconversion
+interconvert
+interconvertibility
+interconvertible
+intercooler
+intercostal
+intercostally
+intercrisis
+intercrop
+intercross
+intercultural
+interculturally
+intercurrent
+intercurrently
+intercut
+interdenominationalism
+interdental
+interdentally
+interdepend
+interdiction
+interdictor
+interdictory
+interdiffuse
+interdiffusion
+interdigitate
+interdigitation
+interfacial
+interfascicular
+interferential
+interferogram
+interferogram's
+interferograms
+interferometrically
+interfertile
+interfertility
+interfile
+interframe
+interfuse
+interfusion
+intergeneric
+intergradation
+intergradational
+intergrade
+intergrowth
+interhemispheric
+interionic
+interiority
+interjection
+interjectional
+interjectionally
+interjector
+interjectory
+interlacement
+interlaminate
+interlamination
+interlard
+interleaf
+interline
+interlinear
+interlinearly
+interlineation
+interlocal
+interlocution
+interlocutory
+interlope
+interloped
+interloper
+interlopes
+interloping
+interlunar
+interlunary
+intermarry
+intermeddle
+intermeddler
+intermediacy
+intermembrane
+intermetallic
+intermezzo
+intermit
+intermittence
+intermitter
+intermixture
+internality
+internationalism
+interne
+internecine
+internee
+internescine
+interneuron
+interneuronal
+internist
+internment
+internodal
+internode
+internship
+internuclear
+internuncial
+internuncially
+internuncio
+interoceptive
+interoceptor
+interoffice
+interpellate
+interpellation
+interpellator
+interpenetrate
+interpenetration
+interphase
+interplant
+interplead
+interpleader
+interpolator
+interpolatory
+interpretability
+interpretational
+interreligious
+interring
+interrogational
+interrogee
+interrogees
+interscholastic
+intersectoral
+interservice
+intersession
+intersex
+intersexual
+intersexuality
+intersexually
+interspace
+interspecific
+interstadial
+intersterile
+intersterility
+intersubjective
+intersubjectively
+intersubjectivity
+intertestamental
+intertidal
+intertidally
+intertie
+intertill
+intertillage
+intertropical
+intertwinement
+intertwist
+interurban
+intervale
+intervalometer
+intervalometer's
+intervalometers
+interventionism
+intervertebral
+intervertebrally
+interwar
+interweave
+interweaves
+interzonal
+interzone
+intestacy
+intima
+intimidator
+intimidatory
+intinction
+intine
+intitule
+intl
+intnl
+intonational
+intraarterial
+intraarterially
+intracardiac
+intracardial
+intracardially
+intracellular
+intracellularly
+intracranial
+intracranially
+intracutaneous
+intracutaneously
+intradermal
+intradermally
+intrados
+intraepithelial
+intragalactic
+intramolecular
+intramolecularly
+intrans
+intransigeance
+intransigeant
+intransigeantly
+intrant
+intraperitoneal
+intraperitoneally
+intrapersonal
+intrapopulation
+intrapsychic
+intrapsychically
+intraspecies
+intraspecific
+intraspecifically
+intrauterine
+intravascular
+intravital
+intravitally
+intravitam
+intrazonal
+intreat
+intrench
+intrepidity
+intrigant
+intriguant
+intrinsical
+intrinsicalness
+introductorily
+introgressant
+introgression
+introgressive
+introit
+introjection
+intromission
+intromit
+intromittent
+intromitter
+introrse
+introrsely
+introspectional
+introspectionism
+introspectionist
+introspectionistic
+introversive
+introversively
+intrvascularly
+intsv
+intuit
+intuiting
+intuitional
+intuitionism
+intumesce
+intumescence
+intumescent
+intussuscept
+intussusception
+intussusceptive
+inulin
+inundator
+inundatory
+inurement
+inurn
+inutility
+inv
+invaginate
+invaginated
+invaginates
+invaginating
+invagination
+invalidator
+inveiglement
+invenit
+inventorial
+inventorially
+inventress
+invercalt
+invertase
+investable
+investigational
+investiture
+inveteracy
+invictus
+invigorator
+inviible
+invincibility
+invincibly
+inviolableness
+inviolably
+inviolacy
+inviscid
+invitatory
+invocational
+invocatory
+involucral
+involucrate
+involucre
+involucred
+involucrum
+involutional
+involutionary
+invulnerably
+inweave
+iodic
+iodin
+iodoamino
+iodocompounds
+iodoform
+iodophor
+iodoprotein
+iodopsin
+iodothyronines
+iodotyrosines
+iodous
+ione
+ionicity
+ionium
+ionospherically
+iosola
+iotacism
+ipecacuanha
+iproniazid
+ipsilateral
+ipsilaterally
+iraqi
+irascibility
+irascible
+irascibleness
+irascibly
+ireful
+irenaeus
+irenic
+irenically
+irenics
+irid
+iridaceous
+irides
+iridescence
+iridescent
+iridescently
+iridic
+iridosmine
+irina
+ironbound
+ironclad
+ironfisted
+ironhanded
+ironhandedly
+ironhandedness
+ironhearted
+ironist
+ironmaster
+ironmonger
+ironmongery
+ironware
+ironweed
+irradiance
+irradiator
+irradicable
+irradicably
+irrationalism
+irrationalist
+irrationalistic
+irreal
+irreality
+irreclaimable
+irreclaimably
+irreconcilability
+irreconcilably
+irreconciliable
+irrecoverably
+irrecusable
+irrecusably
+irred
+irredenta
+irreducibility
+irreformability
+irreformable
+irrefragability
+irrefragable
+irrefragably
+irrefrangible
+irrefutability
+irrefutably
+irreg
+irregardless
+irrelative
+irrelatively
+irreligion
+irreligionist
+irreligious
+irreligiously
+irremeable
+irremediably
+irremovability
+irremovably
+irrepealability
+irrepealable
+irreplaceability
+irreplaceably
+irrepressibility
+irrepressibly
+irreproachability
+irreproachably
+irresoluble
+irrespirable
+irresponsive
+irresponsiveness
+irretrievability
+irretrievably
+irreversibility
+irrevocability
+irrigational
+irrigationists
+irrigator
+irrigators
+irrotational
+irrotationally
+irrupt
+irrupted
+irrupting
+irruptive
+irruptively
+irrupts
+isentropic
+islandia
+ism
+isoagglutination
+isoagglutinative
+isoagglutinin
+isoagglutinogen
+isoalloxazine
+isoantibody
+isoantigen
+isoantigenic
+isoantigenicity
+isobar
+isobaric
+isobutylene
+isochromatic
+isochron
+isochrone
+isochronism
+isoclinal
+isoclinally
+isoclinic
+isoclinically
+isogram
+isogram's
+isograms
+isolationist
+isolator
+isologue
+isomagnetic
+isomerase
+isomeric
+isomerism
+isomerous
+isometrical
+isometrically
+isometry
+isomorphous
+isoniazid
+isonomy
+isooctane
+isophotal
+isophote
+isopiestic
+isotonically
+isotonicity
+isotopically
+isotopy
+isozyme
+isozymic
+issuable
+issuably
+issueless
+isthmic
+italianate
+itchiness
+itchy
+iterance
+iterant
+itineracy
+itinerancy
+itinerate
+itinerated
+itinerates
+itinerating
+itineration
+itsy
+iud
+iuds
+izaak
+jabber
+jabbered
+jabberer
+jabbering
+jabbers
+jabberwocky
+jabot
+jackal
+jackal's
+jackals
+jackanapes
+jackassery
+jacketted
+jacketting
+jackhammer
+jackscrew
+jacobite
+jacoby
+jacquerie
+jactitation
+jagger
+jaggery
+jaggy
+jai
+jailbait
+jailbird
+jailbreak
+jailor
+jalousie
+jamb
+jambalaya
+jammer
+janis
+janitress
+japanned
+japanner
+japanning
+jape
+japer
+japery
+japes
+japing
+japonica
+jardiniere
+jarful
+jargonistic
+jasmine
+jauntily
+java
+javanese
+jawbreaker
+jawline
+jaybird
+jazzily
+jazzman
+jeanne
+jeepable
+jeeringly
+jell
+jelled
+jelling
+jello
+jells
+jellylike
+jerkily
+jerkin
+jerkwater
+jeroboam
+jessy
+jesuitic
+jesuitical
+jesuitically
+jesuitry
+jetbead
+jetport
+jetsam
+jettied
+jetties
+jettisonable
+jetty
+jettying
+jeunes
+jib
+jibber
+jibbers
+jibbing
+jibboom
+jiff
+jigged
+jigglier
+jiggly
+jimjams
+jingly
+jingo
+jingoes
+jingoish
+jingoism
+jingoist
+jingoistic
+jingoistically
+jink
+jinks
+jinn
+jinni
+jinny
+jitney
+jitneys
+jiujutsu
+jobbed
+jobber
+jobbers
+jobrel
+jocosity
+jocularity
+jocundity
+jodhpur
+jodhpurs
+jogger
+joggers
+jogging
+joinable
+joinder
+joinery
+jointress
+jointure
+jointured
+jointures
+jointuring
+jointworm
+joist
+joists
+jollification
+jollifications
+jolty
+jouncier
+jouncy
+jour
+journalistically
+journeywork
+jow
+jowlier
+jowly
+joyance
+jubilarian
+judgmatic
+judgmatical
+judgmatically
+judoist
+jugful
+jugged
+juggernaut
+juggernaut's
+juggernauted
+juggernauting
+juggernauts
+jugglery
+jugular
+jugulum
+juiceless
+juicily
+jujitsu
+jujutsu
+jukebox
+julienne
+junco
+junctional
+junctor
+jungian
+jungly
+junkyard
+junto
+juntos
+jural
+jurally
+jurassic
+jurat
+jure
+jurel
+juridic
+jurisconsult
+jurisconsults
+juristic
+juristically
+jussive
+jussives
+juste
+justiciability
+justiciar
+justifiability
+justificative
+justificatory
+justment
+jutted
+juttied
+jutties
+jutty
+juttying
+juvenescence
+juvenescent
+juvenilia
+juvenility
+juvenocracy
+juxtapositional
+kaftan
+kaiser
+kale
+kaleidoscope
+kaleidoscoped
+kaleidoscopes
+kaleidoscopic
+kaleidoscopical
+kaleidoscopically
+kaleidoscoping
+kalmia
+kapok
+kaput
+karateist
+karma
+karmic
+karyatid
+katydid
+kava
+kayak
+kayaker
+kayaks
+kayo
+kayoed
+kayoing
+kebab
+kebabs
+keddah
+keegan
+keelboat
+keelhaul
+keelless
+keelson
+keepsake
+keepsakes
+keeshond
+kegful
+kegsful
+kelts
+kerchieves
+kern
+kerne
+kernite
+kerosine
+kerry
+kerygma
+kestrel
+ketch
+ketches
+ketene
+keto
+ketogenesis
+ketogenic
+ketonic
+ketose
+ketosteroid
+ketotic
+kettledrum
+kewaskum
+kewaunee
+keybutton
+keyless
+keyway
+keyways
+khrush
+kibble
+kibbled
+kibbles
+kibbling
+kibbutz
+kibbutznik
+kibe
+kibosh
+kickapoo
+kickshaw
+kickshaws
+kickstand
+kickup
+kickups
+kiddish
+kiddush
+kiddy
+kidskin
+kiel
+kielbasa
+killdeer
+killebrew
+kiln
+kilo
+kilobar
+kilocalorie
+kilocalories
+kilocurie
+kilocycle
+kilocycles
+kilooersted
+kiloparsec
+kilorad
+kilos
+kilt
+kilter
+kindergartner
+kindless
+kindlessly
+kine
+kinematical
+kinematically
+kinescope
+kinescoped
+kinescopes
+kineses
+kinesic
+kinesiology
+kinesis
+kineticist
+kinetin
+kinetochore
+kinetonucleus
+kinetoplast
+kinetoplastic
+kinetoscope
+kinetosome
+kinfolk
+kinfolks
+kingfish
+kingmaker
+kingship
+kingside
+kingwood
+kinkajou
+kinkajou's
+kinnickinnic
+kinsey
+kinsfolk
+kinswoman
+kip
+kipper
+kippered
+kippering
+kippers
+kips
+kirk
+kirkwood
+kirsch
+kismet
+kissable
+kitchenware
+kitchenwares
+kith
+kithe
+kithing
+kitschy
+kittle
+kittled
+kittler
+kittles
+kittling
+kiva
+kivu
+kiwi
+kiwi's
+kiwis
+kiz
+kizzie
+klatch
+klatsch
+klauber
+kleptomania
+kleptomaniac
+kline
+knackery
+knavery
+knavish
+knavishly
+kneadable
+kneehole
+kneeholes
+knickknack
+knifelike
+knish
+knitter
+knitwear
+knobbed
+knobeloch
+knockabout
+knockabouts
+knothole
+knotter
+knotweed
+knout
+knoweth
+knowily
+knowledgeability
+knowledgeably
+knucklebone
+knucklebones
+knucklehead
+knuckleheaded
+koine
+koinonia
+kola
+kolkhoz
+kombu
+konga
+konrad
+kook
+kookaburra
+kookie
+kookier
+kookiness
+kooky
+kooning
+kopeck
+kopek
+kowtow
+kpc
+kraemer
+kraken
+kremlinologist
+kremlinology
+kretchmer
+krummholz
+kudo
+kudu
+kulak
+kultur
+kurdish
+kwashiorkor
+labdanum
+labellate
+labellum
+labia
+labiate
+lability
+labium
+laborious
+laboriously
+laboriousness
+laborsaving
+labradorite
+labyrinthian
+labyrinthine
+laceless
+lacelike
+lacemaker
+lacewing
+lacework
+lacey
+laches
+lachrymal
+lachrymator
+lachrymose
+lachrymosely
+lacier
+laciniate
+laciniated
+laciniation
+lackaday
+laconic
+laconically
+laconics
+laconism
+laconisms
+lacrimal
+lacrimation
+lacrimator
+lactase
+lacteal
+lactic
+lactiferousness
+lactobionamide
+lactobionamides
+lactobionic
+lactobionyl
+lactogenic
+lactoglobulin
+lactone
+lactonic
+lacunal
+lacunar
+lacunaria
+lacunary
+lacunate
+lacustrine
+lacy
+ladanum
+laddie
+lade
+ladybird
+ladybird's
+ladybirds
+ladybug
+ladybug's
+ladybugs
+ladyfern
+ladyfinger
+ladykin
+ladylove
+ladyship
+lage
+lagger
+lagniappe
+lagomorph
+lagomorphic
+lagomorphous
+lagoonal
+laguna
+laic
+laical
+laically
+laicism
+laird
+lairdly
+laitance
+laitances
+lakefront
+lakeshore
+lakewood
+lakh
+laky
+lallygag
+lallygagged
+lam
+lama
+lamasery
+lambast
+lambaste
+lambency
+lambent
+lambently
+lambert
+lambertian
+lambeth
+lambkill
+lambskin
+lamebrain
+lamebrained
+lamella
+lamellae
+lamellar
+lamellarly
+lamellas
+lamellate
+lamellately
+lamellation
+lamelliform
+lametedly
+lamia
+laminal
+laminaria
+laminarian
+laminarin
+laminator
+laminin
+lampoonery
+lamster
+lanai
+lancelet
+lanceolate
+lanceolately
+lancet
+lanceted
+lancinate
+lancinated
+lancinates
+lancinating
+lancination
+lancinations
+landaulet
+landes
+landfall
+landform
+landlocked
+landlordism
+landlubber
+landlubberly
+landmass
+landmasses
+landowning
+landside
+landslip
+landslips
+landsman
+landward
+landwards
+lanesmanship
+langeland
+languishment
+languorous
+languorously
+langur
+lankily
+lanolin
+lanuginous
+lanuginousness
+lanyard
+laodicean
+laparotomy
+lapboard
+lapdog
+lapful
+lapidarian
+lapper
+lappet
+lapstrake
+lapstreak
+lapwing
+larcener
+larcenist
+larcenous
+larcenously
+lardy
+lares
+largehearted
+largess
+larghetto
+largish
+largo
+largos
+larkier
+larkspur
+larky
+larvicidal
+larvicide
+larynges
+laryngitis
+laryngology
+laryngoscope
+laryngoscopic
+lasagna
+lasagne
+lascar
+lase
+lassie
+lassies
+lassitude
+lassitudes
+lassoes
+latchet
+latchkey
+latchstring
+latecomer
+latecomers
+lateen
+lateener
+lateiner
+latened
+latening
+latensification
+latensifications
+latensified
+latensifies
+latensify
+latera
+laterite
+lathery
+latices
+laticiferous
+latish
+latitudinarian
+latitudinarianism
+latten
+latticework
+lattimer
+latus
+laudability
+laudable
+laudableness
+laudation
+laudations
+laudative
+laudatorily
+laughterful
+launderability
+launderette
+launderettes
+laundress
+laundryman
+laundrywoman
+laurate
+laureateship
+lavabo
+lavage
+lavaged
+lavalava
+lavaliere
+lavalike
+lavallade
+lavalliere
+lavation
+lavational
+lavato
+lave
+laveer
+laver
+laverock
+laving
+lawmaker
+lawny
+laxation
+layabout
+layabouts
+layaway
+layerage
+layette
+layover
+layovers
+laypeople
+laywoman
+laywomen
+laze
+lazes
+lazyish
+lea
+leachable
+leadeth
+leadier
+leadless
+leadoff
+leadwork
+leady
+leafage
+leaflike
+leafstalk
+leafstalks
+leakily
+leant
+leapfrogged
+leapfrogging
+learnable
+leary
+leastways
+leastwise
+leasure
+leatherback
+leatherlike
+leatherwork
+lecherous
+lecherously
+lecherousness
+lecithin
+lecithinase
+lectern
+lectern's
+lecterns
+lectin
+lectin's
+lectins
+lection
+lectionary
+lectureship
+lederhosen
+ledgy
+leeboard
+leeds
+leftism
+legalese
+legalism
+legalist
+legalistic
+legalistically
+legateship
+legatine
+legator
+legendarily
+legendry
+legerity
+leges
+legionary
+legionnaire
+legionnaires
+legis
+legislatorial
+legislatorship
+legislatress
+legislatrix
+legist
+legit
+legitimism
+legitimist
+legless
+legman
+legroom
+legwork
+lei
+leith
+lemke
+lemony
+lemur
+lemures
+lengthways
+lenience
+lenis
+lenitive
+lenitively
+lenity
+lense
+lensless
+lenticulate
+lenticulation
+lentissimo
+lento
+leopardess
+leotard
+leotards
+lepidolite
+lepidopterist
+leprechaun
+leprechauns
+leprotic
+leprous
+leprously
+leprousness
+lepton
+lepton's
+leptons
+leptospiral
+les
+lesbianism
+lessee
+letch
+letdown
+letdowns
+lethargic
+lethargically
+letted
+letterpress
+letup
+leu
+leucine
+leucite
+leucitic
+leucoma
+leukemic
+leukemoid
+leukocyte
+leukocytic
+lev
+levanter
+levator
+levatores
+levators
+leveeing
+levelheaded
+levelheadedness
+leven
+leveret
+leviathan
+leviathan's
+levigate
+levigated
+levigates
+levigating
+levigation
+levirate
+leviratic
+levitational
+levorotation
+levorotatory
+levulose
+lewellyn
+lewisite
+lexica
+lexicality
+lexicographer
+lexicographer's
+lexicographers
+lexicography
+lexicostatistic
+lexicostatistics
+ley
+liaise
+liaised
+liaises
+liaising
+liana
+lib
+libationary
+libelist
+liber
+liberace
+liberalist
+liberalistic
+liberationist
+liberationists
+libertarianism
+libertie
+libertinage
+libertinism
+libidinal
+libidinally
+libra
+librae
+librarianship
+librate
+libration
+librational
+libratory
+libriform
+licating
+licenseless
+licenselesses
+licensure
+licentiate
+licentiateship
+lichee
+lichenous
+licht
+lichtenstein
+lichter
+lickerish
+lickerishly
+lickerishness
+lickspittle
+lictor
+lidded
+lido
+lidocaine
+lidos
+lieberman
+lief
+lierne
+lieutenancy
+lieve
+lifeful
+lifeline
+lifelines
+lifemanship
+lifesaver
+lifeway
+lifework
+liftable
+liftman
+ligamentary
+ligamentous
+ligate
+ligated
+ligates
+ligating
+ligation
+ligations
+lighterage
+lightface
+lightfaced
+lightfooted
+lightfootedly
+lightfootedness
+lightful
+lighthanded
+lighthandedness
+lightheaded
+lightish
+lightless
+lightship
+lightsome
+lightsomely
+lightsomeness
+lightyear
+lightyears
+ligneous
+lignification
+lignified
+lignifies
+lignify
+lignifying
+lignin
+lignitic
+lignocellulose
+ligulate
+ligule
+ligure
+likability
+likable
+likableness
+lilliput
+lilliputian
+limba
+limbless
+limbus
+limeade
+limekiln
+limen
+limey
+limier
+liminal
+limitable
+limitary
+limitational
+limitative
+limitrophe
+limmer
+limn
+limner
+limnetic
+limnic
+limning
+limnological
+limnologically
+limnologist
+limnology
+limo
+limo's
+limonene
+limonite
+limonitic
+limos
+limpet
+limpidity
+limpkin
+limpsy
+limulus
+limy
+linac
+linage
+linate
+linated
+lination
+linchpin
+linchpin's
+linchpins
+lindy
+lineality
+lineament
+lineamental
+lineation
+linebacking
+linebreed
+linecaster
+linecasting
+lineolate
+lineolated
+lineprinter
+lineprinter's
+lineprinters
+linerless
+linesman
+linga
+lingoes
+lingonberry
+linguae
+linguine
+linguistical
+linguistician
+lingulate
+linin
+linkboy
+linkman
+linksman
+linkup
+linoleate
+linoleic
+linolenate
+linos
+lintel
+linty
+linum
+lionhearted
+lionlike
+lipide
+lipidic
+lipless
+liplike
+lipolysis
+lipolytic
+lipped
+lippen
+lippier
+lipping
+lippy
+lipread
+lipreading
+liquate
+liquated
+liquates
+liquating
+liquation
+liquations
+liquefactive
+liquefactive's
+liquefactives
+liquefiability
+liquefiable
+liquescent
+liquidator
+liquorice
+lira
+liras
+lire
+lisle
+liss
+lissom
+lissome
+lissomely
+lissomeness
+liste
+listel
+listenable
+listeriosis
+liston
+literalist
+literalistic
+literality
+literarily
+literati
+literatim
+literator
+literatus
+litharge
+lithesome
+lithia
+lithiasis
+lithic
+lithically
+litho
+lithographic
+lithographically
+lithologic
+lithological
+lithologically
+lithophane
+lithophyte
+lithophytic
+lithopone
+lithos
+lithosol
+lithotomy
+lithuanian
+litigable
+litotes
+litterateur
+litterbag
+littermate
+littermate's
+littermates
+littery
+liturgiologist
+liturgiology
+liturgist
+litz
+liveability
+liveable
+livelily
+livelong
+liverish
+liverishness
+liveryman
+lividity
+livlihood
+lixiviate
+lixiviated
+lixiviates
+lixiviating
+lixiviation
+lizzy
+llama
+llama's
+llamas
+llano
+llanos
+lo
+loach
+loaches
+loanable
+loanword
+loanword's
+loanwords
+lobar
+lobate
+lobated
+lobately
+lobation
+lobbing
+lobbyer
+lobbyism
+lobbyist
+lobectomy
+lobelia
+lobeline
+loblolly
+lobo
+lobos
+lobscouse
+lobsterman
+lobstermen
+lobulate
+lobulated
+lobulation
+lobulose
+localism
+localite
+locatable
+loch
+lockable
+lockage
+lockbox
+locket
+lockies
+lockjaw
+lockstep
+lockstitch
+loco
+locoes
+locofoco
+locoism
+locomote
+locomoted
+locomotes
+locomoting
+locular
+loculate
+loculated
+loculation
+locule
+loculed
+loculus
+locution
+locutor
+lode
+loden
+lodestar
+lodgement
+loess
+loftily
+logbook
+loggets
+loggia
+loggie
+loggy
+logia
+logicality
+logistician
+lognormal
+lognormality
+lognormally
+logo
+logogram
+logogram's
+logogrammatic
+logograms
+logograph
+logographic
+logographically
+logogriph
+logomachy
+logorrheic
+logos
+logotype
+logroll
+logroller
+logrolling
+logwood
+logy
+lollipop
+lollop
+lollygag
+lollypop
+londonderry
+lonelily
+longanimity
+longanimous
+longboat
+longboats
+longbow
+longbowman
+longeron
+longevous
+longhair
+longhaired
+longhead
+longheaded
+longheadedness
+longhouse
+longlegs
+longline
+longshoreman
+longshoring
+longsome
+longsomely
+longsomeness
+longspur
+longstreet
+longue
+longwinded
+loo
+loobies
+looby
+looney
+loonier
+looniness
+loony
+loosestrife
+lopper
+loppier
+loppy
+lopseed
+loquat
+loran
+lorans
+lorca
+lordling
+lordosis
+lordotic
+loreal
+lorgnette
+lorgnettes
+lorgnon
+lorgnons
+loricate
+loricated
+loris
+lorn
+lornness
+lory
+los
+losable
+losableness
+losel
+loth
+lotharios
+lotos
+lotted
+lotting
+lotto
+loudmouth
+loudmouthed
+lough
+loup
+loupe
+louping
+lousily
+lout
+loutish
+loutishly
+loutishness
+louts
+loveable
+lovejoy
+lovelily
+lovelock
+lovelocks
+lovemaking
+lovesick
+lovesickness
+lovesome
+lowborn
+lowbred
+lowbrow
+lowermost
+lowery
+lowlihead
+lowlily
+lown
+lox
+loxes
+loxodrome
+loxodromic
+loxodromically
+loxodromics
+loy
+loyola
+lubber
+lubberland
+lubberlanders
+lubberliness
+lubberly
+lubbers
+lube
+lubric
+lubrical
+lubricator
+lubricous
+lubritorium
+lucency
+lucien
+luciferous
+lucubrate
+lucubrated
+lucubrates
+lucubrating
+lucubration
+lucubrations
+lucubrator
+luculent
+luculently
+ludmilla
+lues
+luetic
+luetically
+luggageless
+lugger
+lugubrious
+lugubriously
+lugubriousness
+lukemia
+lum
+lumbago
+lumberjack
+lumberjack's
+lumberjacks
+lumbian
+lumenal
+lumens
+lumina
+luminaire
+luminal
+luminance
+luminesce
+luminesced
+luminescing
+luminiferous
+luminist
+lummus
+lumpily
+luncheonette
+lune
+lunes
+lunette
+lungfish
+lunisolar
+lunitidal
+lunker
+lunkhead
+lunkheaded
+lunt
+lunule
+luny
+lupanar
+lupulin
+lupus
+lurdane
+lusion
+lustihood
+lustra
+lustral
+lustrate
+lustrated
+lustrates
+lustrating
+lustration
+lustrations
+lustrum
+luteal
+lutenist
+luteous
+lutetium
+lutihaw
+lux
+luxate
+luxated
+luxates
+luxating
+luxation
+luxations
+lycanthropic
+lycanthropy
+lycee
+lyceum
+lychee
+lychnis
+lycidas
+lymphadenitis
+lymphatic
+lymphatically
+lymphoblast
+lymphoblastic
+lymphocytic
+lymphocytosis
+lymphoid
+lymphomatoid
+lymphomatosis
+lymphomatous
+lymphopoiesis
+lyndon
+lyonnaise
+lyophile
+lyophilic
+lyophobic
+lyotropic
+lyrate
+lyrated
+lyrately
+lyrebird
+lyrebird's
+lyrebirds
+lyrism
+lyrist
+lysate
+lyse
+lysergic
+lyses
+lysimeter
+lysimeter's
+lysimeters
+lysimetric
+lysin
+lysine
+lysing
+lysis
+lysogen
+lysogenic
+lysogenicity
+lysogeny
+lysolecithin
+lysosomal
+lysosomally
+lysosome
+lysozyme
+lytically
+macadam
+macaque
+macaronic
+macaronically
+macaronies
+macaroon
+macaw
+macaw's
+macaws
+macerate
+macerated
+macerates
+macerating
+maceration
+macerations
+macerator
+macerators
+machete
+machicolate
+machicolation
+machinability
+machinate
+machinated
+machinates
+machinating
+machinator
+machineable
+mackerel
+mackerels
+mackle
+mackled
+mackles
+macklin
+mackling
+macle
+macled
+macrame
+macroaggregate
+macroaggregated
+macrobiotic
+macrobiotics
+macrocephalic
+macrocephalous
+macrocephaly
+macrocosm
+macrocosmic
+macrocosmically
+macrocyte
+macrocytic
+macrocytosis
+macroeconomic
+macroevolution
+macroevolutionary
+macrofossil
+macrogamete
+macroinstruction
+macron
+macronucleus
+macronutrient
+macropathological
+macropathology
+macrophagic
+macrophyte
+macrophytic
+macroscale
+macroscopical
+macrostructural
+macrostructure
+macrostructure's
+maculate
+maculated
+maculates
+maculating
+maculation
+maculations
+macule
+madded
+maddish
+madrigalian
+madrigalist
+madrilene
+madrona
+madrone
+madstone
+madstones
+madwoman
+madwomen
+maelstrom
+maelstrom's
+maelstroms
+maenadic
+maeterlinck
+mafia
+mafioso
+magazinism
+magazinist
+magazinists
+maggotries
+maggotry
+magicked
+magicking
+magill
+magisterium
+magistracy
+magistral
+magistrally
+magistrateship
+magistratical
+magistratically
+magistrature
+magma
+magmatic
+magna
+magnesian
+magnetitic
+magnetodynamo
+magnetoelectric
+magnetoelectrical
+magnetoelectricity
+magnetofluidmechanic
+magnetofluidmechanics
+magnetogasdynamic
+magnetogasdynamics
+magnetogram
+magnetogram's
+magnetograms
+magnetograph
+magnetohydrodynamic
+magnetohydrodynamics
+magnetometer
+magnetometer's
+magnetometers
+magnetometric
+magnetometry
+magnetomotive
+magneton
+magnetooptic
+magnetooptical
+magnetooptics
+magnetoscope
+magnetosphere
+magnetospheric
+magnetostatic
+magnetostriction
+magnetostrictive
+magnetostrictively
+magnetron
+magnetrons
+magnific
+magnifical
+magnifically
+magnifico
+magniloquence
+magniloquent
+magniloquently
+magtape
+magtapes
+maguire
+maguires
+magus
+maharaja
+maharaja's
+maharajah
+maharanee
+maharani
+maharishi
+mahatma
+mahatmaism
+mahler
+mahlstick
+mahout
+maidenhead
+maidenhood
+maidhood
+maidish
+maieutic
+maieutical
+maieutics
+mailability
+mailbag
+mailbags
+mailboat
+mailboats
+maillot
+mailplane
+mailplanes
+mailsack
+mailsacks
+mainmast
+mainsail
+mainsheet
+mainspring
+maintop
+maisonette
+maisonettes
+maitre
+maitres
+maize
+maizer
+maizers
+maizes
+majestical
+majolica
+majordomo
+majordomos
+majorette
+majorettes
+majuscular
+majuscule
+makeable
+makebate
+makefast
+makepeace
+makeshifty
+makeweight
+mako
+makos
+mal
+malachite
+malacologic
+malacological
+malacologist
+malacology
+malacostracan
+maladaptation
+maladminister
+maladministration
+malamud
+malamute
+malapert
+malapertly
+malapertness
+malapportioned
+malapportionment
+malappropriate
+malappropriated
+malappropriates
+malappropriating
+malapropian
+malapropos
+malar
+malarian
+malariated
+malariologist
+malariology
+malarkey
+malate
+malathion
+malaxate
+malaxated
+malaxates
+malaxating
+malconduct
+malconformation
+maldevelopment
+maldistribute
+maldistribution
+maledictory
+malefaction
+malefic
+maleficence
+maleficent
+malemute
+malentendu
+malfeasance
+malgovernment
+malic
+maliferous
+malignance
+malignity
+malinger
+malingered
+malingerer
+malism
+malleability
+mallemuck
+malleus
+mallow
+malmsey
+malodorous
+malodorously
+malodorousness
+malolactic
+malposition
+malpractitioner
+maltase
+maltobionic
+maltose
+maltreatment
+maltster
+malty
+malvasia
+malvasian
+malversation
+malvoisie
+mammalogist
+mammalogy
+mammary
+mammer
+mammies
+mammillar
+mammillary
+mammillate
+mammillated
+mammock
+mammography
+mammon
+mammonism
+mammonist
+mammonite
+mammy
+mana
+manacle
+manacled
+manacles
+manacling
+manageability
+manageably
+managemental
+manageress
+managership
+manchet
+mancipation
+mancipatory
+manciple
+manciples
+mandala
+mandarinate
+mandarinates
+mandarinic
+mandarinism
+mandataries
+mandatary
+mandator
+mandatorial
+mandibular
+mandibulate
+mandola
+mandolinist
+mandolinists
+mandorla
+mandragora
+mandrel
+mandril
+mandrill
+manducate
+manducated
+manducates
+manducating
+manege
+manful
+manfully
+manfulness
+manganate
+manganesian
+manganic
+manganite
+manganous
+mange
+mangel
+mangier
+mangily
+manginess
+mango
+mango's
+mangos
+mangrove
+mangy
+manhandle
+manhandled
+manhandles
+manhandling
+manhunt
+manhunts
+manically
+manicotti
+manicurist
+manifestant
+manifesto
+manifesto's
+manifestoed
+manifestoes
+manifestoing
+manifestos
+manioc
+manipular
+manitowoc
+mankowski
+manless
+manlike
+mannerist
+manneristic
+mannerless
+mannikin
+mannish
+mannishly
+mannishness
+mannitic
+mannitol
+mannopyranosyl
+mannosyl
+manometric
+manometrical
+manometrically
+manometry
+manorialism
+manque
+manrope
+manropes
+mansard
+mansarded
+manse
+manship
+manslayer
+mansuete
+mansuetude
+mantelet
+mantelpiece
+mantelshelf
+mantic
+mantis
+mantises
+mantra
+mantua
+manubrium
+manuduction
+manuductory
+manufactory
+manumission
+manumit
+manumitted
+manumitting
+manurial
+manuscriptal
+manward
+manwards
+manwise
+manyfold
+manzanita
+maplecrest
+mapmaker
+mapmakers
+mapmaking
+mapper
+mappery
+mappist
+mappists
+maquillage
+maquis
+marabou
+maraschino
+marasmic
+marasmus
+maraud
+marauder
+marauding
+marauds
+marbly
+marcelled
+marcelling
+marchesa
+marchese
+marchioness
+marchpane
+marconigram
+marconigram's
+marconigrams
+marcotte
+margarita
+marginate
+marginated
+marginates
+marginating
+margination
+marginations
+mariachi
+marimba
+marish
+marjoram
+markdown
+marketeer
+marketeer's
+marketeering
+marketeers
+marketwise
+markovitz
+marksmen
+markswoman
+markswomen
+markup
+markups
+marl
+marline
+marmoreal
+marmoreally
+marmorean
+marmoset
+marmoset's
+marmosets
+marmot
+marplot
+marque
+marquet
+marquisate
+marquise
+marquisette
+marrowfat
+marrowless
+marrowy
+marse
+marshalcy
+marshalship
+marshier
+marshiness
+marshmallowy
+marshy
+marsupial
+marsupial's
+marsupials
+marsupium
+martensite
+martensitic
+martensitically
+martinet
+martlet
+martyrologies
+martyrologist
+martyrologists
+martyrology
+martyry
+marzipam
+marzipan
+maskable
+masochism
+masochistic
+masochistically
+massbus
+masseter
+masseteric
+masseur
+masseurs
+masseuse
+massicot
+massif
+massifs
+massy
+mastectomies
+mastectomy
+mastership
+mastersinger
+mastersingers
+masterstroke
+masterstrokes
+masterwork
+masthead
+mastic
+masticate
+masticated
+masticates
+masticating
+mastication
+mastications
+masticator
+masticators
+masticatory
+mastitic
+mastodonic
+mastodont
+mastoid
+mastoidectomy
+mastoideus
+mastoiditis
+masturbational
+masturbatory
+matador
+matchboard
+matchboarding
+matchlock
+matchwood
+matelote
+materfamilias
+materialist
+materialistically
+materiality
+matey
+maths
+matinal
+matins
+matriarchate
+matriarchy
+matric
+matricidal
+matricide
+matriculant
+matrilineal
+matrilineally
+matroid
+matronymic
+matt
+matte
+mattei
+mattery
+mattie
+mattock
+matutinal
+matutinally
+matzo
+matzos
+maude
+maudlinism
+maudlinisms
+maugre
+mauricio
+maxi
+maxilla
+maxillae
+maxillary
+maxillas
+maxilliped
+maxillipede
+maximalist
+mayapple
+mayflower
+mayfly
+mayoralty
+mayoress
+maypole
+mayst
+mazy
+mazzard
+mea
+meadowlark
+meadowlark's
+meadowlarks
+meagre
+mealie
+mealymouth
+mealymouthed
+mealymouthedly
+mealymouthedness
+mealymouthednesses
+meandrous
+measurability
+measureless
+meatball
+meatballs
+meath
+meatman
+meatmen
+mech
+mechanician
+mechanistically
+mechanoreceptor
+mecholyl
+mecum
+medallic
+meddlesome
+meddlesomeness
+mediacy
+mediad
+mediae
+medial
+medially
+mediant
+mediational
+mediatorial
+mediatorship
+mediatory
+mediatress
+mediatresses
+mediatrice
+mediatrix
+medicable
+medicably
+medicaid
+medicament
+medicamented
+medicamenting
+medicamentous
+medicaments
+medicare
+medicinable
+medicolegal
+medievalise
+medievalises
+medievalism
+medievalism's
+medievalisms
+medievalistic
+medievalistics
+meditator
+mediumship
+medlar
+medlars
+medulla
+medullary
+medullated
+medusae
+medusoid
+meerschaum
+megabuck
+megacycle
+megagamete
+megagametophyte
+megakaryocyte
+megakaryocytic
+megalith
+megalithic
+megaloblast
+megaloblastic
+megalomaniacal
+megalomaniacally
+megalomanic
+megalopolis
+megalopolistic
+megalopolitan
+megalopolitanism
+megalopteran
+megalopterous
+megaparsec
+megaphone
+megaphonic
+megapolis
+megapolitan
+megarians
+megascopic
+megascopically
+megasporangium
+megaspore
+megasporic
+megasporogenesis
+megasporophyll
+megillah
+megrim
+megrims
+meiosis
+meiotic
+meiotically
+meister
+melancholia
+melancholiac
+melancholic
+melancholically
+melanic
+melanism
+melanist
+melanistic
+melanite
+melanitic
+melanoblast
+melanoblastic
+melanoblastoma
+melanochroic
+melanocyte
+melanogenesis
+melanoid
+melanophore
+melanosis
+melanotic
+melatonin
+melic
+melies
+meliorator
+meliorism
+meliorist
+melioristic
+mell
+melliferous
+mellifluent
+mellifluently
+mellifluous
+mellifluously
+mellifluousness
+mellitin
+mellophone
+melodist
+melodramatically
+melodramatist
+meltability
+meltable
+meltdown
+meltdown's
+meltwater
+meltwaters
+membranal
+membraneless
+membranous
+membranously
+meme
+memorably
+memorialist
+memoriter
+menarcheal
+mencken
+menckenese
+mendable
+mendicancies
+mendicancy
+mendicant
+mendicants
+mendicities
+mendicity
+mendoza
+menhaden
+menhir
+meningeal
+meninges
+meningitic
+meningitis
+meningococcal
+meningococcic
+meninx
+menisci
+meniscus
+meniscuses
+menominee
+menopausal
+menorah
+menorrhagia
+menorrhagic
+mensal
+mensch
+mense
+menseful
+menseless
+menservants
+menstruous
+menstruum
+mensurability
+mensural
+mensurational
+menswear
+mentalist
+mentation
+mentations
+menthol
+mentholated
+mentorship
+mentum
+meow
+meow's
+meowed
+meowing
+meows
+mephitic
+mephitis
+mercantilism
+mercantilist
+mercantilistic
+mercenarily
+mercery
+merchantable
+merchantman
+merchantmen
+mercurate
+mercurated
+mercurates
+mercurating
+mercuration
+mercurations
+mercurous
+merganser
+mergence
+mergences
+meridional
+meridionally
+merino
+meristically
+meriwether
+meroblastic
+meroblastically
+merocrine
+meromorphic
+meromyosin
+merrick
+merrimac
+merrymaker
+merryman
+merrythought
+mescal
+mesdames
+mesdemoiselles
+meseems
+mesenteric
+mesenteron
+meshwork
+meshy
+mesial
+mesially
+mesic
+mesically
+mesmerically
+mesmerism
+mesmerisms
+mesmerist
+mesmerists
+mesne
+mesoblast
+mesoblastic
+mesocarp
+mesoderm
+mesodermal
+mesodermic
+mesomerism
+mesomorph
+mesomorphic
+mesomorphism
+mesomorphy
+mesonephric
+mesonephros
+mesonic
+mesopause
+mesopelagic
+mesophase
+mesophases
+mesosome
+mesosphere
+mesospheric
+mesothoracic
+mesothorax
+mesothorium
+mesotron
+mesotronic
+mesotrophic
+messaline
+messiahship
+messianic
+messianism
+messuage
+messuages
+mestizo
+metabole
+metabolically
+metacarpal
+metacarpus
+metacentric
+metachromatic
+metaethical
+metaethics
+metagalactic
+metagalaxies
+metagalaxy
+metagenesis
+metagenetic
+metagenetically
+metalicities
+metalicity
+metalicity's
+metallically
+metallike
+metallist
+metallists
+metallographer
+metallographic
+metallographically
+metallographist
+metalloidal
+metallurgist
+metalware
+metamathematician
+metamathematics
+metamere
+metameric
+metamerically
+metamerism
+metamorphically
+metanephric
+metanephros
+metaph
+metaphase
+metaphysician
+metaplasia
+metaplasm
+metaplasmic
+metaplastic
+metaprotein
+metapsychological
+metapsychology
+metasomatic
+metasomatically
+metasomatism
+metastability
+metastable
+metastably
+metastasis
+metastatic
+metastatically
+metatarsal
+metatarsally
+metatarsus
+metate
+metathesis
+metathetic
+metathetical
+metathetically
+metathoracic
+metazoa
+metazoal
+metazoan
+metempsychosis
+metencephalic
+metencephalon
+meteorically
+meteoritical
+meteorograph
+meteorographic
+meteoroidal
+meteorol
+meteorologic
+meteorologicaly
+meteorologist
+methacrylate
+methadon
+methadone
+methamphetamine
+methanolic
+metheglin
+methinks
+methionine
+methodic
+methodistic
+methodologist
+methought
+methylal
+methylamine
+methylase
+methylate
+methylated
+methylation
+methylator
+methylcholanthrene
+methylic
+methylnaphthalene
+methylphenidate
+meticulosity
+metier
+metis
+metonym
+metonymic
+metonymical
+metonymically
+metonymy
+metope
+metopon
+metrazol
+metrication
+metrist
+metrological
+metrologically
+metrologist
+metrology
+metronomic
+metronomical
+metronomically
+mewl
+mezuza
+mezuzah
+mezzanine
+mezzanines
+mezzotint
+miasmatic
+miasmic
+micaceous
+micellar
+micelle
+micelle's
+micelles
+micra
+microampere
+microamperes
+microanalyst
+microanalytical
+microanatomical
+microanatomy
+microbarograph
+microbe
+microbe's
+microbeless
+microbes
+microbic
+microbiologic
+microbiological
+microbiologically
+microbiologist
+microbiology
+microbus
+microcalorimetric
+microcephalic
+microcephaly
+microcircuit
+microcircuitry
+microcircuits
+microcirculation
+microcirculatory
+microclimate
+microclimates
+microclimatic
+microclimatological
+microclimatologist
+microclimatology
+microcline
+microclines
+micrococcal
+micrococcus
+microconsumer
+microcontroller
+microcopier
+microcopy
+microcosmic
+microcosmically
+microcrystal
+microcrystalline
+microcrystallinity
+microcyte
+microcytic
+microdensitometer
+microdensitometer's
+microdensitometers
+microdensitometric
+microdensitometry
+microdissection
+microdomain
+microdomains
+microelectrode
+microelectronic
+microelectronically
+microelectronics
+microelectrophoresis
+microelectrophoretic
+microelectrophoretical
+microelectrophoretically
+microelement
+microencapsulate
+microencapsulation
+microenvironment
+microenvironmental
+microevolution
+microevolutionary
+microfarad
+microfarads
+microfauna
+microfaunal
+microfibril
+microfibrillar
+microfiche
+microfiches
+microfilaria
+microfilarial
+microfine
+microflash
+microflora
+microfloral
+microform
+microfossil
+microfungal
+microfungus
+microgamete
+microgametocyte
+micrograph
+micrographer
+micrographers
+microgroove
+microhabitat
+microhardness
+microinch
+microinjection
+microlith
+microlithic
+micromania
+micromanipulation
+micromanipulator
+micromere
+micrometeorite
+micrometeoroid
+micrometeorological
+micrometeorologist
+micrometeorology
+micromethod
+micrometric
+micrometry
+micromicrofarad
+micromicrofarads
+micromicron
+microminiature
+micronuclear
+micronucleate
+micronucleus
+micronutrient
+micronutrients
+microorganic
+micropaleontologic
+micropaleontological
+micropaleontologist
+micropaleontology
+microparasite
+microparasites
+microparasitic
+microphage
+microphonic
+microphonics
+microphotograph
+microphotographer
+microphotographic
+microphotography
+microphotometer
+microphotometer's
+microphotometers
+microphotometric
+microphotometrically
+microphotometry
+microphyll
+microphyllous
+microphysical
+microphysically
+microphysics
+micropipet
+micropipette
+microplankton
+micropore
+microporosity
+microporous
+microprint
+microprobe
+microprogrammable
+microprojection
+microprojector
+micropulsation
+micropump
+micropylar
+micropyle
+microradiograph
+microradiographic
+microradiography
+microreader
+microrelief
+microreproduction
+microscale
+microscopist
+microsection
+microseism
+microseismic
+microseismicity
+microsome
+microsomes
+microspectrophotometer
+microspectrophotometer's
+microspectrophotometers
+microspectrophotometric
+microspectrophotometrical
+microspectrophotometrically
+microspectrophotometry
+microsphere
+microspheric
+microsporangium
+microspore
+microsporic
+microstate
+microstructural
+microstructurally
+microstructure
+microstructures
+microsurgery
+microsurgical
+microtechnic
+microtechnique
+microtome
+microtomes
+microtonal
+microtonality
+microtonally
+microtone
+microtones
+microtubular
+microtubule
+microtubules
+micturate
+micturated
+micturates
+micturating
+micturition
+micturitions
+midafternoon
+midbrain
+midcapacity
+midcourse
+midden
+middens
+middies
+middlebrow
+middlebrowism
+middlebrows
+middorsal
+middy
+midfield
+midfielder
+midget
+midgut
+midline
+midmost
+midplane
+midportion
+midrash
+midrashic
+midrashim
+midrib
+midribbed
+midriff
+midriffs
+midsemester
+midsole
+midsummery
+midtown
+midwatch
+midwatches
+midwifery
+midwing
+midwintry
+midwived
+midwiving
+mig
+mightless
+mignonette
+migraine
+migraines
+migrainous
+migrancy
+migratetic
+migratetics
+migrational
+migrationist
+migrationists
+migrator
+migratorial
+migs
+mikado
+mikhail
+mikoyan
+mila
+milacre
+milady
+milanese
+milch
+mildewcide
+mildewproof
+mildewy
+mildhearted
+mildish
+milepost
+milesian
+milfoil
+milfoils
+milia
+miliaria
+miliarial
+miliarias
+miliary
+milieux
+milinch
+militance
+militances
+militancies
+militancy
+militaristic
+militaristically
+militaryism
+militaryisms
+militiaman
+milium
+milkily
+milkless
+milklike
+milkman
+milkmen
+milksop
+milksopping
+milksoppy
+milkstone
+millable
+millage
+millboard
+millcourse
+milldam
+millenaries
+millenary
+millenia
+millennial
+millerite
+millesimal
+millesimally
+millhouse
+milliammeter
+milliammeter's
+milliammeters
+milliard
+milliary
+millibar
+millibarn
+millicron
+millicurie
+millicycle
+millidarcy
+millieme
+milliemes
+milliequivalent
+millifarad
+milligal
+millihenry
+millihertz
+millihg
+millilambert
+millilux
+millime
+millimetric
+millimicrofarad
+millimicrofarads
+millimicron
+millimicrosecond
+millimolar
+millimolarity
+millimole
+milline
+milliner
+millionairedom
+millionairess
+millionary
+millionfold
+milliphot
+millipoise
+millirad
+milliroentgen
+millman
+millmen
+millowner
+millpond
+millponds
+millrace
+millraces
+millsite
+millstream
+millstreams
+milord
+milquetoast
+milquetoasts
+milt
+milter
+mim
+mimetism
+mimical
+mimicry
+mimosa
+min
+minable
+minaret
+minareted
+minarets
+minatory
+mincy
+mineable
+minestrone
+minesweeping
+mingy
+miniaturist
+miniaturistic
+miniaturists
+minibus
+minibuses
+minicam
+minicamera
+minicar
+minicartridge
+minikin
+minim
+minimalism
+ministrable
+ministrant
+ministration
+minitrack
+minium
+minot
+minous
+minster
+minstrelsy
+mintage
+minuscular
+minutia
+minutial
+minx
+minxes
+miocrystalline
+mioses
+miosis
+miotic
+mirabilite
+miracular
+miraculism
+miraculisms
+miraculist
+miraculists
+mirate
+mirated
+mirates
+mirating
+miration
+mirations
+mirky
+mirrorlike
+mirrory
+mirthful
+mirthfully
+mirthfulness
+mirths
+miry
+misaddress
+misaddressed
+misadjustment
+misadventure
+misadventured
+misadventures
+misadventurous
+misadvise
+misaim
+misalliance
+misally
+misandry
+misanthropically
+misanthropism
+misanthropist
+misanthropists
+misanthropy
+misappreciate
+misappreciation
+misapprehend
+misapprehended
+misapprehending
+misapprehendingly
+misapprehends
+misapprehension
+misapprehensions
+misapprehensive
+misapprehensively
+misapprehensiveness
+misappropriate
+misappropriates
+misappropriation
+misarranged
+misarrangement
+misarray
+misascription
+misassignment
+misattribution
+misbecome
+misbecoming
+misbeget
+misbehadden
+misbeholden
+misbelief
+misbelieve
+misbeliever
+misbelieving
+misbelievingly
+misbeseem
+misbestow
+misbirth
+misc
+miscalculate
+miscalculates
+miscalculating
+miscalculator
+miscall
+miscaller
+miscast
+miscasting
+miscasts
+miscegenational
+miscellanea
+miscellaneity
+miscellanist
+miscellanists
+mischance
+mischiefful
+miscibility
+miscible
+misclassifications
+misclassify
+miscomprehend
+miscomprehension
+misconceit
+misconceive
+misconceived
+misconceiver
+misconceives
+misconceiving
+misconduct
+misconducted
+misconducting
+misconducts
+miscontent
+miscontentment
+miscook
+miscopy
+miscorrect
+miscorrected
+miscounsel
+miscounseled
+miscreance
+miscreances
+miscreate
+miscreation
+miscreative
+miscreator
+misdate
+misdeal
+misdealing
+misdeem
+misdeems
+misdeliver
+misdelivered
+misdelivery
+misdemean
+misdescribe
+misdescription
+misdescriptive
+misdo
+misdoer
+misdoing
+misdoubt
+miseducated
+miseducation
+misemphasis
+misemphasization
+misemphasize
+misemphasized
+misemphasizes
+misemphasizing
+misemploy
+misemployment
+misericorde
+mises
+misesteem
+misestimate
+misestimation
+misfeasance
+misfeasor
+misfeed
+misfile
+misfiled
+misfiles
+misfiling
+misgive
+misgives
+misgovern
+misgovernment
+misguidance
+mishandle
+mishandled
+mishandles
+mishandling
+mishear
+mishmash
+misimpression
+misimprove
+misinformative
+misintelligence
+misinterpretable
+misjoinder
+misknow
+misknowledge
+misknows
+mislabel
+mislay
+mislaying
+mislays
+misleared
+mislike
+mismachine
+mismanagement
+mismarriage
+mismate
+misogamic
+misogamist
+misogamists
+misogamy
+misogynic
+misogynistic
+misologist
+misology
+misoneism
+misorder
+misperception
+misperceptions
+misplay
+mispleading
+mispoint
+mispraise
+misprint
+misprision
+misprisions
+misprize
+misprized
+misprizes
+misprizing
+mispunctuate
+mispunctuation
+misquotation
+misquote
+misquotes
+misreckon
+misrecollect
+misrecollection
+misregister
+misregistration
+misremember
+misreport
+misrepresentative
+misrule
+misruled
+misruler
+misrules
+misruling
+missend
+misshape
+misshapes
+missileer
+missileers
+missileman
+missilemen
+missilery
+missilry
+missionate
+missort
+missout
+misspeak
+misspend
+misspended
+misspender
+misspending
+misspends
+misstrike
+misterm
+mistful
+misthink
+mistily
+mistime
+mistimed
+mistrain
+mistranslate
+mistranslation
+mistreatment
+mistrustful
+mistrustfully
+mistrustfulness
+misusage
+misvalue
+misventure
+miswrite
+miswrites
+miswriting
+mitch
+miterwort
+mitigator
+mitigators
+mitigatory
+mitochondria
+mitochondrion
+mitogenesis
+mitogenetic
+mitogenic
+mitoinhibitory
+mitosis
+mitotic
+mitotically
+mitral
+mitt
+mitted
+mittimus
+mitts
+mitzvah
+mitzvah's
+mitzvahes
+mixable
+mixologist
+mixologists
+mixology
+mizzenmast
+mizzle
+mizzled
+mizzles
+mizzling
+mizzly
+mlea
+moanful
+moanfully
+mobbish
+mobbishly
+mobbishness
+mobbism
+mobocracy
+mobocrat
+mobocratic
+mocha
+mockernut
+moderationist
+moderatism
+moderato
+moderatorship
+modernist
+modicity
+modificative
+modiste
+modulability
+modulatory
+moduli
+mogul
+mohair
+mohm
+moil
+moiler
+moiling
+moilingly
+moistureless
+molality
+molarity
+moldable
+molecularity
+moleskin
+moleskins
+molestation
+molestations
+molluscan
+molluskan
+molotov
+molt
+molter
+molto
+molts
+molucca
+moly
+molybdate
+molybdic
+molybdous
+momental
+momentaneous
+monachal
+monachism
+monadism
+monandrous
+monandry
+monarchal
+monarchial
+monarchical
+monarchically
+monarchism
+monarchist
+monarchistic
+monarchists
+monasterial
+monastical
+monastically
+monatomic
+monde
+mondrian
+monel
+moner
+monestrous
+monet
+monetarily
+moneybags
+moneylender
+moneylending
+moneyless
+moneymake
+moneymaker
+moneywort
+monger
+mongered
+mongering
+mongers
+mongolism
+mongoloid
+mongrel
+mongrelism
+mongrelly
+mongrelness
+monic
+monicker
+monied
+moniker
+monilia
+monish
+monism
+monist
+monistic
+monistical
+monition
+monitions
+monitorial
+monitorially
+monitorship
+monitory
+monitress
+monkeries
+monkery
+monkeyflower
+monkeyshine
+monkhood
+monoacid
+monoacidic
+monoamine
+monochasial
+monochromat
+monochromatically
+monochromaticity
+monochromatism
+monochromic
+monochromist
+monocline
+monocoque
+monocracy
+monocrat
+monocratic
+monocultural
+monoculture
+monocycle
+monocyclic
+monocycly
+monocyte
+monocytic
+monodisperse
+monodist
+monodrama
+monodramatic
+monoecious
+monoeciously
+monoecism
+monoenergetic
+monoester
+monofilament
+monofuel
+monogamic
+monogamist
+monogamists
+monogastric
+monogenean
+monogenesis
+monogenetic
+monogenic
+monogenically
+monogerm
+monogram
+monogram's
+monogrammatic
+monograms
+monographic
+monographical
+monography
+monogynous
+monogyny
+monohybrid
+monoid
+monolayer
+monologuist
+monomania
+monomaniac
+monometallic
+monometer
+monometer's
+monometers
+monomolecular
+monomolecularly
+monomorphemic
+monomorphic
+monomorphism
+monomorphous
+monophonically
+monophony
+monophthong
+monophthongal
+monophyletic
+monophyletism
+monoplane
+monoploid
+monopodial
+monopodially
+monopolist
+monopolistically
+monopropellant
+monopsony
+monopulse
+monorail
+monorail's
+monorails
+monosaccharide
+monosaccharides
+monosomic
+monostat
+monostatic
+monosyllabically
+monosyllabicity
+monosymmetric
+monosymmetry
+monosynaptic
+monosynaptically
+monotheist
+monotheistical
+monotheistically
+monotint
+monotrematous
+monotreme
+monotrichous
+monotype
+monotypic
+monovalent
+monovular
+monoxide
+monozygotic
+monsoonal
+monstrance
+monstrances
+montaigne
+monte
+monticule
+monumentless
+mooch
+moocher
+mooches
+mooching
+moola
+moolah
+moonbeam
+moonbeam's
+moonbeams
+moonbow
+mooncalf
+mooneye
+moonish
+moonishly
+moonless
+moonlet
+moonquake
+moonrise
+moonscape
+moonseed
+moonset
+moonstone
+moonstruck
+moonward
+moony
+moorage
+mopper
+moppet
+morainal
+morainic
+moralism
+moralistically
+morassy
+moray
+mordacious
+mordaciously
+mordacity
+mordancy
+mordent
+morehouse
+morel
+moresque
+morganatic
+morganatically
+morganite
+moribundity
+moron
+moronically
+moronism
+moronity
+morosity
+morph
+morphinic
+morphinism
+morpho
+mort
+mortarboard
+mortem
+mortgagor
+mortgagors
+mortimer
+mortise
+mortising
+mortmain
+mortuaries
+mortuary
+mortuary's
+mosaically
+mosaicism
+mosaicist
+moscone
+mosey
+moseyed
+moseying
+mosquitoey
+mossback
+mossbacked
+mosslike
+mot
+mote
+motet
+mothball
+motherhouse
+motherless
+motherlessness
+mothproof
+mothproofer
+motile
+motility
+motivic
+motivity
+motoneuron
+motorbike
+motorboat
+motorboater
+motorboating
+motorcade
+motorcade's
+motorcades
+motorcyclist
+motordrome
+motoric
+motorically
+motorless
+motortruck
+motorway
+mots
+moulage
+moulin
+moulins
+moult
+mountaintop
+mountaintop's
+mountaintops
+mountainy
+mountebank
+mountebankery
+mousetrap
+mousey
+mousily
+moussaka
+mousse
+mouthier
+mouthlike
+mouthpart
+mouthy
+movability
+movably
+moveless
+movelessly
+movelessness
+moviedom
+moviegoer
+moviemaker
+mown
+moxie
+mozzarella
+mu
+muciferous
+mucilaginous
+mucilaginously
+muckrake
+muckraker
+muckraking
+mucosa
+mucous
+mudded
+muddily
+mudhole
+mudhole's
+mudholes
+mudsill
+mudstone
+mudstones
+muezzin
+mufti
+muftis
+mugged
+mugger
+muggily
+mugho
+mugwump
+muhammad
+mukluk
+muley
+muliebrity
+mullein
+mullet
+mullets
+mullion
+mullite
+multiaperture
+multicavity
+multicellularity
+multichip
+multicollector
+multicompletion
+multicoupler
+multicycle
+multideck
+multielectrode
+multiengine
+multifactorial
+multifactrially
+multifarious
+multifariously
+multifariousness
+multifold
+multiform
+multiformity
+multihued
+multilane
+multilaned
+multilayer
+multilayered
+multilayers
+multilingual
+multilingualism
+multilingualist
+multilingually
+multimeter
+multimeter's
+multimeters
+multinucleate
+multinucleated
+multipactor
+multiparous
+multipartite
+multiphase
+multiphasic
+multiphastic
+multiplicable
+multiplicate
+multiplicates
+multipolar
+multipolarity
+multipronged
+multiracial
+multiracialism
+multisectoral
+multisegment
+multistatic
+multistory
+multivalence
+multivalued
+multivolume
+multivolumed
+mummer
+mummery
+mumming
+mump
+mumper
+mumps
+mundt
+mung
+munificence
+munist
+munroe
+muonic
+muralist
+murderee
+murderess
+muriate
+murkily
+murmurous
+murmurously
+murrain
+murre
+murrey
+murrow
+muscadine
+muscatel
+muscly
+muscularity
+musculoskeletal
+musee
+musette
+musettes
+mushily
+musicale
+musicological
+musicologist
+musketeer
+musketry
+muskie
+muskier
+muskies
+muskiness
+musky
+mussier
+mussily
+mussiness
+mussy
+mustily
+mutably
+mutafacient
+mutagen
+mutagenesis
+mutagenic
+mutagenically
+mutagenicity
+mutandis
+mutase
+mutatis
+muticous
+mutilator
+mutine
+mutined
+mutining
+mutinous
+mutinously
+mutinousness
+muttonchops
+muttony
+mutualism
+mutualist
+mutualistic
+mutuel
+muumuu
+muzzier
+muzzily
+muzziness
+muzzy
+mycobacteria
+mycoplasma
+mycorrhiza
+mycosis
+mycotic
+myel
+myeline
+myeloid
+myocarditis
+myofibril
+myoglobin
+myopically
+myosin
+myosotis
+myotic
+myotome
+myotonia
+myriameter
+myriameter's
+myriameters
+myriapod
+myriopod
+myristate
+myrmecological
+myrrh
+mystagogy
+mythmaker
+mythmaking
+mythologer
+mythologic
+mythologist
+mythomania
+mythomaniac
+mythopoeic
+mythopoetic
+mythopoetical
+mythos
+nacelle
+nacreous
+nagger
+naiad
+naivety
+nakamura
+nakoma
+namable
+nannies
+nanny
+nanook
+napalm
+nape
+napery
+napes
+naphthalene
+naphthalenic
+naphthene
+naphthenic
+naphthol
+napless
+napper
+nappier
+nappies
+nappy
+narc
+narcism
+narcissi
+narcissism
+narcist
+narcolepsy
+narcoleptic
+narcos
+narcotically
+narrational
+narrowminded
+narwal
+narwhal
+narwhal's
+narwhals
+nascence
+nascency
+nastic
+natant
+natation
+natations
+natatorial
+natatorium
+natatory
+nate
+nates
+nationalistically
+nativism
+nativist
+nativistic
+nattily
+naturalistically
+naturam
+naturopath
+naughtily
+nauseant
+nauseous
+nauseously
+nauseousness
+nauseum
+naut
+navaho
+nave
+naves
+navicular
+navigability
+navigably
+navigational
+navigationally
+navona
+navtas
+naw
+nawab
+nazification
+nazifications
+nazified
+nazifies
+nazify
+nazifying
+neath
+nebbish
+nebulosity
+necessitarian
+necessitarianism
+necessitous
+necessitously
+necessitousness
+neckerchief
+necrological
+necrologist
+necrologists
+necrology
+necromantically
+necrophagia
+necrophagous
+necrophagy
+necrophilia
+necrophilic
+necrophilism
+necropolis
+necroses
+nectareous
+nectarine
+needlelike
+needlewoman
+needlewomen
+nefarious
+nefariously
+nefariousness
+negational
+negativist
+negativistic
+negativists
+negaton
+negatron
+neglectful
+neglectfully
+neglectfulness
+negligibility
+negligibly
+negotiability
+negotiator
+negotiators
+negotiatory
+negrophile
+negrophilism
+nematicidal
+nematicide
+nematocyst
+nemeses
+nemophila
+neo
+neoanthropic
+neoclassicism
+neoclassicist
+neocosmic
+neofascism
+neogenesis
+neogenetic
+neoglycolipid
+neoglycolipids
+neoliberalism
+neolith
+neological
+neologistic
+neology
+neonate
+neoorthodox
+neoorthodoxy
+neoplasia
+neoplasm
+neoplastic
+neoplasticism
+neoplasticist
+neoplasticists
+neostigmine
+neotenic
+neoteny
+neoteric
+neotype
+nepenthe
+nepenthean
+nephanalysis
+nepheline
+nephelinic
+nephelinite
+nephelinitic
+nephelite
+nephelometer
+nephelometer's
+nephelometers
+nephelometric
+nephelometry
+nephometer
+nephometer's
+nephometers
+nephoscope
+nephrectomy
+nepotism
+nepotist
+nepotistic
+nepotists
+nereid
+nervation
+nervations
+nervosity
+nescience
+nesciences
+nescient
+nethermost
+netkeeper
+netless
+netlike
+netter
+netty
+neumatic
+neuralgic
+neuritic
+neuroanatomic
+neuroanotomy
+neuroblastoma
+neurochemistry
+neurocirculatory
+neuroendocrine
+neuroepithelial
+neurofibril
+neurofibrillary
+neurogenic
+neurogenically
+neuroglia
+neuroglial
+neuronic
+neuropathic
+neuropathically
+neuropathy
+neurospora
+neurosurgeon
+neurosurgery
+neurosurgical
+neurotically
+neuroticism
+neurotoxic
+neurotoxicity
+neurotoxin
+neurotropic
+neutercane
+neutralistic
+neutronium
+neutrophil
+neutrophile
+neutrophilic
+neutrophilis
+neutrophils
+neve
+nevermore
+nevers
+nevus
+newbury
+newfangled
+newfangledness
+newish
+newsagent
+newsagents
+newsbreak
+newsier
+newsiness
+newsless
+newsmagazine
+newsmonger
+newsprint
+newsroom
+newsy
+niacin
+nib
+nibelungenlied
+nibs
+niccolo
+nickelic
+nickeliferous
+nickelodeon
+nickelous
+nicklaus
+nicknameless
+nicotinamide
+nicotinic
+nidification
+nidifugous
+nietzschean
+nigger
+nightclothes
+nightclubber
+nightglow
+nightie
+nighties
+nightlong
+nightshade
+nightside
+nightstand
+nightstick
+nighttide
+nightwalker
+nighty
+nihilianism
+nihilistically
+nihility
+nijinsky
+nill
+nilmanifold
+nimbostratus
+nimiety
+nimming
+nincompoop
+nincompoopery
+ninebark
+ninepin
+ninepins
+ninetyfold
+ninnies
+ninny
+ninnyhammer
+nipper
+nippers
+nippier
+nippily
+nippiness
+nippy
+nisei
+niseis
+nit
+nite
+nitid
+nitrator
+nitrification
+nitrifications
+nitrify
+nitrile
+nitro
+nitrobenzene
+nitrocellulose
+nitrocellulosic
+nitrofuran
+nitroglycerin
+nitroparaffin
+nitros
+nitrosamine
+nitrosoamine
+nitty
+nitwit
+nitwitted
+nobbier
+nobble
+nobbled
+nobbling
+nobby
+noblewoman
+nocent
+noces
+nociceptive
+nock
+nocking
+noctambulation
+noctambulism
+noctambulist
+nocturn
+nocuous
+nocuously
+nodality
+nodder
+noddies
+noddle
+noddy
+nodi
+nodical
+nodose
+nodosity
+nodulation
+nodus
+noes
+noetic
+nog
+noggin
+nogging
+nohow
+noisome
+noisomely
+noisomeness
+nolo
+noma
+nomad
+nomadic
+nomadism
+nomads
+nomenclator
+nomenclatorial
+nomenclatural
+nomic
+nomina
+nominalism
+nominalist
+nominalistic
+nominator
+nominators
+nomogram
+nomogram's
+nomograms
+nomograph
+nomographer
+nomographic
+nomographically
+nomographies
+nomography
+nomological
+nomology
+nomothetic
+nonage
+nonagenarian
+nonagon
+nonallelic
+nonbank
+nonbook
+noncalcareous
+nonce
+nonchalance
+noncharitable
+noncom
+nonconcurrence
+nonconcurrency
+noncondensing
+nonconducting
+nonconductor
+nonconductors
+nonconfidence
+nonconform
+nonconformable
+nonconformably
+nonconformance
+nonconformer
+nonconforming
+nonconformism
+nonconformity
+noncooperation
+noncooperationist
+noncooperative
+noncooperator
+noncrossing
+noncurrent
+nondeductibility
+nondeductible
+nondefense
+nondefense's
+nondefenses
+nondeforming
+nondegenerate
+nondemocratic
+nondestructive
+nondirectional
+nondirective
+nondisjunction
+nondisjunctional
+nondistinctive
+nondivided
+nondormant
+nondramatic
+nondrying
+noneconomist
+nonelectrolyte
+nonentities
+nonentity
+nonesuch
+noneuclidean
+nonfat
+nonfeasance
+nonfictional
+nonfigurative
+nonflammable
+nonflowering
+nonfragmenting
+nongovernment
+nongovernmental
+nonillion
+nonimpact
+nonimpinging
+noninductive
+nonintersecting
+nonintervention
+noninterventionist
+noninverting
+noninvolvement
+nonjoinder
+nonjuring
+nonjuror
+nonlinguist
+nonliterate
+nonloaded
+nonmatching
+nonmetal
+nonmoral
+nonmultiple
+nonnucleated
+nonobjective
+nonobjectivism
+nonobjectivist
+nonobjectivity
+nonobservance
+nonoccurrence
+nonparallel
+nonparametric
+nonparametrics
+nonpareil
+nonparticipant
+nonparticipating
+nonparticipation
+nonpartisanship
+nonpast
+nonpaternity
+nonpathogenic
+nonpermanent
+nonpersonal
+nonplus
+nonpluses
+nonpolar
+nonporous
+nonpositive
+nonpossession
+nonpossessor
+nonprint
+nonprinting
+nonproducer
+nonproductive
+nonproductively
+nonproductiveness
+nonprofessional
+nonprofessionally
+nonprofitable
+nonprogressive
+nonpros
+nonprossed
+nonprossing
+nonprotein
+nonreactive
+nonreader
+nonrealistic
+nonreclosing
+nonrecording
+nonregulation
+nonreimbursable
+nonrelativistic
+nonreligious
+nonremovable
+nonrenewable
+nonrepresentational
+nonrepresentationalism
+nonrepresentative
+nonresidence
+nonresidency
+nonresistant
+nonrestraint
+nonrestricted
+nonrestrictive
+nonretractable
+nonreturnable
+nonrigid
+nonscheduled
+nonscientific
+nonseasonal
+nonsecretor
+nonsectarian
+nonsegregated
+nonsegregation
+nonsignificant
+nonsignificantly
+nonskid
+nonslip
+nonsocial
+nonspecific
+nonsporting
+nonsupport
+nonsyllabic
+nonsynchronous
+nontemporal
+nontenure
+nonunion
+nonuse
+nonuser
+nonviable
+nonviolence
+nonvolatile
+nonworker
+normotensive
+northeasternmost
+northeastward
+northeastwards
+northwestward
+northwestwards
+nosebag
+nosebag's
+nosebags
+nosegay
+nosepiece
+nosey
+noseying
+nosh
+nosher
+nosily
+nosologic
+nosological
+nosologically
+nosology
+nostrum
+nota
+notability
+notarial
+notarially
+notarius
+notecase
+noteless
+notepaper
+noteworthily
+notional
+notionality
+notionally
+notocord
+nougat
+nouncing
+nous
+novaculite
+novae
+novelette
+novelettish
+novelistic
+novella
+novelle
+novemdecillion
+novena
+novocaine
+nowaday
+noway
+noways
+nowhither
+nowise
+noyes
+nu
+nub
+nubbin
+nubble
+nubbles
+nubbly
+nubility
+nucellar
+nucelli
+nucellus
+nuchal
+nucleant
+nuclease
+nucleator
+nuclein
+nucleocapsid
+nucleolar
+nucleon
+nucleon's
+nucleonic
+nucleonics
+nucleons
+nucleophile
+nucleophilic
+nucleophilically
+nucleophilicity
+nucleoplasm
+nucleoplasmatic
+nucleoplasmic
+nucleoprotein
+nucleoside
+nucleosynthesis
+nucleotidase
+nuclidic
+nudibranch
+nugent
+nullificationist
+nulliparous
+numberable
+numbskull
+numia
+numis
+numismatically
+nummular
+numskull
+nunciation
+nunciature
+nuncupate
+nuncupation
+nuncupative
+nunes
+nunnery
+nuovo
+nuptiality
+nursemaid
+nurserymaid
+nurseryman
+nursling
+nurtural
+nurturant
+nutational
+nuthatch
+nutlike
+nutria
+nutriment
+nutted
+nutting
+nux
+nymphal
+nymphalid
+nymphet
+nymphette
+nympholepsy
+nympholept
+nymphomaniacal
+nystagmic
+nystagmus
+o'er
+oafish
+oafishly
+oafishness
+oarsman
+oarsmanship
+oatcake
+oatcake's
+oatcakes
+obbligato
+obcordate
+obeah
+obeisance
+obi
+objectionably
+objectivism
+objectivist
+objectivistic
+objectless
+objectlessness
+objurgate
+objurgated
+objurgates
+objurgating
+objurgation
+objurgations
+objurgatory
+oblast
+obligator
+obligatorily
+obligee
+obligor
+obligors
+obliquity
+obliterator
+obliviated
+obliviates
+obliviating
+oblongatal
+oblongated
+oblongish
+obloquious
+obloquy
+obnubilate
+obnubilated
+obnubilates
+obnubilating
+obnubilation
+obnubilations
+obovate
+obovoid
+obscurant
+obscurantic
+obscurantism
+obscurantist
+obscuration
+obscurations
+obsessional
+obsessionally
+obsolesce
+obstetric
+obstetrical
+obstetrically
+obstetrician
+obstetrician's
+obstetricians
+obstetrics
+obstreperous
+obstreperously
+obstreperousness
+obstructionism
+obstructionistic
+obstructor
+obstruent
+obtainability
+obtainment
+obtect
+obtected
+obtest
+obtestation
+obtrusion
+obtund
+obturate
+obturated
+obturates
+obturating
+obturation
+obturator
+obvert
+occas
+occiput
+occludent
+occlusal
+occultation
+occultations
+occultism
+occultist
+occurrent
+oceana
+oceanarium
+oceanfront
+oceangoing
+oceanographer
+oceanographer's
+oceanographers
+oceanographical
+oceanographically
+oceanologic
+oceanological
+oceanologically
+oceanologist
+oceanology
+ocellar
+ocellate
+ocellated
+ocellation
+ocelli
+ocellus
+och
+ochlocracy
+ochlocrat
+ochlocratic
+ochlocratical
+oconomowoc
+ocotillo
+octadecyl
+octahedra
+octahedral
+octahedrally
+octameter
+octameter's
+octameters
+octandrious
+octant
+octant's
+octants
+octodecillion
+octodecimo
+octoploid
+octoploidy
+octopod
+octopodan
+octopodous
+octosyllabic
+octosyllable
+octroi
+oculomotor
+odalisque
+oddball
+oddball's
+oddballs
+oddment
+odea
+odeum
+odic
+odilo
+odograph
+odontologst
+odontology
+odorant
+odoriferous
+odoriferously
+odoriferousness
+oedipal
+oeillade
+oenology
+oenomel
+oersted
+oeuvre
+oeuvres
+offcast
+officialese
+officialism
+officiant
+officiary
+offish
+offishly
+offishness
+offprint
+offprints
+offsaddle
+offscour
+offscouring
+offscreen
+offside
+ofttimes
+ogeographically
+ogle
+ogler
+ogles
+ogling
+ogre
+ogreish
+ogress
+ohmage
+ohmically
+ohs
+oilcan
+oilily
+oilskin
+oilstone
+oink
+okamoto
+okapi
+okra
+olasticism
+oldfangled
+oldie
+oldish
+oleaginous
+oleaginously
+oleaginousness
+oleaster
+oleate
+olefin
+oleg
+oleophilic
+oleophobic
+olfaction
+olfactions
+olfactive
+olfactology
+olfactometer
+olfactometer's
+olfactometers
+olfactorily
+olfactory
+oligarch
+oligarchical
+oligochaete
+oligoclase
+oligomer
+oligomer's
+oligomers
+oligosaccharide
+oligosaccharide's
+oligosaccharides
+olivine
+olympiad
+om
+ombudsman
+ombudsman's
+ombudsperson
+omelette
+omental
+omentum
+omer
+omissible
+ommatidial
+ommission
+omnidirectional
+omnifarious
+omnifariously
+omnifariousness
+omnificence
+omnificences
+omnificent
+omnify
+omnipotency
+omnipresence
+omnirange
+omniscience
+omnisciency
+omnist
+omnivorous
+omnivorously
+omnivorousness
+onanistic
+oncogene
+oncogene's
+oncogenes
+oncogenic
+onefold
+oneiric
+oneirocritic
+oneirocritical
+oneirocritically
+oneiromancy
+onionskin
+onium
+onload
+onlooking
+onomastic
+onomastics
+onomatology
+onomatopoeia
+onomatopoeia's
+onomatopoeic
+onsetting
+onshore
+onside
+onstage
+ontically
+ontogenesis
+ontogenetic
+ontogenetically
+ontologist
+oocyte
+oomph
+oozier
+oozy
+op
+opalescence
+opalescences
+opaline
+openability
+openable
+openendedness
+openhanded
+openhandedly
+openhandedness
+openhearted
+openheartedly
+openheartedness
+openmouthed
+openmouthedly
+openmouthedness
+openwork
+operability
+operably
+operatically
+operationalism
+operationalist
+operationalistic
+operationism
+operationist
+opercular
+operculate
+operculated
+operculum
+operettist
+operon
+ophidian
+ophiology
+ophiophagous
+ophite
+ophitic
+ophthalmologic
+ophthalmologically
+ophthalmology
+ophthalmoscope
+ophthalmoscopic
+ophthalmoscopical
+ophthalmoscopy
+opine
+opined
+opines
+oping
+opining
+opinionate
+opinionative
+opinionatively
+opinionativeness
+opportunist
+opposability
+opposeless
+oppositional
+opprobrious
+opprobriously
+opprobriousness
+oppugn
+oppugner
+ops
+opsonic
+opsonin
+optative
+optatively
+optician
+optima
+optimistical
+optimo
+optoacoustic
+optoisolate
+optokinetic
+optometrical
+opulence
+opuntia
+opuscule
+opusculum
+ora
+orach
+orache
+oracular
+oracularity
+oracularly
+orality
+orangeade
+orangeroot
+orangery
+orangewood
+orangey
+orangish
+orangoutan
+orangy
+oratio
+oratoric
+orbicular
+orbicularity
+orbicularly
+orbiculate
+orbiculately
+orca
+orca's
+orcas
+orch
+orchardist
+orchardman
+orchesis
+orchestrational
+orchestrator
+orchestre
+orchis
+ordainment
+orderless
+ordinand
+ordines
+ordure
+organdie
+organelle
+organicism
+organicist
+organismal
+organismically
+orgasmic
+orgastic
+orgiastically
+orgulous
+orientable
+orientalism
+orientalist
+orientational
+orientationally
+orienteering
+orificial
+oriflamme
+origami
+origanum
+orismological
+orismology
+orison
+orney
+ornith
+ornithic
+ornithine
+ornithology
+ornithology's
+orogenic
+orogeny
+orographical
+orographically
+orotund
+orotundity
+ort
+orthant
+orthicon
+ortho
+orthocephalic
+orthocephalous
+orthocephaly
+orthochromatic
+orthoclase
+orthoclastic
+orthodontia
+orthoepic
+orthoepical
+orthoepically
+orthoepist
+orthoepy
+orthogenesis
+orthogenetic
+orthogenetically
+orthogenic
+orthognathism
+orthognathous
+orthognathy
+orthograde
+orthographical
+orthographically
+orthopsychiatric
+orthopsychiatrist
+orthopsychiatry
+orthopteran
+orthopterist
+orthopteroid
+orthopteron
+orthorhombic
+orthoscope
+orthoscopes
+orthoscopic
+orthotic
+orthotics
+orthotist
+orthotropic
+orthotropically
+orthotropism
+orthotropous
+ortolan
+orts
+oryx
+oryxes
+orzae
+oscillational
+oscillogram
+oscillogram's
+oscillograms
+oscillograph
+oscillographic
+oscillographically
+oscillography
+oscilloscopic
+oscilloscopically
+oscine
+osculate
+osculated
+osculates
+osculating
+osculation
+osculations
+osculatory
+osculum
+osier
+osmatic
+osmeterium
+osmic
+osmiridium
+osmolal
+osmolality
+osmolar
+osmolarity
+osmometer
+osmometer's
+osmometers
+osmometric
+osmometry
+osmoregulation
+osmoregulatory
+osmose
+osmosed
+osmosing
+osmotically
+osmous
+osmunda
+oso
+osram
+osric
+ossicle
+ossicular
+ossiculate
+ossiculated
+ossificatory
+ossifrage
+ossuary
+osteitis
+ostensive
+ostensively
+ostensorium
+ostentation
+ostentations
+osteoarthritic
+osteoarthritis
+osteoblast
+osteoblastic
+osteoclast
+osteoclastic
+osteocyte
+osteoid
+osteological
+osteologically
+osteologist
+osteoma
+osteopathically
+osteophyte
+osteophytic
+osteoplastic
+osteoplasty
+ostracod
+otherguess
+otherwhere
+otherwhile
+otherwhiles
+otiose
+ouabain
+ouan
+oubliette
+ough
+oui
+outbalance
+outbid
+outbound
+outbrave
+outbreed
+outbreeding
+outbuilding
+outby
+outbye
+outcaste
+outcrop
+outcross
+outdazzle
+outdistance
+outdoorsman
+outdoorsmanship
+outdoorsy
+outdraw
+outercoat
+outfall
+outfight
+outfighting
+outfitter
+outfitting
+outflank
+outflanker
+outfoot
+outgas
+outgeneral
+outgiving
+outgo
+outgoes
+outguess
+outgun
+outhaul
+outlier
+outmatch
+outmode
+outmoding
+outmost
+outpace
+outpaced
+outplay
+outpoint
+outport
+outporter
+outpull
+outputted
+outrace
+outrance
+outrange
+outrank
+outride
+outrider
+outrival
+outscore
+outsell
+outsert
+outshine
+outshoot
+outshout
+outsight
+outsit
+outsize
+outskirt
+outsleep
+outsmell
+outsoar
+outsole
+outspeak
+outspeed
+outspend
+outspent
+outspin
+outstand
+outstare
+outstart
+outstay
+outstretch
+outtake
+outtalk
+outthink
+outturn
+outwear
+outwork
+ouvre
+ouzel
+ovarial
+ovarian
+ovariectomy
+ovariole
+ovariotomy
+ovaritis
+ovenbird
+ovenbirds
+overabundant
+overact
+overaction
+overactivity
+overarm
+overawe
+overbalance
+overbear
+overbearance
+overbid
+overbite
+overblew
+overblow
+overblowing
+overblows
+overbought
+overbuild
+overbuy
+overcall
+overcalled
+overcalling
+overcalls
+overcapacity
+overcareful
+overcarefully
+overcautious
+overcharge
+overcompensate
+overcompensation
+overcompensatory
+overconfidence
+overcurrent
+overcurrents
+overdetermination
+overdetermined
+overdevelop
+overdevelopment
+overdo
+overdominance
+overdominant
+overdress
+overdrive
+overemphasization
+overemphasization's
+overemphasizations
+overet
+overexcite
+overexcitement
+overexposure
+overfastidious
+overfed
+overfish
+overfleshed
+overflight
+overflown
+overfly
+overgarment
+overglaze
+overgraze
+overgrow
+overgrowth
+overily
+overindulge
+overindulgence
+overindulgent
+overissue
+overissued
+overissues
+overissuing
+overleap
+overlearn
+overlie
+overlong
+overlord
+overlordship
+overman
+overmaster
+overmatch
+overmuch
+overoptimism
+overoptimist
+overoptimistic
+overoptimistically
+overpass
+overpay
+overpersuade
+overpersuasion
+overplay
+overplus
+overpopulate
+overpraise
+overprize
+overproduce
+overproduced
+overproduces
+overproducing
+overpronounce
+overproof
+overproportion
+overprotect
+overrate
+overreact
+overreaction
+overrefine
+overrefinement
+overrepresent
+overripe
+oversanguine
+oversea
+overseen
+oversell
+overselling
+oversells
+oversensitive
+oversensitiveness
+oversexed
+overshoe
+overskirt
+overslaugh
+oversleep
+overslip
+oversold
+oversoul
+overspeculate
+overspeculation
+overspeed
+overspend
+overspender
+overspending
+overspends
+overspread
+oversteepen
+oversteer
+overstep
+oversteps
+overstock
+overstory
+overstrain
+overstrew
+overstride
+overstrung
+overstuff
+overstuffed
+overstuffing
+overstuffs
+oversubscribe
+oversubscribes
+oversubscribing
+oversubscription
+oversubtle
+oversubtlety
+overtax
+overtaxation
+overthrust
+overtop
+overtrade
+overtrain
+overtrick
+overtrump
+overvalue
+overvoltage
+overvoltages
+overwatch
+overwear
+overweary
+overween
+overweening
+overweigh
+overwind
+overwinter
+overword
+overwrought
+ovicidal
+ovicide
+oviduct
+oviductal
+ovine
+oviparous
+oviparously
+oviparousness
+oviposit
+oviposition
+ovipositional
+ovipositor
+ovoid
+ovoidal
+ovonic
+ovotestis
+ovoviviparous
+ovoviviparously
+ovoviviparousness
+ovular
+ovulate
+ovulated
+ovulates
+ovulating
+ovulation
+ovulations
+ovule
+ow
+owerless
+owlet
+oxacillin
+oxalacetate
+oxalacetic
+oxalis
+oxaloacetate
+oxazine
+oxblood
+oxbow
+oxeye
+oxheart
+oxidase
+oxidasic
+oxidic
+oxonian
+oxtail
+oxygenator
+oxygenic
+oxygenicity
+oxygenless
+oxyhemoglobin
+oxyhydrogen
+oxymoron
+oxyphil
+oxyphile
+oxyphilic
+oxysome
+oxysulfide
+oystchers
+oysterman
+oystermen
+oz
+ozagen
+ozagenians
+ozocerite
+ozokerite
+ozonic
+ozonide
+ozoniferous
+ozonosphere
+ozonous
+ozzie
+pacem
+pacemaking
+pacesetter
+pachyderm
+pachydermal
+pachydermatous
+pachydermatously
+pachysandra
+pachytene
+pacifiable
+pacifically
+pacificator
+pacificators
+pacificatory
+pacificist
+pacifistically
+packability
+packable
+packboard
+packhorse
+packinghouse
+packman
+packsack
+packsaddle
+packthread
+packwood
+paddleboard
+padrone
+paella
+paeon
+paestum
+paganini
+paganish
+pageboy
+paginal
+pailful
+painfuller
+painfullest
+paisley
+paix
+paladin
+palaeoanthropic
+palaeontology
+palaeontology's
+palaestra
+palanquin
+palasts
+palatably
+palatial
+palatially
+palatialness
+palatinate
+palaver
+palavered
+palavering
+palazzo
+palazzos
+paleface
+paleoanthropology
+paleoanthropology's
+paleoecologic
+paleoecological
+paleoecologist
+paleoecology
+paleogeographic
+paleogeographical
+paleogeographically
+paleogeography
+paleographer
+paleographic
+paleographical
+paleographically
+paleography
+paleolith
+paleoliths
+paleologist
+paleologists
+paleomagnetics
+paleontologic
+paleontological
+paleontologist
+paleontology
+paleozoological
+paleozoology
+palingenesis
+palingenetic
+palinode
+palish
+palladia
+pallbearer
+pallette
+pallial
+palliasse
+palliator
+pallium
+pallor
+pallor's
+pallors
+palmar
+palmary
+palmate
+palmated
+palmately
+palmation
+palmier
+palmistry
+palmitate
+palmlike
+palmy
+palomino
+palp
+palpability
+palpal
+palpate
+palpated
+palpates
+palpating
+palpation
+palpations
+palpebral
+palpi
+palpitant
+palpitate
+palpitated
+palpitates
+palpitating
+palter
+paltered
+palterer
+paltering
+paludal
+paludism
+palynologic
+palynological
+palynologically
+palynologist
+palynology
+pampa
+pampas
+pamphleteer
+pamphleteers
+panacean
+panache
+panatela
+panchromatic
+pancratium
+pandect
+pandects
+pandied
+pandit
+panegyric
+panegyrical
+panegyrically
+panegyrist
+panetela
+panetella
+panful
+pangenesis
+pangenetic
+pangolin
+panhandle
+panhandled
+panhandler
+panhandles
+panhandling
+panhuman
+panicking
+panicle
+pannier
+panoramically
+panpipe
+panpipes
+pantalets
+pantalettes
+pantaloon
+pantaloons
+pantas
+pantheistic
+pantheistical
+pantheistically
+pantie
+pantile
+pantiled
+pantisocracies
+pantisocracy
+pantisocratic
+pantisocratical
+pantisocratist
+pantograph
+pantographic
+pantomimic
+pantomimist
+pantothenate
+pantothenic
+pantropic
+pantryman
+pantrymen
+pantsuit
+pantywaist
+panza
+panzer
+papacy
+papaw
+paperbound
+paperboy
+paperboys
+paperhanger
+paperhanging
+papermaker
+papermakers
+papermaking
+papiers
+papilla
+papillae
+papillate
+papillated
+papilloma
+papillomatous
+papillon
+papillose
+papillote
+papist
+papistry
+pappose
+para
+parabiosis
+parabiotic
+parabiotically
+parabolically
+parachutic
+parachutist
+paradigmatical
+paradisaic
+paradisaical
+paradisaically
+paradisal
+paradisiac
+paradisiacal
+paradisiacally
+paraffinic
+paragenesis
+paragenetic
+paragenetically
+paraginase
+paragonite
+paragraphic
+paralinguistic
+parallactic
+paralogism
+paralytic
+paramagnetically
+paramagnetism
+paramecium
+paramedic
+parament
+parametrical
+paramnesia
+paramountcy
+paramour
+paranormality
+paranymph
+paraoxon
+paraph
+paraphrasable
+paraphrastic
+paraphrastically
+paraphysis
+paraplegia
+parapodial
+parapodium
+paraquat
+pararosaniline
+parasang
+paraselene
+paraselenic
+parasexual
+parasexuality
+parasitical
+parasitically
+parasiticidal
+parasiticide
+parasitism
+parasympathomimetic
+parasynthesis
+parasynthetic
+paratactic
+paratactical
+paratactically
+parataxis
+parathion
+parathyroid
+parathyroidectomy
+paratyphoid
+paravane
+paraxial
+parbuckle
+parbuckled
+parbuckling
+parcenary
+parcener
+pard
+pardner
+pardners
+paregoric
+parella
+parenchyma
+parenchymal
+parenteral
+parenterally
+parfait
+parian
+paries
+parietal
+parietes
+parioli
+parisina
+parisology
+parka
+parka's
+parkas
+parkinsonism
+parlante
+parle
+parling
+parlous
+parlously
+parmigiana
+parmigiano
+parodic
+parodist
+parodistic
+parol
+paronomasia
+paronomastic
+paronym
+paronymous
+parotid
+parotitis
+parous
+paroxysm
+paroxysmal
+paroxytone
+parquetry
+parrakeet
+parricidal
+parricide
+parrillo
+parring
+parris
+partan
+parterre
+parthenocarpic
+parthenocarpically
+parthenocarpy
+parthenogenesis
+parthenogenetic
+parthenogenetically
+parti
+partible
+participator
+particularism
+particularist
+partisanship
+partite
+partitionist
+partitive
+partitively
+partizan
+parturient
+parturition
+partway
+parure
+parve
+parvenue
+parvis
+parvise
+paschal
+pasha
+passably
+passarine
+passavant
+passbook
+passbook's
+passbooks
+passel
+passementerie
+passerine
+passible
+passim
+passional
+passionless
+passivate
+passivated
+passivates
+passivating
+passivation
+passivations
+passivism
+passivist
+passivists
+passkey
+pastelist
+pastellist
+pastern
+pasternak
+pasterns
+pastil
+pastilles
+pastlle
+pastorale
+pastoralism
+pastoralist
+pastorate
+pastorium
+pastorship
+pastrami
+pasturage
+pastureland
+patagonians
+patchboard
+patchily
+patchouli
+patchouly
+pate
+patella
+patellae
+patellar
+patellas
+patelliform
+patency
+patentability
+patentor
+paterfamilias
+paternalist
+pathbreaking
+pathetical
+pathetically
+pathfinder
+pathfinding
+pathogenetic
+pathogenically
+pathogenicity
+pathognomonic
+pathol
+pathometer
+pathometer's
+pathometers
+pathomorphologic
+pathomorphological
+pathomorphology
+pathophysiologic
+pathophysiological
+pathophysiology
+patible
+patil
+patinae
+patine
+patined
+patining
+patisseries
+patois
+patresfamilias
+patriarchate
+patriciate
+patriciates
+patricidal
+patricide
+patrilineage
+patrilineal
+patriotically
+patristical
+patroller
+patronal
+patronne
+patronymic
+patroon
+patten
+pattie
+patulous
+patulously
+patulousness
+paulownia
+pauperism
+pavanne
+pavese
+pavid
+pawl
+pawnbroker
+pawnbroker's
+pawnbrokers
+pawnbroking
+pawnor
+pawpaw
+pax
+paxam
+paxton
+payee
+paygrade
+paygrades
+payola
+payor
+peaceably
+peacekeeper
+peacekeeping
+peacemake
+peacemaker
+peachier
+peachy
+peacockish
+peafowl
+peahen
+pealike
+pearlescence
+pearlescent
+pearlite
+pearlitic
+pearlstone
+peascod
+peasecod
+peashooter
+peaty
+pebbly
+peccable
+peccadillo
+peccancy
+peccant
+peccantly
+peccavi
+pecky
+pectate
+pectic
+pectin
+pectinaceous
+pectinate
+pectinated
+pectination
+pectines
+pectoralis
+peculator
+pecuniarily
+pedagog
+pedalfer
+pedalferic
+pedantically
+peddlery
+peden
+pederast
+pederastic
+pederasts
+pederasty
+pedestrianism
+pediatrist
+pedicab
+pedicel
+pedicellate
+pedicle
+pedicled
+pediculate
+pediculosis
+pediculous
+pedicure
+pedicurist
+pedimental
+pedipalp
+pedlar
+pedlary
+pedocal
+pedocalic
+pedogenesis
+pedogenetic
+pedogenic
+pedologic
+pedological
+pedologist
+pedology
+pedometer
+pedometer's
+pedometers
+pedophile
+pedophilia
+pedophiliac
+pedophilic
+pee
+peekaboo
+peelable
+peeress
+peeter
+peewee
+peignoir
+pekoe
+pelage
+pelagic
+pellagrin
+pellagrous
+pelletal
+pellitory
+pellucid
+pellucidity
+pellucidly
+pellucidness
+peloria
+peloric
+pelorus
+pelota
+pelotas
+peltate
+peltately
+peltries
+peltry
+pemberton
+pemican
+penates
+pendency
+pendent
+pendentive
+pendently
+pendleton
+pendular
+pendulous
+pendulously
+pendulousness
+penetrability
+penetrable
+penetrableness
+penetrably
+penetralia
+penetrance
+penetrances
+penetrant
+penetrants
+penetrometer
+penetrometer's
+penetrometers
+pengally
+penholder
+penicillate
+penicillately
+penicillation
+penicillium
+penile
+peninsular
+penis
+penises
+penitence
+penitences
+penitency
+penlight
+penmanship
+penna
+pennaceous
+pennae
+pennate
+pennis
+pennyroyal
+penological
+penologist
+penology
+pensile
+pensionable
+pensionary
+pensionless
+pentacle
+pentacles
+pentad
+pentadactyl
+pentadactylism
+pentagram
+pentagram's
+pentagrams
+pentagraph
+pentahedral
+pentahedron
+pentamerous
+pentameter
+pentane
+pentangle
+pentangles
+pentapeptide
+pentaploid
+pentaploidy
+pentaquin
+pentaquine
+pentarchy
+pentathlete
+pentathlon
+pentatonic
+pentavalent
+pentazocine
+pentobarbital
+pentobarbitone
+pentode
+pentodes
+pentomic
+pentosan
+penuche
+penult
+penultima
+penumbra
+penumbral
+peon
+peonage
+peones
+peoplehood
+peopleless
+pepperminty
+peppertree
+pepsico
+pepsin
+pepsinogen
+peptic
+peptone
+peradventure
+perambulate
+perambulated
+perambulates
+perambulating
+perambulation
+perambulations
+perambulator
+perambulatory
+percale
+percaline
+perceptibility
+perceptional
+perceptivity
+perchlorate
+percipience
+percipient
+percoidean
+percptibly
+percuss
+percussionist
+perdurability
+perdurable
+perdurably
+pere
+peregrinate
+peregrinated
+peregrinates
+peregrinating
+peregrination
+peregrinations
+peregrine
+peremptorily
+perennate
+perennated
+perennates
+perennating
+perennation
+perennations
+perfecta
+perfectivity
+perfecto
+perfervid
+perfoliate
+perfoliation
+perforator
+performable
+performative
+performatory
+perfuse
+perfused
+perfusing
+perfusive
+pergola
+pericardial
+pericarditis
+pericardium
+pericarp
+perichondral
+perichondrial
+perichondrium
+pericranial
+pericranium
+pericycle
+pericyclic
+pericynthion
+periderm
+peridermal
+peridermic
+peridia
+peridium
+peridot
+peridotic
+peridotite
+peridotitic
+perigean
+perigee
+perigee's
+perigynous
+perigyny
+perihelial
+perikaryal
+perikaryon
+perilune
+perilymph
+perimorph
+perimysium
+perinatal
+perineum
+periodontics
+periodontist
+perioneum
+periotic
+peripatecically
+peripatetically
+peripateticism
+peripatus
+peripety
+peripherad
+periphrasis
+periphrastically
+periphytic
+periphyton
+periplast
+periscopic
+perishability
+peritectic
+peritonitis
+peritrichous
+peritrichously
+perjurious
+perjuriously
+perkily
+perlite
+perlitic
+perlocutionary
+perm
+permafrost
+permeability
+permeably
+permeance
+permease
+permissable
+permitter
+permittivity
+permutational
+peroneal
+peroral
+perorally
+perorate
+peroration
+perorational
+peroxidase
+peroxidic
+peroxisomal
+peroxisome
+perpend
+perpendicularity
+perpetuator
+perseverant
+perseveration
+perseverations
+persistency
+persnickety
+personalism
+personalist
+personalistic
+personate
+personated
+personates
+personating
+personation
+personative
+personator
+personhood
+perspicacity
+perspiratory
+persuasible
+pertinacity
+pertinency
+perturbable
+perturbational
+perturbative
+perversity
+pervious
+perviousness
+peso
+pesos
+pessary
+pessimal
+pessimistically
+pessimum
+peste
+pestiferous
+pestiferously
+pestiferousness
+petallike
+petaloid
+petalous
+petard
+petasos
+petasus
+petiolate
+petiolated
+petiole
+petioled
+petiolule
+petit
+petitionary
+petrarchan
+petrel
+petrifaction
+petrochemistry
+petrogenesis
+petrogenetic
+petrographer
+petrographic
+petrographical
+petrographically
+petrography
+petrolatum
+petrologic
+petrological
+petrologically
+petrologist
+petronel
+petrosal
+petrous
+pettibone
+pettifog
+pettifogger
+pettifoggery
+pettily
+petulancy
+pewaukee
+pewee
+ph
+phaeton
+phage
+phagocytosis
+phalanges
+phalanstery
+phalarope
+phalli
+phallic
+phallically
+phallicism
+phallus
+phalluses
+phanerogam
+phanerogamic
+phanerogamous
+phantasm
+phantasma
+phantasmagoria
+phantasmagoric
+phantasmal
+phantasmic
+phantomlike
+pharaoh
+pharaonic
+pharisaic
+pharisaical
+pharisaically
+pharisaicalness
+pharisaism
+pharisee
+pharmacodynamic
+pharmacodynamically
+pharmacodynamics
+pharmacogenetic
+pharmacogenetics
+pharmacognostic
+pharmacognostical
+pharmacognosy
+pharmacokinetic
+pharmacokinetics
+pharmacologic
+pharmacologist
+pharmacopoeia
+pharnges
+pharos
+pharyngitis
+phasic
+phasmid
+phd
+phenetics
+phenetidine
+phenetole
+phenobarbital
+phenobarbitone
+phenocain
+phenocopy
+phenocryst
+phenolate
+phenological
+phenologically
+phenology
+phenomenalism
+phenomenalist
+phenomenalistic
+phenomenalistically
+phenomenologist
+phenothiazine
+phenotypic
+phenotypical
+phenotypically
+phenoxide
+phentolamine
+phenylalanine
+phenylene
+phenylephrine
+phenylic
+pheromone
+pheromone's
+pheromones
+phial
+philanthropical
+philanthropically
+philatelic
+philatelically
+philatelist
+philately
+philco
+philippe
+philippians
+philogyny
+philol
+philologist
+philoprogenitive
+philoprogenitiveness
+philter
+philtre
+phlebitis
+phlebotomy
+phlegmatic
+phlegmatically
+phlegmy
+phloem
+phlogistic
+phlogiston
+phobia
+phon
+phonate
+phonated
+phonates
+phonating
+phonation
+phonematic
+phonemically
+phonetical
+phonetician
+phoney
+phoneys
+phonically
+phonily
+phonocardiogram
+phonocardiogram's
+phonocardiograms
+phonocardiograph
+phonocardiographic
+phonocardiography
+phonogram
+phonogram's
+phonogramic
+phonogramically
+phonogrammic
+phonogrammically
+phonograms
+phonographic
+phonographically
+phonography
+phonolite
+phonolitic
+phonologial
+phonologist
+phonon
+phonons
+phonoreception
+phonoreceptor
+phonorecord
+phonos
+phosgene
+phosphatic
+phosphatide
+phosphatidic
+phosphatidyl
+phosphene
+phosphite
+phosphocreatine
+phospholipid
+phospholipids
+phosphore
+phosphorescence
+phosphoreted
+phosphoretted
+phosphorism
+phosphorite
+phosphoritic
+phosphorolysis
+phosphorolytic
+phosphorous
+phosphoryl
+phosphorylase
+phosphorylate
+phosphorylation
+phosphorylative
+photic
+photically
+photoautotrophic
+photoautotrophically
+photobiologic
+photobiological
+photobiologist
+photobiology
+photobiotic
+photocathode
+photocathodes
+photocell
+photochemist
+photochemistry
+photochromic
+photochromism
+photocoagulation
+photocompose
+photocomposer
+photocomposition
+photoconductive
+photoconductivity
+photocurrent
+photodecomposition
+photodetector
+photodiode
+photodiodes
+photodisintegrate
+photodisintegration
+photodissociation
+photodissociative
+photodrama
+photoduplicate
+photoduplication
+photodynamic
+photodynamically
+photodynamics
+photoelectric
+photoelectrically
+photoelectron
+photoemission
+photoemissive
+photoengrave
+photoengraver
+photoengraving
+photoflash
+photoflood
+photofluorogram
+photofluorogram's
+photofluorograms
+photofluorographic
+photofluorography
+photogene
+photogenically
+photogeologic
+photogeological
+photogeology
+photogram
+photogram's
+photogrammetric
+photogrammetrist
+photogrammetry
+photograms
+photogravure
+photoheliograph
+photoinduced
+photoinduction
+photoinductive
+photojournalism
+photojournalist
+photojournalist's
+photojournalistic
+photojournalists
+photokinesis
+photokinetic
+photolithograph
+photolithographer
+photolithographic
+photolithographically
+photolithography
+photolytically
+photomap
+photomechanical
+photomechanically
+photometer
+photometer's
+photometers
+photometrically
+photomicrgraphical
+photomicrogram
+photomicrogram's
+photomicrograms
+photomicrographic
+photomicroscope
+photomicroscopic
+photomontage
+photomorphogenesis
+photomorphogenic
+photomultiplier
+photomural
+photonegative
+photonic
+photonuclear
+photooxidation
+photooxidative
+photoperiod
+photoperiodic
+photoperiodically
+photoperiodism
+photophilic
+photophilous
+photophily
+photophobia
+photophobic
+photophore
+photopia
+photoplay
+photopositive
+photoprint
+photoproduct
+photoproduction
+photoreaction
+photoreception
+photoreceptive
+photoreceptor
+photoreconnaissance
+photorecord
+photorecorder
+photoreduction
+photoresistance
+photorespiration
+photosensitivity
+photoset
+photosetter
+photosphere
+photospheric
+photostat
+photostatic
+photosynthesis
+photosynthetic
+photosynthetically
+phototactic
+phototactically
+phototaxis
+phototelegraphy
+phototropic
+phototropically
+phototropism
+phototube
+phototypesetter
+phototypesetting
+phototypographic
+phototypography
+photovoltaic
+phrasally
+phrasemaker
+phrasemonger
+phrasemongering
+phraseogram
+phraseogram's
+phraseograms
+phraseograph
+phraseological
+phraseologically
+phraseologist
+phratries
+phratry
+phreatic
+phreatophyte
+phreatophytic
+phrenetic
+phrenic
+phrenological
+phrenologically
+phrenologist
+phrenology
+phrensy
+phthalate
+phycologist
+phycology
+phycomycete
+phycomycetes
+phylactery
+phylae
+phylar
+phyle
+phylesis
+phyletic
+phyllary
+phylloclade
+phyllode
+phyllodium
+phylloid
+phyllome
+phyllomic
+phyllophagous
+phyllopod
+phylogenetic
+physiatrics
+physiatrist
+physicalism
+physicalist
+physicalistic
+physicality
+physicked
+physicking
+physicochemically
+physiocratic
+physiognomic
+physiognomical
+physiognomically
+physiographer
+physiographic
+physiographical
+physiography
+physiol
+physiopathologic
+physiopathological
+physiopathology
+physostigmine
+phytane
+phytoalexin
+phytochemical
+phytochemically
+phytochemist
+phytochemistry
+phytochrome
+phytoflagellate
+phytogenic
+phytogeographic
+phytogeographical
+phytogeographically
+phytogeography
+phytography
+phytological
+phytologically
+phytology
+phyton
+phytonic
+phytopathogen
+phytopathogenic
+phytopathologic
+phytopathological
+phytopathology
+phytophagous
+phytophagy
+phytoplanktonic
+phytosociological
+phytosociologically
+phytosociologist
+phytosociology
+phytosterol
+phytotoxic
+phytotoxicity
+pial
+pianistically
+pianoforte
+pianoforte's
+pianofortes
+pias
+piassava
+piazze
+pibroch
+pic
+picador
+picadores
+picaninny
+picara
+picaresque
+picaro
+picaroon
+picayunish
+piccalilli
+piccoloist
+pice
+piceous
+pickaback
+pickaninny
+pickaroon
+pickax
+pickeer
+picketboat
+picklock
+pickpocket
+pickproof
+pickthank
+picnicky
+picnometer
+picnometer's
+picnometers
+picoline
+picon
+picosecond
+picoseconds
+pictograph
+pictographic
+pictography
+pictorialism
+picturegoer
+piebald
+piecework
+pieceworker
+piecrust
+piefort
+pieing
+pieta
+pietism
+pietist
+pietistic
+pietistical
+pietistically
+pietro
+piezoelectrically
+piezometer
+piezometer's
+piezometers
+piezometric
+piezometry
+piffle
+piffled
+piffles
+piffling
+pigboat
+pigeonberry
+pigeonfoot
+pigeonhearted
+pigeonwing
+pigged
+piggeries
+piggery
+piggyback
+piggybacked
+piggybacking
+pigheaded
+pigheadedness
+piglet
+piglets
+pigmentary
+pigmy
+pigstick
+pigsticker
+pigsticking
+pikeman
+pikestaff
+pilaf
+pilaff
+pilaster
+pilchard
+pilea
+pileate
+pileated
+pilei
+pileum
+pileup
+pileus
+pilewort
+pilgarlic
+pillbox
+pillboxes
+pillion
+pillions
+pillowcase
+pillowcases
+piloerection
+pilotage
+pilotages
+pilothouse
+pilotless
+pilsener
+pilsner
+pilular
+pilule
+pilus
+pinar
+pinaster
+pinata
+pinbone
+pincer
+pincer's
+pincerlike
+pincers
+pinchbeck
+pinchcock
+pindling
+pineal
+pinecone
+pinedrops
+pinene
+pinery
+pinesap
+pineta
+pinetum
+pinewood
+piney
+pinfold
+pingo
+pinkeye
+pinko
+pinkoes
+pinkos
+pinkroot
+pinky
+pinna
+pinnace
+pinnae
+pinnal
+pinnas
+pinnate
+pinnately
+pinner
+pinniped
+pinniped's
+pinnipeds
+pinnula
+pinnular
+pinnulate
+pinnulated
+pinnule
+pinprick
+pinpricks
+pinscher
+pinsetter
+pinspotter
+pinstripe
+pinta
+pintle
+pintoes
+pinup
+pinxter
+pionic
+pipage
+pipal
+pipeage
+pipefish
+pipeful
+pipeless
+pipelike
+piperazine
+piperidine
+piperine
+piperonal
+pipestone
+pipgras
+pipit
+pipkin
+pippin
+pipping
+pipsissewa
+piquancy
+piquet
+piranha
+piraro
+piratical
+piratically
+pirogue
+piroplasm
+piroplasma
+piroplasmata
+piscicultural
+pisciculture
+pisciculturist
+piscina
+piscine
+piscivorous
+pisiform
+pismire
+pisolite
+pisolitic
+pissoir
+pistillate
+pistoleer
+pita
+pitchman
+pitchout
+pitchy
+pithead
+pithily
+pitiably
+pivotable
+pivotman
+pixie
+pixieish
+pixilated
+pixilates
+pixilation
+pizazz
+pizz
+pizzazz
+pizzeria
+placability
+placable
+placably
+placatory
+placebo
+placeholder
+placeman
+placemat
+placemat's
+placemats
+placency
+placent
+placentation
+placentations
+placentia
+placidity
+placket
+plagal
+plage
+plagiaristic
+plagiary
+plagioclase
+plaguesome
+plaguey
+plaguily
+plaguy
+plaice
+plainclothesman
+plainsman
+plainspoken
+plainspokenness
+plaint
+plaintext
+plaintful
+plainview
+plaister
+planarian
+planation
+planchet
+planetoidal
+planetological
+planetologist
+planetology
+plangency
+plangent
+plangently
+planimeter
+planimeter's
+planimeters
+planimetric
+planish
+planisher
+planisphere
+planispheric
+planktonic
+planless
+planlessly
+planlessness
+planograph
+planographic
+planography
+planosol
+plantable
+plantar
+plantlike
+planula
+planular
+planuloid
+plasmagel
+plasmagene
+plasmagenic
+plasmalemma
+plasmapheresis
+plasmasol
+plasmatic
+plasmid
+plasmid's
+plasmids
+plasmin
+plasminogen
+plasmodesm
+plasmodium
+plasmogamy
+plasmolysis
+plasmolytic
+plasmolytically
+plasmon
+plasodesma
+plasterboard
+plasterwork
+plastery
+plastid
+plastidial
+plastisol
+plastisols
+plastogene
+plastral
+plastron
+plat
+plateaux
+plateful
+platelike
+platemaker
+platemaking
+plateresque
+platies
+platina
+platinic
+platinous
+platipi
+platipi's
+platitudinal
+platitudinarian
+platonically
+platterful
+platting
+platypus
+platypus's
+platypuses
+plauded
+plauding
+plaudit
+plause
+plausive
+playa
+playability
+playact
+playbill
+playbills
+playbook
+playgirl
+playgoer
+playgoers
+playland
+playmaker
+playpen
+playpen's
+playpens
+playsuit
+pleadable
+pleasantry
+pleasurability
+pleasurably
+pleasureless
+pleatless
+plebe
+plebeianism
+plebes
+plebian
+plebiscitary
+plebs
+plectrum
+plectrum's
+plectrums
+pledgee
+pledget
+pledgor
+plenipotent
+plenish
+plenitudinous
+plentitude
+plethoric
+pleurae
+pleuritic
+pleurodont
+plex
+plexiform
+plexiglass
+plexus
+pliability
+pliably
+plimsoll
+plinth
+plodder
+plosion
+plotless
+plotlessness
+plottage
+plottier
+plotty
+plowmen
+plowmen's
+pluckily
+plugboard
+plugboard's
+plugboards
+plugger
+plumbaginous
+plumbago
+plumbate
+plumbeous
+plumbic
+plumbiferous
+plumbism
+plumbous
+plumelet
+plumier
+plumlike
+plummier
+plummy
+plumose
+plumosely
+plumpish
+plumulate
+plumule
+plumulose
+plumy
+plunderable
+plunderage
+plunderous
+pluperfect
+pluralistically
+pluriaxial
+pluripotent
+plussage
+plusses
+plutocracy
+plutocrat
+plutocratic
+plutocratically
+pluton
+plutonian
+plutonic
+pluvial
+plyscore
+pneumatically
+pneumaticity
+pneumatology
+pneumatolysis
+pneumatolytic
+pneumatometer
+pneumatometer's
+pneumatometers
+pneumatophore
+pneumatophoric
+pneumectomy
+pneumococcus
+pneumonic
+pocahontas
+pockmark
+pocky
+poco
+podagra
+podagral
+podded
+podding
+podgier
+podgy
+podiatric
+podiatrist
+podiatry
+podite
+poditic
+poetaster
+poetess
+poeticism
+pogromist
+poi
+poikilotherm
+poikilothermic
+poikilothermism
+poilu
+poinciana
+pointe
+pointillism
+pointillist
+pointilliste
+pointillistic
+pointwise
+poirot
+poitrine
+pokey
+pokeys
+pokier
+pokily
+pokiness
+poky
+polarimetric
+polariscopic
+polariton
+polarographic
+polarographically
+polaron
+polder
+poleax
+poleless
+polemicist
+polemist
+polemonium
+polestar
+poleward
+policewoman
+policewoman's
+policewomen
+policyholder
+policyholders
+poliomyelitic
+poliomyelitis
+poliovirus
+politesse
+politick
+politicker
+polity
+polkadot
+polkadots
+pollee
+pollenate
+pollenated
+pollenates
+pollenating
+pollenation
+pollenosis
+pollex
+pollical
+pollices
+pollinate
+pollinated
+pollinates
+pollinating
+pollination
+pollinator
+pollinic
+polliniferous
+pollinium
+polloi
+pollster
+pollywog
+pollywog's
+pollywogs
+poloist
+poltergeist
+poltroon
+poltroonery
+poltroonish
+poltroonishly
+polyandrous
+polyandry
+polyanka
+polyantha
+polyanthus
+polybasite
+polycarbonate
+polycarpellary
+polycarpic
+polycarpous
+polycarpy
+polycentrism
+polychaete
+polychaetous
+polychasium
+polychotomous
+polychotomy
+polychromatic
+polychrome
+polychromy
+polycistronic
+polyclinic
+polycondensation
+polycot
+polycotyl
+polycotyledon
+polycotyledonous
+polycrystal
+polycyclic
+polycythemia
+polycythemic
+polydactyl
+polydactylous
+polydactyly
+polydipsi
+polygala
+polygamic
+polygamical
+polygamically
+polygamist
+polygene
+polygenesis
+polygenesist
+polygenetic
+polygenetically
+polygenic
+polyglandular
+polyglot
+polyglotism
+polyglottism
+polygonum
+polygram
+polygram's
+polygrams
+polygraph
+polygraphic
+polygynoecial
+polygyny
+polyhedrosis
+polyhistor
+polyhistoric
+polyhydroxy
+polymath
+polymathic
+polymathy
+polymerically
+polymerism
+polymorphically
+polymorphism
+polymorphonuclear
+polymorphous
+polymorphously
+polymyxin
+polyneuritis
+polynuclear
+polynucleotide
+polynya
+polyonymous
+polyp
+polypary
+polypeptide
+polypeptidic
+polypetalous
+polyphagia
+polyphagous
+polyphagy
+polyphase
+polyphasic
+polyphenol
+polyphenolic
+polyphone
+polyphonically
+polyphonous
+polyphonously
+polyphyletic
+polyphyletically
+polyphyleticism
+polypide
+polyploid
+polyploidy
+polypnea
+polypneic
+polypody
+polypoid
+polypous
+polyptych
+polyrhythm
+polyrhythmic
+polyrhythmically
+polyribonucleotide
+polyribosomal
+polyribosome
+polysaccharide
+polysaccharides
+polysaprobic
+polysemous
+polysemy
+polysepalous
+polysilicon
+polysiloxanes
+polysome
+polysomic
+polysorbate
+polystichous
+polysulfide
+polysyllabic
+polysyllabically
+polysyllable
+polysynaptic
+polysynaptically
+polysyndeton
+polytene
+polyteny
+polytheism
+polytheist
+polytheistic
+polytheistical
+polythene
+polytocous
+polytonality
+polytope
+polytrophic
+polytype
+polytypic
+polytypism
+polytypy
+polyurethane
+polyuria
+polyvalence
+polyvalent
+polyvinyl
+polywater
+polyzoan
+polyzoarium
+polyzoic
+pomace
+pomaceous
+pomade
+pomaded
+pomades
+pomander
+pomatum
+pome
+pomelo
+pomerania
+pomeranian
+pomiferous
+pommel
+pomological
+pomologically
+pomologist
+pomology
+pompey
+pompon
+pon
+ponderable
+ponderosa
+ponderosa's
+ponderosas
+pong
+pont
+pontific
+pontificaly
+pontificator
+pontifices
+pontine
+pontius
+ponton
+pontonier
+pontoon
+ponytail
+pood
+poolroom
+poop
+poorhouse
+poorish
+popery
+popgun
+popinjay
+popish
+popishly
+popliteal
+popover
+poppa
+poppet
+popple
+poppycock
+poppyhead
+populaire
+populaires
+populism
+populist
+populistic
+porcelainlike
+porcelaneous
+porcellaneous
+poriferal
+poriferan
+porkies
+porky
+pornographically
+porphyria
+porphyrin
+porphyritic
+porphyroid
+porphyropsin
+porphyry
+porrect
+porringer
+portance
+portative
+portcullis
+porterage
+porthole
+portico
+portiere
+portionless
+portraitist
+portress
+portulaca
+posable
+posada
+posey
+posies
+positivistic
+positivity
+positronium
+posseman
+possemen
+possessory
+posset
+possets
+postaxial
+postaxially
+postbag
+postbags
+postbellum
+postbox
+postboxes
+postboy
+postboys
+postbreeding
+postclassic
+postclassical
+postcolonial
+postdental
+postdiluvian
+postdoctorate
+postembryonal
+postembryonic
+postemergence
+posteriad
+posteriority
+postern
+postexilic
+postface
+postform
+postglacial
+posthaste
+posthole
+posthypnotic
+postiche
+postilion
+postillion
+postmastership
+postmenopausal
+postmillenarian
+postmillenarianism
+postmillennial
+postmillennialism
+postmillennialist
+postmistress
+postmodern
+postmultiply
+postnasal
+postnatal
+postnatally
+postnuptial
+postnuptially
+postorbital
+postpaid
+postpituitary
+postponable
+postposition
+postpositional
+postpositionally
+postpositive
+postpositively
+postprandial
+postprandially
+postprocess
+postprocessor
+postprocessors
+postschool
+postsynaptic
+postsynaptically
+posttension
+posttraumatic
+postulancy
+postulant
+postulational
+postulator
+postural
+posy
+potability
+potassic
+potation
+potboy
+poteen
+potemkin
+potence
+potentiate
+potentiation
+potentiator
+potentiometric
+potful
+pothead
+potheen
+pother
+pothered
+pothering
+pothook
+pothouse
+pothunter
+pothunting
+potpie
+potsdam
+potsherd
+potshot
+potshotting
+potstone
+pottage
+pottawatomie
+potteringly
+pottier
+potties
+pottle
+potto
+pottos
+potty
+pouchier
+pouchy
+pouf
+pouff
+pouffed
+poulard
+poularde
+poult
+poulterer
+poultryman
+poundage
+poundal
+pourable
+pourboire
+pourparler
+pourpoint
+poussette
+poussetted
+poussetting
+poussin
+poussins
+pouty
+powderman
+powdermen
+powerboat
+powerhouse
+powerhouse's
+powerhouses
+powwow
+poxvirus
+poza
+ppm
+practicum
+praecox
+praedial
+pragmatical
+pragmaticism
+pragmaticist
+pragmatistic
+praiseworthily
+praline
+prandial
+prankish
+prankishly
+prankishness
+prankster
+pranksters
+prase
+pratfall
+pratincole
+pratique
+prawn
+prawner
+prawns
+praxeological
+praxeology
+pre
+preachier
+preachifies
+preachify
+preachily
+preachiness
+preachment
+preachy
+preadapt
+preadaptation
+preadapted
+preadaptive
+preadolescence
+preadolescent
+preamplifier
+preamplifiers
+prearrange
+prearrangement
+preatomic
+preaxial
+preaxially
+prebend
+prebendal
+prebendary
+prebind
+prebiologic
+prebiological
+prebiotic
+precancel
+precancerous
+precast
+precautious
+precedency
+preceeded
+preceeding
+precensor
+precentor
+precentorial
+precentorship
+preceptor
+preceptorial
+preceptorship
+preceptory
+preceptress
+precessional
+preciosity
+precipitance
+precipitancy
+precipitant
+precipitantly
+precipitantness
+precipitator
+precipitin
+precipitinogen
+precipitinogenic
+precisian
+precisianism
+precisionist
+preclinical
+preclusion
+preclusive
+preclusively
+precoat
+precoating
+precocial
+precognition
+precognitive
+precombustion
+precompact
+precompose
+precomputation
+precomputed
+preconceptual
+preconcert
+preconcerted
+preconcertedly
+preconcertedness
+preconsonantal
+precook
+precritical
+precursory
+predaceous
+predaceousness
+predacious
+predacity
+predatorily
+predawn
+predecease
+predefense
+predefense's
+predefenses
+predesignate
+predesignation
+predestinarian
+predestinarianism
+predestinate
+predestination
+predestinator
+predestine
+predetermination
+predicable
+predicatable
+predicatory
+predigest
+predigestion
+predominancy
+preemergence
+preemergent
+preemie
+preemphasization
+preemphasization's
+preemphasize
+preemphasized
+preemphasizer
+preemphasizers
+preemphasizes
+preemphasizing
+preexchange
+preexchanged
+preexist
+preexistence
+prefatorial
+prefatorially
+prefatorily
+prefectural
+preferability
+preferrer
+prefigurative
+prefiguratively
+prefigurativeness
+prefigure
+prefigured
+prefigurement
+prefigures
+prefiguring
+prefixal
+prefixally
+prefocus
+prefocused
+prefocuses
+prefocusing
+preform
+preformation
+preformed
+preforms
+prefrontal
+pregnability
+pregnable
+pregnenolone
+preheat
+preheated
+preheater
+prehensile
+prehensility
+prehension
+prehistorian
+prehistorical
+prehistorically
+prehistory
+prehominid
+preignition
+preinduction
+prejudicious
+prejudiciously
+prelature
+prelection
+prelibation
+prelicense
+prelicensed
+prelicenser
+prelicenses
+prelicensing
+preliminarily
+prelusion
+prelusive
+prelusively
+prelusory
+premalignant
+preman
+premed
+premedial
+premedian
+premedical
+premedieval
+premedieval's
+premedievalism
+premedievalism's
+premedievalisms
+premedievals
+premeditator
+premeiotic
+premenstrual
+premenstrually
+premership
+premie
+premillenarian
+premillenarianism
+premillennial
+premillennialism
+premillennialist
+premillennially
+premiss
+premolar
+premonish
+premonitorily
+premorse
+premune
+premunition
+prename
+prenatal
+prenatally
+prenominate
+prenomination
+prenotion
+preoccupancy
+preoperative
+preoperatively
+preorbital
+preordain
+preordained
+preordaining
+preordains
+preordination
+preoviposition
+preovulatory
+prepackage
+preparator
+preparatorily
+prepausal
+prepay
+prepense
+prepensely
+preplan
+preponderancy
+prepositive
+prepositively
+prepossess
+prepossessing
+prepossessingly
+prepossessingness
+prepossession
+prepotency
+prepotent
+prepotently
+preppie
+preprandial
+preprocess
+preprocessed
+preprocesses
+preprofessional
+prepuberal
+prepuberally
+prepubertal
+prepubertally
+prepuberty
+prepubescence
+prepuce
+prepunch
+prepupal
+preputial
+prerealization
+prerealization's
+prerealizations
+prerealize
+prerealizes
+prerecord
+presageful
+presanctified
+presbyope
+presbyopia
+presbyopic
+presbyter
+presbyterate
+presbyterial
+presbyterially
+presbytery
+prescient
+prescientific
+presciently
+prescind
+prescore
+prese
+preselection
+presell
+presentability
+presentably
+presentative
+presentee
+presentient
+presentiment
+presentimental
+presentment
+preservable
+preservationist
+presettable
+presetting
+preshrunk
+presidentship
+presidial
+presidiary
+presidio
+presidium
+presignify
+presley
+presoak
+pressboard
+pressmark
+pressor
+pressroom
+pressrun
+presswork
+prest
+prester
+presternum
+prestigeful
+prestissimo
+prestress
+prestressed
+presumptive
+presumptively
+presynaptic
+presynaptically
+pretax
+preteen
+pretensionless
+preterit
+preterite
+preterition
+preteritive
+preterminal
+pretermission
+pretermit
+preternatural
+preternaturally
+preternaturalness
+pretreat
+pretreatment
+prettification
+prettify
+prettyish
+pretubercular
+pretuberculous
+pretzel
+prevaricate
+prevaricated
+prevaricates
+prevaricating
+prevarication
+prevaricator
+prevenient
+preveniently
+preventability
+preventative
+preventible
+preverbal
+previsional
+previsionary
+prevocalic
+prevocational
+prevue
+prexy
+priapic
+pricey
+pricier
+pricket
+prickier
+pricky
+pricy
+prideful
+pridefully
+pridefulness
+priesthood
+prieur
+priggery
+priggism
+prima
+primality
+primateship
+primatial
+primatological
+primatologist
+primatology
+primero
+primipara
+primiparity
+primiparous
+primitivist
+primitivistic
+primitivity
+primmer
+primmest
+primming
+primo
+primogenitor
+primogeniture
+primos
+primrdium
+primula
+primus
+princedom
+princekin
+princelet
+princeling
+princeship
+princesse
+principalship
+principial
+principium
+princox
+prink
+prinker
+printability
+printemps
+printery
+printless
+priorate
+prioress
+prioresses
+priorship
+pripet
+prise
+prisere
+prismatically
+prismatoid
+prismatoidal
+prismoid
+prismoidal
+prissily
+pristane
+prithee
+privatdocent
+privatdozent
+privatism
+privet
+privily
+privity
+prix
+prizefight
+prizefighter
+prizefighting
+prizewinner
+proa
+proach
+proaching
+proactive
+probabilism
+proband
+probang
+probational
+probationally
+probationary
+probatory
+probenecid
+probit
+probosces
+proboscidean
+proboscidian
+proboscis
+procambial
+procambium
+procaryote
+procaryotic
+procathedral
+procephalic
+procercoid
+processability
+processable
+processibility
+processible
+proclimax
+proclitic
+proconsul
+proconsular
+proconsulate
+proconsulship
+procreant
+procreator
+procryptic
+proctodaeum
+proctologic
+proctological
+proctologist
+proctology
+proctorial
+proctorship
+procumbent
+procurable
+procurance
+procuration
+procurator
+procuratorial
+procuress
+prodder
+prodigality
+prodromal
+prodromata
+prodrome
+prodromes
+prodromic
+productional
+proemial
+proenzyme
+proestrus
+profanation
+profanatory
+professeur
+professorate
+professoriat
+professoriate
+profili
+profitless
+profitted
+profitting
+profligacy
+profluent
+prog
+progamete
+progestational
+progesterone
+progestin
+progestogen
+progging
+proglottid
+proglottidean
+proglottis
+prognathic
+prognathism
+prognathous
+prognostic
+prograde
+programmatic
+programmatically
+progressional
+progressionist
+progressist
+progressivist
+progressivistic
+prohibitionist
+projectable
+projectional
+projet
+projets
+prokaryote
+prokaryotic
+prolactin
+prolamin
+prolamine
+prolan
+prolapse
+prolapsed
+prolapsing
+prole
+proleptic
+proletarian
+proliferous
+proliferously
+prolificacy
+prolificity
+proline
+prolocutor
+prolotherapy
+prolusion
+prolusions
+prolusory
+prom
+promazine
+promisee
+promisor
+promissory
+promotability
+promotable
+promptbook
+promptbooks
+promulgator
+pronatalism
+pronatalist
+pronate
+pronated
+pronating
+pronation
+pronator
+pronephric
+pronephros
+pronghorn
+pronghorns
+pronominal
+pronominally
+pronuclear
+pronucleus
+pronunciamento
+pronunciational
+prooflike
+proofread
+proofroom
+propaedeutic
+propagable
+propagandism
+propagandistically
+propagational
+propagator
+propagule
+proparoxytone
+propellent
+propellor
+propend
+propense
+properdin
+propertyless
+prophage
+prophase
+prophasic
+prophetess
+prophetical
+prophylactic
+prophylactically
+prophylaxis
+propine
+propined
+propining
+propionibacteria
+propitiable
+propitiator
+propitiatory
+proplastid
+propman
+propolis
+propone
+proponed
+proponing
+proportionable
+proportionably
+propos
+propositus
+propranolol
+proprietress
+proprioceptor
+proptosis
+propulsive
+propyl
+prorogate
+prorogation
+prorogue
+prorogued
+proroguing
+prosaically
+prosaism
+prosaist
+prosateur
+prosciutto
+proscriptive
+proscriptively
+prosector
+prosectorial
+prosecutable
+proselyte
+proselytism
+proseminar
+prosencephalic
+prosencephalon
+prosenchyma
+prosenchymas
+prosenchymata
+prosenchymatous
+prosier
+prosily
+prosiness
+prosit
+proso
+prosobranch
+prosodical
+prosodically
+prosodist
+prosoma
+prosomal
+prosopographical
+prosopography
+prosopopoeia
+prossed
+prosser
+prost
+prostaglandin
+prostatectomy
+prostatic
+prostatism
+prostatitis
+prosthesis
+prosthetically
+prosthodontics
+prosthodontist
+prostitutor
+prostomial
+prostomium
+prosy
+protamine
+protasis
+protatic
+protea
+protectant
+protectionism
+protectoral
+protectorship
+protectory
+protectress
+proteid
+proteide
+proteinaceous
+proteinase
+proteinate
+proteinuria
+proteinuric
+protend
+protensive
+protensively
+proteoclastic
+proteose
+proteranthous
+proteranthy
+protestor
+proteus
+prothalamion
+prothalamium
+prothallial
+prothallium
+prothallus
+prothesis
+prothetelic
+prothetely
+prothetic
+prothonotarial
+prothonotary
+prothoracic
+prothorax
+prothrombin
+protist
+protistan
+protitch
+protium
+proto
+protoderm
+protodermal
+protogalaxy
+protogeometric
+protohistorian
+protohistoric
+protohistory
+protohuman
+protolanguage
+protolithic
+protomartyr
+protonate
+protonated
+protonation
+protonema
+protonemal
+protonematal
+protonic
+protonotary
+protonymph
+protonymphal
+protopathic
+protophloem
+protophyta
+protoplanet
+protoplast
+protoplastic
+protoporphyrin
+protostar
+protostele
+protostelic
+prototroph
+prototrophic
+prototrophy
+prototypal
+protoxylem
+protozoal
+protozoic
+protozoological
+protozoologist
+protozoology
+protozoon
+protractile
+protraction
+protractor
+protreptic
+protrusible
+protuberatly
+proudful
+proudhearted
+provascular
+provement
+provender
+provenience
+provincialist
+provinciality
+proviral
+provirus
+provisionary
+provisons
+provisory
+provitamin
+provolone
+proxemic
+proxemics
+proximo
+proxmire
+prude
+prude's
+prudery
+prudes
+prudish
+prudishly
+prudishness
+pruinose
+prurience
+pruriency
+pruriginous
+prurigo
+pruritic
+pruritus
+prussiate
+prussic
+prutot
+pryer
+psalmbook
+psalmody
+psalter
+psalterium
+psaltery
+psaltry
+psephological
+psephologist
+psephology
+pseud
+pseudepigraph
+pseudepigraphon
+pseudepigraphy
+pseudoallele
+pseudoallelic
+pseudoallelism
+pseudoclassic
+pseudoclassicism
+pseudoenergy
+pseudomedieval
+pseudomedieval's
+pseudomedievals
+pseudonymity
+pseudonymous
+pseudonymously
+pseudonymousness
+pseudopotential
+pseudoscience
+pseudoscientific
+pseudoscientist
+pseudoscorpion
+pseudosophisticated
+pseudosophistication
+pseudotuberculosis
+psychedelia
+psychedelically
+psychiatrically
+psychoanalytical
+psychoanalytically
+psychobiographical
+psychobiography
+psychobiologic
+psychobiological
+psychobiologist
+psychochemical
+psychodrama
+psychodramatic
+psychodynamic
+psychodynamically
+psychodynamics
+psychogenesis
+psychogenetic
+psychogenic
+psychogenically
+psychognosis
+psychognosy
+psychograph
+psychokinesis
+psychokinetic
+psycholinguist
+psychologic
+psychologism
+psychometrically
+psychomotor
+psychoneurosis
+psychoneurotic
+psychopathically
+psychopathologic
+psychopathological
+psychopathologically
+psychopathologist
+psychopathology
+psychopathy
+psychopharmaceutical
+psychopharmacologic
+psychopharmacological
+psychopharmacologist
+psychopharmacology
+psychophysicist
+psychophysiologic
+psychophysiological
+psychophysiologically
+psychophysiologist
+psychopomp
+psychosexual
+psychosexuality
+psychosexually
+psychosomatically
+psychosurgery
+psychosurgical
+psychotherapeutically
+psychotherapist
+psychotically
+psychotogen
+psychotogenic
+psychotomimetic
+psychotomimetically
+psychotropic
+psychrometer
+psychrometer's
+psychrometers
+psychrometric
+psychrometry
+psychrophilic
+psyllium
+pterodactyl
+pterodactyl's
+pterodactyls
+ptolemaists
+ptomaine
+puberal
+pubertal
+puberulent
+pubes
+pubescence
+pubic
+pubis
+publican
+publicans
+publicist
+publick
+publique
+publishable
+puccoon
+puce
+pucka
+puckery
+pud
+puddingstone
+pudency
+pudendal
+pudendum
+puerperal
+puerperium
+pug
+pugaree
+puggaree
+pugging
+pugilism
+pugilist
+pugilistic
+pugmark
+pugnacious
+pugnaciously
+pugnaciousness
+pugnacity
+puisne
+puissance
+pukka
+pul
+pulchritude
+pulchritudinous
+pule
+puler
+puli
+pulicide
+pulik
+puling
+pulis
+pullback
+pullet
+pullout
+pullulate
+pullulation
+pulmonate
+pulmonic
+pulmotor
+pulpal
+pulpally
+pulpiness
+pulpwood
+pulpy
+pulque
+pulsant
+pulsator
+pulsatory
+pulsimeter
+pulsimeter's
+pulsimeters
+pulsometer
+pulsometer's
+pulsometers
+pulverulent
+pulvillus
+pulvinus
+pumiceous
+pumicite
+pumpernickel
+pumpkinseed
+pumpkinseeds
+puna
+punchball
+punchballs
+punchboard
+puncheon
+punchier
+punchinello
+punchless
+punchy
+punctate
+punctation
+punctilio
+punctilious
+punctiliously
+punctiliousness
+punctuator
+pung
+punily
+punishability
+punition
+punkah
+punkie
+punkin
+punnier
+punning
+punny
+punties
+punty
+pupae
+puparia
+puparial
+puparium
+pupfish
+pupilage
+pupilar
+pupillage
+pupillary
+pupiparous
+puppetry
+pupping
+purblind
+purblindly
+purblindness
+purdah
+purdew
+pureblood
+purebred
+puree
+puree's
+pureed
+pureeing
+purees
+purfle
+purfled
+purfling
+purgatorial
+purificator
+purificatory
+purifing
+purine
+puristic
+puritanism
+purl
+purled
+purler
+purlers
+purlieu
+purlin
+purling
+puromycin
+purplish
+purply
+purpura
+purpure
+purpuric
+purselike
+pursewarden
+pursier
+pursiness
+purslane
+pursuance
+pursuivant
+pursy
+purtenance
+purulence
+purulent
+purveyance
+purvis
+pushball
+pushcart
+pushchair
+pushchairs
+pushful
+pushfulness
+pushily
+pushout
+pushover
+pushover's
+pushovers
+pushpin
+pushpin's
+pushpins
+pusillanimity
+pusillanimous
+pusillanimously
+pussyfoot
+pussyfooter
+pussyfooting
+pussytoes
+pustulant
+pustular
+pustulate
+pustulated
+pustulation
+pustule
+pustules
+putains
+putas
+putdown
+putdown's
+putdowns
+putout
+putrefaction
+putrefactive
+putrescence
+putrescent
+putrescible
+putrescine
+putridity
+putsch
+putschist
+puttana
+puttee
+puttees
+puttyroot
+puzzleheaded
+puzzleheadedness
+pycnidium
+pycnogonid
+pycnometer
+pycnometer's
+pycnometers
+pyelitis
+pyelonephritic
+pyelonephritis
+pyemia
+pyemic
+pygidial
+pygidium
+pygmaean
+pygmean
+pygmoid
+pygmyish
+pygmyism
+pyknic
+pylon
+pylons
+pylori
+pyloric
+pylorus
+pyocanea
+pyoderma
+pyodermic
+pyogenic
+pyracanth
+pyracantha
+pyralid
+pyralidid
+pyramidical
+pyran
+pyranoid
+pyranose
+pyranoside
+pyrargyrite
+pyrene
+pyrenoid
+pyrethrin
+pyrethroid
+pyrethrum
+pyretic
+pyrexia
+pyrexial
+pyrexic
+pyrheliometer
+pyrheliometer's
+pyrheliometers
+pyrheliometric
+pyric
+pyridoxal
+pyridoxamine
+pyridoxin
+pyridoxine
+pyriform
+pyrimethamine
+pyrimidine
+pyrimidines
+pyrite
+pyrites
+pyritic
+pyrocatechol
+pyrocellulose
+pyrochemical
+pyrochemically
+pyroclastic
+pyroelectric
+pyroelectricity
+pyrogallol
+pyrogen
+pyrogenic
+pyrogenicity
+pyrogenous
+pyrola
+pyroligneous
+pyrolusite
+pyrolytic
+pyrolytically
+pyromancy
+pyromania
+pyromaniac
+pyromaniac's
+pyromaniacal
+pyromaniacs
+pyrometallurgical
+pyrometallurgy
+pyrometric
+pyrometrically
+pyromorphite
+pyronine
+pyroninophilic
+pyrope
+pyrophoric
+pyrophosphatic
+pyrophyllte
+pyrosis
+pyrotechnical
+pyrotechnically
+pyrotechnist
+pyroxenic
+pyroxenitic
+pyroxenoid
+pyroxylin
+pyrrhic
+pyrrhotite
+pyrrhuloxia
+pyrrol
+pyrrole
+pyrrolic
+pyruvate
+pyschiatrist
+pythoness
+pythonic
+pythonine
+pyuria
+pyx
+pyxides
+pyxidium
+pyxie
+pyxis
+qua
+quackish
+quadded
+quadding
+quadrantal
+quadraphonic
+quadraphonics
+quadraphony
+quadrat
+quadrate
+quadrated
+quadrates
+quadrating
+quadrennium
+quadricentennial
+quadricipital
+quadrifid
+quadripuntal
+quadrisect
+quadrisected
+quadrisecting
+quadrisects
+quadrisyllabic
+quadrivalent
+quadrivial
+quadroon
+quadroons
+quadrumvir
+quadrumvirate
+quadruped
+quadrupedal
+quadrupeds
+quadruplet
+quadruplets
+quadruplicity
+quadruply
+quadrupolar
+quadrupole
+quaestor
+quag
+quai
+quaich
+qualmish
+qualmishly
+qualmishness
+qualmy
+quant
+quantal
+quantasome
+quantic
+quantifiably
+quantificational
+quantificationally
+quantifys
+quantitate
+quantitated
+quantitates
+quantitating
+quantitation
+quantitations
+quarantinable
+quark
+quarks
+quartan
+quarterage
+quarterdeck
+quarterdecks
+quarterfinal
+quarterfinalist
+quartern
+quarternary
+quarterstaff
+quartette
+quartic
+quartics
+quarto
+quartos
+quartziferous
+quartzitic
+quartzose
+quasimodo
+quasiparticle
+quatercentenary
+quaternion
+quaternity
+quatrefoil
+quattrocento
+quattuordecillion
+quavery
+quayage
+quayside
+quean
+queasily
+queazy
+queenship
+queerish
+quenchable
+quenchless
+querilla
+querist
+quern
+querns
+questionary
+questionless
+questor
+quetzal
+quetzales
+quib
+quibs
+quickset
+quid
+quid's
+quiddity
+quids
+quiescence
+quietism
+quietist
+quietus
+quiff
+quiffed
+quiffs
+quillwort
+quince
+quinces
+quincuncial
+quincuncially
+quincunx
+quincunxes
+quincunxial
+quindecillion
+quinidine
+quiniela
+quinoa
+quinoid
+quinoidine
+quinoline
+quinquennium
+quinquevalent
+quinquivalent
+quintain
+quintal
+quintessence
+quintette
+quintic
+quintuple
+quintupled
+quintuples
+quintuplet
+quintuplet's
+quintuplets
+quintuplicate
+quintuplicated
+quintuplicates
+quintuplicating
+quintupling
+quintus
+quipped
+quipster
+quirkily
+quirkiness
+quirky
+quisling
+quislingism
+quitch
+quitclaim
+quitrent
+quittance
+quitted
+quittor
+quixotical
+quixotically
+quixotry
+quizmaster
+quizzer
+quizzicality
+quod
+quodlibet
+quoin
+quoit
+quoits
+quondam
+quot
+quotable
+quotidian
+rRNA
+rabbet
+rabbeted
+rabbeting
+rabbets
+rabbinate
+rabbinic
+rabbinism
+rabbitry
+rabbity
+rabblement
+rabic
+rabidity
+racecourse
+racecourses
+racemate
+racemic
+racemose
+rachet
+rachides
+rachiodont
+rachis
+rachises
+rachitic
+rachitis
+racialism
+racialist
+racialistic
+racily
+racine
+rackle
+racon
+raconteur
+racoon
+rad
+radarscope
+radarscopes
+raddle
+raddled
+raddles
+raddling
+radiale
+radiancy
+radiational
+radiationless
+radic
+radicand
+radicate
+radicle
+radicular
+radioautograph
+radioautographic
+radioautography
+radiobiologic
+radiobiological
+radiobiologically
+radiobiologist
+radiobiology
+radiobroadcast
+radiobroadcaster
+radiobroadcasting
+radiocast
+radiocaster
+radiochemist
+radiochlorine
+radioecological
+radioecologist
+radioecology
+radioelement
+radiogenic
+radiogram
+radiogram's
+radiograms
+radiograph
+radiographically
+radioimmunoassay
+radioisotope
+radioisotopic
+radioisotopically
+radiolarian
+radiolocation
+radiologist
+radiolucency
+radiolucent
+radiolysis
+radiolytic
+radiometeorograph
+radiometrically
+radiomimetic
+radionuclide
+radiopaque
+radiophone
+radiophoto
+radiophotograph
+radioscopic
+radioscopy
+radiosensitive
+radiosensitivity
+radiosonde
+radiostrontium
+radiosymmetrical
+radiotelegraph
+radiotelegraphic
+radiotelegraphy
+radiotelephone
+radiotelephony
+radiotherapist
+radiothorium
+radiotracer
+radome
+rads
+radula
+radular
+raff
+raffia
+raffinose
+raftsman
+raga
+ragamuffin
+ragbag
+raggedy
+raggle
+ragi
+raglan
+ragman
+ragpicker
+ragtag
+ragtime
+rah
+rainmaker
+rainmaking
+rainproof
+rainspout
+rainsquall
+rainwash
+rainwear
+raj
+raja
+rale
+rallye
+rallyist
+rallymaster
+ramate
+rambunctious
+rambunctiously
+rambunctiousness
+ramekin
+ramentum
+ramequin
+rami
+ramie
+ramiform
+ramillies
+ramirez
+rammer
+ramose
+ramosely
+ramous
+rampageous
+rampageously
+rampageousness
+rampancy
+rampion
+ramshackle
+ramus
+ranchman
+ranian
+rantry
+ranunculus
+rapacity
+rapine
+rapist
+rappee
+rappen
+rapporteur
+rapscallion
+raptor
+raptorial
+rapunzel
+rarebit
+rarefaction
+rarefactional
+rarefactive
+rarify
+rasa
+rascality
+rasing
+rasorial
+raspy
+rasure
+rata
+ratably
+ratafia
+rataplan
+ratch
+ratel
+ratemeter
+ratemeter's
+ratemeters
+ratepayer
+ratepayers
+rathe
+rathskeller
+raticide
+ratificationist
+ratiocinator
+rationalistically
+ratlike
+ratline
+raton
+ratoon
+rattan
+ratted
+ratteen
+ratter
+ratting
+rattlebrain
+rattlebrained
+rattletrap
+rattly
+rattrap
+raunchier
+raunchily
+raunchiness
+raunchy
+ravagement
+ravel
+ravelment
+ravels
+ravioli
+ravishment
+rawinsonde
+rawlings
+rawlins
+rayless
+raylessness
+rayon
+razeed
+razeeing
+razorbill
+razz
+razzmatazz
+reabsorb
+reabsorption
+reacquaint
+reacquire
+reacquisition
+reactance
+reactances
+reactional
+reactionally
+reactionaryism
+reaggregate
+reaggregation
+realpolitik
+reapportion
+rearhorse
+rearm
+rearmament
+rearming
+rearmost
+rearward
+rearwardly
+rearwards
+reasonability
+reasonless
+reasonlessly
+reassembly
+reave
+reaver
+reaving
+reb
+rebarbative
+rebarbatively
+reboant
+rebs
+rebus
+rebuttable
+rebutter
+recalcitrance
+recalcitrancy
+recalescence
+recallability
+recantation
+recap
+recatory
+receivership
+recension
+receptaculum
+recessional
+recessionary
+recharge
+rechargeable
+recharger
+recharging
+recheat
+recidivism
+recidivist
+recidivistic
+reciprocator
+recision
+recitalist
+recitativo
+reck
+reclinate
+reclosable
+recoin
+recombinant
+recommit
+recommitment
+recompence
+recompose
+reconcilability
+reconcilable
+reconcilableness
+reconcilement
+reconfirm
+reconfirmation
+reconstitute
+reconstitution
+reconstructionism
+reconstructionist
+reconstructor
+recontaminate
+reconversion
+reconvert
+reconverted
+reconvey
+reconveyance
+recordable
+recordation
+recordist
+recoupable
+recoupment
+recreant
+recreatable
+recreationist
+recriminatory
+recrudesce
+recrudescence
+recrudescent
+rectal
+rectally
+rectangularity
+recti
+rectifiability
+rectifiable
+recting
+rection
+rectitudinous
+rective
+recto
+rectorate
+rectorial
+rectorship
+rectos
+rectrices
+rectrix
+rectus
+recumbency
+recusancy
+redaction
+redactional
+redargue
+redbone
+redcap
+redded
+reddy
+rede
+redear
+redecorate
+redecorator
+redeemable
+redemptional
+redemptory
+redeploy
+redeployed
+redeployment
+redescribe
+redescription
+redetermine
+redetermined
+redetermining
+redhook
+redhorse
+redia
+rediae
+redial
+redias
+redintegrate
+redintegration
+redintegrative
+rediscount
+rediscountable
+redistributory
+redistrict
+redivivus
+redleg
+redolence
+redolent
+redolently
+redondo
+redoubt
+redoubtably
+redout
+redox
+redpoll
+redroot
+redshank
+redshift
+redshifted
+redshifting
+redshifts
+redshirt
+redskin
+redstart
+redtop
+reductant
+reductase
+reductio
+reductional
+reductionist
+reductionistic
+reduplicate
+reduplication
+reduplicative
+reduplicatively
+reduviid
+redwing
+ree
+reedbuck
+reedify
+reeducate
+reeducative
+reeky
+reelable
+reembroider
+reemphasization
+reemphasization's
+reemploy
+reemployment
+reenforce
+reenlist
+reenlisted
+reenlistment
+reentrance
+reest
+reestablishment
+ref
+reface
+refacing
+refect
+refection
+referable
+refinish
+refinisher
+refinishes
+refinishing
+refit
+reflation
+reflationary
+reflectional
+reflectometer
+reflectometer's
+reflectometers
+reflectometry
+reflexion
+reflexology
+reflorescence
+reflorescent
+reflow
+refluence
+reforest
+reforge
+reformate
+reformational
+refractile
+refractivities
+refractivity
+refractometric
+refractometry
+refractor
+refractorily
+refrainment
+refrangibility
+refrangible
+refrangibleness
+refrigerant
+refringent
+reft
+refugeeism
+refugium
+refulgence
+refulgent
+refundability
+refundable
+refurbishment
+refutably
+regality
+regardant
+regardful
+regardfully
+regardfulness
+regelation
+regenerable
+regeneracy
+regenerator
+regental
+regicidal
+regicide
+regimental
+regimentally
+regimentals
+regionalist
+regionalistic
+regisseur
+regius
+reglet
+regna
+regnal
+regnant
+regnum
+regolith
+regorge
+regorged
+regorging
+regosol
+regrant
+regreet
+regressor
+regretless
+regretter
+regrid
+regridded
+regridding
+regrow
+regurgitate
+regurgitated
+regurgitates
+regurgitating
+regurgitation
+regurgitative
+rehabilitant
+rehabilitationist
+rehabilitator
+rehear
+rehouse
+rehousing
+rehydratable
+rehydrate
+rehydration
+reichsmark
+reification
+reified
+reify
+reifying
+reimpression
+reincarnationist
+reinfection
+reinforceable
+reinhard
+reinhardt
+reinless
+reinsman
+reinsurance
+reinsure
+reinsurer
+reintegrate
+reintegration
+reintegrative
+reinvestment
+reinvigorate
+reinvigorator
+reiterator
+reive
+reiver
+reiving
+rejectee
+rejuvenate
+rejuvenated
+rejuvenates
+rejuvenating
+rejuvenation
+rejuvenator
+rejuvenescence
+rejuvenescent
+relatable
+relator
+relaxant
+relaxin
+releasability
+releasably
+relection
+reliction
+relievable
+relievo
+religionist
+religiose
+reline
+relinquishment
+reliquary
+relique
+reliquiae
+relishable
+relocatee
+relucent
+reluctancy
+reluctate
+reluctated
+reluctation
+reluctivity
+relume
+relumed
+relumine
+reluming
+remaines
+reman
+remanence
+remanent
+remanufacture
+remanufacturer
+remap
+remarque
+remediably
+remedially
+remediate
+remediation
+remediless
+remedilessly
+rememberability
+rememberable
+remigial
+remindful
+reminiscential
+remint
+remise
+remised
+remising
+remissible
+remissibly
+remitment
+remittable
+remittal
+remittent
+remittently
+remitter
+remonstrance
+remonstrant
+remonstrantly
+remonstrator
+remount
+removability
+removably
+remunerator
+remuneratory
+remus
+renascence
+renderable
+renegade
+renegades
+renege
+reneged
+reneger
+reneges
+reneging
+renewability
+renewably
+reniform
+renig
+renigged
+renigging
+renin
+renitency
+renitent
+rennet
+rennin
+renographic
+renography
+renominate
+renominating
+renomination
+renouncement
+renovator
+rentability
+rentable
+rente
+rentier
+renunciatory
+reoccupy
+reoccur
+reoccurrence
+rep
+repack
+repacker
+repacking
+repairability
+repand
+reparative
+repass
+repassage
+repatriate
+repatriated
+repatriates
+repatriating
+repatriation
+repealable
+repellant
+repellency
+repeller
+repercussive
+repetend
+repetitional
+replant
+repleviable
+replevied
+replevies
+replevin
+reportable
+reposal
+reposeful
+reposefully
+reposefulness
+reposit
+reposited
+repositing
+repossess
+repossession
+repower
+reprehend
+reprehensibility
+reprehensibly
+reprehension
+reprehensive
+representationalism
+representationalist
+repressibility
+repressible
+repressionist
+repressor
+reprieval
+repristinate
+repristination
+repro
+reproachable
+reproachful
+reproachfully
+reproachfulness
+reprobance
+reprobatory
+reprocess
+reprocessable
+reprocesses
+repros
+repudiationist
+repudiator
+repugn
+repugnancy
+reputability
+req
+requestioner
+requestor
+requiescat
+requin
+requital
+reradiate
+reradiation
+reredos
+reremouse
+rereward
+resail
+rescale
+rescindment
+rescission
+rescissory
+rescript
+researchist
+resect
+resectability
+resectable
+resection
+reseed
+resend
+resending
+reserpine
+reservist
+reservists
+resettable
+reship
+reshipment
+reshipper
+reshuffle
+residua
+resile
+resiled
+resiliency
+resiling
+resinate
+resinify
+resinoid
+resinous
+resiny
+resistable
+resistibility
+resistless
+resistlessly
+resistlessness
+resitting
+resojet
+resole
+resolvent
+resorb
+resorcinol
+resorption
+resorptive
+respell
+respirable
+respirational
+respirometer
+respirometer's
+respirometers
+respirometric
+respirometry
+resplendence
+resplendency
+responsory
+responsum
+ressentiment
+resses
+restage
+restartable
+restauranteur
+restitute
+restorable
+restoral
+restrainable
+restrictionism
+restrictionist
+restrike
+resultful
+resultfulness
+resultless
+resupinate
+resupination
+resupine
+resurgam
+resurge
+resurging
+resurrectional
+resurrectionist
+resuscitator
+resuscitators
+resvering
+ret
+retable
+retake
+retardate
+retentivity
+retenue
+retia
+retiarius
+reticency
+reticule
+reticulocyte
+reticulocytic
+reticulose
+retiform
+retinacular
+retinaculum
+retinae
+retinene
+retinitis
+retinol
+retinopathy
+retinoscopy
+retinospora
+retinula
+retinular
+retirant
+retool
+retortion
+retot
+retouch
+retoucher
+retractile
+retractility
+retrainable
+retrainee
+retral
+retrally
+retread
+retreaded
+retreading
+retreatant
+retrench
+retrial
+retributive
+retributively
+retributory
+retrievability
+retroaction
+retroactivity
+retrocede
+retrocession
+retrofire
+retrofitted
+retrogradation
+retrogress
+retrogression
+retrolental
+retrolingual
+retropack
+retroperitoneal
+retroperitoneally
+retroreflection
+retroreflective
+retroreflector
+retrorse
+retrorsely
+retroserrate
+retroversion
+rets
+retsina
+retted
+retting
+returnee
+returnee's
+returnees
+retuse
+reunification
+reunify
+reunionist
+reunionistic
+rev
+revalidate
+revalidating
+revaluate
+revalue
+revanche
+revanchist
+revealable
+revealment
+revegetate
+revegetation
+revehent
+reveille
+reveilles
+revelator
+revenant
+rever
+reverb
+reverberant
+reverberantly
+reverberatory
+reverential
+reverentially
+revers
+reversibly
+reversional
+reversionary
+revertible
+revery
+revest
+revetment
+revetted
+revictual
+revilement
+revisal
+revisionism
+revisor
+revisory
+revivable
+revivalist
+revivalistic
+revivalists
+revivification
+revivify
+reviviscence
+reviviscent
+revokable
+revoluable
+revolute
+revolutionarily
+revolutionibus
+revolutionist
+revolvable
+revs
+revulsed
+revulsive
+rew
+rewake
+rewaken
+rewardable
+rexroth
+rey
+reynard
+rezone
+rhabdom
+rhabdomancy
+rhabdome
+rhabdomere
+rhadamanthine
+rhamnaceous
+rhamnose
+rhamnus
+rhaphe
+rhapsodical
+rhapsodically
+rhapsodist
+rhatany
+rhebok
+rheims
+rheinholdt
+rheological
+rheologically
+rheologist
+rheometer
+rheometer's
+rheometers
+rheophile
+rheophilic
+rheostatic
+rhesus
+rhet
+rhetor
+rheumatically
+rheumatiz
+rheumatoid
+rheumatologist
+rheumatology
+rheumy
+rhinal
+rhinelander
+rhinencephalic
+rhinencephalon
+rhinitis
+rhinocerotic
+rhinolaryngology
+rhinopharyngitis
+rhinoscopy
+rhinosporidium
+rhinovirus
+rhizanthous
+rhizobium
+rhizocarpic
+rhizocarpous
+rhizocephalan
+rhizocephalid
+rhizoctonia
+rhizogenesis
+rhizogenetic
+rhizogenic
+rhizoid
+rhizoidal
+rhizomatous
+rhizome
+rhizomic
+rhizomorphous
+rhizoplane
+rhizopod
+rhizopodal
+rhizopodous
+rhizopus
+rhizosphere
+rhizotomy
+rhodamine
+rhodochrosite
+rhodomontade
+rhodoplast
+rhodopsin
+rhodora
+rhomb
+rhombencephalon
+rhombi
+rhombohedral
+rhombohedron
+rhomboid
+rhomboidal
+rhomboideus
+rhombs
+rhonchi
+rhonchus
+rhumb
+rhumba
+rhumbs
+rhus
+rhuses
+rhymester
+rhyolite
+rhyolitic
+rhythmicity
+rhythmist
+rhytidome
+ri
+rial
+rialto
+riant
+riantly
+riata
+ribaldry
+riband
+ribas
+ribband
+ribber
+ribbonlike
+ribby
+ribgrass
+riblet
+ribonuclease
+ribonucleoprotein
+ribonucleoside
+ribonucleotide
+ribose
+ricci
+ricebird
+ricercar
+richert
+richey
+richland
+richment
+rici
+ricin
+ricinus
+rickards
+rickenbaugh
+rickettsia
+rickey
+rickeys
+rickrack
+ricksha
+ricotta
+rictal
+rictus
+ridded
+ridder
+rideable
+riderless
+ridgeling
+ridgling
+ridgy
+ridotto
+ridpath
+riegger
+riel
+rien
+rier
+rife
+rifely
+riff
+riffle
+riffled
+riffler
+riffles
+riffling
+riffraff
+rification
+rifice
+rificer
+riflebird
+riflery
+riflescope
+rifying
+rigadoon
+rigatoni
+rigaudon
+rightism
+rigidification
+rigidify
+rigorism
+rigorism's
+rigorisms
+rigorist
+rigorist's
+rigoristic
+rigoristics
+rigorists
+rile
+riling
+rilke
+rille
+rillet
+rilly
+rimbaud
+rimier
+rimland
+rimose
+rimous
+rimrock
+rimy
+rin
+rinascimento
+rinderpest
+ringbark
+ringbolt
+ringbolts
+ringbone
+ringboned
+ringdove
+ringel
+ringent
+ringleader
+ringleaders
+ringlike
+ringmaster
+ringmasters
+ringneck
+ringolade
+ringstraked
+ringtail
+ringtaw
+ringtoss
+ringworm
+ringworms
+ripieno
+ripoff
+ripoff's
+ripoffs
+riposte
+ripper
+riprap
+ripsaw
+ripsnorter
+ripsnorting
+riptide
+risibility
+risorgimento
+risotto
+rit
+ritard
+ritualism
+ritualist
+ritualistic
+ritualistically
+ritzier
+ritziness
+ritzy
+rivalrous
+riverbed
+riverview
+riverward
+riverwards
+riverweed
+riyal
+roadability
+roadless
+roadrunner
+roadrunners
+roadstead
+roadwork
+roadworks
+roadworthiness
+roadworthy
+roan
+robalo
+roband
+robbie
+roble
+robustious
+robustiously
+robustiousness
+roc
+rocambole
+rochet
+rockabilly
+rockaway
+rockaways
+rocketeer
+rocketry
+rockettes
+rockfish
+rocklike
+rockling
+rockoon
+rockrose
+rockshaft
+rockskipper
+rococo
+rodenticide
+rodeph
+rodless
+rodlike
+roemer
+roentgenogram
+roentgenogram's
+roentgenograms
+roentgenograph
+roentgenographic
+roentgenographically
+roentgenography
+roentgenologic
+roentgenological
+roentgenologically
+roentgenologist
+roentgenology
+roentgenoscope
+roentgenoscopic
+roentgenoscopy
+roentgenotherapy
+roff
+rogation
+rogueing
+roguery
+roi
+roic
+roily
+roister
+roistered
+roisterer
+roistering
+roisterous
+rolamite
+rollick
+rollie
+rollout
+rollover
+rolnick
+romaine
+romanticist
+romanza
+romaunt
+romulo
+rondeau
+rondeaux
+rondel
+rondelet
+rondelle
+rondure
+ronnel
+ronyon
+roofhouse
+roofless
+rooflike
+roofline
+rooftree
+rookery
+rooky
+roomette
+rooney
+roorback
+roos
+roose
+rootage
+roothold
+rootlet
+rootlike
+rootstalk
+rootstock
+rooty
+ropean
+ropedancer
+ropedancing
+ropery
+ropewalk
+ropewalker
+ropeway
+ropework
+ropier
+ropiness
+ropy
+roque
+roquelaure
+rorqual
+rosabelle
+rosaceous
+rosaniline
+rosarian
+rosebay
+rosefish
+roselike
+rosella
+rosemaling
+roseola
+roseolar
+rosery
+roset
+rosewater
+rosewood
+rosie
+rosily
+rosin
+rosined
+rosining
+rosinous
+rosinweed
+roslev
+rossi
+rossoff
+rostagno
+rostagnos
+rostellar
+rostellate
+rostellum
+rostra
+rostral
+rostrate
+rosulate
+roswell
+rota
+rotaed
+rotameter
+rotameter's
+rotameters
+rotatable
+rotatory
+rote
+rotenone
+rotgut
+rothko
+rotifer
+rotisserie
+rotonda
+rotorcraft
+rotos
+rotted
+rottenstone
+rotter
+rottosei
+rottweiler
+roturier
+rou
+rouen
+roughage
+roughcast
+roughhouse
+roughhoused
+roughhousing
+roughleg
+roughrider
+roughriders
+roulade
+rouleau
+rouleaux
+roundel
+roundelay
+roundish
+roundlet
+roundsman
+roundwood
+roup
+rous
+rouseabout
+rousement
+roust
+rouster
+routeman
+routeway
+routh
+roux
+roven
+rowdily
+rowdyish
+rowdyism
+rowlock
+roxy
+royalism
+royaux
+royster
+rozella
+rozelle
+rozzer
+rpt
+rubasse
+rubato
+rubberlike
+rubberneck
+rubbernecker
+rubbishy
+rubblework
+rubefacient
+rubellite
+rubeola
+rubeolar
+rubicundity
+rubiginous
+rubious
+rubrical
+rubrically
+rubricate
+rubrication
+rubricator
+rubus
+rubythroat
+rucellai
+ruche
+ruching
+ruck
+rucksack
+ruction
+rudbeckia
+rudd
+rudderpost
+rudderstock
+ruddily
+ruddle
+ruddled
+ruddleman
+ruddling
+ruddock
+ruderal
+rudesbies
+rudesby
+rudimental
+rudimentarily
+rufescent
+ruff
+ruffe
+ruffed
+ruffianism
+ruffly
+rufous
+ruga
+rugae
+rugal
+rugate
+rugby
+rugger
+ruggiero
+rugose
+rugosely
+rugosity
+rugulose
+ruh
+ruidoso
+ruinate
+ruleless
+rulership
+rumba
+rumbly
+rumbustious
+rumdum
+rumina
+ruminal
+ruminate
+rumination
+ruminative
+ruminatively
+ruminator
+rummel
+rummer
+rummest
+rumrunner
+runagate
+runaround
+runback
+runcinate
+rundle
+rundlet
+runless
+runlet
+runnel
+runnels
+runneth
+runny
+runout
+runouts
+runover
+runtm
+rupiah
+rupiahs
+rupicoline
+rupicolous
+ruppert
+ruralist
+rurban
+rushall
+rushee
+rushlight
+rushy
+russetting
+russification
+russify
+russula
+rustical
+rustically
+rusticator
+rusticity
+rustily
+ruthenic
+ruthenious
+rutilant
+rutile
+ruttish
+ruttishly
+ruttishness
+ryegrass
+saba
+sabadilla
+sabbat
+sabbatic
+sabin
+sabol
+sabot
+saboteur
+saboteurs
+sabra
+sac
+sacahuiste
+sacaton
+saccade
+saccadic
+saccate
+saccharase
+saccharate
+saccharide
+saccharides
+saccharification
+saccharify
+saccharimeter
+saccharimeter's
+saccharimeters
+saccharimetry
+saccharin
+saccharine
+saccharinity
+saccharoidal
+saccharometer
+saccharometer's
+saccharometers
+saccharomyces
+saccharose
+saccular
+sacculate
+sacculated
+sacculates
+sacculation
+saccule
+sacculus
+sacerdotal
+sacerdotalism
+sacerdotalist
+sacerdotally
+sachem
+sachemic
+sachems
+sachet
+sacheted
+sacheverell
+sackbut
+sackcloth
+sackful
+saclike
+sacque
+sacra
+sacramental
+sacramentalism
+sacramentalist
+sacramentally
+sacrarium
+sacre
+sacrestia
+sacrilegiousnes
+sacring
+sacristan
+sacristy
+sacroiliac
+sacrosanctity
+sacrum
+saddhu
+saddlebow
+saddlecloth
+saddleless
+saddlery
+saddletree
+sadomasochism
+sadomasochist
+sadomasochistic
+safecracker
+safecracking
+safelight
+safetyman
+safflower
+safranin
+safranine
+safrole
+sagami
+saggar
+sagger
+sagittal
+sagittally
+sagittate
+sago
+sagos
+saguaro
+sahib
+sailable
+sailboard
+sailcloth
+sailon
+sailplane
+sailplaner
+sain
+sainfoin
+saintdom
+saintlike
+saintsbury
+saintship
+saith
+saithe
+saki
+sako
+salability
+salamandrine
+salariat
+saleable
+saledo
+saleratus
+saleroom
+salesclerk
+salesroom
+saleswoman
+salic
+salicin
+salicylate
+salida
+salientian
+salimeter
+salimeter's
+salimeters
+salinity
+salinometer
+salinometer's
+salinometers
+sallet
+sallowish
+salmagundi
+salmi
+salmonberries
+salmonberry
+salmonella
+salmonellosis
+salmonid
+salmonoid
+salometer
+salometer's
+salometers
+saloonkeep
+saltarello
+saltation
+saltatorial
+saltatory
+saltbox
+saltbush
+saltcellar
+saltern
+saltily
+saltine
+saltire
+saltless
+saltlike
+saltonstall
+saltshaker
+saltworks
+saltwort
+salubrity
+saluki
+salutarily
+salutaris
+salutational
+salutatorian
+salutatory
+salutiferous
+salutory
+salvable
+salvageability
+salvational
+salvationism
+salvationist
+salverform
+salvific
+salvoes
+salvor
+samar
+samara
+samarium
+samarskite
+samba
+sambar
+sambur
+samisen
+samite
+samlet
+samp
+sampan
+samphire
+samurai
+samurai's
+samurais
+sanatarium
+sanative
+sanbenito
+sancta
+sanctimony
+sanctum
+sandarac
+sandbagger
+sandbank
+sandbar
+sandbox
+sandbur
+sandglass
+sandhog
+sandling
+sandlot
+sandlotter
+sandpapery
+sandsoap
+sandstorm
+sandstorms
+sandworm
+sandworms
+sangaree
+sangfroid
+sanguinaria
+sanguinarily
+sanguineum
+sanguinity
+sanguinolent
+sanicle
+sanious
+sanipractor
+sanitaire
+sanitarian
+sanitarily
+sanitorium
+sannyasi
+sans
+sansei
+sanseis
+sanserif
+sansevieria
+sanskritic
+sansom
+sansome
+sant
+santolina
+santonica
+santonin
+santour
+saphead
+sapheaded
+saphenous
+sapid
+sapidity
+sapience
+sapiens
+sapient
+sapiently
+sapio
+sapless
+saplessness
+sapodilla
+sapogenin
+saponaceous
+saponaceousness
+saponifiable
+saponification
+saponifier
+saponify
+saponin
+saponins
+saponite
+sapor
+saporous
+sapota
+sapper
+sapphic
+sapphirine
+sapphism
+sapremia
+sapremic
+saprobe
+saprobic
+saprobically
+saprogenic
+saprogenicity
+saprolite
+sapropelic
+saprophagous
+saprophyte
+saprophytic
+saprophytically
+saprozoic
+sapsago
+saraband
+sarabande
+sarape
+sarasate
+sarcenet
+sarcoid
+sarcoidosis
+sarcolemma
+sarcolemmal
+sarcomatosis
+sarcomatous
+sarcomere
+sarcomeric
+sarcophagic
+sarcophagous
+sarcophagus
+sarcophagy
+sarcoplasm
+sarcoplasma
+sarcoplasmatic
+sarcoplasmic
+sarcosomal
+sarcosome
+sardonically
+sardonicism
+sardonyx
+sargasso
+sargassum
+sarge
+sarmi
+sarod
+sarode
+sarodist
+sarong
+sarong's
+sarongs
+sarpsis
+sarsaparilla
+sarsenet
+sarsparilla
+sarti
+sartorial
+sartorially
+sashimi
+saskatoon
+sass
+sassier
+sasswood
+sassy
+satang
+satangs
+satanically
+satchelful
+sateen
+satem
+sati
+satiety
+satinet
+satinwood
+satiny
+satori
+saturable
+saturant
+saturator
+saturnali
+saturnalian
+saturnalianly
+saturniid
+satyriasis
+satyric
+satyrid
+saucebox
+saucerlike
+sauch
+sauerbraten
+sauger
+saurel
+saurian
+sauries
+sauropod
+savable
+savagism
+savanna
+savanna's
+savannas
+savant
+savants
+savate
+saveable
+sawbelly
+sawbones
+sawboneses
+sawbuck
+sawfish
+sawfly
+sawlike
+sawtimber
+saxhorn
+saxifrage
+saxophonic
+saxton
+sayable
+scabbier
+scabbing
+scabble
+scabbled
+scabbles
+scabbling
+scabby
+scabies
+scabietic
+scabiosa
+scabious
+scad
+scad's
+scads
+scag
+scagliola
+scalade
+scalado
+scalage
+scalare
+scalariform
+scalariformly
+scalation
+scalawag
+scaleless
+scalelike
+scalene
+scalepan
+scallion
+scallopini
+scallywag
+scallywags
+scalogram
+scalogram's
+scalograms
+scammed
+scamming
+scammony
+scampi
+scampini
+scampish
+scandalmonger
+scandent
+scannable
+scansion
+scantling
+scape
+scapegoatism
+scapegrace
+scaphoid
+scapin
+scaping
+scapolite
+scapose
+scarab
+scarabaeid
+scaramouch
+scaramouche
+scarecrowish
+scarehead
+scaremonger
+scarey
+scarfpin
+scarfskin
+scarious
+scarlatinal
+scarless
+scarp
+scarped
+scarper
+scarpered
+scarpering
+scarpers
+scarph
+scarping
+scarps
+scarring
+scarry
+scatback
+scathe
+scathed
+scatheless
+scathes
+scatological
+scatology
+scatted
+scatteration
+scattershot
+scattier
+scatty
+scaup
+scauper
+scaups
+scc
+scena
+scenarist
+scenical
+scenically
+scenographic
+scenographically
+scenography
+scentless
+sceptibly
+schelling
+schematism
+scherzi
+scherzo
+schismatic
+schismatical
+schismatically
+schismatist
+schistose
+schistosity
+schistosomal
+schistosome
+schistosomiasis
+schistous
+schizo
+schizocarp
+schizogonic
+schizogonous
+schizogony
+schizomycete
+schizomycetous
+schizont
+schizophrene
+schizophrenically
+schizophyte
+schizophytic
+schizos
+schizothymic
+schlemiel
+schlepp
+schlieren
+schlieric
+schlock
+schmaltz
+schmaltzy
+schmalz
+schnauzer
+schnitzel
+scholastica
+scholasticate
+scholasticism
+scholiast
+scholiastic
+scholium
+schoolbag
+schoolchild
+schoolfellow
+schoolman
+schoolmistress
+schooltime
+schopenhauer
+schorlaceous
+schuman
+schwada
+sciaenoid
+sciatic
+sciential
+scientifique
+scientism
+scientologist
+scientology
+scilicet
+scilla
+scintigraphic
+scintigraphy
+scintilla
+scintillant
+scintillantly
+scintillator
+scintillometer
+scintillometer's
+scintillometers
+sciolism
+sciolist
+sciolistic
+sciomancy
+sciomantic
+scirocco
+scirrhi
+scirrhous
+scirrhus
+scissile
+scission
+scissortail
+sclerose
+sclerosed
+sclerotial
+sclerotin
+sclerotium
+scofflaw
+scofflaw's
+scofflaws
+scolecite
+scolex
+scolices
+scoliosis
+scoliotic
+scollop
+scolopendra
+scombroid
+sconce
+scone
+scoopful
+scopic
+scopolamine
+scopula
+scopulate
+scorbutic
+scorbutically
+scorekeeper
+scoria
+scoriaceous
+scorpaenid
+scorpioid
+scotchgard
+scotchman
+scoter
+scotoma
+scotomatous
+scotopic
+scottie
+scouse
+scouser
+scoutcraft
+scoutmaster
+scrabbly
+scrag
+scraggier
+scragging
+scraggy
+scrannel
+scrapie
+scrapper
+scrappier
+scrappiness
+scrapple
+scrappy
+scrawly
+screak
+screaky
+scree
+screenable
+screenful
+screvane
+screwbean
+screwier
+screwiness
+screwlike
+screwworm
+screwy
+scrieve
+scrimpy
+scrimshaw
+scrip
+scriptal
+scription
+scriptorium
+scriptwriter
+scriptwriter's
+scriptwriters
+scrod
+scrofula
+scrofulous
+scrollwork
+scrota
+scrotal
+scrotum
+scrotum's
+scrotums
+scrouge
+scrouging
+scrubbier
+scrubby
+scrubland
+scrubwoman
+scruff
+scruffier
+scruffiness
+scruffy
+scrum
+scrummage
+scrunch
+scrutator
+scrutin
+scrutineer
+scud
+scudded
+scudding
+scuds
+scull
+sculled
+sculler
+sculleries
+scullery
+sculling
+scullion
+scullions
+sculls
+sculpin
+sculpsit
+sculptress
+sculpturesque
+sculpturesquely
+scumble
+scumbled
+scumbles
+scumbling
+scumming
+scummy
+scunner
+scup
+scupper
+scuppered
+scuppering
+scuppernong
+scuppers
+scups
+scurf
+scurfy
+scurril
+scurrile
+scurrility
+scurvily
+scuttlebutt
+scutum
+seabag
+seabeach
+seabed
+seabed's
+seabird
+seaboot
+seaborne
+seacraft
+seadog
+seadrome
+seafloor
+seafowl
+seafront
+seagirt
+seagoing
+sealery
+sealskin
+seamanlike
+seamark
+seamlike
+seamount
+seamster
+seaplane
+seaquarium
+searchable
+searchless
+seascape
+sease
+seashell
+seashell's
+seashells
+seasick
+seasickness
+seastrand
+seatmate
+seatmate's
+seatmates
+seawall
+seaware
+seawater
+seawater's
+seaworthiness
+seaworthy
+sebaceous
+sebum
+sec
+secateur
+secateurs
+secco
+secessionism
+seclusive
+seclusively
+seclusiveness
+secobarbital
+secondo
+secretaryship
+secretin
+secretionary
+secretor
+secretory
+sectarianism
+sectary
+sectile
+sectility
+sectionalism
+sectorial
+secularistic
+secund
+securement
+seder
+sedgwick
+sedgy
+sedilia
+sedimentologic
+sedimentological
+sedimentologically
+sedimentologist
+sedimentology
+seducement
+seductress
+sedulity
+sedulous
+sedulousness
+sedum
+seeable
+seedcake
+seedcakes
+seedily
+seedlike
+seedpod
+seedsman
+seedtime
+seel
+seeley
+seepy
+seeress
+seerey
+segetal
+segmentary
+segno
+segnos
+segue
+segue's
+segued
+segueing
+segues
+seguidilla
+segur
+segura
+sei
+seicento
+seiche
+seigneur
+seigneurial
+seigneury
+seignior
+seigniorage
+seigniory
+seignorage
+seignorial
+seignory
+seine
+seiner
+seining
+seisin
+seisins
+seism
+seismicity
+seismogram
+seismogram's
+seismograms
+seismographic
+seismologist
+seismometric
+seismometry
+selachian
+selaginella
+selden
+selectee
+selectman
+selectmen
+selenic
+selenide
+seleniferous
+selenious
+selenocentric
+selenographer
+selenographic
+selenographist
+selenography
+selenological
+selenologist
+selenologist's
+selenologists
+selenology
+selenosis
+selfadjoint
+selfdom
+selfhood
+sellable
+selle
+selvage
+selvaged
+selvedge
+selvedged
+semasiological
+semasiologist
+semasiology
+sematic
+semblable
+semblably
+semeiology
+sement
+semestral
+semestrial
+semiabstract
+semiabstraction
+semiaquatic
+semiarboreal
+semiaridity
+semiautomatically
+semiautonomous
+semibasement
+semibreve
+semicentenary
+semicentennial
+semicircle
+semicircles
+semiclassic
+semiclassical
+semicolonial
+semicolonialism
+semicolony
+semicommercial
+semiconducting
+semiconscious
+semiconsciously
+semiconsciousness
+semiconservative
+semiconservatively
+semicrystalline
+semicylindrical
+semidarkness
+semidesert
+semidetached
+semidiameter
+semidiurnal
+semidivine
+semidocumentary
+semidome
+semidomed
+semidomestic
+semidomesticated
+semidomestication
+semidominant
+semidouble
+semidry
+semiellipse
+semielliptic
+semielliptical
+semiempirical
+semierect
+semievergreen
+semifinal
+semifinalist
+semifinished
+semifitted
+semiflexible
+semifluid
+semiformal
+semifossil
+semigloss
+semigovernmental
+semigroup
+semilegendary
+semilethal
+semiliquid
+semiliterate
+semilog
+semilunar
+semilustrous
+semimanufactures
+semimetal
+semimetallic
+semimicro
+semimoist
+semimonastic
+semimonthly
+semimystical
+seminarist
+seminiferous
+semiofficial
+semiofficially
+semiological
+semiology
+semiopaque
+semiosis
+semiotic
+semiotical
+semiotician
+semiotics
+semipalmated
+semiparasitic
+semipermeability
+semipermeable
+semiphore
+semipolitical
+semiporcelain
+semipostal
+semiprecious
+semiprivate
+semipro
+semiquaver
+semiramis
+semireligious
+semiretired
+semiretirement
+semirigid
+semisacred
+semisedentary
+semishrub
+semishrubby
+semiskilled
+semisoft
+semisolid
+semisweet
+semisynthetic
+semiterrestrial
+semitonal
+semitonally
+semitone
+semitonic
+semitonically
+semitrailer
+semitranslucent
+semitransparent
+semitropic
+semitropics
+semivowel
+semiweekly
+semiworks
+semiyearly
+semmes
+semolina
+semper
+sempervivum
+sempiternal
+sempiternally
+sempiternity
+semple
+semplice
+sempre
+sempstress
+semra
+sen
+senarii
+senarius
+senary
+senatorian
+senatorship
+sendable
+senecio
+senectitude
+senega
+senesac
+senescence
+senescent
+seneschal
+sengi
+senhor
+senhora
+senhores
+senhorita
+senilis
+senility
+senioritatis
+seniti
+senna
+sennet
+sennight
+sennit
+sens
+sensa
+sensationalist
+sensationalistic
+senseful
+sensibilia
+sensillum
+sensitometer
+sensitometer's
+sensitometers
+sensitometric
+sensitometry
+sensorial
+sensorially
+sensorimotor
+sensorineural
+sensorium
+sensualism
+sensualist
+sensualistic
+sensum
+sensuosity
+sententia
+sententious
+sententiously
+sententiousness
+senti
+sentience
+sentimentalism
+sentimentalist
+sepal
+separably
+separationist
+separatism
+separatist
+separatistic
+sepiolite
+sepses
+sepsis
+septa
+septal
+septenarius
+septendecillion
+septentrion
+septentrional
+septicemia
+septicemic
+septicidal
+septifragal
+sepuchral
+sepulture
+sequacious
+sequaciously
+sequacity
+sequela
+sequelae
+sequency
+sequent
+sequestrate
+sequestrum
+sequinned
+sequitur
+ser
+sera
+serac
+serafin
+seraglio
+serai
+seral
+seraphic
+seraphically
+seraphs
+serbantian
+serbian
+sere
+serfage
+sergeancy
+sergeanty
+serialism
+serialist
+seriate
+seriately
+seriatim
+sericeous
+sericin
+sericultural
+sericulture
+sericulturist
+serieuses
+serif
+serigraph
+serigrapher
+serigraphy
+serin
+serine
+seriocomic
+seriocomically
+serjeants
+serjeanty
+sermonic
+serodiagnosis
+serodiagnostic
+serologic
+serologist
+seropurulent
+serosa
+serosal
+serotinal
+serotinous
+serotonin
+serotype
+serous
+serow
+serpiginous
+serpiginously
+serra
+serranid
+serranoid
+serrate
+serrated
+serrates
+serrating
+serration
+serratus
+serried
+serriedly
+serriedness
+serry
+serrying
+serting
+sertive
+sertularian
+serval
+servanda
+servation
+servatius
+serviceably
+serviceberry
+servility
+servomotor
+servosystem
+servosystems
+sesamoid
+sesquicarbonate
+sesquicentenary
+sesquicentennial
+sesquipedalian
+sessed
+sesshu
+sessile
+sessility
+sessional
+sesterce
+sestertium
+sestet
+sestina
+seta
+setaceous
+setaceously
+setae
+setal
+setline
+setnm
+seto
+setoff
+setom
+setose
+setout
+setpoint
+setpoints
+settee
+settees
+settlor
+setz
+setzb
+setzm
+seurat
+sevec
+sevenths
+seventyfold
+severability
+severable
+severna
+sevigli
+sewickley
+sexagenarian
+sexagesimal
+sexdecillion
+sexily
+sexless
+sexlessly
+sexlessness
+sexology
+sexpot
+sext
+sextant
+sextic
+sexto
+sextodecimo
+sextos
+sextuor
+sextuplicate
+sey
+sforzando
+shacklebone
+shad
+shadberry
+shadblow
+shadbush
+shaddock
+shadeless
+shadflower
+shadoof
+shadowbox
+shadowgraph
+shadowily
+shadowless
+shadowlike
+shagbark
+shaggily
+shaggymane
+shagreen
+shahdom
+shahn
+shaitan
+shakeout
+shako
+shakoes
+shakya
+shalloon
+shallop
+shallot
+shalt
+shaman
+shamanism
+shamanist
+shamanistic
+shamefaced
+shamefacedness
+shamefast
+shammer
+shammes
+shamming
+shammosim
+shammy
+shamus
+shan
+shandies
+shandrydan
+shandy
+shandygaff
+shanghaied
+shanghaier
+shankpiece
+shansi
+shantey
+shantyman
+shantytown
+shapable
+shapeable
+shapen
+shard
+shareability
+shareable
+sharkskin
+sharpie
+sharpies
+sharpy
+shashlick
+shashlik
+shatilov
+shaveling
+shavetail
+shavie
+shawano
+shawm
+shawomet
+shay
+shayne
+shayol
+shays
+sheaflike
+sheahe
+shearn
+shearwater
+sheatfish
+sheathbill
+shebang
+shebeen
+sheboygan
+shedded
+shedder
+sheen
+sheeny
+sheepfold
+sheepherder
+sheepherding
+sheepish
+sheepishly
+sheepishness
+sheepshank
+sheepshead
+sheepshearer
+sheepshearing
+sheeran
+sheetfed
+sheetlike
+sheikdom
+sheikh
+sheikhdom
+shekel
+shelagh
+shelfful
+shelflike
+shellac
+shellacked
+shellacking
+shellback
+shellback's
+shellbacks
+shellcracker
+shellfire
+shellfish
+shellproof
+shellwork
+shelly
+shelterbelt
+shelterless
+sheltie
+shelties
+shelty
+shend
+shending
+shensi
+shep
+shepherdess
+sher
+sherbert
+sherd
+sherif
+sheriffdom
+sherris
+shevelling
+shew
+shewe
+shews
+shh
+shiel
+shieling
+shietz
+shiflett
+shiftable
+shigella
+shih
+shikar
+shikari
+shikarred
+shikarring
+shiksa
+shikse
+shilingi
+shillalah
+shillelagh
+shillong
+shimmery
+shindies
+shindy
+shingly
+shinleaf
+shinleafs
+shinnery
+shinney
+shinnied
+shinning
+shinny
+shinnying
+shinplaster
+shinsplints
+shipborne
+shipfitter
+shiplap
+shipload
+shipmaster
+shipowner
+shipside
+shipway
+shipworm
+shipwright
+shirr
+shirring
+shirtwaist
+shirtwaister
+shirty
+shish
+shitepoke
+shiv
+shivaree
+shlemiehl
+shlock
+sho
+shoat
+shockproof
+shoddily
+shoebill
+shoeblack
+shoepac
+shoepack
+shogun
+shogunate
+sholom
+shoon
+shoplift
+shoplifter
+shoplifters
+shoplifting
+shoppe
+shoptalk
+shoran
+shorebird
+shorebird's
+shorebirds
+shorefront
+shoreside
+shoreward
+shorewards
+shortbread
+shortcake
+shortchange
+shortchanger
+shorthorn
+shortie
+shorties
+shortliffe
+shorty
+shotbush
+shotline
+shotlines
+shotten
+shouldst
+shoup
+shovelful
+shovelhead
+shovelman
+shovelnose
+shovelsful
+showbread
+showery
+showily
+showstopper
+shrievalty
+shrieve
+shrike
+shrimpy
+shrive
+shrived
+shriven
+shroff
+shrubbier
+shrubby
+shtetel
+shtetl
+shtetlach
+shtg
+shtick
+shuiski
+shul
+shulde
+shunner
+shunpike
+shunpiker
+shunpiking
+shush
+shute
+shutterbug
+shutterless
+shuz
+shyer
+shyes
+shyest
+shylockian
+shyster
+si
+sialagogue
+siamang
+sib
+sibe
+sibilate
+sibilation
+sibly
+sibyl
+sibylic
+sibylla
+sibyllic
+sibylline
+sibyls
+siccative
+siccing
+siciliana
+sickbed
+sickbed's
+sickbeds
+sicklebill
+sicklemia
+sicklewort
+sicklily
+sid
+siddo
+siddur
+siddurim
+sideburned
+sidedress
+sidehill
+sidekick
+sidekicks
+sideling
+sidency
+sident
+sidepiece
+siderite
+sideritic
+siderolite
+sideslip
+sideslips
+sidespin
+sidesplitting
+sidestepped
+sidestepper
+sidestroke
+sideswipe
+sideward
+sidewards
+sie
+sieben
+siebern
+siecle
+siecles
+siepi
+sierran
+sieux
+sig
+sightless
+sightlessness
+sigmoid
+sigmoidal
+sigmoidally
+signalman
+signalmen
+signalment
+signatory
+signifiable
+significancy
+significative
+significatively
+significativeness
+significs
+signior
+signiories
+signiory
+signori
+signories
+signorina
+signorino
+signory
+sike
+siking
+silane
+sild
+silds
+silenus
+silesia
+silex
+siliceous
+silicic
+silicicolous
+silicification
+silicify
+silicious
+silicle
+silicosis
+silicothermic
+silicotic
+silique
+silkaline
+silke
+silkoline
+silkweed
+sillabub
+sillily
+sillimanite
+silone
+siloxane
+siltstone
+siltstones
+siluroid
+silva
+silvan
+silvas
+silverfish
+silvern
+silverside
+silversides
+silverweed
+silvical
+silvicolous
+silvics
+silvicultural
+silviculturally
+silviculture
+silviculturist
+simazine
+simba
+simca
+simian
+simmel
+simms
+simnel
+simoleon
+simony
+simoom
+simoon
+simp
+simpatico
+simper
+simpered
+simperer
+simpering
+simpers
+simplices
+simplicial
+simplicially
+simplifiction
+simplism
+simplistically
+simulacre
+simulacrum
+simular
+sinan
+sinapism
+sincipita
+sincipital
+sinciput
+sind
+sinecure
+sinfonia
+sinfonietta
+singeing
+singleminded
+singlestick
+singletree
+singsong
+singsongy
+singspiel
+sinh
+siniboia
+sinistrorse
+sinistrous
+sinkable
+sinkage
+sinoatrial
+sinological
+sinologist
+sinologue
+sinology
+sinopia
+sinsyne
+sinterability
+sinton
+sinuate
+sinuately
+sinuatrial
+sinuosity
+sinusitis
+sion
+sipper
+sippet
+siree
+sirenian
+sirloin
+sirocco
+sirra
+sirrah
+sirree
+sirupy
+sirvente
+sirventes
+siskin
+sissies
+sissified
+sissy
+sisterhood
+sistrum
+sith
+sitosterol
+siva
+sivas
+sixmo
+sixmos
+sixpenny
+sixteenmo
+sixths
+sixtyfold
+sizably
+sizar
+sizova
+skag
+skagen
+skald
+skaldic
+skateboard
+skateboard's
+skateboarder
+skateboarding
+skateboards
+skedaddle
+skedaddled
+skedaddler
+skedaddles
+skedaddling
+skeg
+skeigh
+skein
+skein's
+skeins
+skeleta
+skellum
+skelp
+skelping
+skelpit
+skelter
+skeltered
+skeltering
+skene
+skep
+skepsis
+skerries
+skers
+skery
+skewback
+skewbald
+skiable
+skiagram
+skiagram's
+skiagrams
+skiagraph
+skiagraphy
+skiascope
+skiascopy
+skidder
+skiddier
+skiddoo
+skiddy
+skidoo
+skiffle
+skilful
+skilfully
+skilless
+skimobile
+skimpily
+skinflint
+skinflint's
+skinflints
+skinful
+skinhead
+skink
+skinker
+skint
+skintight
+skipjack
+skirl
+skirr
+skitter
+skittery
+skittish
+skittishly
+skittishness
+skive
+skiver
+skiving
+skivvies
+skivvy
+skiway
+skiwear
+skoal
+skulduggery
+skyborne
+skycap
+skydiving
+skyey
+skylounge
+skyphoi
+skyphos
+skyros
+skysail
+skywrite
+skywriter
+skywriting
+slabber
+slabbered
+slabbering
+slabbing
+slangily
+slanginess
+slangy
+slantways
+slantwise
+slapdash
+slaphappy
+slapjack
+slatelike
+slather
+slathered
+slathering
+slathers
+slattern
+slatternliness
+slatternly
+slaty
+slaughterous
+slaughterously
+slaveholder
+slaveholders
+slaveholding
+slavey
+slaveys
+slavocracy
+sleazily
+sledded
+sledder
+sleekit
+sleeplessess
+sleeplike
+sleepyhead
+sleeveless
+sleevelet
+slesinger
+sleuth
+sleuthhound
+slidden
+slideway
+slily
+slimily
+slimmest
+slimming
+slimpsy
+slimsy
+slinkier
+slinkily
+slinkiness
+slinky
+slipcase
+slipcover
+slipform
+slipknot
+slipover
+slippier
+slippy
+slipshod
+slipslop
+slipsole
+slipstick
+slipup
+slithery
+slitless
+slivovitz
+slobber
+slobbered
+slobberer
+slobbering
+slobbers
+slobbery
+slobbish
+slogger
+slopwork
+slopworker
+slotback
+slotting
+slouchier
+slouchily
+slouchiness
+slouchy
+sloughy
+slowish
+slowpoke
+slub
+slubber
+slubbered
+slubbering
+slubbing
+sludgier
+sludgy
+slue
+sluff
+slugabed
+slugfest
+sluggard
+sluggardly
+sluggardness
+sluiceway
+sluicy
+sluing
+slumberous
+slumbery
+slumbrous
+slumgullion
+slumlord
+slummer
+slummier
+slummy
+slungshot
+slushier
+slushiness
+slushy
+slut
+sluttish
+sluttishly
+sluttishness
+slyboots
+slyer
+slyest
+smartie
+smarties
+smartweed
+smarty
+smashup
+smatter
+smatterer
+smearcase
+smeary
+smectic
+smegma
+smeltery
+smidgen
+smidgeon
+smileless
+smilelessly
+smirch
+smirky
+smithery
+smithsonite
+smoggier
+smoggy
+smogless
+smokeable
+smokechaser
+smokeless
+smokelike
+smokeproof
+smokey
+smokily
+smolt
+smoochy
+smoothbore
+smoothie
+smoothies
+smooths
+smoothy
+smorgasbord
+smothery
+smoulder
+smsa
+smsa's
+smsas
+smudgily
+smugger
+smuggest
+smutch
+smutchy
+smutted
+smuttily
+smutting
+snaffle
+snaffled
+snaffling
+snaggletooth
+snaggletoothed
+snaggy
+snaillike
+snakebite
+snakebite's
+snakebites
+snakemouth
+snakeskin
+snakestrike
+snakeweed
+snakily
+snaky
+snappe
+snapshoot
+snapshooter
+snark
+snarks
+snarly
+snash
+snatchy
+snath
+snathe
+sndmsg
+snead
+sneap
+sneck
+sneed
+sneesh
+sneezeweed
+sneezewort
+sneezy
+snell
+snelling
+snick
+snickersnee
+snickery
+sniffily
+sniffiness
+sniffish
+sniffishly
+sniffishness
+sniffy
+snigger
+sniggered
+sniggerer
+sniggering
+sniggle
+sniggled
+sniggling
+sniperscope
+snippety
+snit
+snitch
+snitcher
+snobbism
+snobby
+snodgrass
+snollygoster
+snood
+snooperscope
+snoopily
+snoot
+snootier
+snootily
+snootiness
+snooty
+snooze
+snoozer
+snoozes
+snoozing
+snoozle
+snoozled
+snoozles
+snoozling
+snopes
+snot
+snoutish
+snouty
+snowbound
+snowbrush
+snowcap
+snowcapped
+snowdrift
+snowdrop
+snowfield
+snowless
+snowmaker
+snowmaking
+snowmelt
+snowpack
+snowplow
+snowscape
+snowshed
+snowshoeing
+snowslide
+snowsuit
+snubber
+snubbiness
+snubby
+snuffbox
+snuffy
+snugger
+snuggery
+snuggest
+soakage
+soapbark
+soapbox
+soapboxes
+soapily
+soapless
+soapmaking
+soapwort
+soba
+sobe
+sobersided
+sobersides
+sobf
+sobibor
+socage
+socager
+socal
+soccage
+sochi
+sociableness
+socialistically
+socialite
+socinianism
+sociolinguistic
+sociolinguistics
+sociologic
+sociopath
+sociopathic
+sociopolitical
+sociosexual
+sociosexuality
+sockdolager
+sockdologer
+sockeye
+socle
+socola
+soconoco
+sodalist
+sodalite
+sodality
+sodbuster
+sodded
+sodic
+sodomite
+soeren
+soever
+soffit
+softback
+softbound
+softcover
+softhead
+softheaded
+softheadedly
+softheadedness
+softhearted
+softheartedly
+softheartedness
+softie
+softies
+softish
+softy
+soggily
+sohn
+soign
+soignee
+soilborne
+soilge
+soilless
+soilure
+soir
+soke
+sokeman
+sokol
+sokolev
+sokolov
+sokolsky
+sola
+solacement
+solanaceous
+solanin
+solanine
+solanum
+solarium
+solate
+solated
+solating
+solatium
+soldan
+solderability
+soldi
+soldiership
+solecistic
+solemnify
+solenoidal
+soleplate
+soleprint
+solesmes
+solfatara
+solicitant
+solicitorship
+solidago
+solidarism
+solidarist
+solidaristic
+solidus
+solifluction
+soliloquist
+solipsist
+solipsistic
+solitarily
+soliton
+solitudinarian
+solitudinem
+solleret
+soln
+solonets
+solonetz
+solonetzic
+solstitial
+solubleness
+solubly
+solus
+solute
+solvability
+solvate
+solvated
+solvation
+solventless
+solvolysis
+solvolytic
+somatically
+somatogenic
+somatological
+somatology
+somatoplasm
+somatoplastic
+somatopleure
+somatopleuric
+somatosensory
+somatotrophin
+somatotropin
+somatotype
+somatotypic
+somatotypically
+sombre
+sombrero
+sombrous
+somebodies
+somedeal
+someway
+someways
+somewhen
+somewhither
+somite
+somitic
+somnambulant
+somnambular
+somnambulate
+somnambulation
+somnambulator
+somnambulism
+somnambulist
+somnambulistic
+somnambulistically
+somnifacient
+somniferous
+somniferously
+somnolency
+sonambula
+sonance
+sonant
+sonarman
+sonatina
+sonde
+sone
+songau
+songbird
+songfest
+songless
+songlessly
+songsmith
+songster
+songtress
+songwriter
+songwriting
+sonically
+sonicate
+sonicated
+sonication
+sonicator
+sonicators
+sonless
+sonneteer
+sonnobuoy
+sonogram
+sonogram's
+sonograms
+sonorant
+sonovox
+sonship
+sonsie
+sonsy
+soomed
+soothfast
+sootier
+sootily
+sootiness
+sooty
+sophistic
+sophistical
+sophistically
+sophy
+sopite
+sopited
+sopiting
+sopor
+soporiferous
+soporiferousness
+soppier
+soppy
+sopranino
+sopsaisana
+sora
+sorb
+sorbability
+sorbable
+sorbate
+sorbed
+sorbent
+sorceress
+sorcerous
+sordino
+sorehead
+soreheaded
+sorgo
+sori
+soricine
+sorites
+sororal
+sororate
+sorption
+sorptive
+sorrentine
+sorrentino
+sorrily
+sortable
+sortilege
+sortition
+sorus
+sostenuto
+sot
+soteriological
+soteriology
+sotol
+sottish
+sottishly
+sottishness
+sotun
+sou
+soubise
+soubrette
+souchong
+sough
+soukhouma
+soule
+soulless
+soullessly
+soullessness
+soundable
+soundboard
+soundless
+soundlessly
+soupier
+soupspoon
+soupy
+sourberry
+sourceless
+sourish
+sourpuss
+soursop
+sourwood
+sousaphone
+souse
+sousing
+sout
+soutache
+soutane
+souter
+southeasternmost
+southeastward
+southeastwards
+souths
+southwesternmost
+southwestward
+southwestwards
+sovietism
+sovkhoz
+sovkhozes
+sovran
+sovranty
+sowbug
+sowbug's
+sowbugs
+soxhlet
+spa
+spaceband
+spaceflight
+spaceless
+spaceman
+spaceport
+spacetime
+spacewalker
+spacewalking
+spacial
+spackle
+spackled
+spackling
+spacs
+spacward
+spada
+spadeful
+spadework
+spadices
+spadille
+spadix
+spaeing
+spahi
+spahn
+spake
+spalding
+spall
+spallable
+spallation
+spalled
+spalling
+spandrel
+spandril
+spang
+spanworm
+spareable
+spareribs
+sparge
+sparger
+sparging
+sparkily
+sparkish
+sparkplug
+sparred
+sparrowgrass
+sparsity
+spartan
+sparteine
+spas
+spasmodic
+spasmodical
+spasmodically
+spasmolytic
+spasmolytically
+spastically
+spasticity
+spathe
+spathic
+spathulate
+spatiotemporal
+spatiotemporally
+spatlum
+spatted
+spatting
+spatulate
+spavin
+speakeasy
+spean
+spearfish
+spearman
+specialism
+specialisms
+specialistic
+speciate
+speciation
+speciational
+speciosity
+specsartine
+spect
+spectate
+spectated
+spectating
+spectatress
+spector
+spectrality
+spectrofluorimeter
+spectrofluorimeter's
+spectrofluorimeters
+spectrofluorometer
+spectrofluorometer's
+spectrofluorometers
+spectrofluorometric
+spectrofluorometry
+spectrographic
+spectroheliogram
+spectroheliogram's
+spectroheliograms
+spectroheliograph
+spectroheliography
+spectrohelioscope
+spectrophotometrical
+spectrophotometrically
+spectroscopical
+spectroscopist
+speculum
+speechify
+speedball
+speedlight
+speedster
+speedway
+speedwell
+speel
+speir
+speiss
+speleogenesis
+speleogenetic
+spellbind
+spellbinder
+spelldown
+spelt
+spelter
+spelunker
+spelunking
+spendable
+spendthrift
+spenglerian
+spermaceti
+spermagonium
+spermary
+spermatheca
+spermathecal
+spermatial
+spermatic
+spermatid
+spermatium
+spermatocidal
+spermatocide
+spermatocyte
+spermatogenesis
+spermatogenetic
+spermatogenic
+spermatogonial
+spermatogonium
+spermatophore
+spermatophytic
+spermatozoa
+spermatozoal
+spermatozoan
+spermatozoid
+spermatozoon
+spermicidal
+spermicide
+spermidine
+spermiogenesis
+spermophile
+sperrylite
+spessartite
+sphagnous
+sphagnum
+sphalerite
+sphene
+sphenodon
+sphenodont
+sphenoid
+sphenoidal
+sphenopsid
+spheral
+sphericity
+spherometer
+spherometer's
+spherometers
+spheroplast
+spherulite
+spherulitic
+sphery
+sphincter
+sphincteral
+sphinges
+sphingid
+sphingosine
+sphygmograph
+sphygmographic
+sphygmography
+sphygmomanometer
+sphygmomanometer's
+sphygmomanometers
+sphygmomanometric
+sphygmomanometrically
+sphygmomanometry
+spicae
+spicate
+spiccato
+spiceberry
+spicery
+spicily
+spicula
+spicular
+spiculate
+spiculation
+spicule
+spiculiferous
+spiculum
+spiderweb
+spiegeleisen
+spiel
+spieler
+spiffier
+spiffy
+spikelet
+spikelike
+spikenard
+spile
+spiled
+spiles
+spiling
+spillable
+spillage
+spillage's
+spillages
+spillikin
+spillikins
+spillway
+spilosite
+spilth
+spinco
+spindly
+spindrift
+spinel
+spinelle
+spinescent
+spinet
+spinifex
+spinless
+spinneret
+spinnerette
+spinney
+spinneys
+spinodal
+spinoff
+spinor
+spinosely
+spinosity
+spinous
+spinout
+spinrad
+spinse
+spinsterhood
+spinsterish
+spinthariscope
+spinule
+spinulose
+spiracle
+spiracular
+spiraea
+spirant
+spirea
+spireme
+spirillum
+spiritism
+spiritist
+spiritistic
+spiritless
+spiritlessly
+spiritlessness
+spiritoso
+spiritous
+spiritualism
+spiritualist
+spiritualistic
+spiritualty
+spirituel
+spirituelle
+spirituous
+spirograph
+spirographic
+spirography
+spirogyra
+spirometer
+spirometer's
+spirometers
+spirometric
+spirometry
+spirt
+spirula
+spiry
+spital
+spitball
+spitted
+spitter
+spittoon
+spittoons
+splashboard
+splashdown
+splashdowns
+splashily
+splatter
+splayfoot
+splayfooted
+spleenful
+spleenwort
+spleeny
+splendent
+splendiferous
+splendiferously
+splendiferousness
+splendorous
+splendrous
+splenectomy
+splenetically
+splenic
+splenius
+splenomegaly
+splent
+spleuchan
+splore
+spluttery
+spodumene
+spoilable
+spoilsman
+spoilsport
+spoilt
+spokeshave
+spokespeople
+spokesperson
+spokesperson's
+spokeswoman
+spoliate
+spoliation
+spoliator
+spondaic
+spondee
+spondylitis
+sponson
+sponsorial
+spontoon
+spookily
+spookish
+spoondrift
+spooney
+spoonier
+spoonsful
+spoony
+spoor
+sporangial
+sporangiophore
+sporangium
+sporicidal
+sporicide
+sporiferous
+sporocarp
+sporocyst
+sporocystic
+sporogenesis
+sporogenic
+sporogenous
+sporogonic
+sporogonium
+sporogonos
+sporogony
+sporophore
+sporophyll
+sporophyte
+sporophytic
+sporopollenin
+sporotrichosis
+sporozoan
+sporozoite
+sportful
+sportfully
+sportfulness
+sportily
+sportsmanlike
+sportswoman
+sportswriting
+sporulate
+sporulation
+sporulative
+spottable
+spottily
+sprat
+spreadability
+spreadable
+sprent
+sprier
+spriest
+sprigging
+sprightful
+sprightfully
+sprightfulness
+sprigtail
+springal
+springald
+springbok
+springboks
+springe
+springily
+springtail
+springtails
+springtide
+springwood
+sprit
+spritsail
+sprucier
+sprucy
+spry
+spryer
+spryest
+spryly
+spryness
+spss
+spudded
+spudding
+spumone
+spumous
+spumy
+spunkie
+spunkier
+spunkily
+spunkiness
+spunky
+spurrey
+spurreys
+spurrier
+spurry
+spurtle
+sputa
+sputum
+spuyten
+squab
+squabs
+squadded
+squadding
+squalene
+squallier
+squally
+squama
+squamae
+squamate
+squamation
+squamosal
+squamose
+squamulose
+squaresville
+squarish
+squarishly
+squarishness
+squark
+squashberry
+squashily
+squattest
+squattier
+squatty
+squawbush
+squawroot
+squeegeeing
+squeezability
+squeezable
+squelchy
+squib
+squibs
+squidded
+squidding
+squiffed
+squiffy
+squiggle
+squiggled
+squiggles
+squiggling
+squiggly
+squilgee
+squill
+squilla
+squillae
+squills
+squinch
+squinnied
+squinny
+squinnying
+squinty
+squirarchy
+squirearchy
+squirish
+squoosh
+stabat
+stabber
+stabile
+stablemate
+stablish
+stablishment
+staddle
+stade
+stadia
+stadtholder
+stadtholderate
+stadtholdership
+stagecraft
+stagehand
+stagestruck
+stagey
+staggerbush
+staggery
+stagging
+staggy
+staghound
+stagily
+stagnancy
+stainability
+stainable
+stakeholder
+stakeout
+stalactitic
+stalagmite
+stalagmite's
+stalagmites
+stalagmitic
+stalkless
+stalky
+stallard
+stalworth
+staminal
+staminodium
+staminody
+stammel
+standardbred
+standaway
+standbys
+standee
+standeth
+standoffish
+standoffishly
+standoffishness
+standout
+standpat
+standpatter
+standpattism
+standpipe
+stang
+stanite
+stannard
+stannaries
+stannary
+stanzaic
+stapedectomy
+stapedes
+stapedial
+stapelia
+stapes
+staph
+staphylinid
+staphylococcal
+staphylococcic
+starbird
+starchily
+stardust
+starets
+starless
+starlike
+starlit
+starre
+starveling
+stases
+statable
+statant
+stateable
+statecraft
+statedly
+statehouse
+stateside
+statical
+statice
+stational
+stationarily
+statism
+statist
+stato
+statoblast
+statocyst
+statolatry
+statolith
+stator
+stators
+statoscope
+statutable
+statz
+staurolite
+staurolitic
+stavesacre
+stavropoulos
+steamroll
+steamroller
+steapsin
+stearate
+stearic
+stearin
+stearine
+steatite
+steatitic
+steatolysis
+steatopygia
+steatopygic
+steelhead
+steelie
+steelwork
+steelworker
+steelworks
+steelyard
+steenbok
+steeplechase
+steeplechaser
+steeplejack
+steerable
+steerage
+steerageway
+steersman
+steeve
+steeving
+steffens
+stegosaur
+stegosaurus
+steichen
+steinbecks
+stela
+stelae
+stelar
+stele
+stellate
+stelliform
+stellify
+stemless
+stemma
+stemmata
+stemmer
+stemmier
+stemmy
+stemson
+stemware
+stenchful
+stenchy
+steno
+stenobathic
+stenograph
+stenographic
+stenographically
+stenohaline
+stenophagous
+stenos
+stenosed
+stenosis
+stenotherm
+stenothermal
+stenothermy
+stenotic
+stenotopic
+stenotypist
+stenotypy
+stentor
+stentorian
+stentorophonic
+stephan
+stephanotis
+stepladder
+steplike
+stepparent
+steprelation
+steradian
+stercoraceous
+stere
+stereobate
+stereochemical
+stereochemically
+stereochemistry
+stereogram
+stereogram's
+stereograms
+stereograph
+stereographic
+stereographically
+stereoisomer
+stereoisomeric
+stereoisomerism
+stereoisomers
+stereological
+stereologically
+stereology
+stereometric
+stereomicroscope
+stereomicroscopic
+stereomicroscopically
+stereophonically
+stereophony
+stereophotographic
+stereophotography
+stereopsis
+stereopticon
+stereoregular
+stereoregularity
+stereoscope
+stereoscopic
+stereoscopically
+stereospecific
+stereospecifically
+stereospecificity
+stereotape
+stereotaxic
+stereotaxically
+stereotropism
+stereotypy
+steric
+sterically
+sterics
+sterigma
+sterilant
+sterios
+sterlet
+sterna
+sternforemost
+sternite
+sternmost
+sternocostal
+sternpost
+sternson
+sternutation
+sternutator
+sternutatory
+sternward
+sternwards
+sternway
+steroidal
+steroidogenesis
+steroidogenic
+sterol
+stertor
+stertorous
+stertorously
+stet
+stethoscopic
+stethoscopically
+stetted
+stettin
+stetting
+stevie
+stewpan
+stibine
+stibnite
+stichomythia
+stichomythic
+stichomythy
+stickball
+stickful
+stickhandler
+stickit
+stickseed
+sticktight
+stickum
+stickup
+stickweed
+stickwork
+sticle
+sticy
+stidger
+stiffish
+stigmal
+stigmasterol
+stigmatic
+stigmatically
+stigmatism
+stigmatist
+stilbene
+stilbestrol
+stilbite
+stillman
+stillroom
+stillwater
+stillwell
+stilly
+stime
+stimulator
+stimulators
+stingaree
+stingily
+stingless
+stingray
+stingray's
+stingrays
+stinkard
+stinkbug
+stinkbug's
+stinkbugs
+stinkhorn
+stinkpotters
+stinkstone
+stinkweed
+stinkwood
+stion
+stioning
+stipe
+stiped
+stipel
+stipellate
+stipendiary
+stipes
+stipitate
+stipites
+stipular
+stipulator
+stipulatory
+stipule
+stipuled
+stirabout
+stirk
+stirp
+stirpes
+stirps
+stitchery
+stithies
+stithy
+stoat
+stoat's
+stoats
+stockbreeder
+stockbrokerage
+stockbroking
+stockcar
+stockily
+stockinet
+stockinette
+stockish
+stockist
+stockkeeper
+stockman
+stockpot
+stockproof
+stocktaking
+stockyard
+stockynges
+stodge
+stodgily
+stodging
+stogie
+stogies
+stogy
+stoical
+stoically
+stoichiometrically
+stokehold
+stokehole
+stokesia
+stolidity
+stoll
+stollen
+stollens
+stolon
+stolonate
+stoloniferous
+stoloniferously
+stolzenbach
+stoma
+stomachache
+stomachic
+stomachically
+stomachy
+stomal
+stomas
+stomata
+stomatal
+stomate
+stomatitis
+stomatologic
+stomatological
+stomatologist
+stomatology
+stomatopod
+stomodaeal
+stomodaeum
+stomodeal
+stomodeum
+stonecrop
+stonecutting
+stonemasonry
+stonework
+stoneworker
+stoney
+stonyhearted
+stonyheartedness
+stoolie
+stoopball
+stopband
+stope
+stopes
+stoplight
+stoplights
+stopple
+stoppled
+stoppling
+storable
+storax
+storefront
+storefront's
+storefronts
+storeria
+storeship
+storewide
+storksbill
+stormily
+storybook
+storybooks
+storytelling
+storywriter
+stouthearted
+stoutheartedly
+stoutheartedness
+stoutish
+stovepipe
+stovepipes
+stowaway
+stowaway's
+stowaways
+stowe
+stowey
+strabismic
+strabismus
+strafaci
+stragglier
+straggly
+straightbred
+straightedge
+straightish
+straightjacket
+straightlaced
+strainometer
+strainometer's
+strainometers
+straitjacket
+straitlaced
+straitlacedly
+straitlacedness
+strake
+stram
+stramash
+stramonium
+stranahan
+strandline
+stranglehold
+strangury
+straphang
+straphanger
+strapless
+strappado
+strapper
+strategical
+strath
+strathspey
+strathspeys
+strati
+straticulate
+stratiform
+stratocracy
+stratocumulus
+stratus
+stravage
+stravinsky
+strawboard
+strawman
+streakier
+streakiness
+streaky
+streambed
+streamlet
+streamside
+streek
+streetwalker
+streetwalking
+strengthless
+strengthlessness
+strenuosity
+strep
+streptobacillus
+streptococcal
+streptococcic
+streptokinase
+streptolysin
+streptomyces
+streptomycete
+streptothricin
+stressless
+stresslessness
+stressor
+stretchability
+stretta
+stretti
+stretto
+strettos
+strewment
+stria
+striae
+strick
+strickle
+strickled
+strickling
+stridden
+stridence
+stridor
+stridulate
+stridulation
+stridulatory
+stridulous
+stridulously
+strifeless
+strigil
+strigose
+strikebound
+strikeless
+strikeout
+strikeover
+stringboard
+stringcourse
+stringency
+stringendo
+stringhalt
+stringhalted
+stringless
+stringpiece
+stripeless
+stripfilm
+stripier
+stripling
+strippable
+stript
+stripy
+strobila
+strobilar
+strobilation
+strobile
+strobilus
+stroboscope
+stroboscopically
+strobotron
+stroma
+stromal
+stromata
+stromatal
+stromatic
+stromatolite
+stromatolitic
+stromeyerite
+strongbox
+strongheart
+strongish
+strontia
+strontianite
+strontic
+strophanthin
+strophic
+strophoid
+stroud
+strouding
+strow
+strowing
+structuralism
+structureless
+structurelessness
+strudel
+struma
+strumae
+strumas
+strummer
+strumose
+strumpet
+strunt
+struthious
+strychninism
+stubblefield
+stubblefields
+stubbly
+stuccoes
+stuccowork
+studbook
+studbooks
+studding
+studentship
+studentships
+studhorse
+stuffily
+stuffless
+stull
+stum
+stumblebum
+stumer
+stumming
+stunner
+stunsail
+stupa
+stupe
+stupefacient
+stupefaction
+stuporous
+sturch
+sturdily
+sturley
+sturt
+stye
+styes
+stying
+styka
+stylebook
+styleless
+stylelessness
+stylet
+styliform
+stylite
+stylitic
+stylobate
+stylograph
+stylographic
+stylographical
+stylographically
+stylography
+styloid
+stylolite
+stylopodium
+stymieing
+styptic
+styrax
+suability
+suably
+suasion
+suasive
+suasively
+suasiveness
+subacid
+subacidly
+subacidness
+subacute
+subacutely
+subadar
+subadult
+subaerial
+subaerially
+subagency
+subagent
+subahdar
+subalpine
+subalternate
+subalternately
+subalternation
+subantarctic
+subapical
+subaquatic
+subaqueous
+subarctic
+subarea
+subatmospheric
+subaudible
+subaudition
+subaverage
+subbase
+subbasement
+subcabinet
+subcapsular
+subcelestial
+subcellular
+subcentral
+subcentrally
+subchaser
+subchloride
+subclavian
+subclimax
+subclinical
+subclinically
+subcollegiate
+subcommunity
+subcompact
+subcontinental
+subcontractor
+subcontraoctave
+subcontrariety
+subcontrary
+subcool
+subcordate
+subcortex
+subcortical
+subcritical
+subcrustal
+subcultural
+subcutaneous
+subcutaneously
+subdeacon
+subdeb
+subdebutante
+subdepot
+subdiaconate
+subdividable
+subdominance
+subdominant
+subedit
+subeditor
+subeditorial
+subemployed
+subemployment
+subentries
+subentry
+subepidermal
+subepidermally
+suberect
+subfamilies
+subfamily
+subfix
+subfossil
+subfreezing
+subgenus
+subglacial
+subglacially
+subglottal
+subgrade
+subgrammar
+subgross
+subhead
+subheading
+subhuman
+subhumanity
+subi
+subic
+subinfeud
+subinfeudate
+subinfeudation
+subinfeudatory
+subirrigate
+subirrigation
+subito
+subj
+subjacency
+subjacent
+subjacently
+subjectivism
+subjectivistic
+subjectless
+subjoin
+subjugator
+subjunction
+subjunctive
+subkingdom
+sublate
+sublated
+sublating
+sublation
+sublet
+sublethal
+sublethally
+sublevel
+sublicense
+sublicensed
+sublicenser
+sublicenses
+sublicensing
+sublieutenant
+sublimable
+sublimity
+sublingual
+subliterature
+sublittoral
+sublunar
+subluxation
+submandibular
+submarginal
+submarginally
+submaxilla
+submaxillary
+submediant
+submergence
+submergible
+submerse
+submersed
+submersing
+submersion
+submicrogram
+submicrogram's
+submicrograms
+submicron
+submicroscopic
+submicroscopically
+subminiature
+submiss
+submitochondrial
+submitter
+submitters
+submontane
+submucosa
+submucosal
+submucosally
+submucous
+submultiple
+subnormality
+suboceanic
+subopposite
+suboptimum
+suborbicular
+suborbital
+suborder
+suborn
+subornation
+suborned
+suborner
+suborning
+suborns
+subovate
+suboxide
+suboxides
+subpar
+subparallel
+subphylum
+subplot
+subplots
+subpolar
+subpotency
+subpotent
+subprincipal
+subprofessional
+subreption
+subreptitious
+subreptitiously
+subring
+subrogate
+subsaline
+subsatellite
+subsaturated
+subsaturation
+subsectio
+subserve
+subserviency
+subshrub
+subshrubby
+subsidence
+subsidiarily
+subsonic
+subsonically
+subspecific
+substage
+substanceless
+substandard
+substantiality
+substantival
+substantivally
+substation
+substations
+substituent
+substituents
+substitutional
+substitutionally
+substratosphere
+substratospheric
+substructural
+subsumption
+subteen
+subtemperate
+subtenancy
+subtenant
+subtend
+subterminal
+subterraneous
+subtetanic
+subthreshold
+subtile
+subtilely
+subtileness
+subtiler
+subtilest
+subtilis
+subtilisin
+subtilty
+subtonic
+subtotal
+subtropic
+subtropical
+subtropics
+subulate
+subvention
+subventionary
+subversionary
+subviral
+subvocal
+subvocally
+succedaneous
+succedaneum
+succedent
+successional
+successionally
+succinate
+succinyl
+succinylcholine
+succory
+succotash
+succuba
+succubi
+succulence
+succulent
+succulently
+suchlike
+sucrase
+sucre
+sucrose
+suctional
+suctorial
+suctorian
+sudanic
+sudatorium
+sudatory
+sudoriferous
+sudorific
+sudsier
+sudsless
+sudsy
+suede
+suet
+suey
+suff
+sufferable
+sufferableness
+sufferably
+suffixation
+suffragan
+suffragist
+suffragists
+sugarcane
+sugarcoat
+sugarhouse
+sugarloaf
+sugarplum
+sugary
+suint
+sukarno
+sukiyaki
+sulamite
+sulamith
+sulcate
+sulci
+sulcus
+sulfa
+sulfadiazine
+sulfanilamide
+sulfatase
+sulfatide
+sulfatides
+sulfhydryl
+sulfinyl
+sulfitic
+sulfonate
+sulfonation
+sulfone
+sulfonic
+sulfonium
+sulfonmethane
+sulfonyl
+sulfonylurea
+sulfoxide
+sulfureous
+sulfureously
+sulfureousness
+sulfuret
+sulfuryl
+sullage
+sulphurou
+sulphurous
+sultanate
+sultaness
+sultrily
+sulzberger
+sumach
+summa
+summability
+summable
+summae
+summated
+summates
+summating
+summational
+summerhouse
+summersault
+summerwood
+summery
+sumptuary
+sunay
+sunbath
+sunbathe
+sunbather
+sunbird
+sunbow
+sunburst
+sunbursts
+sundae
+sundaes
+sundew
+sundrops
+sunfast
+sunlamp
+sunless
+sunn
+sunna
+sunnily
+sunroof
+sunscald
+sunscreen
+sunscreen's
+sunscreening
+sunscreens
+sunstroke
+sunstruck
+sunsuit
+suntanning
+sunup
+sunward
+sunwards
+sunwise
+superable
+superableness
+superably
+superabound
+superabundance
+superabundant
+superabundantly
+superadd
+superaddition
+superagency
+superaltern
+superannuate
+superannuated
+superannuation
+superblock
+supercalender
+supercargo
+supercharge
+supercharger
+superciliary
+supercity
+superconduct
+superconducting
+superconductive
+superconductivity
+superconductor
+superconductors
+supercool
+superdominant
+superelevate
+superelevation
+supereminence
+supereminent
+supereminently
+superempirical
+superencipher
+superencipherment
+supererogation
+supererogatory
+superfamily
+superfecundation
+superfetation
+superficies
+superfine
+superfix
+superfluid
+superfluidity
+supergalaxy
+supergene
+supergiant
+superheat
+superheater
+superheats
+superheterodyne
+superhighway
+superhumanity
+superieure
+superimposable
+superimposition
+superincumbent
+superincumbently
+superindividual
+superinduce
+superinduction
+superinfection
+superintendence
+superintendency
+superjacent
+superjet
+superliner
+superluminal
+superlunar
+superman
+supernal
+supernally
+supernaturalist
+supernaturalistic
+supernormality
+supernovae
+supernumerary
+superorder
+superordinate
+superorganism
+superovulation
+superparasitism
+superpatriot
+superpatriotic
+superpatriotism
+superphosphate
+superphysical
+superpower
+superpowered
+superpowers
+supersaturate
+supersaturated
+supersaturation
+superscribe
+superscription
+supersedeas
+supersedure
+supersensible
+supersensory
+superserviceable
+supersession
+supersessive
+supersonically
+superstar
+superstratum
+supersubstantial
+supersubtle
+supersubtlety
+supersystem
+supertanker
+supertax
+supertonic
+supervenience
+supervenient
+supervention
+supervisee
+supinate
+supination
+supinator
+suppl
+supplantation
+supplejack
+suppletion
+suppletive
+suppletory
+suppliance
+suppliant
+suppliantly
+supplicant
+supplicant's
+supplicantly
+supplicants
+supplicatory
+supportability
+supportableness
+supportably
+supposably
+supposal
+suppositional
+suppositionally
+suppositious
+supposititious
+supposititiously
+supposititiousness
+suppositive
+suppositively
+suppositories
+suppository
+suppressant
+suppressibility
+suppurate
+suppuration
+suppurative
+supr
+supraglottal
+supralaryngeal
+supraliminal
+supraliminally
+supramolecular
+supranationalist
+supranationality
+supraorbital
+supraprotest
+suprarational
+suprarenal
+supravital
+supravitally
+supremum
+surah
+surbase
+surbased
+surcingle
+surcliffe
+surcoat
+surcoats
+surefire
+surefooted
+surefootedly
+surefootedness
+suretyship
+surfable
+surfboard
+surfboarder
+surfboards
+surfboat
+surfboats
+surficial
+surfperch
+surg
+surjection
+surjective
+surlily
+surmountable
+surmullet
+surpassable
+surplice
+surplusage
+surprint
+surprisal
+surra
+surrealistic
+surrealistically
+surrebutter
+surrejoinder
+surroyal
+surtout
+surveil
+survivable
+survivance
+susceptance
+susceptive
+susceptiveness
+susceptivity
+suspenseful
+suspensoid
+suspensory
+suspiration
+suspire
+suspired
+suspiring
+susquehanna
+sustentacular
+sustentation
+sustentative
+sustention
+susurrant
+susurration
+susurrous
+susurrus
+sutra
+suttee
+sutural
+suturally
+suzerain
+suzerainty
+swabber
+swabbie
+swadesh
+swage
+swagging
+swagman
+swainish
+swainishness
+swale
+swallowable
+swallowtail
+swallowwort
+swang
+swanherd
+swankily
+swannery
+swanning
+swansdown
+swanskin
+swartz
+swashbuckle
+swashbuckler
+swashbuckling
+swayback
+swaybacked
+swearword
+sweatbox
+sweatily
+sweatpants
+sweatshop
+sweatshop's
+sweatsocks
+sweazey
+sweepback
+sweepier
+sweepy
+sweetbread
+sweetbread's
+sweetbreads
+sweetbrier
+sweetmeat
+sweetshop
+sweetsop
+swellhead
+swellheaded
+swellheadedness
+swelter
+sweltered
+swidden
+swigger
+swill
+swiller
+swimmable
+swimmeret
+swimmier
+swimmily
+swimminess
+swimmy
+swinburne
+swineherd
+swingably
+swinge
+swingeing
+swingletree
+swishingly
+switchable
+switchback
+switchback's
+switchbacks
+switcheroo
+switchgrass
+switchyard
+swith
+swither
+swivet
+swoosh
+swop
+swordfight
+swordfight's
+swordfights
+swordlike
+swordsman
+swordsmanship
+swot
+swots
+swotted
+swotting
+sybarite
+sybaritically
+sybert
+sycamine
+syce
+sycee
+syconium
+sycophancy
+sycophantish
+sycophantishly
+sycophantism
+sycosis
+syenite
+syenitic
+syllabarium
+syllabary
+syllabically
+syllabicate
+syllabication
+syllabub
+syllepsis
+sylleptic
+syllogist
+syllogistically
+sylph
+sylphid
+sylphlike
+sylvanite
+sylvatic
+sylviculture
+sylvie
+sylvine
+sylvite
+sym
+symbiontic
+symbiote
+symbiotically
+symbolist
+symbolistic
+symbology
+symington
+symmetallism
+symonds
+sympathin
+sympatholytic
+sympathomimetic
+sympatric
+sympatrically
+sympatry
+sympetalous
+sympetaly
+symphonically
+symphonious
+symphoniously
+symphonist
+symphyseal
+symphysial
+symphysis
+symplectic
+sympodial
+sympodially
+symposiarch
+symposiast
+symptomatically
+symptomatologic
+symptomatological
+symptomatologically
+symptomless
+synaeresis
+synaesthesis
+synagog
+synagogal
+synalepha
+synaloepha
+synapsis
+synaptically
+synaptosomal
+synaptosome
+synarthrodial
+synarthrodially
+synarthrosis
+sync
+syncarpous
+syncarpy
+synch
+synching
+synchro
+synchroflash
+synchromesh
+synchronal
+synchroneity
+synchronic
+synchronical
+synchronically
+synchronistic
+synchros
+synchroscope
+syncing
+synclinal
+syncline
+syncopal
+syncopator
+syncope
+syncretic
+syncretism
+syncretist
+syncretistic
+syncytial
+syncytium
+syndactylism
+syndactyly
+syndesis
+syndesmosis
+syndesmotic
+syndetic
+syndetically
+syndical
+syndicalism
+syndicalist
+syndicator
+syne
+synecdoche
+synecdochic
+synecdochical
+synecdochically
+synecologic
+synecological
+synecologically
+synecology
+synectic
+synectically
+synectics
+synephrine
+syneresis
+synergetic
+synergic
+synergically
+synergid
+synergist
+synergistically
+synesis
+syngamy
+syngeneic
+synizesis
+synkaryon
+synodal
+synodic
+synodical
+synonymic
+synonymical
+synonymist
+synonymity
+synoptical
+synoptically
+synostosis
+synovial
+synovitis
+synsepalous
+synthesist
+synthetase
+synthetical
+synthetically
+syntonic
+syntonically
+syphilis
+syphilologist
+syphilology
+syren
+syringa
+syringomyelia
+syringomyelic
+syrinx
+syrinxes
+syrphid
+sysgt
+syst
+systaltic
+systat
+systematical
+systematism
+systematist
+systemically
+systemless
+systemwide
+systole
+systolic
+syzygial
+syzygy
+tabac
+tabanid
+tabard
+tabbed
+tabellen
+tabernacular
+tabes
+tabetic
+tabla
+tablature
+tableaux
+tableful
+tablespoonsful
+tableware
+tabloid
+tabor
+tabored
+taborer
+taborers
+taborin
+taboring
+taborins
+tabors
+tabu
+tace
+tacet
+tach
+tachinid
+tachism
+tachist
+tachiste
+tachistoscope
+tachistoscopic
+tachistosopically
+tachs
+tachycardia
+tachygraphic
+tachygraphical
+tachygraphy
+tachylite
+tachymeter
+tachymeter's
+tachymeters
+tachyon
+tachyon's
+tachyons
+taciturn
+taciturnity
+tackboard
+tackier
+tackies
+tackifier
+tackify
+tackily
+tacky
+tacloban
+taconite
+tactician
+tactility
+taction
+tactless
+tactlessly
+tad
+tadpole
+taeniacide
+taeniasis
+tagalong
+tagboard
+tagine
+tagines
+taiga
+tailboard
+tailbone
+tailcoat
+tailcoated
+taille
+tailless
+taillight
+taillight's
+taillights
+taillike
+tailorbird
+tailoress
+tailpiece
+tailrace
+tailspin
+tailspin's
+tailspins
+tailwater
+tailwind
+tailwind's
+tailwinds
+taintless
+taipan
+taiwanese
+takedown
+takeout
+talc
+talcose
+talcum
+talebearer
+talebearing
+talentless
+talesman
+taleysim
+tali
+talipes
+talipot
+talisman
+talismanically
+talkathon
+talladega
+tallage
+tallahatchie
+tallahoosa
+tallboy
+tallchief
+talleyrand
+tallish
+tallith
+tallithim
+tallowy
+tallyman
+talmudic
+talmudical
+talus
+tam
+tamandua
+tamarau
+tamarin
+tamarisk
+tambala
+tambour
+tambourer
+tamburitza
+tameable
+tameless
+tampala
+tamperproof
+tampion
+tanager
+tanbark
+tance
+tangelo
+tangere
+tangibility
+tanglement
+tangram
+tanh
+tanka
+tankage
+tankful
+tannage
+tannate
+tannenbaum
+tannest
+tannic
+tannish
+tansies
+tansy
+tantalate
+tantalic
+tantalite
+tantara
+tantivy
+tantra
+tantric
+tapa
+tapeline
+tapeta
+tapetum
+taphole
+tapioca
+tapis
+tapley
+tappa
+taproom
+taprooms
+tapster
+tapsters
+tara
+taraday
+tarantara
+tarantism
+taras
+taraxacum
+tarboosh
+tarbush
+tardigrade
+tardo
+tare
+targe
+targo
+tarheelia
+tarlatan
+tarmac
+tarmacadam
+tarn
+tarnishable
+taro
+tarok
+taros
+tarot
+tarpaper
+tarragon
+tarrant
+tarre
+tarriance
+tarsal
+tarsi
+tarsier
+tarsus
+tartan
+tartarughe
+tartish
+tartishly
+tartlet
+tartlets
+tartrate
+tartrated
+tartrates
+tartuffe
+taruffi
+taskmistress
+taskwork
+tasse
+tassel
+tassel's
+tasso
+tastemaker
+tastily
+tat
+tatami
+tate
+tatian
+tatler
+tatras
+tatted
+tatterdemalion
+tattersall
+tattooist
+taui
+taupe
+taurine
+taurocholate
+taurocholic
+taurog
+taussig
+tautog
+tautologous
+tautologously
+tautomer
+tautomeric
+tautomerism
+tautonym
+tautonymic
+tautonymous
+tautonymy
+taverna
+taw
+tawdrily
+tawes
+tawie
+tawpie
+taws
+tawse
+taxa
+taxability
+taxeme
+taxemic
+taxidermic
+taxidermist
+taxidermist's
+taxidermists
+taxidermy
+taxies
+taximan
+taximeter
+taximeter's
+taximeters
+taxon
+taxonomist
+taxonomist's
+taxonomists
+taxons
+taxus
+taxying
+tazza
+tchaikovsky
+teachability
+teachably
+teachership
+teacupful
+teak
+teak's
+teaks
+teapoy
+teardown
+teargas
+tearier
+tearily
+tearjerker
+tearle
+tearless
+tearlessly
+tearlessnss
+tearoom
+tearooms
+tearstain
+tearstained
+teary
+teaspoonsful
+teatime
+teatro
+teazel
+teazle
+teazled
+technetronic
+technic
+technics
+technion
+technocracy
+technocrat
+technocratic
+technol
+technologic
+technostructure
+techy
+tecta
+tectal
+tectonism
+tectum
+tecum
+ted
+tedded
+tedding
+teds
+teenie
+teenier
+teentsier
+teentsy
+teeny
+teenybopper
+teepee
+teeter
+teeterboard
+teetotal
+teetotalism
+teetotalist
+teetotum
+tegmen
+tegmental
+tegmentum
+tegument
+tegumental
+tegumentary
+teiid
+tektitic
+tel
+telamon
+telamones
+telangiectasia
+telangiectasis
+telangiectatic
+tele
+telecamera
+telecast
+telecaster
+telecourse
+teledu
+telefacsimile
+telefilm
+teleg
+telegony
+telegraphese
+telegraphically
+telegraphist
+telekinetic
+telekinetically
+teleman
+telemann
+telemark
+telemetrically
+telencephalic
+telencephalon
+teleologic
+teleologist
+teleost
+teleostean
+teleostome
+telephonically
+telephonist
+telephonists
+telephoto
+telephotographic
+teleplay
+teleran
+telescopically
+telesis
+telethermoscope
+telethon
+teletypesetting
+teletypewrite
+teletypewriter
+teletypist
+teleutospore
+teleutosporic
+teleview
+televiewer
+televisionally
+televisionary
+televisual
+telia
+telial
+telic
+telically
+teliospore
+teliosporic
+telium
+telli
+tellurian
+telluric
+telluride
+tellurite
+tellurometer
+tellurometer's
+tellurometers
+tellurous
+telly
+telocentric
+teloic
+telome
+telophase
+telos
+telotaxis
+telpher
+telson
+temblor
+temerarious
+temerariously
+temerariousness
+tempeh
+tempera
+temperable
+tempi
+templeman
+templet
+temporality
+temptable
+tempura
+tenability
+tenably
+tenace
+tenaculum
+tenantable
+tenantless
+tenantry
+tench
+tenches
+tenda
+tendance
+tendencious
+tendentious
+tendentiously
+tendentiousness
+tenderhearted
+tenderheartedly
+tenderheartedness
+tenderometer
+tenderometer's
+tenderometers
+tendinous
+tendresse
+tendril
+tendrilous
+tendrils
+tenebrific
+tenebrionid
+tenebrious
+tenebrism
+tenebrist
+tenementary
+tenenbaum
+tenesmus
+tenex
+tenia
+teniacide
+teniasis
+tennist
+tenosynovitis
+tenour
+tenpenny
+tenpin
+tenpins
+tenpounder
+tenrec
+tensility
+tensimeter
+tensimeter's
+tensimeters
+tensiometer
+tensiometer's
+tensiometers
+tensiometric
+tensiometry
+tensity
+tensometer
+tensometer's
+tensometers
+tentacular
+tentage
+tenterhook
+tenterhooks
+tentie
+tentless
+tentmaker
+tenty
+tenuis
+tenuity
+tenurial
+tenurially
+tenuto
+teocalli
+teonanacatl
+teosinte
+tepa
+tepee
+tephra
+tepidity
+ter
+terai
+teraph
+teraphim
+teratogen
+teratogenesis
+teratogenicity
+teratologic
+teratological
+teratologist
+teratoma
+teratomatous
+terce
+tercentenary
+tercentennial
+tercept
+tercet
+terebene
+terebic
+terebinth
+terebinthine
+tered
+teredines
+teredo
+terephthalate
+terest
+terete
+terga
+tergal
+tergite
+tergiversate
+tergiversation
+tergiversator
+tergum
+teriyaki
+termagant
+termagantly
+terminably
+terminational
+termined
+termining
+terminism
+termitarium
+termless
+termtime
+ternate
+ternately
+terneplate
+terpene
+terpeneless
+terpenic
+terpenoid
+terpineol
+terpolymer
+terr
+terrae
+terram
+terrane
+terraqueous
+terrarium
+terrazzo
+terrene
+terreplein
+terret
+terricolous
+terrifically
+terrigenous
+territorialism
+territorialist
+territoriality
+terrorless
+tertre
+tervalent
+tery
+tessera
+tessie
+tessitura
+testa
+testacean
+testaceous
+testacy
+testae
+testatrix
+testcross
+testis
+teston
+testoon
+testosterone
+testudo
+tetanal
+tetanic
+tetanically
+tetany
+tetartohedral
+tetched
+tetchier
+tetchy
+tete
+teter
+teth
+tetherball
+tetra
+tetrabasic
+tetrabasicity
+tetracaine
+tetrachord
+tetracid
+tetrad
+tetradecyl
+tetradic
+tetradrachm
+tetradymite
+tetradynamous
+tetraethyl
+tetraethyllead
+tetragonolobus
+tetragrammaton
+tetrahedrite
+tetrahydrate
+tetrahydrated
+tetrahydrocannabinol
+tetrahydrofuran
+tetrahydroxy
+tetrahymena
+tetralogy
+tetramer
+tetramer's
+tetrameric
+tetramerous
+tetramers
+tetrameter
+tetramethyl
+tetramethyllead
+tetraploid
+tetraploidy
+tetrapod
+tetrapyrrole
+tetrarch
+tetrarchic
+tetrarchy
+tetraspore
+tetrasporic
+tetratomic
+tetrazolium
+tetrode
+tetrodes
+tetrodotoxin
+tetrxide
+tetryl
+tetter
+tewfik
+textbookish
+textuary
+thalamencephalon
+thalamic
+thalamically
+thalamus
+thalassemia
+thalassemic
+thalassic
+thalassocracy
+thalassocrat
+thaler
+thalidomide
+thalli
+thallic
+thalloid
+thallophytic
+thallous
+thallus
+thalluses
+thames
+thane
+thaneship
+thankworthy
+thar
+thaumaturge
+thaumaturgic
+thaumaturgist
+thaumaturgy
+theast
+theat
+theatricalism
+theatricality
+theca
+thecae
+thecal
+thecate
+thecodont
+thee
+theelin
+theelol
+theist
+theist's
+theistical
+theistically
+theists
+thematically
+thenar
+thenceforward
+thenceforwards
+theobromine
+theocentric
+theocentricity
+theocentrism
+theocrat
+theocratic
+theocratical
+theocratically
+theodicy
+theodolite
+theodolitic
+theodosius
+theogonic
+theogony
+theol
+theolog
+theologic
+theologue
+theonomous
+theonomously
+theonomy
+theophanic
+theophany
+theophylline
+theorematic
+theosophical
+theosophically
+theosophist
+theosophy
+therapeusis
+therapeutically
+therapeutist
+therapsid
+thereabout
+thereat
+thereinafter
+thereinto
+thereunto
+therewithal
+theriac
+theriaca
+theriacal
+theriomorphic
+therm
+thermae
+thermalization
+thermalize
+thermalized
+thermalizes
+thermalizing
+thermic
+thermically
+thermion
+thermite
+thermite's
+thermochemical
+thermochemist
+thermochemistry
+thermocline
+thermocoagulation
+thermoduric
+thermodynamical
+thermodynamicist
+thermoelectron
+thermoelement
+thermoform
+thermoformable
+thermogram
+thermogram's
+thermograms
+thermograph
+thermographic
+thermographically
+thermography
+thermohaline
+thermojunction
+thermolabile
+thermolability
+thermoluminescence
+thermoluminescent
+thermolysis
+thermolytic
+thermomagnetic
+thermomagnetically
+thermometrically
+thermoperiodicity
+thermoperiodism
+thermophile
+thermophilic
+thermophilous
+thermoplasticity
+thermopylae
+thermoreceptor
+thermoregulation
+thermoregulator
+thermoregulatory
+thermoremanence
+thermoremanent
+thermoscope
+thermoset
+thermosphere
+thermospheric
+thermostability
+thermostatically
+thermotactic
+thermotaxis
+thermotropic
+thermotropism
+theroelectricity
+thesaural
+thetic
+thetically
+theurgic
+theurgical
+theurgist
+theurgy
+thew
+thiabendazole
+thiaminase
+thiamine
+thiazide
+thiazine
+thiazole
+thickety
+thickhead
+thickheaded
+thickset
+thievery
+thievish
+thievishly
+thievishness
+thighbone
+thigmotaxis
+thigmotropism
+thill
+thills
+thimbleberry
+thimbleful
+thimbleful's
+thimblerig
+thimblerigger
+thimblesful
+thimbleweed
+thimerosal
+thinclad
+thingamabob
+thingumajig
+thingummy
+thiocarbamide
+thiocyanic
+thioguanine
+thiol
+thiolic
+thionate
+thionic
+thiopental
+thiophene
+thiophosphate
+thiosulfate
+thiosulfuric
+thiotepa
+thiouracid
+thiourea
+thir
+thiram
+thirdhand
+thirl
+thirstily
+thirtyfold
+thistly
+thitherto
+thitherward
+thixotropic
+thixotropy
+tho
+thod
+tholdy
+thole
+tholed
+tholeiite
+tholeiitic
+tholepin
+tholer
+tholes
+tholing
+thoraces
+thoracic
+thoracically
+thoracotomy
+thorax
+thoraxes
+thoria
+thorianite
+thoric
+thorite
+thornback
+thornbush
+thornless
+thornlike
+thoroughpin
+thoroughwort
+thoth
+thoughtway
+thousandfold
+thraldom
+thralldom
+thrasonical
+thrasonically
+thraw
+thrawart
+thrawn
+thrawnly
+threadfin
+threadiness
+threadless
+threadlike
+thready
+threepence
+threepences
+threepenny
+thremmatology
+threnode
+threnodic
+threnodist
+threnody
+threonine
+thriftily
+thriftless
+thriftlessly
+thriftlessness
+thrips
+thriven
+thro
+throatily
+throatlatch
+throbber
+throe
+thrombin
+thrombocyte
+thrombocytic
+thrombocytopenia
+thrombocytopenic
+thromboembolic
+thromboembolism
+thrombokinase
+thrombophlebitis
+thromboplastic
+thromboplastically
+thromboplastin
+thrombosed
+thrombospondin
+thrombotic
+throneberry
+throstle
+throttleable
+throttlehold
+throughither
+throughother
+throughway
+throve
+throwaway
+throwster
+thrustful
+thrustfulness
+thrustor
+thudded
+thumbhole
+thumbprint
+thumbprint's
+thumbprints
+thumbscrew
+thunderbird
+thundercloud
+thundercloud's
+thunderclouds
+thunderflower
+thunderhead
+thunderpeal
+thundershower
+thundershower's
+thundershowers
+thunderstone
+thunderstrike
+thunderstroke
+thurber
+thurible
+thurifer
+thurl
+thwartwise
+thwump
+thylacine
+thylakoid
+thyme
+thyme's
+thymectomy
+thymes
+thymey
+thymic
+thymidine
+thymine
+thymocyte
+thymol
+thymus
+thymy
+thyrglobulin
+thyrocalcitonin
+thyroidectomy
+thyroiditis
+thyrotoxicosis
+thyroxin
+thyrse
+thyrsi
+thyrsus
+thysanopteran
+thysanuran
+ti
+tial
+tiality
+tian
+tiara
+tiated
+tibial
+tiburon
+tical
+ticism
+tickicide
+ticklebrush
+tickseed
+ticktack
+ticktacktoe
+ticktock
+ticonderoga
+tictac
+tiddledywinks
+tiddlywinks
+tideless
+tidemark
+tideway
+tieback
+tieck
+tieing
+tieless
+tiemannite
+tien
+tiepin
+tierce
+tiercel
+tigerish
+tigerishly
+tigerishness
+tigerlike
+tightfisted
+tightrope
+tightwad
+tightwad's
+tightwads
+tightwire
+tiglon
+tigon
+tijuana
+tike
+tiki
+til
+tilapia
+tilefish
+tillandsia
+tillerman
+tillich
+tillie
+tilly
+tiltable
+tiltmeter
+tiltmeter's
+tiltmeters
+tiltyard
+timbal
+timbale
+timberhead
+timberline
+timberman
+timberwork
+timbral
+timbrel
+timbrelled
+timekeeper
+timekeeping
+timeous
+timeously
+timepleaser
+timesaving
+timeserver
+timeservers
+timeserving
+timework
+timeworker
+timmy
+timocracy
+timocratic
+timocratical
+timorous
+timorously
+timorousness
+timpani
+timpanist
+tinamou
+tinc
+tincal
+tinct
+tinctorial
+tinctorially
+tinderbox
+tinea
+tineal
+tineau
+tinful
+ting
+tingeing
+tingen
+tingly
+tinhorn
+tinkly
+tinman
+tinnitus
+tinstone
+tintinnabulary
+tintinnabulation
+tintless
+tintoretto
+tinwork
+tinworks
+tipcart
+tipi
+tippecanoe
+tippet
+tipsily
+tipstaff
+tipstaves
+tipster
+tipstock
+tirewoman
+tisane
+tissuey
+titaness
+titania
+titanically
+titaniferous
+titanism
+titanous
+titbit
+tithable
+tithonia
+titi
+titivate
+titivation
+titlark
+titleholder
+titleholders
+titlist
+titmice
+tito
+titrant
+titratable
+titrator
+titrimetric
+titrimetrically
+tittie
+tittivate
+tittle
+tittup
+toadstool
+toastmaster
+toastmaster's
+toastmasters
+toastmistress
+tobacconist
+tobacconist's
+tobacconists
+tobies
+toboggan
+toboggan's
+tobogganer
+tobogganing
+tobogganist
+toboggans
+tocher
+tocopherol
+tocsin
+tod
+toddies
+toddy
+toddy's
+todies
+tody
+toehold
+toehold's
+toeholds
+toeing
+toeless
+toepiece
+toeplate
+toff
+toffies
+toffy
+toft
+toga
+togaed
+toggery
+togue
+toile
+toiletry
+toilette
+toilful
+toilfully
+toilworn
+toke
+tokenism
+tokonoma
+tola
+toland
+tolbooth
+tolbutamide
+tole
+tolerator
+tolidine
+toling
+tollbooth
+tollbooth's
+tollbooths
+tolley
+tollman
+tollway
+tolu
+toluate
+toluic
+toluidine
+toluol
+tolyl
+tolylene
+tombac
+tombigbee
+tombless
+tombolo
+tomboy
+tomboyish
+tomboyishness
+tomcat
+tomcod
+tomentose
+tomentum
+tomfoolery
+tommyrot
+tomogram
+tomogram's
+tomograms
+tompion
+tomtit
+tonality
+tondi
+tondo
+toneme
+tonemic
+tonetic
+tonetically
+tonetics
+tonette
+tonga
+tongueless
+tonguelike
+tonically
+tonicity
+tonio
+tonn
+tonne
+tonneau
+tonneaus
+tonner
+tonnes
+tonometer
+tonometer's
+tonometers
+tonometric
+tonometry
+tonoplast
+tonsillar
+tonsillectomy
+tonsorial
+tonsure
+tonsured
+tonsuring
+tontine
+tonus
+toolbox
+toolboxes
+toolhead
+toolholder
+toolhouse
+toolroom
+toolshed
+toom
+toomey
+toon
+toothache
+toothache's
+toothaches
+toothless
+toothlike
+tooths
+toothsome
+toothsomely
+toothsomeness
+toothwort
+topcross
+topdressing
+tope
+topee
+topes
+topflight
+topful
+topfull
+topheavy
+tophi
+tophus
+topi
+topiary
+topicality
+topkick
+topknot
+topless
+toploftical
+toploftily
+toploftiness
+toplofty
+topmast
+topminnow
+topograph
+topographer
+topoi
+topologise
+topologist
+toponym
+toponymic
+toponymical
+toponymy
+topos
+topper
+topsail
+topstitch
+topwork
+toque
+tor
+torchbearer
+torchlight
+torchon
+torchwood
+toreador
+torero
+toreutic
+toreutics
+tormentil
+tormentor
+tornadic
+tornillo
+torpidity
+torquate
+torr
+torrens
+torrential
+torrentially
+torridity
+torsade
+torsi
+torte
+tortes
+torticollis
+tortilla
+tortious
+tortiously
+tortoni
+tortricid
+tortrix
+tortuosity
+torturous
+torturously
+torula
+tosh
+tosspot
+totalism
+totaquina
+totaquine
+totemically
+totemism
+totemist
+totemistic
+totemite
+tother
+totipotency
+totipotent
+toto
+tottery
+totting
+toucan
+touchback
+touchhole
+touchline
+touchmark
+touchwood
+toughie
+toughies
+toughy
+toulouse
+toupee
+touraco
+tourbillion
+tourbillon
+touristic
+touristically
+tourmaline
+tournedos
+tourney
+tourneyed
+tourneying
+tourneys
+tourniquet
+tourniquets
+touse
+tousing
+tovarich
+tovarish
+towage
+towerlike
+towhee
+towie
+towline
+towmond
+townee
+townies
+townlet
+townley
+townsfolk
+townspeople
+townswoman
+townwear
+towny
+towpath
+towrope
+towsley
+toxaphene
+toxemia
+toxemic
+toxicant
+toxicogenic
+toxicologic
+toxicological
+toxicologically
+toxicologist
+toxicology
+toxicosis
+toxigenic
+toxigenicity
+toxoid
+toxophilite
+toxophilites
+toxophily
+toxoplasma
+toxoplasmic
+toxoplasmosis
+toylike
+toynbee
+toyon
+trabeate
+trabeated
+trabeation
+trabecula
+trabecular
+trabeculate
+traceability
+traceably
+tracheae
+tracheal
+tracheary
+tracheate
+tracheated
+tracheid
+tracheidal
+tracheitis
+tracheobronchial
+tracheolar
+tracheole
+tracheophyte
+tracheotomy
+trachoma
+trachomatous
+trachyte
+trachytic
+tracklayer
+tracklaying
+trackman
+trackside
+trackwalker
+tractableness
+tractably
+tractarians
+tractate
+tractional
+tradable
+tradeable
+tradescantia
+tradespeople
+tradevman
+traditionary
+traditionless
+tradtionalist
+traduce
+traduced
+traducement
+traducer
+traducing
+trafficable
+tragacanth
+tragedienne
+tragi
+tragical
+tragicomedy
+tragicomical
+tragopan
+tragus
+trailblazer
+trailblazer's
+trailblazers
+trailblazing
+trailbreaker
+trailerable
+trailerist
+trailerite
+trailership
+trailhead
+trailhead's
+trailheads
+trailless
+trainability
+trainable
+trainband
+trainbearer
+traineeship
+trainferry
+trainful
+trainload
+trainload's
+trainloads
+trainsick
+traitoress
+traitress
+traject
+trajection
+tral
+tramcar
+tramline
+tramming
+tramontane
+trampoline
+trampoliner
+trampolining
+trampolinist
+tramroad
+trancelike
+trangam
+transactinide
+transactional
+transactor
+transamination
+transaxle
+transcendency
+transcendentalist
+transcriptional
+transcriptionally
+transcutaneous
+transduced
+transducing
+transductional
+transection
+transeptal
+transferase
+transferential
+transfiguration
+transfigure
+transfixion
+transformant
+transformants
+transformationalist
+transformative
+transfusible
+transfusional
+transglottal
+tranship
+transhumance
+transhumant
+transilluminate
+transillumination
+transilluminator
+transitio
+transitorily
+translatory
+translocate
+translocation
+transmarine
+transmembrane
+transmigrate
+transmigration
+transmigrator
+transmigratory
+transmissibility
+transmissive
+transmissivity
+transmissometer
+transmissometer's
+transmissometers
+transmontane
+transmountain
+transmutable
+transmutative
+transnational
+transnatural
+transonic
+transparence
+transpersonal
+transpicuous
+transpierce
+transplacental
+transplacentally
+transplantability
+transpolar
+transponder
+transpontine
+transportational
+transpositional
+transsexual
+transsexualism
+transshape
+transthoracic
+transthoracically
+transubstantial
+transubstantiate
+transubstantiation
+transudate
+transudation
+transude
+transuded
+transuding
+transuranic
+transuranium
+transvaluate
+transvaluation
+transvalue
+transvestism
+transylvania
+trapeze
+trapezist
+trapezius
+trapezohedron
+trapnest
+traprock
+trapshooter
+trapshooting
+trapunto
+trashman
+trass
+trattoria
+traumata
+traumatically
+traumatism
+trave
+travois
+travoises
+trawlerman
+trayal
+trayful
+treacle
+treacly
+treadless
+treadwell
+treasonably
+treasurable
+treasurership
+treatability
+treatable
+trebly
+trebuchet
+trebucket
+trecento
+tred
+tredecillion
+treece
+treehopper
+treeing
+treeless
+treenail
+trehalase
+trehalose
+treillage
+trekker
+trelliswork
+trematode
+tremolant
+tremolite
+tremolitic
+tremolo
+tremulant
+trenail
+trenchancy
+trendily
+trepan
+trepanation
+trepang
+trepanned
+trepanning
+trepans
+trephination
+trephine
+trephined
+trephining
+trepid
+trepidant
+treponema
+treponemal
+treponematosis
+treponematous
+treponeme
+tressel
+trestletree
+trestlework
+trews
+trey
+treys
+tri
+triacetate
+triacid
+triadically
+triage
+trialogue
+triangularity
+triarchy
+triaxial
+triaxiality
+triazine
+triazines
+trib
+tribalism
+tribasic
+triboelectric
+triboelectricity
+tribological
+tribologist
+tribology
+triboluminescence
+triboluminescent
+tribophysics
+tribrach
+tribrachic
+tribromide
+tribunate
+tribuneship
+tricarboxylic
+tricarpellary
+tricarpellate
+trice
+triceps
+tricepses
+triceratops
+trichiasis
+trichina
+trichinal
+trichinosis
+trichinous
+trichite
+trichlorfon
+trichloride
+trichocyst
+trichocystic
+trichogyne
+trichoid
+trichome
+trichomic
+trichomonacidal
+trichomonacide
+trichomonad
+trichomonadal
+trichomonal
+trichomoniasis
+trichopteran
+trichotomous
+trichotomously
+trichromat
+trichromatism
+trichrome
+trichuriasis
+tricing
+trickily
+trickish
+trickishly
+trickishness
+tricksier
+tricksiness
+tricksy
+triclad
+triclinic
+triclinium
+tricolette
+tricorn
+tricorne
+tricornered
+tricot
+tricotine
+tricotyledonous
+trictrac
+tricuspid
+tricycle
+tricycles
+tricyclic
+tridimensional
+tridimensionality
+triduum
+triene
+triennium
+trierarch
+trierarchy
+triethyl
+trifacial
+trifid
+trifluralin
+trifocal
+trifoliate
+trifoliolate
+trifolium
+triforium
+triform
+trifurcate
+trifurcation
+trigeminal
+triggerfish
+triggerman
+trigging
+triglyceride
+triglycerides
+triglyph
+triglyphic
+triglyphical
+trigon
+trigonometrical
+trigonometrically
+trigonous
+trigraph
+trigraphic
+trihybrid
+trihydroxy
+triiodothyronine
+trijet
+trilateral
+trilaterality
+trilaterally
+trilbies
+trilby
+trilinear
+trilingual
+trilingually
+triliteral
+triliteralism
+trillium
+trilobate
+trilobation
+trilobed
+trilocular
+triloculate
+trimaran
+trimble
+trimeric
+trimerous
+trimestral
+trimestrial
+trimeter
+trimetrogon
+trimonthly
+trimorph
+trimorphic
+trimorphism
+trimorphous
+trimotor
+trinal
+trinary
+trindle
+trindled
+trindling
+trine
+trinitrotoluene
+trinketry
+trinkums
+trinocular
+trinomial
+trinucleotide
+triol
+triolet
+triose
+tripack
+triphammer
+triphammer's
+triphammers
+triphenylmethane
+triphibian
+triphibious
+triphosphate
+triphthong
+triphthongal
+tripinnate
+tripinnately
+triplane
+tripletail
+triplicity
+triplite
+triploblastic
+triploid
+triploidy
+tripodal
+tripos
+tripper
+trippet
+triptane
+triquetrous
+triradiate
+trireme
+tris
+trisaccharide
+trisect
+trisection
+trisector
+triskele
+triskelion
+trismus
+trisoctahedron
+trisome
+trisomic
+trisomy
+triste
+tristearin
+tristeza
+tristful
+tristfully
+tristfulness
+tristimulus
+trisubstituted
+trisulfide
+trisyllabic
+trisyllabicall
+trit
+tritheism
+tritheist
+tritheistic
+tritheistical
+trithing
+tritiated
+triticale
+tritoma
+tritone
+triturable
+triturate
+trituration
+triturator
+triumvir
+triumviral
+triumvirate
+trivalve
+trivet
+triweekly
+trochaic
+trochal
+trochanter
+trochanteral
+trochanteric
+trochar
+troche
+trochee
+trochilus
+trochlea
+trochlear
+trochoid
+trochoidal
+trochophore
+troglodytic
+trogon
+trograd
+troilite
+trolleybus
+trollied
+trollies
+trolly
+trombidiasis
+trommel
+tromp
+trona
+trone
+troostite
+trop
+tropaeolum
+trope
+tropez
+trophallaxis
+trophically
+trophoblast
+trophoblastic
+trophozoite
+tropidoclonion
+tropistic
+tropologic
+tropological
+tropologically
+tropology
+tropomyosin
+tropopause
+tropophilous
+troposphere
+tropotaxis
+troth
+trothplight
+trotline
+trotsky
+trotskyism
+troubadour
+troubadour's
+troubadours
+troubleshot
+troublous
+troublously
+troublousness
+troupial
+trousseau
+trousseaus
+trousseaux
+troutier
+trouty
+trove
+trover
+trow
+truantry
+truckage
+truckee
+truckle
+truckled
+truckler
+truckline
+truckling
+truckload
+truckload's
+truckloads
+truckman
+truckmaster
+truculency
+trueborn
+truehearted
+trueheartedness
+trueing
+truelove
+truepenny
+truffle
+truffle's
+truffled
+truffles
+truistic
+trujillo
+trull
+trumpetlike
+trumpetweed
+truncheon
+truncheons
+trunkfish
+trunkful
+trunnel
+trunnion
+trunnions
+trustability
+trustable
+trustbuster
+trusteeing
+trustless
+trustworthily
+tryout
+trypanosome
+trypanosomiasis
+tryparsamide
+trypsinogen
+tryptamine
+tryptic
+tryptophan
+tryptophane
+trysail
+tryst
+trytophan
+tryworks
+tset
+tsetse
+tsetses
+tsunamic
+tsunematsu
+tubal
+tubbable
+tubbed
+tubber
+tubbier
+tubbing
+tubby
+tubeless
+tubelike
+tubercle
+tubercled
+tubercular
+tubercularly
+tuberculate
+tuberculated
+tuberculation
+tuberculin
+tuberculoid
+tuberculous
+tuberculously
+tuberose
+tuberosity
+tuberous
+tubful
+tubifex
+tubifexes
+tubificid
+tubocurarine
+tubularity
+tubulous
+tuchun
+tuckahoe
+tucket
+tuebor
+tuel
+tufa
+tufaceous
+tuff
+tuffaceous
+tuffet
+tufty
+tugboat
+tugger
+tui
+tuille
+tuitional
+tularemic
+tulation
+tulatory
+tule
+tulipwood
+tullibee
+tumblebug
+tumbledown
+tumblerful
+tumbleweed
+tumbrel
+tumbril
+tumefaciens
+tumefaction
+tumefactive
+tumescence
+tumescent
+tumidity
+tumoral
+tumorigenic
+tumorigenicity
+tumorlike
+tumorlike's
+tumorlikes
+tumorous
+tump
+tumpline
+tumultuary
+tumulus
+tunability
+tunably
+tundish
+tuneable
+tuneless
+tunesmith
+tungstic
+tungstite
+tunica
+tunicae
+tunicate
+tunicated
+tunicle
+tunnellike
+tunny
+tup
+tuppence
+tupping
+tuque
+tural
+turbanned
+turbellarian
+turbid
+turbidimeter
+turbidimeter's
+turbidimeters
+turbidimetric
+turbidimetrically
+turbidimetry
+turbidite
+turbidity
+turbidly
+turbidness
+turbinal
+turbit
+turbjet
+turbo
+turbocar
+turbocharge
+turbocharger
+turboelectric
+turboprop
+turbos
+turboshaft
+turbosupercharged
+turbosupercharger
+turbot
+turbots
+turbulency
+turd
+ture
+tured
+tureen
+turfman
+turfski
+turfskiing
+turfy
+turgescence
+turgescent
+turgidity
+turgor
+turion
+turmeric
+turnbuckle
+turncoat
+turndown
+turnery
+turnsole
+turnspit
+turnstile
+turnup
+turnverein
+turpentinic
+turpentinous
+turps
+turquois
+turtledove
+turtlehead
+turves
+tusche
+tush
+tusklike
+tussah
+tussive
+tussock
+tussocks
+tussocky
+tussore
+tutee
+tutees
+tutelar
+tutelary
+tutorage
+tutoress
+tutorship
+tutoyer
+tutti
+tux
+tuyere
+twae
+twangy
+tween
+tweet
+tweeter
+twelvefold
+twelvemonth
+twentyfold
+twerp
+twiggy
+twilit
+twinberry
+twinborn
+twinflower
+twingeing
+twinkly
+twinship
+twiny
+twirp
+twitchily
+twitted
+twittery
+twixt
+twofer
+twohandedness
+twopence
+twopences
+twopenny
+tyke
+tyke's
+tykes
+tymbal
+tympan
+tympani
+tympani's
+tympanic
+tympanis
+tympanites
+tympanitic
+tympanum
+tympanum's
+tympany
+typal
+typeable
+typecase
+typecast
+typefounder
+typefounding
+typefoundry
+typeout
+typey
+typhlosole
+typic
+typier
+typograph
+typologist
+typy
+tyramine
+tyrannosaur
+tyrannosaurus
+tyrannous
+tyrannously
+tyro
+tyrocidin
+tyrocidine
+tyros
+tyrosinase
+tyrothricin
+tzaddik
+tzaddikim
+tzar
+tzigane
+tzimmes
+tzitzis
+udall
+udder
+uglification
+uglify
+uglily
+ukulele
+ulama
+ulcerogenic
+ulcerous
+uldered
+ulema
+ulexite
+ullage
+ulna
+ulna's
+ulnar
+ulotrichous
+ulotrichy
+ultima
+ultimacy
+ultimo
+ultimogeniture
+ultrabasic
+ultracentrifugal
+ultrafashionable
+ultrafiche
+ultrafilter
+ultrafiltration
+ultrahigh
+ultraism
+ultraist
+ultraistic
+ultramafic
+ultramicro
+ultramicroscope
+ultramicroscopes
+ultramicrotome
+ultramicrotomes
+ultramicrotomy
+ultramodernist
+ultramontane
+ultramontanism
+ultranationalism
+ultranationalist
+ultrapure
+ultrapurely
+ultrasecret
+ultrasonicate
+ultrasonicated
+ultrasonicates
+ultrasonicating
+ultrastructural
+ultrastructurally
+ululant
+ululate
+ululation
+ulva
+umbel
+umbellate
+umbellifer
+umbelliferous
+umbilicate
+umbilicated
+umbilication
+umbonate
+umbones
+umbos
+umbrae
+umbrageous
+umbrageously
+umbrageousness
+umbral
+umlaut
+ump
+umpirage
+umpteen
+umpteenth
+un
+unaccountability
+unadapted
+unageing
+unalterability
+unamazed
+unamusing
+unanchor
+unanswerably
+unapologetic
+unappealable
+unappreciation
+unapproachably
+unarm
+unassailability
+unassailably
+unassertive
+unassuageable
+unattach
+unaverage
+unballasted
+unbandage
+unbar
+unbeautiful
+unbecome
+unbeknown
+unbelief
+unbeliever
+unbeseeming
+unbiblical
+unbid
+unbitted
+unblenched
+unblessed
+unbolt
+unbosom
+unbox
+unbrace
+unbraid
+unbridle
+unbroke
+unbuckle
+unbudgeable
+unbudgeably
+unbuild
+unbundle
+unburden
+uncage
+uncalculated
+uncalculatingly
+uncandid
+uncannily
+uncelebrated
+unchain
+unchallengeable
+unchancy
+unchangealeness
+uncharge
+unchaste
+unchastely
+unchasteness
+unchivalrous
+unchoke
+uncial
+uncially
+unciform
+uncil
+uncinaria
+uncinariasis
+uncinate
+uncinus
+uncircumcision
+unclamp
+unclasp
+unclassical
+unclench
+unclimbable
+unclimbableness
+unclinch
+uncloak
+unclog
+unclose
+unclothe
+unclutter
+uncock
+uncoffin
+uncoffined
+uncoil
+uncommercial
+uncompassionate
+uncompetitive
+uncompetitiveness
+uncomplicated
+uncompromisable
+unconformable
+unconformably
+uncongenial
+unconquerably
+unconscionability
+unconscionably
+unconstraint
+uncork
+uncorseted
+uncouple
+uncoupler
+uncross
+uncrown
+uncrumple
+unctuous
+unctuously
+unctuousness
+uncurl
+uncus
+uncut
+undauntable
+undebatably
+undecagon
+undeceive
+undecillion
+underact
+underactivity
+underage
+underbid
+underbidder
+underbody
+underbred
+underbrim
+undercarriage
+undercharge
+underclass
+undercoat
+undercoating
+undercook
+undercool
+underdo
+underdrawers
+underdress
+underdressed
+undereducation
+underexpose
+underexposure
+underfeed
+undergarment
+undergird
+underglaze
+underhand
+underinsurance
+underlaid
+underlayment
+underlet
+underlip
+undermanned
+undermost
+undernourished
+undernourishment
+undernutrition
+underpants
+underpart
+underpass
+underpasses
+underpin
+underplot
+underplots
+underpowered
+underproduction
+underproductive
+underproof
+underreport
+underripe
+underrun
+undersaturated
+undersecretariat
+undersell
+undersexed
+undershorts
+undershrub
+undersigned
+underskirt
+underslung
+undersong
+underspin
+understaffed
+understeer
+understory
+understrapper
+understrength
+undersupply
+undersurface
+undertenant
+undertone
+undertrick
+underused
+undervaluation
+undervalue
+undervaluing
+underwaist
+underweight
+underwing
+underwool
+undetectability
+undine
+undiplomatically
+undock
+undogmatic
+undouble
+undramatic
+undrape
+undraw
+undrunk
+undulant
+undulatory
+une
+unequivocably
+unexceptionable
+unexceptionableness
+unexceptionably
+unexceptional
+unexpressive
+unfancy
+unfasten
+unfeeling
+unfeelingly
+unfeelingness
+unfetter
+unfix
+unfixable
+unflappability
+unflappable
+unforgettability
+unforgiveable
+unforgiveably
+unfreeze
+unfriended
+unfrock
+unfussy
+ungenerosity
+ungenerous
+ungird
+unglue
+ungovernable
+ungrudging
+ungual
+unguard
+unguent
+ungulate
+unhair
+unhandiness
+unhandsome
+unhandy
+unharness
+unhitch
+unhitches
+unhitching
+unhood
+unhorse
+unhorsed
+unialgal
+uniaxial
+uniaxially
+unibuss
+unicameral
+unicamerally
+unicellular
+unicellularity
+unicycle
+unicyclist
+unifactorial
+unifiable
+unifoliate
+unifoliolate
+uniformitarian
+uniformitarianism
+unijugate
+unilinear
+unilingual
+unillusioned
+unilocular
+uninformative
+unintelligence
+uninucleate
+uninvaginated
+unionism
+unionist
+unionists
+uniparental
+uniparentally
+uniparous
+uniplanar
+uniplex
+unipolarity
+uniramous
+unisex
+unisexual
+unisexuality
+unisexually
+unitage
+unital
+unitarily
+unitarity
+universalist
+univocal
+univocally
+unkenned
+unkennel
+unlace
+unlade
+unlash
+unlatch
+unlay
+unlimber
+unlimbered
+unlimbering
+unlive
+unloose
+unloosen
+unman
+unmate
+unmating
+unmeaning
+unmeet
+unmemorable
+unmemorably
+unmitigatd
+unmoor
+unmoral
+unmorality
+unmuffle
+unmuzzle
+unmyelinated
+unnail
+uno
+unopenable
+unpackage
+unpackaging
+unpalatable
+unpeg
+unpeople
+unperfect
+unperson
+unpick
+unpile
+unpin
+unplug
+unpolitical
+unpregnant
+unprofessed
+unpronounced
+unquote
+unreel
+unreeve
+unregenerate
+unreserve
+unrestraint
+unriddle
+unrig
+unrip
+unrobe
+unroof
+unroot
+unrotate
+unround
+unrounded
+unsaddle
+unsafety
+unsaturate
+unsay
+unsayable
+unseal
+unsealing
+unseam
+unsearchable
+unsearchably
+unsel
+unselective
+unserviceable
+unset
+unsettle
+unsettlement
+unsew
+unsex
+unshackle
+unshapen
+unshell
+unshift
+unship
+unshockability
+unshockable
+unshped
+unsight
+unsighted
+unsling
+unslinged
+unslinging
+unsnarl
+unspeak
+unspeakably
+unsphere
+unsportsmanlike
+unstate
+unstep
+unstick
+unstop
+unstoppably
+unstrap
+unstring
+unstudied
+unsubstantial
+unsubstantiality
+unsuccess
+unswathe
+unswear
+unsymmetrical
+untangle
+untenability
+unter
+untether
+unthaw
+unthink
+unthinkability
+unthought
+unthread
+unthrone
+untimeous
+untouchability
+untraceability
+untread
+untruss
+untuck
+untune
+untwine
+untwist
+unutterable
+unvocal
+unvoice
+unwarrantably
+unweave
+unweeting
+unweetingly
+unweight
+unwell
+unwieldily
+unwinnable
+unwisdom
+unwish
+unwished
+unworthily
+unwreathe
+unyoke
+unzio
+unzip
+upas
+upbuild
+upbuilder
+upcast
+upchuck
+updo
+updos
+upgrowth
+upheave
+upheaver
+uphoster
+upmanship
+upmost
+upperpart
+upping
+uppish
+uppishly
+uppishness
+uppity
+uppityness
+uprear
+uprush
+upsetter
+upshift
+upspring
+upstage
+upstaged
+upstages
+upstaging
+upstart
+upstroke
+upsweep
+upswept
+upthrow
+upthrust
+uptight
+uptightness
+uptilt
+upwell
+uracil
+uraei
+uraemia
+uraeus
+uralite
+uralitic
+uranic
+uranide
+uraninite
+uranographic
+uranographical
+uranography
+uranological
+uranology
+uranometry
+uranous
+urate
+uratic
+urbanist
+urbanistic
+urbanistically
+urbanity
+urbanologist
+urbanology
+urbiculture
+urceolate
+ure
+urease
+uredinial
+uredinium
+urediospore
+uredium
+uredostage
+ureide
+uremic
+ureotelic
+ureotelism
+ureter
+ureteral
+ureteric
+urethan
+urethral
+urethritis
+urethroscope
+uric
+uricosuric
+uricotelic
+uricotelism
+uridine
+urinalysis
+urinogenital
+urinometer
+urinometer's
+urinometers
+urinous
+urochord
+urochordal
+urochordate
+urochrome
+urodele
+urogenital
+urokinase
+urol
+urolith
+urolithiasis
+urologic
+urological
+urologist
+urology
+uropod
+uropygial
+uropygium
+urostyle
+ursine
+urticaria
+urticarial
+urticate
+urtication
+urus
+urushiol
+usableness
+usance
+useably
+usernames
+useway
+usherette
+usnea
+usrio
+usufruct
+usufructuary
+ute
+uteca
+utep
+uterus
+uteruses
+utilitarianism
+utiny
+utopism
+utopist
+utopistic
+utricle
+utricular
+utricularia
+utriculus
+utterable
+uttium
+uvarovite
+uvea
+uveal
+uveitis
+uvula
+uvular
+uvularly
+uxorial
+uxoricide
+uxorious
+uxoriously
+uxoriousness
+vacationist
+vacationless
+vaccinal
+vaccinate
+vaccinated
+vaccinates
+vaccinator
+vaccinators
+vacua
+vacuolar
+vagabondage
+vagabondish
+vagabondism
+vagally
+vagarious
+vagariously
+vagile
+vagility
+vagotomy
+vagotonic
+vagotropic
+vagrancy
+vainglory
+valediction
+valerian
+valetudinarian
+valetudinarianism
+valetudinary
+valiance
+valiancy
+valine
+valise
+valises
+valle
+vallecular
+valorous
+valorously
+valuational
+valuationally
+valvular
+vamoose
+vamoosed
+vamooses
+vamoosing
+vampirism
+vampish
+vandalistic
+vanderburgh
+vandyked
+vanguardism
+vanguardist
+vanillic
+vanillin
+vanquishable
+vanquishment
+vanward
+vapid
+vapidity
+vapidly
+vapidness
+vaporous
+vaporously
+vaporousness
+vaquero
+variac
+variational
+variationally
+varices
+varicose
+varicosed
+varicosity
+variegator
+varietal
+varietally
+variform
+variocoupler
+varioloid
+variolous
+variometer
+variometer's
+variometers
+variorum
+varisized
+varix
+varlet
+varletry
+varnishy
+varsity
+varus
+varve
+varved
+vasal
+vascularity
+vasculature
+vasculum
+vaselike
+vasiform
+vasoactive
+vasoactivity
+vasoconstriction
+vasoconstrictive
+vasoconstrictor
+vasodilatation
+vasodilation
+vasodilator
+vasomotor
+vasopressin
+vasopressor
+vasospasm
+vasospastic
+vasotocin
+vassalage
+vastitude
+vastity
+vasty
+vatic
+vaticinal
+vaticinate
+vaticination
+vaticinator
+vatted
+vatting
+vaudevillian
+vaulty
+vauntful
+vauntingly
+vaunty
+vaward
+vealy
+vectograph
+vectographic
+vectorcardiogram
+vectorcardiogram's
+vectorcardiograms
+vectorcardiographic
+vectorcardiography
+vee
+veep
+veeries
+veery
+vegetably
+vegetal
+vegetarianism
+vegetational
+vegetationally
+vegete
+vegetive
+veinal
+veinlet
+veiny
+velamen
+velamentous
+velamina
+velarium
+veld
+velitation
+velleity
+veloce
+velocimeter
+velocimeter's
+velocimeters
+velocipede
+velodrome
+velopment
+velure
+velutinous
+velveteen
+venae
+venality
+venatic
+venation
+venational
+vendable
+vendace
+vendaces
+vendee
+vendibility
+vendibly
+vendition
+vendue
+veneeal
+venenate
+venenation
+venerability
+venerably
+venerator
+venereological
+venereologist
+venereology
+venerology
+venery
+venesection
+venetian
+venge
+venging
+venin
+venipuncture
+venire
+venireman
+venisection
+venography
+ventage
+ventail
+ventilatory
+ventless
+ventricose
+ventricular
+ventriculus
+ventriloquial
+ventriloquially
+ventriloquism
+ventriloquist
+ventriloquist's
+ventriloquistic
+ventriloquists
+ventriloquy
+ventrolateral
+ventrolaterally
+ventromedial
+ventura
+venturous
+venturously
+venturousness
+venule
+veratrine
+veratrum
+verbalism
+verbalist
+verbalistic
+verbena
+verbenas
+verbicide
+verbid
+verbify
+verbigeration
+verbile
+verdancy
+verderor
+verdigris
+verdin
+verdurous
+verdurousness
+vergil
+veridic
+veridicality
+verisimilar
+verisimilarly
+verisimilitudinous
+verism
+verismo
+verist
+veristic
+veritably
+verjuice
+vermeil
+vermian
+vermicelli
+vermicide
+vermicular
+vermiculate
+vermiculated
+vermiculation
+vermiform
+vermifuge
+vermillion
+verminosis
+verminous
+verminously
+vern
+vernacle
+vernacularism
+vernation
+vernicle
+vernissage
+versal
+verseman
+verset
+versicle
+versicular
+versification
+versifier
+versify
+versine
+versional
+verso
+versos
+verticality
+verticil
+verticillte
+vertiginous
+vertiginously
+vesical
+vesicant
+vesicate
+vesication
+vesicularity
+vesiculate
+vesiculation
+vesperal
+vespertinal
+vespertine
+vespiary
+vespid
+vespine
+vesta
+vestee
+vestiary
+vestibular
+vestlike
+vestment
+vestmental
+vestryman
+vesuvian
+vesuvianite
+vetchling
+vetted
+vexillary
+vexillologic
+vexillological
+vexillologist
+vexillology
+vexillum
+viand
+viands
+viaticum
+vibist
+vibraharp
+vibraharpist
+vibrance
+vibraphone
+vibraphonist
+vibratile
+vibratility
+vibrational
+vibrationless
+vibrator
+vibratory
+vibrion
+vibriosis
+vibrissa
+vibrissae
+viburnum
+vic
+vicarage
+vicarate
+vicarial
+vicariate
+vicarship
+vicegerency
+vicegerent
+vicennial
+viceregal
+viceregally
+vicereine
+viceroyalty
+viceroyship
+vichyssoise
+vicinage
+vicinal
+vicissitudinous
+vickers
+victress
+vicuna
+vidal
+vide
+videophone
+vidette
+vidicon
+viduity
+viewfinder
+viewfinder's
+viewfinders
+viewy
+vigesimal
+vigintillion
+vignettist
+vigorish
+vigorist
+vigorist's
+vigorists
+vigoroso
+vilipend
+villadom
+villagery
+villainess
+villanella
+villanelle
+villatic
+villein
+villenage
+villi
+villiform
+villosity
+villus
+vim
+vimen
+vinaceous
+vinaigrette
+vinal
+vinblastine
+vinca
+vincible
+vincristine
+vinculum
+vindicable
+vindicator
+vindicators
+vindicatory
+vineal
+vinedresser
+vinedressers
+vinegarish
+vinegarroon
+vinegary
+vinery
+vineyardist
+vinic
+viniculture
+vinier
+viniferous
+vinification
+vino
+vinosity
+vinous
+vinously
+viny
+vinylic
+vinylidene
+viol
+violability
+violable
+violableness
+violably
+violaceous
+violaceously
+violist
+viomycin
+viosterol
+viperine
+viperish
+viperous
+viperously
+viraginous
+virago
+virelay
+viremia
+viremic
+vireo
+vires
+virescence
+virescent
+virga
+virgate
+virginium
+virgulate
+viricidal
+viricide
+virid
+viridescent
+viridian
+viridity
+virilism
+virion
+virologic
+virological
+virologically
+virologist
+virology
+viroses
+virosis
+virtuality
+virtueless
+virtuosa
+virtuosic
+virucidal
+virucide
+virulency
+viruliferous
+virustatic
+viscacha
+viscerogenic
+visceromotor
+viscidity
+viscometric
+viscometry
+viscose
+viscosimeter
+viscosimeter's
+viscosimeters
+viscosimetric
+viscountcy
+viscountess
+viscounty
+viscus
+visional
+visionally
+visionless
+visitable
+visitant
+visitational
+visitatorial
+visorless
+vitalism
+vitalist
+vitalistic
+vitamer
+vitameric
+vitellin
+vitelline
+vitellogenesis
+vitellus
+vitiator
+viticultural
+viticulture
+viticulturist
+vitiligo
+vitiosity
+vitite
+vitrifiable
+vitrine
+vittae
+vittate
+vittles
+vituperate
+vituperation
+vituperator
+vituperatory
+vitus
+vivarium
+viverrid
+vivific
+viviparity
+viviparous
+viviparously
+viviparousness
+vivisect
+vivisection
+vivisectional
+vivisectionally
+vivisectionist
+vivisector
+vixenish
+vixenishly
+vixenishness
+vizard
+vizierate
+vizierial
+viziership
+vizor
+vms
+vocabular
+vocalically
+vocality
+vocationalism
+vocationalist
+vociferant
+vociferate
+vociferation
+vociferator
+voguish
+voguishness
+voicedness
+voiceful
+voicefulness
+voiceprint
+voidable
+voidableness
+voidance
+voile
+volant
+volante
+volcanically
+volcanicity
+volcanoes
+volcanologic
+volcanological
+volcanologist
+volcanology
+vole
+voles
+volitive
+volkslied
+volkslieder
+volplane
+volplaned
+volplaning
+voltameter
+voltameter's
+voltameters
+voltametric
+volubility
+volubly
+volumeter
+volumeter's
+volumeters
+voluminosity
+voluntarism
+voluntarist
+voluntaristic
+voluntaryism
+voluntaryist
+volunteerism
+voluptuary
+volute
+voluted
+volutin
+volution
+volva
+volvement
+volvox
+vomerine
+vomitory
+vomiturition
+vomitus
+von
+voodooism
+voodooist
+voodooistic
+vored
+vortical
+vortically
+vorticella
+vorticism
+vorticist
+vorticose
+vortiginous
+votaress
+votarist
+voteless
+votress
+vouchee
+vouchsafement
+voussoir
+voyageur
+voyageurs
+voyeur
+voyeurism
+voyeuristic
+voyeuristically
+voyeurs
+vroom
+vs
+vulcanian
+vulcanicity
+vulcanologist
+vulcanology
+vulgarian
+vulgarism
+vulgarity
+vulgate
+vulgus
+vulnerably
+vulnerary
+vulterine
+vulturine
+vulturous
+vulva
+vulvae
+vulval
+vulvar
+vulviform
+vulvitis
+wackily
+wadable
+wadder
+waddie
+waddied
+waddies
+wadding
+waddy
+waddying
+wadeable
+wadi
+waftage
+wafture
+wageless
+wageworker
+wagger
+waggery
+waggly
+wagoneer
+wagoneer's
+wagoneers
+wagonette
+wagonette's
+wagonettes
+wagonload
+wagonload's
+wagonloads
+wah
+wahine
+wahoo
+wahoos
+waif
+wailful
+wailfully
+wain
+wained
+wainscotting
+waistband
+wakeless
+wakerobin
+walkabout
+walkaway
+walkingstick
+walkout
+wallaroo
+wallenstein
+walleye
+walleyed
+wallflower
+wamble
+wambled
+wambling
+wampum
+wanderlust
+waney
+wanier
+wanner
+wannest
+wanning
+wansee
+wansley
+wany
+warbonnet
+wardenship
+wardership
+wardress
+wardship
+warehousemen
+wareroom
+warlock
+warlord
+warlordism
+warlords
+warpage
+warpath
+warplane
+warplane's
+warplanes
+warrantable
+warrantableness
+warrantably
+warrantee
+warrantees
+warrantless
+warrantor
+warrantors
+washability
+washable
+washcloth
+washerman
+washerwoman
+washhouse
+washoe
+washrag
+washroom
+washrooms
+washstand
+washstands
+washtub
+washtubs
+washwoman
+wasplike
+wassail
+wassailer
+wast
+wastage
+wastages
+wastepaper
+watchcase
+watcheye
+watchtower
+watchworks
+waterborne
+watercraft
+watercress
+waterflood
+waterfowl
+waterfowl's
+waterfowler
+waterhole
+waterhole's
+waterholes
+waterily
+waterish
+waterishness
+waterless
+waterlessly
+waterlessness
+waterlog
+waterlogged
+watermanship
+watermark
+waterpower
+waterscape
+waterweed
+waterwheel
+waterworks
+waterworn
+wattmeter
+wattmeter's
+wattmeters
+waught
+waukesha
+waunona
+waupaca
+waupun
+wausau
+wauwatosa
+waveland
+waveless
+wavelessly
+wavelet
+wavelets
+wavelike
+wavery
+wavily
+waxlike
+waxwing
+waxwing's
+waxwings
+waybill
+wayfarer
+wayfaring
+waygoing
+waylay
+wayless
+wayworn
+weakhearted
+weakish
+weakling
+weal
+wealthily
+weanling
+wearability
+weariful
+wearifully
+wearifulness
+weariless
+wearilessly
+weatherability
+weatherboard
+weatherboarding
+weatherglass
+weatherman
+weatherstripping
+weatherworn
+weathery
+webbed
+webber
+webby
+webfoot
+weblike
+wedder
+wedgy
+weedless
+weeknight
+weeknights
+weepy
+weet
+weever
+weevil
+weevilly
+weevily
+weft
+wefts
+weider
+weidman
+weighable
+weightily
+weightless
+weightlessly
+weimaraner
+weiner
+weir
+weirdie
+weirdies
+weldable
+weldment
+weldor
+weldwood
+welfarism
+welfarist
+welkin
+wellaway
+wellborn
+wellhead
+wellington
+wellman
+wellwisher
+wellwisher's
+wellwishers
+welmers
+weltschmerz
+wen
+wend
+wert
+weskit
+westernmost
+wetback
+wettable
+wettish
+wff
+whacky
+whaleback
+whaleboat
+whalebone
+whalebone's
+whalebones
+whang
+whangee
+whap
+wharfage
+wharfinger
+wharfmaster
+whats
+wheal
+wheatear
+wheatland
+wheaton
+wheelbarrow
+wheelbarrow's
+wheelhorse
+wheelless
+wheelman
+wheelock
+wheelsman
+wheelwork
+wheelwright
+wheen
+wheezily
+whelm
+whenas
+whencesoever
+whensoever
+whereat
+wherefrom
+whereinto
+whereness
+wheres
+wheresomever
+wherethrough
+whereto
+whereunto
+wherewithal
+wherries
+wherry
+whetstone
+whetter
+whichsoever
+whicker
+whickered
+whickering
+whidding
+whiffletree
+whigmaleerie
+whilom
+whilst
+whimsicality
+whiney
+whinstone
+whipcord
+whiplike
+whippersnapper
+whippier
+whippletree
+whippoorwill
+whippy
+whipstitch
+whipstock
+whirlybird
+whirried
+whirry
+whirrying
+whish
+whisht
+whiskery
+whispery
+whist
+whitebait
+whitebeard
+whitecap
+whitefish
+whiteleaf
+whiteley
+whiteout
+whitesmith
+whitethroat
+whitewall
+whitewater
+whitewing
+whithersoever
+whitherward
+whitish
+whity
+whizbang
+whizz
+whizzbang
+whizzer
+whomp
+whoopee
+whoopla
+whopper
+whoredom
+whorehouse
+whoremaster
+whoremonger
+whoreson
+whorish
+whort
+whortle
+whosesoever
+whoso
+whump
+whup
+whys
+wickerwork
+wickiup
+widemouthed
+widgeon
+widgeons
+widish
+widowerhood
+widthways
+wieland
+wieldy
+wienerwurst
+wienie
+wifehood
+wifeless
+wifelike
+wigan
+wigeon
+wigeons
+wigged
+wight
+wiglet
+wigwag
+wilco
+wildcatted
+wildcatting
+wildebeest
+wildebeest's
+wilderment
+wildflower
+wildflower's
+wildflowers
+wildfowl
+wildfowler
+wildfowling
+wildish
+wildling
+wildwood
+willable
+willemite
+willet
+willies
+williwaw
+willowlike
+willowware
+willpower
+willy
+willying
+wilmette
+wimble
+wimbled
+wimbles
+wimbling
+wimple
+wimpled
+wimpling
+winchell
+windage
+windblown
+windburn
+windburned
+windflaw
+windily
+windjammer
+windlass
+windlassed
+windlasses
+windlassing
+windlassly
+windpipe
+windproof
+windscreen
+windsurf
+windsurfed
+windsurfing
+windsurfs
+windswept
+windway
+wineglass
+winegrower
+winehead
+winepress
+wineshop
+winey
+wingbeat
+wingbeat's
+wingbeats
+wingding
+wingless
+winglessness
+winglet
+winglike
+wingover
+wingspread
+wingspread's
+wingspreads
+wingy
+winism
+winnable
+winnebago
+winned
+winooski
+winsett
+wintergreen
+winterkill
+wintertide
+wintery
+wintle
+wintrily
+winze
+wirable
+wiredraw
+wiredrawer
+wiredrawn
+wirehair
+wirehaired
+wirelike
+wiretapper
+wireway
+wirework
+wireworks
+wireworm
+wirily
+wisent
+wisewoman
+wisha
+wispish
+wistaria
+wisteria
+witchery
+witchlike
+witchy
+withdrawable
+withe
+witherite
+witherspoon
+withies
+withindoors
+withoutdoors
+withy
+witless
+witling
+witted
+witticism
+wittily
+wiz
+wizardry
+wolfhound
+wolflike
+wolverine
+wolverine's
+wolverines
+wolverton
+womanish
+womanishly
+womanishness
+womankind
+womanless
+womanlike
+womanpower
+wombat
+wombat's
+wombats
+womenfolk
+womenfolks
+womenkind
+wonderwork
+wonky
+wonning
+wonton
+woodberry
+woodcraft
+woodcutter
+woodcutting
+woodenhead
+woodenheaded
+woodenware
+woodlore
+woodnote
+woodpile
+woodsman
+woodsy
+woolie
+woolpack
+woolsack
+woolshed
+woolskin
+woops
+woozier
+woozily
+wooziness
+woozy
+wordage
+wordages
+wordbook
+wordless
+wordlessness
+wordmonger
+wordplay
+workability
+workbasket
+workboat
+workbox
+workfolk
+workfolks
+workforce
+workforce's
+workforces
+workhouse
+workless
+worklessness
+workpeople
+workroom
+workrooms
+workweek
+workwoman
+worldling
+wormhole
+wormlike
+worriment
+worrywart
+worshipless
+wort
+worthful
+worthily
+wotted
+wouldst
+woundless
+woundwort
+wowser
+wrack
+wracked
+wracks
+wraiths
+wrapup
+wrasse
+wrathy
+wreathy
+wriggly
+wristlet
+wristlock
+wristy
+writeup
+writeup's
+writeups
+writhen
+wrongheaded
+wrongheadedly
+wrongheadedness
+wunderkind
+wysiwyg
+xanthate
+xanthene
+xanthic
+xanthin
+xanthine
+xenia
+xenomania
+xenophile
+xenophilous
+xenophobe
+xenophobic
+xerarch
+xeric
+xerically
+xerographic
+xerographically
+xerophile
+xerophilous
+xerophily
+xylophonist
+xylose
+xylotomic
+xylotomical
+xylotomous
+xylotomy
+yack
+yacking
+yah
+yak
+yakking
+yalies
+yam
+yamen
+yardarm
+yardbird
+yardman
+yardmaster
+yare
+yarely
+yarmelke
+ycleped
+yclept
+ye
+yearling
+yearlong
+yeastily
+yellerish
+yep
+yester
+yeuk
+yew
+yoghurt
+yoghurt's
+yogic
+yogin
+yoknapatawpha
+yolky
+yond
+youngling
+yuba
+yuletide
+yuri
+zabaglione
+zagged
+zanier
+zanies
+zanily
+zaniness
+zany
+zazen
+zealotry
+zeffirelli
+zenithal
+zeolite
+zeolitic
+zephyr
+zeppelin
+ziggy
+zillion
+zincate
+zincic
+zinfandel
+zingier
+zingy
+zinnia
+zippier
+zippy
+zirconia
+zirconic
+zither
+zitherist
+zithers
+zizith
+zoantharian
+zoarial
+zoarium
+zobrist
+zombi
+zombiism
+zonate
+zonated
+zonation
+zonked
+zoogenic
+zoogenous
+zoogeographer
+zoogeographic
+zoogeography
+zooks
+zoologic
+zoomorphic
+zoonosis
+zoonotic
+zooparasite
+zooparasitic
+zoophagous
+zoophilic
+zoophilous
+zoophyte
+zoophytic
+zooplankton
+zoosporal
+zoospore
+zoosterol
+zootechnics
+zori
+zucchini
+zwitterion
+zwitterionic
+zwitterions
+zygote
+zygote's
+zygotes
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.3 b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.3
new file mode 100644
index 00000000000..4ecbceb570c
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/spellCheck/english.3
@@ -0,0 +1,19708 @@
+AAU
+AKA
+APS
+Aachen
+Aalborg
+Aalesund
+Aargau
+Aaronic
+Abba
+Abbado
+Abbevillian
+Abbeydale
+Abelard
+Abele
+Abelmosk
+Abernethy
+Aberystwyth
+Abravanel
+Abraxas
+Absalom
+Abu
+Abyssinian
+Acarus
+Accrington
+Aceldama
+Achaemenid
+Achates
+Achernar
+Achitophel
+Acis
+Actinia
+Actium
+Adamite
+Adar
+Addams
+Addington
+Adenauer
+Adige
+Adonai
+Adonic
+Adullamite
+Advowson
+Aedes
+Aegeus
+Aegina
+Aegisthus
+Aeolic
+Aeolipile
+Aeolis
+Aepyornis
+Aeschines
+Aesculapian
+Aesculapius
+Aesir
+Aetolia
+Affenpinscher
+Africanism
+Africanist
+Afrikander
+Afrikanerdom
+Agama
+Agapanthus
+Ageratum
+Agincourt
+Aglaia
+Agostini
+Agra
+Agrapha
+Agrippa
+Aguascalientes
+Ahasuerus
+Ahmednagar
+Ahriman
+Ahvenanmaa
+Ahwaz
+Aidan
+Aidin
+Aileen
+Akan
+Akhmatova
+Akkad
+Akkadian
+Akmolinsk
+Aktyubinsk
+Alamein
+Alaric
+Albi
+Albigenses
+Albinoni
+Albion
+Alboin
+Albury
+Alcman
+Alcock
+Alcoran
+Alcyone
+Aldermaston
+Alderney
+Aldine
+Aldus
+Aleksandropol
+Aleksandrovsk
+Alemanni
+Alemannic
+Aleppo
+Alexandrian
+Alexius
+Algerine
+Algonkian
+Alkoran
+Allahabad
+Allenby
+Allende
+Allhallowtide
+Almeida
+Almohade
+Almoravide
+Alsatia
+Altaic
+Altamira
+Altrincham
+Amaryllis
+Amati
+Amboina
+Ambrosian
+Ameling
+Americanist
+Amerigo
+Amerindian
+Amersfoort
+Ameslan
+Amfortas
+Amish
+Ammonites
+Amoy
+Ampelopsis
+Amphitrite
+Amphitryon
+Amritsar
+Amundsen
+Amytal
+Anabaena
+Anabas
+Anableps
+Anacreontic
+Anam
+Ananias
+Anchises
+Ancona
+Andaman
+Andhra
+Angara
+Angarsk
+Angelus
+Angevin
+Angkor
+Anglesey
+Anglian
+Anglicist
+Anglomania
+Anglophone
+Anguilla
+Anjou
+Annam
+Annamese
+Annapurna
+Anopheles
+Anouilh
+Ansermet
+Antarctic
+Anthurium
+Antigonus
+Antigua
+Anubis
+Anzac
+Aphis
+Apis
+Apollyon
+Apus
+Arabist
+Arafat
+Araiza
+Aramaic
+Araucanian
+Araucaria
+Arawakan
+Arbela
+Arcadic
+Archaeopteryx
+Archaeornis
+Archean
+Archilochian
+Arctic
+Arctogaea
+Areca
+Areopagus
+Ares
+Arethusa
+Argerich
+Argyrol
+Arian
+Ariel
+Aristides
+Aristippus
+Arius
+Arkhangelsk
+Arkhipova
+Arlberg
+Arminian
+Arrau
+Arroyo
+Arthurian
+Asarum
+Ascanius
+Ascensiontide
+Aschaffenburg
+Ascham
+Asclepiadean
+Asclepius
+Ashanti
+Ashford
+Ashkenazi
+Ashkenazy
+Ashkhabad
+Ashmore
+Ashton
+Ashur
+Asimov
+Aspasia
+Assamese
+Assisi
+Astilbe
+Aten
+Athanasian
+Atherton
+Atlantean
+Atlantov
+Attenborough
+Attila
+Aubergine
+Aubervilliers
+Aubrietia
+Aubusson
+Auger
+Augsburg
+Augustinian
+Aurignacian
+Aussie
+Auster
+Austerlitz
+Australasia
+Australiana
+Australianism
+Australoid
+Australorp
+Austrasia
+Austronesia
+Austronesian
+Autoharp
+Avar
+Averroism
+Avestan
+Axminster
+Aymara
+Ayrshire
+Azerbaijani
+Azilian
+Azotobacter
+Azov
+Azrael
+BBC
+BCPL
+BNF
+Baal
+Baalbek
+Baaskap
+Bab
+Babi
+Babism
+Bacchae
+Bacharach
+Bacquier
+Bactrian
+Baedeker
+Baganda
+Bagdad
+Bahai
+Bahaism
+Bahrain
+Bairam
+Baker
+Bala
+Balaam
+Balakirev
+Balaklava
+Balaton
+Balearic
+Balkis
+Balmacaan
+Balmoral
+Balt
+Balthazar
+Baltsa
+Baluchi
+Baluchistan
+Bambara
+Bamberg
+Banda
+Banff
+Bank
+Bannockburn
+Bantoid
+Bantustan
+Banville
+Barabbas
+Barathea
+Barbarossa
+Barbary
+Barber
+Barbirolli
+Barbuda
+Barcoo
+Bardolatry
+Barenboim
+Bari
+Barmecide
+Barotse
+Barsac
+Bart
+Bartoletti
+Bashkir
+Basilian
+Basingstoke
+Baskerville
+Bassas
+Bastianini
+Basutoland
+Bataan
+Bathonian
+Battenburg
+Battle
+Baudo
+Bauhinia
+Bax
+Bayard
+Beaconsfield
+Beaufort
+Beaune
+Bebington
+Bechuana
+Bechuanaland
+Beckenham
+Beckford
+Beckmann
+Bedfordshire
+Bedlington
+Beghard
+Beguin
+Behrens
+Belgae
+Belgravia
+Belial
+Belisarius
+Belisha
+Belleek
+Bellerophon
+Bellingshausen
+Bellmouth
+Bellona
+Belmondo
+Belorussia
+Belostok
+Belsen
+Beltane
+Bemba
+Benackova
+Benedictus
+Benedikt
+Beni
+Benin
+Benison
+Benne
+Bennet
+Berber
+Berberis
+Berbie
+Berchtesgaden
+Berdichev
+Berdyayev
+Berenson
+Berezina
+Berezniki
+Berg
+Bergama
+Bergamo
+Berganza
+Berger
+Bergonzi
+Bergsonism
+Berkeleian
+Berkeleianism
+Bernese
+Bessarabia
+Bethany
+Bethmann
+Betta
+Beulah
+Beveridge
+Bewick
+Bice
+Biedermeier
+Bielefeld
+Bihari
+Biisk
+Bilharzia
+Billingham
+Billingsgate
+Billiton
+Bim
+Birkenhead
+Bishop
+Blachut
+Blackbeard
+Blagoveshchensk
+Blanzat
+Blavatsky
+Blech
+Blegen
+Bley
+Blindheim
+Blini
+Bliss
+Blomstedt
+Bloomsbury
+Boanerges
+Boatwright
+Boche
+Bodoni
+Bogas
+Bohm
+Boildieu
+Boito
+Bokhara
+Bolshie
+Bolson
+Boltonia
+Bonapartism
+Bonynge
+Bordelaise
+Borghese
+Borodin
+Boronia
+Bosky
+Bosnia
+Bougainville
+Boughton
+Boulez
+Boult
+Bournemouth
+Bouvet
+Bozcaada
+Braata
+Brachiosaurus
+Bragi
+Brahman
+Brahmana
+Brahmani
+Brahmanism
+Brahmin
+Brahui
+Brailler
+Braillers
+Braillewriters
+Brantford
+Breconshire
+Bremerhaven
+Brendel
+Brentano
+Brentwood
+Brescia
+Breslau
+Bresson
+Bretagne
+Bretton
+Breuer
+Breughel
+Briareus
+Bridgeford
+Bridgeman
+Bright
+Brigid
+Britannia
+Briticism
+Britishism
+Brixton
+Brno
+Broadbrim
+Bromberg
+Brown
+Bruch
+Brule
+Brummagem
+Brunei
+Brunelle
+Bruson
+Brutus
+Bryansk
+Brython
+Brythonic
+Bubo
+Bucephalus
+Buchmanism
+Buckingham
+Buckinghamshire
+Buddleia
+Buenaventura
+Bueno
+Bulgar
+Bumbledom
+Buna
+Bundaberg
+Bundoora
+Bundu
+Burberry
+Burgos
+Burgoyne
+Burkina
+Burseraceous
+Bushire
+Bute
+Buttermere
+Butterworth
+Bydgoszcz
+Byelorussian
+Byelostok
+CATV
+CB
+CCNY
+CEQ
+CGS
+CO
+Caballe
+Cabinda
+Caddoan
+Cadmean
+Cadmus
+Caelian
+Caelum
+Caernarvonshire
+Caerphilly
+Caesarean
+Caesarism
+Cahokia
+Caicos
+Calabar
+Caladium
+Calciferous
+Caledonia
+Caledonian
+Caliban
+Calicut
+Callas
+Calliopsis
+Calvados
+Calvinism
+Calydonian
+Cambridgeshire
+Camelopardus
+Camenae
+Cana
+Canaanite
+Canaanitic
+Canadianism
+Candace
+Candiot
+Candlemas
+Canicula
+Canopic
+Canossa
+Cantabrian
+Canuck
+Capablanca
+Cape
+Capernaum
+Capetian
+Capone
+Cappuccilli
+Capri
+Capricornus
+Capsian
+Caravaggio
+Carbonari
+Cardiganshire
+Caribbee
+Carlist
+Carlovingian
+Carman
+Carmarthenshire
+Carmel
+Carmelite
+Carpathian
+Carreras
+Carrick
+Carteri
+Carthaginian
+Carthusian
+Cartier
+Caslon
+Caspar
+Casparian
+Caspian
+Cassegrainian
+Cassia
+Castalia
+Castilian
+Castilla
+Castleford
+Castlereagh
+Casuarina
+Catalan
+Cathay
+Cattleya
+Caucasoid
+Cavell
+Cavesson
+Cavetto
+Cavour
+Cawdrey
+Cawley
+Cawnpore
+Caxton
+Cayes
+Cayman
+Cayuse
+Ceanothus
+Cecrops
+Ceiba
+Celadon
+Celaeno
+Celeste
+Celtiberian
+Centaurus
+Central
+Cepheid
+Ceratodus
+Cercis
+Cerenkov
+Ceres
+Cete
+Chaco
+Chadderton
+Chailly
+Chalcis
+Chaldean
+Chaldee
+Cham
+Chamaeleon
+Chambertin
+Charlottenburg
+Charlottetown
+Charlton
+Charmeuse
+Charpentier
+Chartism
+Chasidim
+Chatterton
+Chaucerian
+Chechen
+Cheek
+Chellean
+Chelmsford
+Cheltenham
+Chelyabinsk
+Chelyuskin
+Chengchow
+Chengteh
+Chengtu
+Cheongsam
+Cheops
+Cherbourg
+Cheremiss
+Cheremkhovo
+Cherenkov
+Chernovtsy
+Chernozem
+Chertsey
+Cherubini
+Chessel
+Chesterfieldian
+Chetnik
+Cheval
+Chian
+Chibchan
+Chickasaw
+Chihuahua
+Childermas
+Chilean
+Chiltern
+Chilton
+China
+Chinee
+Chinookan
+Chionodoxa
+Chiron
+Chita
+Chkalov
+Chlorella
+Chloromycetin
+Chocho
+Choco
+Chrissie
+Christadelphian
+Christchurch
+Christhood
+Christmastide
+Christoff
+Christology
+Christophe
+Chukchi
+Chung
+Churrigueresque
+Chuvash
+Ciccolini
+Cicely
+Cid
+Cilician
+Cimbri
+Cimmerian
+Cinchona
+Cincinnatus
+Cinemascope
+Cineraria
+Cipango
+Circassian
+Circinus
+Cisalpine
+Cistercian
+Cistus
+City
+Clacton
+Clapham
+Clapton
+Clarabella
+Clarenceux
+Clarkia
+Claudel
+Claudius
+Clausewitz
+Claytonia
+Clematis
+Clementine
+Clemmons
+Cleome
+Cleopatra
+Cleve
+Clevenger
+Cliburn
+Clintonia
+Clipperton
+Clostridium
+Cluj
+Cluytens
+Clydesdale
+Coast
+Coatbridge
+Cobbett
+Cobham
+Cochin
+Cockaigne
+Cocos
+Cointreau
+Colchicum
+Colchis
+Colima
+Colleen
+Collier
+Collinsia
+Colloq
+Colobus
+Cologne
+Colossian
+Coltrane
+Columba
+Colwyn
+Comanchean
+Comintern
+Command
+Comoros
+Compositae
+Comptometer
+Comus
+Conferva
+Congreve
+Coniston
+Conium
+Convolvulus
+Cook
+Copland
+Coprosma
+Copt
+Coptic
+Coquille
+Coral
+Corantijn
+Cordelier
+Cordovan
+Coreopsis
+Corriedale
+Cortes
+Corvallis
+Corybant
+Corydalis
+Corydon
+Costa
+Costermansville
+Cotinga
+Cotrubas
+Couperin
+Courland
+Cousteau
+Cowell
+Cowichan
+Craal
+Cranfield
+Cressida
+Creston
+Cretic
+Crichton
+Crinum
+Croat
+Crockford
+Crompton
+Cronin
+Crookes
+Crookesmoor
+Crossley
+Crownland
+Cryptomeria
+Cuberli
+Culex
+Cumbrian
+Cundick
+Curculio
+Curcuma
+Curtana
+Curvet
+Cuscus
+Cushitic
+Cuthbert
+Cymric
+Cypripedium
+Cyrano
+Cyrenaic
+Cytherea
+Czechoslovak
+Czernowitz
+Czerny
+DMF
+DPP
+DWT
+Dagenham
+Dagestan
+Dago
+Daltonism
+Damara
+Damaraland
+Damascene
+Damien
+Damson
+Danaides
+Danegeld
+Danelaw
+Danio
+Danton
+Daphnis
+Dapsang
+Darby
+Dard
+Dardan
+Dardic
+Darien
+Darjeeling
+Darry
+Dartford
+Dartmoor
+Davidovich
+Deauville
+Deb
+Decembrist
+Deepfreeze
+Delian
+Delibes
+Delius
+Deller
+Delorme
+Delos
+Delsarte
+Demogorgon
+Demosthenes
+Denbighshire
+Dene
+Denis
+Dentalium
+Depraz
+Dernesch
+Derris
+Deuteronomist
+Deuteronomistic
+Deuteronomy
+Deutschland
+Deutzia
+Devereux
+Devonian
+Diablo
+Diamond
+Dictaphone
+Dictograph
+Didache
+Dieskau
+Dimitrovo
+Dinaric
+Dinesen
+Dingaan
+Dinka
+Dinnington
+Dinoceras
+Dione
+Dionysia
+Dionysiac
+Dioscuri
+Diplodocus
+Dirham
+Ditzel
+Djibouti
+Dneprodzerzhinsk
+Dnepropetrovsk
+Dniester
+Docetism
+Dodgson
+Dodona
+Doese
+Dohnanyi
+Dol
+Dolichosaurus
+Dominica
+Domitian
+Donar
+Donath
+Donatist
+Doncaster
+Donegal
+Donetsk
+Dongola
+Donizetti
+Dopper
+Dor
+Dorati
+Dorian
+Dorking
+Dormoy
+Doronicum
+Dowland
+Dowson
+Dracaena
+Draconic
+Drakensberg
+Drayton
+Dressen
+Dronfield
+Druse
+Duala
+Dubonnet
+Duisburg
+Dukas
+Dulcinea
+Dumbarton
+Dunbarton
+Dunker
+Dupre
+Duralumin
+Durban
+Durkheim
+Duroc
+Durufle
+Dutoit
+Duyker
+Dvandva
+Dvina
+Dvinsk
+Dvorsky
+Dyak
+Dyonisian
+Dzaudzhikau
+Dzerzhinsk
+Dzhambul
+Dziggetai
+Dzongka
+Dzungaria
+ECAD
+Eaglestone
+Eaglewood
+Eastbourne
+Eastertide
+Eastleigh
+Ebert
+Ecclesiastes
+Ecclesiasticus
+Echeveria
+Edda
+Eddington
+Edo
+Edomite
+Edwardine
+Efik
+Egbert
+Egeria
+Egham
+Egmont
+Ehrenburg
+Eichendorff
+Eiffel
+Eijkman
+Eikon
+Eilat
+Eindhoven
+Einkorn
+Eisenach
+Eisenstadt
+Eisenstein
+Eisteddfod
+Ekaterinburg
+Ekaterinodar
+Ekaterinoslav
+Elamite
+Elbert
+Eleatic
+Eleusinian
+Elfland
+Elgar
+Elia
+Elias
+Elisabethville
+Elisavetgrad
+Elisavetpol
+Ellesmere
+Ellice
+Ellington
+Elohim
+Elohist
+Elsass
+Elvira
+Emirates
+Emmenthal
+Emmet
+Emmy
+Empson
+Endamoeba
+Endrich
+Endymion
+Enesco
+Engel
+Englishism
+Englishry
+Entamoeba
+Eozoic
+Ephedra
+Ephemera
+Ephraimite
+Epigoni
+Episcopalism
+Equatorial
+Equisetum
+Erastianism
+Erechtheum
+Erechtheus
+Erenburg
+Erica
+Ericson
+Erin
+Eritrea
+Ermanaric
+Ermler
+Erse
+Erymanthian
+Escallonia
+Escherichia
+Escorial
+Esdras
+Eskilstuna
+Esperanto
+Esquiline
+Essene
+Estonian
+Eth
+Ethelbert
+Ethelred
+Ethiopian
+Eton
+Eucharis
+Euonymus
+Eupatorium
+Euphrosyne
+Euroclydon
+Eurocommunism
+Eurocrat
+Eurodollar
+Euromarket
+Eurovision
+Eurus
+Euryale
+Eurystheus
+Eustachian
+Euxine
+Everton
+Evertor
+Evesham
+Evonymus
+Ewing
+Excalibur
+Exmoor
+Exon
+FPS
+Fabianism
+Fabrikoid
+Factice
+Faisal
+Faizabad
+Falange
+Faliscan
+Falkirk
+Falkner
+Falla
+Falstaffian
+Fanti
+Fareham
+Farnborough
+Farnese
+Farnesol
+Farnham
+Faroe
+Faroes
+Farouk
+Farquhar
+Farrago
+Farthingale
+Fartlek
+Faruk
+Fassbaender
+Fassbinder
+Fathometer
+Fatimid
+Fatshan
+Faubourg
+Faure
+Fayal
+Fedoseyev
+Feigin
+Feisal
+Feme
+Fenian
+Fenice
+Fenrir
+Fergus
+Fernandi
+Ferrara
+Fescennine
+Feuchtwanger
+Feuerbach
+Feuilleton
+Fezzan
+Fianna
+Finnic
+Finsen
+Finsteraarhorn
+Firbank
+Flamig
+Flaminian
+Fleetwood
+Flensburg
+Fletcher
+Fletcherism
+Flintshire
+Flugelhorn
+Flysch
+Foism
+Foison
+Fokine
+Fokker
+Foochow
+Fornax
+Forrester
+Forsythia
+Fouquet
+Fourierism
+Fournet
+Fournier
+Francescatti
+Franck
+Franconia
+Franconian
+Francophile
+Francophobe
+Francophone
+Franglais
+Frankenstein
+Frankish
+Frauenfeld
+Fraunhofer
+Frazer
+Frazil
+Freccia
+Freda
+Fredericia
+Frederiksberg
+Fredrikstad
+Freesia
+Freiburg
+Frenchy
+Freni
+Frescobaldi
+Freytag
+Fribourg
+Fricandeau
+Friesian
+Frigg
+Frijol
+Frisch
+Frisco
+Friuli
+Friulian
+Frizette
+Frobisher
+Froment
+Ft
+Fuegian
+Fulham
+Futuna
+Fyzabad
+Gadarene
+Gael
+Gaeltacht
+Gagarin
+Gaia
+Gainsborough
+Galago
+Galenic
+Galenical
+Galenism
+Galibi
+Galician
+Galla
+Gallic
+Gallican
+Gallicanism
+Gallicism
+Galton
+Galwegian
+Gambeson
+Gambetta
+Gambier
+Gamboge
+Ganda
+Gandhiism
+Ganga
+Garamond
+Gargantua
+Garrya
+Garth
+Gascon
+Gaspar
+Gates
+Gatha
+Gaucho
+Gaulish
+Gaullism
+Gaullist
+Gaultheria
+Gaza
+Gedda
+Gehenna
+Geisel
+Geissler
+Gelderland
+Gelsemium
+Gelsenkirchen
+Gemara
+Gencer
+Gendron
+Genevan
+Genf
+Genfersee
+Genghis
+Genoese
+Genova
+Gentoo
+Geordie
+Georgette
+Germanism
+Germanophile
+Germanophobe
+Gethsemane
+Geum
+Gharial
+Gharry
+Ghaut
+Ghazi
+Ghazzah
+Gheber
+Gherao
+Ghiaurov
+Ghiberti
+Ghibli
+Ghillie
+Ghirlandaio
+Ghitalla
+Giacometti
+Gibeonite
+Gielgud
+Gierek
+Giessen
+Gigout
+Gilbertian
+Gileadite
+Gilels
+Gillingham
+Gippsland
+Gippy
+Giraud
+Giraudoux
+Gisborne
+Giscard
+Giulini
+Giulio
+Glagolitic
+Glazunov
+Glengarry
+Glickman
+Glinka
+Globigerina
+Glorioso
+Gloucestershire
+Gloxinia
+Gluck
+Gobbi
+Gobelin
+Godesberg
+Godetia
+Godiva
+Godolphin
+Godspeed
+Godthaab
+Godunov
+Goebbels
+Goidel
+Golconda
+Goldmark
+Golgi
+Golgotha
+Gomberg
+Gond
+Gondi
+Gondwanaland
+Gongorism
+Goop
+Gorcock
+Gorgonzola
+Gorki
+Gorlovka
+Goshen
+Gosplan
+Goth
+Gotha
+Gothenburg
+Gotland
+Goucher
+Gounod
+Goya
+Graafian
+Graben
+Gracchus
+Graeae
+Graffman
+Graian
+Granth
+Grecism
+Green
+Greenham
+Gregorian
+Greisen
+Grenada
+Grenadines
+Gretna
+Grieg
+Grierson
+Griffe
+Griffiths
+Griffon
+Grig
+Grigioni
+Grignard
+Grikwa
+Grindelia
+Griqua
+Griqualand
+Grison
+Grolier
+Grundheber
+Grus
+Guadeloupe
+Guarani
+Guernica
+Guernsey
+Guerrero
+Guevara
+Guido
+Guildford
+Guillaume
+Guillou
+Guinea
+Guinness
+Gurmukhi
+Gurzenich
+Gypsophila
+Habsburg
+Haddington
+Hadith
+Haematoxylon
+Hagegard
+Hagiographa
+Haida
+Hainan
+Haitink
+Hakea
+Hallamshire
+Halle
+Hallowmas
+Hallstatt
+Halpern
+Hamite
+Hamitic
+Handley
+Hansard
+Hanseatic
+Hanuman
+Hanyang
+Hardenberg
+Hardy
+Hargreaves
+Haringey
+Harl
+Harlow
+Harmsworth
+Harper
+Harrild
+Harrovian
+Hathor
+Hauptmann
+Haversian
+Hawick
+Heard
+Heaviside
+Hebraism
+Hebraist
+Hebron
+Heifetz
+Helgoland
+Helianthus
+Heligoland
+Heliogabalus
+Helios
+Helladic
+Hellas
+Helldiver
+Helleborine
+Hellenism
+Hellenist
+Hellenistic
+Helvetia
+Helvetian
+Helvetic
+Helvetii
+Hemmings
+Henie
+Henryson
+Henslowe
+Henze
+Hephaestus
+Heptateuch
+Heraclid
+Herat
+Hercynian
+Herefordshire
+Herero
+Hermaphroditus
+Hertford
+Hertfordshire
+Hertzian
+Herzegovina
+Herzl
+Herzog
+Hesione
+Hesperia
+Hesperian
+Hesperides
+Hesychast
+Het
+Heteroousian
+Hexateuch
+Heynis
+Heysham
+Hezekiah
+Hialeah
+Hibernicism
+Hickox
+Hideyoshi
+Hieland
+Hilary
+Hildesheim
+Himyarite
+Himyaritic
+Hinayana
+Hindemith
+Hindenburg
+Hippeastrum
+Hippocrene
+Hippolytus
+Hippomenes
+Hirudin
+Hispania
+Hispanicism
+Hispaniola
+Hittite
+Hobbism
+Hochheimer
+Hocktide
+Hodgson
+Hoene
+Hofmann
+Hohenzollern
+Hollandia
+Holliday
+Holliger
+Hom
+Homoiousian
+Hong
+Honiton
+Horatian
+Horatius
+Horenstein
+Horne
+Hortense
+Hosta
+Houdan
+Houstonia
+Howland
+Hoya
+Huddersfield
+Huddleston
+Hudibrastic
+Huguenot
+Humperdinck
+Hunnish
+Huntingdonshire
+Hussite
+Huybrechts
+Hyacinthus
+Hydrastis
+Hydroski
+Hydrus
+Hygeia
+Hynninen
+Hyoscyamus
+Hypnos
+Hyson
+ISSN
+Iapetus
+Ibo
+Ibrahim
+Icaria
+Icarian
+Iceni
+Ichthyornis
+Ido
+Idomeneus
+Ignatius
+Igorot
+Iguanodon
+Ijssel
+Ijsselmeer
+Ilford
+Ilkeston
+Illyrian
+Imai
+Immanuel
+Immelmann
+Immingham
+Impatiens
+Inbal
+Ind
+Indiaman
+Indic
+Indologist
+Indris
+Ingush
+Inkerman
+Innuit
+Inselberg
+Intelsat
+Interisland
+Invar
+Ionesco
+Ionia
+Ionian
+Ipomoea
+Ireton
+Irishism
+Irkutsk
+Irons
+Iroquoian
+Isbn
+Iscariot
+Ishmael
+Ishmaelite
+Ishtar
+Isidore
+Iskander
+Iskenderun
+Islington
+Ismaili
+Isocheim
+Italia
+Ivanovo
+Ivanovsky
+Ives
+Ivory
+Ixia
+Ixion
+Ixtaccihuatl
+Izhevsk
+Iztaccihuatl
+JCL
+Jabalpur
+Jabir
+Jabiru
+Jaborandi
+Jacaranda
+Jacobin
+Jacquard
+Jadotville
+Jaga
+Jahvist
+Jain
+Jainism
+Jamesian
+Janacek
+Janiculum
+Janigro
+Janowitz
+Jansenism
+Jap
+Japheth
+Japhetic
+Jarvi
+Jarvis
+Jat
+Jehovist
+Jemmy
+Jena
+Jenghis
+Jenner
+Jephthah
+Jeremiad
+Jersey
+Jervis
+Jespersen
+Jesselton
+Jesu
+Jethro
+Jetton
+Jewess
+Jewry
+Jezebel
+Jezreel
+Joab
+Jocasta
+Jochum
+Jodo
+Johnsonian
+Joinville
+Jolson
+Jonah
+Jonson
+Jotunheim
+Juantorena
+Jubbulpore
+Judaea
+Judah
+Judaic
+Juilliard
+Juliana
+Jumada
+Juneberry
+Junius
+Junoesque
+Jylland
+KWIC
+KWOC
+Kaaba
+Kabaka
+Kabyle
+Kaffir
+Kaffraria
+Kafir
+Kaiserslautern
+Kalahari
+Kalevala
+Kalmuck
+Kamu
+Kanaka
+Kanarese
+Kanawa
+Kandinsky
+Kanji
+Kapfenberg
+Karaite
+Karajan
+Karakul
+Karczykowski
+Karelian
+Karloff
+Karlovy
+Karlsbad
+Karlsruhe
+Karnak
+Karpov
+Karri
+Karst
+Kasha
+Kashmiri
+Kaspszyk
+Katrine
+Keeling
+Keewatin
+Keighley
+Keijo
+Kelson
+Kempff
+Kennelly
+Kennington
+Kentish
+Kerenski
+Kermanshah
+Kertesz
+Keswick
+Keynesianism
+Khabarovsk
+Khachaturian
+Khaddar
+Khakass
+Khakis
+Khalid
+Khalif
+Khalkha
+Khalkidiki
+Khama
+Khamsin
+Khanate
+Khanga
+Khania
+Kharif
+Kharkov
+Khat
+Khayal
+Khedive
+Khelat
+Kherson
+Khieu
+Khingan
+Khirbet
+Khiva
+Khoikhoi
+Khoisan
+Khojent
+Khotan
+Khufu
+Khulna
+Khuskhus
+Khyber
+Kiaat
+Kiang
+Kiangsi
+Kiangsu
+Kiaochow
+Kibitka
+Kiblah
+Kidderminster
+Kielce
+Kier
+Kierkegaard
+Kieselguhr
+Kif
+Kikoi
+Kikumon
+Kilauea
+Kildare
+Kilderkin
+Kilkenny
+Killarney
+Killick
+Killiecrankie
+Killifish
+Killikinick
+Kilmarnock
+King
+Kingdom
+Kingman
+Kinnock
+Kinross
+Kinshasa
+Kirchhoff
+Kirghiz
+Kiribati
+Kirigami
+Kirin
+Kirkby
+Kirkcaldy
+Kirkcudbright
+Kirkman
+Kirkuk
+Kirkwall
+Kirman
+Kirmess
+Kirovabad
+Kirovograd
+Kirshbaum
+Kiruna
+Kirundi
+Kisangani
+Kish
+Kishinev
+Kishke
+Kismayu
+Kissel
+Kissin
+Kissinger
+Kist
+Kistna
+Kisumu
+Kitts
+Kizil
+Klagenfurt
+Klangfarbe
+Klansman
+Klausenburg
+Klee
+Kleiber
+Kleist
+Klemperer
+Klimt
+Klipspringer
+Klondike
+Kneller
+Knesset
+Knighthead
+Kniplova
+Knobkerrie
+Knussen
+Koblenz
+Kodaly
+Koestler
+Koheleth
+Kohima
+Kohl
+Kohn
+Kohoutek
+Kokand
+Kokanee
+Kokobeh
+Kokoschka
+Kolhapur
+Kolinsky
+Kollo
+Kollwitz
+Kolmar
+Kolmogorov
+Kolo
+Kolomna
+Kolyma
+Komati
+Komatik
+Komi
+Kommunarsk
+Kommunizma
+Komodo
+Komsomol
+Komsomolsk
+Konakry
+Kondo
+Kondrashin
+Konstanz
+Kootenay
+Kopeisk
+Kopje
+Koppa
+Korbut
+Korchnoi
+Kordofan
+Kordofanian
+Korma
+Korngold
+Korsakov
+Kortrijk
+Koruna
+Korzybski
+Kos
+Kosciusko
+Kossuth
+Kostroma
+Kosygin
+Kota
+Kotabaru
+Koulibiaca
+Koumis
+Kovno
+Kovrov
+Koweit
+Kowhai
+Kozhikode
+Kra
+Kraal
+Kragujevac
+Krait
+Krakau
+Kramatorsk
+Krameria
+Kranj
+Krans
+Krasnodar
+Krasnoyarsk
+Krefeld
+Kreisky
+Kreisler
+Kremenchug
+Kremer
+Krems
+Kreplach
+Kreutzer
+Kriegspiel
+Kriemhild
+Krimmer
+Krio
+Krips
+Kriss
+Kristiansand
+Kristianstad
+Krivoy
+Kromesky
+Krone
+Kronig
+Kronos
+Kroon
+Kropotkin
+Krugersdorp
+Kruller
+Krummhorn
+Krupp
+Kruysen
+Krym
+Kshatriya
+Kuala
+Kuban
+Kubelik
+Kublai
+Kubrick
+Kuch
+Kuchen
+Kuching
+Kueh
+Kuenlun
+Kufic
+Kuibyshev
+Kukri
+Kuku
+Kula
+Kulturkampf
+Kulun
+Kum
+Kumamoto
+Kumasi
+Kumbaloi
+Kung
+Kungur
+Kunming
+Kunzite
+Kuomintang
+Kuopio
+Kura
+Kurgan
+Kuril
+Kurland
+Kurosawa
+Kuroshio
+Kurrajong
+Kursaal
+Kursk
+Kurzeme
+Kuskokwim
+Kutaisi
+Kutch
+Kutuzov
+Kuznetsk
+Kwa
+Kwacha
+Kwajalein
+Kwakiutl
+Kwangchow
+Kwangchowan
+Kwangju
+Kwangtung
+Kwantung
+Kwanza
+Kwara
+Kwazulu
+Kweichow
+Kweilin
+Kweisui
+Kweiyang
+Kwela
+Kynewulf
+Kyongsong
+Kyprianou
+Kyrie
+Kyushu
+LPG
+La
+Laager
+Laaland
+Laburnum
+Lacedaemonian
+Lactobacillus
+Ladin
+Ladino
+Lagting
+Lahnda
+Lahti
+Laibach
+Lakeland
+Lakes
+Laksa
+Lakshadweep
+Lalo
+Lamaism
+Lamarckian
+Lamarckism
+Lamington
+Lammas
+Lammastide
+Lancastrian
+Landau
+Langland
+Langobard
+Langobardic
+Langridge
+Langton
+Langtry
+Lantana
+Lapith
+Laplacian
+Lapland
+Lapp
+Lar
+Laski
+Lassen
+Latakia
+Latimeria
+Latina
+Latinism
+Latinist
+Latino
+Latona
+Latour
+Latvian
+Laudian
+Laughton
+Launce
+Launceston
+Lawless
+Lawrentian
+Lazar
+Leacock
+Leaf
+Leah
+Leamington
+Leatherette
+Leda
+Lefkowitz
+Leibnitz
+Leicester
+Leicestershire
+Leichhardt
+Leiden
+Leif
+Leinsdorf
+Leinster
+Leishmania
+Leitner
+Lemberg
+Lemmens
+Leninabad
+Leninakan
+Leno
+Lenya
+Leoncavallo
+Leonidas
+Leopardi
+Lepanto
+Lepidosiren
+Leptocephalus
+Lepton
+Lepus
+Lermontov
+Lerwick
+Lethbridge
+Leto
+Lett
+Lettish
+Leucippus
+Levant
+Levantine
+Leverhulme
+Leverkusen
+Levite
+Levitical
+Levko
+Lewisham
+Leyte
+Lhasa
+Liadov
+Liao
+Liaoning
+Liaotung
+Liaoyang
+Lias
+Lichfield
+Liebfraumilch
+Lilith
+Limbourg
+Limburg
+Limburger
+Limpopo
+Lincolnshire
+Linnaean
+Linsang
+Lipetsk
+Lippizaner
+Liriodendron
+Listerism
+Liszt
+Liv
+Ljubljana
+Llandaff
+Llandudno
+Llanelli
+Llangollen
+Llewellyn
+Lleyn
+Lobachevsky
+Locarno
+Loewe
+Lolland
+Lollard
+Lombrosian
+Longbenton
+Longford
+Longobard
+Lonicera
+Lorengar
+Loretta
+Lota
+Loughborough
+Louisburg
+Luba
+Lucan
+Lucania
+Lucina
+Lucknow
+Luddite
+Ludendorff
+Ludwigsburg
+Ludwigshafen
+Luffa
+Luganda
+Lugansk
+Luluabourg
+Luo
+Lupercalia
+Lur
+Lusatian
+Lusitania
+Lutetia
+Luton
+Lutoslawski
+Lutyens
+Luxemburg
+Luxon
+Lvov
+Lycian
+Lydian
+Lyme
+Lymington
+Lyonnais
+Lyonnesse
+Lysander
+Lysenkoism
+Lysimachus
+Lytham
+Lythraceous
+Lyublin
+MFD
+MIRV
+MKS
+MKSA
+MSC
+MVS
+MVT
+Ma
+Maag
+Maar
+Maarianhamina
+Maas
+Maastricht
+Maazel
+Mab
+MacKerras
+Macao
+Macaskill
+Macau
+Maccabean
+Maccabees
+Macclesfield
+Macdonnell
+Mackay
+Mackerras
+Maclean
+Macleod
+Macmahon
+Macneice
+Macpherson
+Macready
+Maddalena
+Maecenas
+Magdalen
+Magdalenian
+Magdeburg
+Magellan
+Maghreb
+Maglemosian
+Magnificat
+Magyar
+Mahdi
+Mahican
+Mahomet
+Mahonia
+Mahound
+Maia
+Maintenon
+Maitland
+Majlis
+Malacca
+Malaya
+Malinowski
+Malison
+Malpighian
+Mam
+Mameluke
+Manchu
+Mancunian
+Mandaean
+Mandalay
+Mande
+Mandeville
+Mandingo
+Manichaeism
+Mannerheim
+Mannheim
+Mantler
+Manuguerra
+Manx
+Manxman
+Marabout
+Maracaibo
+Maratha
+Marathi
+Marburg
+Marchland
+Marciano
+Marcionism
+Marconi
+Marengo
+Marenzio
+Margaux
+Margay
+Marge
+Mariana
+Mariehamn
+Marienbad
+Marinduque
+Marinetti
+Mariolatry
+Mariology
+Marist
+Mariupol
+Marius
+Marivaux
+Markevitch
+Markhor
+Markka
+Markova
+Marley
+Marlow
+Maronite
+Marquesan
+Marrakech
+Marrakesh
+Marriner
+Marsala
+Marseillaise
+Marseille
+Marshalsea
+Marston
+Martin
+Martinmas
+Martinon
+Marton
+Masai
+Mascagni
+Masefield
+Massawa
+Massenet
+Matabele
+Matabeleland
+Mathis
+Matorin
+Mattila
+Mauceri
+Maud
+Maugham
+Mauricio
+Maurist
+Mauser
+Mavourneen
+Mawson
+Maxim
+Mayakovski
+Mayan
+Mayen
+Mayotte
+Mazdaism
+Mbujimayi
+McNair
+Mccarthyism
+Mccartney
+Mccormack
+Mccullers
+Mcdiarmid
+Mcgonagall
+Mcluhan
+Mclure
+Mcmunn
+Mcmurdo
+Mcnaughten
+Mcqueen
+Meade
+Meccano
+Mechem
+Mechlin
+Mecklenburg
+Mede
+Medina
+Megaera
+Mehta
+Meissen
+Melaleuca
+Melanochroi
+Melchite
+Melchizedek
+Meleager
+Melitopol
+Melton
+Melungeon
+Memnon
+Memphian
+Mendeleyev
+Mendelism
+Menelik
+Mengelberg
+Menshevik
+Menton
+Mercian
+Mercouri
+Mercurian
+Mercurochrome
+Merionethshire
+Merovingian
+Merseburg
+Mersey
+Merseyside
+Merton
+Mesembryanthemum
+Mesple
+Messapian
+Metol
+Metternich
+Mexicali
+Meyerbeer
+Meyerhof
+Micah
+Michaelmas
+Micmac
+Microscopium
+Middelburg
+Middlesbrough
+Middlewood
+Midway
+Milashkina
+Milford
+Milhaud
+Milnes
+Milstein
+Mina
+Mindel
+Ming
+Mingrelian
+Minkowski
+Minorca
+Minorite
+Minton
+Minya
+Miquelon
+Miserere
+Mishima
+Mishnah
+Mithraism
+Mithras
+Mitropolous
+Mitropoulos
+Mittelland
+Mitterrand
+Mixtec
+Mizoguchi
+Mlle
+Mme
+Mnemosyne
+Modiolus
+Modred
+Mogilev
+Mohave
+Mohican
+Mohock
+Mojave
+Moldau
+Moldavian
+Moldavite
+Molech
+Moll
+Mollet
+Molokai
+Mommsen
+Momus
+Moncton
+Mondale
+Mondial
+Monegasque
+Mongo
+Mongol
+Mongolic
+Monmouthshire
+Monophysite
+Monteux
+Montezuma
+Montgomeryshire
+Montserrat
+Moorcock
+Moorland
+Moradabad
+Mordvin
+Mordvinian
+Moreton
+Morisco
+Moro
+Morocco
+Morpheus
+Moselle
+Mossi
+Mosul
+Mountbatten
+Mountie
+Moussorgsky
+Mousterian
+Mozambique
+Mozarab
+Mridang
+Muharram
+Mulciber
+Munch
+Munda
+Murdabad
+Murdoch
+Murillo
+Murmansk
+Musca
+Muskhogean
+Mussulman
+Muti
+Mwalimu
+Mweru
+Mycobacterium
+Myrica
+Myrmidon
+NCAR
+NGK
+NTP
+Naafi
+Nabataean
+Nabokov
+Nabonidus
+Nadia
+Naga
+Nagaland
+Nagana
+Nagano
+Nagari
+Nagpur
+Nagyszeben
+Nahuatl
+Nahum
+Nama
+Namaqualand
+Namibia
+Nana
+Nansen
+Napier
+Napierian
+Napoli
+Napravnik
+Narayanganj
+Narraganset
+Nathanael
+Nauru
+Navassa
+Nayarit
+Nazarite
+Nearctic
+Neblett
+Nederland
+Negress
+Negritic
+Negrito
+Negrophil
+Negrophobe
+Negus
+Nehemiah
+Nejd
+Nekrasov
+Nelly
+Nelson
+Nembutal
+Nemean
+Nemesia
+Neocene
+Neogaea
+Neogene
+Neotropical
+Neozoic
+Neptunian
+Nereis
+Neri
+Nestorianism
+Neubrandenburg
+Neville
+Nevis
+Nevski
+New
+Newburg
+Newcombe
+Newcomen
+Newfie
+Newgate
+Newham
+Newhaven
+Newmarket
+Newtonabbey
+Newtown
+Ngaio
+Ngaliema
+Ngoma
+Nguni
+Ngwee
+Nha
+Nicaea
+Nice
+Nicene
+Nicias
+Nicobar
+Nicol
+Nicola
+Nicolai
+Nicolesco
+Nicolson
+Nicotiana
+Niedersachsen
+Niersteiner
+Nietszche
+Niflheim
+Nijmegen
+Nikaria
+Nike
+Nikolainkaupunki
+Nikolayev
+Nilotic
+Nimitz
+Nimrod
+Nimwegen
+Ningpo
+Ninon
+Nipissing
+Nisei
+Nishapur
+Nissen
+Niue
+Nizam
+Noachian
+Noble
+Noctiluca
+Noguchi
+Noordholland
+Nordkyn
+Norland
+Normanton
+Norn
+Norseman
+Northallerton
+Northamptonshire
+Northcliffe
+Northcountryman
+Northman
+Northmen
+Northumbria
+Northumbrian
+Northumbrians
+Northwich
+Nostoc
+Notogaea
+Notornis
+Nototherium
+Notour
+Nottinghamshire
+Notus
+Novgorod
+Novokuznetsk
+Nuba
+Nucci
+Nuffield
+Nullstellensatz
+Nuneaton
+Nupe
+Nuremberg
+Nyanja
+Nyasaland
+Nynorsk
+Nyoro
+OSHA
+Oahu
+Oakham
+Oakville
+Oaxaca
+Obadiah
+Oberammergau
+Oberhausen
+Oberland
+Oberon
+Obraztsova
+Ochman
+Ockham
+Ocrea
+Octans
+Octavian
+Octobrist
+Odelsting
+Odontoglossum
+Ogham
+Oglethorpe
+Ogpu
+Ogygian
+Oidium
+Oireachtas
+Oistrakh
+Okayama
+Okeechobee
+Okefenokee
+Okhotsk
+Okie
+Olcott
+Oldcastle
+Oldham
+Oliveira
+Olynthus
+Ommiad
+Omsk
+Ophiuchus
+Oporto
+Oppens
+Orangeism
+Orangeman
+Oratorian
+Orcadian
+Ordovician
+Orenburg
+Orff
+Oriya
+Orleanist
+Ormandy
+Ormazd
+Ornithorhynchus
+Orphean
+Orphism
+Orpington
+Orsk
+Orvieto
+Osage
+Oscan
+Oshawa
+Oshogbo
+Osijek
+Osmanli
+Osnaburg
+Osset
+Ossetic
+Ossian
+Ostrogoth
+Ostyak
+Othin
+Ottley
+Ouija
+Ovambo
+Overijssel
+Oxbridge
+Oxfordshire
+Ozawa
+PABA
+PCB
+PCBS
+POBox
+PUC
+PWT
+Paal
+Pachisi
+Pachouli
+Pacific
+Paddywhack
+Paderewski
+Padus
+Pahari
+Pahlavi
+Paignton
+Paiute
+Palacio
+Palaearctic
+Palaeocene
+Palaeozoic
+Palau
+Palenque
+Pali
+Pallas
+Palmerston
+Panama
+Panathenaea
+Pandarus
+Pandean
+Panhellenic
+Panhellenism
+Panjabi
+Pantagruel
+Paphian
+Papiamento
+Papuan
+Paracel
+Paracelsus
+Parma
+Parnassian
+Parnassus
+Parsee
+Parthenopaeus
+Parthenope
+Parthenos
+Parthian
+Pasch
+Pashto
+Passamaquoddy
+Passiontide
+Pasteurism
+Pathan
+Patmos
+Pauk
+Paulinus
+Pavarotti
+Pavo
+Pawnee
+Pears
+Pecksniffian
+Pehlevi
+Pekin
+Pekingese
+Pelagian
+Pelagianism
+Pelasgian
+Peleus
+Pelew
+Pelias
+Pelmanism
+Peloponnesian
+Pelops
+Pembrokeshire
+Pentland
+Pentstemon
+Penutian
+Pepys
+Pequot
+Perceval
+Percheron
+Peritricha
+Perlman
+Persicaria
+Persis
+Persson
+Pesach
+Peterborough
+Peterlee
+Peterloo
+Peterman
+Petermann
+Petersham
+Petra
+Petrie
+Petrine
+Petronius
+Petropavlovsk
+Petrosian
+Petrov
+Petrovsk
+Petrozavodsk
+Peyer
+Pfalz
+Pforzheim
+Phaeacian
+Phaedrus
+Philadelphus
+Philippeville
+Philippic
+Philistia
+Philistinism
+Philoctetes
+Philomela
+Phlegethon
+Phoenician
+Phragmites
+Phrygian
+Phylloxera
+Pianola
+Piavko
+Picard
+Pickwickian
+Pictish
+Pierian
+Pierides
+Pierrot
+Pietermaritzburg
+Pieterson
+Pilsen
+Pilsudski
+Piltdown
+Pindaric
+Pinkerton
+Pinkster
+Pinsk
+Pisanello
+Pisano
+Piscis
+Pitcairn
+Pithecanthropus
+Pitta
+Plasson
+Plasticine
+Platonical
+Plattdeutsch
+Platte
+Platteland
+Plautus
+Podolsk
+Pogonia
+Pogorelich
+Polack
+Polanski
+Polje
+Pollack
+Pollini
+Pollyanna
+Polska
+Polycarp
+Pondo
+Pondoland
+Pons
+Pontic
+Popov
+Popp
+Porson
+Posen
+Positif
+Poulenc
+Powhatan
+Praesepe
+Praetorian
+Prakrit
+Pressburg
+Pretre
+Preussen
+Previn
+Prey
+Priapus
+Price
+Principe
+Priscian
+Procne
+Prokopyevsk
+Proterozoic
+Protophyta
+Provincetown
+Prunella
+Prussianism
+Pskov
+Psoralea
+Ptolemaist
+Puppis
+Purbeck
+Puseyism
+Pyrrhus
+Pythagoreanism
+Pythia
+Pythian
+Quadragesima
+Quassia
+Queenborough
+Queenstown
+Quimper
+Quinquagesima
+Quirites
+Quivar
+RI
+RTT
+Rabelais
+Rabelaisian
+Rabi
+Rabia
+Rackham
+Radetzky
+Radnorshire
+Rafflesia
+Raia
+Raimondi
+Rajput
+Rama
+Rambouillet
+Rameses
+Rampal
+Randova
+Ranki
+Rapallo
+Raphia
+Rastafarian
+Rattle
+Rauwolfia
+Ravel
+Rea
+Rebozo
+Recklinghausen
+Redbridge
+Redemptorist
+Redgrave
+Regensburg
+Rehoboam
+Reichsrat
+Reiner
+Remblai
+Reme
+Remex
+Renardy
+Renfrew
+Rensselaerite
+Resnik
+Respighi
+Reunion
+Rhadamanthus
+Rhaetian
+Rhaetic
+Rheinland
+Rhemish
+Rhodesian
+Rhodesoid
+Rhodian
+Rhodope
+Ricci
+Ricciarelli
+Riesling
+Rigsdaler
+Rijeka
+Rijksdaaler
+Rijn
+Rijswijk
+Riksdag
+Rimini
+Rimsky
+Ripuarian
+Riss
+Rivera
+Roanoke
+Robeson
+Robespierre
+Robson
+Rochberg
+Rochdale
+Rochelle
+Rockhampton
+Rockingham
+Rodin
+Rodrigo
+Rodzinski
+Roethke
+Rojak
+Rolf
+Rollo
+Roma
+Romagna
+Romaic
+Romains
+Romaji
+Romanes
+Romanic
+Romanies
+Romanism
+Romanist
+Romanov
+Romansch
+Romany
+Romberg
+Romero
+Romeros
+Romish
+Rommel
+Romney
+Roncesvalles
+Ronin
+Ronsard
+Rosalind
+Rosicrucian
+Rossini
+Rostov
+Rostropovich
+Rotherham
+Rothermere
+Rothesay
+Rotterdam
+Rouault
+Roubaix
+Roussillon
+Routemarch
+Rowan
+Rowbotham
+Rowicki
+Rowlandson
+Roxburgh
+Royden
+Rozhdestvensky
+Rubenstein
+Rubicon
+Rudesheimer
+Ruhr
+Rumpelstiltskin
+Rundstedt
+Rupert
+Rurik
+Ruritania
+Ruskin
+Russky
+Russophile
+Russophobe
+Ruthenian
+Rutherfordium
+Rutter
+Rybinsk
+Ryswick
+Ryukyu
+Ryurik
+Rzewski
+SNCC
+SNOBOL
+STOL
+Saadi
+Saar
+Saarinen
+Saarland
+Sabaean
+Sabaoth
+Sabbatarian
+Sabellian
+Sackville
+Sacramentarian
+Sadducee
+Saens
+Safar
+Safi
+Sahaptin
+Saharan
+Saint
+Saintpaulia
+Saiva
+Sakai
+Sakharov
+Sakyamuni
+Salford
+Salian
+Salicornia
+Sallinen
+Salminen
+Salol
+Salonen
+Salpa
+Salpiglossis
+Salvia
+Salzburg
+Samarkand
+Sambo
+Samian
+Samnite
+Samoyed
+Sanctus
+Sandhurst
+Sandringham
+Sandwich
+Sanforized
+Sanger
+Sangh
+Sangraal
+Sanjak
+Sankhya
+Santee
+Sao
+Sarajevo
+Sarangi
+Saransk
+Saratov
+Sard
+Sardinian
+Sardis
+Sardius
+Sardou
+Sargodha
+Sargon
+Sark
+Sarkis
+Sarracenia
+Sarsen
+Saschowa
+Sassanid
+Sassenach
+Satie
+Satsuma
+Saturnian
+Sauerbaum
+Sawney
+Saxe
+Scandian
+Schaerbeek
+Schaffhausen
+Schein
+Schenck
+Schiedam
+Schiff
+Schippers
+Schleiermacher
+Schlesien
+Schleswig
+Schliemann
+Schnecken
+Schnitzler
+Schwarz
+Schwarzkopf
+Sci
+Scimone
+Scleroderma
+Scofield
+Scopus
+Scorpius
+Scotism
+Scotswoman
+Scotticism
+Scotto
+Scriabin
+Scythian
+Seabee
+Sealyham
+Searle
+Seaton
+Sebastopol
+Secunderabad
+Sedgemoor
+Seebeck
+Seeger
+Seeland
+Seidlitz
+Seifert
+Selene
+Seleucid
+Selig
+Seljuk
+Semipalatinsk
+Semitics
+Senechal
+Senlac
+Sephardi
+Septembrist
+Septuagint
+Serapis
+Serb
+Serkin
+Sevastopol
+Severnaya
+Severus
+Sexagesima
+Shaban
+Shabuoth
+Shackleton
+Shaka
+Shakta
+Shakti
+Shang
+Shankar
+Shankaracharya
+Sharia
+Shavian
+Shaw
+Shawwal
+Shchedrin
+Shcheglovsk
+Shcherbakov
+Shechem
+Shekinah
+Shemite
+Shemitic
+Sheol
+Sherpa
+Sherrington
+Shetland
+Shiah
+Shiism
+Shimonoseki
+Shiraz
+Shluh
+Shoa
+Sholokhov
+Shona
+Shoshonean
+Shostakovich
+Shrewsbury
+Shropshire
+Shrovetide
+Shulamite
+Sibelius
+Sicanian
+Siddhartha
+Sierra
+Sihanouk
+Sika
+Silures
+Silurian
+Silvanus
+Simarouba
+Simbirsk
+Simeon
+Simferopol
+Sinaloa
+Sindhi
+Singhalese
+Sinhalese
+Sinicism
+Sinitic
+Sinopoli
+Sintow
+Siouan
+Siracusa
+Sisley
+Sitka
+Sivaism
+Sivan
+Siwash
+Sixtus
+Skelton
+Skijoring
+Skikda
+Skimmia
+Skipton
+Skokiaan
+Skolly
+Skrowaczewski
+Skua
+Slatkin
+Slavism
+Slavkov
+Slavonia
+Slavophile
+Slavophiles
+Slesvig
+Slovak
+Slovene
+Smeaton
+Smetana
+Smilax
+Smirnov
+Smolensk
+Smollett
+Sobranje
+Socinian
+Soderblom
+Soderstrom
+Sodom
+Soffel
+Sogdian
+Solenodon
+Solti
+Solutrean
+Solzhenitsyn
+Somaliland
+Sondheim
+Songhai
+Sorbian
+Sorbonne
+Sordello
+Sothic
+Sothis
+Sotho
+Souphanourong
+Souslik
+Sousse
+Souterrain
+Southdown
+Southern
+Southport
+Southron
+Southwark
+Sovetsk
+Soviet
+Soweto
+Soyinka
+Soyuz
+Spaak
+Spartacus
+Spassky
+Speenhamland
+Spenborough
+Spence
+Spengler
+Spenser
+Spenserian
+Spinoza
+Spinozism
+Spitsbergen
+Spivakov
+Spratly
+Springhaas
+Srbija
+Stade
+Stagirite
+Stakhanovism
+Stalinabad
+Stalingrad
+Stalinism
+Stalinogrod
+Stalinsk
+Stanislavsky
+Stanleyville
+Starker
+Stavanger
+Stavropol
+Steber
+Stefansson
+Stegodon
+Stegomyia
+Stegosaurus
+Steier
+Steiermark
+Stein
+Steinbeck
+Steinitz
+Stellite
+Stern
+Stijl
+Stillson
+Stillsons
+Stilton
+Stilwell
+Stockhausen
+Stockport
+Stockwood
+Stokowski
+Stokys
+Storting
+Stourbridge
+Stradivari
+Stradivarius
+Strafford
+Stralsund
+Stranraer
+Stratas
+Strathclyde
+Straus
+Stravaig
+Streisand
+Strelitzia
+Stretford
+Streusel
+Stroheim
+Strophanthus
+Strymon
+Stu
+Stylops
+Sudetenland
+Sudra
+Sufi
+Sufism
+Sultanabad
+Sulu
+Sumba
+Sumbawa
+Summers
+Sumo
+Sunderland
+Sunni
+Sunnite
+Suomi
+Surinam
+Suriname
+Susanna
+Susian
+Susu
+Sutcliffe
+Suvorov
+Suwannee
+Svalbard
+Sverdlovsk
+Svetlanov
+Swabia
+Swadeshi
+Swanee
+Swatow
+Swazi
+Swedenborg
+Swedenborgianism
+Sweeny
+Swithin
+Sylvan
+Symons
+Syriac
+Syrtis
+Szabadka
+Szczecin
+Szechwan
+Szeged
+Szell
+Szerying
+Szeryng
+Szewinska
+Szombathely
+Szymanowski
+TKO
+TP
+TWP
+Tabasco
+Tabriz
+Tacamahac
+Tacchino
+Tachina
+Tadzhiki
+Tagalog
+Tai
+Taichung
+Tainan
+Taino
+Taiping
+Taisho
+Tajik
+Talaing
+Talmudist
+Talvela
+Tambov
+Tamerlane
+Tamworth
+Tanagra
+Tanjungpriok
+Tannenberg
+Tardenoisian
+Targum
+Tarkington
+Tarnopol
+Tarpeia
+Tarpeian
+Tarquin
+Tartarean
+Tartaric
+Tartarus
+Tasmanian
+Tatar
+Tatary
+Tatum
+Taunton
+Tay
+Taymyr
+Tayra
+Tayside
+Tbilisi
+Tchad
+Te
+Teal
+Tear
+Tebaldi
+Technicolor
+Technion
+Tel
+Telegu
+Telescopium
+Telford
+Telstar
+Telugu
+Tema
+Temne
+Tempe
+Templar
+Tenebrae
+Tenerife
+Tennstedt
+Tenzi
+Terence
+Teresina
+Tereus
+Ternopol
+Terrani
+Tethys
+Teton
+Teucer
+Teucrian
+Teuton
+Teutonism
+Tewkesbury
+Thanatos
+Thebaid
+Themis
+Theodora
+Theodoric
+Theophilus
+Thermit
+Thersites
+Thetford
+Thomism
+Thorndike
+Thorvaldsen
+Thucydides
+Thuja
+Thurgau
+Thuringia
+Thuringian
+Thurn
+Thyestes
+Tiberius
+Tilburg
+Tilbury
+Tilsit
+Timor
+Timoshenko
+Timour
+Tintagel
+Tippett
+Tirol
+Tiruchirapalli
+Tirunelveli
+Tisa
+Tishab
+Tisiphone
+Titanesque
+Titanomachy
+Titograd
+Titoism
+Tivoli
+Tjirebon
+Tlaxcala
+Tlemcen
+Tlingit
+Tmesis
+Tobey
+Tobolsk
+Tobruk
+Tocharian
+Tocqueville
+Togliatti
+Togoland
+Tojo
+Tokay
+Tokelau
+Tokharian
+Tokoloshe
+Tokugawa
+Tolan
+Tolbert
+Tolima
+Tolkien
+Toller
+Tolly
+Toltec
+Toluca
+Tome
+Tomowa
+Tomsk
+Tonbridge
+Tonga
+Tonka
+Tonkin
+Tophet
+Torricellian
+Torsk
+Tourel
+Townsville
+Tractarianism
+Transcaucasia
+Transylvanian
+Trappist
+Treblinka
+Trent
+Trevino
+Treviso
+Tridentine
+Trinil
+Tripitaka
+Triticum
+Tromelin
+Trondheim
+Trowbridge
+Troyanos
+Truffaut
+Truro
+Tuamotu
+Tuareg
+Tucana
+Tucker
+Tuckwell
+Tunbridge
+Tungus
+Tungusic
+Tupi
+Turanian
+Turco
+Turkey
+Turki
+Turkic
+Turkism
+Turkmen
+Turkoman
+Turks
+Tuvalu
+Twelfthtide
+Twi
+Twickenham
+Tyche
+Tynwald
+Tyrannosaurus
+Tyrian
+Tyrol
+Tyrolienne
+Tyrone
+Tyrr
+Tyrrhenian
+UHF
+Ubangi
+Ubiquitarian
+Ude
+Ugrian
+Ugric
+Uhland
+Uhuru
+Uigur
+Uinta
+Uitlander
+Ujamaa
+Ujiji
+Ujjain
+Ujung
+Ukase
+Ukiyoe
+Ulbricht
+Ullswater
+Ulm
+Ulsterman
+Ulyanovsk
+Umbrian
+Umbriel
+Unalaska
+Uniat
+Union
+United
+Ural
+Uralic
+Uranian
+Uredo
+Uriah
+Uriel
+Urmston
+Urnfield
+Ustinov
+Uxbridge
+Uzbek
+VAC
+VAG
+VDU
+VLF
+VTOL
+Vaal
+Vaasa
+Vaishnava
+Valencia
+Valenciennes
+Valentinian
+Valjakka
+Vanda
+Vandyke
+Vanir
+Vanuatu
+Varady
+Varangian
+Varga
+Varuna
+Vaseline
+Vaticanism
+Veasy
+Veblen
+Vedalia
+Vedanta
+Vedda
+Veddoid
+Vedernikov
+Vedic
+Velsen
+Venda
+Veneti
+Venetia
+Venetic
+Venezia
+Venizelos
+Venora
+Venusberg
+Veracruz
+Vernoleninsk
+Veronal
+Veronese
+Verrett
+Vertumnus
+Vierne
+Vietcong
+Vietminh
+Vihuela
+Viipuri
+Vijayawada
+Vilayet
+Villach
+Villahermosa
+Villainage
+Villanovan
+Villars
+Villeneuve
+Villeurbanne
+Villiers
+Villon
+Vilnius
+Viminal
+Vincennes
+Vindhya
+Vineland
+Vinland
+Virchow
+Visakhapatnam
+Visayan
+Visby
+Visconti
+Viseu
+Vishakhapatnam
+Vishinsky
+Vitebsk
+Vizagapatam
+Vizcacha
+Vizsla
+Vlaardingen
+Vlach
+Vladikavkaz
+Vlaminck
+Vlei
+Vlissingen
+Vltava
+Voetsek
+Voetstoots
+Vogelweide
+Vogul
+Volans
+Volapuk
+Volga
+Volgograd
+Volsci
+Volscian
+Von
+Vorarlberg
+Voronezh
+Voroshilov
+Voroshilovgrad
+Voroshilovsk
+Vortumnus
+Votyak
+Vouvray
+Vries
+Vuelta
+Vulcanite
+Vulpecula
+Vyatka
+Vyshinsky
+Vyvyan
+WAAC
+WAAF
+Waart
+Waddenzee
+Waddington
+Wahhabi
+Waikato
+Waikiki
+Wajda
+Wakashan
+Wakayama
+Wakerife
+Waksman
+Walach
+Walachia
+Walbrzych
+Walcheren
+Waldemar
+Waldenburg
+Waldgrave
+Waldheim
+Waley
+Wallachia
+Walloon
+Wallsend
+Walpurgis
+Walsall
+Walsingham
+Walther
+Walvis
+Wand
+Wandsworth
+Wapentake
+Wappenshaw
+Waragi
+Warangal
+Warbeck
+Ward
+Warfarin
+Warhol
+Warison
+Warley
+Warren
+Warrington
+Wartburg
+Warwickshire
+Wasatch
+Waterford
+Watford
+Watling
+Watteau
+Wattenscheid
+Watts
+Watusi
+Waugh
+Wayland
+Webern
+Wedgwood
+Weigela
+Weikert
+Weikl
+Weill
+Weimar
+Weismannism
+Weisshorn
+Weizmann
+Wellingborough
+Wellingtonia
+Welsbach
+Welshman
+Welwitschia
+Wembley
+Wenceslaus
+Wendish
+Wenkel
+Wensleydale
+Westernism
+Westfalen
+Westmeath
+Westmorland
+Wetterhorn
+Wexford
+Weymouth
+Whikehart
+White
+Whiteboy
+Whitechapel
+Whitefield
+Whitlam
+Whitley
+Whitlow
+Whitsun
+Whitsuntide
+Whittington
+Wickersley
+Wickliffe
+Wicklow
+Widor
+Wiesbaden
+Wigner
+Wigtown
+Wijngaarden
+Wilberforce
+Willcocks
+Wilton
+Wimbledon
+Wimshurst
+Winceyette
+Winchesters
+Winckelmann
+Wiseman
+Wittenberg
+Witwatersrand
+Wixell
+Wobbegong
+Wodehouse
+Woden
+Woking
+Wokingham
+Wolds
+Wolffian
+Wolfram
+Wolfsburg
+Wollongong
+Wolof
+Wolverhampton
+Woodsia
+Woomera
+Wotton
+Woulfe
+Wraac
+Wrexham
+Wunderlich
+Wycliffite
+Wykeham
+Xeres
+Xmas
+Yablonovy
+Yahoo
+Yahweh
+Yakut
+Yakutsk
+Yalu
+Yangtze
+Yankeeism
+Yarborough
+Yarkand
+Yaroslavl
+Yashmak
+Yekaterinburg
+Yekaterinodar
+Yekaterinoslav
+Yelisavetgrad
+Yelisavetpol
+Yelizaveta
+Yenisei
+Yerba
+Yerkes
+Yevtushenko
+Yid
+Yorke
+Yorkist
+Yorkists
+Yoruba
+Yoshihito
+Youngberry
+Younker
+Ypres
+Yquem
+Yresko
+Ysaye
+Yser
+Yseult
+Yssel
+Yuga
+Yukawa
+Yuman
+Yurev
+Yurlov
+Yuzovka
+Zaandam
+Zabrze
+Zacatecas
+Zaccaria
+Zacharias
+Zaibatsu
+Zakai
+Zakuski
+Zambezi
+Zamboanga
+Zamenhof
+Zamia
+Zanasi
+Zanthoxylum
+Zapotec
+Zeebrugge
+Zeeland
+Zeeman
+Zemstvo
+Zend
+Zenobia
+Zepperitz
+Zermatt
+Zetland
+Zhdanov
+Zhitomir
+Zhivkov
+Zho
+Zhukov
+Zimbabwe
+Zindabad
+Zinman
+Zinovievsk
+Zinzendorf
+Zoa
+Zoroastrianism
+Zouave
+Zoysia
+Zuider
+Zuidholland
+Zukerman
+Zwilich
+aardwolf
+abac
+abaca
+abactinal
+abadan
+abaddon
+abakan
+abamp
+abampere
+abator
+abbasid
+abbatial
+abbess
+abcoulomb
+abdias
+abdominous
+abednego
+abeokuta
+aberdare
+abfarad
+abhenry
+abib
+abietic
+abilene
+abingdon
+abirritant
+abirritate
+abkhaz
+ablactation
+ablator
+abohm
+aboideau
+aborticide
+aboukir
+aboulia
+abranchiate
+abri
+abruzzi
+abseil
+absinthism
+absonant
+absorbefacient
+absorptivity
+absquatulate
+abstergent
+abukir
+abulia
+abvolt
+abwatt
+aby
+abydos
+abysm
+acajou
+acanthaceous
+acanthine
+acanthoid
+acanthous
+acariasis
+acarid
+acaroid
+acarology
+acarpous
+acas
+acaudal
+accad
+accentor
+accidie
+accipitrine
+accommodatory
+accouplement
+accrescent
+accutron
+acerate
+acerose
+acescent
+acetabulum
+acetanilide
+acetometer
+acetophenetidin
+acetum
+acetylcholine
+acetylide
+acetylsalicylic
+achaea
+achelous
+achene
+acheron
+acheulian
+achlamydeous
+achlorhydria
+achondrite
+achondroplasia
+achromatin
+achromatous
+achromic
+acicula
+aciculate
+aciculum
+acidometer
+acidophil
+acidophilus
+acidosis
+acierate
+acinaciform
+aciniform
+ackee
+acl
+aclinic
+acnode
+acol
+aconcagua
+aconite
+acotyledon
+acouchi
+acridine
+acriflavine
+acrilan
+acrocarpous
+acrodrome
+acrogen
+acrolein
+acrolith
+acromegaly
+acromion
+acrospire
+acroter
+acrylamide
+acrylonitrile
+acrylyl
+acta
+actin
+actinal
+actinidin
+actiniform
+actinochemistry
+actinoid
+actinomere
+actinomorphic
+actinomycete
+actinomycin
+actinomycosis
+actinon
+actinopod
+actinotherapy
+actinouranium
+actinozoan
+actomyosin
+aculeus
+acutance
+acyclical
+adactylous
+adamawa
+adamsite
+adana
+adaptably
+addax
+ademption
+adenectomy
+adenitis
+adenocarcinoma
+adenohypophysis
+adenoidectomy
+adenovirus
+adhibit
+adiaphorism
+adiaphorous
+adiathermancy
+adipocere
+adit
+adivasi
+admass
+admetus
+adminicle
+adnate
+adnominal
+adnoun
+adowa
+adrastus
+adscription
+adsorbtion
+adsuki
+adularia
+adumbral
+aduwa
+adventitia
+adversarial
+adygei
+adynamia
+adytum
+adzhar
+adzuki
+aeciospore
+aecium
+aedile
+aegospotami
+aegrotat
+aeneous
+aestheticism
+afebrile
+affettuoso
+afflatus
+affreightment
+aforemention
+aforetime
+afrit
+afrormosia
+afterbody
+afterbrain
+afterburning
+afterheat
+afterpains
+aftersensation
+aftershaft
+aga
+agadir
+agalloch
+agamogenesis
+agaric
+agartala
+agateware
+agegroup
+aggro
+agha
+agiotage
+agist
+aglet
+agley
+aglimmer
+agma
+agminate
+agnail
+agni
+agnus
+agora
+agraffe
+agram
+agranulocytosis
+agraphia
+agrestal
+agrestic
+agrigento
+agrippina
+agrose
+agrostology
+agrypnotic
+agueweed
+agulhas
+ahab
+ahimsa
+ahithophel
+ahura
+aiglet
+aiguille
+aiguillette
+aikido
+aikona
+ailurophile
+ailurophobe
+ain
+aintab
+airboat
+airbrick
+aircraftman
+airdrie
+aire
+airforce
+airgun
+airt
+aisha
+aisne
+ait
+aitchbone
+ajaccio
+ajmer
+akbar
+akela
+akene
+akhara
+akhenaten
+akihito
+akkerman
+aksum
+akure
+akvavit
+alagez
+alagoas
+alamode
+alanbrooke
+alanine
+alannah
+alap
+alar
+albacete
+albata
+albemarle
+alberti
+albertite
+albertus
+albescent
+albinus
+albite
+albuminate
+albuminuria
+albumose
+alburnum
+alcaeus
+alcahest
+alcaide
+alcalde
+alcan
+alcatraz
+alcheringa
+alcidine
+alcmene
+alcoholicity
+alcuin
+aldabra
+aldan
+aldershot
+aldis
+aldol
+aldosterone
+aldoxime
+alecost
+alecto
+alegar
+alekhine
+alembicated
+alessandria
+alethic
+aleurone
+alevin
+alexandretta
+alexipharmic
+alfieri
+alfilaria
+alforja
+algarroba
+algebraical
+algeciras
+alginic
+algoid
+algolagnia
+algology
+algometer
+algor
+algorism
+alible
+alicante
+aligarh
+aliped
+alit
+aliunde
+alkalic
+alkane
+alkene
+alkmaar
+alky
+alkyd
+alkylation
+alkyne
+allanite
+allantoid
+allantois
+allargando
+alleppey
+allethrin
+allhallows
+alloa
+allodial
+allodium
+allonym
+alloplasm
+allotts
+allyou
+almada
+almelo
+almemar
+almonry
+almucantar
+almuce
+alodium
+alopecia
+alost
+alow
+alpenhorn
+alpes
+alphatically
+alpheus
+alphonsus
+alphorn
+alphosis
+alsace
+alsike
+alt
+altdorf
+altdorfer
+alternant
+althing
+althorn
+altiplano
+altissimo
+altogther
+altona
+altostratus
+aludel
+alula
+aluminiferous
+aluminothermy
+alumroot
+alvey
+alvine
+amadavat
+amadou
+amagasaki
+amalekite
+amalthea
+amaranthaceous
+amaranthine
+amarelle
+amaryllidaceous
+amatol
+amaut
+amazonas
+ambala
+ambary
+amberjack
+amberoid
+amblygonite
+amblyopia
+ambo
+amboceptor
+amboise
+amboyna
+ambroid
+ambry
+amdahl
+ameba
+ameer
+amenhotep
+amesace
+amhara
+amharic
+amianthus
+amice
+amicus
+amidol
+amidship
+amin
+aminophenol
+aminopyridine
+aminopyrine
+amir
+ammendment
+ammendments
+ammine
+ammocoete
+ammon
+ammonal
+ammonate
+ammonic
+amoebaean
+amon
+amontillado
+amoroso
+amowt
+amphiarthrosis
+amphiaster
+amphibiotic
+amphiblastula
+amphibrach
+amphichroic
+amphicoelous
+amphictyon
+amphictyony
+amphidiploid
+amphigory
+amphimacer
+amphimixis
+amphiprostyle
+amphiprotic
+amphisbaena
+amphistylar
+amphithecium
+amphitricha
+amphora
+amphoteric
+ampulla
+amravati
+amrita
+amstrad
+amur
+amygdala
+amygdalate
+amygdale
+amygdalin
+amygdaline
+amygdaloidal
+amylaceous
+amylase
+amylene
+amyloid
+amylolysis
+amylopectin
+amylopsin
+amylose
+amyotonia
+anabantid
+anabolite
+anabranch
+anacardiaceous
+anachorism
+anaclinal
+anacoluthia
+anacoluthon
+anacoustic
+anacrusis
+anadem
+anadex
+anadromous
+anadyr
+anaglypta
+anagnorisis
+anagoge
+anak
+analcite
+analects
+anambra
+anamnesis
+anamorphism
+anamorphoscope
+anamorphosis
+anandrous
+ananthous
+anapaest
+anaphrodisiac
+anaplasty
+anaptyxis
+anapurna
+anarthria
+anarthrous
+anasarca
+anastomose
+anatase
+anatolia
+anatto
+anaxagoras
+anaximander
+anaximenes
+anbury
+anchoveta
+anchylose
+ancipital
+ancohuma
+ancon
+ancy
+ancylostomiasis
+andalusia
+anderlecht
+andizhan
+andreanof
+andreotti
+androcles
+androclinium
+androecium
+androgenous
+androgyne
+andros
+androsphinx
+androsterone
+andvari
+ane
+anear
+anelace
+anele
+anemochore
+anemography
+anemology
+anemophilous
+anemoscope
+anergy
+anestrus
+anethole
+aneto
+aneuploid
+aneurin
+angelico
+angell
+angelology
+angiology
+angioma
+angostura
+angra
+anguilliform
+anguine
+angwantibo
+anhalt
+anhinga
+anhwei
+aniakchak
+aniconic
+anil
+anilingus
+anima
+animatism
+animato
+anisodactyl
+anisogamy
+anisole
+anisometric
+anisometropia
+anking
+ankus
+ankylosaur
+ankylose
+ankylosis
+ankylostomiasis
+anlace
+anlage
+annaba
+annabergite
+annates
+annatto
+annecy
+annhilate
+anno
+annulose
+anoa
+anoestrus
+anole
+anorak
+anorthositic
+anoxaemia
+ansate
+anschluss
+anshan
+antemeridian
+antependium
+antepenultimate
+antetype
+anteversion
+antevert
+anthelmintic
+anthemion
+antheridium
+antherozoid
+anthocyanin
+anthophore
+anthotaxy
+anthozoan
+anthracene
+anthracoid
+anthraquinone
+anthropomorphosis
+anthropomorphous
+anthropopathy
+anthropophagi
+anthropophagite
+antibaryon
+antibes
+anticathode
+antichlor
+anticholinesterase
+antichrist
+anticlastic
+anticlinorium
+anticosti
+anticyclone
+anticyclones
+antidromic
+antiegalitarian
+antifebrile
+antifederalist
+antiferromagnetism
+antifluoridation
+antihalation
+antihelices
+antihelix
+antihero
+antiheros
+antilepton
+antileptons
+antilogism
+antilogy
+antimasque
+antimere
+antimilitarist
+antimilitarists
+antimissile
+antimissiles
+antimonous
+antimonyl
+antiochus
+antiparallel
+antipater
+antiperistalsis
+antipsychiatry
+antirachitic
+antiremonstrant
+antisana
+antiscorbutic
+antistatic
+antisthenes
+antitragus
+antitype
+antiworld
+antlia
+antlion
+antofagasta
+antoninus
+antonioni
+antonius
+antonomasia
+antre
+antrim
+antrum
+antung
+anu
+anuradhapura
+anuran
+anuresis
+anuria
+anurous
+anvers
+anyang
+anzio
+anzus
+aorangi
+aosta
+aoudad
+apagoge
+apanage
+aparri
+apatetic
+apeldoorn
+apelles
+apeman
+apennines
+apery
+apetalous
+aphagia
+apheliotropic
+aphesis
+aphonia
+aphtha
+apia
+apiezon
+apivorous
+aplanospore
+aplite
+apnoea
+apo
+apocarp
+apochromat
+apocopate
+apocynaceous
+apocynthion
+apoenzyme
+apogamy
+apogeotropism
+apollinaris
+apomict
+apopemptic
+apophasis
+apophthegm
+apophyge
+apophyllite
+apophysis
+apopolectic
+aposiopesis
+apospory
+apostil
+appaloosa
+apparitor
+appassionato
+appel
+appendicectomy
+appendicle
+appenzell
+applecart
+applecarts
+applesnits
+appointor
+appointors
+approximal
+approximator
+approximators
+appulse
+apriorism
+apteral
+apterygial
+apuleius
+apulia
+apure
+apurimac
+apyretic
+aqaba
+aqualung
+aquashow
+aquileia
+aquire
+aquit
+aquitaine
+aquittal
+ara
+arabica
+arabinose
+arad
+arafura
+aragats
+aragon
+aragonite
+araguaia
+arak
+arakan
+araks
+araldite
+araliaceous
+aram
+aran
+araneid
+arany
+arapaima
+ararat
+araroba
+aras
+araucania
+araxes
+arbalest
+arbil
+arbitress
+arboraceous
+arbroath
+arbuthnot
+arcature
+archaean
+archaeomagnetism
+archaeozoic
+archegonium
+archenteron
+archerfish
+archespore
+archicarp
+archidiaconal
+archidiaconate
+archiepiscopal
+archiepiscopate
+archil
+archilochus
+archimage
+archimandrite
+archine
+archipenko
+archiphoneme
+archiplasm
+archoplasm
+arcograph
+arcus
+ardeb
+ardennes
+areg
+arenicolous
+arenite
+areography
+aretino
+arezzo
+argal
+argali
+argand
+argenteuil
+argentum
+argil
+argilliferous
+argillite
+argol
+argolis
+argonon
+argovie
+arica
+arietta
+aril
+arillode
+arimathea
+ariminum
+ariose
+arioso
+ariosto
+arista
+aristaeus
+aristarchus
+aristophanes
+arjuna
+arkose
+arkwright
+arles
+arlon
+armagh
+armagnac
+armband
+armes
+armet
+armiger
+armillary
+arminius
+armipotent
+armorica
+armure
+arne
+arnhem
+arnica
+arnim
+arno
+aroid
+aroint
+arp
+arpent
+arquebus
+arran
+arrestable
+arretium
+arrivisme
+arroba
+arru
+arse
+arsenopyrite
+arsphenamine
+artaud
+artaxerxes
+arteriovenous
+arthralgia
+arthromere
+artic
+artifical
+artifically
+artistical
+artois
+arunachal
+arundel
+arundinaceous
+aruspex
+aruwimi
+arvo
+arytenoid
+asantehene
+asarabacca
+asben
+ascariasis
+ascarid
+asch
+asci
+asclepiadaceous
+ascocarp
+ascogonium
+ascoli
+ascomycete
+ascorbic
+aseity
+asepalous
+asgard
+ashcroft
+ashe
+ashet
+ashkey
+ashlar
+ashlared
+ashlaring
+ashlars
+ashplant
+ashtoreth
+ashurbanipal
+asir
+askari
+askja
+aslef
+asmara
+asmodeus
+aso
+asoka
+aspergillosis
+aspergillus
+asphyxiant
+asphyxiants
+aspinwall
+asquint
+asquith
+assad
+assentient
+asshur
+assibilate
+assiniboine
+assistents
+assiut
+associationism
+assuan
+assurbanipal
+astable
+astaire
+asternal
+asti
+astolat
+astomatous
+astraphobia
+astrict
+astrobotany
+astrocompass
+astrodynamics
+astrogeology
+astroid
+astrometry
+asturias
+astyanax
+asur
+aswan
+asyllabic
+asymptotical
+asyut
+atacama
+atactic
+ataghan
+atahualpa
+ataman
+atbara
+athabaska
+athamas
+athanasius
+athelstan
+athematic
+athermanous
+atheroma
+athodyd
+athos
+atli
+atmolysis
+atomy
+atrabilious
+attaboy
+attedance
+attemper
+attenuant
+attercliffe
+attlee
+attu
+atween
+aubade
+aube
+aude
+audiotypist
+audiphone
+auer
+auklet
+aulic
+aulis
+aurangzeb
+aurelian
+aureus
+auriferous
+auriol
+aurist
+aurum
+ausforming
+ausonius
+austen
+austenitic
+autacoid
+autarchy
+autarky
+autecious
+autecology
+auteur
+autochanger
+autochthon
+autocode
+autocue
+autocycle
+autoicous
+autokinetic
+autoload
+autoloaded
+autoloads
+autolycus
+autolyse
+automorphic
+autopista
+autoput
+autoradiographs
+autoroute
+autostability
+autostrada
+autotimer
+autotoxaemia
+autotoxin
+autotype
+autoxidation
+auvergne
+auxanometer
+auxochrome
+avadavat
+avagadro
+avalon
+avebury
+aveiro
+avellaneda
+avens
+averno
+aveyron
+avicenna
+aviemore
+avignon
+avizandum
+avlona
+avunculate
+awheel
+awlwort
+axseed
+axum
+ayacucho
+ayah
+ayahuasca
+aycliffe
+aydin
+ayesha
+ayr
+ayub
+ayurveda
+ayutthaya
+azan
+azazel
+azbine
+azikiwe
+aznavour
+azo
+azobenzene
+azoic
+azole
+azotemia
+azoth
+azotic
+baa
+baas
+baba
+babar
+babassu
+babbage
+babeuf
+babiche
+babirusa
+babu
+babul
+babur
+babylonia
+bacchius
+bacciform
+baccivorous
+baccy
+backbench
+backbencher
+backbenchers
+backblocks
+backbreaker
+backbreaking
+backchat
+backcloth
+backcomb
+backdate
+backdated
+backdates
+backdating
+backend
+backends
+backhaus
+backmost
+backscratcher
+backsheesh
+backstreet
+backus
+backwardation
+baclava
+bacolod
+bacteraemia
+bacteriological
+bacteriology
+bacteriolysis
+bacteriophage
+bacteriostasis
+bacteroid
+bactria
+baculiform
+baculum
+badajoz
+badalona
+badderlocks
+baddie
+badman
+badoglio
+baeda
+bael
+baeyer
+baez
+bagasse
+bagehot
+bagh
+baghlan
+bagie
+bagnio
+baguio
+bagwash
+bagwig
+bagworm
+bahadur
+bahasa
+bahia
+baht
+bahuvrihi
+baikal
+baile
+baines
+bairnsfather
+baja
+bajan
+bakeapple
+bakehouse
+bakewell
+bakra
+baksheesh
+bakst
+bakunin
+balaclava
+balanchine
+balas
+balata
+balbo
+balbriggan
+baldmoney
+baldric
+balibuntal
+balikpapan
+baliol
+balkh
+balkhash
+balladmonger
+ballance
+ballarat
+ballflower
+balliol
+ballocks
+ballonet
+balmain
+balmung
+balneal
+balneology
+balpa
+balsamiferous
+balsaminaceous
+banaras
+banat
+banc
+bandaranaike
+banderilla
+banderillero
+bandh
+bandicoot
+bandjarmasin
+bandobust
+bandoline
+bandore
+bandsaw
+bandspreading
+bandung
+bangalore
+bangka
+bangweulu
+banian
+banja
+banjermasin
+banjul
+banka
+banket
+banknote
+banknotes
+bannerol
+bansela
+banstead
+bant
+banting
+bap
+baranof
+baraza
+barbel
+barbellate
+barbet
+barbette
+barbican
+barbicel
+barbituric
+barbizon
+barbule
+barbusse
+barca
+barcarole
+barce
+barchart
+barcharts
+bardot
+barehanded
+bareilly
+barents
+baresark
+bargee
+bargepole
+barilla
+barite
+barkentine
+barkhan
+barletta
+barm
+barnardo
+barnaul
+barnsley
+barnum
+barocchio
+baroda
+baroja
+barong
+baroscope
+barostat
+barouche
+barozzi
+barque
+barquentine
+barquisimeto
+barracoon
+barracouta
+barranquilla
+barrault
+barrenwort
+barret
+barrie
+barros
+bartizan
+bartolommeo
+barycentre
+barye
+barysphere
+baryta
+barytes
+barytone
+basaltware
+bascinet
+baseburner
+basenji
+bashan
+bashibazouk
+basifixed
+basilan
+basildon
+basilicata
+basle
+basotho
+bassein
+bassenthwaite
+basseterre
+bastardry
+bastia
+bastinado
+bastnaesite
+bastogne
+batangas
+batata
+bateleur
+batesian
+bathetic
+batholith
+bathsheba
+bathyal
+bathymetry
+bathyscaph
+bathysphere
+batley
+battels
+battersea
+battik
+battledore
+battlepiece
+batum
+batwoman
+bauchi
+baucis
+baudouin
+bautzen
+bawbee
+bawdyhouse
+bawdyhouses
+bayern
+bayeux
+bayle
+baysian
+baywood
+bazoo
+bdellium
+beachie
+beadledom
+beanery
+beanfeast
+beano
+beanpole
+beasty
+beatles
+beatty
+beauharnais
+beaumarchais
+beaut
+beauvais
+beauvoir
+beaverbrook
+bebeerine
+bebel
+beccafico
+bechet
+becquerel
+beddable
+bedesman
+bedight
+bedivere
+bedizen
+bedrail
+bedsit
+bedsits
+bedsitter
+bedspaces
+bedwarmer
+bedwetting
+bedworth
+beeb
+beechnut
+beefburger
+beento
+beerbohm
+beersheba
+beeswing
+beetfly
+beetroot
+beetroots
+beezer
+beforeimage
+beforeimages
+begad
+beggarweed
+begird
+begorra
+begum
+behan
+behistun
+beiderbecke
+beigel
+beira
+bejabers
+bejewel
+belah
+belemnite
+belfort
+belga
+belitung
+bellarmine
+bellay
+belleau
+belletrist
+bellinzona
+belloc
+bellybutton
+belmopan
+belovo
+bemean
+benadryl
+benares
+bendel
+bendigo
+bendy
+benedicite
+benempt
+benevento
+benfleet
+bengaline
+benghazi
+benguela
+benoni
+bentinck
+bentwood
+benue
+benzaldehyde
+benzidine
+benzine
+benzoate
+benzocaine
+benzofuran
+benzoic
+benzoin
+benzol
+benzophenone
+benzoquinone
+benzoyl
+benzyl
+berar
+berbera
+berberidaceous
+berbice
+bergdama
+bergerac
+bergius
+beria
+bering
+berio
+beriosova
+berk
+berks
+berley
+berlichingen
+berlinguer
+berm
+bermejo
+bermondsey
+bernadette
+bernadotte
+bernhardt
+bernicle
+bernina
+berretta
+bersagliere
+berseem
+bertillon
+bertolucci
+berzelius
+bespangle
+bespread
+bestrode
+bethe
+bethral
+bethralled
+bethralling
+bethrals
+bethsaida
+betjeman
+betook
+betti
+betulaceous
+beuthen
+bevan
+bevanite
+bevanites
+bevatron
+bevin
+bevvy
+bexley
+beyrouth
+bezique
+bezoar
+bezonian
+bezwada
+bhagalpur
+bhai
+bhakti
+bhang
+bharal
+bharat
+bharatiya
+bhatpara
+bhavan
+bhavnagar
+bhindi
+bhishti
+bhopal
+bhubaneswar
+bhutto
+biafra
+biak
+biannulate
+biarritz
+biauriculate
+bibliomancy
+bicarb
+bicephalous
+bicester
+bicollateral
+bicorn
+bida
+bidarka
+biddle
+bidentate
+bidistill
+bidistilled
+bidistilling
+bidistills
+biel
+bield
+bienne
+bierkeller
+biestings
+bifarious
+biffin
+bifoliate
+bifoliolate
+biforate
+bifrost
+bigarreau
+bigener
+bigmouth
+bignoniaceous
+biguanide
+bihar
+bijapur
+bijugate
+bikaner
+bikie
+bikila
+bilander
+bilbao
+bilberry
+bilboes
+bilection
+bilestone
+bilirubin
+biliverdin
+billabong
+billfish
+billyo
+bilobate
+biltong
+bimah
+bimanous
+bimbo
+bimorph
+binal
+binate
+bingey
+binghi
+binh
+binodal
+binominal
+binturong
+biocellate
+biochip
+biochips
+bioclimatology
+biocycle
+biodynamics
+bioenergetics
+bioherm
+biolysis
+bioplasm
+biopoiesis
+bioscope
+bioscopy
+biosis
+biostatics
+biostrome
+biparietal
+biparous
+bipetalous
+bipyramidal
+biquadrate
+biquarterly
+birendra
+biriani
+biro
+birobidzhan
+biros
+birthweight
+birthweights
+birtwhistle
+bis
+bisayas
+biscay
+bise
+bisectrix
+biserrate
+bish
+bishopbird
+bisitun
+bisk
+biskra
+bismuthic
+bismuthinite
+bismuthous
+bissextile
+bist
+bistability
+bisulcate
+bisulphate
+bisulphide
+bisulphite
+bisutun
+bisymmetric
+bithynia
+bitolj
+bitterling
+bitterwood
+bivvy
+bizerte
+blackbuck
+blackbutt
+blackcurrant
+blackett
+blackmore
+blackpool
+blackshirt
+blackstrap
+blackwall
+blackwood
+bladdernose
+bladderwrack
+blague
+blah
+blain
+blamey
+blanquette
+blasco
+blastocoel
+blastocyst
+blastoderm
+blastoff
+blastogenesis
+blastomere
+blastopore
+blaubok
+blaydon
+bleb
+bleep
+bleeped
+bleeper
+bleeping
+blennioid
+blenny
+blent
+blepharitis
+blet
+blewits
+blida
+bligh
+blighty
+blimey
+blindage
+blindstorey
+blockboard
+bloemfontein
+blois
+bloodbaths
+bloodsport
+bloodsports
+bloomery
+blotto
+blowback
+blowie
+blowlamp
+blub
+bludge
+bluethroat
+bluetit
+blundell
+blunge
+blunger
+boabdil
+boadicea
+boarfish
+boarhound
+boarish
+boatbill
+boathook
+bobbysoxer
+bobfloat
+boblet
+bobol
+bobotie
+bobowler
+bobsleigh
+bocage
+boccaccio
+boccherini
+boccioni
+bochum
+bocklogged
+bodensee
+bodge
+bodger
+bodgie
+bodh
+bodmin
+bodybuild
+bodycheck
+boethius
+boeuf
+bofors
+bogan
+bogarde
+bogart
+bogbean
+bognor
+bogong
+bogor
+bogtrotter
+bogwood
+boh
+bohea
+bohol
+bohunk
+boiardo
+boileau
+boilover
+bokassa
+bokmakierie
+bolection
+boleyn
+bolide
+bolingbroke
+boliviano
+bollocks
+bolzano
+boma
+bombacaceous
+bombora
+bombycid
+bomu
+bonaire
+bonaventura
+bonce
+bondservant
+boneblack
+boneshaker
+bonhoeffer
+bonin
+bonism
+bonnard
+bonsela
+bontebok
+boobialla
+boobook
+boohoo
+bookeeper
+booklouse
+boole
+boomkin
+boomslang
+boong
+boothia
+boothroyd
+bootloader
+bophuthatswana
+boracic
+boracite
+boraginaceous
+borborygmus
+bordure
+borecole
+boree
+borehole
+boreholes
+borgerhout
+borges
+borgholm
+borgia
+bornholm
+bornu
+borodino
+borrowable
+bors
+borstal
+borzoi
+boschbok
+boschvark
+bosh
+bosk
+boskop
+bossa
+bossboy
+bossuet
+bosworth
+botargo
+botha
+bothnia
+bothwell
+bothy
+botryoidal
+bott
+botticelli
+bottlebrush
+bottlenose
+bottomost
+bottrop
+botvinnik
+boucicault
+boudicca
+boulanger
+bourges
+bourgogne
+bovid
+bovril
+bovver
+bowden
+bowsaw
+bowshot
+bowyangs
+boxboard
+boxfish
+boxroom
+boyla
+boyne
+boyoma
+boysenberry
+boz
+bozen
+brabant
+brach
+brachiopod
+brachycephalic
+brachydactylic
+brachylogy
+brachypterous
+brachyuran
+bracknell
+bracteate
+bracteole
+bradawl
+bradman
+bradycardia
+bradykinin
+braga
+brahe
+braillex
+braillink
+braillo
+brailtel
+brainchildren
+brakesman
+brakpan
+bramante
+bramley
+branchiopod
+brancusi
+brando
+branle
+brasenose
+brashy
+brasier
+brasil
+brasilein
+brasilin
+brassie
+bratislava
+braunite
+braunschweig
+bravais
+bravissimo
+braxy
+brazils
+breadline
+breadmaking
+breadnut
+breadnuts
+breakbone
+breakeven
+breastpin
+breathalyse
+breathalyzer
+brecht
+brecon
+breda
+brede
+bree
+breenger
+bregenz
+brekky
+brevier
+brewis
+brey
+brezhnev
+briand
+briarroot
+bricklay
+bricole
+bridie
+bridlewise
+bridoon
+brie
+brierroot
+brigalow
+brighouse
+brightside
+brinell
+brinjal
+brinny
+briony
+brittonic
+britzka
+brix
+broadbill
+broadmoor
+broca
+broch
+brocken
+broddle
+broderie
+broederbond
+brogan
+brolga
+bromal
+brome
+bromeosin
+bromoform
+bromsgrove
+bronchia
+bronchiectasis
+bronchopneumonia
+bronchoscope
+brookite
+brooklet
+brooklime
+brookweed
+broomgrove
+broomhill
+broonzy
+brose
+browband
+broz
+brubeck
+brucine
+bruges
+bruin
+brumal
+brumby
+brume
+brummell
+brummie
+brundisium
+brunel
+brunelleschi
+brunhild
+brusa
+brushless
+brutify
+brynhild
+bryology
+bryony
+bryozoan
+btu
+bub
+bubal
+bubaline
+buber
+bubonocele
+bucaramanga
+buccinator
+bucentaur
+buchan
+buchner
+buchu
+buckeen
+buckhound
+buckish
+buckjumper
+buckra
+buckram
+bucovina
+budgerigar
+budgetted
+budgetting
+budweis
+buffon
+buganda
+bugbane
+bugong
+buhl
+buibui
+buitenzorg
+bukavu
+bukhara
+bukharin
+bukovina
+bul
+bulawayo
+bulbiferous
+bulganin
+bulimia
+bulle
+bullpen
+bullroarer
+bulnbuln
+bumbailiff
+bumf
+bummaree
+bumph
+bumsucking
+bunche
+buncombe
+bundelkhand
+bundesrat
+bundh
+bundobust
+bunin
+bunraku
+buntal
+bunyip
+buonaparte
+buonarroti
+buoyage
+buprestid
+bur
+buran
+buraydah
+burbage
+burbot
+burgas
+burghley
+burgomaster
+burgomasters
+burgrave
+burhel
+burk
+burka
+burleigh
+burnet
+burney
+burnley
+buroo
+burrawang
+bursarial
+bursiform
+burstone
+buryat
+busbar
+busera
+bushbaby
+bushcraft
+bushhammer
+bushido
+bushie
+bushpig
+bushranger
+bushtit
+bushveld
+bushwheel
+busoni
+busra
+bustee
+busuuti
+butanone
+butat
+butcherbird
+butenedioic
+butskellism
+butskellite
+butterbur
+butterine
+buttonmould
+butung
+butyrin
+buzzsaw
+byelovo
+byng
+byrnie
+byssinosis
+byssus
+bytom
+cabanatuan
+cabbageworm
+cabezon
+cabimas
+cabob
+cabochon
+cabora
+cabral
+cabretta
+cabrilla
+cachexia
+cachinnate
+cachucha
+cacique
+caciquism
+cacodyl
+cacoepy
+cacoethes
+cacology
+cacomistle
+cadaster
+cadelle
+cadi
+caecilian
+caecum
+caen
+caenozoic
+caeoma
+caerleon
+caernarfon
+caesalpiniaceous
+caesaraugusta
+caesarea
+caesium
+caespitose
+caesura
+caetano
+cafard
+caff
+cagliari
+cagliostro
+cagmag
+cagney
+cagoule
+cagoules
+caiaphas
+cainogenesis
+cainozoic
+caird
+cairngorm
+caithness
+caius
+cajeput
+cajuput
+calabria
+calalu
+calamanco
+calamondin
+calandria
+calathus
+calaverite
+calcar
+calcariferous
+calceiform
+calces
+calchas
+calcicole
+calciferol
+calcitonin
+calcsinter
+calculational
+caldarium
+calefacient
+calefactory
+cali
+calices
+caliche
+calicle
+califate
+caligula
+calimere
+calipash
+calipee
+calisaya
+calix
+callais
+callao
+callicrates
+callimachus
+callipash
+callipygian
+callisthenics
+calor
+caloyer
+calpe
+caltanissetta
+calutron
+calvaria
+calvities
+calx
+calyces
+calycine
+calycle
+calyptra
+calyptrogen
+camail
+camass
+cambay
+camberwell
+cambist
+camboose
+cambrai
+cambrel
+cambria
+cambyses
+cameral
+camerlengo
+camiknickers
+camisado
+camoodi
+campagna
+campania
+campanulaceous
+campeche
+campestral
+campina
+campinas
+campo
+camus
+camwood
+canaigre
+canakin
+canaletto
+canaliculus
+canara
+canarese
+canaster
+candia
+candleberry
+candlefish
+candlelit
+candlenut
+candlewood
+candyfloss
+candytuft
+canea
+canella
+cangue
+canikin
+cannabin
+cannae
+cannelloni
+cannelure
+cannes
+cannock
+cannula
+cannulate
+canoewood
+canonicate
+canonry
+canoodle
+canova
+canso
+cantal
+cantala
+cantatrice
+cantharides
+cantilena
+cantorial
+cantoris
+cantrip
+canula
+canzona
+canzone
+canzonet
+capabilites
+caparison
+capelin
+capercaillie
+capillaceous
+caplin
+caporetto
+capote
+cappadocia
+capparidaceous
+cappie
+cappuccino
+capreolate
+capric
+capriccioso
+caprifig
+caprifoliaceous
+caproic
+capsaicin
+capsid
+capua
+capuche
+caput
+caracal
+caracalla
+caracara
+caracul
+carageen
+caramba
+carangid
+caratacus
+caravanserai
+carbamate
+carbamic
+carbamidine
+carbanion
+carbene
+carbineer
+carbonade
+carbonado
+carboxylase
+carburation
+carburetted
+carburetter
+carby
+carbylamine
+carcajou
+carcanet
+carcassonne
+carchemish
+carcinomatosis
+cardin
+cardinalate
+cardiod
+carditis
+cardoon
+carduaceous
+carducci
+caretaking
+carew
+carfax
+carfuffle
+caria
+caribbees
+cariboo
+caries
+carifta
+carillon
+carillonneur
+carina
+carinate
+carinthia
+cariocan
+cariogenic
+carline
+carlota
+carlow
+carmagnole
+carmarthen
+carminative
+carnarvon
+carnassial
+carnatic
+carnauba
+carnet
+carnify
+carniola
+carnot
+carnotite
+carny
+carolus
+carotenoid
+carotid
+carpel
+carpentaria
+carpentier
+carpogonium
+carpology
+carpometacarpus
+carpophagous
+carpophore
+carrack
+carrycot
+carryng
+carse
+carstensz
+cartagena
+carteret
+cartful
+carthorse
+cartouche
+cartulary
+cartwright
+caruncle
+carvel
+cary
+caryatid
+caryophyllaceous
+caryopsis
+carzey
+casablanca
+casals
+casaubon
+cascabel
+cascarilla
+casease
+casebound
+casefy
+caseload
+caseloads
+caseose
+caserta
+caseworm
+casimere
+cassareep
+cassata
+cassation
+cassatt
+cassel
+cassimere
+cassini
+cassiodorus
+cassirer
+cassiterite
+cassoulet
+cassowary
+castellammare
+castellan
+castellany
+castellated
+castiglione
+castile
+castries
+casuist
+catabasis
+catacaustic
+cataclasis
+cataclinal
+catalase
+catalo
+cataloguers
+catalonia
+catalyzed
+catamenia
+catamite
+catania
+catanzaro
+cataphoresis
+cataphyll
+cataplasia
+catarrhine
+catastrophism
+catchfly
+catchweight
+catechol
+catechu
+catechumen
+catenane
+catenoid
+catfall
+cathar
+cathepsin
+catholicon
+catiline
+catling
+catmint
+cato
+cattalo
+cattegat
+cattermole
+cattery
+catullus
+cauca
+caucasia
+caudad
+caudex
+caudine
+caulis
+causalgia
+cauterant
+cauvery
+cavafy
+cavalla
+cavan
+cavatina
+caveator
+cavefish
+cavicorn
+cavie
+cavite
+cavy
+cecity
+cecum
+cedi
+ceefax
+ceilidh
+celaya
+celestite
+cella
+celle
+cellini
+cellobiose
+celloidin
+cellulase
+cellulitis
+cellulous
+celom
+cembalo
+cementum
+cenacle
+cenesthesia
+cenis
+cenogenesis
+cenote
+centimetric
+centipoise
+centisecond
+centiseconds
+centrefold
+centreing
+centrobaric
+centroclinal
+centurial
+ceorl
+cep
+cephalalgia
+cephalin
+cephalochordate
+cephalometer
+cephalonia
+cephalopod
+cephalothorax
+ceram
+ceramal
+cerargyrite
+cerastes
+ceratoid
+cercaria
+cercopithecoid
+cercus
+cerebrospinal
+cerecloth
+ceresin
+ceria
+ceric
+cermet
+cero
+cerography
+ceroplastic
+ceroplastics
+cerotic
+cerotype
+cerous
+cerro
+cert
+cerussite
+cervelat
+cervicitis
+cervid
+cervin
+cesena
+cespitose
+cess
+cesser
+cessionary
+cestode
+cestoid
+cestus
+cesura
+cetane
+cetatea
+ceteris
+cetinje
+cetology
+ceuta
+chabazite
+chabrol
+chacma
+chaconne
+chadic
+chaeronea
+chaeta
+chaetognath
+chaetopod
+chaffinch
+chagall
+chagres
+chainman
+chainplate
+chairborne
+chalaza
+chalcanthite
+chalcidice
+chalcography
+chalcolithic
+chalcopyrite
+chaldea
+chaliapin
+chalicothere
+chalkpit
+chalkstone
+challah
+challis
+chalybeate
+chamade
+chamaephyte
+chambord
+chamonix
+champac
+champignon
+champollion
+chandernagore
+chandigarh
+chandragupta
+chanel
+changan
+changchiakow
+changchow
+changchun
+changsha
+changteh
+chanterelle
+chanukah
+chaoan
+chaochow
+chaparejos
+chapatti
+chappal
+chappie
+chapstick
+chapterhouse
+charas
+charcot
+chardin
+charente
+charivari
+charkha
+charladies
+charlady
+charleroi
+charlock
+charminar
+charollais
+charpoy
+charqui
+charr
+charterage
+charterhouse
+chartless
+chartography
+chasuble
+chauffer
+chaulmoogra
+chaunt
+chausses
+chavannes
+chayote
+cheb
+cheboksary
+checkbits
+checkerbloom
+checky
+cheddite
+cheekpiece
+cheerlead
+cheeseboard
+cheesemonger
+cheesewood
+chefoo
+cheiron
+cheju
+chekiang
+chela
+chelicera
+chelicerate
+cheliform
+cheloid
+chelp
+chemin
+chemisette
+chemmy
+chemnitz
+chemometrics
+chemosmosis
+chemosphere
+chemostat
+chemosynthesis
+chemotaxis
+chemotropism
+chempaduk
+chemulpo
+chemurgy
+chenab
+chenopod
+cheribon
+chersonese
+chervonets
+cheshunt
+chetah
+chevet
+chevrette
+chewa
+chewie
+chiack
+chiapas
+chiastic
+chiastolite
+chiat
+chiba
+chibouk
+chicane
+chiccory
+chichagof
+chichen
+chichester
+chichewa
+chichihaerh
+chickabiddy
+chickenpox
+chiclayo
+chiffchaff
+chifley
+chigetai
+chigwell
+chihli
+childbear
+childcare
+childminder
+childminders
+childminding
+chiliad
+chiliasm
+chilkoot
+chilli
+chillon
+chillum
+chilopod
+chilpancingo
+chilung
+chimb
+chimborazo
+chimbote
+chimkent
+chimneypot
+chinaberry
+chinagraph
+chinan
+chincapin
+chincherinchee
+chindit
+chindwin
+ching
+chinghai
+chingtao
+chinkapin
+chinkiang
+chino
+chinwag
+chios
+chipolata
+chippewa
+chippy
+chirac
+chirau
+chirico
+chirm
+chirurgeon
+chishima
+chisimaio
+chital
+chitarrone
+chittagong
+chiv
+chivaree
+chlamydate
+chlamydeous
+chlamydospore
+chlodwig
+chloracne
+chlorambucil
+chloramine
+chloramphenicol
+chlorenchyma
+chloroacetic
+chloropicrin
+chloroprene
+chloroquine
+chlorosis
+chlorothiazide
+chlorotic
+chlorous
+chlorpromazine
+chlorpropamide
+chlortetracycline
+choanocyte
+chogyal
+choiseul
+chokebore
+chokecherry
+chokedamp
+choko
+cholecalciferol
+cholecyst
+cholecystectomy
+choli
+cholic
+cholla
+chollers
+cholon
+cholula
+chon
+chondrify
+chondriosome
+chondroma
+chondrule
+choof
+chook
+choom
+chopine
+choplogic
+choragus
+chordophone
+chorea
+choreodrama
+choriamb
+chorley
+choroid
+chorology
+chorusmaster
+chota
+chott
+chough
+choux
+chrematistic
+chresard
+chrism
+chrismatory
+chrisom
+chromatology
+chromatolysis
+chromatophore
+chromogen
+chromogenic
+chromolithograph
+chromolithography
+chromomere
+chromonema
+chromophore
+chromoplast
+chromoprotein
+chromous
+chromyl
+chronaxie
+chronobiology
+chronon
+chrysalid
+chrysarobin
+chryselephantine
+chrysoberyl
+chrysoprase
+chrysostom
+chrysotile
+chthonian
+chubb
+chubbyness
+chudskoye
+chufa
+chukar
+chukka
+chukker
+chunder
+chunderous
+chunnel
+chunter
+chupatti
+chupattis
+chuppah
+chur
+churchgo
+churchwarden
+churchwardens
+churidars
+churinga
+churr
+chuttie
+chyack
+chyle
+chyme
+chymosin
+chymotrypsin
+chymotrypsinogen
+cibber
+ciborium
+cic
+cicala
+cicatricle
+cicatrix
+cicerone
+cichlid
+cichlids
+cienfuegos
+cig
+cii
+cil
+cilice
+cilicia
+ciliolate
+cilium
+cimabue
+cimex
+cimon
+cinchonidine
+cinchonine
+cinchonism
+cine
+cineaste
+cinematheque
+cinematographs
+cineol
+cinerarium
+cinereous
+cinerin
+cingulum
+cinna
+cinnamic
+cinquain
+cinque
+cinquecento
+cinzano
+cipolin
+circassia
+circlorama
+circumbendibus
+circummartian
+circumnutate
+circumsolar
+cirenaica
+cirencester
+cirrate
+cirri
+cirripede
+cirrocumulus
+cirrose
+cirrostratus
+cirsoid
+ciscaucasia
+cisco
+ciskei
+cispadane
+cissoid
+cistaceous
+cisterna
+cistron
+cithara
+cither
+citole
+citreous
+citriculture
+citrin
+citrine
+citrulline
+cittern
+citterns
+ciudad
+civ
+civism
+clachan
+clackmannan
+clactonian
+cladded
+cladoceran
+cladode
+cladophyll
+clairaudience
+clamworm
+clamworms
+clapperboard
+clapperboards
+clapperclaw
+clarino
+claro
+clarts
+clary
+classis
+clastic
+clathrate
+claudication
+clavate
+clavicembalo
+clavicorn
+claviform
+clavius
+claymore
+claypan
+claystone
+cleanskin
+cleanthes
+clearcole
+clearstory
+clearway
+clearways
+clearwing
+cleck
+cleek
+cleethorpes
+cleg
+cleidoic
+cleisthenes
+cleistogamy
+clem
+clemenceau
+cleon
+clepsydra
+cleptomania
+clerestory
+clerihew
+clerkess
+cleruchy
+cleveite
+clianthus
+clichy
+cliffhang
+clii
+clinandrium
+clingfish
+clinkstone
+clinostat
+clinquant
+clippie
+clishmaclaver
+clisthenes
+clitellum
+clitic
+cliv
+clix
+clockmaker
+clomb
+clonus
+closedown
+cloudberry
+cloudscape
+clouet
+clough
+clovis
+clubhaul
+clubland
+clubman
+clucky
+clueless
+clumber
+cluny
+clupeid
+clupeoid
+clustan
+clusterability
+clusterable
+clvi
+clvii
+clwyd
+clxi
+clxii
+clxiv
+clxix
+clxvi
+clxvii
+clydebank
+clype
+clypeus
+clyster
+cnidarian
+cnidoblast
+cnidus
+cnossus
+cnut
+coacervate
+coachwood
+coadjutant
+coagulum
+coahuila
+coalface
+coalfield
+coalfields
+coalfish
+coalmine
+coalmines
+coalport
+coaming
+coatee
+coati
+cobaltite
+cobaltous
+cobber
+cobden
+cobnut
+coburg
+coccid
+coccidioidomycosis
+cocciferous
+coccolith
+coccyx
+cochabamba
+cochleate
+cockalorum
+cockatiel
+cockayne
+cockboat
+cockchafer
+cockcroft
+cockleboat
+cockloft
+cockneyfy
+cocksfoot
+cockspur
+cockswain
+cockup
+cocopan
+cocotte
+cocoyam
+cocteau
+codasyl
+codder
+codicology
+codominate
+codominated
+codominates
+codominating
+codswallop
+coedit
+coelacanth
+coelenterate
+coelenteron
+coeliac
+coelom
+coelostat
+coenacle
+coenobite
+coenocyte
+coenurus
+coercibility
+coessential
+coetaneous
+coeur
+coexecutor
+coextend
+coff
+cofferdam
+coggan
+coglike
+cogon
+cohabitee
+cohabitees
+cohesional
+cohobate
+cohune
+coimbatore
+coimbra
+coir
+coire
+coit
+cokuloris
+colbert
+colcannon
+colchester
+colchicine
+colcothar
+colectomy
+colemanite
+coleopteran
+coleoptile
+coleorhiza
+coles
+colet
+colewort
+coley
+colicroot
+colicweed
+coligny
+collapsar
+collarette
+collectanea
+collembolan
+collenchyma
+collisionless
+collocutor
+colloid
+collop
+collotype
+colluvium
+collywobbles
+colmar
+colocynth
+colombes
+colonitis
+colonsay
+coloquintida
+colorate
+colossae
+colossians
+colotomy
+colpitis
+colporteur
+colquhoun
+colubrid
+colubrine
+colugo
+colum
+columbarium
+columbic
+columbite
+columbium
+columbous
+columella
+columnwise
+colure
+coly
+comaneci
+comate
+comatulid
+combe
+comecon
+comedo
+comenius
+comfrey
+comines
+comitia
+commeasure
+commedia
+commendam
+commines
+commis
+commo
+commodus
+commonable
+communicatie
+comnenus
+como
+comorin
+comoro
+comp
+compadre
+compander
+companders
+compilability
+complect
+compony
+compossible
+compostela
+compotation
+comprador
+comstockery
+comte
+conan
+conation
+conative
+conatus
+concelebrate
+concensus
+concent
+concertino
+concha
+conchie
+conchiferous
+conchiolin
+conchobar
+conchoid
+conchoidal
+conchology
+condillac
+condottiere
+condyle
+condyloid
+condyloma
+confessant
+configurationism
+confirmand
+confiteor
+confiture
+conformability
+congeneric
+congius
+conglobate
+conglutinant
+congou
+congrats
+congruential
+congruentially
+conidiophore
+conidium
+coniine
+coniology
+conjuction
+connacht
+connaught
+connemara
+connexions
+conodont
+conoid
+conoscenti
+conquian
+conscionably
+consentient
+conservatoire
+conservatorium
+consett
+consocies
+consolute
+constantan
+constatation
+contactor
+contango
+contemn
+continously
+conto
+contradance
+contrasuggestible
+contrate
+contravallation
+contrayerva
+contredanse
+controllee
+controllees
+conure
+convertite
+convolvulaceous
+cooee
+cookhouse
+coolabah
+coolgardie
+coom
+cooncan
+coontie
+cooperativity
+coopt
+coordinal
+cootch
+copaiba
+copal
+copalm
+copepod
+copita
+copley
+coprolalia
+coprology
+coprophagous
+coprophilia
+coprophilous
+copygraph
+copyread
+coquelicot
+coquilla
+coquito
+coraciiform
+coracle
+coracoid
+corallite
+coralloid
+coralroot
+coranto
+corban
+corbeil
+corbicula
+corbie
+corbusier
+corby
+corcyra
+corday
+cordeliers
+cordierite
+cordillera
+cordilleras
+cordoba
+cordova
+corella
+corelli
+corf
+corfam
+corfu
+corgi
+coriaceous
+corinthians
+coriolis
+corium
+corkage
+corkwood
+cormel
+cormophyte
+corncockle
+corncrake
+corneille
+cornel
+cornelian
+cornetcy
+cornett
+cornflakes
+cornflour
+cornhusk
+corniculate
+cornmonger
+corno
+cornstone
+cornu
+cornute
+corody
+corollaceous
+coromandel
+coronach
+corot
+corozo
+correggio
+corregidor
+correlator
+corrida
+corrientes
+corrival
+corrodent
+corrody
+corrugator
+corsac
+corselet
+corsetry
+corticosterone
+corticotrophin
+cortisol
+cortot
+corunna
+corves
+corvine
+corymb
+coryphaeus
+coryza
+cosa
+cosecant
+cosech
+coseismal
+cosenza
+cosgrave
+cosignatory
+cosmine
+cosmodrome
+cosmoid
+cosmopolis
+cosmotron
+cospar
+coss
+cossie
+costard
+costate
+costermonger
+costotomy
+costrel
+cotan
+cotemporary
+cotenant
+coterminosity
+coth
+cothurnus
+cotidal
+cotonou
+cotopaxi
+cotquean
+cotswold
+cotswolds
+cottbus
+cottian
+cottonade
+cottonweed
+cotyloid
+coucal
+couchant
+couchette
+coulee
+coulibiaca
+couloir
+coulometer
+coulometers
+coumarin
+coumarone
+counterattraction
+counterblast
+countercharge
+counterculture
+counterfactual
+counterglow
+counterinsurgency
+counterposition
+counterproof
+countershade
+countershaded
+countershades
+countershading
+countersubject
+countertype
+counterweigh
+counterword
+counterwork
+courante
+courantyne
+courbet
+courbevoie
+coureur
+courgette
+courlan
+coursework
+courtelle
+courtrai
+couthie
+couvade
+coverdale
+coverley
+coversed
+covin
+cowberry
+cowbind
+cowes
+cowfish
+cowherb
+cowitch
+cowk
+cowley
+cowpat
+cowper
+cowskin
+coxa
+coxalgia
+coxcombry
+coxsackie
+coxswain
+coyotillo
+coz
+crabbe
+crabmeat
+crabstick
+crackbrain
+crackbrained
+cracket
+crackjaw
+cracknel
+cracksman
+cracow
+craddock
+cradlesong
+craigie
+craiova
+crake
+crambo
+cramoisy
+cran
+cranach
+cranage
+cranesbill
+craniology
+craniometer
+craniometry
+craniotomy
+cranko
+crankpin
+cranmer
+crannog
+cranwell
+crapaud
+crapulent
+craquelure
+crashable
+crashaw
+crasis
+crassulaceous
+crassus
+cratch
+craunch
+crawley
+cray
+creamcups
+creamlaid
+creatine
+creatinine
+credendum
+creel
+creels
+creepie
+cremator
+cremona
+crenel
+creodont
+creophagous
+crepitus
+cressy
+cresylic
+creuse
+crewe
+cribellum
+cricoid
+crikey
+crim
+crimmer
+crimple
+crimplene
+cringle
+crinite
+crinkleroot
+criollo
+cripes
+crippen
+cripps
+criseyde
+crispate
+crispation
+crispbread
+crispi
+crissum
+crista
+cristate
+cristobalite
+croce
+crocein
+crocidolite
+crocoite
+croesus
+crombec
+cromlech
+cronk
+cronus
+crosier
+crossbeam
+crosscheck
+crosse
+crossfire
+crosshead
+crossjack
+crossopterygian
+crosspool
+crossruff
+crosstabulate
+crosstabulation
+crosstie
+crossties
+crotone
+crotonic
+croute
+crowboot
+crownpiece
+crownwork
+croze
+crozier
+cru
+cruces
+crucian
+cruck
+cruiserweight
+cruiseway
+crumhorn
+crummock
+crunode
+crura
+crural
+crus
+crusado
+cruse
+cruyff
+cruzado
+cruzeiro
+crwth
+cryer
+cryocable
+cryohydrate
+cryometer
+cryophyte
+cryoplankton
+cryptaesthesia
+cryptanalyze
+cryptoclastic
+cryptocrystalline
+cryptogam
+cryptozoic
+cryptozoite
+crystallographica
+ctenidium
+ctenoid
+ctenophore
+ctesiphon
+cubane
+cubeb
+cubiculum
+cubital
+cucking
+cuckooflower
+cuckoopint
+cuculiform
+cudbear
+cudgerie
+cudweed
+cuenca
+cuernavaca
+cuesta
+cufic
+cuirass
+cuirassier
+cuisse
+culch
+culebra
+culet
+culicid
+cullet
+cullis
+culloden
+cully
+culm
+culmiferous
+cultrate
+culverin
+cum
+cumae
+cumber
+cumbernauld
+cumbria
+cummerbund
+cumquat
+cumshaw
+cumulet
+cumuliform
+cumulonimbus
+cumulostratus
+cunaxa
+cuneal
+cuneo
+cunjevoi
+cupel
+cuppa
+cuprum
+curacy
+curare
+curarine
+curassow
+curch
+curiosa
+curitiba
+curlpaper
+currajong
+currawong
+currycomb
+curtin
+curzon
+cusco
+cusec
+cush
+cushat
+cusk
+cuso
+customable
+custos
+custumal
+cutcherry
+cuticula
+cutin
+cutis
+cuttack
+cuttle
+cutty
+cuvette
+cuxhaven
+cuyp
+cuzco
+cwmbran
+cyan
+cyanamide
+cyanine
+cyanite
+cyanocobalamin
+cyanogen
+cyanohydrin
+cyanosis
+cyanotype
+cybele
+cyber
+cybernate
+cyclamen
+cyclicity
+cycloalkane
+cyclograph
+cycloheptatrienyl
+cyclohexane
+cyclohexyl
+cyclonite
+cycloparaffin
+cyclopedia
+cyclopentadienyl
+cyclopentane
+cycloplegia
+cyclopropane
+cyclosis
+cyclostome
+cyclostyle
+cyclothymia
+cyclotomy
+cyder
+cydnus
+cylindroid
+cylix
+cyma
+cymar
+cymatium
+cymbalo
+cyme
+cymene
+cymogene
+cymograph
+cymoid
+cymophane
+cymose
+cymru
+cynghanedd
+cyperaceous
+cyprinid
+cyprinodont
+cyprinoid
+cypsela
+cyrenaica
+cyrene
+cystectomy
+cysticercoid
+cystine
+cystitis
+cystocarp
+cystocele
+cystoid
+cystolith
+cystoscope
+cystotomy
+cythera
+cytidine
+cytochemical
+cytochemically
+cytochrome
+cytogenesis
+cytogenetics
+cytokinesis
+cyton
+cytoplast
+cytotaxonomy
+cyzicus
+czardas
+czarevna
+dabchick
+dabster
+dace
+dacha
+dachau
+dachsund
+dacia
+dacoit
+dacoity
+dacron
+dactylogram
+dactylography
+dactylology
+dado
+dadra
+dagan
+dagga
+daggerboard
+dagoba
+dagon
+daguerre
+dahna
+daimyo
+dairen
+daisycutter
+dak
+dal
+daladier
+dalai
+dalasi
+dalesman
+dalhousie
+dallapiccola
+dalmatia
+damietta
+damodar
+dampcourse
+dampier
+damselfish
+dandie
+dandiprat
+daraf
+darbies
+dardanelles
+dardanus
+daresbury
+darfur
+darg
+dargah
+daric
+dario
+dariole
+darkend
+darlan
+darmstadt
+darnel
+darnley
+darogha
+dartboard
+dasheen
+dashiki
+dashpot
+dassie
+dasyure
+databank
+datary
+datatype
+datcha
+dato
+datolite
+datuk
+daube
+daubery
+daubigny
+daudet
+daugava
+daugavpils
+daumier
+davao
+daw
+dawes
+dayak
+dayan
+dayboy
+dayfile
+dayflower
+dayfly
+dayspring
+deaconry
+deadstarting
+deakin
+dealfish
+dearchive
+dearchived
+dearchives
+dearchiving
+deary
+deassignment
+deathtrap
+debag
+debarred
+debe
+debrecen
+debs
+debus
+debye
+decanal
+decane
+decanedioic
+decani
+decanoic
+decapolis
+decarboxylation
+decastyle
+deccan
+decelerometer
+decemvirate
+decenary
+decentralist
+decern
+decimetric
+decisionmaker
+declinometer
+declog
+declogged
+declogging
+declogs
+decluster
+declustered
+declustering
+declusters
+declutch
+declutched
+declutches
+declutching
+decoke
+decompound
+deconstruct
+decreet
+decubitus
+decurion
+decurrent
+decury
+dedal
+deek
+deemster
+deergrass
+deerhound
+deferable
+defilade
+definiendum
+definiens
+deflocculate
+degassed
+degasses
+deglutinate
+deglutition
+degression
+degust
+dehisce
+dehiscent
+dehorn
+dehra
+dehydrogenase
+dehydrogenate
+dehydroretinol
+deianira
+deicide
+deictic
+deific
+deiform
+deil
+deipnosophist
+deixis
+dejecta
+dekker
+dekko
+delacroix
+delagoa
+delaine
+delaunay
+dele
+deledda
+delegatory
+delgado
+delimeter
+delimeters
+deliquescence
+delitescence
+deltiology
+demavend
+deme
+dement
+demerara
+demesne
+demeter
+demibastion
+demicanton
+demilune
+demimondaine
+demimonde
+demirel
+demirelief
+demirep
+demisemiquaver
+demist
+demivierge
+demivolt
+demob
+democritus
+demoiselle
+demonism
+demonolater
+demonolatry
+demould
+demoulded
+demoulding
+demoulds
+dempster
+demulsify
+demy
+denarius
+denary
+dendral
+dendrochronologist
+dendrochronologists
+dendrochronology
+dendrogram
+dendrograms
+dengue
+denitrate
+deniz
+denning
+dentex
+dentilabial
+dentilingual
+dentoid
+denudate
+deodand
+deodar
+deontic
+deoxygenate
+departmentalism
+depasture
+dependant
+dependants
+depicture
+deplume
+depressomotor
+depside
+depurative
+deraign
+derailleur
+derain
+derbent
+deregister
+deregulatory
+derestrict
+derisible
+dermatitis
+dermatogen
+dermatoglyphics
+dermatome
+dermatophyte
+dermatophytosis
+dermatoplasty
+dermis
+dermoid
+dero
+derringer
+derry
+derv
+derwent
+derwentwater
+desai
+desalinate
+deschamps
+deschool
+descriptional
+descriptivism
+deselect
+deselected
+deselecting
+deselection
+deselections
+deselects
+desicate
+designational
+desinence
+deskill
+deskilled
+deskilling
+desman
+desmid
+desmoid
+desmoulins
+despenser
+despoilation
+despoliation
+despumate
+desquamate
+dessalines
+dessau
+dessertspoon
+dessiatine
+dessicator
+dessicators
+deterge
+detmold
+detrend
+detrended
+detrending
+detrends
+detrition
+detrude
+detruncate
+deurne
+deuteragonist
+deuteranope
+deuteride
+deuterogamy
+deutoplasm
+deutsch
+deva
+devanagari
+deventer
+devi
+devilfish
+dewan
+dewberry
+dewclaw
+dewsbury
+dextran
+dextrin
+dextroamphetamine
+dextroglucose
+dextrogyrate
+dextrorotation
+dextrorse
+dezhnev
+dhahran
+dhak
+dharna
+dhaulagiri
+dhobi
+dhole
+dhoti
+dhow
+diablerie
+diabolo
+diacaustic
+diacetylmorphine
+diacid
+diacidic
+diactinic
+diadelphous
+diadic
+diaeresis
+diagenesis
+diageotropism
+diaghilev
+diagraph
+diallage
+dialogism
+diamantine
+diamegnetism
+diamine
+diamondback
+diandrous
+dianetics
+dianoetic
+dianoia
+diapedesis
+diapente
+diaphoresis
+diaphoretic
+diaphototropism
+diaphysis
+diapir
+diarch
+dias
+diascope
+diastalsis
+diastase
+diastasis
+diastema
+diastyle
+diatessaron
+diathermancy
+diazine
+diazo
+diazole
+diazomethane
+diazonium
+dibasic
+dibbuk
+dibranchiate
+dibromide
+dicarbonyl
+dicast
+dicephalous
+dichasium
+dichlamydeous
+dichloroethanol
+dichromaticism
+dichromic
+dichroscope
+diclinous
+dicuss
+dicynodont
+diderot
+didgeridoo
+didymium
+didymous
+didynamous
+dieback
+diecious
+diefenbaker
+dien
+diencephalon
+dieppe
+diesis
+diestock
+diestrus
+diffusivity
+digamy
+digestant
+digged
+dight
+digitalism
+digitiform
+digitoxin
+digitron
+dihydric
+dihydrofolate
+dikkop
+diktat
+dilatancy
+dilatant
+dilly
+dimashq
+dimenhydrinate
+dimercaprol
+dimethylformamide
+dimethylpropane
+dimethylsulphoxide
+dimetric
+dimissory
+dimity
+dimorph
+dinar
+dineric
+dinge
+dinitrobenzene
+dinitrogen
+dink
+dinkum
+dinky
+dinoflagellate
+dinothere
+dio
+diodorus
+dioestrus
+diol
+diomede
+diomedes
+dionysius
+diophantus
+diopside
+dioptase
+dior
+dioxan
+dipeptide
+dipetalous
+diphenylamine
+diphenylhydantoin
+diphosgene
+diphyletic
+diphyllous
+diphyodont
+diplegia
+diploblastic
+diplocardiac
+diplococcus
+diplont
+diplopia
+diplopod
+diplosis
+diplostemonous
+dipnoan
+dippy
+diprotodont
+dipteral
+dipteran
+dipterocarpaceous
+dipterous
+diriment
+dirk
+dirndl
+disaccredit
+disafforest
+disbranch
+disbud
+discalced
+disciplinant
+disciplinarianism
+disclimax
+discobolus
+discommodity
+discommon
+disconsider
+discotheque
+discovert
+disembogue
+disembroil
+disenable
+disentail
+disentitle
+disentomb
+disentwine
+disepalous
+disforest
+dishpan
+dishtowel
+disject
+disjunctor
+disjunctors
+disoperation
+dispend
+dispermous
+dispersability
+dispersable
+dispersity
+dispersoid
+displayable
+disproven
+dissappear
+disseminule
+dissentious
+dissepiment
+distich
+distichous
+distrainee
+distringas
+distrito
+distrubuted
+disulfiram
+disulphate
+disulphide
+disulphuric
+dita
+ditheism
+dithionite
+dithionous
+dithyramb
+dithyrambic
+dittander
+dittany
+dittography
+diu
+diuresis
+diuretic
+div
+divaricator
+diversiform
+diverticulitis
+diverticulosis
+diverticulum
+divi
+divinylbenzene
+divisibly
+divulgate
+diyarbakir
+dizen
+djailolo
+djaja
+djajapura
+djambi
+djebel
+djerba
+djinni
+djokjakarta
+doab
+dobby
+dobla
+dobro
+dobruja
+dobsonfly
+dockland
+docklands
+doddle
+dodecagon
+dodecanese
+dodecanoic
+dodecaphonic
+dodecasyllable
+dodgem
+dodoma
+doek
+doenitz
+doeskin
+dogfishs
+dogger
+doggo
+dogman
+dogsbody
+dogvane
+dogy
+doh
+doha
+dojo
+dolabriform
+dolby
+dolerite
+dolichocephalic
+doline
+dollarbird
+dollarfish
+dollfuss
+dolman
+dolmas
+dolmen
+dolmetsch
+dolorimetry
+doloroso
+dom
+domett
+dominee
+dominie
+dominium
+dominoes
+donatello
+donatus
+donau
+donbass
+donga
+donjon
+donne
+donnert
+donny
+doodah
+doorframe
+doorn
+doornik
+dopa
+dordogne
+dordrecht
+dormobile
+dornbirn
+dornick
+dorp
+dorpat
+dorsad
+dorsiferous
+dorsigrade
+dorsiventral
+dorsoventral
+dorsum
+dort
+dorty
+dory
+dosshouse
+dost
+dotation
+dottle
+douai
+douala
+douay
+doublure
+doubs
+douc
+douceur
+doukhobors
+doum
+doura
+dourine
+douro
+douroucouli
+dovap
+dowable
+dowding
+dowery
+downcome
+downcomer
+downhole
+downpatrick
+downpipe
+downthrow
+downwash
+downweight
+downweighted
+downweighting
+downwell
+dowsabel
+doxastic
+doxographer
+doxology
+doxy
+doyen
+doyley
+drabbet
+draff
+draggletailed
+draghound
+dragoman
+dragonnade
+dragonroot
+dragrope
+drail
+dramatis
+drammen
+drancy
+drava
+drayhorse
+dree
+dreggy
+dreich
+dreiser
+drenthe
+dresden
+drillstock
+drin
+drinkwater
+dripstone
+drogheda
+drogue
+droit
+dromond
+drongo
+drongos
+droob
+dropsonde
+droshky
+druffen
+drunkeness
+drupelet
+dryopithecine
+drysdale
+drystone
+dubai
+dubbin
+dubrovnik
+dubuffet
+duccio
+duchamp
+dudeen
+duello
+duero
+dufy
+duhamel
+duiker
+duka
+dukhobors
+dulciana
+dulia
+dulosis
+dumas
+dumbell
+dumbells
+dumfries
+dumortierite
+dumyat
+duna
+dunaj
+dunant
+dundalk
+dundee
+dunfermline
+dungas
+dungeness
+dunite
+duniwassal
+dunkerque
+dunlin
+dunnage
+dunnakin
+dunnite
+dunno
+dunnock
+dunny
+dunois
+dunoon
+dunsany
+dunsinane
+dunstable
+dunstan
+dunt
+duntroon
+dunwoody
+duodenary
+duodenitis
+duotone
+dup
+duparc
+dupatta
+dupleix
+duplet
+dupondius
+duppy
+duque
+duramen
+durative
+durazzo
+durbar
+durex
+durgah
+durian
+durmast
+duro
+durra
+durst
+durum
+durzi
+dushanbe
+dustability
+dustable
+dustcart
+dustcarts
+dustmen
+dustsheet
+dustsheets
+duumvir
+duumvirate
+duvalier
+duvet
+dux
+dwale
+dybbuk
+dyfed
+dykes
+dynameter
+dynamicism
+dynamoelectric
+dyscrasia
+dysgraphia
+dysmenorrhoea
+dysphemism
+dyspnoea
+dysteleology
+dysthymia
+dysuria
+dytiscid
+dyula
+ealdorman
+ealing
+eanes
+earbash
+earhart
+earlap
+earless
+earom
+earthlight
+earthman
+earthmove
+earthnut
+earthrise
+eastmost
+eatage
+eblis
+ebon
+ebonite
+ebracteate
+ebullioscopy
+eburnation
+ecbatana
+ecbolic
+ecce
+ecchymosis
+ecclesall
+ecclesia
+ecclesiolatry
+eccrinology
+ecdysone
+ecevit
+echard
+echinate
+echinococcus
+echinoid
+echinus
+echoism
+echolalia
+echopraxia
+echovirus
+eck
+eckhart
+eclampsia
+eclipsis
+eclogite
+ecocide
+ecowas
+ecstacy
+ecthyma
+ectocrine
+ectoenzyme
+ectophyte
+ectopia
+ectoproct
+ectosarc
+ectype
+edale
+edam
+eddo
+eddystone
+ede
+edessa
+edgehill
+edgeworth
+edile
+edirne
+edom
+educatory
+educt
+eelpout
+eelworm
+eff
+effable
+effendi
+efficency
+effusiometer
+efta
+eftsoons
+egest
+egesta
+egis
+eigenfrequencies
+eigenfrequency
+eigenstructure
+eigensystem
+eigensystems
+eiger
+eightsome
+eirenic
+eirenicon
+eisegesis
+eisk
+elaeoptene
+elagabalus
+elam
+eland
+elasmobranch
+elasmosaur
+elastance
+elasticate
+elasticated
+elasticates
+elasticating
+elastoplast
+elat
+elaterid
+elaterin
+elaterium
+elbe
+elbrus
+elburz
+eld
+eldo
+eldritch
+elea
+elecampane
+electrochemist
+electrochemists
+electrograph
+electromerism
+electronvolt
+electrophone
+electrostriction
+electrotechnology
+electrotonus
+electrovalency
+electroviscous
+eleemosynary
+eleia
+elemi
+elenchus
+eleoptene
+eleusis
+elevon
+elflock
+elgon
+elidible
+elis
+elkhound
+eloign
+elsan
+elusion
+elyot
+embolectomy
+embolus
+embow
+embrectomy
+embryectomy
+embus
+emden
+emesis
+emetine
+emf
+emiscan
+emmen
+emmenagogue
+emmer
+emmetropia
+emotivism
+empale
+empassion
+empedocles
+emphasing
+empolder
+empyema
+empyrean
+empyreuma
+emulsoid
+enantiomorph
+enarthrosis
+enate
+encaenia
+enceladus
+encephalin
+encephalograph
+encephalography
+encephaloma
+encephalomyelitis
+enchiridion
+enchondroma
+enchorial
+encomiast
+encrinite
+enculturation
+enderby
+endo
+endocarditis
+endocardium
+endocarp
+endocentric
+endocranium
+endoneurium
+endopeptidase
+endosome
+endostosis
+endothecium
+endothelioma
+endothelium
+endover
+endplate
+endplay
+energid
+energumen
+enface
+enfeoff
+enfilade
+enforcable
+engadine
+engrail
+eniwetok
+ennage
+ennead
+enneagon
+enneahedron
+ennerdale
+ennervation
+ennis
+enniskillen
+ennius
+enosis
+enounce
+enow
+enphytotic
+enschede
+ensor
+entasis
+entebbe
+entelechy
+entellus
+enteritis
+enterogastrone
+enterokinase
+enteron
+enterostomy
+enterotomy
+enterovirus
+enthetic
+enthymeme
+entoblast
+entomic
+entomostracan
+entophyte
+entopic
+entozoic
+entozoon
+entrammel
+entrechat
+entremets
+entresol
+entryism
+entryist
+entryists
+entryname
+entrynames
+entrypoint
+entrypoints
+enugu
+enure
+enuresis
+enver
+enwomb
+enwreath
+enzed
+enzootic
+enzymolysis
+eobiont
+eogene
+eolian
+eolic
+eolipile
+eolith
+eolithic
+eonian
+eos
+eosin
+eosinophil
+epact
+epaminondas
+eparch
+eparchy
+epencephalon
+epenthesis
+epergne
+epexegesis
+ephah
+ephebe
+ephemeron
+ephesians
+ephod
+ephor
+epiblast
+epiboly
+epicalyx
+epicanthus
+epicedium
+epiclesis
+epicontinental
+epicotyl
+epicrisis
+epicritic
+epictetus
+epicycloidal
+epidaurus
+epideictic
+epidiascope
+epididymis
+epidote
+epidural
+epifocal
+epigastrium
+epigeal
+epigene
+epigenous
+epigeous
+epiglottis
+epigone
+epigynous
+epilate
+epileptoid
+epilimnion
+epimere
+epimerism
+epimorphosis
+epimysium
+epinasty
+epinephrine
+epineurium
+epiphenomenalism
+epiphenomenon
+epiphragm
+epiphytotic
+epirogeny
+epirus
+episcopacy
+episematic
+epispastic
+epistasis
+epistaxis
+episternum
+epithalamium
+epithelioma
+epizoic
+epizoon
+epizootic
+eponym
+eponymy
+epos
+epoxide
+epping
+eprom
+eproms
+epyllion
+equifrequent
+equifrequently
+equilibrant
+equimolecular
+equipartition
+equites
+equuleus
+eradiate
+erciyas
+erebus
+eremite
+erepsin
+erethism
+erevan
+erfurt
+ergastoplasm
+ergatocracy
+erhard
+ericaceous
+eridanus
+erinaceous
+eringo
+erinyes
+eris
+eristic
+erith
+erivan
+erk
+erlang
+erlangen
+erlanger
+erlking
+erne
+erotema
+erotology
+erotomania
+errhine
+errupt
+erruptive
+erst
+erubescence
+eruct
+erumpent
+erymanthus
+eryngo
+erysipelas
+erysipeloid
+erythema
+erythrism
+erythrite
+erythritol
+erythroblast
+erythroblastosis
+erythrocyte
+erythrocytometer
+erythromycin
+erythropoiesis
+erzgebirge
+erzurum
+esaki
+esau
+esbjerg
+escalope
+escaut
+eschalot
+escharotic
+eschatology
+escoffier
+escolar
+escribe
+escuage
+escudo
+escurial
+esdraelon
+eserine
+esher
+esky
+espalier
+esparto
+espoo
+esquimau
+esro
+essaouira
+essequibo
+essonite
+essonne
+estancia
+este
+esterase
+esterify
+esthonia
+estienne
+estipulate
+estival
+estivate
+estivation
+estoppel
+estovers
+estrade
+estradiol
+estragon
+estreat
+estremadura
+estrin
+estriol
+etaerio
+etalon
+etamine
+etaoin
+etchant
+eteocles
+eterne
+etesian
+ethene
+etherege
+etherify
+ethmoid
+ethnarch
+ethnobotany
+ethnogeny
+ethonone
+ethoxide
+ethoxyethane
+ethylbenzene
+ethyne
+etiolate
+etna
+etymon
+etzel
+eubacteria
+euboea
+eucaine
+eucalyptol
+euchlorine
+euchromatin
+eucken
+eudemon
+eudemonia
+eudemonics
+eudiometer
+eudoxus
+eugenol
+eulachon
+eulogia
+eupatrid
+eupen
+eupepsia
+euphausiid
+euphonic
+euphorbiaceous
+euphoriant
+euphrasy
+euphroe
+euploid
+eupnoea
+euratom
+eure
+eurhythmy
+euripus
+eurypterid
+eurythermal
+eurytropic
+eusebius
+eusporangiate
+eutectoid
+euxenite
+evacuant
+evaginate
+evanish
+evaporable
+evaporimeter
+evaporimeters
+evite
+exanthema
+exarate
+exarch
+exarchate
+excaudate
+exclaustration
+exeat
+executability
+exedra
+exemplum
+exequatur
+exequies
+exergue
+exigible
+eximious
+exine
+exitance
+exo
+exocarp
+exocentric
+exoderm
+exodontics
+exonym
+exopeptidase
+exophthalmic
+exophthalmos
+exoplasm
+exorable
+exosystem
+exosystems
+exotoxin
+expellant
+experientialism
+explicite
+explicitely
+explicity
+explictly
+exponible
+expressivity
+expresso
+exsanguine
+exsect
+exstrophy
+extention
+extentions
+extine
+extinguishant
+extracanonical
+extrados
+extraposition
+extremadura
+exuviae
+exuviate
+eyas
+eyebath
+eyeblack
+eyehook
+eyeleteer
+eyetie
+eyot
+eyots
+eyra
+eyrir
+eysenck
+fab
+fabaceous
+fabians
+fabius
+fabliau
+fabre
+facebar
+facetiae
+facia
+facilties
+faculae
+fadden
+fadge
+faecal
+faeces
+faenza
+faeroes
+faeroese
+faff
+fagaceous
+fahlband
+faial
+faille
+fairbanks
+fairweather
+fairyfloss
+faiyum
+falbala
+falchion
+falconiform
+falconine
+faldstool
+falerii
+fallal
+fallfish
+falseties
+falsety
+falsework
+falsies
+falster
+faltboat
+falun
+famagusta
+familist
+famulus
+fanagalo
+fandangle
+fanfani
+fanfaronade
+fangio
+fango
+fankle
+fanon
+fantail
+fantasm
+fantast
+fantoccini
+fantom
+faqir
+faradic
+faradism
+farandole
+farci
+farcy
+fard
+fardel
+farinaceous
+farinose
+farl
+farrier
+farriery
+farside
+fart
+fasciate
+fascine
+fash
+fashoda
+fastback
+fastigiate
+fatah
+fatidic
+faucal
+fauces
+faugh
+faunus
+fauteuil
+fauve
+faveolate
+favrile
+favus
+fayalite
+fayum
+feal
+fearnought
+featheredge
+featherstitch
+feaze
+febricity
+febrifacient
+febrifuge
+fechner
+feck
+fecula
+fedayee
+feedbag
+feeze
+feininger
+felafel
+fellmonger
+felloe
+felo
+felucca
+fencible
+fenestella
+fenestra
+fennelflower
+feoff
+feoffee
+feoffment
+ferbam
+fere
+feretory
+fergana
+feria
+fermanagh
+fernandel
+ferrari
+ferreous
+ferricyanic
+ferricyanide
+ferritin
+ferrocene
+ferrochromium
+ferroconcrete
+ferrocyanic
+ferrocyanide
+ferrofluid
+ferrol
+ferromagnesian
+ferromanganese
+ferrosilicon
+ferula
+ferule
+fesse
+festal
+festschrift
+fetial
+feticide
+fetiparous
+fetterlock
+feverfew
+feverwort
+feydeau
+fiacre
+fibrefill
+fibriform
+fibrinogen
+fibrinolysin
+fibrinolysis
+fibrinous
+fibro
+fibroblast
+fibrocement
+fibroid
+fibroin
+fibroma
+fibrositis
+fichte
+ficino
+ficticious
+fid
+fiddlewood
+fideicommissary
+fideicommissum
+fidelism
+fidge
+fidus
+fieldmouse
+fieldpiece
+fieldsman
+fieri
+fiesole
+fifa
+figuline
+figurant
+figwort
+filable
+filariasis
+filecard
+filefish
+filespace
+filestore
+filiate
+filicide
+fillagree
+fillmore
+filmset
+filmsetting
+filoplume
+filose
+filoselle
+fimble
+finable
+finalism
+finchley
+fineable
+finfoot
+fingerbreadth
+fingermark
+fingermarked
+fingermarking
+fingermarks
+fingerstall
+fingerstalls
+fingo
+finisterre
+finitary
+finnan
+finner
+finney
+finnmark
+fino
+finochio
+fiorin
+fipple
+firdausi
+fireback
+firebomb
+firebrat
+firecrest
+firedog
+firedrake
+firenze
+firepan
+firestorm
+firethorn
+firewarden
+firewater
+firkin
+firry
+fishbolt
+fishfinger
+fishgig
+fishskin
+fissipalmate
+fissiped
+fissirostral
+fistmele
+fistula
+fistulous
+fitchew
+fittipaldi
+fitzsimmons
+fiume
+fivepenny
+fivepins
+fizgig
+flabellum
+flagelliform
+flagellum
+flaggy
+flagrante
+flagstad
+flambeau
+flamborough
+flamelet
+flamelets
+flamingoes
+flamininus
+flaminius
+flamsteed
+flanch
+flannelette
+flashcube
+flashcubes
+flasket
+flatette
+flatfish
+flatfishes
+flatlet
+flatlets
+flatling
+flatmate
+flatmates
+flatways
+flaubert
+flaunch
+flavescent
+flavin
+flavine
+flavone
+flavoprotein
+flavopurpurin
+flavorous
+flaxman
+fleabite
+fleabites
+fleam
+fleapit
+fleapits
+fledgy
+flense
+fleurette
+fleury
+flexitime
+flexo
+fley
+fleysome
+flinders
+flitch
+flite
+floccose
+flocculant
+flocculants
+flocculent
+flocculus
+floccus
+flodden
+flong
+floreated
+flores
+florey
+floribunda
+florilegium
+florio
+flory
+flos
+flotow
+flowability
+flowerbed
+flowerless
+fluorene
+fluoric
+fluorometer
+fluorophore
+fluoroscope
+fluoroscopy
+fluorosis
+fluorosulphuric
+fluviomarine
+fluxmeter
+fluxmeters
+flyback
+flyblow
+flybook
+flyleaves
+flyte
+flytrap
+flytraps
+foch
+fock
+foehn
+foetal
+foetation
+foeticide
+foetor
+fogbow
+fogbows
+fogdog
+foggia
+foie
+foin
+folacin
+foliar
+folie
+foliolate
+foliose
+foliot
+foliots
+folium
+folkestone
+folketing
+folkmoot
+folliculin
+folsom
+fonda
+fondant
+fondants
+fonseca
+fontanelle
+fonteyn
+footpaths
+footplate
+footplates
+footsie
+footslogged
+footslogging
+footstalk
+footstock
+footworn
+foramen
+foraminifer
+forasmuch
+forby
+forcemeat
+fordone
+forecourse
+forecourt
+forecourts
+foredo
+foredoom
+foredoomed
+forefend
+foregut
+forehock
+foreshock
+forespent
+forestaysail
+foretooth
+foretop
+foretriangle
+forewent
+forewind
+forewing
+forfar
+forficate
+forgat
+forint
+forme
+formfeed
+formfeeds
+formicary
+formicate
+formication
+formulism
+formwork
+fornenst
+fornix
+forsee
+forseen
+forspeak
+forster
+forsterite
+fortaleza
+fortepiano
+fortis
+fortissimo
+fortuitism
+fortuna
+forwhy
+forzando
+fosbury
+fossa
+fosse
+fossette
+fossick
+fotheringhay
+foucault
+foucquet
+foulard
+fourpence
+fourpenny
+foveola
+fowey
+fowliang
+foxfire
+foyboat
+fractocumulus
+fractostratus
+frae
+fraenum
+fragonard
+fraise
+fraktur
+framboesia
+francolin
+franger
+frangipane
+frankalmoign
+frass
+fratchy
+fraxinella
+freebie
+freedomites
+freelance
+freemartin
+freemason
+freesheet
+freesheets
+freightliner
+fremantle
+fremitus
+frenulum
+frenum
+friarbird
+fricasee
+fringilline
+frippet
+frisket
+froe
+froebel
+frogfish
+frogged
+frogging
+froghopper
+frogmarch
+frogmouth
+frogspawn
+froissart
+frome
+fromenty
+fromm
+fronde
+frondescence
+frons
+frontenac
+frontlet
+frontogenesis
+frontolysis
+frontrunner
+frontwards
+frore
+froude
+frow
+frowst
+fructiferous
+frugivorous
+fruitarian
+frumentaceous
+frumenty
+frunze
+frustule
+frutescent
+fuad
+fubsy
+fuchsin
+fuckwit
+fucoid
+fugacious
+fugard
+fugato
+fugger
+fugio
+fukien
+fukuda
+fukuoka
+fukushima
+fula
+fulani
+fulgurite
+fulmar
+fulminic
+fulminous
+fulvous
+fumaric
+fumatorium
+fumatory
+fumitory
+funchal
+fundi
+fundus
+fundy
+funfair
+fungistat
+funicle
+furan
+furfur
+furfuraceous
+furfuraldehyde
+furfuran
+furioso
+furmenty
+furnivall
+furphy
+furred
+fusain
+fuscous
+fushih
+fushun
+fusionism
+fustanella
+fustic
+futtock
+futurist
+futurists
+futurology
+fuzzily
+fyke
+fylde
+fylfot
+fyn
+fyrd
+gabar
+gabelle
+gaberlunzie
+gabion
+gabionade
+gablet
+gabo
+gabor
+gaborone
+gaby
+gaddafi
+gadhelic
+gadid
+gadoid
+gadolinite
+gadroon
+gadsden
+gaea
+gaekwar
+gaffsail
+gagauzi
+gahnite
+gaikwar
+gaillard
+gaiseric
+gaitskell
+gaius
+galactagogue
+galactometer
+galactopoietic
+galah
+galangal
+galantine
+galanty
+galashiels
+galata
+galatians
+galba
+galbanum
+galbraith
+galea
+galileo
+galimatias
+galingale
+galiot
+galipot
+galle
+galleass
+gallfly
+gallia
+galliambic
+galliard
+gallice
+galligaskins
+gallimaufry
+gallinacean
+gallinaceous
+gallinas
+galliot
+gallipoli
+gallipot
+galliwasp
+gallnut
+galloglass
+galloon
+galloot
+gallous
+galoot
+galop
+galsworthy
+galvani
+galvanoscope
+galvanostat
+galvanotropism
+galvo
+galyak
+gama
+gamba
+gambado
+gambrel
+gambrinus
+gamelan
+gamesman
+gametangium
+gametocyte
+gametogenesis
+gametophore
+gametophyte
+gammadion
+gammer
+gamogenesis
+gamopetalous
+gamophyllous
+gamosepalous
+gamp
+gan
+gance
+gand
+gandalf
+gandhi
+gandy
+gandzha
+ganesa
+gangbang
+gangrel
+gangtok
+gangue
+ganister
+ganja
+ganof
+ganoid
+gansey
+gapeworm
+gapped
+garam
+garand
+garbanzo
+garbo
+garboard
+garboil
+gard
+garda
+gardant
+garderobe
+gardiner
+garfish
+garganey
+garget
+garnierite
+garonne
+garpike
+garrick
+gasconade
+gaselier
+gasiform
+gaskell
+gaskin
+gasman
+gasohol
+gasometry
+gasteropod
+gastralgia
+gastroenteric
+gastroenteritis
+gastroenterology
+gastroenterostomy
+gastrolith
+gastrology
+gastropod
+gastroscope
+gastrostomy
+gastrotomy
+gastrotrich
+gastrovascular
+gastrula
+gatehouse
+gatekeep
+gateshead
+gath
+gatling
+gatt
+gauffer
+gaugeing
+gauhati
+gaumless
+gauntry
+gaup
+gaussmeter
+gautama
+gautier
+gavage
+gavial
+gawp
+gaya
+gayomart
+gazankulu
+gazehound
+gaziantep
+gazump
+gdynia
+gean
+geanticline
+gearwheel
+geber
+gec
+gedact
+gedanken
+geelong
+gefilte
+gehlenite
+gelada
+gelatinoid
+gelibolu
+gell
+gelligaer
+gelt
+gemeinschaft
+gemmiparous
+gemmulation
+gemmule
+gemology
+gemot
+gen
+genappe
+generalism
+generalissimo
+genet
+genip
+genipap
+genitor
+genitourinary
+genizah
+genk
+genro
+gens
+genseric
+genstat
+gentianaceous
+gentianella
+genu
+geodynamics
+geognosy
+geoid
+geomechanics
+geometrid
+geophagy
+geosphere
+geostatic
+geostatics
+geosyncline
+geotaxis
+geotectonic
+gera
+gerah
+geraniaceous
+geranial
+geraniol
+geratology
+gerent
+gerenuk
+gerfalcon
+gerlachovka
+germander
+germanicus
+germanous
+germinant
+germiston
+gerona
+geronimo
+gerontological
+gers
+geryon
+gesellschaft
+gesso
+gest
+gestatorial
+gesualdo
+gey
+geyserite
+gezira
+ghat
+ghats
+gibberellic
+gibbsite
+gibeon
+gibli
+gibran
+gid
+gide
+gidgee
+gie
+giftwrap
+gifu
+gigabit
+gigabyte
+gigabytes
+gigaherz
+gigantomachy
+gigli
+gigue
+gilet
+gilgai
+gilgamesh
+gillies
+gillion
+gillray
+gillyflower
+gilolo
+gilsonite
+gilthead
+gimcrack
+gimel
+gimme
+gingiva
+gingivitis
+gink
+ginnel
+giorgione
+giotto
+gip
+gipon
+giraldus
+girandole
+girdlecake
+girgenti
+gironde
+gironny
+girosol
+gisarme
+gish
+gissing
+gittern
+giusto
+glabella
+glabrous
+glacialist
+gladbeck
+gladdon
+gladiate
+gladrags
+glaikit
+glair
+glaive
+glamorgan
+glandule
+glarus
+glaser
+glassman
+glastonbury
+glauce
+glauconite
+glebe
+gleeman
+gleet
+gleiwitz
+glencoe
+glendower
+glenoid
+glenrothes
+gley
+glia
+gliadin
+glissando
+glister
+gliwice
+globate
+globeflower
+globin
+globoid
+globose
+globuliferous
+glochidium
+glockenspiel
+glogg
+glomerate
+glomeration
+glomerule
+glomerulus
+glomma
+glossa
+glossator
+glossectomy
+glosseme
+glossitis
+glossography
+glossology
+glossopharyngeal
+glottic
+glottochronology
+gloze
+glucagon
+glucinum
+glucocorticord
+gluconeogenesis
+glucoprotein
+glucoside
+glucosuria
+glume
+gluon
+glutathione
+glutelin
+gluteus
+glyceric
+glycerophosphate
+glycogenesis
+glycolic
+glycolysis
+glyconeogenesis
+glycoside
+glycosuria
+glyoxaline
+glyphography
+glyptal
+glyptic
+glyptics
+glyptodont
+glyptography
+gnatcatcher
+gnathic
+gnathion
+gnathite
+gnathonic
+gnocchi
+gnosis
+gnotobiotics
+goalmouth
+goanna
+goatfish
+goatherd
+goatsbeard
+goatskin
+goatsucker
+gobbet
+gobi
+gobioid
+gobo
+gobstopper
+goby
+godard
+godavari
+godefroy
+goderich
+godown
+godroon
+gogga
+gogglebox
+goglet
+gogol
+gogra
+goldarn
+goldcrest
+goldeye
+goldilocks
+goldoni
+goldschmidt
+goldthread
+goliard
+goliardery
+golliwog
+gollop
+goloshes
+gombroon
+gomel
+gomorrah
+gompers
+gomphosis
+gomulka
+gomuti
+gonadotropin
+goncourt
+gondar
+gonfalon
+gonfalonier
+gongola
+gonidium
+goniometer
+gonk
+gonna
+gonococcus
+gonocyte
+gonof
+gonophore
+gonopore
+googly
+gook
+goole
+gooney
+goosander
+goosefoot
+goosegog
+goosegrass
+goosy
+gopak
+gorakhpur
+goral
+gorbals
+gorblimey
+goreng
+gorgerin
+gorgias
+gorgoneion
+gorica
+gorizia
+gormless
+gorsedd
+gosport
+gosse
+gossipmonger
+gossipmongers
+gossoon
+goster
+gotama
+gotta
+gouache
+gourami
+gourmont
+goutweed
+gowan
+gower
+gowk
+gowon
+goy
+gracile
+gracioso
+graduand
+gradus
+graecism
+graffito
+grahame
+graiae
+grainger
+grallatorial
+grama
+gramarye
+gramercy
+gramineous
+graminivorous
+grammatology
+grampian
+grampus
+granada
+granadilla
+granados
+grandaunt
+grandmaster
+grandmasters
+granduncle
+granduncles
+grangemouth
+granicus
+graniteware
+granitite
+granodiorite
+granolith
+granophyre
+granta
+granuloma
+granulose
+graphomotor
+grappa
+grappelli
+graptolite
+grasmere
+grassfinch
+grasshook
+grassquit
+grassroot
+gratian
+grattan
+gratulate
+graupel
+grav
+gravamen
+gravenhage
+gravettian
+gravimetrical
+graz
+gree
+greegree
+greeley
+greenaway
+greenbottle
+greenbrier
+greenfinch
+greenfly
+greengage
+greenhead
+greenheart
+greenock
+greenockite
+greensand
+greenshank
+greensickness
+greenstick
+greenstone
+greenstuff
+greige
+gremial
+gressorial
+greuze
+greyback
+greybeard
+greyhen
+greystones
+greywacke
+gribble
+griddlecake
+gridfile
+gridfiles
+grillparzer
+grilse
+grimalkin
+grimsby
+grindelwald
+grindery
+grisaille
+griseofulvin
+griseous
+grisette
+grishun
+griskin
+grisons
+grivation
+grivet
+grockle
+grodno
+grogram
+gromyko
+groningen
+gropius
+gros
+groschen
+grosgrain
+grosseteste
+grosswardein
+grosz
+grot
+grote
+grotius
+groundage
+groundsill
+groundsman
+groundspeed
+groundswell
+groupwork
+grouty
+grovet
+groyne
+grozing
+grozny
+grugru
+grumous
+grundy
+grysbok
+guacharo
+guaco
+guadalajara
+guadalcanal
+guadalquivir
+guadiana
+guaiacum
+guan
+guanabara
+guanaco
+guanajuato
+guanase
+guanosine
+guardafui
+guarneri
+guayaquil
+guayule
+gubbins
+gudeance
+gudrun
+guelders
+guenon
+guesthouse
+guidon
+guienne
+guilloche
+guipure
+guiscard
+guitarfish
+guizot
+gujranwala
+gulag
+gulags
+gular
+gulbenkian
+gulden
+gulfweed
+gumma
+gummite
+gummosis
+gummous
+gumshield
+gumtree
+gunge
+gunnel
+gunpaper
+gunstock
+gunter
+guntur
+gunwale
+gunyah
+gur
+gurdwara
+gurgitation
+gurglet
+gurjun
+gurkhali
+gurnard
+gustavo
+gutbucket
+guthrun
+gutta
+guv
+guyenne
+guyot
+gwalior
+gwelo
+gwent
+gwynedd
+gwyniad
+gyani
+gybe
+gymnasiarch
+gymnasiast
+gymslip
+gynaeceum
+gynaecocracy
+gynaecoid
+gynaecomastia
+gynandrous
+gynarchy
+gynecium
+gyniatrics
+gynophore
+gyronny
+gyrose
+gyrostatic
+gyrostatics
+gyve
+habu
+hachure
+hackamore
+hackbut
+hadaway
+hadhramaut
+hadj
+hadji
+hadrosaur
+hae
+haecceity
+haeckel
+haem
+haemachrome
+haemacytometer
+haemagglutinate
+haemagglutinin
+haemagogue
+haemal
+haematein
+haematemesis
+haematic
+haematin
+haematinic
+haematite
+haematoblast
+haematocele
+haematocrit
+haematocryal
+haematogenesis
+haematogenous
+haematoid
+haematological
+haematology
+haematolysis
+haematoma
+haematopoiesis
+haematosis
+haematothermal
+haematoxylin
+haematozoon
+haematuria
+haemic
+haemin
+haemochrome
+haemocoel
+haemocyanin
+haemocyte
+haemocytometer
+haemodialysis
+haemoflagellate
+haemoglobin
+haemoglobinuria
+haemoid
+haemolysin
+haemolysis
+haemophile
+haemophilia
+haemophiliac
+haemophilic
+haemopoiesis
+haemoptysis
+haemorrhage
+haemorrhagic
+haemorrhoidectomy
+haemorrhoids
+haemostasis
+haemostat
+haemostatic
+haeres
+haftarah
+hagar
+hagbut
+hagfish
+haggadah
+haggai
+hagiarchy
+hagiocracy
+hagiographer
+hagiolatry
+hagiology
+hagioscope
+hahnemann
+haidar
+haig
+haik
+haile
+hainaut
+haiphong
+hairball
+hairgrip
+hairif
+hairnet
+hairtail
+hairweaving
+hairworm
+hajj
+hake
+hakim
+hakluyt
+hakodate
+halafian
+halakah
+halal
+halation
+halberd
+halcyone
+haldane
+haleakala
+halesowen
+halfbeak
+halfwit
+halicarnassus
+hallah
+hallam
+hallel
+hallux
+halm
+halmahera
+halmstad
+halobiont
+haloid
+halophyte
+halothane
+hals
+haltemprice
+hama
+hamadryad
+hamadryas
+hamamatsu
+hamamelidaceous
+hambletonian
+hame
+hamelin
+hameln
+hamersley
+hamhung
+hamilcar
+hamm
+hammerfest
+hammersmith
+hammerstein
+hammurabi
+hampden
+hampstead
+hamshackle
+hamsun
+hamulus
+hamza
+hanaper
+hanau
+handbarrow
+handbell
+handbrake
+handfeed
+handleability
+handstroke
+hangbird
+hangchow
+hankerchief
+hankow
+hannover
+hanratty
+hapax
+haphtarah
+haplite
+haplography
+haplosis
+hapten
+hapteron
+haptic
+hapto
+haptotropism
+harakiri
+harald
+harambee
+harappa
+harar
+hardecanute
+hardhack
+hardicanute
+hardie
+hardily
+harebell
+hargeisa
+haricot
+harijan
+harikari
+harmattan
+harmonist
+harmonograph
+harmonographs
+harmotome
+harney
+harpenden
+harquebus
+harquebusier
+harrar
+harrogate
+harslet
+hartal
+harte
+hartebeest
+harthacanute
+hartlepool
+hartnell
+hartree
+hartshead
+harun
+haruspex
+harvestmen
+harwell
+harwich
+haryana
+harz
+hasa
+hasdrubal
+hashemite
+hask
+haslet
+hassan
+hasselt
+hatchback
+hatpin
+hatshepsut
+haubergeon
+hauberk
+haugh
+haulm
+hauraki
+haustellum
+haustorium
+havant
+havel
+havelock
+havildar
+havre
+hawes
+hawfinch
+hawhaw
+hawkbill
+hawksbill
+hawkweed
+haworth
+hawse
+hawsehole
+hawsepipe
+haybox
+hazelhen
+hazlitt
+headlamp
+headrace
+headrail
+headreach
+headscarf
+headsquare
+headward
+headwards
+heald
+healds
+hearths
+heartworm
+heathberry
+heathfowl
+heaume
+hebbel
+hebephrenia
+hebetate
+hebetic
+heckelphone
+hectocotylus
+hedjaz
+heehaw
+heelpost
+heenan
+heerlen
+heffer
+hegira
+hegumen
+heh
+heiduc
+heilbronn
+heilungkiang
+heirdom
+heitiki
+heitler
+hejira
+hekate
+hekla
+hel
+helichrysum
+helicline
+helicograph
+heliolithic
+heliotherapy
+heliotropin
+heliotype
+hellbent
+helle
+hellery
+helles
+helmand
+helminth
+helminthiasis
+helminthic
+helminthology
+helmont
+helpmann
+helsingborg
+helvellyn
+hemel
+hemelytron
+hemeralopia
+hemialgia
+hemianopsia
+hemicellulose
+hemichordate
+hemicycle
+hemidemisemiquaver
+hemielytron
+hemiola
+hemipode
+hemipteran
+hemipterous
+hemispheroid
+hemistich
+hemiterpene
+hemstitch
+henbit
+hencoop
+hendecagon
+hendecahedron
+henge
+hengelo
+hengist
+henhouse
+hepcat
+hepplewhite
+hepta
+heptad
+heptadecanoic
+heptahedron
+heptamerous
+heptangular
+heptarchy
+heptastich
+heptatriene
+heptavalent
+heptose
+hepworth
+heraclea
+heracles
+herakleion
+herby
+hercegovina
+herculaneum
+hereat
+heredes
+hereditable
+hereditist
+hereinto
+heresiarch
+hereward
+heriot
+herisau
+herl
+herm
+hermannstadt
+hermon
+hermosillo
+hermoupolis
+herne
+herniorrhaphy
+herod
+herodias
+herophilus
+herrick
+herriot
+herstmonceux
+hesiod
+hesperidin
+hesperidium
+hestia
+hetaera
+hetaerism
+heterocercal
+heterochromatic
+heterochromatin
+heterochromatins
+heterochromosome
+heterochromous
+heteroclite
+heterodactyl
+heterodont
+heterogenous
+heterography
+heterogynous
+heterolecithal
+heterologous
+heteromerous
+heteronym
+heteroplasty
+heterosporous
+heterostyly
+heterotaxis
+heterothallic
+heterotopia
+heth
+hevelius
+hevesy
+hexachloroethane
+hexachlorophene
+hexachord
+hexacosanoic
+hexadecane
+hexaemeron
+hexamerous
+hexangular
+hexanoic
+hexapla
+hexapody
+hexastich
+hexastyle
+hexavalent
+hexene
+hexone
+hexosan
+hexose
+hexyl
+hexylresorcinol
+heyduck
+heyerdahl
+hibernaculum
+hic
+hiddenite
+hiemal
+hieracosphinx
+hierocracy
+hierodule
+hierogram
+hierology
+hierophant
+highchair
+highjack
+highlife
+highveld
+hijaz
+hijinks
+hilla
+hillery
+hillfort
+hilliard
+hillingdon
+hilus
+hilversum
+himachal
+himalayas
+himeji
+himmler
+hin
+hinckley
+hindgut
+hindoo
+hindustan
+hinny
+hinshelwood
+hipparch
+hipparchus
+hippolyta
+hiragana
+hircine
+hiri
+hirohito
+hiroshige
+hirundine
+hispid
+histiocyte
+histogen
+histogenesis
+histoid
+histone
+historiated
+hitparade
+hmso
+hoactzin
+hoad
+hoarhound
+hoatching
+hoatzin
+hobbema
+hochhuth
+hockney
+hodden
+hodeida
+hodman
+hodometer
+hoek
+hofei
+hofmannsthal
+hofuf
+hogarth
+hogg
+hogged
+hogmanay
+hognosed
+hogtie
+hogue
+hogweed
+hohenlinden
+hohenlohe
+hohenstaufen
+hoick
+hoicks
+hoiden
+hokkaido
+hokku
+hokusai
+holarctic
+holbein
+holinshed
+holkar
+holmic
+holocaine
+holoenzyme
+holofernes
+holoplankton
+holothurian
+holp
+holpen
+hols
+holyhead
+holyoake
+holytide
+homebuild
+homecome
+homecraft
+homeopaths
+homeown
+homocentric
+homochromous
+homocyclic
+homodont
+homogenous
+homophobe
+homophobes
+homotaxis
+homothermal
+honan
+honecker
+honegger
+honewort
+honeybunch
+honeysucker
+honiara
+hoo
+hoofbound
+hoogh
+hooghly
+hooke
+hooknose
+hoopoe
+hoopoes
+hoovered
+hoovering
+hoovers
+hopeh
+hoplology
+hoppus
+hopsack
+horae
+horal
+hordein
+horeb
+horme
+hormuz
+hornbook
+hornby
+hornfels
+hornstone
+horologe
+horologium
+horoscopy
+horripilation
+horsa
+horsebox
+horseboxs
+horseleech
+horseleeches
+horseriding
+horst
+horta
+horthy
+horticulturalist
+hortus
+hosea
+hosier
+hospitalet
+hospitaller
+hospodar
+hosteller
+hostelling
+hostie
+hotien
+hotplate
+hotpot
+hotspur
+hottie
+houdon
+houmous
+hounslow
+housebuilding
+housecarl
+housel
+houseleek
+houseleeks
+houseline
+housemaster
+housemasters
+housman
+houting
+hovercraft
+hoverport
+hovertrain
+hovertrains
+howdah
+howitzer
+howlet
+howrah
+howtowdie
+hoxha
+hoylake
+hradec
+hrvatska
+hsi
+hsian
+hsiang
+hsining
+hsinking
+hua
+huambo
+huang
+hubble
+hubli
+huckel
+huckle
+hucklebone
+huelva
+huesca
+hufuf
+huggermugger
+hughie
+huhehot
+hula
+hulme
+humber
+humberside
+humblebee
+hunan
+hungnam
+huns
+huntingdon
+hunyadi
+huon
+hupeh
+huppah
+hurds
+hurstmonceux
+hus
+husain
+husein
+hushaby
+huss
+hussein
+husserl
+hutchie
+hutment
+hutu
+huygens
+huysmans
+hwang
+hwyl
+hyaluronic
+hydantoin
+hydathode
+hydatid
+hyderabad
+hydnocarpate
+hydnocarpic
+hydracid
+hydrastinine
+hydrazoic
+hydria
+hydriodic
+hydrobromic
+hydrocele
+hydrocellulose
+hydrocoral
+hydrocortisone
+hydrogenolysis
+hydrogenous
+hydrograph
+hydrolyte
+hydromedusa
+hydromel
+hydrometallurgy
+hydrometeor
+hydronaut
+hydrophilous
+hydropower
+hydroquinone
+hydrostat
+hydrosulphate
+hydrosulphide
+hydrosulphurous
+hydrotaxis
+hydrotherapeutics
+hydroxonium
+hydroxylamine
+hyetograph
+hyetography
+hygristor
+hygrophilous
+hygrostat
+hyksos
+hylomorphism
+hylophagous
+hylotheism
+hylozoism
+hymenopteran
+hymenopterous
+hymettus
+hymnist
+hyoid
+hyoscyamine
+hypabyssal
+hypaesthesia
+hypaethral
+hypallage
+hypanthium
+hyperaemia
+hyperbaton
+hypercatalectic
+hypercorrect
+hypercorrection
+hyperdulia
+hyperextension
+hyperfocal
+hyperglycaemia
+hyperinsulinism
+hyperion
+hyperkinesia
+hypermarket
+hyperpnoea
+hyperpyrexia
+hyperstability
+hyperstable
+hypersthene
+hyperterm
+hyperterms
+hypervitaminosis
+hypesthesia
+hypethral
+hyphae
+hypnology
+hypnopaedia
+hypnopompic
+hypoacidity
+hypoblast
+hypochondrium
+hypocotyl
+hypoderm
+hypoeutectic
+hypogastrium
+hypogeal
+hypogene
+hypogenous
+hypogeous
+hypogeum
+hypoglossal
+hypoglycaemia
+hypognathous
+hypogynous
+hypoid
+hypolimnion
+hypomania
+hyponasty
+hyponitrite
+hyponitrous
+hypophosphate
+hypophosphite
+hypophosphoric
+hypophosphorous
+hypophyge
+hypophysis
+hypopituitarism
+hypoplasia
+hypoploid
+hypopnoea
+hyposthenia
+hypostyle
+hyposulphite
+hyposulphurous
+hypotaxis
+hypothec
+hypoxanthine
+hyracoid
+hyrax
+hyrcania
+hyssop
+hysterogenic
+hysteroid
+hysterotomy
+hystricomorph
+iamb
+iata
+iatric
+ibadan
+ibarruri
+ibert
+ibibio
+ibiza
+ichang
+ichinomiya
+ichnography
+ichnology
+ichor
+ichthyic
+ichthyoid
+ichthyolite
+ichthyology
+ichthyophagous
+ichthyosaur
+ichthyosis
+iconium
+iconomatic
+iconostasis
+icterus
+ictinus
+ictus
+ide
+ideatum
+identifers
+identikit
+ideosyncrasies
+ideosyncrasy
+idioblast
+idiopathy
+idiophone
+idiosyncracies
+idiosyncracy
+idocrase
+idolum
+idun
+ieper
+ieyasu
+ife
+igbo
+igdrasil
+igfet
+ignis
+ignitability
+ignoratio
+ignotum
+igraine
+ihram
+ikan
+ikebana
+ikeja
+ikhnaton
+ilea
+ileac
+ileitis
+ileostomy
+ilesha
+ileus
+ilex
+ilia
+iliamna
+iligan
+ilion
+ilium
+ilkley
+illampu
+illawarra
+illich
+illimani
+illinium
+illocution
+illude
+illyria
+illyricum
+ilmen
+iloilo
+ilorin
+imagen
+imbros
+iminourea
+immersionism
+immobilism
+immortelle
+immoveables
+immunoassay
+immunoglobulin
+immunomicrosphere
+immunoreaction
+impanation
+imparipinnate
+imparisyllabic
+impaste
+impasto
+impearl
+impeccant
+impedimenta
+impennate
+imperium
+imperscriptible
+impetigo
+imphal
+impi
+implacental
+impolder
+impolicy
+imponderabilia
+imponent
+imposable
+impostume
+impower
+impresa
+imprescriptible
+impressure
+imprest
+improbity
+imroz
+inappellable
+inapprehensive
+inarch
+inartificial
+inbeing
+incaparina
+incapsulate
+incardinate
+incensory
+inchmeal
+inchon
+incipit
+incisure
+incluse
+incomprehensive
+incrementation
+incunabula
+indaba
+indeces
+indene
+indetermine
+indexation
+indigestive
+indigoid
+indiscernability
+indo
+indoleacetic
+indolebutyric
+indomethacin
+indophenol
+indore
+indorsee
+indoxyl
+indra
+indre
+induna
+induplicate
+indusium
+indy
+inearth
+inequable
+inerrable
+inescutcheon
+inessive
+inextirpable
+infallibilism
+infante
+infare
+infeudation
+infibulate
+infight
+infill
+infold
+infracostal
+infralapsarian
+infulae
+infundibuliform
+infundibulum
+infuscate
+infusionism
+inge
+ingeminate
+ingenerate
+ingesta
+ingleborough
+inglenook
+ingoing
+ingolstadt
+ingraft
+ingravescent
+ingres
+ingulf
+inhambane
+inhaul
+inhesion
+inkberry
+inkblot
+inlace
+inmesh
+inmigrant
+inniskilling
+innoxious
+innsbruck
+innumerate
+innutrition
+inoculable
+inodorous
+inofficious
+inqilab
+insalivate
+inscape
+insectarium
+inshrine
+insipience
+insnare
+insomuch
+instalation
+installant
+inswing
+intarsia
+integrant
+integratable
+intendancy
+interagency
+interbedded
+interchannel
+interconnectable
+interconsole
+interflow
+interfluent
+interfluve
+intergranal
+interjacent
+interlaken
+interlap
+interlay
+interlocation
+interlunation
+intermesh
+intermigration
+intermittency
+interosculate
+interpage
+interparticle
+interpellant
+interphone
+interpolant
+interprete
+interpretes
+interradial
+interrex
+interrobang
+interrogable
+interstratify
+intersystem
+intertexture
+intertrigo
+intracoastal
+intranational
+intranuclear
+intrasocietal
+intratelluric
+intravasation
+intuc
+intuitivism
+intwine
+inuit
+inurbane
+invercargill
+involucel
+involutory
+invultuation
+inwrap
+inyala
+iodism
+iodometry
+iolite
+iona
+ionone
+ionopause
+iontophoresis
+iphigenia
+ipoh
+ipsambul
+ipsus
+ipswich
+iqbal
+iquique
+iquitos
+iracund
+irade
+irbid
+irbil
+irenicon
+irian
+iridectomy
+irido
+iridotomy
+iritis
+ironbark
+ironfounding
+irradiant
+irrelievable
+irremissible
+irretentive
+irriguous
+irtysh
+isagoge
+isagogics
+isallobar
+isar
+isarithmic
+isatin
+isauria
+ischaemia
+ischia
+ischium
+isentropically
+isherwood
+islay
+ismailia
+iso
+isoamyl
+isobath
+isocept
+isochor
+isochroous
+isocracy
+isocrates
+isocyanic
+isocyanide
+isodiametric
+isodiaphere
+isodimorphism
+isodynamic
+isoelectric
+isoelectronic
+isoenergetic
+isogamete
+isogenous
+isogeotherm
+isogloss
+isogon
+isogonic
+isohel
+isohyet
+isolecithal
+isoleucine
+isolex
+isoline
+isologous
+isophone
+isopod
+isoprene
+isopropyl
+isorhythmic
+isosceles
+isoseismal
+isosmotic
+isospondylous
+isostasy
+isosteric
+isotactic
+isothere
+isotone
+isotron
+isotropical
+israfil
+issachar
+issus
+istana
+isthmian
+istle
+istria
+itacolumite
+itaconic
+italicity
+italicy
+ithunn
+ithyphallic
+iulus
+iviza
+ixtle
+iyar
+iyeyasu
+izmir
+izmit
+iznik
+izzard
+jacamar
+jacdaw
+jackeroo
+jackfish
+jackfruit
+jackshaft
+jacksmelt
+jacksnipe
+jackstay
+jackstraws
+jaconet
+jadeite
+jael
+jaffa
+jaffna
+jaguarondi
+jahveh
+jahweh
+jailhouse
+jaipur
+jalap
+jalapa
+jalisco
+jambeau
+jambi
+jambo
+jammu
+jammy
+jamnagar
+jampan
+jamshedpur
+jamshid
+jana
+janata
+janina
+jarl
+jarp
+jarrah
+jarrow
+jarry
+jarvey
+jassy
+jato
+javari
+jawan
+jawara
+jawbreak
+jaxartes
+jayawardena
+jaywalk
+jebel
+jedda
+jefe
+jehad
+jehol
+jehoshaphat
+jehu
+jekyll
+jellaba
+jellicoe
+jellify
+jellybean
+jemadar
+jemappes
+jembe
+jequirity
+jerba
+jerbil
+jerboa
+jerez
+jerid
+jerreed
+jevons
+jewelfish
+jewfish
+jhansi
+jhelum
+jibbons
+jibouti
+jidda
+jiggermast
+jihad
+jillaroo
+jillion
+jilolo
+jinghis
+jinja
+jinnah
+jipijapa
+jissom
+jitterbugger
+jitterbugging
+jiujitsu
+jobcentre
+jobcentres
+jobname
+jocko
+jodhpuri
+jodrell
+joffre
+jogged
+jogjakarta
+johore
+jokjakarta
+jollify
+jolo
+jongleur
+jonnock
+jook
+joppa
+jordaens
+jorum
+jos
+josquin
+jota
+jotter
+jotun
+joual
+journalled
+jowett
+joypop
+juba
+jubbah
+jube
+judezmo
+judicative
+judicator
+judogi
+judoka
+jugal
+jugfet
+juggins
+juglandaceous
+jugulate
+jugum
+jugurtha
+juiz
+jullundur
+jumbuck
+jumna
+juncaceous
+jungfrau
+junkman
+jupon
+juratory
+juryman
+jus
+justiceship
+justiciary
+justle
+juvenal
+kabalega
+kabaragoya
+kabbala
+kabob
+kachang
+kachina
+kadi
+kadiyevka
+kaduna
+kaffirs
+kafiristan
+kagera
+kagoshima
+kagu
+kaiak
+kaieteur
+kaif
+kaifeng
+kail
+kailyard
+kain
+kainogenesis
+kairouan
+kaka
+kakapo
+kakemono
+kaki
+kalat
+kalends
+kaleyard
+kalgan
+kalgoorlie
+kali
+kalian
+kalidasa
+kalif
+kalimantan
+kalinin
+kaliningrad
+kalisz
+kaliyuga
+kalmar
+kalong
+kalpa
+kalpak
+kalsomine
+kaluga
+kama
+kamakura
+kamala
+kamasutra
+kame
+kamerun
+kamet
+kami
+kampong
+kampuchea
+kamseen
+kana
+kanamycin
+kananga
+kanara
+kanazawa
+kanchenjunga
+kanchipuram
+kandahar
+kandy
+kanga
+kangwane
+kannada
+kano
+kanpur
+kansu
+kantar
+kanu
+kanzu
+kaohsiung
+kaolack
+kaoliang
+kaon
+kapellmeister
+kaph
+karabiner
+karafuto
+karaganda
+karakoram
+karakorum
+karamanlis
+karbala
+karelia
+kariba
+karnataka
+karoo
+kaross
+kart
+karyogamy
+karyokinesis
+karyolymph
+karyolysis
+karyoplasm
+karyosome
+karyotin
+karyotype
+kasai
+kasbah
+kasher
+kashgar
+kashmir
+kassa
+kassala
+kassel
+kat
+katabasis
+katabolism
+katakana
+katanga
+katar
+kathak
+katharevusa
+katharsis
+kathiawar
+katmai
+katsina
+kattegat
+katzenjammer
+kauai
+kaunas
+kaunda
+kauri
+kaveri
+kawasaki
+kayseri
+kazachok
+kazakh
+kazan
+kazantzakis
+kazbek
+kea
+kean
+kearney
+keble
+keck
+ked
+kedah
+kedge
+kedgeree
+kediri
+kedron
+keef
+keelung
+keepnet
+kef
+keffiyeh
+kegler
+keister
+keitel
+keitloa
+kekkonen
+kelantan
+keloid
+kelpie
+kelt
+kelter
+kemal
+kemble
+kemerovo
+kempe
+kempis
+kempt
+kenaf
+kendal
+kendo
+kenogenesis
+kenosis
+kenspeckle
+kente
+kentledge
+kenyatta
+keos
+kep
+kerala
+keramic
+keramics
+keratin
+keratitis
+keratogenous
+keratoid
+keratoplasty
+keratose
+keratosis
+kerb
+kerbaya
+kerbela
+kerbing
+kerbstone
+kerch
+kerf
+kerguelen
+kerkrade
+kerman
+kermes
+kermis
+kermits
+kero
+kerouac
+kersey
+kerseymere
+kesselring
+kesteven
+ketonuria
+ketoxime
+kevel
+kew
+kewpie
+kex
+keytop
+keytops
+kickdown
+kicksorter
+kicktail
+kidd
+kiddle
+kidron
+kief
+kike
+kilung
+kimberley
+kimberlite
+kina
+kinabalu
+kinase
+kincardine
+kinchinjunga
+kincob
+kinematograph
+kingbolt
+kingcraft
+kingcup
+kingwana
+kinin
+kino
+kioto
+kirtle
+kitbag
+kitbags
+kitchenless
+kitenge
+kithara
+kittiwake
+kitwe
+kiushu
+klaipeda
+klepht
+klieg
+klong
+klootchman
+klopstock
+knackwurst
+knag
+knap
+knar
+knawel
+knickpoint
+kniferest
+knop
+knossos
+knotgrass
+knotwork
+knurly
+koa
+koan
+kob
+kobarid
+kobe
+kobold
+kochi
+kodok
+koel
+kofta
+koftgar
+kofu
+kokura
+kolar
+kolding
+koniology
+konya
+koodoo
+koph
+korfball
+koto
+kurchatovium
+kyanite
+kylin
+kylix
+kyloe
+kymograph
+kymric
+kymry
+kyphosis
+kythera
+labarum
+labe
+labefaction
+labiche
+labionasal
+labiovelar
+lablab
+labret
+labroid
+labrum
+labuan
+labyrinthodont
+laccolith
+lacedaemon
+lacerant
+lacertilian
+lachlan
+lachryma
+lachrymatory
+laclos
+laconia
+lactalbumin
+lactam
+lactary
+lactescent
+lactiferous
+lactoflavin
+lactometer
+lactophenol
+lactoprotein
+lactoscope
+ladislaus
+ladoga
+ladrone
+ladyfy
+ladysmith
+ladysnow
+laertes
+laevogyrate
+laevorotatory
+laevulin
+laevulose
+laforgue
+lagan
+lagena
+lagerkvist
+lah
+laik
+lairy
+laius
+lala
+lalang
+lalapalooza
+lallans
+lallation
+lamartine
+lambdacism
+lambdoid
+lambkin
+lambrequin
+lamellicorn
+lamellirostral
+lamina
+laminitis
+lammergeier
+lampas
+lampedusa
+lampern
+lampeter
+lampholder
+lampion
+lamppost
+lampposts
+lamprophyre
+lampshade
+lampshades
+lanark
+lanate
+lancejack
+lancelot
+lancewood
+lanchow
+landammann
+landeshauptmann
+landgrave
+landgraviate
+landgravine
+landloper
+landor
+landowska
+landrace
+landscapist
+landscapists
+landseer
+landshark
+landshut
+landsknecht
+landtag
+landwaiter
+lanfranc
+langlauf
+langouste
+langrage
+langres
+langsyne
+langue
+languedoc
+languet
+laniard
+laniary
+laniferous
+lankester
+lanner
+lanneret
+lanose
+lansquenet
+lanthorn
+lanugo
+laoag
+laodicea
+laomedon
+laotze
+lapidate
+lapidify
+lapillus
+lapis
+lapsus
+laptev
+lardon
+largen
+larine
+larisa
+larmor
+larn
+larnax
+larousse
+larrigan
+larrikin
+larrup
+larum
+larwood
+laryngotomy
+lascaux
+lashio
+lashkar
+lasker
+lasket
+lassa
+lassalle
+lassus
+lat
+lateroversion
+lathi
+lathy
+latifundium
+latimer
+latium
+latria
+lattermost
+lauda
+lauraceous
+laurasia
+lauric
+laurier
+laurustinus
+lauryl
+lautrec
+lav
+laval
+lavolta
+lawbreak
+lawes
+lawgive
+lawks
+lawmake
+laxey
+layamon
+layard
+laycock
+layshaft
+lazaretto
+lazio
+lazuli
+lazulite
+lazurite
+leadbelly
+leadwort
+leafcutter
+leafletting
+leakey
+leal
+leaseback
+leat
+leatherhead
+leatherjacket
+leatherwood
+leavis
+leben
+lebkuchen
+leblanc
+lebowa
+lebrun
+lecce
+lech
+lecky
+leconte
+lector
+lecythus
+leet
+leeuwarden
+lefthand
+lefthanded
+leftwing
+leftwinger
+leftwingers
+legaspi
+legnica
+legumin
+lehmann
+lehmbruck
+lehr
+leiria
+leishmaniasis
+leister
+leitrim
+leix
+lek
+lekker
+lely
+leman
+lemniscate
+lemnos
+lempira
+lemuroid
+lenglen
+lengthman
+lentamente
+lentic
+lenticel
+lentigo
+leoben
+lepaya
+lepidopteran
+lepidote
+lepidus
+lepontine
+leporid
+leporine
+leprosarium
+leprose
+leptophyllous
+leptosome
+leptospirosis
+leptotene
+lesbos
+lesseps
+letchworth
+letterset
+leucas
+leuco
+leucocratic
+leucocyte
+leucocytosis
+leucoderma
+leucomaine
+leucopenia
+leucoplast
+leucopoiesis
+leucorrhoea
+leucotomy
+leuctra
+leukas
+leuven
+levalloisian
+leverrier
+leviable
+levkas
+lewes
+lexeme
+lexicology
+lexigraphy
+lexis
+liard
+liase
+liason
+libau
+libava
+libeccio
+liberec
+liberticide
+libia
+lichenin
+lichenology
+lichi
+liddell
+lidice
+liebig
+liebknecht
+liegeman
+liegnitz
+lienal
+lientery
+liestal
+lietuva
+liffey
+liftboy
+liftoff
+ligan
+liger
+ligeti
+ligniform
+lignocaine
+ligroin
+ligula
+liguria
+lii
+likasi
+liklihood
+likuta
+lilburne
+liliaceous
+lilienthal
+liliuokalani
+lille
+lilo
+lilongwe
+limacine
+limassol
+limbate
+limewater
+limicoline
+limicolous
+limitarian
+limoges
+limousin
+linacre
+linalool
+linares
+lincrusta
+linctus
+lindane
+lindesnes
+lindisfarne
+lindwall
+lineate
+lineations
+linefeed
+linefeeds
+linenumber
+linestyle
+linewidth
+lingam
+lingayen
+lingcod
+linguiform
+linguini
+linhay
+linkwork
+linlithgow
+linn
+linnaeus
+linnet
+linnhe
+lino
+linocut
+linolenic
+linstock
+lintwhite
+linz
+lionfish
+lipari
+lipase
+lipchitz
+lipography
+lipoid
+lipoma
+lipophilic
+lipoprotein
+lippe
+lippi
+lippie
+liquefacient
+liquesce
+liquidus
+liquorish
+liripipe
+lisieux
+literae
+lithoid
+lithomarge
+lithometeor
+lithotrity
+littoria
+liu
+livingstone
+livonia
+livorno
+livraison
+livy
+lix
+lixivium
+loadstar
+loadstone
+loanda
+lobengula
+lobito
+lobola
+lobworm
+lochia
+lockyer
+locl
+locoman
+locris
+locum
+lod
+lodi
+lodicule
+loewi
+lofoten
+loganberry
+loganiaceous
+logaoedic
+logicism
+loglog
+logoff
+logography
+logopaedics
+lohengrin
+loiret
+lollapalooza
+lomax
+lombok
+lombroso
+loment
+lomond
+londrina
+longan
+longcase
+longcloth
+longe
+longicorn
+longinus
+longlasting
+longleaf
+longship
+longshore
+longueuil
+longueur
+longus
+longways
+longyearbyen
+loofah
+lookin
+loopy
+loosebox
+lophobranch
+lophophore
+lor
+lordy
+lorentz
+lorica
+lorient
+lorikeet
+lorimer
+lorrain
+lorris
+losey
+lothair
+lothario
+lothian
+lothians
+lothringen
+lotic
+louche
+loudish
+loudspeak
+louth
+louvain
+louvar
+lovage
+lovat
+lovell
+lovey
+lowan
+lowerclassman
+lowestoft
+lowveld
+loyang
+lozengy
+lozi
+lualaba
+luanda
+luang
+luau
+lublin
+lubra
+lubumbashi
+lucarne
+lucca
+luce
+luciferin
+lucilius
+lucullus
+lud
+ludhiana
+ludo
+luff
+luffed
+luffing
+luffs
+lugo
+lugsail
+lugworm
+luichow
+luik
+lumberjacket
+lumbricalis
+lumbricoid
+lumiere
+lumisterol
+lumme
+lumpenproletariat
+lumumba
+luna
+lunarian
+lungan
+lungi
+lungki
+lungworm
+lungwort
+lunik
+luns
+lunula
+lunulate
+lupin
+lurdan
+lurex
+lusatia
+lusus
+luteolin
+lutestring
+luthern
+luthuli
+lutine
+lutist
+luxor
+luxulianite
+lvi
+lvii
+lxi
+lxii
+lxiv
+lxix
+lxvi
+lxvii
+lyallpur
+lyautey
+lycanthrope
+lycaon
+lycaonia
+lycia
+lycopod
+lycurgus
+lydda
+lyddite
+lydgate
+lyell
+lyly
+lymphangial
+lymphangitis
+lymphoadenoma
+lyncean
+lynchet
+lysias
+lysippus
+lysol
+lyssa
+lytic
+lytta
+lytton
+mabela
+mabuse
+macaco
+maccaroni
+macebearer
+macedoine
+machado
+machan
+machel
+machin
+machmeter
+machree
+machu
+macroclimate
+macroencephaly
+macrograph
+macrophysics
+macroprocessor
+macropterous
+macrosporangium
+macrospore
+macrosystem
+macruran
+macula
+macumba
+madafu
+madhya
+madina
+madre
+madrepore
+madura
+madurai
+maduro
+madwort
+maebashi
+maenad
+maestoso
+maestricht
+maewo
+mafeking
+maffick
+mag
+magallanes
+magdalena
+mage
+magen
+maggiore
+magilp
+maginot
+magistery
+magnetochemistry
+magnetopause
+magnetosheath
+magnificats
+magnoliaceous
+magnus
+magot
+magritte
+maguey
+mahabharata
+mahalla
+mahanadi
+maharashtra
+mahewu
+mahjong
+mahometan
+mahratta
+mahseer
+maidan
+maidstone
+maiduguri
+maigre
+maihem
+maikop
+mailcoach
+maillol
+maimonides
+mainbrace
+maintenence
+maintopsail
+mainz
+maiolica
+majunga
+makalu
+makarios
+makeyevka
+makhachkala
+makkah
+makurdi
+makuta
+malabo
+malachi
+malacophyllous
+malacopterygian
+maladdress
+malam
+malang
+malassimilation
+malatesta
+malatya
+maldon
+maleable
+malebranche
+maleic
+malevich
+malherbe
+malihini
+malimprinted
+malines
+malinke
+malkin
+mallam
+mallee
+mallenders
+malleolus
+mallorca
+malm
+malonic
+malonylurea
+malory
+malpighi
+malpighiaceous
+maltha
+malthus
+maltman
+maluku
+malvaceous
+malvern
+malwa
+mamaguy
+mamba
+mamelon
+mamilla
+mamillate
+mammee
+mammet
+mammiferous
+mammilla
+mampara
+manado
+managerialism
+manakin
+manassas
+manasseh
+manaus
+manche
+manchineel
+manchukuo
+manchuria
+mandatorily
+mandi
+mandir
+manet
+mangabey
+mangalore
+manganin
+mangelwurzel
+mangonel
+mangosteen
+mani
+manichaeus
+manilla
+manille
+maninke
+maniple
+manipur
+manisa
+manitoulin
+manizales
+manky
+mannar
+manolete
+manresa
+mansart
+mansholt
+manteau
+mantegna
+mantelletta
+manteltree
+mantilla
+mantinea
+mantoux
+mantova
+manufacturable
+manuka
+manukau
+manus
+manutius
+manyplies
+manzanilla
+manzoni
+maoism
+maputo
+maquette
+mara
+marabunta
+maraca
+maracanda
+maracay
+maraging
+marasca
+marat
+maravedi
+marcasite
+marcellus
+marcescent
+marche
+marcos
+marcuse
+marduk
+mardy
+maremma
+marg
+margaric
+margarite
+margate
+margravate
+margrave
+margravine
+margrethe
+marianao
+maribor
+mariculture
+mariposa
+maritage
+maritain
+maritsa
+marlite
+marmara
+marmite
+marmolada
+maroc
+marocain
+maroquin
+maros
+marprelate
+marquand
+marquesas
+marquessate
+marram
+marrano
+marriageability
+marron
+marryat
+marsilius
+marsipobranch
+martaban
+martagon
+martel
+martellato
+martello
+martineau
+marvell
+marxists
+masaccio
+masan
+masaryk
+masbate
+mascarene
+mascle
+mascon
+masharbrum
+mashhad
+mashie
+masinissa
+masjid
+maskanonge
+masqat
+massa
+massachuset
+massasauga
+massasoit
+massine
+massinissa
+massorete
+massotherapy
+mastaba
+mastigophoran
+mastitis
+masuria
+masurium
+matadi
+matamoros
+matanzas
+matapan
+matchbox
+matchmark
+matchstick
+mathura
+matlo
+matlock
+mato
+matoke
+matopo
+matozinhos
+matrass
+matriclinous
+matrilocal
+matroclinous
+matronage
+matsu
+matsuyama
+mattamore
+matterhorn
+matthias
+mattins
+mattoid
+mattrass
+matzoon
+maubeuge
+mauby
+maui
+maulana
+maulmain
+maulstick
+maumet
+mauna
+maund
+maunder
+maundy
+maungy
+maupassant
+maupertuis
+mauretania
+mauriac
+maurois
+maury
+maurya
+mawger
+mawkin
+mawsie
+maximin
+maximus
+maxint
+maxisingle
+maxixe
+mayday
+mayence
+mayon
+mazard
+mazarin
+mazuma
+mazzini
+mealworm
+meany
+meatus
+mecamylamine
+mechanotherapy
+mechelen
+meck
+meconium
+medan
+medawar
+mediastinum
+medway
+mee
+meed
+meerkat
+meerut
+mega
+megacephaly
+megadeath
+megaflop
+megaflops
+megalocardia
+megalocephaly
+megalosaur
+megapode
+megara
+megaron
+megathere
+megger
+meghalaya
+megiddo
+megilp
+mehemet
+meilhac
+meiny
+meir
+meitner
+mekka
+melanchthon
+melanous
+melaphyre
+melba
+melchior
+meliaceous
+melilla
+melilot
+melinite
+melisma
+melodeon
+meloid
+melos
+meltage
+mem
+memel
+memling
+memoire
+memorex
+memphremagog
+memsahib
+menadione
+menado
+menai
+menam
+menander
+menaquinone
+mencius
+menderes
+mendips
+menes
+mengistu
+meningocele
+menispermaceous
+meno
+menology
+menomini
+menon
+menotti
+mensa
+mentalism
+menuhin
+mepacrine
+meperidine
+meprobamate
+merano
+merbromin
+merca
+mercaptan
+mercaptide
+mercaptopurine
+merchet
+mercia
+mercians
+merengue
+mergui
+meristem
+meristic
+merkin
+merlon
+meroplankton
+merozoite
+merrymake
+merse
+mersin
+merthyr
+mesarch
+mesencephalon
+mesenchyme
+mesenteritis
+mesentery
+meshach
+meshuga
+mesitylene
+mesnalty
+mesobenthos
+mesocephalic
+mesocratic
+mesogastrium
+mesoglea
+mesognathous
+mesolithic
+mesolonghi
+mesomeric
+mesophyll
+mesophyte
+mesothelioma
+mesothelium
+messalina
+messene
+messenia
+messiaen
+messina
+messmate
+messmates
+mestee
+mester
+mestranol
+metacentres
+metacharacter
+metacharacters
+metachromatism
+metacinnabarite
+metafemale
+metagnathous
+metalline
+metallocene
+metallophone
+metamale
+metamer
+metanotion
+metanotions
+metaperiodate
+metaphosphoric
+metaphrase
+metaphrast
+metapolitics
+metaproduction
+metaproductions
+metasymbol
+metasymbols
+metasyntax
+metasyntaxes
+metatheory
+metatherian
+metathorax
+metaxylem
+metchnikoff
+metempirical
+metempirics
+metestrus
+methacrylic
+methaemoglobin
+methenamine
+metho
+methodius
+methotrexate
+methoxide
+meths
+methylcyclohexane
+methyldopa
+methylphthalate
+methylthionine
+metic
+metoestrus
+metonic
+metopic
+metricate
+metrify
+metritis
+metronidazole
+metronymic
+metrorrhagia
+metz
+meu
+meung
+meuse
+mezcal
+mezcaline
+mezereon
+mezereum
+mho
+miaou
+miaul
+micawber
+michelozzo
+mick
+mickery
+mickiewicz
+mickle
+microbalance
+microbalances
+microbarographs
+microbodies
+microbody
+microbrailler
+microchip
+microchips
+microconcrete
+microcrack
+microcracked
+microcracking
+microcracks
+microdetector
+microdont
+microdot
+microfabric
+microgel
+micrographs
+microkink
+microkinking
+micromixing
+micropalaeontology
+microphyte
+micropyrometer
+microsporophyll
+microstomatous
+microswitch
+microswitches
+microsystem
+microsystems
+microtherm
+microtomy
+microwatt
+microwatts
+microwriter
+microwriters
+micrurgy
+middlebreaker
+middlemost
+mideast
+midheaven
+midian
+midinette
+midiron
+midlothian
+mieres
+miffy
+mihrab
+milage
+milazzo
+mileometer
+miletus
+milkfish
+milkhouse
+milkwort
+millais
+millefleurs
+millepede
+millepore
+milli
+milligan
+millrun
+millwheel
+millwheels
+millwork
+milne
+milo
+milometer
+milometers
+milreis
+miltiades
+mimas
+mimetite
+mimir
+mimosaceous
+minacious
+minas
+minch
+mindoro
+mindszenty
+minelayer
+mineralocorticoid
+mineworker
+mineworkers
+minge
+mingus
+minho
+minibike
+minicab
+minicabs
+minimus
+minipill
+ministerialist
+ministerium
+minitab
+minivet
+minna
+minnesinger
+mintoff
+miombo
+mirabeau
+miracidium
+mirador
+miraflores
+mirepoix
+mirk
+mirza
+misallocate
+misallocated
+misallocates
+misallocating
+misallocation
+misapplys
+miscarrys
+misdeclared
+misdefined
+mise
+miseno
+misericord
+miskolc
+mislaid
+misplead
+misposition
+mispositioned
+mispositioning
+mispositions
+missal
+missals
+missel
+missis
+mississauga
+mississipi
+missolonghi
+misspelt
+missus
+mistal
+mistassini
+misti
+mistigris
+mistle
+mistral
+mistrals
+mither
+mithgarthr
+mithridate
+mithridates
+mithridatism
+miticide
+mitis
+mitrailleuse
+mitrewort
+mixolydian
+mizoram
+mizzen
+moa
+moab
+mobutu
+modena
+moderne
+modge
+modigliani
+modillion
+mofette
+mog
+mogador
+mogen
+moho
+mohole
+mohs
+mohur
+moidore
+moirai
+moke
+mokha
+mokpo
+molina
+molise
+mollah
+mollescent
+mollusc
+molluscoid
+molluscs
+mollweide
+molopo
+moltke
+molybdenous
+mombasa
+momism
+monacid
+monadelphous
+monadnock
+monaghan
+monal
+monanthous
+monas
+monaxial
+monazite
+monck
+monecious
+moneme
+monetarist
+moneychanger
+mong
+moniliform
+monkeypot
+monkfish
+monkshood
+monnet
+monoatomic
+monobasic
+monocarp
+monocarpellary
+monocarpic
+monocausal
+monochasium
+monochloride
+monochloroethanol
+monochord
+monoclinous
+monodispersity
+monody
+monohull
+monohydrate
+monohydric
+monohydroxy
+monoicous
+monolatry
+monoliths
+monomark
+monomerous
+mononucleosis
+monopetalous
+monophagous
+monophobia
+monophyllous
+monoplegia
+monopode
+monopodium
+monopteros
+monosemy
+monosepalous
+monosized
+monosodium
+monosome
+monospermous
+monostich
+monostichous
+monostome
+monostrophe
+monostylous
+monothetic
+monotower
+monotropism
+mons
+monsignor
+montagnard
+montagu
+montagues
+montale
+montane
+montauban
+montbretia
+montcalm
+montefiore
+montego
+monteith
+montenegro
+montero
+monterrey
+montesquieu
+montessori
+montfort
+montgolfier
+montherlant
+montmorillonite
+montparnasse
+montpellier
+montreuil
+montreux
+montrose
+monza
+monzonite
+moog
+moolvie
+moonfish
+moonflower
+moonraker
+moonshot
+moonwort
+moorfowl
+moorhen
+moorwort
+mopboard
+mopoke
+moquette
+mor
+mora
+moraceous
+morar
+morava
+morbific
+morbihan
+morbilli
+morcha
+mordecai
+mordred
+morea
+moreau
+morecambe
+moreen
+moreish
+morelia
+morello
+morelos
+morepork
+moresco
+morish
+mornay
+moroni
+morphallaxis
+morphogenesis
+morphophoneme
+morphosis
+morphotype
+morphotypes
+morphy
+morro
+mors
+morula
+morwong
+mos
+mosasaur
+moschatel
+moseley
+moshav
+moshesh
+moskva
+mosley
+mosotho
+mossbunker
+mossie
+mosso
+mosstrooper
+motherfucker
+motherwell
+motherwort
+mothy
+motmot
+motocross
+motorable
+motorbicycle
+motorbus
+motorcoach
+motown
+motte
+motu
+mouflon
+moujik
+mouldboard
+mouldy
+moulmein
+mousebird
+mousetail
+mousseline
+mouthbrooder
+mouthwash
+mouthwatering
+movietone
+moviola
+mowburnt
+moxa
+mucin
+muckamuck
+muckle
+mucksweat
+muckworm
+mucoid
+mucopolysaccharide
+mucoprotein
+mucopurulent
+mucro
+mucronate
+mudcat
+mudfish
+mudir
+mudlark
+mudpack
+mudra
+mudskipper
+mudskippers
+muenster
+muesli
+mufulira
+mugabe
+muggins
+mugwort
+muhammadan
+mujik
+muldoon
+muleta
+muleteer
+mulga
+mulhouse
+mulki
+mulley
+mulliken
+mullock
+mulloway
+multan
+multangular
+multeity
+multicide
+multidrop
+multifid
+multifile
+multiflora
+multifoil
+multifoliate
+multigravida
+multihop
+multihull
+multihulls
+multikey
+multikeys
+multilateralist
+multilateralists
+multimembered
+multinuclear
+multipacket
+multipara
+multiped
+multiplane
+multiplepoinding
+multipunch
+multipunched
+multireel
+multirole
+multiscreen
+multispectral
+multistorey
+multisubject
+multivariable
+multivibrator
+multivocal
+multiway
+multiword
+multure
+mumbo
+mumchance
+munga
+mungo
+muniment
+muniments
+munnion
+munro
+munsell
+munster
+munt
+muntin
+muntjac
+muntz
+murage
+murasaki
+murat
+murcia
+mure
+murex
+muricate
+murine
+murman
+murra
+murrelet
+murrhine
+murrumbidgee
+murther
+musaceous
+muscadel
+muscae
+muscarine
+muscid
+muscleman
+musclemen
+muscovado
+museology
+musil
+musjid
+muskeg
+muso
+musquash
+musset
+mustafa
+mustee
+musteline
+musth
+mutch
+mutchkin
+mutism
+mutsuhito
+muttonhead
+muttra
+mutule
+muzorewa
+muzz
+myalgia
+myalism
+myall
+myasthenia
+mycelium
+mycetoma
+mycetozoan
+mycin
+mycostatin
+mydriasis
+mydriatic
+myelencephalon
+myelin
+myelitis
+myeloma
+myiasis
+mylonite
+myna
+myocardiograph
+myogenic
+myograph
+myology
+myoma
+myope
+myrmecology
+myrmecophagous
+myrmecophile
+myrobalan
+myrtaceous
+mysia
+mystagogue
+mythopoeia
+mytilene
+myxoedema
+myxoma
+myxomatosis
+myxomycete
+myxovirus
+mzee
+mzungu
+nabis
+nabla
+nablas
+nablus
+nabob
+naboth
+nacre
+nae
+naevus
+nagor
+naha
+nailbrush
+nailfile
+nailhead
+nainsook
+naira
+nairn
+naissant
+naker
+nakhichevan
+nakuru
+nalchik
+nalgo
+namangan
+namas
+namelist
+namelists
+namen
+nametape
+namhoi
+namur
+nanak
+nanchang
+nanda
+nanga
+nankeen
+nanning
+nanometric
+nanoplankton
+nanterre
+nantes
+nantung
+naphtali
+naphthyl
+napiform
+nappa
+nara
+narbada
+narceine
+narcoanalysis
+narcosynthesis
+narcotism
+nardoo
+nares
+narial
+nark
+narmada
+narthex
+narva
+narvik
+naseberry
+naseby
+nashe
+nasho
+nasion
+nasofrontal
+nasopharynx
+nasser
+nastase
+natheless
+natrium
+natrolite
+natron
+natsopa
+natter
+natterjack
+naturism
+naturopathy
+nauch
+naucratis
+naumachia
+nauplius
+naur
+nautch
+nautiloid
+navar
+navarin
+navarino
+navarre
+navew
+navicert
+navratilova
+navvy
+naxalite
+naxos
+naze
+ndola
+neagh
+neap
+nearside
+neb
+nebo
+nebuchadnezzar
+neckar
+neckband
+neckcloth
+neckpiece
+neckwear
+necrobiosis
+necrolatry
+necromania
+necrophobia
+necrose
+necrotomy
+neddy
+needlecord
+needlecraft
+needlefish
+needleful
+neep
+nefertiti
+negev
+negresses
+negrillo
+negritude
+negropont
+negros
+neisse
+nek
+nekton
+neman
+nemathelminth
+nemea
+nemertean
+nemery
+nene
+neoarsphenamine
+neocolonialism
+neoconservative
+neoimpressionism
+neoplasty
+neoscholasticism
+neper
+nephogram
+nephograph
+nephology
+nephralgia
+nephridium
+nephrite
+nephritic
+nephritis
+nephron
+nephrosis
+nephrotomy
+nepos
+neral
+nereus
+neritic
+nernst
+neroli
+neruda
+nerva
+nerval
+nervate
+nervine
+nervure
+nesh
+nesselrode
+nessus
+nestorius
+netaji
+netball
+neto
+netsuke
+nett
+neume
+neurasthenia
+neurectomy
+neurilemma
+neuro
+neuroblast
+neurocoele
+neurogram
+neurohypophysis
+neurolemma
+neuroma
+neuropath
+neuropsychiatry
+neuropteran
+neuropterous
+neurotomy
+neurotransmitter
+neurotransmitters
+neurovascular
+neusatz
+neuss
+neustria
+neutretto
+newshawk
+newspeak
+ney
+nez
+niblick
+nicknack
+nickpoint
+nicotinism
+nictheroy
+nictitate
+nictitating
+nidaros
+niddering
+nide
+nidicolous
+nidify
+nidus
+niebuhr
+niello
+niemen
+nieve
+niff
+nightlife
+nightrider
+nightspot
+nightwear
+nigrescent
+nigrify
+nigritude
+nihon
+niigata
+nilgai
+nilgiri
+nim
+nimblewit
+nimonic
+ningsia
+ninus
+niobic
+niobous
+niort
+nipa
+nipigon
+nipplewort
+nippur
+nishinomiya
+nisus
+niton
+nitramine
+nitrobacteria
+nitrochloroform
+nitrohydrochloric
+nitrometer
+nitromethane
+nitroso
+nitrosyl
+nival
+nivation
+niven
+niveous
+nivernais
+nixie
+nizhni
+njord
+nkomo
+nkrumah
+nobbut
+nobiliary
+noctilucent
+noctuid
+noctule
+noesis
+nofretete
+noh
+noil
+noisette
+nolde
+nolle
+nomarch
+nomarchy
+nombles
+nombril
+nome
+nomen
+nomism
+nomocracy
+nonactive
+nonaggression
+nonaligned
+nonanalytic
+nonanoic
+nonappearance
+nonblank
+nonblanks
+noncausal
+noncomputable
+noncontributory
+noncritical
+nondirected
+nondispersive
+noneffective
+nonego
+nonet
+nonevent
+nonexecutable
+nong
+nonharmonic
+nonhierarchic
+nonhierarchical
+nonhuman
+nonidentical
+noninteger
+noninvertible
+nonnumeric
+nono
+nonowner
+nonowners
+nonparametrical
+nonparous
+nonparty
+nonproliferation
+nonrecursive
+nonrecursively
+nonredundant
+nonrelevance
+nonrelevant
+nonsequenced
+nonsmoker
+nonsmokers
+nonstarter
+nonstative
+nonstick
+nonstriated
+nonsuch
+nonsuit
+nonunionism
+nonvocal
+nonvoter
+nonvoting
+noordbrabant
+nopal
+nord
+nordau
+norepinephrine
+norge
+noria
+noricum
+norite
+nork
+norodom
+northmost
+noseband
+nosography
+nostology
+notelet
+noticeboard
+noticeboards
+notifiable
+notitia
+notochord
+notum
+noumenon
+novalis
+novara
+novation
+novaya
+novelese
+novello
+novercal
+nowel
+nowhence
+nowt
+nox
+noyade
+noyau
+noyon
+nubecula
+nubians
+nucha
+nuddy
+nudicaul
+nudum
+nuevo
+nuggar
+nuggety
+nuissance
+nuke
+nukus
+nullah
+nullarbor
+nullifidian
+nullipara
+numantia
+numbat
+numberplate
+numbfish
+numbles
+numdah
+numen
+numerary
+numidia
+nummary
+nummulite
+numnah
+nunatak
+nunc
+nuncio
+nuncle
+nunhood
+nunny
+nureyev
+nuri
+nuristan
+nurmi
+nusa
+nutant
+nutbrown
+nutcase
+nutgall
+nuthouse
+nutlet
+nutter
+nutwood
+nyala
+nyanza
+nyasa
+nyctaginaceous
+nyctalopia
+nyctinasty
+nyctitropism
+nyctophobia
+nye
+nyeman
+nyerere
+nylghau
+nympha
+nymphaeaceous
+nympho
+nystatin
+nyx
+oakum
+oarfish
+oarlock
+oast
+oates
+oba
+oban
+obasanjo
+obconic
+obedientiary
+oblanceolate
+obligato
+obmutescence
+obolus
+obote
+obreption
+obscurum
+obsecrate
+obsequent
+obstipation
+obvolute
+oca
+occasionalism
+occular
+occultate
+oceanid
+oceanus
+ochlophobia
+ochone
+ochrea
+ockeghem
+ocker
+ocode
+octachord
+octad
+octahedrite
+octamerous
+octanedioic
+octangle
+octangular
+octarchy
+octaroon
+octavalent
+octavo
+octocentenary
+octonary
+octu
+octuple
+octylphenylether
+ocularist
+oddfellow
+odense
+odoacer
+odontalgia
+odontoblast
+odontograph
+odontoid
+odontophore
+odovacar
+odra
+odyl
+oecology
+oenone
+oestrin
+oestrogen
+oestrone
+oestrous
+oestrus
+ofay
+offa
+offaly
+offcut
+offcuts
+officinal
+offline
+ogaden
+ogasawara
+ogbomosho
+ogdoad
+ogee
+ogun
+oho
+oilbird
+oilcup
+oilfield
+oilfired
+oise
+oita
+oka
+okavango
+oke
+okta
+oldwife
+oleaceous
+olecranon
+olefine
+olefinic
+oleic
+olein
+oleograph
+oleoresin
+oleum
+olibanum
+olid
+oligopsony
+oligotrophic
+oliguria
+olio
+oliphant
+olivaceous
+olivary
+olivenite
+olivier
+olla
+olm
+ology
+olomouc
+oloroso
+olszyn
+omadhaun
+omagh
+omar
+omasum
+omayyad
+ombre
+omdurman
+ommatidium
+ommatophore
+omnicompetent
+omnific
+omophagia
+omphale
+omphalos
+omuta
+onager
+onagraceous
+onassis
+ondes
+ondo
+ondograph
+ondometer
+onega
+onitsha
+onlook
+onomasiology
+onychophoran
+onymous
+oof
+oogamy
+oogenesis
+oogonium
+ooh
+oolite
+oology
+oolong
+oomiak
+oompah
+oont
+oophorectomy
+oophoritis
+oophyte
+oose
+oosperm
+oosphere
+oospore
+oostende
+ootheca
+ootid
+opah
+opalesce
+ope
+opencast
+operose
+ophicleide
+ophir
+ophthalmia
+ophthalmitis
+opisometer
+opisthobranch
+opisthognathous
+opiumism
+oppidan
+oppilate
+oppugnant
+opsimath
+optacon
+optacons
+optoelectronic
+optometer
+oracy
+oradea
+oran
+orc
+orcein
+orchestrina
+orchidaceous
+orchil
+orchitis
+orcinol
+orczy
+ordinator
+ordinators
+ordonnance
+ordzhonikidze
+oread
+orectic
+orel
+orense
+orfe
+orfray
+organogenesis
+organography
+organoleptic
+organology
+organon
+organotherapy
+organum
+organza
+organzine
+orgeat
+oribi
+oriel
+oriente
+origen
+orinasal
+orissa
+orizaba
+orjonikidze
+orkneys
+orle
+orlon
+orlop
+ormer
+ormolu
+ormuz
+orne
+ornis
+ornithischian
+ornithomancy
+ornithopod
+ornithopter
+ornithoscopy
+ornithosis
+orobanchaceous
+oroide
+orometer
+orontes
+orozco
+orpharion
+orphrey
+orpiment
+orpine
+orrery
+orris
+orsini
+ortegal
+orthohydrogen
+orthophosphoric
+orthophosphorous
+orthopter
+orthopterous
+orthoptic
+orthoptics
+orthostichy
+orthotone
+ortles
+oruro
+oryol
+oscitancy
+osculant
+oscular
+osman
+osmious
+ossa
+ossein
+ossetia
+ossie
+ossietzky
+ossiferous
+osso
+osteal
+ostend
+ostensory
+osteoclasis
+osteogenesis
+osteomalacia
+osteomyelitis
+osteotome
+osteotomy
+ostia
+ostinato
+ostiole
+ostium
+ostler
+ostmark
+ostosis
+ostracoderm
+ostracon
+ostrava
+ostwald
+otalgia
+othergates
+othman
+otho
+otic
+otitis
+otocyst
+otolaryngology
+otology
+otoscope
+otranto
+ottar
+ottava
+otterburn
+otway
+ouachita
+ouananiche
+oubangui
+oudh
+ouessant
+oujda
+oulu
+ouse
+ousel
+outasight
+outdate
+outjockey
+outlist
+outman
+outrunner
+outrush
+outswing
+outwash
+outwith
+ovenproof
+ovenproofed
+ovenproofing
+ovenproofs
+ovenware
+overachieve
+overachieved
+overachiever
+overachieves
+overachieving
+overarch
+overblouse
+overboot
+overcheck
+overcloud
+overcompetence
+overconsolidate
+overconsolidated
+overconsolidates
+overconsolidating
+overconsolidation
+overcrop
+overdetermine
+overdetermines
+overdetermining
+overdye
+overfold
+overground
+overhype
+overhyped
+overhypes
+overhyping
+overleaf
+overlive
+overmantel
+overmatter
+overnice
+overpitch
+overrunning
+overscale
+overscore
+overset
+oversew
+overside
+oversleeve
+overspent
+overstaff
+overstaffed
+overstaffing
+overstaffs
+overstepped
+overstress
+overstressed
+overstruck
+overtask
+overtype
+overtyping
+oviedo
+oviferous
+ovisac
+owelty
+owerri
+owt
+oxenstierna
+oxhide
+oxidimetry
+oxime
+oxon
+oxonium
+oxpecker
+oxter
+oxtongue
+oxus
+oxyacetylene
+oxyacid
+oxycephaly
+oxychloride
+oxyhaemoglobin
+oxysalt
+oxysulphide
+oxytetracycline
+oxytocic
+oxytocin
+oxytone
+oyer
+oyez
+oyo
+oystercatcher
+ozalid
+ozonolysis
+ozs
+pabulum
+paca
+paceway
+pacha
+pachalic
+pachuca
+pachuco
+padang
+padauk
+paddlefish
+pademelon
+paderborn
+padishah
+padma
+padouk
+padova
+padsaw
+padua
+paduasoy
+paederast
+paediatrician
+paediatrics
+paedogenesis
+paedology
+paedomorphosis
+paedophilia
+paeony
+pageful
+pagefuls
+pagurian
+pah
+pahang
+pahsien
+paigle
+paillasse
+paillette
+painkiller
+paintbox
+paisa
+paisano
+pakeha
+paki
+palaeanthropic
+palaeethnology
+palaeoanthropology
+palaeobotany
+palaeoclimatology
+palaeoecological
+palaeoecology
+palaeoethnobotany
+palaeogene
+palaeography
+palaeolith
+palaeolithic
+palaeomagnetism
+palaeontography
+palaeozoology
+palais
+palawan
+palea
+palembang
+palencia
+palestra
+palestrina
+paletot
+paley
+palikar
+palimpsest
+palindromicity
+palk
+palladic
+palladio
+palladous
+pallete
+palma
+palmaceous
+palmira
+palolo
+palooka
+palos
+palour
+palpebrate
+palsgrave
+palstave
+pamirs
+pampero
+pamphrey
+pamphylia
+pamplona
+panada
+panatella
+panatellas
+panay
+panchax
+panchayat
+panchen
+pancosmism
+pancreatin
+pandanaceous
+pandore
+pandour
+pandowdy
+pandurate
+pandy
+pandybat
+panellist
+panellists
+panettone
+panga
+panicmonger
+paniculate
+panjim
+pankhurst
+panmixia
+panmunjom
+pannage
+panne
+pannikin
+pannonia
+panocha
+panoptic
+pansophy
+pantechnicon
+pantelleria
+pantihose
+panto
+pantoum
+paoting
+paotow
+papadopoulos
+papain
+papandreou
+papaveraceous
+papaverine
+papaya
+papeete
+paperbark
+paperclip
+paperclips
+paperknife
+paperknives
+paperless
+paperthrow
+papeterie
+paphlagonia
+paphos
+papier
+papilionaceous
+pappus
+papule
+papyraceous
+papyrology
+parabasis
+parablast
+parabrake
+paracasein
+paracetamol
+parachronism
+paraclete
+paradrop
+paraesthesia
+paraformaldehyde
+paragoge
+parahydrogen
+paralanguage
+paraldehyde
+paralipomena
+paramaribo
+paramatta
+paramo
+paramorph
+paramorphine
+paramorphism
+parang
+parapraxis
+parashah
+parasitology
+parastichy
+parasyntheton
+parcae
+parcheesi
+parclose
+pardalote
+pardubice
+pareira
+parergon
+paresis
+paresthesia
+pareu
+pareve
+parfleche
+parget
+parhelic
+parhelion
+paripinnate
+parishad
+parison
+parisyllabic
+parkin
+parky
+parlando
+parleyvoo
+parliamentarianism
+parm
+parmenides
+parmentier
+parmigianino
+parnell
+paroicous
+parotic
+parotoid
+parousia
+parramatta
+parrel
+parrotfish
+parthia
+particlar
+partita
+partlet
+parturifacient
+parulis
+parzival
+pasargadae
+pasay
+pase
+pash
+pashalik
+pashka
+pashm
+pasionaria
+pasolini
+pasqueflower
+pasquinade
+passacaglia
+passade
+passant
+passepied
+passifloraceous
+passionflower
+pastis
+pasto
+patagium
+patellate
+pathfind
+pathic
+pathlength
+pathognomy
+patiala
+paticularly
+patin
+patisserie
+patmore
+patna
+paton
+patras
+patrial
+patriclinous
+patrilocal
+patroclus
+patrology
+pau
+paua
+paucal
+pauldron
+pauling
+paumotu
+pausanias
+pav
+pavage
+pavane
+pavis
+pavlodar
+pavlova
+pavonine
+pawky
+pawnees
+paxwax
+paynim
+peag
+peake
+pean
+pearlwort
+pearmain
+peart
+peary
+peasouper
+peau
+peavey
+pechora
+peckinpah
+peckish
+pectase
+pecten
+peculium
+pedalo
+pedate
+pedatifid
+pedi
+pedicular
+pediform
+pedunculate
+peebles
+peen
+peened
+peening
+peens
+peepshow
+peepul
+peetweet
+peewit
+pegmatite
+pegu
+peipus
+peiraeus
+peirce
+pejoration
+pekan
+peke
+pelagius
+pelargonic
+pelargonium
+pelerine
+pelf
+pelion
+pelisse
+pelite
+pella
+pelles
+pelletier
+pellicle
+pelmet
+peloponnese
+peltast
+peltier
+pemba
+pemphigus
+penang
+penchi
+pendente
+penderecki
+pendragon
+peneplain
+peneus
+pengpu
+penillion
+peninsulate
+penki
+pennine
+pennines
+penninite
+pennon
+pennoncel
+pennycress
+pennyweight
+pennywort
+pennyworth
+penrith
+penstemon
+penstock
+penta
+pentachlorophenol
+pentangular
+pentanoic
+pentaprism
+pentastich
+pentatomic
+pentelikon
+pentene
+penthesileia
+pentheus
+pentimento
+pentlandite
+pentose
+pentothal
+pentoxide
+pentyl
+pentylenetetrazol
+penuchle
+penza
+penzance
+pepin
+peplos
+peplum
+pepo
+pepperwort
+pepsinate
+pera
+peracid
+peraea
+perak
+perborate
+perchloric
+perchloride
+percoid
+perdido
+perdu
+pereira
+perfin
+pergamum
+pergolesi
+peri
+perianth
+periapt
+periblem
+periclase
+periclinal
+pericline
+pericope
+periglacial
+perigon
+perigordian
+perinephrium
+perineuritis
+perineurium
+periodate
+perionychium
+periosteum
+periostitis
+peripteral
+perique
+perisarc
+perisperm
+perispomenon
+perissodactyl
+peristalsis
+peristome
+peristyle
+perithecium
+peritoneum
+peritrack
+periwig
+perlis
+perlocution
+permanganate
+permanganic
+pernambuco
+pernickety
+pernik
+pernod
+perogative
+peroxysulphuric
+perpignan
+perrault
+perrin
+perron
+persalt
+perse
+persephone
+persepolis
+persiennes
+personalty
+perspectivism
+perspex
+persulphate
+persulphuric
+pertussis
+perugia
+perugino
+peruke
+perutz
+peruzzi
+perv
+pes
+pesade
+pesaro
+pescadores
+pescara
+peseta
+pesewa
+peshawar
+peshitta
+pestalozzi
+pesthole
+pesthouse
+petaliferous
+petalody
+petechia
+pethidine
+petrarch
+petrodollar
+petrograd
+petrolic
+petsamo
+pettifogging
+pettitoes
+petuntse
+pevsner
+pewit
+phagedaena
+phagomania
+phagophobia
+phalangeal
+phanerocrystalline
+phanerophyte
+phanerozoic
+pharmacophore
+pharmacophores
+pharmacophoric
+pharsalus
+pharyngology
+pharyngoscope
+pharyngotomy
+phatic
+pheidippides
+phelloderm
+phellogen
+phenacaine
+phenacetin
+phenacite
+phenanthrene
+phenazine
+phenetic
+phenformin
+phenix
+phenolphthalein
+phenomenom
+phenylamine
+phenylketonuria
+phew
+phidias
+phidippides
+philae
+philby
+philemon
+philhellene
+philibeg
+philippi
+philippics
+philippopolis
+philips
+philistines
+phillips
+phillumenist
+philomel
+phimosis
+phiz
+phlebosclerosis
+phlogopite
+phlyctena
+phnom
+phocaea
+phocine
+phocis
+phocomelia
+phoebus
+phoenicians
+phomvihane
+phonendoscope
+phonetist
+phonometer
+phonoscope
+phonotactics
+phonotype
+phonotypes
+phonotypy
+phooey
+phosgenite
+phosophoric
+phosphatase
+phosphaturia
+phosphino
+phosphonium
+phosphoprotein
+phosphorate
+phosphoroscope
+phossy
+phot
+photoactinic
+photoactive
+photochronograph
+photoconduction
+photoelastic
+photoelasticity
+photoelectrotype
+photofit
+photonasty
+photoneutron
+photophysical
+photophysics
+photopolymer
+photoselected
+photoselection
+phototherapy
+photothermic
+phototonus
+phototopography
+phototransistor
+phototype
+phototypeset
+photozincography
+phrasal
+phrenitis
+phrixus
+phrygia
+phthalein
+phthalic
+phthalocyanine
+phthiriasis
+phthisic
+phthisis
+phut
+phyfe
+phyllite
+phylloquinone
+phyllotaxis
+physicochemical
+physiocrat
+physoclistous
+physostomous
+phytogenesis
+phytohormone
+phytolith
+phytoliths
+phytotoxin
+phytotron
+piacenza
+piacular
+piaf
+piaffe
+piaget
+piave
+piaza
+picardy
+piccanin
+piccaninny
+piccard
+pichiciego
+pickerelweed
+pickin
+pico
+picong
+picot
+picotee
+picrate
+picric
+picrite
+picrotoxin
+pictogram
+pictor
+picts
+picul
+piddock
+piedmontite
+pieman
+piemonte
+pieria
+pieridine
+piero
+piezo
+piezochemistry
+pigface
+pigfaced
+pigfish
+piggin
+piggledy
+piggott
+pigmeat
+pignut
+pigswill
+pigweed
+pika
+pikelet
+pikeperch
+pilatus
+pilau
+pilch
+pilcomayo
+pileous
+pili
+piliferous
+piliform
+pilliwinks
+pillwort
+pilocarpine
+pilose
+pimiento
+pimpernel
+pinaceous
+pinchpenny
+pinckney
+pindar
+pindus
+pinero
+pinfeather
+pinfish
+pinguid
+pinite
+pinnatifid
+pinnatipartite
+pinnatiped
+pinnatisect
+pinny
+pinochet
+pinole
+pintadera
+pinturicchio
+pinwork
+pinworm
+piny
+piolet
+pipa
+pipeclay
+pipefitting
+piperaceous
+pipewort
+pipistrelle
+pipsqueak
+piragua
+pirandello
+piranesi
+pirhouette
+pirn
+pirog
+pirozhki
+piscary
+piscatorial
+pisgah
+pish
+pishogue
+pishpek
+pisistratus
+pissarro
+pistareen
+piste
+pistoia
+pitapat
+pitchometer
+pitchometers
+pithos
+pitot
+pitsaw
+pituri
+pityriasis
+piura
+pix
+pize
+pizzle
+placet
+placoderm
+placoid
+plafond
+plagioclimax
+plagiotropism
+plainchant
+plainsong
+planchette
+planform
+planimetry
+plano
+planogamete
+planometer
+plantagenet
+plantigrade
+plantocracy
+plash
+plashy
+plasmodesma
+plasmosome
+plassey
+plastometer
+plata
+plataea
+platan
+platelayer
+platelayers
+platemark
+platemarks
+plath
+platiniferous
+platiniridium
+platinocyanic
+platinocyanide
+platinoid
+platinotype
+platy
+platyhelminth
+platyrrhine
+plauen
+playgroup
+playgroups
+playlet
+playschool
+pleach
+pleasance
+pleb
+plebby
+plectognath
+pled
+pleiad
+pleiocene
+pleiotropism
+pleochroism
+pleomorphism
+pleonasm
+pleopod
+plesiosaur
+plessor
+plethysmograph
+pleurodynia
+pleuron
+pleuropneumonia
+pleurotomy
+pleuston
+pleven
+plexor
+plica
+plicate
+ploat
+plodge
+plonk
+plonko
+plotinus
+plottable
+ploughboys
+ploughmen
+ploughs
+ploughstaff
+plumate
+plumbaginaceous
+plumbicon
+plumbum
+pluriliteral
+pluripresence
+plutus
+pluviometer
+pluvious
+pma
+pneuma
+pneumobacillus
+pneumoconiosis
+pneumodynamics
+pneumogastric
+pneumograph
+pneumonectomy
+pneumonitis
+pneumothorax
+pnom
+poaceous
+pochard
+pococurante
+pocus
+poddy
+podesta
+podgorica
+podophyllin
+podsol
+poenology
+pogey
+pogge
+pogy
+pohai
+pohutukawa
+poind
+pointsman
+poitiers
+poitou
+pokeberry
+pokelogan
+pokeweed
+pokie
+pola
+polacre
+poleaxe
+polemarch
+polemoniaceous
+polenta
+poleyn
+pollaiuolo
+pollan
+pollinosis
+polliwog
+polony
+poltava
+poly
+polyadelphous
+polyamide
+polyatomic
+polybasic
+polybius
+polyconic
+polycrates
+polydemic
+polydeuces
+polydipsia
+polydisperse
+polydispersity
+polyembryony
+polygalaceous
+polygnotus
+polygonaceous
+polyhydric
+polyisoprene
+polymerous
+polynices
+polyoxyethene
+polyphosphoric
+polyphyodont
+polypod
+polyprotodont
+polypus
+polysulphide
+polysyllogism
+polythetic
+polythionic
+polyvinylidene
+polyxena
+pom
+pombal
+pombe
+pomfret
+pomiculture
+pommern
+pommy
+pomorze
+pompidou
+pondicherry
+pondokkie
+pondweed
+pone
+pongee
+pongid
+poniard
+ponta
+pontchartrain
+pontefract
+pontevedra
+pontianak
+pontifex
+pontil
+pontormo
+pontus
+pontypool
+pontypridd
+pooftah
+poon
+poona
+poonce
+poove
+popedom
+popeyed
+poppadom
+popsicle
+popsy
+porbeagle
+pori
+porirua
+porism
+porkpie
+pornocracy
+poromeric
+porosimeter
+porphyrogenite
+porsena
+portadown
+portfire
+portlaoise
+portobello
+portulacaceous
+posho
+posology
+poss
+possie
+postcava
+postcode
+postcodes
+postexilian
+posticous
+postie
+postil
+postimpressionism
+postliminy
+postmeridian
+postrider
+potamic
+potamology
+potatory
+potch
+potentiostat
+pothecary
+potherb
+potiche
+potiphar
+potman
+potoroo
+potyomkin
+pouncet
+powan
+powys
+poyang
+pozsony
+pozzuolana
+pozzuoli
+pozzy
+pracharak
+pradesh
+praemunire
+praenomen
+praetor
+praetorius
+pragmat
+pragmats
+praha
+prajna
+pralltriller
+prang
+prat
+prato
+prau
+praxiteles
+preadamite
+precall
+precatory
+precedential
+preceed
+precis
+precompile
+precompiled
+precompiles
+precompiling
+preconnected
+preconnection
+preconsolidate
+preconsolidated
+preconsolidates
+preconsolidating
+preconsolidation
+predella
+predeterminate
+predial
+predicant
+predikant
+prednisone
+predrilled
+prefill
+prefilled
+prefilling
+prefills
+preglacial
+preincubate
+preincubated
+preincubates
+preincubating
+prelacy
+prelatism
+prelect
+prelexical
+prelims
+premaxilla
+premedication
+premiership
+premultiplied
+premultiply
+premultiplying
+premultiplys
+prenomen
+prenominal
+preopened
+preoxidation
+prepositor
+prerelease
+presa
+prescan
+prescriptible
+prescriptivism
+presentationism
+pression
+prestel
+prestonpans
+prestwich
+preterhuman
+pretonic
+pretor
+pretorius
+previse
+priapism
+pribilof
+priestcraft
+prill
+primaeval
+primaquine
+primatives
+primigravida
+primine
+primordium
+primulaceous
+prisage
+proc
+procarp
+proceleusmatic
+prochronism
+proclus
+procopius
+proctoscope
+procuratory
+producable
+proem
+profiterole
+progenitive
+proleg
+prolegomenon
+prolepsis
+promethazine
+promycelium
+propanoic
+propenamide
+propene
+propertius
+propionic
+propjet
+propontis
+propylaeum
+propylite
+proserpina
+prostheses
+prostyle
+protagoras
+protandrous
+protanopia
+proters
+protestantism
+protoactinium
+protochordate
+protogynous
+protomorphic
+protosemitic
+prototherian
+protoxide
+protrusile
+protuberate
+protude
+protudes
+protuding
+protyle
+proudhon
+proustite
+prout
+proventriculus
+provo
+provocate
+provocations
+proxima
+prudentius
+prunelle
+prut
+prynne
+prytaneum
+psammite
+psephite
+pseudaxis
+pseudepigrapha
+pseudocarp
+pseudocode
+pseudomorph
+pseudomutuality
+pseudopodium
+pseudorandom
+pshaw
+psilocybin
+psilomelane
+psittacine
+psittacosis
+psoas
+psoriasis
+psst
+psychasthenia
+psychohistory
+psychomimetic
+psychotechnics
+ptah
+pteridology
+pteridophyte
+pteridosperm
+pteropod
+pterosaur
+pterygoid
+pteryla
+ptisan
+ptochocracy
+ptolemaeus
+ptosis
+ptyalin
+ptyalism
+pudsey
+puebla
+puerilism
+puffbird
+puffbirds
+puget
+puglia
+pugwash
+pula
+pullorum
+pulsatile
+pulsejet
+pulvinate
+punakha
+punce
+punchable
+punchbowl
+punchbowls
+pune
+punjab
+punka
+punnet
+punnets
+punta
+purana
+puri
+purim
+purpurin
+pushkin
+pushrod
+pushrods
+pushto
+putamen
+putto
+putumayo
+puvis
+puy
+pya
+pyaemia
+pydna
+pye
+pyelography
+pylorectomy
+pylos
+pym
+pyogenesis
+pyoid
+pyosis
+pyramus
+pyranometer
+pyrazole
+pyrenees
+pyroconductivity
+pyrogallate
+pyrognostics
+pyrographic
+pyrography
+pyrolysed
+pyrolysing
+pyromagnetic
+pyrone
+pyrophosphoric
+pyrophotometer
+pyrophyllite
+pyrostat
+pyrosulphate
+pyrosulphuric
+pyrrha
+pyrrho
+pyrrolidine
+pyrruvic
+pythias
+qaboos
+qaddafi
+qaddish
+qadi
+qairwan
+qattara
+qeshm
+qibla
+qintar
+qishm
+qoph
+quadragenarian
+quadragesimal
+quadraplegic
+quadrella
+quadriga
+quadrinomial
+quadriplegia
+quadrophonics
+quadrumanous
+quadruplex
+quaere
+quagga
+quaggy
+quaky
+quale
+quango
+quangos
+quaquaversal
+quare
+quarrian
+quarterlight
+quarterlights
+quartersaw
+quashi
+quasicontinuous
+quasiorder
+quasiperiodic
+quasistationary
+quass
+quathlamba
+quatre
+quebracho
+queencake
+queensberry
+quelpart
+quelquechose
+quemoy
+queneau
+quenelle
+quercetin
+quercine
+quesnay
+quetta
+quetzalcoatl
+quiberon
+quidnunc
+quillet
+quillon
+quilmes
+quim
+quinacrine
+quinary
+quinate
+quincentenary
+quindecagon
+quindecaplet
+quindecennial
+quinic
+quinnat
+quinol
+quinone
+quinonoid
+quinquagenarian
+quinquecentenary
+quinquefoliate
+quinquepartite
+quinquereme
+quinsy
+quintan
+quintana
+quintero
+quintilian
+quinze
+quipu
+quire
+quirinus
+quist
+quiverful
+qum
+qumran
+quokka
+quotha
+rabato
+rabaul
+rabbath
+rabbitfish
+rabbitoh
+racecard
+racecards
+racegoer
+racegoers
+raceme
+rachmanism
+rada
+radicel
+radiguet
+radioactivate
+radiocommunication
+radioligand
+radioluminescence
+radiomicrometer
+radiophonic
+radioscope
+radiotelegram
+radiotelemetry
+radioteletype
+radiothermy
+radiotoxic
+radom
+raeburn
+raf
+raffinate
+ragbolt
+ragusa
+ragworm
+ragworms
+ragwort
+rahman
+railcar
+railcars
+railwayman
+rainband
+rainbird
+raincheck
+rainforest
+rainout
+raison
+rajab
+rajahs
+rajasthan
+rajkot
+rajputana
+rajya
+rakata
+rakehell
+raki
+rallentando
+ralline
+rallycross
+ramachandra
+ramakrishna
+ramat
+ramayana
+rambert
+rambutan
+rameau
+ramjet
+ramjets
+rammish
+rampur
+ramsay
+ramsgate
+ramsons
+ramtil
+ramulose
+rancagua
+rance
+rancherie
+ranchero
+ranchi
+randan
+randers
+ranee
+rangefinder
+rani
+ranjit
+ranmoor
+ransome
+ranunculaceous
+rapacki
+rapeseed
+raphe
+raphide
+rapparee
+rara
+raree
+rareripe
+rarotonga
+rasbora
+rase
+rasht
+rask
+raspatory
+rasputin
+rasse
+ratan
+ratatouille
+ratbag
+ratbaggery
+ratbite
+rateen
+ratfink
+ratfish
+ratha
+rathenau
+ratiometer
+ratisbon
+ratite
+ratlam
+rato
+ratsbane
+rattigan
+rattish
+rattlebox
+rattoon
+ravelin
+ravenna
+ravin
+rawalpindi
+rawsthorne
+raylet
+razee
+razoo
+razzia
+razzle
+reade
+readonly
+readwrite
+realgar
+reallot
+reallotment
+reapplied
+reapplies
+reapply
+rearguard
+rearguards
+reassertion
+reassociation
+reast
+rebato
+rebec
+rebell
+rebellow
+rebid
+rebond
+rebonded
+rebonding
+rec
+recalesce
+recaption
+receiptor
+recept
+recipience
+recluster
+reclustering
+recodified
+recodifies
+recodify
+recodifying
+recognizee
+recompilation
+reconsolidate
+reconsolidating
+recrement
+rectillinear
+rectocele
+recuperator
+recurrency
+recursivity
+recurvate
+recurve
+redan
+redback
+redbrick
+redbug
+redcurrant
+redd
+redditch
+reddle
+redeye
+redfin
+rediffusion
+redingote
+redon
+redose
+redowa
+reductionalist
+redware
+reebok
+reedling
+reen
+reflate
+reflated
+reflates
+reflating
+reflet
+regelate
+reger
+reggae
+reggio
+regin
+regiomontanus
+rego
+regrate
+regulable
+reigate
+reims
+reinsertion
+reintroduction
+reinvoke
+reinvoking
+reith
+rejig
+rejuvenesce
+relatum
+relearn
+religionism
+reluct
+remainderman
+remittee
+remix
+remixes
+remixing
+remontant
+remontoir
+remora
+remould
+remoulded
+remoulding
+removalist
+remscheid
+rendzina
+renegado
+reni
+rennes
+renvoi
+reorientate
+reorientated
+reorientates
+reorientating
+repassivation
+repechage
+replevy
+replicable
+replicator
+replicators
+repoint
+repone
+repot
+reprocessor
+reprography
+reptant
+resample
+resampling
+resaturate
+resaturating
+resaturation
+rescissible
+reseat
+reseau
+reselection
+resequence
+resettle
+residentiary
+resiniferous
+resipiscence
+resistencia
+resit
+resnais
+resnatron
+respecifies
+respecify
+resrict
+restiform
+restorationism
+restransmit
+resubmission
+resurrectionism
+rete
+retene
+retension
+retensioned
+retentionist
+retiary
+retinite
+retro
+retroact
+retrochoir
+retrodiction
+retroject
+reuchlin
+reus
+reuter
+reutlingen
+reval
+revanchism
+revelationist
+reverberator
+reversi
+reverso
+revoice
+rewire
+rewiring
+rexine
+reynaud
+reynosa
+rhabdomyoma
+rhachis
+rhaetia
+rhee
+rhein
+rheobase
+rheotaxis
+rheotropism
+rhetic
+rheydt
+rhigolene
+rhinology
+rhinoplasty
+rhizomorph
+rhodic
+rhodinal
+rhodos
+rhotacism
+rhotic
+rhumbatron
+rhynchocephalian
+rhyton
+ria
+ribbentrop
+ribble
+ribbonfish
+ribbonwood
+ribera
+ribwort
+ribworts
+ricardo
+riccio
+ricercare
+richelieu
+richthofen
+ricinoleic
+rickettsial
+rident
+ridgetree
+ridgeway
+ridley
+riefenstahl
+riempie
+rienzi
+rightable
+righthand
+righthanded
+rightish
+righto
+rightwinger
+rightwingers
+rigi
+rigil
+rimester
+rimu
+rinforzando
+ringgit
+ringhals
+ringinglow
+ringster
+ripcord
+ripon
+ripplet
+rissole
+risus
+ritardando
+ritenuto
+ritornello
+rivage
+rizal
+rizzio
+roadholding
+roadroller
+roadrollers
+robben
+robbia
+roborant
+roca
+rocaille
+rockery
+rockweed
+rodomontade
+roentgenopaque
+roeselare
+rogatory
+roget
+rollaway
+rollbar
+rollmop
+rollmops
+rollneck
+rollway
+rone
+roneo
+ronggeng
+roo
+rooinek
+rootle
+ropable
+roquefort
+roquet
+roraima
+rorschach
+rort
+rosace
+rosario
+rosarium
+roscius
+roscoe
+roscommon
+roseberry
+rosehip
+rosewall
+rosh
+rosinante
+roskilde
+rospa
+rossetti
+rossiya
+rostand
+rostock
+roti
+rotorua
+roucou
+rouget
+roulers
+roumelia
+rowntree
+roxas
+rubbra
+rubby
+rubefy
+rubescent
+rubiaceous
+rubinstein
+rubrician
+rubstone
+rudderhead
+rudish
+ruisdael
+rumelia
+runcible
+runcorn
+ruthenia
+ruthful
+rutilated
+ruwenzori
+ruysdael
+ruyter
+ryazan
+rydal
+ryobu
+ryokan
+ryot
+sabadell
+sabah
+sabatier
+sabayon
+sabretache
+sabulous
+saccharic
+saccharoid
+sacco
+sadat
+saddlebill
+sade
+sadhu
+sadi
+sadiron
+sadowa
+saffian
+safid
+sagamore
+saghalien
+sagitta
+saguache
+saguenay
+saguia
+sagunto
+saharanpur
+sahitya
+saida
+saiga
+sainsbury
+saipan
+sakhalin
+saktas
+sakti
+salade
+saladin
+salado
+salamanca
+salambria
+salchow
+salduba
+salep
+salet
+salicaceous
+salicional
+salicylic
+saliferous
+salify
+salique
+sallee
+sallust
+salmanazar
+salonika
+saloop
+salop
+salopette
+salpicon
+salpingectomy
+salpingitis
+salpinx
+salta
+saltant
+saltchuck
+saltchucker
+saltfish
+saltigrade
+saltillo
+salto
+saltpan
+saltus
+salvatorian
+salween
+salyut
+salzgitter
+samarang
+samaria
+sambre
+samekh
+samfoo
+samiel
+samiti
+samizdat
+samnium
+samos
+samothrace
+samsara
+samshu
+samsun
+sanctitude
+sandakan
+sandfly
+sandgrouse
+sandhi
+sandpit
+sandwort
+sandworts
+sango
+sangre
+sangria
+sanies
+sankey
+sankt
+sanmicheli
+santalaceous
+santana
+santander
+saorstat
+sapajou
+sapanwood
+sapele
+saphena
+sapiential
+sapindaceous
+sapir
+sapotaceous
+sappanwood
+sapphira
+sapporo
+sapraemia
+sapropel
+sapwood
+saragossa
+sarawak
+sarcocarp
+sarcous
+sardar
+sardegna
+sarmatia
+sarmentose
+sarnen
+sarnia
+saronic
+saros
+sarpanch
+sarpedon
+sarraceniaceous
+sarraute
+sarre
+sarrusophone
+sarthe
+sarto
+sartor
+sarum
+sarvodaya
+sasebo
+sasin
+sassaby
+sassari
+sassoon
+sastruga
+satai
+satellitium
+satinflower
+satinpod
+satrap
+satrapy
+saturnism
+satyagraha
+satyagrahi
+saurischian
+saury
+saussure
+sav
+sava
+savaii
+savannahs
+savas
+saveloy
+savoie
+savoir
+savona
+sawbill
+sawder
+sawhorse
+sawn
+saxicolous
+saxifragaceous
+saxo
+saxons
+sayan
+sazerac
+scafell
+scaldfish
+scaleboard
+scalenus
+scaliger
+scall
+scaloppine
+scammel
+scandaroon
+scanderbeg
+scandic
+scansorial
+scapa
+scapewheel
+scaphopod
+scarabaeus
+scarcement
+scarificator
+scarlatina
+scarron
+scattergram
+scatterplot
+scatterplots
+scend
+schappe
+scheel
+scheele
+scheelite
+scheldt
+scherzando
+schiaparelli
+schickard
+schilling
+schizogenesis
+schizophyceous
+schizopod
+schizothymia
+schlegel
+schmo
+schmooze
+schnook
+schnorkle
+schnorrer
+schnozzle
+schola
+schongauer
+schoolie
+schorl
+schottische
+schouten
+schrodinger
+schul
+schwa
+schwaben
+schwann
+schwarzwald
+schweinfurt
+schweiz
+schwerin
+schwitters
+schwyz
+sciaenid
+sciamachy
+scienter
+scilly
+scincoid
+sciomachy
+scipio
+scire
+scissel
+scissure
+sciurine
+sciuroid
+sclera
+sclerenchyma
+scleritis
+sclerodermatous
+scleroid
+scleroma
+sclerometer
+sclerophyll
+scleroprotein
+sclerotomy
+sclerous
+scolopendrid
+scop
+scopas
+scorify
+scorpaenoid
+scorper
+scotopia
+scotswomen
+scotus
+scramb
+scran
+scraperboard
+scraperboards
+scrapheap
+scrapheaps
+scrimshank
+scrobiculate
+scroop
+scrophulariaceous
+scrump
+scrumpy
+scry
+scudo
+scullin
+scuncheon
+scunge
+scungy
+scunthorpe
+scut
+scuta
+scutage
+scutate
+scutch
+scutcheon
+scute
+scutellation
+scutellum
+scutiform
+scyphiform
+scyphistoma
+scyphozoan
+scyphus
+scyros
+seaborg
+seacock
+seakale
+seami
+seanad
+seasonality
+seato
+seawan
+seaworthyness
+sebacic
+sebiferous
+secam
+secern
+sech
+sectoral
+secundine
+secundines
+seddon
+seferis
+seg
+seif
+seise
+seismism
+seismometer
+seismoscope
+selah
+selangor
+selectedly
+selenodont
+selenomorphology
+seleucia
+seleucus
+selfheal
+sellotape
+selsyn
+selva
+semanteme
+semarang
+sematology
+semele
+sememe
+semeru
+semibituminous
+semibold
+semicompile
+semination
+seminumerical
+semipalmate
+semivitreous
+semivocal
+sempach
+sena
+senarmontite
+sendai
+sendal
+sendoff
+senegambia
+senghor
+sennacherib
+sennar
+senussi
+sepaloid
+seppuku
+septarium
+septavalent
+septenary
+septennium
+septet
+septicaemia
+septilateral
+septime
+septivalent
+septuagesima
+septuple
+septuplet
+septuplicate
+seq
+sequestrant
+serajevo
+seram
+serang
+sercq
+serdab
+serein
+seremban
+serenata
+sergipe
+seriema
+seringa
+seringapatam
+serjeant
+serotine
+serpigo
+serpulid
+serriform
+serrulate
+serrulation
+sertorius
+servetus
+servia
+servicewoman
+servicewomen
+servient
+sesotho
+sesquialtera
+sesquioxide
+sestos
+setiferous
+setiform
+sett
+settable
+sevan
+sewan
+sewell
+sexangular
+sexcentenary
+sexennial
+sexivalent
+sexpartite
+sextain
+sextan
+sextile
+seyfert
+seyhan
+sfax
+sforza
+sfumato
+sgraffito
+shaba
+shabbat
+shadrach
+shaduf
+shadwell
+shaef
+shaftesbury
+shaftsbury
+shahaptin
+shahjahanpur
+shakhty
+shamash
+shamba
+shameface
+shamo
+shangaan
+shango
+shanny
+shantow
+sharefarmer
+sharefarmers
+shareown
+sharksucker
+sharrow
+shavuot
+sheading
+shearlegs
+shearling
+sheba
+shechina
+sheene
+sheepcote
+sheepdog
+sheepwalk
+sheerlegs
+shellbark
+shelta
+shem
+shema
+shembe
+shenyang
+sherbrooke
+sheria
+sherwani
+shes
+shetlands
+shewbread
+shewn
+shiai
+shicker
+shickered
+shihchiachuang
+shikoku
+shillyshally
+shily
+shinar
+shinkin
+shinty
+shipka
+shiralee
+shirtsleeve
+shithead
+shittah
+shittim
+shiva
+shive
+shizuoka
+shockheaded
+shockstall
+shoeshine
+shoetree
+shofar
+sholapur
+shoogle
+shool
+shopfloor
+shopfloors
+shophar
+shopsoiled
+shopwalker
+shopwork
+shopworker
+shoreless
+shortlist
+shortlisted
+shortlisting
+shortlists
+shortlived
+shoshone
+shote
+shott
+shouse
+showd
+showerproof
+showgirl
+showjumping
+shrewdie
+shrewmouse
+shrieval
+shufty
+shufu
+shuggy
+shushan
+shuteye
+shypoo
+sialkot
+sialoid
+siang
+siangtan
+sibiu
+sicilia
+sickbay
+sickert
+sickie
+sicyon
+siddons
+sidechain
+sidechains
+sideffect
+sideffects
+sideplate
+sideplates
+siderophilin
+siderosis
+siderostat
+sidesman
+sidewheel
+sidewheeler
+sidi
+sidon
+sidra
+siegbahn
+siegler
+sieglinde
+sienkiewicz
+sifaka
+sightscreen
+sigil
+sigismund
+sigla
+siglos
+sigmate
+sigmoidoscope
+signac
+signore
+signorelli
+sigurd
+sikang
+silastic
+sile
+siliciferous
+silicium
+siliculose
+siliqua
+siloam
+silurid
+silverpoint
+silvertail
+simar
+simaroubaceous
+simchath
+simitar
+simla
+simoniac
+simonides
+simplicidentate
+simplon
+simsim
+simula
+simulant
+sinanthropus
+sinarquist
+sinatra
+singultus
+sinhailien
+sinistrodextral
+sinn
+sint
+siple
+siqueiros
+sirdar
+siret
+sisera
+sismondi
+sitar
+sitcom
+sitella
+sitfast
+sithole
+sitology
+sitsang
+situla
+sitwell
+sitz
+sitzkrieg
+sitzmark
+sixain
+sixte
+sjambok
+skagerrak
+skara
+skatepark
+skatole
+skaw
+skean
+skelf
+skelly
+skelmersdale
+sken
+skerrick
+sket
+skewwhiff
+skiamachy
+skibob
+skidlid
+skidpan
+skidproof
+skidway
+skillion
+skilly
+skiplane
+skippet
+skirret
+skite
+skydive
+skylab
+skyscape
+slade
+slaister
+slapshot
+slaughterman
+slaughtermen
+slavs
+sleave
+sleezy
+slezsko
+slickenside
+sligo
+slimmed
+slingback
+slipnoose
+slipperwort
+slipsheet
+slipway
+sloot
+sloughs
+slowcoach
+slowworm
+slubberdegullion
+slype
+smallage
+smallboy
+smallclothes
+smallholding
+smallmouth
+smallsword
+smaltite
+smalto
+smaragd
+smaragdite
+smarm
+smarmy
+smatch
+smew
+smilacaceous
+smit
+smokeho
+smokejack
+smoko
+smoodge
+smriti
+snackette
+sned
+snib
+snicket
+snipefish
+snog
+snorri
+snowberry
+snowbird
+snowblink
+snowdon
+snowdonia
+snowplough
+snuck
+snye
+soakaway
+soapberry
+soapolallie
+soares
+sobeit
+soche
+socinus
+sociobiology
+socman
+socred
+sodamide
+soddy
+soekarno
+soemba
+soembawa
+soenda
+soerabaja
+sofar
+softa
+sogat
+sogdiana
+soh
+soho
+soilage
+soissons
+sokoto
+sokotra
+solan
+solander
+solarimeter
+solarism
+soldo
+solent
+soleure
+solfeggio
+solferino
+soli
+solidary
+solifidian
+solihull
+soliman
+sollicker
+solonchak
+solothurn
+solum
+solvay
+solway
+solyman
+somewise
+somme
+somniloquy
+somnus
+sondage
+songkok
+soniferous
+sonobuoy
+soo
+soochow
+sook
+soong
+sophistocated
+sorata
+sorbefacient
+sorbic
+sorbitol
+soredium
+sorn
+sorocaba
+sororicide
+sorosis
+sorrento
+sosnowiec
+sotto
+soudan
+soult
+soundbox
+soundpost
+soupfin
+sourdine
+southmost
+soutine
+sozzled
+spacewalk
+spadefish
+spadiceous
+spagyric
+spalato
+spalpeen
+spam
+spancel
+sparable
+sparce
+sparerib
+sparid
+sparoid
+sparrowhawk
+sparry
+spatchcock
+spatterdash
+spearwort
+spectrobolometer
+speedo
+speedwriting
+speight
+spelaean
+spelk
+spellican
+speos
+spermatorrhoea
+spermic
+spermine
+spermogonium
+spermophyte
+spermous
+spey
+speyer
+sphenic
+sphenogram
+spheroidicity
+sphingomyelin
+sphragistics
+sphygmic
+sphygmoid
+spiderman
+spif
+spiffing
+spiflicate
+spignel
+spina
+spindlelegs
+spiniferous
+spinose
+spiritus
+spirketting
+spiroid
+spironolactone
+spitchcock
+spithead
+spitsticker
+spiv
+splake
+splanchnic
+splashback
+splashbacks
+splenitis
+splodge
+spock
+spode
+spoilfive
+spondulix
+spongin
+spongioblast
+sponsion
+spoonbill
+sporades
+sporocyte
+sporran
+sportscast
+sportswrite
+sporule
+sprag
+sprechgesang
+sprechstimme
+springhalt
+springhead
+springhouse
+springlet
+springvale
+spruik
+spue
+spuggy
+spumescent
+squacco
+squalane
+squarrose
+squattocracy
+squeteague
+squireen
+squirrelfish
+squit
+squiz
+srinagar
+stableboy
+stabroek
+stackframe
+stacte
+staddlestone
+stadholder
+stadiometer
+staffa
+staffman
+stagflation
+staggard
+stagira
+staines
+stairhead
+stambul
+staminode
+standalone
+standfast
+stane
+stanniferous
+stannite
+stannum
+stanovoi
+stans
+staphyloplasty
+staphylorrhaphy
+stara
+starflower
+startc
+starwort
+statius
+stauroscope
+staysail
+steakhouse
+steamie
+steamtight
+stearoptene
+steatorrhoea
+stecher
+stedfast
+stellarator
+stelliferous
+stellular
+stemhead
+stendhal
+stenopetalous
+stenophyllous
+stenotropic
+stepdame
+stercoricolous
+sterculiaceous
+stereochrome
+stereochromy
+stereometry
+stereotaxis
+stereotomy
+stereovision
+sterlitamak
+sterne
+stevenage
+stevengraph
+steyr
+sthenic
+stheno
+stibium
+stich
+stichometry
+stickybeak
+stilicho
+stillage
+stillicide
+stilliform
+stingo
+stinko
+stitchwort
+stiver
+stoa
+stob
+stockfish
+stockjobber
+stomack
+stomatic
+stomatoplasty
+stoneboat
+stonecast
+stonechat
+stonefish
+stonefly
+stoneground
+stonk
+stonkered
+stook
+stoppard
+storeyed
+storiated
+stormproof
+stornoway
+storr
+storrs
+stoss
+stot
+stotinka
+stotious
+stotter
+stound
+stoup
+stour
+stoush
+strabo
+strabotomy
+strachey
+strandloper
+strategem
+strategems
+stratificational
+stratigraphical
+stratigraphically
+stratopause
+strawworm
+streamy
+streetlight
+strepitous
+stretchy
+striction
+strigiform
+strimon
+strine
+strobic
+strobilaceous
+stroganoff
+strokefinder
+stromboli
+strongman
+strongyle
+strontian
+stroppy
+stroy
+strychnic
+stubbs
+studdingsail
+studwork
+sturmer
+sty
+stylostixis
+stypsis
+styracaceous
+styria
+suakin
+subacetate
+subah
+subangular
+subapostolic
+subaqua
+subarid
+subassemblage
+subassemblages
+subastral
+subauricular
+subaxillary
+subbass
+subcalibre
+subcartilaginous
+subception
+subchannels
+subcluster
+subclusters
+subdelirium
+subduct
+subelement
+subelements
+subepidermis
+subequatorial
+suberic
+suberin
+suberose
+subfloor
+subfusc
+subinstance
+subinstances
+subjectify
+sublanguage
+sublanguages
+sublapsarianism
+submental
+subordinary
+subordinationism
+subotica
+subpanel
+subpanels
+subparameter
+subparameters
+subprocessor
+subscan
+subscans
+subscapular
+subsocial
+subsolar
+substantialism
+substomatal
+subtangent
+subternatural
+subtorrid
+subtreasury
+subufd
+subufds
+suburbicarian
+subvene
+subzero
+succentor
+succeptibility
+successsive
+succinic
+succoth
+succursal
+succuss
+suckerfish
+sudarium
+sudbury
+sudd
+sudetes
+sudor
+suetonius
+sufferage
+suffiency
+sufflate
+suffruticose
+suffumigate
+sufu
+suggestibly
+suharto
+suisse
+sukarnapura
+sukhumi
+sukkoth
+suleiman
+sulla
+sulphadiazine
+sulphanilamide
+sulphathiazole
+sulphide
+sulphinyl
+sulphisoxazole
+sulphite
+sulphonamide
+sulphonate
+sulphonated
+sulphone
+sulphonic
+sulphonium
+sulphonmethane
+sulphonyl
+sulphurate
+sulphuret
+sulphuretted
+sulphuryl
+summerweight
+sump
+sumpter
+sumy
+sunbake
+sundog
+sundress
+sundresses
+sundsvall
+sungari
+sungkiang
+sunglow
+sungrebe
+sunhat
+sunray
+sunstar
+suntrap
+suo
+superaltar
+superbazaar
+supercede
+superceded
+supercedes
+supercolumnar
+supercomputing
+superconduction
+supercurrent
+superdense
+supererogate
+superfemale
+superfuse
+superglacial
+superhero
+superhet
+superhigh
+superhumeral
+superlanguage
+superload
+supermale
+supermodel
+supermodels
+supermundane
+supernational
+superorganic
+superoxide
+supersex
+superstruct
+suplex
+supralapsarian
+suprematism
+supremo
+suqutra
+sur
+sura
+surakarta
+sural
+surat
+surculose
+surd
+surfbird
+surfbirds
+surfcasting
+surfie
+surgeoncy
+surgeonfish
+suribachi
+suricate
+surrebuttal
+sursum
+susa
+susah
+suseptible
+suslik
+suss
+susso
+susurrate
+sutlej
+sutler
+suva
+sverige
+svizzera
+swacked
+swanage
+swaraj
+sward
+swarf
+sweelinck
+sweetiewife
+sweetman
+sweetmeal
+sweptback
+sweptwing
+sweven
+sweyn
+swiftie
+swiftlet
+swindon
+swinepox
+swingboat
+swingle
+swingometer
+swingometers
+switchgirl
+swob
+swordbill
+swordcraft
+swordsmen
+swordstick
+swordsticks
+swound
+swounds
+swy
+sybaris
+sydneysider
+syene
+syktyvkar
+syllabism
+syllabogram
+syllabography
+sylva
+sylvanus
+sympathectomy
+symphile
+sympodium
+symposiac
+synarchy
+syncarp
+synchrocyclotron
+synchrometer
+synclastic
+synclinorium
+syncom
+syncrisis
+syndactyl
+synecious
+synovia
+syntagma
+synthetism
+sypher
+syphiloma
+syr
+syssarcosis
+systematology
+sytactic
+syzran
+taata
+tabaret
+tabescent
+tachograph
+tachylyte
+tachymetry
+tachyphylaxis
+tacket
+tacmahack
+tadmor
+taegu
+taejon
+tael
+taenia
+taeniafuge
+taffrail
+tafia
+tafilelt
+taganrog
+taggers
+tagliatelle
+tagmeme
+tagmemics
+tagore
+tagus
+tahina
+tahr
+tahsil
+tahsildar
+taig
+tailpipe
+tailplane
+tailskid
+tailstock
+taimyr
+tain
+taine
+taiyuan
+taj
+tajo
+taka
+takahe
+takamatsu
+takao
+takeaway
+takin
+takoradi
+talapoin
+talaria
+talavera
+talbot
+talca
+talcahuano
+taliesin
+taligrade
+taliped
+tallinn
+tallis
+talos
+taluk
+talweg
+tamasha
+tamatave
+tamaulipas
+tambac
+tambora
+tamburlaine
+tamis
+tammerfors
+tammuz
+tammy
+tampere
+tampico
+tana
+tanana
+tancred
+tandjungpriok
+tandoori
+tanga
+tangleberry
+tangshan
+tanguy
+tanis
+tanist
+tanjore
+tanta
+tantalous
+tanto
+tantrism
+tapadera
+tapemark
+tapemarks
+taphouse
+tarabulus
+taradiddle
+taramasalata
+tarantass
+tarantella
+taranto
+tarawa
+tarbes
+tarentum
+tarim
+tarnal
+tarnation
+tarnishs
+tarpan
+tarradiddle
+tarragona
+tarrasa
+tarshish
+tarsia
+tarsometatarsus
+tartarous
+tartu
+tashi
+tashkent
+tasimeter
+tasman
+tasset
+tassie
+tassle
+tatchell
+tati
+tatouay
+tatra
+taupo
+tauranga
+tauromachy
+tav
+tavel
+tawney
+taxaceous
+taxiplane
+taxiplanes
+teacake
+teashop
+technocommercial
+technography
+tectorial
+tecumseh
+tedder
+teesside
+teet
+tef
+teg
+tegular
+tehuantepec
+teide
+teilhard
+tejo
+tela
+telanaipura
+telautograph
+telecom
+telecomunications
+telega
+telegenic
+telegnosis
+telegonus
+telemachus
+telescopy
+telescript
+telespectroscope
+telestereoscope
+telestich
+teletext
+teletranscription
+teletube
+teletypesetter
+televideo
+telewriter
+telexed
+telexes
+telexing
+telfer
+telferage
+tellurate
+tellurion
+tellus
+telpherage
+temuco
+tenaille
+tenedos
+teng
+tengri
+teniafuge
+teniers
+tenner
+tenniel
+tenno
+tenorite
+tenorrhaphy
+tenotomy
+tensible
+tentation
+tenzing
+tepal
+tepefy
+tephrite
+tepic
+teratism
+teratoid
+terbia
+terceira
+terephthalic
+tereshkova
+terminosity
+termor
+terne
+terni
+ternion
+terotechnology
+terrestial
+terrine
+territorian
+tertial
+tertium
+tertullian
+teruel
+terylene
+terza
+terzetto
+tesla
+tesseract
+tessin
+testbed
+testiculate
+testudinal
+tetrabrach
+tetrabutylammonium
+tetrachlorethylene
+tetracyclic
+tetragram
+tetraphenyl
+tetraplegia
+tetrapody
+tetrapterous
+tetrastich
+tetrastichous
+tetrasyllable
+tetrazzini
+tetroxide
+tetzel
+teutoburger
+tevere
+tevet
+textualism
+teyde
+tezel
+thackeray
+thaddeus
+thadentsonyane
+thales
+thalweg
+thammuz
+thanatopsis
+thanet
+thanjavur
+thapsus
+thatcherism
+thaumatology
+thaumatrope
+theaceous
+theanthropism
+thearchy
+thebaine
+thegn
+theine
+themistocles
+thenardite
+theocrasy
+theocritus
+theodorakis
+theomachy
+theomancy
+theomania
+theomorphic
+theopathy
+theophagy
+theophobia
+theophrastus
+theorbo
+theravada
+therezina
+therfore
+therianthropic
+thermaesthesia
+thermobarograph
+thermobarometer
+thermoelectricity
+thermogenesis
+thermomotor
+thermophysical
+thermoregularity
+thermostatical
+thermotensile
+thermotherapy
+theroid
+theropod
+thersitical
+thesauri
+thespis
+thickleaf
+thimblewit
+thingumabob
+thioalcohol
+thiofuran
+thionine
+thionyl
+thiopentone
+thiophen
+thiosinamine
+thiosulphate
+thiosulphuric
+thirdstream
+thirlage
+thirlmere
+thisbe
+tholos
+thonburi
+thoracoplasty
+thornbill
+thoron
+thoroughpaced
+thorp
+thorshavn
+thrave
+threadneedle
+threadworm
+threap
+throatlash
+thrombogen
+thrombose
+thumbnut
+thumbstall
+thummim
+thun
+thunderbox
+thundery
+thuner
+thuya
+thymelaeaceous
+thyristor
+tia
+tiberias
+tibesti
+tibiotarsus
+tibullus
+tibur
+ticino
+tiddler
+tiddly
+tidewaiter
+tiebreaker
+tiepolo
+tierra
+tiffin
+tiflis
+tightknit
+tiglic
+tigrinya
+tihwa
+tikoloshe
+tiliaceous
+tillicum
+timaru
+timberyard
+timbuktu
+timecard
+timescale
+timescales
+timeslice
+timeslices
+timestamp
+timestamped
+timestamping
+timestamps
+tindal
+tineid
+tinpot
+tintinnabulum
+tipcat
+tiptop
+tipu
+tiran
+tiresias
+tirich
+tiro
+tiros
+tirpitz
+tirso
+tisza
+titanite
+titanosaur
+titanothere
+titfer
+tithonus
+titicaca
+titman
+titubation
+tiu
+tiv
+toadeater
+toadeater's
+toadeaters
+toadfish
+toadfish's
+toadfishes
+toadflax
+toadstone
+toadstone's
+toadstones
+tobit
+tobol
+tocantins
+tocology
+toea
+toecap
+toey
+toheroa
+tolpuddle
+toluyl
+tolylphosphine
+tomalley
+toman
+tombola
+tombouctou
+tomograph
+tonle
+tonsillotomy
+toowoomba
+toparch
+topazolite
+topotype
+topspin
+torbay
+torc
+torchier
+toric
+torii
+torino
+torose
+torquay
+torquemada
+torre
+torrefy
+torres
+torricelli
+torsibility
+tortelier
+tortellini
+tortile
+tortola
+tortuga
+toscana
+toscanini
+toul
+toulon
+touraine
+tourane
+tourcoing
+touristy
+tournai
+tourneur
+toussaint
+touzle
+towbar
+towkay
+townhall
+townscape
+townshend
+toxaemia
+toxalbumin
+toyama
+trabzon
+tracasserie
+tracheostomy
+tracksuit
+tractile
+trad
+tradeability
+traditor
+traducianism
+trafalgar
+traherne
+trailblaze
+trajan
+tralee
+trammie
+tranformed
+tranmission
+tranmitted
+trannie
+transcalent
+transculturation
+transcurrent
+transformism
+transgranular
+transilient
+transkei
+transliterator
+translunar
+transmigrant
+transmittancy
+transmundane
+transpadane
+transpassive
+transpond
+transponders
+transportaion
+transput
+transputer
+transputers
+transshipped
+tranverse
+trapan
+trapani
+trapes
+trapeziform
+trappean
+trasimene
+travancore
+traymobile
+trebizond
+treen
+treename
+treenames
+treenware
+tref
+trehala
+treitschke
+trengganu
+trente
+trento
+tressure
+tret
+trevally
+trevithick
+triac
+triazole
+tribade
+triblet
+tribromoethanol
+tricarbonyl
+tricentenary
+trichinopoly
+trichloro
+trichloroethanol
+trichloroethylene
+trichology
+trichosis
+trichroism
+tricktrack
+tricostate
+tricritical
+tricriticality
+tricrotic
+tricyclohexyl
+tridactyl
+tridentate
+tridentum
+triecious
+trieste
+trifold
+trihedron
+trihydrate
+trihydric
+triiodomethane
+trike
+trilateration
+trilemma
+trilithon
+trimethadione
+trimetric
+trimolecular
+trimurti
+trinacria
+trincomalee
+trinitrobenzene
+trinitrocresol
+trinitroglycerin
+trinitrophenol
+trioecious
+triolein
+tripalmitin
+tripersonal
+triphenyl
+tripody
+tripolitania
+tripterous
+triptolemus
+triptyque
+tripura
+tripwire
+triserial
+triskaidekaphobia
+trismegistus
+tristich
+tristichous
+trisulphide
+tritanopia
+tritiate
+triunitarian
+trivandrum
+troas
+troat
+trobriand
+trocar
+trochelminth
+trode
+trog
+troilism
+troilus
+trois
+trollope
+tromba
+tropaeolin
+trophoplasm
+tropicbird
+tropine
+tropophyte
+troppo
+tropylium
+trossachs
+trotskyist
+trotyl
+troubador
+trouse
+troyes
+trucial
+truckie
+trudgen
+trug
+trugs
+truk
+trumeau
+tryma
+tryptophanyl
+tsade
+tsana
+tsarevitch
+tsarevna
+tsaritsyn
+tselinograd
+tshiluba
+tshombe
+tsinan
+tsinghai
+tsingtao
+tsingyuan
+tso
+tsonga
+tsotsi
+tsugaru
+tsukahara
+tsushima
+tsutsugamushi
+tswana
+tuart
+tuatara
+tubate
+tubman
+tubuai
+tubuliflorous
+tucotuco
+tugela
+tugrik
+tuileries
+tula
+tularaemia
+tull
+tully
+tumblehome
+tumefacient
+tumefy
+tumular
+tumulose
+tungstous
+tungting
+tunguska
+tunnage
+tupamaro
+tuppenny
+tupungato
+turaco
+turbary
+turbogenerator
+turdine
+turenne
+turgenev
+turgent
+turgite
+turgot
+turishcheva
+turkestan
+turku
+turncock
+turnround
+turpeth
+turpin
+tusculum
+tussaud
+tussis
+tutankhamen
+tutiorism
+tutsan
+tutsi
+tutty
+tutuila
+tuva
+tuxtla
+tver
+twat
+twattle
+twayblade
+twee
+tweeddale
+tweedledum
+tweedsmuir
+tweeny
+twelvemo
+twite
+tychism
+tycho
+tye
+tylopod
+tylosis
+tympanist
+tympanitis
+tyndall
+tyndareus
+tynemouth
+tyneside
+typebar
+typhlitis
+typhlology
+typhoeus
+typhogenic
+typhoidin
+typothetae
+tyr
+tyumen
+tzekung
+tzetze
+ubbelohde
+ubiety
+ucayali
+ucca
+uccello
+udaipur
+udal
+udine
+udmurt
+udo
+udometer
+uele
+ufa
+ufd
+ufo
+ufology
+ugali
+ugaritic
+ugli
+uhlan
+uintathere
+ulfilas
+ulmaceous
+ulpian
+ultramicrometer
+ultramicrometers
+ultramicroscopic
+ultramundane
+ultrared
+ultrathin
+ultravirus
+ultrawet
+umayyad
+umbellule
+umberto
+umbles
+umbo
+umbria
+umiak
+umpy
+umrcc
+umtali
+unaesthetic
+unallocateed
+unamuno
+unaneled
+unaskable
+unassign
+unban
+unbelt
+unbirthday
+unbonnet
+unchurch
+unclad
+unco
+uncodeable
+unconservative
+uncontroversial
+undated
+undefine
+underachieve
+underbuy
+undercart
+underclay
+undercroft
+undercutting
+underdevelop
+underemphasis
+underfelt
+underfilled
+underfloor
+underfur
+undergrown
+underhung
+underletting
+underlinen
+undermentioned
+undernourish
+underpainting
+underpay
+underpinned
+underpitch
+underpitched
+underpitches
+underpitching
+underprice
+underpriced
+underprices
+underpricing
+underprop
+underquote
+underseal
+underset
+undersheriff
+undersmooth
+undersmoothed
+undersmoothing
+undersmooths
+underspent
+understaff
+underthrust
+undertint
+undertrump
+undertype
+undialectical
+undirectional
+undro
+undset
+unenforcable
+unexcited
+unforced
+unforseen
+ungaretti
+ungava
+unguiculate
+unguinous
+unguis
+ungula
+unguligrade
+uni
+unibus
+unicef
+unicolour
+unicostate
+unidirection
+uniformally
+unilateralist
+unilateralists
+uniliteral
+unimak
+unimodular
+uninfluential
+uninterruptable
+unipersonal
+unipod
+uniseptate
+uniserial
+uniterm
+unlead
+unlettable
+unmodeled
+unmusical
+unpaddable
+unpolitic
+unprepossessing
+unreactive
+unreckonable
+unreligious
+unrepair
+unrwa
+unskilful
+unspecifed
+unspecify
+unsteel
+unsuggestive
+unsupportive
+unterwalden
+untravelled
+untypical
+unwarrant
+upanishad
+upcountry
+uphroe
+upolu
+upperbound
+upperbounds
+uppsala
+uprouse
+upsadaisy
+upsala
+upstand
+upstretched
+upswell
+upto
+uranalysis
+uranism
+uranite
+uredosorus
+uredospore
+uretic
+urey
+urfa
+urga
+urim
+urinant
+uriniferous
+urmia
+urogenous
+uroscopy
+urquhart
+urticaceous
+uruapan
+urumchi
+urundi
+username
+ushant
+ushas
+usnach
+uspallata
+usquebaugh
+ussher
+ussuri
+ustashi
+ustulation
+ustyurt
+usumbura
+utamaro
+utgard
+uther
+utriculitis
+utrillo
+uttar
+uvedale
+uvulitis
+uxmal
+vacherin
+vadodara
+vadose
+vagal
+vaginate
+vaginectomy
+vaginismus
+vaginitis
+vagotonia
+vagus
+vahana
+vaisya
+valais
+valdai
+valdemar
+valdivia
+valencies
+valency
+valens
+valera
+valerianaceous
+valeric
+valeta
+valetta
+valgus
+valladolid
+vallation
+vallecula
+vallombrosa
+valona
+valonia
+valuta
+valvate
+valvule
+valvulitis
+vambrace
+vanadate
+vanadic
+vanadinite
+vanadous
+vanaspati
+vanbrugh
+vang
+vansittart
+vanua
+vanzetti
+vaporescence
+vaporetto
+vaporific
+vaporimeter
+vara
+varactor
+varanasi
+vardar
+vardon
+varec
+varese
+vargas
+varia
+variablity
+varicella
+varicellate
+varicelloid
+varicocele
+varicosis
+varicotomy
+variola
+variolate
+variole
+variolite
+variscite
+varityper
+varna
+varro
+vas
+vasari
+vasco
+vashti
+vasoinhibitor
+vasoregulatory
+vaticide
+vauban
+vaucluse
+vaud
+vav
+vavasor
+vedette
+veg
+vegan
+veii
+veinstone
+veinule
+vela
+velate
+velcro
+veldskoen
+veleta
+veliger
+velites
+vellicate
+vellore
+vena
+venenose
+venepuncture
+venlo
+venose
+venosity
+ventris
+verbenaceous
+vercelli
+vercingetorix
+verderer
+verdun
+verecund
+vereeniging
+vergeboard
+verglas
+verifiably
+verkrampte
+verlaine
+verligte
+vermeer
+vermination
+vermis
+vermivorous
+verny
+verrazano
+verrocchio
+verruca
+verrucae
+verrucose
+versabraille
+versant
+versatec
+verst
+vert
+verticillaster
+verticillate
+vertu
+verulamium
+vervain
+vervet
+verwoerd
+vesalius
+vespasian
+vespertilionine
+vespucci
+vesuvius
+vetiver
+viareggio
+viator
+vibraculum
+vibronic
+vicenary
+vicenza
+vico
+vicomte
+victoriana
+videlicet
+videotex
+vidhan
+vienne
+viewport
+viewport's
+viewports
+viewscan
+vignola
+vigny
+vigo
+villous
+vimineous
+vina
+vinasse
+vinegarette
+vinificator
+vinnitsa
+violoncello
+violone
+viren
+virial
+virtu
+viscoid
+vistula
+vitaceous
+vitaphone
+vitascope
+vitoria
+vitrain
+vitrescence
+vitrescent
+vitric
+vitriform
+vitruvius
+vitta
+vittle
+vituline
+viverrine
+viyella
+vocate
+voidage
+voiotia
+voir
+voix
+vojvodina
+volitant
+vologda
+volost
+volsung
+volsunga
+voltaism
+voltammeter
+volturno
+volvulus
+vomer
+voortrekker
+vorster
+vosges
+vostok
+vouge
+vox
+vuillard
+vulgaris
+vulvovaginitis
+vyborg
+wabble
+wabbled
+wabbles
+wabbling
+wace
+wadai
+wadmal
+wadset
+wagram
+wagtail
+waistcloth
+walfish
+walhalla
+walkable
+walkley
+wallah
+wallasey
+wame
+wanderoo
+wandoo
+wanganui
+wanhsien
+wank
+wankel
+wankie
+wanna
+waratah
+wardian
+wardle
+wardmote
+warhorse
+warhorses
+warrigal
+warsle
+warta
+washaway
+washday
+washdays
+washerwomen
+washery
+washin
+washwomen
+wassermann
+wasteweir
+watap
+watchstrap
+waterage
+waterbrain
+waterbuck
+waterspout
+watertower
+wattlebird
+waul
+waveband
+wavebands
+wavefunction
+wavefunctions
+wavellite
+wavemeter
+waveoff
+waw
+wawa
+wawl
+waxberry
+waxbill
+waxplant
+wayzgoose
+waziristan
+weakfish
+weald
+weaponeer
+wearproof
+weasand
+weaverbird
+webbs
+webwheel
+weddell
+wedekind
+wedeling
+weedkiller
+weelkes
+ween
+weeny
+weighbridge
+weighbridges
+weightlifter
+weightlifting
+weihai
+weka
+welkom
+welland
+wellesz
+wellies
+welterweight
+welwyn
+wentletrap
+wernerite
+wersh
+weser
+wesker
+wessex
+westmost
+whacko
+whangarei
+whare
+wharfie
+wharve
+whatsit
+whaup
+wheatworm
+whereafter
+wherrit
+wheyface
+whidah
+whimbrel
+whin
+whinchat
+whinge
+whipstall
+whipworm
+whirlabout
+whitby
+whitebeam
+whitedamp
+whitefly
+whitethorn
+whitewood
+who've
+wholefood
+wholemeal
+wholism
+whortleberry
+whyalla
+whydah
+wicketkeeper
+wicketkeepers
+wicketkeeping
+wickthing
+wicopy
+widdershins
+widgery
+widgie
+widnes
+widukind
+wien
+wikiup
+wildcard
+wildcarded
+wildcarding
+wildcards
+wilde
+wilhelmshaven
+wilhelmstrasse
+willemstad
+willowherb
+wilmslow
+wilno
+wincey
+windbound
+windcheater
+windcheaters
+windchill
+windermere
+windflower
+windgall
+windhoek
+windhover
+windlestraw
+windrow
+windsail
+windsock
+winebibber
+winkelried
+winnipegosis
+winterfeed
+winterthur
+winterweight
+wipo
+wirepuller
+wiretapping
+wirewalker
+wirra
+wirral
+wis
+wishlist
+wishlists
+wislany
+wismar
+wist
+witan
+witchetty
+wite
+witenagemot
+withershins
+wittol
+wivern
+woad
+woaded
+woadwaxen
+woald
+wodge
+wodges
+wog
+woggle
+wolfbane
+wolfenden
+wolffish
+wolfit
+wolframite
+wolfsbane
+wollastonite
+wolly
+wolsey
+wolve
+wolver
+womera
+wonsan
+woodborer
+woodcarving
+woodchat
+woodgrouse
+woodhook
+woodlark
+woodlouse
+woodrush
+woodscrew
+woodseats
+woodwaxen
+woodworm
+woolf
+woolfell
+woolgrower
+woolley
+woollybutt
+woop
+woorali
+workaday
+workbag
+workfile
+workfiles
+workgroup
+workgroups
+workmate
+workmates
+workperson
+workshy
+worksop
+wormcast
+wormseed
+wormwood
+worsley
+wot
+wran
+wrapover
+wrapround
+wreckfish
+wreckful
+wrekin
+wroclaw
+wrongdo
+wrongdoers
+wroth
+wrybill
+wryneck
+wuchang
+wuhsien
+wuhu
+wulfenite
+wulfila
+wundt
+wuppertal
+wurley
+wurst
+wus
+wusih
+wuthering
+wutsin
+wycherley
+wycliffe
+wye
+wynd
+wyvern
+xanthein
+xanthippe
+xanthochroid
+xanthochroism
+xanthoma
+xanthophyll
+xanthous
+xanthus
+xci
+xcii
+xciv
+xcix
+xcvi
+xcvii
+xenakis
+xenocrates
+xenocryst
+xenogamy
+xenogenesis
+xenoglossia
+xenolith
+xenomorphic
+xenophanes
+xenophon
+xeroderma
+xeromorphic
+xerophthalmia
+xerophyte
+xerosere
+xerosis
+xhosa
+xiphisternum
+xiphoid
+xiphosuran
+xuthus
+xxi
+xxii
+xxiii
+xxiv
+xxix
+xxv
+xxvi
+xxvii
+xxviii
+xxx
+xxxi
+xxxii
+xxxiii
+xxxiv
+xxxix
+xxxv
+xxxvi
+xxxvii
+xxxviii
+xylan
+xylidine
+xylocarp
+xylograph
+xylography
+xyloid
+xylol
+xylophagous
+xylyl
+xyst
+xyster
+yabber
+yabby
+yaffle
+yafo
+yagi
+yahata
+yamagata
+yamani
+yamashita
+yammer
+yanina
+yapok
+yapon
+yarwood
+yataghan
+yate
+yauld
+yaunde
+yaup
+yaupon
+yautia
+yawata
+yawp
+yazd
+yean
+yeanling
+yegg
+yeld
+yelk
+yellowbark
+yellowbird
+yellowhammer
+yellowlegs
+yellowtail
+yellowweed
+yellowwood
+yenan
+yentai
+yerevan
+yestreen
+yeti
+yezd
+ygerne
+yike
+yingkow
+yippee
+yirr
+ylem
+ymir
+yob
+yod
+yodle
+yogh
+yohimbine
+yoicks
+yokefellow
+yola
+yom
+yoni
+yonne
+yonnie
+ytterbia
+ytterbite
+yttria
+yttriferous
+yuk
+yulan
+yurt
+yvelines
+ywis
+zacynthus
+zaffer
+zagazig
+zagreus
+zagros
+zama
+zamindar
+zamindari
+zamora
+zante
+zanu
+zapata
+zaporozhye
+zappa
+zapu
+zaqaziq
+zaragoza
+zarathustra
+zaratite
+zareba
+zarf
+zarga
+zaria
+zarzuela
+zastruga
+zayin
+zeami
+zebec
+zebedee
+zebrawood
+zebu
+zebulun
+zecchino
+zechariah
+zed
+zedekiah
+zedoary
+zee
+zein
+zeist
+zemindar
+zenana
+zener
+zephaniah
+zephyrus
+zeugma
+zeuxis
+zia
+ziaur
+zibeline
+zibet
+ziff
+ziggurat
+zigzagger
+zila
+zilpah
+zinciferous
+zincite
+zinckenite
+zincograph
+zincography
+zingiberaceous
+zinjanthropus
+zinkenite
+zipangu
+zircalloy
+ziska
+zlatoust
+zoaea
+zoan
+zoea
+zoffany
+zohar
+zola
+zond
+zonk
+zonking
+zonks
+zonule
+zoochemistry
+zoochore
+zoogloea
+zoography
+zooid
+zoolatry
+zoometry
+zoomorphism
+zoophile
+zoophilia
+zoophilism
+zoophobia
+zooplasty
+zoosperm
+zoosporangium
+zootomy
+zootoxin
+zootoxins
+zorilla
+zorrilla
+zoster
+zoug
+zsigmondy
+zucchetto
+zugzwang
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW Software Requirement with Recursion.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW Software Requirement with Recursion.xml
new file mode 100644
index 00000000000..0b6658e4ac0
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW Software Requirement with Recursion.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?mso-application progid="Word.Document"?>
+<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" xmlns:ns0="http://www.w3.org/2001/XMLSchema" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"><w:ignoreElements w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/><o:DocumentProperties><o:Title>SRS</o:Title><o:Author>Ryan D. Brooks</o:Author><o:LastAuthor>Ryan Brooks</o:LastAuthor><o:Revision>11</o:Revision><o:TotalTime>5</o:TotalTime><o:LastPrinted>2007-03-22T22:27:00Z</o:LastPrinted><o:Created>2007-04-21T15:49:00Z</o:Created><o:LastSaved>2008-10-03T20:33:00Z</o:LastSaved><o:Pages>1</o:Pages><o:Words>7</o:Words><o:Characters>45</o:Characters><o:Company>The Boeing Company</o:Company><o:Lines>1</o:Lines><o:Paragraphs>1</o:Paragraphs><o:CharactersWithSpaces>51</o:CharactersWithSpaces><o:Version>11.0000</o:Version></o:DocumentProperties><w:fonts><w:defaultFonts w:ascii="Times New Roman" w:fareast="Times New Roman" w:h-ansi="Times New Roman" w:cs="Times New Roman"/><w:font w:name="Helvetica"><w:panose-1 w:val="020B0604020202020204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="20007A87" w:usb-1="80000000" w:usb-2="00000008" w:usb-3="00000000" w:csb-0="000001FF" w:csb-1="00000000"/></w:font><w:font w:name="Courier"><w:panose-1 w:val="02070409020205020404"/><w:charset w:val="00"/><w:family w:val="Modern"/><w:notTrueType/><w:pitch w:val="fixed"/><w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/></w:font><w:font w:name="Wingdings"><w:panose-1 w:val="05000000000000000000"/><w:charset w:val="02"/><w:family w:val="Auto"/><w:pitch w:val="variable"/><w:sig w:usb-0="00000000" w:usb-1="10000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/></w:font><w:font w:name="Tahoma"><w:panose-1 w:val="020B0604030504040204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="61007A87" w:usb-1="80000000" w:usb-2="00000008" w:usb-3="00000000" w:csb-0="000101FF" w:csb-1="00000000"/></w:font></w:fonts><w:lists><w:listDef w:listDefId="0"><w:lsid w:val="003A6350"/><w:plt w:val="Multilevel"/><w:tmpl w:val="F89E6E26"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:pStyle w:val="APPENDIX1"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:pStyle w:val="APPENDIX2"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:pStyle w:val="APPENDIX3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:pStyle w:val="APPENDIX4"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:pStyle w:val="APPENDIX5"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:pStyle w:val="APPENDIX6"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:pStyle w:val="APPENDIX7"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:pStyle w:val="APPENDIX8"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:pStyle w:val="APPENDIX9"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="1"><w:lsid w:val="016D5431"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="98C65BCE"/><w:lvl w:ilvl="0" w:tplc="94D2C566"><w:start w:val="1"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="504"/></w:tabs><w:ind w:left="504" w:hanging="504"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="2"><w:lsid w:val="0C4D206D"/><w:plt w:val="Multilevel"/><w:tmpl w:val="4B543E40"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="3"><w:lsid w:val="10AF29E5"/><w:plt w:val="Multilevel"/><w:tmpl w:val="7520DAAE"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4"/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="4"><w:lsid w:val="15EB1725"/><w:plt w:val="Multilevel"/><w:tmpl w:val="D902A83E"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%3."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="5"><w:lsid w:val="1C970BBA"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5EB82E3A"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="6"><w:lsid w:val="1D6C5FCC"/><w:plt w:val="Multilevel"/><w:tmpl w:val="E710F038"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="APPENDIX %1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="0" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="720" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:lvlText w:val="%3."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1440" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="7"><w:lsid w:val="1D753DB7"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="8"><w:lsid w:val="1EC51BCC"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="9"><w:lsid w:val="256F5D56"/><w:plt w:val="Multilevel"/><w:tmpl w:val="EAC4E6B8"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="10"><w:lsid w:val="290A1130"/><w:plt w:val="Multilevel"/><w:tmpl w:val="EAC4E6B8"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="11"><w:lsid w:val="299E4F07"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="46E2B8B2"/><w:lvl w:ilvl="0" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1512"/></w:tabs><w:ind w:left="1512" w:hanging="504"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="12"><w:lsid w:val="29C240FD"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="FCA4DC08"/><w:lvl w:ilvl="0" w:tplc="B5146A3E"><w:start w:val="1"/><w:nfc w:val="23"/><w:pStyle w:val="bulletlvl2"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1224"/></w:tabs><w:ind w:left="1224" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090019"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="0409000F" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="0409000F" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="13"><w:lsid w:val="29CA5728"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="D00252C6"/><w:lvl w:ilvl="0" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%1"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="14"><w:lsid w:val="2A5411A0"/><w:plt w:val="Multilevel"/><w:tmpl w:val="C40CB9EC"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:pStyle w:val="Heading1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="2"/><w:pStyle w:val="Heading2"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="24"/><w:pStyle w:val="Heading3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:pStyle w:val="Heading4"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:pStyle w:val="Heading5"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:pStyle w:val="Heading6"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:pStyle w:val="Heading7"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:pStyle w:val="Heading8"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:pStyle w:val="Heading9"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="15"><w:lsid w:val="2B1C06F5"/><w:plt w:val="Multilevel"/><w:tmpl w:val="3B98963A"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="16"><w:lsid w:val="2B477730"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="33801DC4"/><w:lvl w:ilvl="0" w:tplc="2D8A4B4C"><w:start w:val="1"/><w:nfc w:val="23"/><w:pStyle w:val="bulletlvl3"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3024"/></w:tabs><w:ind w:left="3024" w:hanging="2016"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2448"/></w:tabs><w:ind w:left="2448" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3168"/></w:tabs><w:ind w:left="3168" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3888"/></w:tabs><w:ind w:left="3888" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4608"/></w:tabs><w:ind w:left="4608" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5328"/></w:tabs><w:ind w:left="5328" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6048"/></w:tabs><w:ind w:left="6048" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6768"/></w:tabs><w:ind w:left="6768" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="7488"/></w:tabs><w:ind w:left="7488" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="17"><w:lsid w:val="2B5B6B3C"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5CC8E874"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:first-line="763"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="18"><w:lsid w:val="2D6545A6"/><w:plt w:val="Multilevel"/><w:tmpl w:val="3F227848"/><w:name w:val="listreset"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl1"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1296"/></w:tabs><w:ind w:left="1296" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/><w:b w:val="off"/><w:i w:val="off"/><w:caps w:val="off"/><w:strike w:val="off"/><w:dstrike w:val="off"/><w:outline w:val="off"/><w:shadow w:val="off"/><w:emboss w:val="off"/><w:imprint w:val="off"/><w:vanish w:val="off"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:vertAlign w:val="baseline"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:pStyle w:val="listlvl2"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="-31680"/></w:tabs><w:ind w:left="1656" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl3"/><w:lvlText w:val="(%3)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2016"/></w:tabs><w:ind w:left="2016" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:pStyle w:val="listlvl4"/><w:lvlText w:val="(%4)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2376"/></w:tabs><w:ind w:left="2376" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl5"/><w:lvlText w:val="%5)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2736"/></w:tabs><w:ind w:left="2736" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:pStyle w:val="listlvl6"/><w:lvlText w:val="%6)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3096"/></w:tabs><w:ind w:left="3096" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:hint="default"/><w:b w:val="off"/><w:i w:val="off"/><w:sz w:val="22"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl7"/><w:lvlText w:val="[%7]."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3456"/></w:tabs><w:ind w:left="3456" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="[%8]."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="19"><w:lsid w:val="308239DA"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="20"><w:lsid w:val="31A252E6"/><w:plt w:val="Multilevel"/><w:tmpl w:val="A9D83578"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="21"><w:lsid w:val="3B97448F"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:name w:val="listrestart2"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="22"><w:lsid w:val="3C165F4A"/><w:plt w:val="Multilevel"/><w:tmpl w:val="79A06FE6"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="23"><w:lsid w:val="42BB3748"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="DBE464B0"/><w:lvl w:ilvl="0" w:tplc="26BAF6B0"><w:start w:val="1"/><w:nfc w:val="23"/><w:pStyle w:val="bulletlvl1"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="648"/></w:tabs><w:ind w:left="648" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3960" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4680" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5400" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="6120" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6840"/></w:tabs><w:ind w:left="6840" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="24"><w:lsid w:val="5A401749"/><w:plt w:val="Multilevel"/><w:tmpl w:val="CD8E61CE"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="25"><w:lsid w:val="5A802BC9"/><w:plt w:val="Multilevel"/><w:tmpl w:val="CB0E7A2E"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3"/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="26"><w:lsid w:val="5C3B1B76"/><w:plt w:val="Multilevel"/><w:tmpl w:val="CB0E7A2E"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3"/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="27"><w:lsid w:val="5E371EBB"/><w:plt w:val="Multilevel"/><w:tmpl w:val="DA56D440"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="28"><w:lsid w:val="60B71688"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5EA20814"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="29"><w:lsid w:val="6389497B"/><w:plt w:val="Multilevel"/><w:tmpl w:val="AC5A6410"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:pStyle w:val="listlvl10"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="360" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1080" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:lvlText w:val="%3."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="1800" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2520" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3240" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="3960" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="4680" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5400" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6120" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="30"><w:lsid w:val="6469691A"/><w:plt w:val="Multilevel"/><w:tmpl w:val="E5D02024"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="31"><w:lsid w:val="74BA49AE"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:name w:val="listrestart"/><w:styleLink w:val="listreset"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="32"><w:lsid w:val="751E50EA"/><w:plt w:val="Multilevel"/><w:tmpl w:val="79E6FEDC"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="33"><w:lsid w:val="7D9D3B47"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="34"><w:lsid w:val="7F0F313D"/><w:plt w:val="Multilevel"/><w:tmpl w:val="F8FC63EE"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="35"><w:lsid w:val="7F633FB7"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5F5A52E8"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:list w:ilfo="1"><w:ilst w:val="23"/></w:list><w:list w:ilfo="2"><w:ilst w:val="12"/></w:list><w:list w:ilfo="3"><w:ilst w:val="18"/></w:list><w:list w:ilfo="4"><w:ilst w:val="14"/></w:list><w:list w:ilfo="5"><w:ilst w:val="5"/></w:list><w:list w:ilfo="6"><w:ilst w:val="25"/></w:list><w:list w:ilfo="7"><w:ilst w:val="4"/></w:list><w:list w:ilfo="8"><w:ilst w:val="13"/></w:list><w:list w:ilfo="9"><w:ilst w:val="29"/></w:list><w:list w:ilfo="10"><w:ilst w:val="6"/></w:list><w:list w:ilfo="11"><w:ilst w:val="18"/></w:list><w:list w:ilfo="12"><w:ilst w:val="26"/></w:list><w:list w:ilfo="13"><w:ilst w:val="34"/></w:list><w:list w:ilfo="14"><w:ilst w:val="2"/></w:list><w:list w:ilfo="15"><w:ilst w:val="27"/></w:list><w:list w:ilfo="16"><w:ilst w:val="17"/></w:list><w:list w:ilfo="17"><w:ilst w:val="30"/></w:list><w:list w:ilfo="18"><w:ilst w:val="3"/></w:list><w:list w:ilfo="19"><w:ilst w:val="20"/></w:list><w:list w:ilfo="20"><w:ilst w:val="15"/></w:list><w:list w:ilfo="21"><w:ilst w:val="35"/></w:list><w:list w:ilfo="22"><w:ilst w:val="22"/></w:list><w:list w:ilfo="23"><w:ilst w:val="24"/></w:list><w:list w:ilfo="24"><w:ilst w:val="32"/></w:list><w:list w:ilfo="25"><w:ilst w:val="0"/></w:list><w:list w:ilfo="26"><w:ilst w:val="31"/></w:list><w:list w:ilfo="27"><w:ilst w:val="21"/></w:list><w:list w:ilfo="28"><w:ilst w:val="16"/></w:list><w:list w:ilfo="29"><w:ilst w:val="19"/></w:list><w:list w:ilfo="30"><w:ilst w:val="18"/><w:lvlOverride w:ilvl="0"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="1"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="2"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="3"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="4"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="5"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="6"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="7"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="8"><w:startOverride w:val="1"/></w:lvlOverride></w:list><w:list w:ilfo="31"><w:ilst w:val="11"/></w:list><w:list w:ilfo="32"><w:ilst w:val="1"/></w:list><w:list w:ilfo="33"><w:ilst w:val="33"/></w:list><w:list w:ilfo="34"><w:ilst w:val="8"/></w:list><w:list w:ilfo="35"><w:ilst w:val="28"/></w:list><w:list w:ilfo="36"><w:ilst w:val="14"/></w:list><w:list w:ilfo="37"><w:ilst w:val="10"/></w:list><w:list w:ilfo="38"><w:ilst w:val="9"/></w:list><w:list w:ilfo="39"><w:ilst w:val="7"/></w:list><w:ilfoMacAtCleanup w:val="5"/></w:lists><w:styles><w:versionOfBuiltInStylenames w:val="4"/><w:latentStyles w:defLockedState="off" w:latentStyleCount="156"/><w:style w:type="paragraph" w:default="on" w:styleId="Normal"><w:name w:val="Normal"/><w:rsid w:val="00C93CA3"/><w:pPr><w:spacing w:before="40" w:after="40" w:line="240" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading1"><w:name w:val="heading 1"/><wx:uiName wx:val="Heading 1"/><w:next w:val="paranormal"/><w:rsid w:val="00F4596F"/><w:pPr><w:pStyle w:val="Heading1"/><w:keepNext/><w:keepLines/><w:pageBreakBefore/><w:listPr><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="0"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:kern w:val="28"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading2"><w:name w:val="heading 2"/><wx:uiName wx:val="Heading 2"/><w:next w:val="paranormal"/><w:rsid w:val="00F4596F"/><w:pPr><w:pStyle w:val="Heading2"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="1"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="320" w:after="80"/><w:outlineLvl w:val="1"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading3"><w:name w:val="heading 3"/><wx:uiName wx:val="Heading 3"/><w:next w:val="paranormal"/><w:rsid w:val="00F4596F"/><w:pPr><w:pStyle w:val="Heading3"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="2"/><w:ilfo w:val="36"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="900"/></w:tabs><w:spacing w:before="320" w:after="80"/><w:outlineLvl w:val="2"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading4"><w:name w:val="heading 4"/><wx:uiName wx:val="Heading 4"/><w:next w:val="paranormal"/><w:rsid w:val="00F4596F"/><w:pPr><w:pStyle w:val="Heading4"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="3"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="3"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading5"><w:name w:val="heading 5"/><wx:uiName wx:val="Heading 5"/><w:next w:val="paranormal"/><w:rsid w:val="00F4596F"/><w:pPr><w:pStyle w:val="Heading5"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="4"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="4"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading6"><w:name w:val="heading 6"/><wx:uiName wx:val="Heading 6"/><w:next w:val="paranormal"/><w:rsid w:val="00F4596F"/><w:pPr><w:pStyle w:val="Heading6"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="5"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="5"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading7"><w:name w:val="heading 7"/><wx:uiName wx:val="Heading 7"/><w:next w:val="paranormal"/><w:rsid w:val="00F4596F"/><w:pPr><w:pStyle w:val="Heading7"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="6"/><w:ilfo w:val="36"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="1620"/></w:tabs><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="6"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading8"><w:name w:val="heading 8"/><wx:uiName wx:val="Heading 8"/><w:next w:val="paranormal"/><w:rsid w:val="00F4596F"/><w:pPr><w:pStyle w:val="Heading8"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="7"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="7"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading9"><w:name w:val="heading 9"/><wx:uiName wx:val="Heading 9"/><w:next w:val="paranormal"/><w:rsid w:val="00F4596F"/><w:pPr><w:pStyle w:val="Heading9"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="8"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="8"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:default="on" w:styleId="DefaultParagraphFont"><w:name w:val="Default Paragraph Font"/><w:semiHidden/></w:style><w:style w:type="table" w:default="on" w:styleId="TableNormal"><w:name w:val="Normal Table"/><wx:uiName wx:val="Table Normal"/><w:semiHidden/><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="list" w:default="on" w:styleId="NoList"><w:name w:val="No List"/><w:semiHidden/></w:style><w:style w:type="paragraph" w:styleId="paranormal"><w:name w:val="para:normal"/><w:link w:val="paranormalChar"/><w:rsid w:val="009E6B3D"/><w:pPr><w:pStyle w:val="paranormal"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="64" w:after="80" w:line="240" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b-cs/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl3"><w:name w:val="list:lvl 3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl3"/><w:listPr><w:ilvl w:val="2"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="2088"/></w:tabs></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang1"><w:name w:val="req lang:1"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang1"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Header"><w:name w:val="header"/><wx:uiName wx:val="Header"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A134C3"/><w:pPr><w:pStyle w:val="Header"/><w:tabs><w:tab w:val="center" w:pos="4320"/><w:tab w:val="right" w:pos="8640"/></w:tabs><w:spacing w:before="20" w:after="0" w:line="180" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="proprietarycontd"><w:name w:val="proprietary:cont'd"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="proprietarycontd"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="4320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="60" w:after="60" w:line="200" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="16"/><w:sz-cs w:val="16"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paracentered"><w:name w:val="para:centered"/><w:autoRedefine/><w:rsid w:val="00B43482"/><w:pPr><w:pStyle w:val="paracentered"/><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="80" w:after="80" w:line="240" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Helvetica"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent2"><w:name w:val="para:indent2"/><w:autoRedefine/><w:rsid w:val="004417BE"/><w:pPr><w:pStyle w:val="paraindent2"/><w:tabs><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="4320"/><w:tab w:val="left" w:pos="5040"/><w:tab w:val="left" w:pos="5760"/><w:tab w:val="left" w:pos="6480"/><w:tab w:val="left" w:pos="7200"/><w:tab w:val="left" w:pos="7920"/><w:tab w:val="left" w:pos="8640"/><w:tab w:val="left" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="80" w:line="240" w:line-rule="at-least"/><w:ind w:left="720"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent3"><w:name w:val="para:indent3"/><w:autoRedefine/><w:rsid w:val="0071606D"/><w:pPr><w:pStyle w:val="paraindent3"/><w:tabs><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4680"/><w:tab w:val="left" w:pos="5400"/><w:tab w:val="left" w:pos="6120"/><w:tab w:val="left" w:pos="6840"/><w:tab w:val="left" w:pos="7560"/><w:tab w:val="left" w:pos="8280"/><w:tab w:val="left" w:pos="9000"/><w:tab w:val="left" w:pos="9720"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="80" w:line="240" w:line-rule="at-least"/><w:ind w:left="1080"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Caption"><w:name w:val="caption"/><wx:uiName wx:val="Caption"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:autoRedefine/><w:semiHidden/><w:rsid w:val="0085234B"/><w:pPr><w:pStyle w:val="Caption"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="4320"/><w:tab w:val="left" w:pos="5400"/><w:tab w:val="left" w:pos="6480"/><w:tab w:val="left" w:pos="7560"/><w:tab w:val="left" w:pos="8640"/><w:tab w:val="left" w:pos="9720"/><w:tab w:val="left" w:pos="10800"/><w:tab w:val="left" w:pos="11880"/><w:tab w:val="left" w:pos="12960"/><w:tab w:val="left" w:pos="14040"/><w:tab w:val="left" w:pos="15120"/><w:tab w:val="left" w:pos="16200"/><w:tab w:val="left" w:pos="17280"/><w:tab w:val="left" w:pos="18360"/><w:tab w:val="left" w:pos="19440"/><w:tab w:val="left" w:pos="20520"/><w:tab w:val="left" w:pos="21600"/><w:tab w:val="left" w:pos="22680"/><w:tab w:val="left" w:pos="23760"/><w:tab w:val="left" w:pos="24840"/><w:tab w:val="left" w:pos="25920"/><w:tab w:val="left" w:pos="27000"/><w:tab w:val="left" w:pos="28080"/><w:tab w:val="left" w:pos="29160"/><w:tab w:val="left" w:pos="30240"/><w:tab w:val="left" w:pos="31320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="120" w:after="120"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent1"><w:name w:val="para:indent1"/><w:autoRedefine/><w:rsid w:val="007D424E"/><w:pPr><w:pStyle w:val="paraindent1"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4680"/><w:tab w:val="left" w:pos="5400"/><w:tab w:val="left" w:pos="6120"/><w:tab w:val="left" w:pos="6840"/><w:tab w:val="left" w:pos="7560"/><w:tab w:val="left" w:pos="8280"/><w:tab w:val="left" w:pos="9000"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="80" w:line="240" w:line-rule="at-least"/><w:ind w:left="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Footer"><w:name w:val="footer"/><wx:uiName wx:val="Footer"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="Footer"/><w:tabs><w:tab w:val="center" w:pos="4320"/><w:tab w:val="right" w:pos="8640"/></w:tabs></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl4"><w:name w:val="list:lvl 4"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl4"/><w:listPr><w:ilvl w:val="3"/><w:ilfo w:val="11"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHead"><w:name w:val="RowHead"/><w:basedOn w:val="Heading1"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHead"/><w:listPr><w:ilfo w:val="0"/></w:listPr><w:spacing w:before="100" w:after="100"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText11"><w:name w:val="TableText11"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText11"/><w:spacing w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOAHeading"><w:name w:val="toa heading"/><wx:uiName wx:val="TOA Heading"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOAHeading"/><w:spacing w:before="240" w:after="120"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:caps/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHeadL"><w:name w:val="RowHeadL"/><w:basedOn w:val="RowHead"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHeadL"/><w:spacing w:before="60" w:after="60"/><w:jc w:val="left"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b w:val="off"/><w:b-cs/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText11B"><w:name w:val="TableText11B"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00913874"/><w:pPr><w:pStyle w:val="TableText11B"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableofAuthorities"><w:name w:val="table of authorities"/><wx:uiName wx:val="Table of Authorities"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableofAuthorities"/><w:tabs><w:tab w:val="right" w:leader="dot" w:pos="8640"/></w:tabs><w:spacing w:before="80" w:after="80"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableofFigures"><w:name w:val="table of figures"/><wx:uiName wx:val="Table of Figures"/><w:next w:val="Normal"/><w:autoRedefine/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableofFigures"/><w:tabs><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:spacing w:before="60" w:after="60"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:styleId="Hyperlink"><w:name w:val="Hyperlink"/><w:basedOn w:val="DefaultParagraphFont"/><w:rsid w:val="00721F21"/><w:rPr><w:color w:val="0000FF"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="character" w:styleId="PageNumber"><w:name w:val="page number"/><wx:uiName wx:val="Page Number"/><w:basedOn w:val="DefaultParagraphFont"/><w:rsid w:val="00D90577"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:dstrike w:val="off"/><w:sz w:val="20"/><w:sz-cs w:val="20"/><w:vertAlign w:val="baseline"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHead11"><w:name w:val="RowHead11"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHead11"/><w:listPr><w:ilvl w:val="12"/></w:listPr><w:spacing w:before="80" w:after="80"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText11C"><w:name w:val="TableText11C"/><w:basedOn w:val="TableText11"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText11C"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl1"><w:name w:val="list:lvl 1"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl1"/><w:listPr><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="936"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="4320"/><w:tab w:val="left" w:pos="5040"/><w:tab w:val="left" w:pos="5760"/><w:tab w:val="left" w:pos="6480"/><w:tab w:val="left" w:pos="7200"/><w:tab w:val="left" w:pos="7920"/><w:tab w:val="left" w:pos="8640"/><w:tab w:val="left" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="60" w:after="60" w:line="240" w:line-rule="at-least"/><w:contextualSpacing/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Helvetica"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl5"><w:name w:val="list:lvl 5"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl5"/><w:listPr><w:ilvl w:val="4"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="360"/><w:tab w:val="clear" w:pos="720"/><w:tab w:val="clear" w:pos="1080"/><w:tab w:val="clear" w:pos="1440"/><w:tab w:val="clear" w:pos="1800"/><w:tab w:val="clear" w:pos="2160"/><w:tab w:val="clear" w:pos="2520"/><w:tab w:val="clear" w:pos="2880"/><w:tab w:val="clear" w:pos="3240"/><w:tab w:val="clear" w:pos="3600"/><w:tab w:val="left" w:pos="3384"/></w:tabs><w:spacing w:after="40"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl2"><w:name w:val="list:lvl 2"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl2"/><w:widowControl w:val="off"/><w:listPr><w:ilvl w:val="1"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="1440"/></w:tabs><w:spacing w:before="60" w:after="60" w:line="240" w:line-rule="at-least"/><w:contextualSpacing/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="AppendixTitle"><w:name w:val="Appendix Title"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="AppendixTitle"/><w:pageBreakBefore/><w:spacing w:before="120" w:after="240"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHead10"><w:name w:val="RowHead10"/><w:basedOn w:val="RowHead11"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHead10"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC1"><w:name w:val="toc 1"/><wx:uiName wx:val="TOC 1"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00003D10"/><w:pPr><w:pStyle w:val="TOC1"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="540"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:spacing w:before="240"/><w:ind w:left="547" w:hanging="547"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:caps/><w:noProof/><w:sz w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC2"><w:name w:val="toc 2"/><wx:uiName wx:val="TOC 2"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00003D10"/><w:pPr><w:pStyle w:val="TOC2"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="900"/><w:tab w:val="right" w:leader="dot" w:pos="9360"/></w:tabs><w:spacing w:before="120"/><w:ind w:left="907" w:hanging="720"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC3"><w:name w:val="toc 3"/><wx:uiName wx:val="TOC 3"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC3"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="1260"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="1260" w:hanging="900"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC4"><w:name w:val="toc 4"/><wx:uiName wx:val="TOC 4"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC4"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="1620"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="1620" w:hanging="1080"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC5"><w:name w:val="toc 5"/><wx:uiName wx:val="TOC 5"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC5"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="1980"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="1980" w:hanging="1260"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC6"><w:name w:val="toc 6"/><wx:uiName wx:val="TOC 6"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC6"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="2340"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="2340" w:hanging="1440"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC7"><w:name w:val="toc 7"/><wx:uiName wx:val="TOC 7"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC7"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="2700"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:spacing w:before="0" w:after="0" w:line="240" w:line-rule="auto"/><w:ind w:left="2700" w:hanging="1620"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC8"><w:name w:val="toc 8"/><wx:uiName wx:val="TOC 8"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC8"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="2970"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="2970" w:hanging="1710"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC9"><w:name w:val="toc 9"/><wx:uiName wx:val="TOC 9"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC9"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="3330"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="3330" w:hanging="1890"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="HeadingUnnumbered"><w:name w:val="Heading Unnumbered"/><w:next w:val="paranormal"/><w:autoRedefine/><w:rsid w:val="00107AA6"/><w:pPr><w:pStyle w:val="HeadingUnnumbered"/><w:keepNext/><w:keepLines/><w:spacing w:before="240" w:after="80"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="24"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10"><w:name w:val="TableText10"/><w:basedOn w:val="TableText11"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText10"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableTextBCentered"><w:name w:val="TableTextB Centered"/><w:basedOn w:val="Normal"/><w:rsid w:val="00913874"/><w:pPr><w:pStyle w:val="TableTextBCentered"/><w:spacing w:line="220" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10C"><w:name w:val="TableText10C"/><w:basedOn w:val="TableText11C"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText10C"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10B"><w:name w:val="TableText10B"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00913874"/><w:pPr><w:pStyle w:val="TableText10B"/><w:spacing w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="acronym"><w:name w:val="acronym"/><w:autoRedefine/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="acronym"/><w:tabs><w:tab w:val="left" w:pos="2160"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="40"/><w:ind w:left="2160" w:hanging="2160"/><w:jc w:val="both"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl6"><w:name w:val="list:lvl 6"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl6"/><w:listPr><w:ilvl w:val="5"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="360"/><w:tab w:val="clear" w:pos="720"/><w:tab w:val="clear" w:pos="1080"/><w:tab w:val="clear" w:pos="1440"/><w:tab w:val="clear" w:pos="1800"/><w:tab w:val="clear" w:pos="2160"/><w:tab w:val="clear" w:pos="2520"/><w:tab w:val="clear" w:pos="2880"/><w:tab w:val="clear" w:pos="3240"/><w:tab w:val="clear" w:pos="3600"/><w:tab w:val="clear" w:pos="3960"/><w:tab w:val="clear" w:pos="4320"/></w:tabs><w:spacing w:after="40"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="hdr1L"><w:name w:val="hdr1L"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="hdr1L"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="center" w:pos="4680"/><w:tab w:val="right" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="hdr2L"><w:name w:val="hdr2L"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="hdr2L"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="center" w:pos="4680"/><w:tab w:val="right" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="0" w:line="180" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bulletlvl1"><w:name w:val="bullet:lvl 1"/><w:basedOn w:val="Normal"/><w:link w:val="bulletlvl1CharChar"/><w:rsid w:val="00143D5A"/><w:pPr><w:pStyle w:val="bulletlvl1"/><w:listPr><w:ilfo w:val="1"/></w:listPr><w:spacing w:after="80"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bulletlvl2"><w:name w:val="bullet:lvl 2"/><w:basedOn w:val="Normal"/><w:rsid w:val="00143D5A"/><w:pPr><w:pStyle w:val="bulletlvl2"/><w:widowControl w:val="off"/><w:listPr><w:ilfo w:val="2"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="1224"/><w:tab w:val="left" w:pos="648"/><w:tab w:val="left" w:pos="1008"/></w:tabs><w:spacing w:after="80"/><w:ind w:left="1728" w:hanging="1080"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent4"><w:name w:val="para:indent4"/><w:basedOn w:val="paraindent3"/><w:autoRedefine/><w:rsid w:val="0071606D"/><w:pPr><w:pStyle w:val="paraindent4"/><w:ind w:left="1440"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl7"><w:name w:val="list:lvl 7"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl7"/><w:listPr><w:ilvl w:val="6"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="360"/><w:tab w:val="clear" w:pos="720"/><w:tab w:val="clear" w:pos="1080"/><w:tab w:val="clear" w:pos="1440"/><w:tab w:val="clear" w:pos="1800"/><w:tab w:val="clear" w:pos="2160"/><w:tab w:val="clear" w:pos="2520"/><w:tab w:val="clear" w:pos="2880"/><w:tab w:val="clear" w:pos="3240"/><w:tab w:val="clear" w:pos="3600"/><w:tab w:val="clear" w:pos="3960"/><w:tab w:val="left" w:pos="3024"/></w:tabs><w:spacing w:after="40"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOCfiguretitle"><w:name w:val="TOC:figure title"/><w:basedOn w:val="Caption"/><w:autoRedefine/><w:rsid w:val="00894991"/><w:pPr><w:pStyle w:val="TOCfiguretitle"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="note"><w:name w:val="note"/><w:basedOn w:val="Normal"/><w:rsid w:val="006E0AB6"/><w:pPr><w:pStyle w:val="note"/><w:spacing w:before="80" w:after="80"/><w:ind w:left="1656" w:right="720" w:hanging="936"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang2"><w:name w:val="req lang:2"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang2"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="720"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang3"><w:name w:val="req lang:3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang3"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="1080"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang4"><w:name w:val="req lang:4"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang4"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="1440"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang5"><w:name w:val="req lang:5"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang5"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="1800"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang6"><w:name w:val="req lang:6"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang6"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="2160"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="statedef"><w:name w:val="state def"/><w:basedOn w:val="Normal"/><w:rsid w:val="00DE6BA0"/><w:pPr><w:pStyle w:val="statedef"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="80" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:caps/><w:color w:val="408040"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="intentblank"><w:name w:val="intent:blank"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="000B79E8"/><w:pPr><w:pStyle w:val="intentblank"/><w:spacing w:before="6480" w:after="0"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="code"><w:name w:val="code"/><w:basedOn w:val="Normal"/><w:rsid w:val="006D4514"/><w:pPr><w:pStyle w:val="code"/><w:spacing w:before="80" w:after="80" w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="parapage"><w:name w:val="para:page"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00DD22A9"/><w:pPr><w:pStyle w:val="parapage"/><w:pageBreakBefore/><w:spacing w:before="80" w:after="80"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOCtabletitle"><w:name w:val="TOC:table title"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00B869CD"/><w:pPr><w:pStyle w:val="TOCtabletitle"/><w:spacing w:before="120" w:after="120"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RCRitem"><w:name w:val="RCR:item"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="007A1F4F"/><w:pPr><w:pStyle w:val="RCRitem"/><w:tabs><w:tab w:val="left" w:pos="1800"/></w:tabs><w:spacing w:before="120"/><w:ind w:left="1800" w:right="720" w:hanging="1800"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RCRheader"><w:name w:val="RCR:header"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="006D781E"/><w:pPr><w:pStyle w:val="RCRheader"/><w:tabs><w:tab w:val="left" w:pos="792"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="right" w:leader="underscore" w:pos="8640"/></w:tabs><w:spacing w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="22"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="line"><w:name w:val="line"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="006B63C2"/><w:pPr><w:pStyle w:val="line"/><w:spacing w:before="0" w:line="40" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="12"/><w:sz-cs w:val="12"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang7"><w:name w:val="req lang: 7"/><w:basedOn w:val="reqlang6"/><w:rsid w:val="00C0337E"/><w:pPr><w:pStyle w:val="reqlang7"/><w:ind w:left="2520"/></w:pPr><w:rPr><wx:font wx:val="Courier New"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang70"><w:name w:val="req lang:7"/><w:basedOn w:val="reqlang7"/><w:rsid w:val="004C603C"/><w:pPr><w:pStyle w:val="reqlang70"/></w:pPr><w:rPr><wx:font wx:val="Courier New"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang8"><w:name w:val="req lang:8"/><w:basedOn w:val="reqlang7"/><w:rsid w:val="004C603C"/><w:pPr><w:pStyle w:val="reqlang8"/><w:ind w:left="2880"/></w:pPr><w:rPr><wx:font wx:val="Courier New"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang9"><w:name w:val="req lang:9"/><w:basedOn w:val="Normal"/><w:rsid w:val="007534C9"/><w:pPr><w:pStyle w:val="reqlang9"/><w:spacing w:before="60" w:after="60"/><w:ind w:left="3240"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="DocumentMap"><w:name w:val="Document Map"/><w:basedOn w:val="Normal"/><w:semiHidden/><w:rsid w:val="00AF20CB"/><w:pPr><w:pStyle w:val="DocumentMap"/><w:shd w:val="clear" w:color="auto" w:fill="000080"/></w:pPr><w:rPr><w:rFonts w:ascii="Tahoma" w:h-ansi="Tahoma" w:cs="Tahoma"/><wx:font wx:val="Tahoma"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment1"><w:name w:val="comment:1"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment1"/><w:spacing w:before="60" w:after="60"/><w:ind w:left="360"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment2"><w:name w:val="comment:2"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment2"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="720"/><w:jc w:val="both"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:color w:val="FF0000"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment3"><w:name w:val="comment:3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment3"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="1080"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment4"><w:name w:val="comment:4"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment4"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="1440"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment5"><w:name w:val="comment:5"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment5"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="1800"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment6"><w:name w:val="comment:6"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment6"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="2160"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment7"><w:name w:val="comment:7"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment7"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="2520"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment8"><w:name w:val="comment:8"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment8"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="2880"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment9"><w:name w:val="comment:9"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment9"/><w:spacing w:after="80"/><w:ind w:left="3240"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlheader"><w:name w:val="dl:header"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlheader"/><w:spacing w:before="240" w:after="0"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier" w:h-ansi="Courier"/><wx:font wx:val="Courier"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlbody"><w:name w:val="dl:body"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlbody"/><w:spacing w:before="0"/><w:ind w:left="360"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlprocheader"><w:name w:val="dl_proc:header"/><w:basedOn w:val="dlbody"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlprocheader"/><w:spacing w:before="240"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlprocbody"><w:name w:val="dl_proc:body"/><w:basedOn w:val="dlprocheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlprocbody"/><w:spacing w:before="0"/><w:ind w:left="720"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dldescription"><w:name w:val="dl:description"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dldescription"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bitmapheader"><w:name w:val="bitmap:header"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="bitmapheader"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bitmapbody"><w:name w:val="bitmap:body"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="bitmapbody"/><w:spacing w:before="0"/></w:pPr><w:rPr><wx:font wx:val="Courier"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX1"><w:name w:val="APPENDIX 1"/><w:basedOn w:val="Normal"/><w:next w:val="paranormal"/><w:rsid w:val="004978C4"/><w:pPr><w:pStyle w:val="APPENDIX1"/><w:listPr><w:ilfo w:val="25"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="1440"/></w:tabs><w:spacing w:before="152" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:color w:val="auto"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX2"><w:name w:val="APPENDIX 2"/><w:basedOn w:val="APPENDIX1"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX2"/><w:listPr><w:ilvl w:val="1"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX3"><w:name w:val="APPENDIX 3"/><w:basedOn w:val="APPENDIX2"/><w:next w:val="paranormal"/><w:rsid w:val="00E904D2"/><w:pPr><w:pStyle w:val="APPENDIX3"/><w:listPr><w:ilvl w:val="2"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage18pt"><w:name w:val="Title Page 18pt"/><w:basedOn w:val="Normal"/><w:rsid w:val="0033770F"/><w:pPr><w:pStyle w:val="TitlePage18pt"/><w:spacing w:before="0" w:after="60" w:line="240" w:line-rule="auto"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:color w:val="auto"/><w:sz w:val="36"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage16pt"><w:name w:val="Title Page 16pt"/><w:basedOn w:val="TitlePage18pt"/><w:rsid w:val="0033770F"/><w:pPr><w:pStyle w:val="TitlePage16pt"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="32"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage14pt"><w:name w:val="Title Page 14pt"/><w:basedOn w:val="TitlePage16pt"/><w:rsid w:val="0033770F"/><w:pPr><w:pStyle w:val="TitlePage14pt"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b w:val="off"/><w:sz w:val="28"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para10pt"><w:name w:val="para 10pt"/><w:basedOn w:val="Normal"/><w:link w:val="para10ptChar"/><w:rsid w:val="004E3337"/><w:pPr><w:pStyle w:val="para10pt"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para10ptnospacing"><w:name w:val="para 10pt no spacing"/><w:basedOn w:val="para10pt"/><w:rsid w:val="004A1CCA"/><w:pPr><w:pStyle w:val="para10ptnospacing"/><w:spacing w:before="0" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10nospacing"><w:name w:val="TableText10 no spacing"/><w:basedOn w:val="TableText10"/><w:rsid w:val="00D72507"/><w:pPr><w:pStyle w:val="TableText10nospacing"/><w:spacing w:before="0" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para8pt"><w:name w:val="para 8pt"/><w:basedOn w:val="Normal"/><w:link w:val="para8ptChar"/><w:rsid w:val="004E3337"/><w:pPr><w:pStyle w:val="para8pt"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="16"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="paranormalChar"><w:name w:val="para:normal Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="paranormal"/><w:rsid w:val="00C93CA3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:b-cs/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:styleId="bulletlvl1CharChar"><w:name w:val="bullet:lvl 1 Char Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="bulletlvl1"/><w:rsid w:val="00C93CA3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="ParagraphText"><w:name w:val="ParagraphText"/><w:basedOn w:val="Normal"/><w:rsid w:val="00C93CA3"/><w:pPr><w:pStyle w:val="ParagraphText"/><w:spacing w:before="0" w:after="120" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/><wx:font wx:val="Times New Roman"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl10"><w:name w:val="list lvl 1"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl10"/><w:listPr><w:ilfo w:val="9"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="936"/></w:tabs><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX4"><w:name w:val="APPENDIX 4"/><w:basedOn w:val="APPENDIX3"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX4"/><w:listPr><w:ilvl w:val="3"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX5"><w:name w:val="APPENDIX 5"/><w:basedOn w:val="APPENDIX4"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX5"/><w:listPr><w:ilvl w:val="4"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX6"><w:name w:val="APPENDIX 6"/><w:basedOn w:val="APPENDIX5"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX6"/><w:listPr><w:ilvl w:val="5"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX7"><w:name w:val="APPENDIX 7"/><w:basedOn w:val="APPENDIX6"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX7"/><w:listPr><w:ilvl w:val="6"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX8"><w:name w:val="APPENDIX 8"/><w:basedOn w:val="APPENDIX7"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX8"/><w:listPr><w:ilvl w:val="7"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX9"><w:name w:val="APPENDIX 9"/><w:basedOn w:val="APPENDIX8"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX9"/><w:listPr><w:ilvl w:val="8"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="BalloonText"><w:name w:val="Balloon Text"/><w:basedOn w:val="Normal"/><w:semiHidden/><w:rsid w:val="00B47E5D"/><w:pPr><w:pStyle w:val="BalloonText"/></w:pPr><w:rPr><w:rFonts w:ascii="Tahoma" w:h-ansi="Tahoma" w:cs="Tahoma"/><wx:font wx:val="Tahoma"/><w:sz w:val="16"/><w:sz-cs w:val="16"/></w:rPr></w:style><w:style w:type="list" w:styleId="listreset"><w:name w:val="listreset"/><w:basedOn w:val="NoList"/><w:rsid w:val="00D25E39"/><w:pPr><w:listPr><w:ilfo w:val="26"/></w:listPr></w:pPr></w:style><w:style w:type="paragraph" w:styleId="bulletlvl3"><w:name w:val="bullet:lvl 3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00EF5226"/><w:pPr><w:pStyle w:val="bulletlvl3"/><w:listPr><w:ilfo w:val="28"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="3024"/><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="1008"/></w:tabs><w:spacing w:after="80"/><w:ind w:left="1368" w:hanging="360"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="character" w:styleId="CommentReference"><w:name w:val="annotation reference"/><wx:uiName wx:val="Comment Reference"/><w:basedOn w:val="DefaultParagraphFont"/><w:semiHidden/><w:rsid w:val="00E40969"/><w:rPr><w:sz w:val="16"/><w:sz-cs w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CommentText"><w:name w:val="annotation text"/><wx:uiName wx:val="Comment Text"/><w:basedOn w:val="Normal"/><w:semiHidden/><w:rsid w:val="00E40969"/><w:pPr><w:pStyle w:val="CommentText"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CommentSubject"><w:name w:val="annotation subject"/><wx:uiName wx:val="Comment Subject"/><w:basedOn w:val="CommentText"/><w:next w:val="CommentText"/><w:semiHidden/><w:rsid w:val="00E40969"/><w:pPr><w:pStyle w:val="CommentSubject"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:b-cs/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage22pt"><w:name w:val="Title Page 22pt"/><w:basedOn w:val="TitlePage16pt"/><w:rsid w:val="005F35C4"/><w:pPr><w:pStyle w:val="TitlePage22pt"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="44"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para"><w:name w:val="para"/><w:basedOn w:val="Normal"/><w:link w:val="paraChar"/><w:rsid w:val="0057061B"/><w:pPr><w:pStyle w:val="para"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="paraChar"><w:name w:val="para Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="para"/><w:rsid w:val="0057061B"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl20"><w:name w:val="list lvl 2"/><w:basedOn w:val="ListNumber3"/><w:rsid w:val="0057061B"/><w:pPr><w:pStyle w:val="listlvl20"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="ListNumber3"><w:name w:val="List Number 3"/><w:basedOn w:val="Normal"/><w:rsid w:val="0057061B"/><w:pPr><w:pStyle w:val="ListNumber3"/><w:tabs><w:tab w:val="list" w:pos="1512"/></w:tabs><w:ind w:left="1512" w:hanging="504"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="table" w:styleId="TableGrid"><w:name w:val="Table Grid"/><w:basedOn w:val="TableNormal"/><w:rsid w:val="008B1AB7"/><w:pPr><w:spacing w:before="40" w:after="40" w:line="240" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblBorders><w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/></w:tblBorders><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="character" w:styleId="para8ptChar"><w:name w:val="para 8pt Char"/><w:basedOn w:val="paraChar"/><w:link w:val="para8pt"/><w:rsid w:val="007921D3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="16"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para8ptunderline"><w:name w:val="para 8pt underline"/><w:basedOn w:val="para8pt"/><w:link w:val="para8ptunderlineChar"/><w:rsid w:val="007921D3"/><w:pPr><w:pStyle w:val="para8ptunderline"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="character" w:styleId="para8ptunderlineChar"><w:name w:val="para 8pt underline Char"/><w:basedOn w:val="para8ptChar"/><w:link w:val="para8ptunderline"/><w:rsid w:val="007921D3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="16"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para8ptnospacing"><w:name w:val="para 8pt no spacing"/><w:basedOn w:val="para8pt"/><w:rsid w:val="007921D3"/><w:pPr><w:pStyle w:val="para8ptnospacing"/><w:spacing w:before="0" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl0"><w:name w:val="list lvl 0"/><w:basedOn w:val="ListNumber"/><w:rsid w:val="00A233DA"/><w:pPr><w:pStyle w:val="listlvl0"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="ListNumber"><w:name w:val="List Number"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A233DA"/><w:pPr><w:pStyle w:val="ListNumber"/><w:tabs><w:tab w:val="list" w:pos="504"/></w:tabs><w:ind w:left="504" w:hanging="504"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="character" w:styleId="para10ptChar"><w:name w:val="para 10pt Char"/><w:basedOn w:val="paraChar"/><w:link w:val="para10pt"/><w:rsid w:val="0015054E"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:styleId="FollowedHyperlink"><w:name w:val="FollowedHyperlink"/><w:basedOn w:val="DefaultParagraphFont"/><w:rsid w:val="00B8047C"/><w:rPr><w:color w:val="800080"/><w:u w:val="single"/></w:rPr></w:style></w:styles><w:shapeDefaults><o:shapedefaults v:ext="edit" spidmax="29698"/><o:shapelayout v:ext="edit"><o:idmap v:ext="edit" data="1"/></o:shapelayout></w:shapeDefaults><w:docPr><w:view w:val="print"/><w:zoom w:percent="100"/><w:displayBackgroundShape/><w:doNotEmbedSystemFonts/><w:bordersDontSurroundHeader/><w:bordersDontSurroundFooter/><w:attachedTemplate w:val=""/><w:stylePaneFormatFilter w:val="3001"/><w:documentProtection w:formatting="on" w:enforcement="on" w:unprotectPassword="00000000"/><w:defaultTabStop w:val="720"/><w:doNotHyphenateCaps/><w:drawingGridHorizontalSpacing w:val="120"/><w:drawingGridVerticalSpacing w:val="120"/><w:displayHorizontalDrawingGridEvery w:val="0"/><w:displayVerticalDrawingGridEvery w:val="3"/><w:useMarginsForDrawingGridOrigin/><w:doNotShadeFormData/><w:punctuationKerning/><w:characterSpacingControl w:val="CompressPunctuation"/><w:optimizeForBrowser/><w:validateAgainstSchema w:val="off"/><w:saveInvalidXML/><w:ignoreMixedContent w:val="off"/><w:alwaysShowPlaceholderText w:val="off"/><w:hdrShapeDefaults><o:shapedefaults v:ext="edit" spidmax="29698"/></w:hdrShapeDefaults><w:footnotePr><w:footnote w:type="separator"><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"><w:r><w:separator/></w:r></w:p><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/></w:footnote><w:footnote w:type="continuation-separator"><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"><w:r><w:continuationSeparator/></w:r></w:p><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/></w:footnote></w:footnotePr><w:endnotePr><w:endnote w:type="separator"><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"><w:r><w:separator/></w:r></w:p><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/></w:endnote><w:endnote w:type="continuation-separator"><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"><w:r><w:continuationSeparator/></w:r></w:p><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/><w:p wsp:rsidR="006B4298" wsp:rsidRDefault="006B4298"/></w:endnote></w:endnotePr><w:compat><w:footnoteLayoutLikeWW8/><w:shapeLayoutLikeWW8/><w:alignTablesRowByRow/><w:forgetLastTabAlignment/><w:doNotUseHTMLParagraphAutoSpacing/><w:layoutRawTableWidth/><w:layoutTableRowsApart/><w:useWord97LineBreakingRules/><w:dontAllowFieldEndSelect/><w:useWord2002TableStyleRules/></w:compat><wsp:rsids><wsp:rsidRoot wsp:val="00244327"/><wsp:rsid wsp:val="00244327"/><wsp:rsid wsp:val="006B4298"/><wsp:rsid wsp:val="00C02320"/><wsp:rsid wsp:val="00DD07E7"/></wsp:rsids></w:docPr><w:body><wx:sect><ns0:Artifact><w:p wsp:rsidR="00DD07E7" wsp:rsidRDefault="00DD07E7"><Set_Name><w:r wsp:rsidR="006B4298"><w:t>Default</w:t></w:r></Set_Name><Outline><HeadingAttribute><w:r wsp:rsidR="006B4298"><w:t>Name</w:t></w:r></HeadingAttribute><RecurseChildren><w:r wsp:rsidR="006B4298"><w:t>true</w:t></w:r></RecurseChildren></Outline><Attribute><Name><w:r wsp:rsidR="00C02320" wsp:rsidRPr="00C02320"><w:t>Word Template Content</w:t></w:r></Name></Attribute></w:p></ns0:Artifact><w:p wsp:rsidR="00DD07E7" wsp:rsidRDefault="00DD07E7"/><w:sectPr wsp:rsidR="00DD07E7" wsp:rsidSect="00DD07E7"><w:hdr w:type="odd"><w:p wsp:rsidR="00DD07E7" wsp:rsidRDefault="00DD07E7"><w:pPr><w:pStyle w:val="Header"/></w:pPr></w:p></w:hdr><w:pgSz w:w="12240" w:h="15840" w:code="1"/><w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="432" w:footer="432" w:gutter="0"/><w:pgNumType w:start="1"/><w:cols w:space="475"/><w:noEndnote/></w:sectPr></wx:sect></w:body></w:wordDocument> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW_ALL.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW_ALL.xml
new file mode 100644
index 00000000000..72468b8bf77
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW_ALL.xml
@@ -0,0 +1,7688 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?mso-application progid="Word.Document"?>
+<w:wordDocument w:embeddedObjPresent="no" w:macrosPresent="no" w:ocxPresent="no" xml:space="preserve" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:ns0="http://www.w3.org/2001/XMLSchema" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint">
+ <w:ignoreElements w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/>
+ <o:DocumentProperties>
+ <o:Title>SRS</o:Title>
+ <o:Author>Ryan D. Brooks</o:Author>
+ <o:LastAuthor>b289820</o:LastAuthor>
+ <o:Revision>14</o:Revision>
+ <o:TotalTime>1282</o:TotalTime>
+ <o:LastPrinted>2007-03-22T22:27:00Z</o:LastPrinted>
+ <o:Created>2007-04-21T15:49:00Z</o:Created>
+ <o:LastSaved>2008-01-15T18:48:00Z</o:LastSaved>
+ <o:Pages>1</o:Pages>
+ <o:Words>4</o:Words>
+ <o:Characters>29</o:Characters>
+ <o:Company>The Boeing Company</o:Company>
+ <o:Lines>1</o:Lines>
+ <o:Paragraphs>1</o:Paragraphs>
+ <o:CharactersWithSpaces>32</o:CharactersWithSpaces>
+ <o:Version>11.8134</o:Version>
+ </o:DocumentProperties>
+ <w:fonts>
+ <w:defaultFonts w:ascii="Times New Roman" w:cs="Times New Roman" w:fareast="Times New Roman" w:h-ansi="Times New Roman"/>
+ <w:font w:name="Helvetica">
+ <w:panose-1 w:val="020B0604020202020204"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="Swiss"/>
+ <w:notTrueType/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:csb-0="00000001" w:csb-1="00000000" w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000"/>
+ </w:font>
+ <w:font w:name="Courier">
+ <w:panose-1 w:val="02070409020205020404"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="Modern"/>
+ <w:notTrueType/>
+ <w:pitch w:val="fixed"/>
+ <w:sig w:csb-0="00000001" w:csb-1="00000000" w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000"/>
+ </w:font>
+ <w:font w:name="Wingdings">
+ <w:panose-1 w:val="05000000000000000000"/>
+ <w:charset w:val="02"/>
+ <w:family w:val="Auto"/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:csb-0="80000000" w:csb-1="00000000" w:usb-0="00000000" w:usb-1="10000000" w:usb-2="00000000" w:usb-3="00000000"/>
+ </w:font>
+ <w:font w:name="Tahoma">
+ <w:panose-1 w:val="020B0604030504040204"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="Swiss"/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:csb-0="000101FF" w:csb-1="00000000" w:usb-0="61007A87" w:usb-1="80000000" w:usb-2="00000008" w:usb-3="00000000"/>
+ </w:font>
+ </w:fonts>
+ <w:lists>
+ <w:listDef w:listDefId="0">
+ <w:lsid w:val="FFFFFF7C"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="D440384C"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="1">
+ <w:lsid w:val="FFFFFF7D"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="6820FC02"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="2">
+ <w:lsid w:val="FFFFFF7F"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="2B10698A"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="3">
+ <w:lsid w:val="FFFFFF80"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="F4645DBA"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="4">
+ <w:lsid w:val="FFFFFF81"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="B29CAA58"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="5">
+ <w:lsid w:val="FFFFFF82"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="6C206602"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="6">
+ <w:lsid w:val="FFFFFF83"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="3ED012C8"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="7">
+ <w:lsid w:val="FFFFFF89"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="EE3C3A12"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="8">
+ <w:lsid w:val="003A6350"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="F89E6E26"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:pStyle w:val="APPENDIX1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX2"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX4"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX5"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX6"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX7"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX8"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX9"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="9">
+ <w:lsid w:val="016D5431"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="98C65BCE"/>
+ <w:lvl w:ilvl="0" w:tplc="94D2C566">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="504" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="504" w:left="504"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%4."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%5."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3600"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%6."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="4320"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5040" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5040"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5760" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5760"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6480" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="6480"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="10">
+ <w:lsid w:val="0C4D206D"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="4B543E40"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="11">
+ <w:lsid w:val="0DE40F2C"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="12">
+ <w:lsid w:val="10AF29E5"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="7520DAAE"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="13">
+ <w:lsid w:val="15EB1725"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="D902A83E"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="14">
+ <w:lsid w:val="1C970BBA"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="5EB82E3A"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="15">
+ <w:lsid w:val="1D6C5FCC"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="E710F038"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:lvlText w:val="APPENDIX %1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="0"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="1440"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="16">
+ <w:lsid w:val="1EC51BCC"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="17">
+ <w:lsid w:val="256F5D56"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="EAC4E6B8"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="18">
+ <w:lsid w:val="27437854"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="19">
+ <w:lsid w:val="290A1130"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="EAC4E6B8"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="20">
+ <w:lsid w:val="299E4F07"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="46E2B8B2"/>
+ <w:lvl w:ilvl="0" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1512" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="504" w:left="1512"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%4."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%5."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3600"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%6."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="4320"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5040" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5040"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5760" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5760"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6480" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="6480"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="21">
+ <w:lsid w:val="29C240FD"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="FCA4DC08"/>
+ <w:lvl w:ilvl="0" w:tplc="B5146A3E">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:pStyle w:val="bulletlvl2"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1224" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1224"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tplc="04090019">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tentative="on" w:tplc="0409001B">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="0409000F">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%4."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="04090019">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%5."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3600"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="0409001B">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%6."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="4320"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="0409000F">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5040" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5040"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="04090019">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5760" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5760"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="0409001B">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6480" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="6480"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="22">
+ <w:lsid w:val="29CA5728"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="D00252C6"/>
+ <w:lvl w:ilvl="0" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:lvlText w:val="%1"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%4."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%5."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3600"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%6."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="4320"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5040" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5040"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5760" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5760"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6480" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="6480"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="23">
+ <w:lsid w:val="2A5411A0"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0D44492C"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading2"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading4"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading5"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading6"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading7"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading8"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading9"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="24">
+ <w:lsid w:val="2B1C06F5"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="3B98963A"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="25">
+ <w:lsid w:val="2B477730"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="33801DC4"/>
+ <w:lvl w:ilvl="0" w:tplc="2D8A4B4C">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:pStyle w:val="bulletlvl3"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3024" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="2016" w:left="3024"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2448" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2448"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:cs="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3168" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3168"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3888" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3888"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4608" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="4608"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:cs="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5328" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5328"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6048" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="6048"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6768" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="6768"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:cs="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="7488" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="7488"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="26">
+ <w:lsid w:val="2B5B6B3C"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="5CC8E874"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:first-line="763" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="27">
+ <w:lsid w:val="2D6545A6"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="3F227848"/>
+ <w:name w:val="listreset"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:pStyle w:val="listlvl1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1296" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1296"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ <w:b w:val="off"/>
+ <w:i w:val="off"/>
+ <w:caps w:val="off"/>
+ <w:strike w:val="off"/>
+ <w:dstrike w:val="off"/>
+ <w:outline w:val="off"/>
+ <w:shadow w:val="off"/>
+ <w:emboss w:val="off"/>
+ <w:imprint w:val="off"/>
+ <w:vanish w:val="off"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:vertAlign w:val="baseline"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="listlvl2"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="-31680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1656"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:pStyle w:val="listlvl3"/>
+ <w:lvlText w:val="(%3)."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2016" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2016"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="listlvl4"/>
+ <w:lvlText w:val="(%4)."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2376" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2376"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:pStyle w:val="listlvl5"/>
+ <w:lvlText w:val="%5)."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2736" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="listlvl6"/>
+ <w:lvlText w:val="%6)."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3096" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3096"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:hint="default"/>
+ <w:b w:val="off"/>
+ <w:i w:val="off"/>
+ <w:sz w:val="22"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:pStyle w:val="listlvl7"/>
+ <w:lvlText w:val="[%7]."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3456" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3456"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="[%8]."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="28">
+ <w:lsid w:val="308239DA"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="29">
+ <w:lsid w:val="31A252E6"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="A9D83578"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="30">
+ <w:lsid w:val="37365033"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="31">
+ <w:lsid w:val="3B97448F"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:name w:val="listrestart2"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="32">
+ <w:lsid w:val="3C165F4A"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="79A06FE6"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="33">
+ <w:lsid w:val="42BB3748"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="DBE464B0"/>
+ <w:lvl w:ilvl="0" w:tplc="26BAF6B0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:pStyle w:val="bulletlvl1"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="648" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="648"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3960"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="4680"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5400"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="6120"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6840" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="6840"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="34">
+ <w:lsid w:val="5A401749"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="CD8E61CE"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="35">
+ <w:lsid w:val="5A802BC9"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="CB0E7A2E"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="36">
+ <w:lsid w:val="5C3B1B76"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="CB0E7A2E"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="37">
+ <w:lsid w:val="5E371EBB"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="DA56D440"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="38">
+ <w:lsid w:val="60B71688"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="5EA20814"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="39">
+ <w:lsid w:val="6389497B"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="AC5A6410"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="listlvl10"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="1080"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2520"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3960"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5040" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4680"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5760" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5400"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6480" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="6120"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="40">
+ <w:lsid w:val="6469691A"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="E5D02024"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="41">
+ <w:lsid w:val="74BA49AE"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:name w:val="listrestart"/>
+ <w:styleLink w:val="listreset"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="42">
+ <w:lsid w:val="751E50EA"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="79E6FEDC"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="43">
+ <w:lsid w:val="7D9D3B47"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="44">
+ <w:lsid w:val="7F0F313D"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="F8FC63EE"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="45">
+ <w:lsid w:val="7F633FB7"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="5F5A52E8"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:list w:ilfo="1">
+ <w:ilst w:val="33"/>
+ </w:list>
+ <w:list w:ilfo="2">
+ <w:ilst w:val="21"/>
+ </w:list>
+ <w:list w:ilfo="3">
+ <w:ilst w:val="27"/>
+ </w:list>
+ <w:list w:ilfo="4">
+ <w:ilst w:val="23"/>
+ </w:list>
+ <w:list w:ilfo="5">
+ <w:ilst w:val="14"/>
+ </w:list>
+ <w:list w:ilfo="6">
+ <w:ilst w:val="35"/>
+ </w:list>
+ <w:list w:ilfo="7">
+ <w:ilst w:val="13"/>
+ </w:list>
+ <w:list w:ilfo="8">
+ <w:ilst w:val="22"/>
+ </w:list>
+ <w:list w:ilfo="9">
+ <w:ilst w:val="39"/>
+ </w:list>
+ <w:list w:ilfo="10">
+ <w:ilst w:val="15"/>
+ </w:list>
+ <w:list w:ilfo="11">
+ <w:ilst w:val="27"/>
+ </w:list>
+ <w:list w:ilfo="12">
+ <w:ilst w:val="36"/>
+ </w:list>
+ <w:list w:ilfo="13">
+ <w:ilst w:val="44"/>
+ </w:list>
+ <w:list w:ilfo="14">
+ <w:ilst w:val="10"/>
+ </w:list>
+ <w:list w:ilfo="15">
+ <w:ilst w:val="37"/>
+ </w:list>
+ <w:list w:ilfo="16">
+ <w:ilst w:val="26"/>
+ </w:list>
+ <w:list w:ilfo="17">
+ <w:ilst w:val="40"/>
+ </w:list>
+ <w:list w:ilfo="18">
+ <w:ilst w:val="12"/>
+ </w:list>
+ <w:list w:ilfo="19">
+ <w:ilst w:val="29"/>
+ </w:list>
+ <w:list w:ilfo="20">
+ <w:ilst w:val="24"/>
+ </w:list>
+ <w:list w:ilfo="21">
+ <w:ilst w:val="45"/>
+ </w:list>
+ <w:list w:ilfo="22">
+ <w:ilst w:val="32"/>
+ </w:list>
+ <w:list w:ilfo="23">
+ <w:ilst w:val="34"/>
+ </w:list>
+ <w:list w:ilfo="24">
+ <w:ilst w:val="42"/>
+ </w:list>
+ <w:list w:ilfo="25">
+ <w:ilst w:val="8"/>
+ </w:list>
+ <w:list w:ilfo="26">
+ <w:ilst w:val="41"/>
+ </w:list>
+ <w:list w:ilfo="27">
+ <w:ilst w:val="31"/>
+ </w:list>
+ <w:list w:ilfo="28">
+ <w:ilst w:val="25"/>
+ </w:list>
+ <w:list w:ilfo="29">
+ <w:ilst w:val="28"/>
+ </w:list>
+ <w:list w:ilfo="30">
+ <w:ilst w:val="27"/>
+ <w:lvlOverride w:ilvl="0">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="1">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="2">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="3">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="4">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="5">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="6">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="7">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="8">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ </w:list>
+ <w:list w:ilfo="31">
+ <w:ilst w:val="20"/>
+ </w:list>
+ <w:list w:ilfo="32">
+ <w:ilst w:val="9"/>
+ </w:list>
+ <w:list w:ilfo="33">
+ <w:ilst w:val="43"/>
+ </w:list>
+ <w:list w:ilfo="34">
+ <w:ilst w:val="16"/>
+ </w:list>
+ <w:list w:ilfo="35">
+ <w:ilst w:val="38"/>
+ </w:list>
+ <w:list w:ilfo="36">
+ <w:ilst w:val="23"/>
+ </w:list>
+ <w:list w:ilfo="37">
+ <w:ilst w:val="19"/>
+ </w:list>
+ <w:list w:ilfo="38">
+ <w:ilst w:val="17"/>
+ </w:list>
+ <w:list w:ilfo="39">
+ <w:ilst w:val="11"/>
+ </w:list>
+ <w:list w:ilfo="40">
+ <w:ilst w:val="7"/>
+ </w:list>
+ <w:list w:ilfo="41">
+ <w:ilst w:val="6"/>
+ </w:list>
+ <w:list w:ilfo="42">
+ <w:ilst w:val="5"/>
+ </w:list>
+ <w:list w:ilfo="43">
+ <w:ilst w:val="4"/>
+ </w:list>
+ <w:list w:ilfo="44">
+ <w:ilst w:val="3"/>
+ </w:list>
+ <w:list w:ilfo="45">
+ <w:ilst w:val="2"/>
+ </w:list>
+ <w:list w:ilfo="46">
+ <w:ilst w:val="1"/>
+ </w:list>
+ <w:list w:ilfo="47">
+ <w:ilst w:val="0"/>
+ </w:list>
+ <w:list w:ilfo="48">
+ <w:ilst w:val="30"/>
+ </w:list>
+ <w:list w:ilfo="49">
+ <w:ilst w:val="18"/>
+ </w:list>
+ <w:ilfoMacAtCleanup w:val="5"/>
+ </w:lists>
+ <w:styles>
+ <w:versionOfBuiltInStylenames w:val="4"/>
+ <w:latentStyles w:defLockedState="off" w:latentStyleCount="156"/>
+ <w:style w:default="on" w:styleId="Normal" w:type="paragraph">
+ <w:name w:val="Normal"/>
+ <w:rsid w:val="00C93CA3"/>
+ <w:pPr>
+ <w:spacing w:after="40" w:before="40" w:line="240" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="000000"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading1" w:type="paragraph">
+ <w:name w:val="heading 1"/>
+ <wx:uiName wx:val="Heading 1"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="00B64BB6"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading1"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:pageBreakBefore/>
+ <w:listPr>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="0"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:kern w:val="28"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading2" w:type="paragraph">
+ <w:name w:val="heading 2"/>
+ <wx:uiName wx:val="Heading 2"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="00B64BB6"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading2"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="1"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="320"/>
+ <w:outlineLvl w:val="1"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading3" w:type="paragraph">
+ <w:name w:val="heading 3"/>
+ <wx:uiName wx:val="Heading 3"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="00B64BB6"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading3"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="2"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="900" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="80" w:before="320"/>
+ <w:outlineLvl w:val="2"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading4" w:type="paragraph">
+ <w:name w:val="heading 4"/>
+ <wx:uiName wx:val="Heading 4"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="00B64BB6"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading4"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="3"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="3"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading5" w:type="paragraph">
+ <w:name w:val="heading 5"/>
+ <wx:uiName wx:val="Heading 5"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="00B64BB6"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading5"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="4"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="4"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading6" w:type="paragraph">
+ <w:name w:val="heading 6"/>
+ <wx:uiName wx:val="Heading 6"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="00B64BB6"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading6"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="5"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="5"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading7" w:type="paragraph">
+ <w:name w:val="heading 7"/>
+ <wx:uiName wx:val="Heading 7"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="00B64BB6"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading7"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="6"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="1620" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="6"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:color w:val="000000"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading8" w:type="paragraph">
+ <w:name w:val="heading 8"/>
+ <wx:uiName wx:val="Heading 8"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="00B64BB6"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading8"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="7"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="7"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:b-cs/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading9" w:type="paragraph">
+ <w:name w:val="heading 9"/>
+ <wx:uiName wx:val="Heading 9"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="00B64BB6"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading9"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="8"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="8"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:color w:val="000000"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:default="on" w:styleId="DefaultParagraphFont" w:type="character">
+ <w:name w:val="Default Paragraph Font"/>
+ <w:semiHidden/>
+ </w:style>
+ <w:style w:default="on" w:styleId="TableNormal" w:type="table">
+ <w:name w:val="Normal Table"/>
+ <wx:uiName wx:val="Table Normal"/>
+ <w:semiHidden/>
+ <w:rPr>
+ <wx:font wx:val="Times New Roman"/>
+ </w:rPr>
+ <w:tblPr>
+ <w:tblInd w:type="dxa" w:w="0"/>
+ <w:tblCellMar>
+ <w:top w:type="dxa" w:w="0"/>
+ <w:left w:type="dxa" w:w="108"/>
+ <w:bottom w:type="dxa" w:w="0"/>
+ <w:right w:type="dxa" w:w="108"/>
+ </w:tblCellMar>
+ </w:tblPr>
+ </w:style>
+ <w:style w:default="on" w:styleId="NoList" w:type="list">
+ <w:name w:val="No List"/>
+ <w:semiHidden/>
+ </w:style>
+ <w:style w:styleId="paranormal" w:type="paragraph">
+ <w:name w:val="para:normal"/>
+ <w:link w:val="paranormalChar"/>
+ <w:rsid w:val="009E6B3D"/>
+ <w:pPr>
+ <w:pStyle w:val="paranormal"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ <w:tab w:pos="1440" w:val="left"/>
+ <w:tab w:pos="1800" w:val="left"/>
+ <w:tab w:pos="2160" w:val="left"/>
+ <w:tab w:pos="2520" w:val="left"/>
+ <w:tab w:pos="2880" w:val="left"/>
+ <w:tab w:pos="3240" w:val="left"/>
+ <w:tab w:pos="3600" w:val="left"/>
+ <w:tab w:pos="3960" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="64" w:line="240" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b-cs/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl3" w:type="paragraph">
+ <w:name w:val="list:lvl 3"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl3"/>
+ <w:listPr>
+ <w:ilvl w:val="2"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="2088" w:val="left"/>
+ </w:tabs>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang1" w:type="paragraph">
+ <w:name w:val="req lang:1"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang1"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Header" w:type="paragraph">
+ <w:name w:val="header"/>
+ <wx:uiName wx:val="Header"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00A134C3"/>
+ <w:pPr>
+ <w:pStyle w:val="Header"/>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="center"/>
+ <w:tab w:pos="8640" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:after="0" w:before="20" w:line="180" w:line-rule="at-least"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="proprietarycontd" w:type="paragraph">
+ <w:name w:val="proprietary:cont'd"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="proprietarycontd"/>
+ <w:tabs>
+ <w:tab w:pos="0" w:val="left"/>
+ <w:tab w:pos="1440" w:val="left"/>
+ <w:tab w:pos="2880" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="60" w:before="60" w:line="200" w:line-rule="at-least"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="16"/>
+ <w:sz-cs w:val="16"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paracentered" w:type="paragraph">
+ <w:name w:val="para:centered"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00B43482"/>
+ <w:pPr>
+ <w:pStyle w:val="paracentered"/>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="80" w:line="240" w:line-rule="at-least"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Helvetica" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paraindent2" w:type="paragraph">
+ <w:name w:val="para:indent2"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="004417BE"/>
+ <w:pPr>
+ <w:pStyle w:val="paraindent2"/>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1440" w:val="left"/>
+ <w:tab w:pos="2160" w:val="left"/>
+ <w:tab w:pos="2880" w:val="left"/>
+ <w:tab w:pos="3600" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ <w:tab w:pos="5040" w:val="left"/>
+ <w:tab w:pos="5760" w:val="left"/>
+ <w:tab w:pos="6480" w:val="left"/>
+ <w:tab w:pos="7200" w:val="left"/>
+ <w:tab w:pos="7920" w:val="left"/>
+ <w:tab w:pos="8640" w:val="left"/>
+ <w:tab w:pos="9360" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="40" w:line="240" w:line-rule="at-least"/>
+ <w:ind w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paraindent3" w:type="paragraph">
+ <w:name w:val="para:indent3"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="0071606D"/>
+ <w:pPr>
+ <w:pStyle w:val="paraindent3"/>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="left"/>
+ <w:tab w:pos="1800" w:val="left"/>
+ <w:tab w:pos="2520" w:val="left"/>
+ <w:tab w:pos="3240" w:val="left"/>
+ <w:tab w:pos="3960" w:val="left"/>
+ <w:tab w:pos="4680" w:val="left"/>
+ <w:tab w:pos="5400" w:val="left"/>
+ <w:tab w:pos="6120" w:val="left"/>
+ <w:tab w:pos="6840" w:val="left"/>
+ <w:tab w:pos="7560" w:val="left"/>
+ <w:tab w:pos="8280" w:val="left"/>
+ <w:tab w:pos="9000" w:val="left"/>
+ <w:tab w:pos="9720" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="40" w:line="240" w:line-rule="at-least"/>
+ <w:ind w:left="1080"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Caption" w:type="paragraph">
+ <w:name w:val="caption"/>
+ <wx:uiName wx:val="Caption"/>
+ <w:basedOn w:val="Normal"/>
+ <w:next w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:semiHidden/>
+ <w:rsid w:val="0085234B"/>
+ <w:pPr>
+ <w:pStyle w:val="Caption"/>
+ <w:tabs>
+ <w:tab w:pos="0" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ <w:tab w:pos="2160" w:val="left"/>
+ <w:tab w:pos="3240" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ <w:tab w:pos="5400" w:val="left"/>
+ <w:tab w:pos="6480" w:val="left"/>
+ <w:tab w:pos="7560" w:val="left"/>
+ <w:tab w:pos="8640" w:val="left"/>
+ <w:tab w:pos="9720" w:val="left"/>
+ <w:tab w:pos="10800" w:val="left"/>
+ <w:tab w:pos="11880" w:val="left"/>
+ <w:tab w:pos="12960" w:val="left"/>
+ <w:tab w:pos="14040" w:val="left"/>
+ <w:tab w:pos="15120" w:val="left"/>
+ <w:tab w:pos="16200" w:val="left"/>
+ <w:tab w:pos="17280" w:val="left"/>
+ <w:tab w:pos="18360" w:val="left"/>
+ <w:tab w:pos="19440" w:val="left"/>
+ <w:tab w:pos="20520" w:val="left"/>
+ <w:tab w:pos="21600" w:val="left"/>
+ <w:tab w:pos="22680" w:val="left"/>
+ <w:tab w:pos="23760" w:val="left"/>
+ <w:tab w:pos="24840" w:val="left"/>
+ <w:tab w:pos="25920" w:val="left"/>
+ <w:tab w:pos="27000" w:val="left"/>
+ <w:tab w:pos="28080" w:val="left"/>
+ <w:tab w:pos="29160" w:val="left"/>
+ <w:tab w:pos="30240" w:val="left"/>
+ <w:tab w:pos="31320" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="120" w:before="120"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paraindent1" w:type="paragraph">
+ <w:name w:val="para:indent1"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="007D424E"/>
+ <w:pPr>
+ <w:pStyle w:val="paraindent1"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ <w:tab w:pos="1800" w:val="left"/>
+ <w:tab w:pos="2520" w:val="left"/>
+ <w:tab w:pos="3240" w:val="left"/>
+ <w:tab w:pos="3960" w:val="left"/>
+ <w:tab w:pos="4680" w:val="left"/>
+ <w:tab w:pos="5400" w:val="left"/>
+ <w:tab w:pos="6120" w:val="left"/>
+ <w:tab w:pos="6840" w:val="left"/>
+ <w:tab w:pos="7560" w:val="left"/>
+ <w:tab w:pos="8280" w:val="left"/>
+ <w:tab w:pos="9000" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="40" w:line="240" w:line-rule="at-least"/>
+ <w:ind w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Footer" w:type="paragraph">
+ <w:name w:val="footer"/>
+ <wx:uiName wx:val="Footer"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="Footer"/>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="center"/>
+ <w:tab w:pos="8640" w:val="right"/>
+ </w:tabs>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl4" w:type="paragraph">
+ <w:name w:val="list:lvl 4"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl4"/>
+ <w:listPr>
+ <w:ilvl w:val="3"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RowHead" w:type="paragraph">
+ <w:name w:val="RowHead"/>
+ <w:basedOn w:val="Heading1"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="RowHead"/>
+ <w:listPr>
+ <w:ilfo w:val="0"/>
+ </w:listPr>
+ <w:spacing w:after="100" w:before="100"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText11" w:type="paragraph">
+ <w:name w:val="TableText11"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText11"/>
+ <w:spacing w:line="220" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOAHeading" w:type="paragraph">
+ <w:name w:val="toa heading"/>
+ <wx:uiName wx:val="TOA Heading"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOAHeading"/>
+ <w:spacing w:after="120" w:before="240"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:b-cs/>
+ <w:caps/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RowHeadL" w:type="paragraph">
+ <w:name w:val="RowHeadL"/>
+ <w:basedOn w:val="RowHead"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="RowHeadL"/>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:jc w:val="left"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b w:val="off"/>
+ <w:b-cs/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText11B" w:type="paragraph">
+ <w:name w:val="TableText11B"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00913874"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText11B"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableofAuthorities" w:type="paragraph">
+ <w:name w:val="table of authorities"/>
+ <wx:uiName wx:val="Table of Authorities"/>
+ <w:basedOn w:val="Normal"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableofAuthorities"/>
+ <w:tabs>
+ <w:tab w:leader="dot" w:pos="8640" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:after="80" w:before="80"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableofFigures" w:type="paragraph">
+ <w:name w:val="table of figures"/>
+ <wx:uiName wx:val="Table of Figures"/>
+ <w:next w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableofFigures"/>
+ <w:tabs>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Hyperlink" w:type="character">
+ <w:name w:val="Hyperlink"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:rsid w:val="00721F21"/>
+ <w:rPr>
+ <w:color w:val="0000FF"/>
+ <w:u w:val="single"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="PageNumber" w:type="character">
+ <w:name w:val="page number"/>
+ <wx:uiName wx:val="Page Number"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:rsid w:val="00D90577"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:dstrike w:val="off"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ <w:vertAlign w:val="baseline"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RowHead11" w:type="paragraph">
+ <w:name w:val="RowHead11"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="RowHead11"/>
+ <w:listPr>
+ <w:ilvl w:val="12"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="80"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText11C" w:type="paragraph">
+ <w:name w:val="TableText11C"/>
+ <w:basedOn w:val="TableText11"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText11C"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman"/>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl1" w:type="paragraph">
+ <w:name w:val="list:lvl 1"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl1"/>
+ <w:listPr>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="936" w:val="left"/>
+ <w:tab w:pos="1440" w:val="left"/>
+ <w:tab w:pos="2160" w:val="left"/>
+ <w:tab w:pos="2880" w:val="left"/>
+ <w:tab w:pos="3600" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ <w:tab w:pos="5040" w:val="left"/>
+ <w:tab w:pos="5760" w:val="left"/>
+ <w:tab w:pos="6480" w:val="left"/>
+ <w:tab w:pos="7200" w:val="left"/>
+ <w:tab w:pos="7920" w:val="left"/>
+ <w:tab w:pos="8640" w:val="left"/>
+ <w:tab w:pos="9360" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="60" w:before="60" w:line="240" w:line-rule="at-least"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Helvetica" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl5" w:type="paragraph">
+ <w:name w:val="list:lvl 5"/>
+ <w:basedOn w:val="paranormal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl5"/>
+ <w:listPr>
+ <w:ilvl w:val="4"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="clear"/>
+ <w:tab w:pos="720" w:val="clear"/>
+ <w:tab w:pos="1080" w:val="clear"/>
+ <w:tab w:pos="1440" w:val="clear"/>
+ <w:tab w:pos="1800" w:val="clear"/>
+ <w:tab w:pos="2160" w:val="clear"/>
+ <w:tab w:pos="2520" w:val="clear"/>
+ <w:tab w:pos="2880" w:val="clear"/>
+ <w:tab w:pos="3240" w:val="clear"/>
+ <w:tab w:pos="3600" w:val="clear"/>
+ <w:tab w:pos="3384" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="40"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl2" w:type="paragraph">
+ <w:name w:val="list:lvl 2"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl2"/>
+ <w:widowControl w:val="off"/>
+ <w:listPr>
+ <w:ilvl w:val="1"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60" w:line="240" w:line-rule="at-least"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="000000"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="AppendixTitle" w:type="paragraph">
+ <w:name w:val="Appendix Title"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="AppendixTitle"/>
+ <w:pageBreakBefore/>
+ <w:spacing w:after="240" w:before="120"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RowHead10" w:type="paragraph">
+ <w:name w:val="RowHead10"/>
+ <w:basedOn w:val="RowHead11"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="RowHead10"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC1" w:type="paragraph">
+ <w:name w:val="toc 1"/>
+ <wx:uiName wx:val="TOC 1"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00003D10"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC1"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="540" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:before="240"/>
+ <w:ind w:hanging="547" w:left="547"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:caps/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC2" w:type="paragraph">
+ <w:name w:val="toc 2"/>
+ <wx:uiName wx:val="TOC 2"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00003D10"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC2"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="900" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9360" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:before="120"/>
+ <w:ind w:hanging="720" w:left="907"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC3" w:type="paragraph">
+ <w:name w:val="toc 3"/>
+ <wx:uiName wx:val="TOC 3"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC3"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="1260" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="900" w:left="1260"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC4" w:type="paragraph">
+ <w:name w:val="toc 4"/>
+ <wx:uiName wx:val="TOC 4"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC4"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="1620" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="1080" w:left="1620"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC5" w:type="paragraph">
+ <w:name w:val="toc 5"/>
+ <wx:uiName wx:val="TOC 5"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC5"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="1980" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="1260" w:left="1980"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC6" w:type="paragraph">
+ <w:name w:val="toc 6"/>
+ <wx:uiName wx:val="TOC 6"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC6"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="2340" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="1440" w:left="2340"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC7" w:type="paragraph">
+ <w:name w:val="toc 7"/>
+ <wx:uiName wx:val="TOC 7"/>
+ <w:basedOn w:val="Normal"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC7"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="2700" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:after="0" w:before="0" w:line="240" w:line-rule="auto"/>
+ <w:ind w:hanging="1620" w:left="2700"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC8" w:type="paragraph">
+ <w:name w:val="toc 8"/>
+ <wx:uiName wx:val="TOC 8"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC8"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="2970" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="1710" w:left="2970"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC9" w:type="paragraph">
+ <w:name w:val="toc 9"/>
+ <wx:uiName wx:val="TOC 9"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC9"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="3330" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="1890" w:left="3330"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="HeadingUnnumbered" w:type="paragraph">
+ <w:name w:val="Heading Unnumbered"/>
+ <w:next w:val="paranormal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00107AA6"/>
+ <w:pPr>
+ <w:pStyle w:val="HeadingUnnumbered"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:spacing w:after="80" w:before="240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText10" w:type="paragraph">
+ <w:name w:val="TableText10"/>
+ <w:basedOn w:val="TableText11"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText10"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableTextBCentered" w:type="paragraph">
+ <w:name w:val="TableTextB Centered"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00913874"/>
+ <w:pPr>
+ <w:pStyle w:val="TableTextBCentered"/>
+ <w:spacing w:line="220" w:line-rule="at-least"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText10C" w:type="paragraph">
+ <w:name w:val="TableText10C"/>
+ <w:basedOn w:val="TableText11C"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText10C"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText10B" w:type="paragraph">
+ <w:name w:val="TableText10B"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00913874"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText10B"/>
+ <w:spacing w:line="220" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="acronym" w:type="paragraph">
+ <w:name w:val="acronym"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="acronym"/>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="40" w:before="40"/>
+ <w:ind w:hanging="2160" w:left="2160"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl6" w:type="paragraph">
+ <w:name w:val="list:lvl 6"/>
+ <w:basedOn w:val="paranormal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl6"/>
+ <w:listPr>
+ <w:ilvl w:val="5"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="clear"/>
+ <w:tab w:pos="720" w:val="clear"/>
+ <w:tab w:pos="1080" w:val="clear"/>
+ <w:tab w:pos="1440" w:val="clear"/>
+ <w:tab w:pos="1800" w:val="clear"/>
+ <w:tab w:pos="2160" w:val="clear"/>
+ <w:tab w:pos="2520" w:val="clear"/>
+ <w:tab w:pos="2880" w:val="clear"/>
+ <w:tab w:pos="3240" w:val="clear"/>
+ <w:tab w:pos="3600" w:val="clear"/>
+ <w:tab w:pos="3960" w:val="clear"/>
+ <w:tab w:pos="4320" w:val="clear"/>
+ </w:tabs>
+ <w:spacing w:after="40"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="hdr1L" w:type="paragraph">
+ <w:name w:val="hdr1L"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="hdr1L"/>
+ <w:tabs>
+ <w:tab w:pos="0" w:val="left"/>
+ <w:tab w:pos="4680" w:val="center"/>
+ <w:tab w:pos="9360" w:val="right"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="hdr2L" w:type="paragraph">
+ <w:name w:val="hdr2L"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="hdr2L"/>
+ <w:tabs>
+ <w:tab w:pos="0" w:val="left"/>
+ <w:tab w:pos="4680" w:val="center"/>
+ <w:tab w:pos="9360" w:val="right"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:before="0" w:line="180" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="bulletlvl1" w:type="paragraph">
+ <w:name w:val="bullet:lvl 1"/>
+ <w:basedOn w:val="Normal"/>
+ <w:link w:val="bulletlvl1CharChar"/>
+ <w:rsid w:val="00143D5A"/>
+ <w:pPr>
+ <w:pStyle w:val="bulletlvl1"/>
+ <w:listPr>
+ <w:ilfo w:val="1"/>
+ </w:listPr>
+ <w:spacing w:after="80"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="bulletlvl2" w:type="paragraph">
+ <w:name w:val="bullet:lvl 2"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00143D5A"/>
+ <w:pPr>
+ <w:pStyle w:val="bulletlvl2"/>
+ <w:widowControl w:val="off"/>
+ <w:listPr>
+ <w:ilfo w:val="2"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="1224" w:val="clear"/>
+ <w:tab w:pos="648" w:val="left"/>
+ <w:tab w:pos="1008" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="80"/>
+ <w:ind w:hanging="1080" w:left="1728"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paraindent4" w:type="paragraph">
+ <w:name w:val="para:indent4"/>
+ <w:basedOn w:val="paraindent3"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="0071606D"/>
+ <w:pPr>
+ <w:pStyle w:val="paraindent4"/>
+ <w:ind w:left="1440"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl7" w:type="paragraph">
+ <w:name w:val="list:lvl 7"/>
+ <w:basedOn w:val="paranormal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl7"/>
+ <w:listPr>
+ <w:ilvl w:val="6"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="clear"/>
+ <w:tab w:pos="720" w:val="clear"/>
+ <w:tab w:pos="1080" w:val="clear"/>
+ <w:tab w:pos="1440" w:val="clear"/>
+ <w:tab w:pos="1800" w:val="clear"/>
+ <w:tab w:pos="2160" w:val="clear"/>
+ <w:tab w:pos="2520" w:val="clear"/>
+ <w:tab w:pos="2880" w:val="clear"/>
+ <w:tab w:pos="3240" w:val="clear"/>
+ <w:tab w:pos="3600" w:val="clear"/>
+ <w:tab w:pos="3960" w:val="clear"/>
+ <w:tab w:pos="3024" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="40"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOCfiguretitle" w:type="paragraph">
+ <w:name w:val="TOC:figure title"/>
+ <w:basedOn w:val="Caption"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00894991"/>
+ <w:pPr>
+ <w:pStyle w:val="TOCfiguretitle"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="note" w:type="paragraph">
+ <w:name w:val="note"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="006E0AB6"/>
+ <w:pPr>
+ <w:pStyle w:val="note"/>
+ <w:spacing w:after="80" w:before="80"/>
+ <w:ind w:hanging="936" w:left="1656" w:right="720"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang2" w:type="paragraph">
+ <w:name w:val="req lang:2"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang2"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang3" w:type="paragraph">
+ <w:name w:val="req lang:3"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang3"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="1080"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang4" w:type="paragraph">
+ <w:name w:val="req lang:4"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang4"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="1440"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang5" w:type="paragraph">
+ <w:name w:val="req lang:5"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang5"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang6" w:type="paragraph">
+ <w:name w:val="req lang:6"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang6"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="statedef" w:type="paragraph">
+ <w:name w:val="state def"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00DE6BA0"/>
+ <w:pPr>
+ <w:pStyle w:val="statedef"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="0" w:before="80"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:caps/>
+ <w:color w:val="408040"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="intentblank" w:type="paragraph">
+ <w:name w:val="intent:blank"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="000B79E8"/>
+ <w:pPr>
+ <w:pStyle w:val="intentblank"/>
+ <w:spacing w:after="0" w:before="6480"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="code" w:type="paragraph">
+ <w:name w:val="code"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="006D4514"/>
+ <w:pPr>
+ <w:pStyle w:val="code"/>
+ <w:spacing w:after="80" w:before="80" w:line="220" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="18"/>
+ <w:sz-cs w:val="18"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="parapage" w:type="paragraph">
+ <w:name w:val="para:page"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00DD22A9"/>
+ <w:pPr>
+ <w:pStyle w:val="parapage"/>
+ <w:pageBreakBefore/>
+ <w:spacing w:after="80" w:before="80"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOCtabletitle" w:type="paragraph">
+ <w:name w:val="TOC:table title"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00B869CD"/>
+ <w:pPr>
+ <w:pStyle w:val="TOCtabletitle"/>
+ <w:spacing w:after="120" w:before="120"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RCRitem" w:type="paragraph">
+ <w:name w:val="RCR:item"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="007A1F4F"/>
+ <w:pPr>
+ <w:pStyle w:val="RCRitem"/>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:before="120"/>
+ <w:ind w:hanging="1800" w:left="1800" w:right="720"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RCRheader" w:type="paragraph">
+ <w:name w:val="RCR:header"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="006D781E"/>
+ <w:pPr>
+ <w:pStyle w:val="RCRheader"/>
+ <w:tabs>
+ <w:tab w:pos="792" w:val="left"/>
+ <w:tab w:pos="1800" w:val="left"/>
+ <w:tab w:leader="underscore" w:pos="8640" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:after="0"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz-cs w:val="22"/>
+ <w:u w:val="single"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="line" w:type="paragraph">
+ <w:name w:val="line"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="006B63C2"/>
+ <w:pPr>
+ <w:pStyle w:val="line"/>
+ <w:spacing w:before="0" w:line="40" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="12"/>
+ <w:sz-cs w:val="12"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang7" w:type="paragraph">
+ <w:name w:val="req lang: 7"/>
+ <w:basedOn w:val="reqlang6"/>
+ <w:rsid w:val="00C0337E"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang7"/>
+ <w:ind w:left="2520"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier New"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang70" w:type="paragraph">
+ <w:name w:val="req lang:7"/>
+ <w:basedOn w:val="reqlang7"/>
+ <w:rsid w:val="004C603C"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang70"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier New"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang8" w:type="paragraph">
+ <w:name w:val="req lang:8"/>
+ <w:basedOn w:val="reqlang7"/>
+ <w:rsid w:val="004C603C"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang8"/>
+ <w:ind w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier New"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang9" w:type="paragraph">
+ <w:name w:val="req lang:9"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="007534C9"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang9"/>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="3240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="DocumentMap" w:type="paragraph">
+ <w:name w:val="Document Map"/>
+ <w:basedOn w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00AF20CB"/>
+ <w:pPr>
+ <w:pStyle w:val="DocumentMap"/>
+ <w:shd w:color="auto" w:fill="000080" w:val="clear"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Tahoma" w:cs="Tahoma" w:h-ansi="Tahoma"/>
+ <wx:font wx:val="Tahoma"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment1" w:type="paragraph">
+ <w:name w:val="comment:1"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment1"/>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="360"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment2" w:type="paragraph">
+ <w:name w:val="comment:2"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment2"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="720"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment3" w:type="paragraph">
+ <w:name w:val="comment:3"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment3"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ <w:tab w:pos="1440" w:val="left"/>
+ <w:tab w:pos="1800" w:val="left"/>
+ <w:tab w:pos="2160" w:val="left"/>
+ <w:tab w:pos="2520" w:val="left"/>
+ <w:tab w:pos="2880" w:val="left"/>
+ <w:tab w:pos="3240" w:val="left"/>
+ <w:tab w:pos="3600" w:val="left"/>
+ <w:tab w:pos="3960" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="1080"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment4" w:type="paragraph">
+ <w:name w:val="comment:4"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment4"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="1440"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment5" w:type="paragraph">
+ <w:name w:val="comment:5"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment5"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment6" w:type="paragraph">
+ <w:name w:val="comment:6"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment6"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment7" w:type="paragraph">
+ <w:name w:val="comment:7"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment7"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="2520"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment8" w:type="paragraph">
+ <w:name w:val="comment:8"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment8"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="2880"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment9" w:type="paragraph">
+ <w:name w:val="comment:9"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment9"/>
+ <w:spacing w:after="80"/>
+ <w:ind w:left="3240"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="dlheader" w:type="paragraph">
+ <w:name w:val="dl:header"/>
+ <w:basedOn w:val="paranormal"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="dlheader"/>
+ <w:spacing w:after="0" w:before="240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier" w:h-ansi="Courier"/>
+ <wx:font wx:val="Courier"/>
+ <w:sz w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="dlbody" w:type="paragraph">
+ <w:name w:val="dl:body"/>
+ <w:basedOn w:val="dlheader"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="dlbody"/>
+ <w:spacing w:before="0"/>
+ <w:ind w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="dlprocheader" w:type="paragraph">
+ <w:name w:val="dl_proc:header"/>
+ <w:basedOn w:val="dlbody"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="dlprocheader"/>
+ <w:spacing w:before="240"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="dlprocbody" w:type="paragraph">
+ <w:name w:val="dl_proc:body"/>
+ <w:basedOn w:val="dlprocheader"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="dlprocbody"/>
+ <w:spacing w:before="0"/>
+ <w:ind w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="dldescription" w:type="paragraph">
+ <w:name w:val="dl:description"/>
+ <w:basedOn w:val="dlheader"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="dldescription"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="bitmapheader" w:type="paragraph">
+ <w:name w:val="bitmap:header"/>
+ <w:basedOn w:val="dlheader"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="bitmapheader"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="bitmapbody" w:type="paragraph">
+ <w:name w:val="bitmap:body"/>
+ <w:basedOn w:val="dlheader"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="bitmapbody"/>
+ <w:spacing w:before="0"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ <w:sz w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX1" w:type="paragraph">
+ <w:name w:val="APPENDIX 1"/>
+ <w:basedOn w:val="Normal"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="004978C4"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX1"/>
+ <w:listPr>
+ <w:ilfo w:val="25"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="72" w:before="152" w:line="240" w:line-rule="auto"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:color w:val="auto"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX2" w:type="paragraph">
+ <w:name w:val="APPENDIX 2"/>
+ <w:basedOn w:val="APPENDIX1"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX2"/>
+ <w:listPr>
+ <w:ilvl w:val="1"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX3" w:type="paragraph">
+ <w:name w:val="APPENDIX 3"/>
+ <w:basedOn w:val="APPENDIX2"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="00E904D2"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX3"/>
+ <w:listPr>
+ <w:ilvl w:val="2"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TitlePage18pt" w:type="paragraph">
+ <w:name w:val="Title Page 18pt"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="0033770F"/>
+ <w:pPr>
+ <w:pStyle w:val="TitlePage18pt"/>
+ <w:spacing w:after="60" w:before="0" w:line="240" w:line-rule="auto"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="36"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TitlePage16pt" w:type="paragraph">
+ <w:name w:val="Title Page 16pt"/>
+ <w:basedOn w:val="TitlePage18pt"/>
+ <w:rsid w:val="0033770F"/>
+ <w:pPr>
+ <w:pStyle w:val="TitlePage16pt"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="32"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TitlePage14pt" w:type="paragraph">
+ <w:name w:val="Title Page 14pt"/>
+ <w:basedOn w:val="TitlePage16pt"/>
+ <w:rsid w:val="0033770F"/>
+ <w:pPr>
+ <w:pStyle w:val="TitlePage14pt"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b w:val="off"/>
+ <w:sz w:val="28"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para10pt" w:type="paragraph">
+ <w:name w:val="para 10pt"/>
+ <w:basedOn w:val="Normal"/>
+ <w:link w:val="para10ptChar"/>
+ <w:rsid w:val="004E3337"/>
+ <w:pPr>
+ <w:pStyle w:val="para10pt"/>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para10ptnospacing" w:type="paragraph">
+ <w:name w:val="para 10pt no spacing"/>
+ <w:basedOn w:val="para10pt"/>
+ <w:rsid w:val="004A1CCA"/>
+ <w:pPr>
+ <w:pStyle w:val="para10ptnospacing"/>
+ <w:spacing w:after="0" w:before="0"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText10nospacing" w:type="paragraph">
+ <w:name w:val="TableText10 no spacing"/>
+ <w:basedOn w:val="TableText10"/>
+ <w:rsid w:val="00D72507"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText10nospacing"/>
+ <w:spacing w:after="0" w:before="0"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para8pt" w:type="paragraph">
+ <w:name w:val="para 8pt"/>
+ <w:basedOn w:val="Normal"/>
+ <w:link w:val="para8ptChar"/>
+ <w:rsid w:val="004E3337"/>
+ <w:pPr>
+ <w:pStyle w:val="para8pt"/>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="16"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paranormalChar" w:type="character">
+ <w:name w:val="para:normal Char"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:link w:val="paranormal"/>
+ <w:rsid w:val="00C93CA3"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:b-cs/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="bulletlvl1CharChar" w:type="character">
+ <w:name w:val="bullet:lvl 1 Char Char"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:link w:val="bulletlvl1"/>
+ <w:rsid w:val="00C93CA3"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:color w:val="000000"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="ParagraphText" w:type="paragraph">
+ <w:name w:val="ParagraphText"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00C93CA3"/>
+ <w:pPr>
+ <w:pStyle w:val="ParagraphText"/>
+ <w:spacing w:after="120" w:before="0" w:line="240" w:line-rule="auto"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
+ <wx:font wx:val="Times New Roman"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl10" w:type="paragraph">
+ <w:name w:val="list lvl 1"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl10"/>
+ <w:listPr>
+ <w:ilfo w:val="9"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="936" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX4" w:type="paragraph">
+ <w:name w:val="APPENDIX 4"/>
+ <w:basedOn w:val="APPENDIX3"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX4"/>
+ <w:listPr>
+ <w:ilvl w:val="3"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX5" w:type="paragraph">
+ <w:name w:val="APPENDIX 5"/>
+ <w:basedOn w:val="APPENDIX4"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX5"/>
+ <w:listPr>
+ <w:ilvl w:val="4"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX6" w:type="paragraph">
+ <w:name w:val="APPENDIX 6"/>
+ <w:basedOn w:val="APPENDIX5"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX6"/>
+ <w:listPr>
+ <w:ilvl w:val="5"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX7" w:type="paragraph">
+ <w:name w:val="APPENDIX 7"/>
+ <w:basedOn w:val="APPENDIX6"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX7"/>
+ <w:listPr>
+ <w:ilvl w:val="6"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX8" w:type="paragraph">
+ <w:name w:val="APPENDIX 8"/>
+ <w:basedOn w:val="APPENDIX7"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX8"/>
+ <w:listPr>
+ <w:ilvl w:val="7"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX9" w:type="paragraph">
+ <w:name w:val="APPENDIX 9"/>
+ <w:basedOn w:val="APPENDIX8"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX9"/>
+ <w:listPr>
+ <w:ilvl w:val="8"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="BalloonText" w:type="paragraph">
+ <w:name w:val="Balloon Text"/>
+ <w:basedOn w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00B47E5D"/>
+ <w:pPr>
+ <w:pStyle w:val="BalloonText"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Tahoma" w:cs="Tahoma" w:h-ansi="Tahoma"/>
+ <wx:font wx:val="Tahoma"/>
+ <w:sz w:val="16"/>
+ <w:sz-cs w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listreset" w:type="list">
+ <w:name w:val="listreset"/>
+ <w:basedOn w:val="NoList"/>
+ <w:rsid w:val="00D25E39"/>
+ <w:pPr>
+ <w:listPr>
+ <w:ilfo w:val="26"/>
+ </w:listPr>
+ </w:pPr>
+ </w:style>
+ <w:style w:styleId="bulletlvl3" w:type="paragraph">
+ <w:name w:val="bullet:lvl 3"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00EF5226"/>
+ <w:pPr>
+ <w:pStyle w:val="bulletlvl3"/>
+ <w:listPr>
+ <w:ilfo w:val="28"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="3024" w:val="clear"/>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="1008" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="80"/>
+ <w:ind w:hanging="360" w:left="1368"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="CommentReference" w:type="character">
+ <w:name w:val="annotation reference"/>
+ <wx:uiName wx:val="Comment Reference"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00E40969"/>
+ <w:rPr>
+ <w:sz w:val="16"/>
+ <w:sz-cs w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="CommentText" w:type="paragraph">
+ <w:name w:val="annotation text"/>
+ <wx:uiName wx:val="Comment Text"/>
+ <w:basedOn w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00E40969"/>
+ <w:pPr>
+ <w:pStyle w:val="CommentText"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="CommentSubject" w:type="paragraph">
+ <w:name w:val="annotation subject"/>
+ <wx:uiName wx:val="Comment Subject"/>
+ <w:basedOn w:val="CommentText"/>
+ <w:next w:val="CommentText"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00E40969"/>
+ <w:pPr>
+ <w:pStyle w:val="CommentSubject"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:b-cs/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TitlePage22pt" w:type="paragraph">
+ <w:name w:val="Title Page 22pt"/>
+ <w:basedOn w:val="TitlePage16pt"/>
+ <w:rsid w:val="005F35C4"/>
+ <w:pPr>
+ <w:pStyle w:val="TitlePage22pt"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="44"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para" w:type="paragraph">
+ <w:name w:val="para"/>
+ <w:basedOn w:val="Normal"/>
+ <w:link w:val="paraChar"/>
+ <w:rsid w:val="0057061B"/>
+ <w:pPr>
+ <w:pStyle w:val="para"/>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paraChar" w:type="character">
+ <w:name w:val="para Char"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:link w:val="para"/>
+ <w:rsid w:val="0057061B"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:sz w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl20" w:type="paragraph">
+ <w:name w:val="list lvl 2"/>
+ <w:basedOn w:val="ListNumber3"/>
+ <w:rsid w:val="0057061B"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl20"/>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="ListNumber3" w:type="paragraph">
+ <w:name w:val="List Number 3"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="0057061B"/>
+ <w:pPr>
+ <w:pStyle w:val="ListNumber3"/>
+ <w:tabs>
+ <w:tab w:pos="1512" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="504" w:left="1512"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableGrid" w:type="table">
+ <w:name w:val="Table Grid"/>
+ <w:basedOn w:val="TableNormal"/>
+ <w:rsid w:val="008B1AB7"/>
+ <w:pPr>
+ <w:spacing w:after="40" w:before="40" w:line="240" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Times New Roman"/>
+ </w:rPr>
+ <w:tblPr>
+ <w:tblInd w:type="dxa" w:w="0"/>
+ <w:tblBorders>
+ <w:top w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ <w:left w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ <w:bottom w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ <w:right w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ <w:insideH w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ <w:insideV w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ </w:tblBorders>
+ <w:tblCellMar>
+ <w:top w:type="dxa" w:w="0"/>
+ <w:left w:type="dxa" w:w="108"/>
+ <w:bottom w:type="dxa" w:w="0"/>
+ <w:right w:type="dxa" w:w="108"/>
+ </w:tblCellMar>
+ </w:tblPr>
+ </w:style>
+ <w:style w:styleId="para8ptChar" w:type="character">
+ <w:name w:val="para 8pt Char"/>
+ <w:basedOn w:val="paraChar"/>
+ <w:link w:val="para8pt"/>
+ <w:rsid w:val="007921D3"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:sz w:val="16"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para8ptunderline" w:type="paragraph">
+ <w:name w:val="para 8pt underline"/>
+ <w:basedOn w:val="para8pt"/>
+ <w:link w:val="para8ptunderlineChar"/>
+ <w:rsid w:val="007921D3"/>
+ <w:pPr>
+ <w:pStyle w:val="para8ptunderline"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:u w:val="single"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para8ptunderlineChar" w:type="character">
+ <w:name w:val="para 8pt underline Char"/>
+ <w:basedOn w:val="para8ptChar"/>
+ <w:link w:val="para8ptunderline"/>
+ <w:rsid w:val="007921D3"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:sz w:val="16"/>
+ <w:u w:val="single"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para8ptnospacing" w:type="paragraph">
+ <w:name w:val="para 8pt no spacing"/>
+ <w:basedOn w:val="para8pt"/>
+ <w:rsid w:val="007921D3"/>
+ <w:pPr>
+ <w:pStyle w:val="para8ptnospacing"/>
+ <w:spacing w:after="0" w:before="0"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl0" w:type="paragraph">
+ <w:name w:val="list lvl 0"/>
+ <w:basedOn w:val="ListNumber"/>
+ <w:rsid w:val="00A233DA"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl0"/>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="ListNumber" w:type="paragraph">
+ <w:name w:val="List Number"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00A233DA"/>
+ <w:pPr>
+ <w:pStyle w:val="ListNumber"/>
+ <w:tabs>
+ <w:tab w:pos="504" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="504" w:left="504"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para10ptChar" w:type="character">
+ <w:name w:val="para 10pt Char"/>
+ <w:basedOn w:val="paraChar"/>
+ <w:link w:val="para10pt"/>
+ <w:rsid w:val="0015054E"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:sz w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="FollowedHyperlink" w:type="character">
+ <w:name w:val="FollowedHyperlink"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:rsid w:val="00B8047C"/>
+ <w:rPr>
+ <w:color w:val="800080"/>
+ <w:u w:val="single"/>
+ </w:rPr>
+ </w:style>
+ </w:styles>
+ <w:shapeDefaults>
+ <o:shapedefaults spidmax="35842" v:ext="edit"/>
+ <o:shapelayout v:ext="edit">
+ <o:idmap data="1" v:ext="edit"/>
+ </o:shapelayout>
+ </w:shapeDefaults>
+ <w:docPr>
+ <w:view w:val="print"/>
+ <w:zoom w:percent="100"/>
+ <w:displayBackgroundShape/>
+ <w:doNotEmbedSystemFonts/>
+ <w:bordersDontSurroundHeader/>
+ <w:bordersDontSurroundFooter/>
+ <w:attachedTemplate w:val=""/>
+ <w:stylePaneFormatFilter w:val="3001"/>
+ <w:documentProtection w:enforcement="on" w:formatting="on" w:unprotectPassword="00000000"/>
+ <w:autoFormatOverride/>
+ <w:defaultTabStop w:val="720"/>
+ <w:doNotHyphenateCaps/>
+ <w:drawingGridHorizontalSpacing w:val="120"/>
+ <w:drawingGridVerticalSpacing w:val="120"/>
+ <w:displayHorizontalDrawingGridEvery w:val="0"/>
+ <w:displayVerticalDrawingGridEvery w:val="3"/>
+ <w:useMarginsForDrawingGridOrigin/>
+ <w:doNotShadeFormData/>
+ <w:punctuationKerning/>
+ <w:characterSpacingControl w:val="CompressPunctuation"/>
+ <w:optimizeForBrowser/>
+ <w:validateAgainstSchema w:val="off"/>
+ <w:saveInvalidXML/>
+ <w:ignoreMixedContent w:val="off"/>
+ <w:alwaysShowPlaceholderText w:val="off"/>
+ <w:hdrShapeDefaults>
+ <o:shapedefaults spidmax="35842" v:ext="edit"/>
+ </w:hdrShapeDefaults>
+ <w:footnotePr>
+ <w:footnote w:type="separator">
+ <w:p>
+ <w:r>
+ <w:separator/>
+ </w:r>
+ </w:p>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ </w:footnote>
+ <w:footnote w:type="continuation-separator">
+ <w:p>
+ <w:r>
+ <w:continuationSeparator/>
+ </w:r>
+ </w:p>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ </w:footnote>
+ </w:footnotePr>
+ <w:endnotePr>
+ <w:endnote w:type="separator">
+ <w:p>
+ <w:r>
+ <w:separator/>
+ </w:r>
+ </w:p>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ </w:endnote>
+ <w:endnote w:type="continuation-separator">
+ <w:p>
+ <w:r>
+ <w:continuationSeparator/>
+ </w:r>
+ </w:p>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ </w:endnote>
+ </w:endnotePr>
+ <w:compat>
+ <w:footnoteLayoutLikeWW8/>
+ <w:shapeLayoutLikeWW8/>
+ <w:alignTablesRowByRow/>
+ <w:forgetLastTabAlignment/>
+ <w:doNotUseHTMLParagraphAutoSpacing/>
+ <w:layoutRawTableWidth/>
+ <w:layoutTableRowsApart/>
+ <w:useWord97LineBreakingRules/>
+ <w:dontAllowFieldEndSelect/>
+ <w:useWord2002TableStyleRules/>
+ </w:compat>
+ <wsp:rsids>
+ <wsp:rsidRoot wsp:val="00244327"/>
+ </wsp:rsids>
+ </w:docPr>
+ <w:body>
+ <wx:sect>
+ <ns0:Artifact>
+ <w:p>
+ <Set_Name>
+ <w:r>
+ <w:t>Default</w:t>
+ </w:r>
+ </Set_Name>
+ <Outline>
+ <HeadingAttribute>
+ <w:r>
+ <w:t>Name</w:t>
+ </w:r>
+ </HeadingAttribute>
+ <RecurseChildren>
+ <w:r>
+ <w:t>false</w:t>
+ </w:r>
+ </RecurseChildren>
+ </Outline>
+ <Attribute>
+ <Name>
+ <w:r>
+ <w:t>*</w:t>
+ </w:r>
+ </Name>
+ </Attribute>
+ </w:p>
+ </ns0:Artifact>
+ <w:p/>
+ <w:sectPr>
+ <w:hdr w:type="odd">
+ <w:p>
+ <w:pPr>
+ <w:pStyle w:val="Header"/>
+ </w:pPr>
+ </w:p>
+ </w:hdr>
+ <w:pgSz w:code="1" w:h="15840" w:w="12240"/>
+ <w:pgMar w:bottom="1440" w:footer="432" w:gutter="0" w:header="432" w:left="1440" w:right="1440" w:top="1440"/>
+ <w:pgNumType w:start="1"/>
+ <w:cols w:space="475"/>
+ <w:noEndnote/>
+ </w:sectPr>
+ </wx:sect>
+ </w:body>
+</w:wordDocument>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW_ALL_RECURSE.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW_ALL_RECURSE.xml
new file mode 100644
index 00000000000..cd3e863ea15
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/PREVIEW_ALL_RECURSE.xml
@@ -0,0 +1,7686 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?mso-application progid="Word.Document"?>
+<w:wordDocument w:embeddedObjPresent="no" w:macrosPresent="no" w:ocxPresent="no" xml:space="preserve" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:ns0="http://www.w3.org/2001/XMLSchema" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint">
+ <w:ignoreElements w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/>
+ <o:DocumentProperties>
+ <o:Title>SRS</o:Title>
+ <o:Author>Ryan D. Brooks</o:Author>
+ <o:LastAuthor>b289820</o:LastAuthor>
+ <o:Revision>6</o:Revision>
+ <o:TotalTime>1</o:TotalTime>
+ <o:LastPrinted>2007-03-22T22:27:00Z</o:LastPrinted>
+ <o:Created>2008-01-15T17:10:00Z</o:Created>
+ <o:LastSaved>2008-01-15T19:54:00Z</o:LastSaved>
+ <o:Pages>1</o:Pages>
+ <o:Words>4</o:Words>
+ <o:Characters>28</o:Characters>
+ <o:Company>The Boeing Company</o:Company>
+ <o:Lines>1</o:Lines>
+ <o:Paragraphs>1</o:Paragraphs>
+ <o:CharactersWithSpaces>31</o:CharactersWithSpaces>
+ <o:Version>11.8134</o:Version>
+ </o:DocumentProperties>
+ <w:fonts>
+ <w:defaultFonts w:ascii="Times New Roman" w:cs="Times New Roman" w:fareast="Times New Roman" w:h-ansi="Times New Roman"/>
+ <w:font w:name="Helvetica">
+ <w:panose-1 w:val="020B0604020202020204"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="Swiss"/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:csb-0="000001FF" w:csb-1="00000000" w:usb-0="20007A87" w:usb-1="80000000" w:usb-2="00000008" w:usb-3="00000000"/>
+ </w:font>
+ <w:font w:name="Courier">
+ <w:panose-1 w:val="02070409020205020404"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="Modern"/>
+ <w:notTrueType/>
+ <w:pitch w:val="fixed"/>
+ <w:sig w:csb-0="00000001" w:csb-1="00000000" w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000"/>
+ </w:font>
+ <w:font w:name="Wingdings">
+ <w:panose-1 w:val="05000000000000000000"/>
+ <w:charset w:val="02"/>
+ <w:family w:val="Auto"/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:csb-0="80000000" w:csb-1="00000000" w:usb-0="00000000" w:usb-1="10000000" w:usb-2="00000000" w:usb-3="00000000"/>
+ </w:font>
+ <w:font w:name="Tahoma">
+ <w:panose-1 w:val="020B0604030504040204"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="Swiss"/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:csb-0="000101FF" w:csb-1="00000000" w:usb-0="61007A87" w:usb-1="80000000" w:usb-2="00000008" w:usb-3="00000000"/>
+ </w:font>
+ </w:fonts>
+ <w:lists>
+ <w:listDef w:listDefId="0">
+ <w:lsid w:val="FFFFFF7C"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="D440384C"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="1">
+ <w:lsid w:val="FFFFFF7D"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="6820FC02"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="2">
+ <w:lsid w:val="FFFFFF7F"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="2B10698A"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="3">
+ <w:lsid w:val="FFFFFF80"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="F4645DBA"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="4">
+ <w:lsid w:val="FFFFFF81"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="B29CAA58"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="5">
+ <w:lsid w:val="FFFFFF82"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="6C206602"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="6">
+ <w:lsid w:val="FFFFFF83"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="3ED012C8"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="7">
+ <w:lsid w:val="FFFFFF89"/>
+ <w:plt w:val="SingleLevel"/>
+ <w:tmpl w:val="EE3C3A12"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="8">
+ <w:lsid w:val="003A6350"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="F89E6E26"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:pStyle w:val="APPENDIX1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX2"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX4"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX5"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX6"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX7"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX8"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="APPENDIX9"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="9">
+ <w:lsid w:val="016D5431"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="98C65BCE"/>
+ <w:lvl w:ilvl="0" w:tplc="94D2C566">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="504" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="504" w:left="504"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%4."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%5."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3600"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%6."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="4320"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5040" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5040"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5760" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5760"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6480" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="6480"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="10">
+ <w:lsid w:val="0C4D206D"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="4B543E40"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="11">
+ <w:lsid w:val="0DE40F2C"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="12">
+ <w:lsid w:val="10AF29E5"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="7520DAAE"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="13">
+ <w:lsid w:val="15EB1725"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="D902A83E"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="14">
+ <w:lsid w:val="1C970BBA"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="5EB82E3A"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="15">
+ <w:lsid w:val="1D6C5FCC"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="E710F038"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:lvlText w:val="APPENDIX %1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="0"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="1440"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="16">
+ <w:lsid w:val="1EC51BCC"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="17">
+ <w:lsid w:val="256F5D56"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="EAC4E6B8"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="18">
+ <w:lsid w:val="290A1130"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="EAC4E6B8"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="19">
+ <w:lsid w:val="299E4F07"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="46E2B8B2"/>
+ <w:lvl w:ilvl="0" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1512" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="504" w:left="1512"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%4."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%5."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3600"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%6."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="4320"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5040" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5040"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5760" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5760"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6480" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="6480"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="20">
+ <w:lsid w:val="29C240FD"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="FCA4DC08"/>
+ <w:lvl w:ilvl="0" w:tplc="B5146A3E">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:pStyle w:val="bulletlvl2"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1224" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1224"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tplc="04090019">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tentative="on" w:tplc="0409001B">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="0409000F">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%4."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="04090019">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%5."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3600"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="0409001B">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%6."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="4320"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="0409000F">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5040" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5040"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="04090019">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5760" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5760"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="0409001B">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6480" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="6480"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="21">
+ <w:lsid w:val="29CA5728"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="D00252C6"/>
+ <w:lvl w:ilvl="0" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:lvlText w:val="%1"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%4."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%5."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3600"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%6."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="4320"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5040" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5040"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5760" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5760"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="FFFFFFFF">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="right"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6480" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="180" w:left="6480"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="22">
+ <w:lsid w:val="2A5411A0"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="9A620CE6"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading2"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading4"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading5"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading6"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading7"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading8"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="Heading9"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="23">
+ <w:lsid w:val="2B1C06F5"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="3B98963A"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="24">
+ <w:lsid w:val="2B477730"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="33801DC4"/>
+ <w:lvl w:ilvl="0" w:tplc="2D8A4B4C">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:pStyle w:val="bulletlvl3"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3024" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="2016" w:left="3024"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2448" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2448"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:cs="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3168" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3168"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3888" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3888"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4608" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="4608"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:cs="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5328" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5328"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6048" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="6048"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6768" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="6768"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:cs="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="7488" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="7488"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="25">
+ <w:lsid w:val="2B5B6B3C"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="5CC8E874"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:first-line="763" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="26">
+ <w:lsid w:val="2D6545A6"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="3F227848"/>
+ <w:name w:val="listreset"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:pStyle w:val="listlvl1"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1296" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1296"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ <w:b w:val="off"/>
+ <w:i w:val="off"/>
+ <w:caps w:val="off"/>
+ <w:strike w:val="off"/>
+ <w:dstrike w:val="off"/>
+ <w:outline w:val="off"/>
+ <w:shadow w:val="off"/>
+ <w:emboss w:val="off"/>
+ <w:imprint w:val="off"/>
+ <w:vanish w:val="off"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:vertAlign w:val="baseline"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="listlvl2"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="-31680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1656"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:pStyle w:val="listlvl3"/>
+ <w:lvlText w:val="(%3)."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2016" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2016"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="listlvl4"/>
+ <w:lvlText w:val="(%4)."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2376" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2376"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:pStyle w:val="listlvl5"/>
+ <w:lvlText w:val="%5)."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2736" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="listlvl6"/>
+ <w:lvlText w:val="%6)."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3096" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3096"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:hint="default"/>
+ <w:b w:val="off"/>
+ <w:i w:val="off"/>
+ <w:sz w:val="22"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:pStyle w:val="listlvl7"/>
+ <w:lvlText w:val="[%7]."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3456" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3456"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="[%8]."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="27">
+ <w:lsid w:val="2E180A61"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="28">
+ <w:lsid w:val="308239DA"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="29">
+ <w:lsid w:val="31A252E6"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="A9D83578"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="30">
+ <w:lsid w:val="3B97448F"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:name w:val="listrestart2"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="31">
+ <w:lsid w:val="3C165F4A"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="79A06FE6"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="32">
+ <w:lsid w:val="42BB3748"/>
+ <w:plt w:val="HybridMultilevel"/>
+ <w:tmpl w:val="DBE464B0"/>
+ <w:lvl w:ilvl="0" w:tplc="26BAF6B0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:pStyle w:val="bulletlvl1"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="648" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="648"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3960"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="4680"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6" w:tentative="on" w:tplc="04090001">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="5400"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7" w:tentative="on" w:tplc="04090003">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="o"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="6120"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8" w:tentative="on" w:tplc="04090005">
+ <w:start w:val="1"/>
+ <w:nfc w:val="23"/>
+ <w:lvlText w:val="ï‚·"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6840" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="6840"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="33">
+ <w:lsid w:val="5A401749"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="CD8E61CE"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="34">
+ <w:lsid w:val="5A802BC9"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="CB0E7A2E"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="35">
+ <w:lsid w:val="5C3B1B76"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="CB0E7A2E"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="36">
+ <w:lsid w:val="5E371EBB"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="DA56D440"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="37">
+ <w:lsid w:val="60B71688"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="5EA20814"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman" w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="38">
+ <w:lsid w:val="6389497B"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="AC5A6410"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:pStyle w:val="listlvl10"/>
+ <w:lvlText w:val="%1."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:lvlText w:val="%2."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="1080"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%3."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2520"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3600" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3960"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5040" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4680"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5760" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5400"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6480" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="6120"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="39">
+ <w:lsid w:val="6469691A"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="E5D02024"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="3082" w:left="3082"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="40">
+ <w:lsid w:val="72C94998"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="41">
+ <w:lsid w:val="74BA49AE"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:name w:val="listrestart"/>
+ <w:styleLink w:val="listreset"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="42">
+ <w:lsid w:val="751E50EA"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="79E6FEDC"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2405" w:left="2405"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2736" w:left="2736"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="43">
+ <w:lsid w:val="7D9D3B47"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="0409001D"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%1)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="360"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%2)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="720"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%3)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1080"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1440"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="1800"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2160"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="%7."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2520"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%8."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2880" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="2880"/>
+ </w:pPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="%9."/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="360" w:left="3240"/>
+ </w:pPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="44">
+ <w:lsid w:val="7F0F313D"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="F8FC63EE"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="%4)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="2520" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:lvlText w:val="(%5)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3240" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%6)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="3960" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="3600"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:listDef w:listDefId="45">
+ <w:lsid w:val="7F633FB7"/>
+ <w:plt w:val="Multilevel"/>
+ <w:tmpl w:val="5F5A52E8"/>
+ <w:lvl w:ilvl="0">
+ <w:start w:val="1"/>
+ <w:nfc w:val="3"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="APPENDIX %1. "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="461" w:left="461"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="1">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="734" w:left="734"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="2">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1066" w:left="1066"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="3">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1397" w:left="1397"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="4">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="1742" w:left="1742"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="5">
+ <w:start w:val="1"/>
+ <w:suff w:val="Nothing"/>
+ <w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:ind w:hanging="2074" w:left="2074"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="6">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%7)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="4680" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="4320"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="7">
+ <w:start w:val="1"/>
+ <w:nfc w:val="4"/>
+ <w:lvlText w:val="(%8)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="5400" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5040"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ <w:lvl w:ilvl="8">
+ <w:start w:val="1"/>
+ <w:nfc w:val="2"/>
+ <w:lvlText w:val="(%9)"/>
+ <w:lvlJc w:val="left"/>
+ <w:pPr>
+ <w:tabs>
+ <w:tab w:pos="6120" w:val="list"/>
+ </w:tabs>
+ <w:ind w:first-line="0" w:left="5760"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:hint="default"/>
+ </w:rPr>
+ </w:lvl>
+ </w:listDef>
+ <w:list w:ilfo="1">
+ <w:ilst w:val="32"/>
+ </w:list>
+ <w:list w:ilfo="2">
+ <w:ilst w:val="20"/>
+ </w:list>
+ <w:list w:ilfo="3">
+ <w:ilst w:val="26"/>
+ </w:list>
+ <w:list w:ilfo="4">
+ <w:ilst w:val="22"/>
+ </w:list>
+ <w:list w:ilfo="5">
+ <w:ilst w:val="14"/>
+ </w:list>
+ <w:list w:ilfo="6">
+ <w:ilst w:val="34"/>
+ </w:list>
+ <w:list w:ilfo="7">
+ <w:ilst w:val="13"/>
+ </w:list>
+ <w:list w:ilfo="8">
+ <w:ilst w:val="21"/>
+ </w:list>
+ <w:list w:ilfo="9">
+ <w:ilst w:val="38"/>
+ </w:list>
+ <w:list w:ilfo="10">
+ <w:ilst w:val="15"/>
+ </w:list>
+ <w:list w:ilfo="11">
+ <w:ilst w:val="26"/>
+ </w:list>
+ <w:list w:ilfo="12">
+ <w:ilst w:val="35"/>
+ </w:list>
+ <w:list w:ilfo="13">
+ <w:ilst w:val="44"/>
+ </w:list>
+ <w:list w:ilfo="14">
+ <w:ilst w:val="10"/>
+ </w:list>
+ <w:list w:ilfo="15">
+ <w:ilst w:val="36"/>
+ </w:list>
+ <w:list w:ilfo="16">
+ <w:ilst w:val="25"/>
+ </w:list>
+ <w:list w:ilfo="17">
+ <w:ilst w:val="39"/>
+ </w:list>
+ <w:list w:ilfo="18">
+ <w:ilst w:val="12"/>
+ </w:list>
+ <w:list w:ilfo="19">
+ <w:ilst w:val="29"/>
+ </w:list>
+ <w:list w:ilfo="20">
+ <w:ilst w:val="23"/>
+ </w:list>
+ <w:list w:ilfo="21">
+ <w:ilst w:val="45"/>
+ </w:list>
+ <w:list w:ilfo="22">
+ <w:ilst w:val="31"/>
+ </w:list>
+ <w:list w:ilfo="23">
+ <w:ilst w:val="33"/>
+ </w:list>
+ <w:list w:ilfo="24">
+ <w:ilst w:val="42"/>
+ </w:list>
+ <w:list w:ilfo="25">
+ <w:ilst w:val="8"/>
+ </w:list>
+ <w:list w:ilfo="26">
+ <w:ilst w:val="41"/>
+ </w:list>
+ <w:list w:ilfo="27">
+ <w:ilst w:val="30"/>
+ </w:list>
+ <w:list w:ilfo="28">
+ <w:ilst w:val="24"/>
+ </w:list>
+ <w:list w:ilfo="29">
+ <w:ilst w:val="28"/>
+ </w:list>
+ <w:list w:ilfo="30">
+ <w:ilst w:val="26"/>
+ <w:lvlOverride w:ilvl="0">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="1">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="2">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="3">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="4">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="5">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="6">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="7">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ <w:lvlOverride w:ilvl="8">
+ <w:startOverride w:val="1"/>
+ </w:lvlOverride>
+ </w:list>
+ <w:list w:ilfo="31">
+ <w:ilst w:val="19"/>
+ </w:list>
+ <w:list w:ilfo="32">
+ <w:ilst w:val="9"/>
+ </w:list>
+ <w:list w:ilfo="33">
+ <w:ilst w:val="43"/>
+ </w:list>
+ <w:list w:ilfo="34">
+ <w:ilst w:val="16"/>
+ </w:list>
+ <w:list w:ilfo="35">
+ <w:ilst w:val="37"/>
+ </w:list>
+ <w:list w:ilfo="36">
+ <w:ilst w:val="22"/>
+ </w:list>
+ <w:list w:ilfo="37">
+ <w:ilst w:val="18"/>
+ </w:list>
+ <w:list w:ilfo="38">
+ <w:ilst w:val="17"/>
+ </w:list>
+ <w:list w:ilfo="39">
+ <w:ilst w:val="11"/>
+ </w:list>
+ <w:list w:ilfo="40">
+ <w:ilst w:val="7"/>
+ </w:list>
+ <w:list w:ilfo="41">
+ <w:ilst w:val="6"/>
+ </w:list>
+ <w:list w:ilfo="42">
+ <w:ilst w:val="5"/>
+ </w:list>
+ <w:list w:ilfo="43">
+ <w:ilst w:val="4"/>
+ </w:list>
+ <w:list w:ilfo="44">
+ <w:ilst w:val="3"/>
+ </w:list>
+ <w:list w:ilfo="45">
+ <w:ilst w:val="2"/>
+ </w:list>
+ <w:list w:ilfo="46">
+ <w:ilst w:val="1"/>
+ </w:list>
+ <w:list w:ilfo="47">
+ <w:ilst w:val="0"/>
+ </w:list>
+ <w:list w:ilfo="48">
+ <w:ilst w:val="40"/>
+ </w:list>
+ <w:list w:ilfo="49">
+ <w:ilst w:val="27"/>
+ </w:list>
+ <w:ilfoMacAtCleanup w:val="5"/>
+ </w:lists>
+ <w:styles>
+ <w:versionOfBuiltInStylenames w:val="4"/>
+ <w:latentStyles w:defLockedState="off" w:latentStyleCount="156"/>
+ <w:style w:default="on" w:styleId="Normal" w:type="paragraph">
+ <w:name w:val="Normal"/>
+ <w:rsid w:val="00C93CA3"/>
+ <w:pPr>
+ <w:spacing w:after="40" w:before="40" w:line="240" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="000000"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading1" w:type="paragraph">
+ <w:name w:val="heading 1"/>
+ <wx:uiName wx:val="Heading 1"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="001B1D77"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading1"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:pageBreakBefore/>
+ <w:listPr>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="0"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:kern w:val="28"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading2" w:type="paragraph">
+ <w:name w:val="heading 2"/>
+ <wx:uiName wx:val="Heading 2"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="001B1D77"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading2"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="1"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="320"/>
+ <w:outlineLvl w:val="1"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading3" w:type="paragraph">
+ <w:name w:val="heading 3"/>
+ <wx:uiName wx:val="Heading 3"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="001B1D77"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading3"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="2"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="900" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="80" w:before="320"/>
+ <w:outlineLvl w:val="2"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading4" w:type="paragraph">
+ <w:name w:val="heading 4"/>
+ <wx:uiName wx:val="Heading 4"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="001B1D77"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading4"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="3"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="3"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading5" w:type="paragraph">
+ <w:name w:val="heading 5"/>
+ <wx:uiName wx:val="Heading 5"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="001B1D77"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading5"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="4"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="4"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading6" w:type="paragraph">
+ <w:name w:val="heading 6"/>
+ <wx:uiName wx:val="Heading 6"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="001B1D77"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading6"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="5"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="5"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading7" w:type="paragraph">
+ <w:name w:val="heading 7"/>
+ <wx:uiName wx:val="Heading 7"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="001B1D77"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading7"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="6"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="1620" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="6"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:color w:val="000000"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading8" w:type="paragraph">
+ <w:name w:val="heading 8"/>
+ <wx:uiName wx:val="Heading 8"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="001B1D77"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading8"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="7"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="7"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:b-cs/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Heading9" w:type="paragraph">
+ <w:name w:val="heading 9"/>
+ <wx:uiName wx:val="Heading 9"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="001B1D77"/>
+ <w:pPr>
+ <w:pStyle w:val="Heading9"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:listPr>
+ <w:ilvl w:val="8"/>
+ <w:ilfo w:val="36"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="360"/>
+ <w:outlineLvl w:val="8"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:color w:val="000000"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:default="on" w:styleId="DefaultParagraphFont" w:type="character">
+ <w:name w:val="Default Paragraph Font"/>
+ <w:semiHidden/>
+ </w:style>
+ <w:style w:default="on" w:styleId="TableNormal" w:type="table">
+ <w:name w:val="Normal Table"/>
+ <wx:uiName wx:val="Table Normal"/>
+ <w:semiHidden/>
+ <w:rPr>
+ <wx:font wx:val="Times New Roman"/>
+ </w:rPr>
+ <w:tblPr>
+ <w:tblInd w:type="dxa" w:w="0"/>
+ <w:tblCellMar>
+ <w:top w:type="dxa" w:w="0"/>
+ <w:left w:type="dxa" w:w="108"/>
+ <w:bottom w:type="dxa" w:w="0"/>
+ <w:right w:type="dxa" w:w="108"/>
+ </w:tblCellMar>
+ </w:tblPr>
+ </w:style>
+ <w:style w:default="on" w:styleId="NoList" w:type="list">
+ <w:name w:val="No List"/>
+ <w:semiHidden/>
+ </w:style>
+ <w:style w:styleId="paranormal" w:type="paragraph">
+ <w:name w:val="para:normal"/>
+ <w:link w:val="paranormalChar"/>
+ <w:rsid w:val="009E6B3D"/>
+ <w:pPr>
+ <w:pStyle w:val="paranormal"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ <w:tab w:pos="1440" w:val="left"/>
+ <w:tab w:pos="1800" w:val="left"/>
+ <w:tab w:pos="2160" w:val="left"/>
+ <w:tab w:pos="2520" w:val="left"/>
+ <w:tab w:pos="2880" w:val="left"/>
+ <w:tab w:pos="3240" w:val="left"/>
+ <w:tab w:pos="3600" w:val="left"/>
+ <w:tab w:pos="3960" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="64" w:line="240" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b-cs/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl3" w:type="paragraph">
+ <w:name w:val="list:lvl 3"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl3"/>
+ <w:listPr>
+ <w:ilvl w:val="2"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="2088" w:val="left"/>
+ </w:tabs>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang1" w:type="paragraph">
+ <w:name w:val="req lang:1"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang1"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Header" w:type="paragraph">
+ <w:name w:val="header"/>
+ <wx:uiName wx:val="Header"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00A134C3"/>
+ <w:pPr>
+ <w:pStyle w:val="Header"/>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="center"/>
+ <w:tab w:pos="8640" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:after="0" w:before="20" w:line="180" w:line-rule="at-least"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="proprietarycontd" w:type="paragraph">
+ <w:name w:val="proprietary:cont'd"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="proprietarycontd"/>
+ <w:tabs>
+ <w:tab w:pos="0" w:val="left"/>
+ <w:tab w:pos="1440" w:val="left"/>
+ <w:tab w:pos="2880" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="60" w:before="60" w:line="200" w:line-rule="at-least"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="16"/>
+ <w:sz-cs w:val="16"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paracentered" w:type="paragraph">
+ <w:name w:val="para:centered"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00B43482"/>
+ <w:pPr>
+ <w:pStyle w:val="paracentered"/>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="80" w:line="240" w:line-rule="at-least"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Helvetica" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paraindent2" w:type="paragraph">
+ <w:name w:val="para:indent2"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="004417BE"/>
+ <w:pPr>
+ <w:pStyle w:val="paraindent2"/>
+ <w:tabs>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1440" w:val="left"/>
+ <w:tab w:pos="2160" w:val="left"/>
+ <w:tab w:pos="2880" w:val="left"/>
+ <w:tab w:pos="3600" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ <w:tab w:pos="5040" w:val="left"/>
+ <w:tab w:pos="5760" w:val="left"/>
+ <w:tab w:pos="6480" w:val="left"/>
+ <w:tab w:pos="7200" w:val="left"/>
+ <w:tab w:pos="7920" w:val="left"/>
+ <w:tab w:pos="8640" w:val="left"/>
+ <w:tab w:pos="9360" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="40" w:line="240" w:line-rule="at-least"/>
+ <w:ind w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paraindent3" w:type="paragraph">
+ <w:name w:val="para:indent3"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="0071606D"/>
+ <w:pPr>
+ <w:pStyle w:val="paraindent3"/>
+ <w:tabs>
+ <w:tab w:pos="1080" w:val="left"/>
+ <w:tab w:pos="1800" w:val="left"/>
+ <w:tab w:pos="2520" w:val="left"/>
+ <w:tab w:pos="3240" w:val="left"/>
+ <w:tab w:pos="3960" w:val="left"/>
+ <w:tab w:pos="4680" w:val="left"/>
+ <w:tab w:pos="5400" w:val="left"/>
+ <w:tab w:pos="6120" w:val="left"/>
+ <w:tab w:pos="6840" w:val="left"/>
+ <w:tab w:pos="7560" w:val="left"/>
+ <w:tab w:pos="8280" w:val="left"/>
+ <w:tab w:pos="9000" w:val="left"/>
+ <w:tab w:pos="9720" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="40" w:line="240" w:line-rule="at-least"/>
+ <w:ind w:left="1080"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Caption" w:type="paragraph">
+ <w:name w:val="caption"/>
+ <wx:uiName wx:val="Caption"/>
+ <w:basedOn w:val="Normal"/>
+ <w:next w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:semiHidden/>
+ <w:rsid w:val="0085234B"/>
+ <w:pPr>
+ <w:pStyle w:val="Caption"/>
+ <w:tabs>
+ <w:tab w:pos="0" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ <w:tab w:pos="2160" w:val="left"/>
+ <w:tab w:pos="3240" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ <w:tab w:pos="5400" w:val="left"/>
+ <w:tab w:pos="6480" w:val="left"/>
+ <w:tab w:pos="7560" w:val="left"/>
+ <w:tab w:pos="8640" w:val="left"/>
+ <w:tab w:pos="9720" w:val="left"/>
+ <w:tab w:pos="10800" w:val="left"/>
+ <w:tab w:pos="11880" w:val="left"/>
+ <w:tab w:pos="12960" w:val="left"/>
+ <w:tab w:pos="14040" w:val="left"/>
+ <w:tab w:pos="15120" w:val="left"/>
+ <w:tab w:pos="16200" w:val="left"/>
+ <w:tab w:pos="17280" w:val="left"/>
+ <w:tab w:pos="18360" w:val="left"/>
+ <w:tab w:pos="19440" w:val="left"/>
+ <w:tab w:pos="20520" w:val="left"/>
+ <w:tab w:pos="21600" w:val="left"/>
+ <w:tab w:pos="22680" w:val="left"/>
+ <w:tab w:pos="23760" w:val="left"/>
+ <w:tab w:pos="24840" w:val="left"/>
+ <w:tab w:pos="25920" w:val="left"/>
+ <w:tab w:pos="27000" w:val="left"/>
+ <w:tab w:pos="28080" w:val="left"/>
+ <w:tab w:pos="29160" w:val="left"/>
+ <w:tab w:pos="30240" w:val="left"/>
+ <w:tab w:pos="31320" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="120" w:before="120"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paraindent1" w:type="paragraph">
+ <w:name w:val="para:indent1"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="007D424E"/>
+ <w:pPr>
+ <w:pStyle w:val="paraindent1"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ <w:tab w:pos="1800" w:val="left"/>
+ <w:tab w:pos="2520" w:val="left"/>
+ <w:tab w:pos="3240" w:val="left"/>
+ <w:tab w:pos="3960" w:val="left"/>
+ <w:tab w:pos="4680" w:val="left"/>
+ <w:tab w:pos="5400" w:val="left"/>
+ <w:tab w:pos="6120" w:val="left"/>
+ <w:tab w:pos="6840" w:val="left"/>
+ <w:tab w:pos="7560" w:val="left"/>
+ <w:tab w:pos="8280" w:val="left"/>
+ <w:tab w:pos="9000" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="40" w:line="240" w:line-rule="at-least"/>
+ <w:ind w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Footer" w:type="paragraph">
+ <w:name w:val="footer"/>
+ <wx:uiName wx:val="Footer"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="Footer"/>
+ <w:tabs>
+ <w:tab w:pos="4320" w:val="center"/>
+ <w:tab w:pos="8640" w:val="right"/>
+ </w:tabs>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl4" w:type="paragraph">
+ <w:name w:val="list:lvl 4"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl4"/>
+ <w:listPr>
+ <w:ilvl w:val="3"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RowHead" w:type="paragraph">
+ <w:name w:val="RowHead"/>
+ <w:basedOn w:val="Heading1"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="RowHead"/>
+ <w:listPr>
+ <w:ilfo w:val="0"/>
+ </w:listPr>
+ <w:spacing w:after="100" w:before="100"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText11" w:type="paragraph">
+ <w:name w:val="TableText11"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText11"/>
+ <w:spacing w:line="220" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOAHeading" w:type="paragraph">
+ <w:name w:val="toa heading"/>
+ <wx:uiName wx:val="TOA Heading"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOAHeading"/>
+ <w:spacing w:after="120" w:before="240"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:b-cs/>
+ <w:caps/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RowHeadL" w:type="paragraph">
+ <w:name w:val="RowHeadL"/>
+ <w:basedOn w:val="RowHead"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="RowHeadL"/>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:jc w:val="left"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b w:val="off"/>
+ <w:b-cs/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText11B" w:type="paragraph">
+ <w:name w:val="TableText11B"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00913874"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText11B"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableofAuthorities" w:type="paragraph">
+ <w:name w:val="table of authorities"/>
+ <wx:uiName wx:val="Table of Authorities"/>
+ <w:basedOn w:val="Normal"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableofAuthorities"/>
+ <w:tabs>
+ <w:tab w:leader="dot" w:pos="8640" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:after="80" w:before="80"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableofFigures" w:type="paragraph">
+ <w:name w:val="table of figures"/>
+ <wx:uiName wx:val="Table of Figures"/>
+ <w:next w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableofFigures"/>
+ <w:tabs>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="Hyperlink" w:type="character">
+ <w:name w:val="Hyperlink"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:rsid w:val="00721F21"/>
+ <w:rPr>
+ <w:color w:val="0000FF"/>
+ <w:u w:val="single"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="PageNumber" w:type="character">
+ <w:name w:val="page number"/>
+ <wx:uiName wx:val="Page Number"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:rsid w:val="00D90577"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:dstrike w:val="off"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ <w:vertAlign w:val="baseline"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RowHead11" w:type="paragraph">
+ <w:name w:val="RowHead11"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="RowHead11"/>
+ <w:listPr>
+ <w:ilvl w:val="12"/>
+ </w:listPr>
+ <w:spacing w:after="80" w:before="80"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText11C" w:type="paragraph">
+ <w:name w:val="TableText11C"/>
+ <w:basedOn w:val="TableText11"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText11C"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Times New Roman"/>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl1" w:type="paragraph">
+ <w:name w:val="list:lvl 1"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl1"/>
+ <w:listPr>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="936" w:val="left"/>
+ <w:tab w:pos="1440" w:val="left"/>
+ <w:tab w:pos="2160" w:val="left"/>
+ <w:tab w:pos="2880" w:val="left"/>
+ <w:tab w:pos="3600" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ <w:tab w:pos="5040" w:val="left"/>
+ <w:tab w:pos="5760" w:val="left"/>
+ <w:tab w:pos="6480" w:val="left"/>
+ <w:tab w:pos="7200" w:val="left"/>
+ <w:tab w:pos="7920" w:val="left"/>
+ <w:tab w:pos="8640" w:val="left"/>
+ <w:tab w:pos="9360" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="60" w:before="60" w:line="240" w:line-rule="at-least"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Helvetica" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl5" w:type="paragraph">
+ <w:name w:val="list:lvl 5"/>
+ <w:basedOn w:val="paranormal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl5"/>
+ <w:listPr>
+ <w:ilvl w:val="4"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="clear"/>
+ <w:tab w:pos="720" w:val="clear"/>
+ <w:tab w:pos="1080" w:val="clear"/>
+ <w:tab w:pos="1440" w:val="clear"/>
+ <w:tab w:pos="1800" w:val="clear"/>
+ <w:tab w:pos="2160" w:val="clear"/>
+ <w:tab w:pos="2520" w:val="clear"/>
+ <w:tab w:pos="2880" w:val="clear"/>
+ <w:tab w:pos="3240" w:val="clear"/>
+ <w:tab w:pos="3600" w:val="clear"/>
+ <w:tab w:pos="3384" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="40"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl2" w:type="paragraph">
+ <w:name w:val="list:lvl 2"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl2"/>
+ <w:widowControl w:val="off"/>
+ <w:listPr>
+ <w:ilvl w:val="1"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60" w:line="240" w:line-rule="at-least"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="000000"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="AppendixTitle" w:type="paragraph">
+ <w:name w:val="Appendix Title"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="AppendixTitle"/>
+ <w:pageBreakBefore/>
+ <w:spacing w:after="240" w:before="120"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RowHead10" w:type="paragraph">
+ <w:name w:val="RowHead10"/>
+ <w:basedOn w:val="RowHead11"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="RowHead10"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC1" w:type="paragraph">
+ <w:name w:val="toc 1"/>
+ <wx:uiName wx:val="TOC 1"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00003D10"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC1"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="540" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:before="240"/>
+ <w:ind w:hanging="547" w:left="547"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:caps/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC2" w:type="paragraph">
+ <w:name w:val="toc 2"/>
+ <wx:uiName wx:val="TOC 2"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00003D10"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC2"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="900" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9360" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:before="120"/>
+ <w:ind w:hanging="720" w:left="907"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC3" w:type="paragraph">
+ <w:name w:val="toc 3"/>
+ <wx:uiName wx:val="TOC 3"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC3"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="1260" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="900" w:left="1260"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC4" w:type="paragraph">
+ <w:name w:val="toc 4"/>
+ <wx:uiName wx:val="TOC 4"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC4"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="1620" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="1080" w:left="1620"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC5" w:type="paragraph">
+ <w:name w:val="toc 5"/>
+ <wx:uiName wx:val="TOC 5"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC5"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="1980" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="1260" w:left="1980"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC6" w:type="paragraph">
+ <w:name w:val="toc 6"/>
+ <wx:uiName wx:val="TOC 6"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC6"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="2340" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="1440" w:left="2340"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:noProof/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC7" w:type="paragraph">
+ <w:name w:val="toc 7"/>
+ <wx:uiName wx:val="TOC 7"/>
+ <w:basedOn w:val="Normal"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC7"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="2700" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:after="0" w:before="0" w:line="240" w:line-rule="auto"/>
+ <w:ind w:hanging="1620" w:left="2700"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC8" w:type="paragraph">
+ <w:name w:val="toc 8"/>
+ <wx:uiName wx:val="TOC 8"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC8"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="2970" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="1710" w:left="2970"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOC9" w:type="paragraph">
+ <w:name w:val="toc 9"/>
+ <wx:uiName wx:val="TOC 9"/>
+ <w:next w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TOC9"/>
+ <w:keepLines/>
+ <w:tabs>
+ <w:tab w:pos="3330" w:val="left"/>
+ <w:tab w:leader="dot" w:pos="9350" w:val="right"/>
+ </w:tabs>
+ <w:ind w:hanging="1890" w:left="3330"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="HeadingUnnumbered" w:type="paragraph">
+ <w:name w:val="Heading Unnumbered"/>
+ <w:next w:val="paranormal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00107AA6"/>
+ <w:pPr>
+ <w:pStyle w:val="HeadingUnnumbered"/>
+ <w:keepNext/>
+ <w:keepLines/>
+ <w:spacing w:after="80" w:before="240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:cs="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText10" w:type="paragraph">
+ <w:name w:val="TableText10"/>
+ <w:basedOn w:val="TableText11"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText10"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableTextBCentered" w:type="paragraph">
+ <w:name w:val="TableTextB Centered"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00913874"/>
+ <w:pPr>
+ <w:pStyle w:val="TableTextBCentered"/>
+ <w:spacing w:line="220" w:line-rule="at-least"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText10C" w:type="paragraph">
+ <w:name w:val="TableText10C"/>
+ <w:basedOn w:val="TableText11C"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText10C"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText10B" w:type="paragraph">
+ <w:name w:val="TableText10B"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00913874"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText10B"/>
+ <w:spacing w:line="220" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="acronym" w:type="paragraph">
+ <w:name w:val="acronym"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="acronym"/>
+ <w:tabs>
+ <w:tab w:pos="2160" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="40" w:before="40"/>
+ <w:ind w:hanging="2160" w:left="2160"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl6" w:type="paragraph">
+ <w:name w:val="list:lvl 6"/>
+ <w:basedOn w:val="paranormal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl6"/>
+ <w:listPr>
+ <w:ilvl w:val="5"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="clear"/>
+ <w:tab w:pos="720" w:val="clear"/>
+ <w:tab w:pos="1080" w:val="clear"/>
+ <w:tab w:pos="1440" w:val="clear"/>
+ <w:tab w:pos="1800" w:val="clear"/>
+ <w:tab w:pos="2160" w:val="clear"/>
+ <w:tab w:pos="2520" w:val="clear"/>
+ <w:tab w:pos="2880" w:val="clear"/>
+ <w:tab w:pos="3240" w:val="clear"/>
+ <w:tab w:pos="3600" w:val="clear"/>
+ <w:tab w:pos="3960" w:val="clear"/>
+ <w:tab w:pos="4320" w:val="clear"/>
+ </w:tabs>
+ <w:spacing w:after="40"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="hdr1L" w:type="paragraph">
+ <w:name w:val="hdr1L"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="hdr1L"/>
+ <w:tabs>
+ <w:tab w:pos="0" w:val="left"/>
+ <w:tab w:pos="4680" w:val="center"/>
+ <w:tab w:pos="9360" w:val="right"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="hdr2L" w:type="paragraph">
+ <w:name w:val="hdr2L"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00721F21"/>
+ <w:pPr>
+ <w:pStyle w:val="hdr2L"/>
+ <w:tabs>
+ <w:tab w:pos="0" w:val="left"/>
+ <w:tab w:pos="4680" w:val="center"/>
+ <w:tab w:pos="9360" w:val="right"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:before="0" w:line="180" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="bulletlvl1" w:type="paragraph">
+ <w:name w:val="bullet:lvl 1"/>
+ <w:basedOn w:val="Normal"/>
+ <w:link w:val="bulletlvl1CharChar"/>
+ <w:rsid w:val="00143D5A"/>
+ <w:pPr>
+ <w:pStyle w:val="bulletlvl1"/>
+ <w:listPr>
+ <w:ilfo w:val="1"/>
+ </w:listPr>
+ <w:spacing w:after="80"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="bulletlvl2" w:type="paragraph">
+ <w:name w:val="bullet:lvl 2"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00143D5A"/>
+ <w:pPr>
+ <w:pStyle w:val="bulletlvl2"/>
+ <w:widowControl w:val="off"/>
+ <w:listPr>
+ <w:ilfo w:val="2"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="1224" w:val="clear"/>
+ <w:tab w:pos="648" w:val="left"/>
+ <w:tab w:pos="1008" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="80"/>
+ <w:ind w:hanging="1080" w:left="1728"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paraindent4" w:type="paragraph">
+ <w:name w:val="para:indent4"/>
+ <w:basedOn w:val="paraindent3"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="0071606D"/>
+ <w:pPr>
+ <w:pStyle w:val="paraindent4"/>
+ <w:ind w:left="1440"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl7" w:type="paragraph">
+ <w:name w:val="list:lvl 7"/>
+ <w:basedOn w:val="paranormal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl7"/>
+ <w:listPr>
+ <w:ilvl w:val="6"/>
+ <w:ilfo w:val="11"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="clear"/>
+ <w:tab w:pos="720" w:val="clear"/>
+ <w:tab w:pos="1080" w:val="clear"/>
+ <w:tab w:pos="1440" w:val="clear"/>
+ <w:tab w:pos="1800" w:val="clear"/>
+ <w:tab w:pos="2160" w:val="clear"/>
+ <w:tab w:pos="2520" w:val="clear"/>
+ <w:tab w:pos="2880" w:val="clear"/>
+ <w:tab w:pos="3240" w:val="clear"/>
+ <w:tab w:pos="3600" w:val="clear"/>
+ <w:tab w:pos="3960" w:val="clear"/>
+ <w:tab w:pos="3024" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="40"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOCfiguretitle" w:type="paragraph">
+ <w:name w:val="TOC:figure title"/>
+ <w:basedOn w:val="Caption"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00894991"/>
+ <w:pPr>
+ <w:pStyle w:val="TOCfiguretitle"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="note" w:type="paragraph">
+ <w:name w:val="note"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="006E0AB6"/>
+ <w:pPr>
+ <w:pStyle w:val="note"/>
+ <w:spacing w:after="80" w:before="80"/>
+ <w:ind w:hanging="936" w:left="1656" w:right="720"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang2" w:type="paragraph">
+ <w:name w:val="req lang:2"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang2"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang3" w:type="paragraph">
+ <w:name w:val="req lang:3"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang3"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="1080"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang4" w:type="paragraph">
+ <w:name w:val="req lang:4"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang4"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="1440"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang5" w:type="paragraph">
+ <w:name w:val="req lang:5"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang5"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang6" w:type="paragraph">
+ <w:name w:val="req lang:6"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00F25A7A"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang6"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="statedef" w:type="paragraph">
+ <w:name w:val="state def"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00DE6BA0"/>
+ <w:pPr>
+ <w:pStyle w:val="statedef"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="0" w:before="80"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:caps/>
+ <w:color w:val="408040"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="intentblank" w:type="paragraph">
+ <w:name w:val="intent:blank"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="000B79E8"/>
+ <w:pPr>
+ <w:pStyle w:val="intentblank"/>
+ <w:spacing w:after="0" w:before="6480"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="code" w:type="paragraph">
+ <w:name w:val="code"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="006D4514"/>
+ <w:pPr>
+ <w:pStyle w:val="code"/>
+ <w:spacing w:after="80" w:before="80" w:line="220" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="18"/>
+ <w:sz-cs w:val="18"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="parapage" w:type="paragraph">
+ <w:name w:val="para:page"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00DD22A9"/>
+ <w:pPr>
+ <w:pStyle w:val="parapage"/>
+ <w:pageBreakBefore/>
+ <w:spacing w:after="80" w:before="80"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TOCtabletitle" w:type="paragraph">
+ <w:name w:val="TOC:table title"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="00B869CD"/>
+ <w:pPr>
+ <w:pStyle w:val="TOCtabletitle"/>
+ <w:spacing w:after="120" w:before="120"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RCRitem" w:type="paragraph">
+ <w:name w:val="RCR:item"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="007A1F4F"/>
+ <w:pPr>
+ <w:pStyle w:val="RCRitem"/>
+ <w:tabs>
+ <w:tab w:pos="1800" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:before="120"/>
+ <w:ind w:hanging="1800" w:left="1800" w:right="720"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="RCRheader" w:type="paragraph">
+ <w:name w:val="RCR:header"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="006D781E"/>
+ <w:pPr>
+ <w:pStyle w:val="RCRheader"/>
+ <w:tabs>
+ <w:tab w:pos="792" w:val="left"/>
+ <w:tab w:pos="1800" w:val="left"/>
+ <w:tab w:leader="underscore" w:pos="8640" w:val="right"/>
+ </w:tabs>
+ <w:spacing w:after="0"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:sz-cs w:val="22"/>
+ <w:u w:val="single"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="line" w:type="paragraph">
+ <w:name w:val="line"/>
+ <w:basedOn w:val="Normal"/>
+ <w:autoRedefine/>
+ <w:rsid w:val="006B63C2"/>
+ <w:pPr>
+ <w:pStyle w:val="line"/>
+ <w:spacing w:before="0" w:line="40" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="12"/>
+ <w:sz-cs w:val="12"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang7" w:type="paragraph">
+ <w:name w:val="req lang: 7"/>
+ <w:basedOn w:val="reqlang6"/>
+ <w:rsid w:val="00C0337E"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang7"/>
+ <w:ind w:left="2520"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier New"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang70" w:type="paragraph">
+ <w:name w:val="req lang:7"/>
+ <w:basedOn w:val="reqlang7"/>
+ <w:rsid w:val="004C603C"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang70"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier New"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang8" w:type="paragraph">
+ <w:name w:val="req lang:8"/>
+ <w:basedOn w:val="reqlang7"/>
+ <w:rsid w:val="004C603C"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang8"/>
+ <w:ind w:left="2880"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier New"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="reqlang9" w:type="paragraph">
+ <w:name w:val="req lang:9"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="007534C9"/>
+ <w:pPr>
+ <w:pStyle w:val="reqlang9"/>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="3240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/>
+ <wx:font wx:val="Courier New"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="DocumentMap" w:type="paragraph">
+ <w:name w:val="Document Map"/>
+ <w:basedOn w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00AF20CB"/>
+ <w:pPr>
+ <w:pStyle w:val="DocumentMap"/>
+ <w:shd w:color="auto" w:fill="000080" w:val="clear"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Tahoma" w:cs="Tahoma" w:h-ansi="Tahoma"/>
+ <wx:font wx:val="Tahoma"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment1" w:type="paragraph">
+ <w:name w:val="comment:1"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment1"/>
+ <w:spacing w:after="60" w:before="60"/>
+ <w:ind w:left="360"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment2" w:type="paragraph">
+ <w:name w:val="comment:2"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment2"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="720"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:cs="Arial"/>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment3" w:type="paragraph">
+ <w:name w:val="comment:3"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment3"/>
+ <w:tabs>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="720" w:val="left"/>
+ <w:tab w:pos="1080" w:val="left"/>
+ <w:tab w:pos="1440" w:val="left"/>
+ <w:tab w:pos="1800" w:val="left"/>
+ <w:tab w:pos="2160" w:val="left"/>
+ <w:tab w:pos="2520" w:val="left"/>
+ <w:tab w:pos="2880" w:val="left"/>
+ <w:tab w:pos="3240" w:val="left"/>
+ <w:tab w:pos="3600" w:val="left"/>
+ <w:tab w:pos="3960" w:val="left"/>
+ <w:tab w:pos="4320" w:val="left"/>
+ </w:tabs>
+ <w:autoSpaceDE w:val="off"/>
+ <w:autoSpaceDN w:val="off"/>
+ <w:adjustRightInd w:val="off"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="1080"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ <w:sz-cs w:val="22"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment4" w:type="paragraph">
+ <w:name w:val="comment:4"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment4"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="1440"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment5" w:type="paragraph">
+ <w:name w:val="comment:5"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment5"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="1800"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment6" w:type="paragraph">
+ <w:name w:val="comment:6"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment6"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="2160"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment7" w:type="paragraph">
+ <w:name w:val="comment:7"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment7"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="2520"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment8" w:type="paragraph">
+ <w:name w:val="comment:8"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment8"/>
+ <w:spacing w:after="80" w:before="60"/>
+ <w:ind w:left="2880"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="comment9" w:type="paragraph">
+ <w:name w:val="comment:9"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00111B46"/>
+ <w:pPr>
+ <w:pStyle w:val="comment9"/>
+ <w:spacing w:after="80"/>
+ <w:ind w:left="3240"/>
+ <w:contextualSpacing/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="FF0000"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="dlheader" w:type="paragraph">
+ <w:name w:val="dl:header"/>
+ <w:basedOn w:val="paranormal"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="dlheader"/>
+ <w:spacing w:after="0" w:before="240"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Courier" w:h-ansi="Courier"/>
+ <wx:font wx:val="Courier"/>
+ <w:sz w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="dlbody" w:type="paragraph">
+ <w:name w:val="dl:body"/>
+ <w:basedOn w:val="dlheader"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="dlbody"/>
+ <w:spacing w:before="0"/>
+ <w:ind w:left="360"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="dlprocheader" w:type="paragraph">
+ <w:name w:val="dl_proc:header"/>
+ <w:basedOn w:val="dlbody"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="dlprocheader"/>
+ <w:spacing w:before="240"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="dlprocbody" w:type="paragraph">
+ <w:name w:val="dl_proc:body"/>
+ <w:basedOn w:val="dlprocheader"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="dlprocbody"/>
+ <w:spacing w:before="0"/>
+ <w:ind w:left="720"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="dldescription" w:type="paragraph">
+ <w:name w:val="dl:description"/>
+ <w:basedOn w:val="dlheader"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="dldescription"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="bitmapheader" w:type="paragraph">
+ <w:name w:val="bitmap:header"/>
+ <w:basedOn w:val="dlheader"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="bitmapheader"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="bitmapbody" w:type="paragraph">
+ <w:name w:val="bitmap:body"/>
+ <w:basedOn w:val="dlheader"/>
+ <w:rsid w:val="00071300"/>
+ <w:pPr>
+ <w:pStyle w:val="bitmapbody"/>
+ <w:spacing w:before="0"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Courier"/>
+ <w:sz w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX1" w:type="paragraph">
+ <w:name w:val="APPENDIX 1"/>
+ <w:basedOn w:val="Normal"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="004978C4"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX1"/>
+ <w:listPr>
+ <w:ilfo w:val="25"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="1440" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="72" w:before="152" w:line="240" w:line-rule="auto"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:color w:val="auto"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX2" w:type="paragraph">
+ <w:name w:val="APPENDIX 2"/>
+ <w:basedOn w:val="APPENDIX1"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX2"/>
+ <w:listPr>
+ <w:ilvl w:val="1"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX3" w:type="paragraph">
+ <w:name w:val="APPENDIX 3"/>
+ <w:basedOn w:val="APPENDIX2"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="00E904D2"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX3"/>
+ <w:listPr>
+ <w:ilvl w:val="2"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TitlePage18pt" w:type="paragraph">
+ <w:name w:val="Title Page 18pt"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="0033770F"/>
+ <w:pPr>
+ <w:pStyle w:val="TitlePage18pt"/>
+ <w:spacing w:after="60" w:before="0" w:line="240" w:line-rule="auto"/>
+ <w:jc w:val="center"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="36"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TitlePage16pt" w:type="paragraph">
+ <w:name w:val="Title Page 16pt"/>
+ <w:basedOn w:val="TitlePage18pt"/>
+ <w:rsid w:val="0033770F"/>
+ <w:pPr>
+ <w:pStyle w:val="TitlePage16pt"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="32"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TitlePage14pt" w:type="paragraph">
+ <w:name w:val="Title Page 14pt"/>
+ <w:basedOn w:val="TitlePage16pt"/>
+ <w:rsid w:val="0033770F"/>
+ <w:pPr>
+ <w:pStyle w:val="TitlePage14pt"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b w:val="off"/>
+ <w:sz w:val="28"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para10pt" w:type="paragraph">
+ <w:name w:val="para 10pt"/>
+ <w:basedOn w:val="Normal"/>
+ <w:link w:val="para10ptChar"/>
+ <w:rsid w:val="004E3337"/>
+ <w:pPr>
+ <w:pStyle w:val="para10pt"/>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para10ptnospacing" w:type="paragraph">
+ <w:name w:val="para 10pt no spacing"/>
+ <w:basedOn w:val="para10pt"/>
+ <w:rsid w:val="004A1CCA"/>
+ <w:pPr>
+ <w:pStyle w:val="para10ptnospacing"/>
+ <w:spacing w:after="0" w:before="0"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableText10nospacing" w:type="paragraph">
+ <w:name w:val="TableText10 no spacing"/>
+ <w:basedOn w:val="TableText10"/>
+ <w:rsid w:val="00D72507"/>
+ <w:pPr>
+ <w:pStyle w:val="TableText10nospacing"/>
+ <w:spacing w:after="0" w:before="0"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para8pt" w:type="paragraph">
+ <w:name w:val="para 8pt"/>
+ <w:basedOn w:val="Normal"/>
+ <w:link w:val="para8ptChar"/>
+ <w:rsid w:val="004E3337"/>
+ <w:pPr>
+ <w:pStyle w:val="para8pt"/>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="16"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paranormalChar" w:type="character">
+ <w:name w:val="para:normal Char"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:link w:val="paranormal"/>
+ <w:rsid w:val="00C93CA3"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:b-cs/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="bulletlvl1CharChar" w:type="character">
+ <w:name w:val="bullet:lvl 1 Char Char"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:link w:val="bulletlvl1"/>
+ <w:rsid w:val="00C93CA3"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:color w:val="000000"/>
+ <w:sz w:val="22"/>
+ <w:sz-cs w:val="22"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="ParagraphText" w:type="paragraph">
+ <w:name w:val="ParagraphText"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00C93CA3"/>
+ <w:pPr>
+ <w:pStyle w:val="ParagraphText"/>
+ <w:spacing w:after="120" w:before="0" w:line="240" w:line-rule="auto"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
+ <wx:font wx:val="Times New Roman"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl10" w:type="paragraph">
+ <w:name w:val="list lvl 1"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00A81E8C"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl10"/>
+ <w:listPr>
+ <w:ilfo w:val="9"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="936" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX4" w:type="paragraph">
+ <w:name w:val="APPENDIX 4"/>
+ <w:basedOn w:val="APPENDIX3"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX4"/>
+ <w:listPr>
+ <w:ilvl w:val="3"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX5" w:type="paragraph">
+ <w:name w:val="APPENDIX 5"/>
+ <w:basedOn w:val="APPENDIX4"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX5"/>
+ <w:listPr>
+ <w:ilvl w:val="4"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX6" w:type="paragraph">
+ <w:name w:val="APPENDIX 6"/>
+ <w:basedOn w:val="APPENDIX5"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX6"/>
+ <w:listPr>
+ <w:ilvl w:val="5"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX7" w:type="paragraph">
+ <w:name w:val="APPENDIX 7"/>
+ <w:basedOn w:val="APPENDIX6"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX7"/>
+ <w:listPr>
+ <w:ilvl w:val="6"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX8" w:type="paragraph">
+ <w:name w:val="APPENDIX 8"/>
+ <w:basedOn w:val="APPENDIX7"/>
+ <w:next w:val="paranormal"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX8"/>
+ <w:listPr>
+ <w:ilvl w:val="7"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="APPENDIX9" w:type="paragraph">
+ <w:name w:val="APPENDIX 9"/>
+ <w:basedOn w:val="APPENDIX8"/>
+ <w:rsid w:val="009B7093"/>
+ <w:pPr>
+ <w:pStyle w:val="APPENDIX9"/>
+ <w:listPr>
+ <w:ilvl w:val="8"/>
+ </w:listPr>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="BalloonText" w:type="paragraph">
+ <w:name w:val="Balloon Text"/>
+ <w:basedOn w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00B47E5D"/>
+ <w:pPr>
+ <w:pStyle w:val="BalloonText"/>
+ </w:pPr>
+ <w:rPr>
+ <w:rFonts w:ascii="Tahoma" w:cs="Tahoma" w:h-ansi="Tahoma"/>
+ <wx:font wx:val="Tahoma"/>
+ <w:sz w:val="16"/>
+ <w:sz-cs w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listreset" w:type="list">
+ <w:name w:val="listreset"/>
+ <w:basedOn w:val="NoList"/>
+ <w:rsid w:val="00D25E39"/>
+ <w:pPr>
+ <w:listPr>
+ <w:ilfo w:val="26"/>
+ </w:listPr>
+ </w:pPr>
+ </w:style>
+ <w:style w:styleId="bulletlvl3" w:type="paragraph">
+ <w:name w:val="bullet:lvl 3"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00EF5226"/>
+ <w:pPr>
+ <w:pStyle w:val="bulletlvl3"/>
+ <w:listPr>
+ <w:ilfo w:val="28"/>
+ </w:listPr>
+ <w:tabs>
+ <w:tab w:pos="3024" w:val="clear"/>
+ <w:tab w:pos="360" w:val="left"/>
+ <w:tab w:pos="1008" w:val="left"/>
+ </w:tabs>
+ <w:spacing w:after="80"/>
+ <w:ind w:hanging="360" w:left="1368"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="CommentReference" w:type="character">
+ <w:name w:val="annotation reference"/>
+ <wx:uiName wx:val="Comment Reference"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00E40969"/>
+ <w:rPr>
+ <w:sz w:val="16"/>
+ <w:sz-cs w:val="16"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="CommentText" w:type="paragraph">
+ <w:name w:val="annotation text"/>
+ <wx:uiName wx:val="Comment Text"/>
+ <w:basedOn w:val="Normal"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00E40969"/>
+ <w:pPr>
+ <w:pStyle w:val="CommentText"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="20"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="CommentSubject" w:type="paragraph">
+ <w:name w:val="annotation subject"/>
+ <wx:uiName wx:val="Comment Subject"/>
+ <w:basedOn w:val="CommentText"/>
+ <w:next w:val="CommentText"/>
+ <w:semiHidden/>
+ <w:rsid w:val="00E40969"/>
+ <w:pPr>
+ <w:pStyle w:val="CommentSubject"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:b/>
+ <w:b-cs/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TitlePage22pt" w:type="paragraph">
+ <w:name w:val="Title Page 22pt"/>
+ <w:basedOn w:val="TitlePage16pt"/>
+ <w:rsid w:val="005F35C4"/>
+ <w:pPr>
+ <w:pStyle w:val="TitlePage22pt"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:sz w:val="44"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para" w:type="paragraph">
+ <w:name w:val="para"/>
+ <w:basedOn w:val="Normal"/>
+ <w:link w:val="paraChar"/>
+ <w:rsid w:val="0057061B"/>
+ <w:pPr>
+ <w:pStyle w:val="para"/>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ <w:jc w:val="both"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="paraChar" w:type="character">
+ <w:name w:val="para Char"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:link w:val="para"/>
+ <w:rsid w:val="0057061B"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:sz w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl20" w:type="paragraph">
+ <w:name w:val="list lvl 2"/>
+ <w:basedOn w:val="ListNumber3"/>
+ <w:rsid w:val="0057061B"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl20"/>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="ListNumber3" w:type="paragraph">
+ <w:name w:val="List Number 3"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="0057061B"/>
+ <w:pPr>
+ <w:pStyle w:val="ListNumber3"/>
+ <w:tabs>
+ <w:tab w:pos="1512" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="504" w:left="1512"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="TableGrid" w:type="table">
+ <w:name w:val="Table Grid"/>
+ <w:basedOn w:val="TableNormal"/>
+ <w:rsid w:val="008B1AB7"/>
+ <w:pPr>
+ <w:spacing w:after="40" w:before="40" w:line="240" w:line-rule="at-least"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Times New Roman"/>
+ </w:rPr>
+ <w:tblPr>
+ <w:tblInd w:type="dxa" w:w="0"/>
+ <w:tblBorders>
+ <w:top w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ <w:left w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ <w:bottom w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ <w:right w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ <w:insideH w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ <w:insideV w:color="auto" w:space="0" w:sz="4" w:val="single" wx:bdrwidth="10"/>
+ </w:tblBorders>
+ <w:tblCellMar>
+ <w:top w:type="dxa" w:w="0"/>
+ <w:left w:type="dxa" w:w="108"/>
+ <w:bottom w:type="dxa" w:w="0"/>
+ <w:right w:type="dxa" w:w="108"/>
+ </w:tblCellMar>
+ </w:tblPr>
+ </w:style>
+ <w:style w:styleId="para8ptChar" w:type="character">
+ <w:name w:val="para 8pt Char"/>
+ <w:basedOn w:val="paraChar"/>
+ <w:link w:val="para8pt"/>
+ <w:rsid w:val="007921D3"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:sz w:val="16"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para8ptunderline" w:type="paragraph">
+ <w:name w:val="para 8pt underline"/>
+ <w:basedOn w:val="para8pt"/>
+ <w:link w:val="para8ptunderlineChar"/>
+ <w:rsid w:val="007921D3"/>
+ <w:pPr>
+ <w:pStyle w:val="para8ptunderline"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:u w:val="single"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para8ptunderlineChar" w:type="character">
+ <w:name w:val="para 8pt underline Char"/>
+ <w:basedOn w:val="para8ptChar"/>
+ <w:link w:val="para8ptunderline"/>
+ <w:rsid w:val="007921D3"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:sz w:val="16"/>
+ <w:u w:val="single"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para8ptnospacing" w:type="paragraph">
+ <w:name w:val="para 8pt no spacing"/>
+ <w:basedOn w:val="para8pt"/>
+ <w:rsid w:val="007921D3"/>
+ <w:pPr>
+ <w:pStyle w:val="para8ptnospacing"/>
+ <w:spacing w:after="0" w:before="0"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="listlvl0" w:type="paragraph">
+ <w:name w:val="list lvl 0"/>
+ <w:basedOn w:val="ListNumber"/>
+ <w:rsid w:val="00A233DA"/>
+ <w:pPr>
+ <w:pStyle w:val="listlvl0"/>
+ <w:spacing w:after="72" w:before="72" w:line="240" w:line-rule="auto"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ <w:color w:val="auto"/>
+ <w:sz w:val="24"/>
+ <w:sz-cs w:val="20"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="ListNumber" w:type="paragraph">
+ <w:name w:val="List Number"/>
+ <w:basedOn w:val="Normal"/>
+ <w:rsid w:val="00A233DA"/>
+ <w:pPr>
+ <w:pStyle w:val="ListNumber"/>
+ <w:tabs>
+ <w:tab w:pos="504" w:val="list"/>
+ </w:tabs>
+ <w:ind w:hanging="504" w:left="504"/>
+ </w:pPr>
+ <w:rPr>
+ <wx:font wx:val="Arial"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="para10ptChar" w:type="character">
+ <w:name w:val="para 10pt Char"/>
+ <w:basedOn w:val="paraChar"/>
+ <w:link w:val="para10pt"/>
+ <w:rsid w:val="0015054E"/>
+ <w:rPr>
+ <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/>
+ <w:sz w:val="24"/>
+ <w:lang w:bidi="AR-SA" w:fareast="EN-US" w:val="EN-US"/>
+ </w:rPr>
+ </w:style>
+ <w:style w:styleId="FollowedHyperlink" w:type="character">
+ <w:name w:val="FollowedHyperlink"/>
+ <w:basedOn w:val="DefaultParagraphFont"/>
+ <w:rsid w:val="00B8047C"/>
+ <w:rPr>
+ <w:color w:val="800080"/>
+ <w:u w:val="single"/>
+ </w:rPr>
+ </w:style>
+ </w:styles>
+ <w:shapeDefaults>
+ <o:shapedefaults spidmax="37890" v:ext="edit"/>
+ <o:shapelayout v:ext="edit">
+ <o:idmap data="1" v:ext="edit"/>
+ </o:shapelayout>
+ </w:shapeDefaults>
+ <w:docPr>
+ <w:view w:val="print"/>
+ <w:zoom w:percent="100"/>
+ <w:displayBackgroundShape/>
+ <w:doNotEmbedSystemFonts/>
+ <w:bordersDontSurroundHeader/>
+ <w:bordersDontSurroundFooter/>
+ <w:attachedTemplate w:val=""/>
+ <w:stylePaneFormatFilter w:val="3001"/>
+ <w:documentProtection w:enforcement="on" w:formatting="on" w:unprotectPassword="00000000"/>
+ <w:defaultTabStop w:val="720"/>
+ <w:doNotHyphenateCaps/>
+ <w:drawingGridHorizontalSpacing w:val="120"/>
+ <w:drawingGridVerticalSpacing w:val="120"/>
+ <w:displayHorizontalDrawingGridEvery w:val="0"/>
+ <w:displayVerticalDrawingGridEvery w:val="3"/>
+ <w:useMarginsForDrawingGridOrigin/>
+ <w:doNotShadeFormData/>
+ <w:punctuationKerning/>
+ <w:characterSpacingControl w:val="CompressPunctuation"/>
+ <w:optimizeForBrowser/>
+ <w:validateAgainstSchema w:val="off"/>
+ <w:saveInvalidXML/>
+ <w:ignoreMixedContent w:val="off"/>
+ <w:alwaysShowPlaceholderText w:val="off"/>
+ <w:hdrShapeDefaults>
+ <o:shapedefaults spidmax="37890" v:ext="edit"/>
+ </w:hdrShapeDefaults>
+ <w:footnotePr>
+ <w:footnote w:type="separator">
+ <w:p>
+ <w:r>
+ <w:separator/>
+ </w:r>
+ </w:p>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ </w:footnote>
+ <w:footnote w:type="continuation-separator">
+ <w:p>
+ <w:r>
+ <w:continuationSeparator/>
+ </w:r>
+ </w:p>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ </w:footnote>
+ </w:footnotePr>
+ <w:endnotePr>
+ <w:endnote w:type="separator">
+ <w:p>
+ <w:r>
+ <w:separator/>
+ </w:r>
+ </w:p>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ </w:endnote>
+ <w:endnote w:type="continuation-separator">
+ <w:p>
+ <w:r>
+ <w:continuationSeparator/>
+ </w:r>
+ </w:p>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ <w:p/>
+ </w:endnote>
+ </w:endnotePr>
+ <w:compat>
+ <w:footnoteLayoutLikeWW8/>
+ <w:shapeLayoutLikeWW8/>
+ <w:alignTablesRowByRow/>
+ <w:forgetLastTabAlignment/>
+ <w:doNotUseHTMLParagraphAutoSpacing/>
+ <w:layoutRawTableWidth/>
+ <w:layoutTableRowsApart/>
+ <w:useWord97LineBreakingRules/>
+ <w:dontAllowFieldEndSelect/>
+ <w:useWord2002TableStyleRules/>
+ </w:compat>
+ <wsp:rsids>
+ <wsp:rsidRoot wsp:val="00244327"/>
+ </wsp:rsids>
+ </w:docPr>
+ <w:body>
+ <wx:sect>
+ <ns0:Artifact>
+ <w:p>
+ <Set_Name>
+ <w:r>
+ <w:t>Default</w:t>
+ </w:r>
+ </Set_Name>
+ <Outline>
+ <HeadingAttribute>
+ <w:r>
+ <w:t>Name</w:t>
+ </w:r>
+ </HeadingAttribute>
+ <RecurseChildren>
+ <w:r>
+ <w:t>true</w:t>
+ </w:r>
+ </RecurseChildren>
+ </Outline>
+ <Attribute>
+ <Name>
+ <w:r>
+ <w:t>*</w:t>
+ </w:r>
+ </Name>
+ </Attribute>
+ </w:p>
+ </ns0:Artifact>
+ <w:p/>
+ <w:sectPr>
+ <w:hdr w:type="odd">
+ <w:p>
+ <w:pPr>
+ <w:pStyle w:val="Header"/>
+ </w:pPr>
+ </w:p>
+ </w:hdr>
+ <w:pgSz w:code="1" w:h="15840" w:w="12240"/>
+ <w:pgMar w:bottom="1440" w:footer="432" w:gutter="0" w:header="432" w:left="1440" w:right="1440" w:top="1440"/>
+ <w:pgNumType w:start="1"/>
+ <w:cols w:space="475"/>
+ <w:noEndnote/>
+ </w:sectPr>
+ </wx:sect>
+ </w:body>
+</w:wordDocument>
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/Word Edit Template.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/Word Edit Template.xml
new file mode 100644
index 00000000000..fff1ff5ab96
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/Word Edit Template.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?mso-application progid="Word.Document"?>
+<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" xmlns:ns0="http://BeforeGUID/PrePendAAABGPIkRqcBGh2XK2Kgvw/AfterGUID" xmlns:ns1="http://www.w3.org/2001/XMLSchema" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"><w:ignoreElements w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/><o:DocumentProperties><o:Title>SRS</o:Title><o:Author>Ryan D. Brooks</o:Author><o:LastAuthor>Ryan Brooks</o:LastAuthor><o:Revision>3</o:Revision><o:TotalTime>1</o:TotalTime><o:LastPrinted>2007-03-22T22:27:00Z</o:LastPrinted><o:Created>2008-09-01T23:47:00Z</o:Created><o:LastSaved>2008-10-03T20:33:00Z</o:LastSaved><o:Pages>1</o:Pages><o:Words>7</o:Words><o:Characters>46</o:Characters><o:Company>The Boeing Company</o:Company><o:Lines>1</o:Lines><o:Paragraphs>1</o:Paragraphs><o:CharactersWithSpaces>52</o:CharactersWithSpaces><o:Version>11.0000</o:Version></o:DocumentProperties><w:fonts><w:defaultFonts w:ascii="Times New Roman" w:fareast="Times New Roman" w:h-ansi="Times New Roman" w:cs="Times New Roman"/><w:font w:name="Helvetica"><w:panose-1 w:val="020B0604020202020204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:notTrueType/><w:pitch w:val="variable"/><w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/></w:font><w:font w:name="Courier"><w:panose-1 w:val="02070409020205020404"/><w:charset w:val="00"/><w:family w:val="Modern"/><w:notTrueType/><w:pitch w:val="fixed"/><w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/></w:font><w:font w:name="Wingdings"><w:panose-1 w:val="05000000000000000000"/><w:charset w:val="02"/><w:family w:val="Auto"/><w:pitch w:val="variable"/><w:sig w:usb-0="00000000" w:usb-1="10000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/></w:font><w:font w:name="Tahoma"><w:panose-1 w:val="020B0604030504040204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="61007A87" w:usb-1="80000000" w:usb-2="00000008" w:usb-3="00000000" w:csb-0="000101FF" w:csb-1="00000000"/></w:font></w:fonts><w:lists><w:listDef w:listDefId="0"><w:lsid w:val="003A6350"/><w:plt w:val="Multilevel"/><w:tmpl w:val="F89E6E26"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:pStyle w:val="APPENDIX1"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:pStyle w:val="APPENDIX2"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:pStyle w:val="APPENDIX3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:pStyle w:val="APPENDIX4"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:pStyle w:val="APPENDIX5"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:pStyle w:val="APPENDIX6"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:pStyle w:val="APPENDIX7"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:pStyle w:val="APPENDIX8"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:pStyle w:val="APPENDIX9"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="1"><w:lsid w:val="016D5431"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="98C65BCE"/><w:lvl w:ilvl="0" w:tplc="94D2C566"><w:start w:val="1"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="504"/></w:tabs><w:ind w:left="504" w:hanging="504"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="2"><w:lsid w:val="0C4D206D"/><w:plt w:val="Multilevel"/><w:tmpl w:val="4B543E40"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="3"><w:lsid w:val="0DE40F2C"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="4"><w:lsid w:val="10AF29E5"/><w:plt w:val="Multilevel"/><w:tmpl w:val="7520DAAE"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4"/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="5"><w:lsid w:val="15EB1725"/><w:plt w:val="Multilevel"/><w:tmpl w:val="D902A83E"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%3."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="6"><w:lsid w:val="1C970BBA"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5EB82E3A"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="7"><w:lsid w:val="1D6C5FCC"/><w:plt w:val="Multilevel"/><w:tmpl w:val="E710F038"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="APPENDIX %1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="0" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="720" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:lvlText w:val="%3."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1440" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="8"><w:lsid w:val="1EC51BCC"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="9"><w:lsid w:val="256F5D56"/><w:plt w:val="Multilevel"/><w:tmpl w:val="EAC4E6B8"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="10"><w:lsid w:val="290A1130"/><w:plt w:val="Multilevel"/><w:tmpl w:val="EAC4E6B8"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="11"><w:lsid w:val="299E4F07"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="46E2B8B2"/><w:lvl w:ilvl="0" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1512"/></w:tabs><w:ind w:left="1512" w:hanging="504"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="12"><w:lsid w:val="29C240FD"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="FCA4DC08"/><w:lvl w:ilvl="0" w:tplc="B5146A3E"><w:start w:val="1"/><w:nfc w:val="23"/><w:pStyle w:val="bulletlvl2"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1224"/></w:tabs><w:ind w:left="1224" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090019"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="0409000F" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="0409000F" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="13"><w:lsid w:val="29CA5728"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="D00252C6"/><w:lvl w:ilvl="0" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%1"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="14"><w:lsid w:val="2A5411A0"/><w:plt w:val="Multilevel"/><w:tmpl w:val="2660867C"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:pStyle w:val="Heading1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:pStyle w:val="Heading2"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:pStyle w:val="Heading3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:pStyle w:val="Heading4"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:pStyle w:val="Heading5"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:pStyle w:val="Heading6"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:pStyle w:val="Heading7"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:pStyle w:val="Heading8"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:pStyle w:val="Heading9"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="15"><w:lsid w:val="2B1C06F5"/><w:plt w:val="Multilevel"/><w:tmpl w:val="3B98963A"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="16"><w:lsid w:val="2B477730"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="33801DC4"/><w:lvl w:ilvl="0" w:tplc="2D8A4B4C"><w:start w:val="1"/><w:nfc w:val="23"/><w:pStyle w:val="bulletlvl3"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3024"/></w:tabs><w:ind w:left="3024" w:hanging="2016"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2448"/></w:tabs><w:ind w:left="2448" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3168"/></w:tabs><w:ind w:left="3168" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3888"/></w:tabs><w:ind w:left="3888" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4608"/></w:tabs><w:ind w:left="4608" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5328"/></w:tabs><w:ind w:left="5328" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6048"/></w:tabs><w:ind w:left="6048" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6768"/></w:tabs><w:ind w:left="6768" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="7488"/></w:tabs><w:ind w:left="7488" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="17"><w:lsid w:val="2B5B6B3C"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5CC8E874"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:first-line="763"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="18"><w:lsid w:val="2D6545A6"/><w:plt w:val="Multilevel"/><w:tmpl w:val="3F227848"/><w:name w:val="listreset"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl1"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1296"/></w:tabs><w:ind w:left="1296" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/><w:b w:val="off"/><w:i w:val="off"/><w:caps w:val="off"/><w:strike w:val="off"/><w:dstrike w:val="off"/><w:outline w:val="off"/><w:shadow w:val="off"/><w:emboss w:val="off"/><w:imprint w:val="off"/><w:vanish w:val="off"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:vertAlign w:val="baseline"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:pStyle w:val="listlvl2"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="-31680"/></w:tabs><w:ind w:left="1656" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl3"/><w:lvlText w:val="(%3)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2016"/></w:tabs><w:ind w:left="2016" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:pStyle w:val="listlvl4"/><w:lvlText w:val="(%4)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2376"/></w:tabs><w:ind w:left="2376" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl5"/><w:lvlText w:val="%5)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2736"/></w:tabs><w:ind w:left="2736" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:pStyle w:val="listlvl6"/><w:lvlText w:val="%6)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3096"/></w:tabs><w:ind w:left="3096" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:hint="default"/><w:b w:val="off"/><w:i w:val="off"/><w:sz w:val="22"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl7"/><w:lvlText w:val="[%7]."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3456"/></w:tabs><w:ind w:left="3456" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="[%8]."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="19"><w:lsid w:val="308239DA"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="20"><w:lsid w:val="31A252E6"/><w:plt w:val="Multilevel"/><w:tmpl w:val="A9D83578"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="21"><w:lsid w:val="3B97448F"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:name w:val="listrestart2"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="22"><w:lsid w:val="3C165F4A"/><w:plt w:val="Multilevel"/><w:tmpl w:val="79A06FE6"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="23"><w:lsid w:val="42BB3748"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="DBE464B0"/><w:lvl w:ilvl="0" w:tplc="26BAF6B0"><w:start w:val="1"/><w:nfc w:val="23"/><w:pStyle w:val="bulletlvl1"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="648"/></w:tabs><w:ind w:left="648" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3960" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4680" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5400" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="6120" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6840"/></w:tabs><w:ind w:left="6840" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="24"><w:lsid w:val="47E309C3"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="25"><w:lsid w:val="5A401749"/><w:plt w:val="Multilevel"/><w:tmpl w:val="CD8E61CE"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="26"><w:lsid w:val="5A802BC9"/><w:plt w:val="Multilevel"/><w:tmpl w:val="CB0E7A2E"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3"/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="27"><w:lsid w:val="5C3B1B76"/><w:plt w:val="Multilevel"/><w:tmpl w:val="CB0E7A2E"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3"/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="28"><w:lsid w:val="5E371EBB"/><w:plt w:val="Multilevel"/><w:tmpl w:val="DA56D440"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="29"><w:lsid w:val="60B71688"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5EA20814"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="30"><w:lsid w:val="6389497B"/><w:plt w:val="Multilevel"/><w:tmpl w:val="AC5A6410"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:pStyle w:val="listlvl10"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="360" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1080" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:lvlText w:val="%3."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="1800" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2520" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3240" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="3960" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="4680" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5400" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6120" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="31"><w:lsid w:val="6469691A"/><w:plt w:val="Multilevel"/><w:tmpl w:val="E5D02024"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="32"><w:lsid w:val="69A642CA"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="33"><w:lsid w:val="74BA49AE"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:name w:val="listrestart"/><w:styleLink w:val="listreset"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="34"><w:lsid w:val="751E50EA"/><w:plt w:val="Multilevel"/><w:tmpl w:val="79E6FEDC"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="35"><w:lsid w:val="7D9D3B47"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="36"><w:lsid w:val="7F0F313D"/><w:plt w:val="Multilevel"/><w:tmpl w:val="F8FC63EE"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="37"><w:lsid w:val="7F633FB7"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5F5A52E8"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:list w:ilfo="1"><w:ilst w:val="23"/></w:list><w:list w:ilfo="2"><w:ilst w:val="12"/></w:list><w:list w:ilfo="3"><w:ilst w:val="18"/></w:list><w:list w:ilfo="4"><w:ilst w:val="14"/></w:list><w:list w:ilfo="5"><w:ilst w:val="6"/></w:list><w:list w:ilfo="6"><w:ilst w:val="26"/></w:list><w:list w:ilfo="7"><w:ilst w:val="5"/></w:list><w:list w:ilfo="8"><w:ilst w:val="13"/></w:list><w:list w:ilfo="9"><w:ilst w:val="30"/></w:list><w:list w:ilfo="10"><w:ilst w:val="7"/></w:list><w:list w:ilfo="11"><w:ilst w:val="18"/></w:list><w:list w:ilfo="12"><w:ilst w:val="27"/></w:list><w:list w:ilfo="13"><w:ilst w:val="36"/></w:list><w:list w:ilfo="14"><w:ilst w:val="2"/></w:list><w:list w:ilfo="15"><w:ilst w:val="28"/></w:list><w:list w:ilfo="16"><w:ilst w:val="17"/></w:list><w:list w:ilfo="17"><w:ilst w:val="31"/></w:list><w:list w:ilfo="18"><w:ilst w:val="4"/></w:list><w:list w:ilfo="19"><w:ilst w:val="20"/></w:list><w:list w:ilfo="20"><w:ilst w:val="15"/></w:list><w:list w:ilfo="21"><w:ilst w:val="37"/></w:list><w:list w:ilfo="22"><w:ilst w:val="22"/></w:list><w:list w:ilfo="23"><w:ilst w:val="25"/></w:list><w:list w:ilfo="24"><w:ilst w:val="34"/></w:list><w:list w:ilfo="25"><w:ilst w:val="0"/></w:list><w:list w:ilfo="26"><w:ilst w:val="33"/></w:list><w:list w:ilfo="27"><w:ilst w:val="21"/></w:list><w:list w:ilfo="28"><w:ilst w:val="16"/></w:list><w:list w:ilfo="29"><w:ilst w:val="19"/></w:list><w:list w:ilfo="30"><w:ilst w:val="18"/><w:lvlOverride w:ilvl="0"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="1"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="2"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="3"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="4"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="5"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="6"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="7"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="8"><w:startOverride w:val="1"/></w:lvlOverride></w:list><w:list w:ilfo="31"><w:ilst w:val="11"/></w:list><w:list w:ilfo="32"><w:ilst w:val="1"/></w:list><w:list w:ilfo="33"><w:ilst w:val="35"/></w:list><w:list w:ilfo="34"><w:ilst w:val="8"/></w:list><w:list w:ilfo="35"><w:ilst w:val="29"/></w:list><w:list w:ilfo="36"><w:ilst w:val="14"/></w:list><w:list w:ilfo="37"><w:ilst w:val="10"/></w:list><w:list w:ilfo="38"><w:ilst w:val="9"/></w:list><w:list w:ilfo="39"><w:ilst w:val="3"/></w:list><w:list w:ilfo="40"><w:ilst w:val="24"/></w:list><w:list w:ilfo="41"><w:ilst w:val="32"/></w:list><w:ilfoMacAtCleanup w:val="5"/></w:lists><w:styles><w:versionOfBuiltInStylenames w:val="4"/><w:latentStyles w:defLockedState="off" w:latentStyleCount="156"/><w:style w:type="paragraph" w:default="on" w:styleId="Normal"><w:name w:val="Normal"/><w:rsid w:val="00C93CA3"/><w:pPr><w:spacing w:before="40" w:after="40" w:line="240" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading1"><w:name w:val="heading 1"/><wx:uiName wx:val="Heading 1"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading1"/><w:keepNext/><w:keepLines/><w:pageBreakBefore/><w:listPr><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="0"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:kern w:val="28"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading2"><w:name w:val="heading 2"/><wx:uiName wx:val="Heading 2"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading2"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="1"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="320" w:after="80"/><w:outlineLvl w:val="1"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading3"><w:name w:val="heading 3"/><wx:uiName wx:val="Heading 3"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading3"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="2"/><w:ilfo w:val="36"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="900"/></w:tabs><w:spacing w:before="320" w:after="80"/><w:outlineLvl w:val="2"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading4"><w:name w:val="heading 4"/><wx:uiName wx:val="Heading 4"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading4"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="3"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="3"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading5"><w:name w:val="heading 5"/><wx:uiName wx:val="Heading 5"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading5"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="4"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="4"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading6"><w:name w:val="heading 6"/><wx:uiName wx:val="Heading 6"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading6"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="5"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="5"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading7"><w:name w:val="heading 7"/><wx:uiName wx:val="Heading 7"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading7"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="6"/><w:ilfo w:val="36"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="1620"/></w:tabs><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="6"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading8"><w:name w:val="heading 8"/><wx:uiName wx:val="Heading 8"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading8"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="7"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="7"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading9"><w:name w:val="heading 9"/><wx:uiName wx:val="Heading 9"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading9"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="8"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="8"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:default="on" w:styleId="DefaultParagraphFont"><w:name w:val="Default Paragraph Font"/><w:semiHidden/></w:style><w:style w:type="table" w:default="on" w:styleId="TableNormal"><w:name w:val="Normal Table"/><wx:uiName wx:val="Table Normal"/><w:semiHidden/><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="list" w:default="on" w:styleId="NoList"><w:name w:val="No List"/><w:semiHidden/></w:style><w:style w:type="paragraph" w:styleId="paranormal"><w:name w:val="para:normal"/><w:link w:val="paranormalChar"/><w:rsid w:val="009E6B3D"/><w:pPr><w:pStyle w:val="paranormal"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="64" w:after="80" w:line="240" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b-cs/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl3"><w:name w:val="list:lvl 3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl3"/><w:listPr><w:ilvl w:val="2"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="2088"/></w:tabs></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang1"><w:name w:val="req lang:1"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang1"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Header"><w:name w:val="header"/><wx:uiName wx:val="Header"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A134C3"/><w:pPr><w:pStyle w:val="Header"/><w:tabs><w:tab w:val="center" w:pos="4320"/><w:tab w:val="right" w:pos="8640"/></w:tabs><w:spacing w:before="20" w:after="0" w:line="180" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="proprietarycontd"><w:name w:val="proprietary:cont'd"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="proprietarycontd"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="4320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="60" w:after="60" w:line="200" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="16"/><w:sz-cs w:val="16"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paracentered"><w:name w:val="para:centered"/><w:autoRedefine/><w:rsid w:val="00B43482"/><w:pPr><w:pStyle w:val="paracentered"/><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="80" w:after="80" w:line="240" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Helvetica"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent2"><w:name w:val="para:indent2"/><w:autoRedefine/><w:rsid w:val="004417BE"/><w:pPr><w:pStyle w:val="paraindent2"/><w:tabs><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="4320"/><w:tab w:val="left" w:pos="5040"/><w:tab w:val="left" w:pos="5760"/><w:tab w:val="left" w:pos="6480"/><w:tab w:val="left" w:pos="7200"/><w:tab w:val="left" w:pos="7920"/><w:tab w:val="left" w:pos="8640"/><w:tab w:val="left" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="80" w:line="240" w:line-rule="at-least"/><w:ind w:left="720"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent3"><w:name w:val="para:indent3"/><w:autoRedefine/><w:rsid w:val="0071606D"/><w:pPr><w:pStyle w:val="paraindent3"/><w:tabs><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4680"/><w:tab w:val="left" w:pos="5400"/><w:tab w:val="left" w:pos="6120"/><w:tab w:val="left" w:pos="6840"/><w:tab w:val="left" w:pos="7560"/><w:tab w:val="left" w:pos="8280"/><w:tab w:val="left" w:pos="9000"/><w:tab w:val="left" w:pos="9720"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="80" w:line="240" w:line-rule="at-least"/><w:ind w:left="1080"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Caption"><w:name w:val="caption"/><wx:uiName wx:val="Caption"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:autoRedefine/><w:semiHidden/><w:rsid w:val="0085234B"/><w:pPr><w:pStyle w:val="Caption"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="4320"/><w:tab w:val="left" w:pos="5400"/><w:tab w:val="left" w:pos="6480"/><w:tab w:val="left" w:pos="7560"/><w:tab w:val="left" w:pos="8640"/><w:tab w:val="left" w:pos="9720"/><w:tab w:val="left" w:pos="10800"/><w:tab w:val="left" w:pos="11880"/><w:tab w:val="left" w:pos="12960"/><w:tab w:val="left" w:pos="14040"/><w:tab w:val="left" w:pos="15120"/><w:tab w:val="left" w:pos="16200"/><w:tab w:val="left" w:pos="17280"/><w:tab w:val="left" w:pos="18360"/><w:tab w:val="left" w:pos="19440"/><w:tab w:val="left" w:pos="20520"/><w:tab w:val="left" w:pos="21600"/><w:tab w:val="left" w:pos="22680"/><w:tab w:val="left" w:pos="23760"/><w:tab w:val="left" w:pos="24840"/><w:tab w:val="left" w:pos="25920"/><w:tab w:val="left" w:pos="27000"/><w:tab w:val="left" w:pos="28080"/><w:tab w:val="left" w:pos="29160"/><w:tab w:val="left" w:pos="30240"/><w:tab w:val="left" w:pos="31320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="120" w:after="120"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent1"><w:name w:val="para:indent1"/><w:autoRedefine/><w:rsid w:val="007D424E"/><w:pPr><w:pStyle w:val="paraindent1"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4680"/><w:tab w:val="left" w:pos="5400"/><w:tab w:val="left" w:pos="6120"/><w:tab w:val="left" w:pos="6840"/><w:tab w:val="left" w:pos="7560"/><w:tab w:val="left" w:pos="8280"/><w:tab w:val="left" w:pos="9000"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="80" w:line="240" w:line-rule="at-least"/><w:ind w:left="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Footer"><w:name w:val="footer"/><wx:uiName wx:val="Footer"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="Footer"/><w:tabs><w:tab w:val="center" w:pos="4320"/><w:tab w:val="right" w:pos="8640"/></w:tabs></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl4"><w:name w:val="list:lvl 4"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl4"/><w:listPr><w:ilvl w:val="3"/><w:ilfo w:val="11"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHead"><w:name w:val="RowHead"/><w:basedOn w:val="Heading1"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHead"/><w:listPr><w:ilfo w:val="0"/></w:listPr><w:spacing w:before="100" w:after="100"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText11"><w:name w:val="TableText11"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText11"/><w:spacing w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOAHeading"><w:name w:val="toa heading"/><wx:uiName wx:val="TOA Heading"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOAHeading"/><w:spacing w:before="240" w:after="120"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:caps/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHeadL"><w:name w:val="RowHeadL"/><w:basedOn w:val="RowHead"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHeadL"/><w:spacing w:before="60" w:after="60"/><w:jc w:val="left"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b w:val="off"/><w:b-cs/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText11B"><w:name w:val="TableText11B"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00913874"/><w:pPr><w:pStyle w:val="TableText11B"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableofAuthorities"><w:name w:val="table of authorities"/><wx:uiName wx:val="Table of Authorities"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableofAuthorities"/><w:tabs><w:tab w:val="right" w:leader="dot" w:pos="8640"/></w:tabs><w:spacing w:before="80" w:after="80"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableofFigures"><w:name w:val="table of figures"/><wx:uiName wx:val="Table of Figures"/><w:next w:val="Normal"/><w:autoRedefine/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableofFigures"/><w:tabs><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:spacing w:before="60" w:after="60"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:styleId="Hyperlink"><w:name w:val="Hyperlink"/><w:basedOn w:val="DefaultParagraphFont"/><w:rsid w:val="00721F21"/><w:rPr><w:color w:val="0000FF"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="character" w:styleId="PageNumber"><w:name w:val="page number"/><wx:uiName wx:val="Page Number"/><w:basedOn w:val="DefaultParagraphFont"/><w:rsid w:val="00D90577"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:dstrike w:val="off"/><w:sz w:val="20"/><w:sz-cs w:val="20"/><w:vertAlign w:val="baseline"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHead11"><w:name w:val="RowHead11"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHead11"/><w:listPr><w:ilvl w:val="12"/></w:listPr><w:spacing w:before="80" w:after="80"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText11C"><w:name w:val="TableText11C"/><w:basedOn w:val="TableText11"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText11C"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl1"><w:name w:val="list:lvl 1"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl1"/><w:listPr><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="936"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="4320"/><w:tab w:val="left" w:pos="5040"/><w:tab w:val="left" w:pos="5760"/><w:tab w:val="left" w:pos="6480"/><w:tab w:val="left" w:pos="7200"/><w:tab w:val="left" w:pos="7920"/><w:tab w:val="left" w:pos="8640"/><w:tab w:val="left" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="60" w:after="60" w:line="240" w:line-rule="at-least"/><w:contextualSpacing/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Helvetica"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl5"><w:name w:val="list:lvl 5"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl5"/><w:listPr><w:ilvl w:val="4"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="360"/><w:tab w:val="clear" w:pos="720"/><w:tab w:val="clear" w:pos="1080"/><w:tab w:val="clear" w:pos="1440"/><w:tab w:val="clear" w:pos="1800"/><w:tab w:val="clear" w:pos="2160"/><w:tab w:val="clear" w:pos="2520"/><w:tab w:val="clear" w:pos="2880"/><w:tab w:val="clear" w:pos="3240"/><w:tab w:val="clear" w:pos="3600"/><w:tab w:val="left" w:pos="3384"/></w:tabs><w:spacing w:after="40"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl2"><w:name w:val="list:lvl 2"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl2"/><w:widowControl w:val="off"/><w:listPr><w:ilvl w:val="1"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="1440"/></w:tabs><w:spacing w:before="60" w:after="60" w:line="240" w:line-rule="at-least"/><w:contextualSpacing/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="AppendixTitle"><w:name w:val="Appendix Title"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="AppendixTitle"/><w:pageBreakBefore/><w:spacing w:before="120" w:after="240"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHead10"><w:name w:val="RowHead10"/><w:basedOn w:val="RowHead11"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHead10"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC1"><w:name w:val="toc 1"/><wx:uiName wx:val="TOC 1"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00003D10"/><w:pPr><w:pStyle w:val="TOC1"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="540"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:spacing w:before="240"/><w:ind w:left="547" w:hanging="547"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:caps/><w:noProof/><w:sz w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC2"><w:name w:val="toc 2"/><wx:uiName wx:val="TOC 2"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00003D10"/><w:pPr><w:pStyle w:val="TOC2"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="900"/><w:tab w:val="right" w:leader="dot" w:pos="9360"/></w:tabs><w:spacing w:before="120"/><w:ind w:left="907" w:hanging="720"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC3"><w:name w:val="toc 3"/><wx:uiName wx:val="TOC 3"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC3"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="1260"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="1260" w:hanging="900"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC4"><w:name w:val="toc 4"/><wx:uiName wx:val="TOC 4"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC4"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="1620"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="1620" w:hanging="1080"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC5"><w:name w:val="toc 5"/><wx:uiName wx:val="TOC 5"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC5"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="1980"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="1980" w:hanging="1260"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC6"><w:name w:val="toc 6"/><wx:uiName wx:val="TOC 6"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC6"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="2340"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="2340" w:hanging="1440"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC7"><w:name w:val="toc 7"/><wx:uiName wx:val="TOC 7"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC7"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="2700"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:spacing w:before="0" w:after="0" w:line="240" w:line-rule="auto"/><w:ind w:left="2700" w:hanging="1620"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC8"><w:name w:val="toc 8"/><wx:uiName wx:val="TOC 8"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC8"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="2970"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="2970" w:hanging="1710"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC9"><w:name w:val="toc 9"/><wx:uiName wx:val="TOC 9"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC9"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="3330"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="3330" w:hanging="1890"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="HeadingUnnumbered"><w:name w:val="Heading Unnumbered"/><w:next w:val="paranormal"/><w:autoRedefine/><w:rsid w:val="00107AA6"/><w:pPr><w:pStyle w:val="HeadingUnnumbered"/><w:keepNext/><w:keepLines/><w:spacing w:before="240" w:after="80"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="24"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10"><w:name w:val="TableText10"/><w:basedOn w:val="TableText11"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText10"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableTextBCentered"><w:name w:val="TableTextB Centered"/><w:basedOn w:val="Normal"/><w:rsid w:val="00913874"/><w:pPr><w:pStyle w:val="TableTextBCentered"/><w:spacing w:line="220" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10C"><w:name w:val="TableText10C"/><w:basedOn w:val="TableText11C"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText10C"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10B"><w:name w:val="TableText10B"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00913874"/><w:pPr><w:pStyle w:val="TableText10B"/><w:spacing w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="acronym"><w:name w:val="acronym"/><w:autoRedefine/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="acronym"/><w:tabs><w:tab w:val="left" w:pos="2160"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="40"/><w:ind w:left="2160" w:hanging="2160"/><w:jc w:val="both"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl6"><w:name w:val="list:lvl 6"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl6"/><w:listPr><w:ilvl w:val="5"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="360"/><w:tab w:val="clear" w:pos="720"/><w:tab w:val="clear" w:pos="1080"/><w:tab w:val="clear" w:pos="1440"/><w:tab w:val="clear" w:pos="1800"/><w:tab w:val="clear" w:pos="2160"/><w:tab w:val="clear" w:pos="2520"/><w:tab w:val="clear" w:pos="2880"/><w:tab w:val="clear" w:pos="3240"/><w:tab w:val="clear" w:pos="3600"/><w:tab w:val="clear" w:pos="3960"/><w:tab w:val="clear" w:pos="4320"/></w:tabs><w:spacing w:after="40"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="hdr1L"><w:name w:val="hdr1L"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="hdr1L"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="center" w:pos="4680"/><w:tab w:val="right" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="hdr2L"><w:name w:val="hdr2L"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="hdr2L"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="center" w:pos="4680"/><w:tab w:val="right" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="0" w:line="180" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bulletlvl1"><w:name w:val="bullet:lvl 1"/><w:basedOn w:val="Normal"/><w:link w:val="bulletlvl1CharChar"/><w:rsid w:val="00143D5A"/><w:pPr><w:pStyle w:val="bulletlvl1"/><w:listPr><w:ilfo w:val="1"/></w:listPr><w:spacing w:after="80"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bulletlvl2"><w:name w:val="bullet:lvl 2"/><w:basedOn w:val="Normal"/><w:rsid w:val="00143D5A"/><w:pPr><w:pStyle w:val="bulletlvl2"/><w:widowControl w:val="off"/><w:listPr><w:ilfo w:val="2"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="1224"/><w:tab w:val="left" w:pos="648"/><w:tab w:val="left" w:pos="1008"/></w:tabs><w:spacing w:after="80"/><w:ind w:left="1728" w:hanging="1080"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent4"><w:name w:val="para:indent4"/><w:basedOn w:val="paraindent3"/><w:autoRedefine/><w:rsid w:val="0071606D"/><w:pPr><w:pStyle w:val="paraindent4"/><w:ind w:left="1440"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl7"><w:name w:val="list:lvl 7"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl7"/><w:listPr><w:ilvl w:val="6"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="360"/><w:tab w:val="clear" w:pos="720"/><w:tab w:val="clear" w:pos="1080"/><w:tab w:val="clear" w:pos="1440"/><w:tab w:val="clear" w:pos="1800"/><w:tab w:val="clear" w:pos="2160"/><w:tab w:val="clear" w:pos="2520"/><w:tab w:val="clear" w:pos="2880"/><w:tab w:val="clear" w:pos="3240"/><w:tab w:val="clear" w:pos="3600"/><w:tab w:val="clear" w:pos="3960"/><w:tab w:val="left" w:pos="3024"/></w:tabs><w:spacing w:after="40"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOCfiguretitle"><w:name w:val="TOC:figure title"/><w:basedOn w:val="Caption"/><w:autoRedefine/><w:rsid w:val="00894991"/><w:pPr><w:pStyle w:val="TOCfiguretitle"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="note"><w:name w:val="note"/><w:basedOn w:val="Normal"/><w:rsid w:val="006E0AB6"/><w:pPr><w:pStyle w:val="note"/><w:spacing w:before="80" w:after="80"/><w:ind w:left="1656" w:right="720" w:hanging="936"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang2"><w:name w:val="req lang:2"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang2"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="720"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang3"><w:name w:val="req lang:3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang3"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="1080"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang4"><w:name w:val="req lang:4"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang4"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="1440"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang5"><w:name w:val="req lang:5"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang5"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="1800"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang6"><w:name w:val="req lang:6"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang6"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="2160"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="statedef"><w:name w:val="state def"/><w:basedOn w:val="Normal"/><w:rsid w:val="00DE6BA0"/><w:pPr><w:pStyle w:val="statedef"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="80" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:caps/><w:color w:val="408040"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="intentblank"><w:name w:val="intent:blank"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="000B79E8"/><w:pPr><w:pStyle w:val="intentblank"/><w:spacing w:before="6480" w:after="0"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="code"><w:name w:val="code"/><w:basedOn w:val="Normal"/><w:rsid w:val="006D4514"/><w:pPr><w:pStyle w:val="code"/><w:spacing w:before="80" w:after="80" w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="parapage"><w:name w:val="para:page"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00DD22A9"/><w:pPr><w:pStyle w:val="parapage"/><w:pageBreakBefore/><w:spacing w:before="80" w:after="80"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOCtabletitle"><w:name w:val="TOC:table title"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00B869CD"/><w:pPr><w:pStyle w:val="TOCtabletitle"/><w:spacing w:before="120" w:after="120"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RCRitem"><w:name w:val="RCR:item"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="007A1F4F"/><w:pPr><w:pStyle w:val="RCRitem"/><w:tabs><w:tab w:val="left" w:pos="1800"/></w:tabs><w:spacing w:before="120"/><w:ind w:left="1800" w:right="720" w:hanging="1800"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RCRheader"><w:name w:val="RCR:header"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="006D781E"/><w:pPr><w:pStyle w:val="RCRheader"/><w:tabs><w:tab w:val="left" w:pos="792"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="right" w:leader="underscore" w:pos="8640"/></w:tabs><w:spacing w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="22"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="line"><w:name w:val="line"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="006B63C2"/><w:pPr><w:pStyle w:val="line"/><w:spacing w:before="0" w:line="40" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="12"/><w:sz-cs w:val="12"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang7"><w:name w:val="req lang: 7"/><w:basedOn w:val="reqlang6"/><w:rsid w:val="00C0337E"/><w:pPr><w:pStyle w:val="reqlang7"/><w:ind w:left="2520"/></w:pPr><w:rPr><wx:font wx:val="Courier New"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang70"><w:name w:val="req lang:7"/><w:basedOn w:val="reqlang7"/><w:rsid w:val="004C603C"/><w:pPr><w:pStyle w:val="reqlang70"/></w:pPr><w:rPr><wx:font wx:val="Courier New"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang8"><w:name w:val="req lang:8"/><w:basedOn w:val="reqlang7"/><w:rsid w:val="004C603C"/><w:pPr><w:pStyle w:val="reqlang8"/><w:ind w:left="2880"/></w:pPr><w:rPr><wx:font wx:val="Courier New"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang9"><w:name w:val="req lang:9"/><w:basedOn w:val="Normal"/><w:rsid w:val="007534C9"/><w:pPr><w:pStyle w:val="reqlang9"/><w:spacing w:before="60" w:after="60"/><w:ind w:left="3240"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="DocumentMap"><w:name w:val="Document Map"/><w:basedOn w:val="Normal"/><w:semiHidden/><w:rsid w:val="00AF20CB"/><w:pPr><w:pStyle w:val="DocumentMap"/><w:shd w:val="clear" w:color="auto" w:fill="000080"/></w:pPr><w:rPr><w:rFonts w:ascii="Tahoma" w:h-ansi="Tahoma" w:cs="Tahoma"/><wx:font wx:val="Tahoma"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment1"><w:name w:val="comment:1"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment1"/><w:spacing w:before="60" w:after="60"/><w:ind w:left="360"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment2"><w:name w:val="comment:2"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment2"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="720"/><w:jc w:val="both"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:color w:val="FF0000"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment3"><w:name w:val="comment:3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment3"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="1080"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment4"><w:name w:val="comment:4"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment4"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="1440"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment5"><w:name w:val="comment:5"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment5"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="1800"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment6"><w:name w:val="comment:6"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment6"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="2160"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment7"><w:name w:val="comment:7"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment7"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="2520"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment8"><w:name w:val="comment:8"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment8"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="2880"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment9"><w:name w:val="comment:9"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment9"/><w:spacing w:after="80"/><w:ind w:left="3240"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlheader"><w:name w:val="dl:header"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlheader"/><w:spacing w:before="240" w:after="0"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier" w:h-ansi="Courier"/><wx:font wx:val="Courier"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlbody"><w:name w:val="dl:body"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlbody"/><w:spacing w:before="0"/><w:ind w:left="360"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlprocheader"><w:name w:val="dl_proc:header"/><w:basedOn w:val="dlbody"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlprocheader"/><w:spacing w:before="240"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlprocbody"><w:name w:val="dl_proc:body"/><w:basedOn w:val="dlprocheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlprocbody"/><w:spacing w:before="0"/><w:ind w:left="720"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dldescription"><w:name w:val="dl:description"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dldescription"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bitmapheader"><w:name w:val="bitmap:header"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="bitmapheader"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bitmapbody"><w:name w:val="bitmap:body"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="bitmapbody"/><w:spacing w:before="0"/></w:pPr><w:rPr><wx:font wx:val="Courier"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX1"><w:name w:val="APPENDIX 1"/><w:basedOn w:val="Normal"/><w:next w:val="paranormal"/><w:rsid w:val="004978C4"/><w:pPr><w:pStyle w:val="APPENDIX1"/><w:listPr><w:ilfo w:val="25"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="1440"/></w:tabs><w:spacing w:before="152" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:color w:val="auto"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX2"><w:name w:val="APPENDIX 2"/><w:basedOn w:val="APPENDIX1"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX2"/><w:listPr><w:ilvl w:val="1"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX3"><w:name w:val="APPENDIX 3"/><w:basedOn w:val="APPENDIX2"/><w:next w:val="paranormal"/><w:rsid w:val="00E904D2"/><w:pPr><w:pStyle w:val="APPENDIX3"/><w:listPr><w:ilvl w:val="2"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage18pt"><w:name w:val="Title Page 18pt"/><w:basedOn w:val="Normal"/><w:rsid w:val="0033770F"/><w:pPr><w:pStyle w:val="TitlePage18pt"/><w:spacing w:before="0" w:after="60" w:line="240" w:line-rule="auto"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:color w:val="auto"/><w:sz w:val="36"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage16pt"><w:name w:val="Title Page 16pt"/><w:basedOn w:val="TitlePage18pt"/><w:rsid w:val="0033770F"/><w:pPr><w:pStyle w:val="TitlePage16pt"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="32"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage14pt"><w:name w:val="Title Page 14pt"/><w:basedOn w:val="TitlePage16pt"/><w:rsid w:val="0033770F"/><w:pPr><w:pStyle w:val="TitlePage14pt"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b w:val="off"/><w:sz w:val="28"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para10pt"><w:name w:val="para 10pt"/><w:basedOn w:val="Normal"/><w:link w:val="para10ptChar"/><w:rsid w:val="004E3337"/><w:pPr><w:pStyle w:val="para10pt"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para10ptnospacing"><w:name w:val="para 10pt no spacing"/><w:basedOn w:val="para10pt"/><w:rsid w:val="004A1CCA"/><w:pPr><w:pStyle w:val="para10ptnospacing"/><w:spacing w:before="0" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10nospacing"><w:name w:val="TableText10 no spacing"/><w:basedOn w:val="TableText10"/><w:rsid w:val="00D72507"/><w:pPr><w:pStyle w:val="TableText10nospacing"/><w:spacing w:before="0" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para8pt"><w:name w:val="para 8pt"/><w:basedOn w:val="Normal"/><w:link w:val="para8ptChar"/><w:rsid w:val="004E3337"/><w:pPr><w:pStyle w:val="para8pt"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="16"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="paranormalChar"><w:name w:val="para:normal Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="paranormal"/><w:rsid w:val="00C93CA3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:b-cs/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:styleId="bulletlvl1CharChar"><w:name w:val="bullet:lvl 1 Char Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="bulletlvl1"/><w:rsid w:val="00C93CA3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="ParagraphText"><w:name w:val="ParagraphText"/><w:basedOn w:val="Normal"/><w:rsid w:val="00C93CA3"/><w:pPr><w:pStyle w:val="ParagraphText"/><w:spacing w:before="0" w:after="120" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/><wx:font wx:val="Times New Roman"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl10"><w:name w:val="list lvl 1"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl10"/><w:listPr><w:ilfo w:val="9"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="936"/></w:tabs><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX4"><w:name w:val="APPENDIX 4"/><w:basedOn w:val="APPENDIX3"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX4"/><w:listPr><w:ilvl w:val="3"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX5"><w:name w:val="APPENDIX 5"/><w:basedOn w:val="APPENDIX4"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX5"/><w:listPr><w:ilvl w:val="4"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX6"><w:name w:val="APPENDIX 6"/><w:basedOn w:val="APPENDIX5"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX6"/><w:listPr><w:ilvl w:val="5"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX7"><w:name w:val="APPENDIX 7"/><w:basedOn w:val="APPENDIX6"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX7"/><w:listPr><w:ilvl w:val="6"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX8"><w:name w:val="APPENDIX 8"/><w:basedOn w:val="APPENDIX7"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX8"/><w:listPr><w:ilvl w:val="7"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX9"><w:name w:val="APPENDIX 9"/><w:basedOn w:val="APPENDIX8"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX9"/><w:listPr><w:ilvl w:val="8"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="BalloonText"><w:name w:val="Balloon Text"/><w:basedOn w:val="Normal"/><w:semiHidden/><w:rsid w:val="00B47E5D"/><w:pPr><w:pStyle w:val="BalloonText"/></w:pPr><w:rPr><w:rFonts w:ascii="Tahoma" w:h-ansi="Tahoma" w:cs="Tahoma"/><wx:font wx:val="Tahoma"/><w:sz w:val="16"/><w:sz-cs w:val="16"/></w:rPr></w:style><w:style w:type="list" w:styleId="listreset"><w:name w:val="listreset"/><w:basedOn w:val="NoList"/><w:rsid w:val="00D25E39"/><w:pPr><w:listPr><w:ilfo w:val="26"/></w:listPr></w:pPr></w:style><w:style w:type="paragraph" w:styleId="bulletlvl3"><w:name w:val="bullet:lvl 3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00EF5226"/><w:pPr><w:pStyle w:val="bulletlvl3"/><w:listPr><w:ilfo w:val="28"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="3024"/><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="1008"/></w:tabs><w:spacing w:after="80"/><w:ind w:left="1368" w:hanging="360"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="character" w:styleId="CommentReference"><w:name w:val="annotation reference"/><wx:uiName wx:val="Comment Reference"/><w:basedOn w:val="DefaultParagraphFont"/><w:semiHidden/><w:rsid w:val="00E40969"/><w:rPr><w:sz w:val="16"/><w:sz-cs w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CommentText"><w:name w:val="annotation text"/><wx:uiName wx:val="Comment Text"/><w:basedOn w:val="Normal"/><w:semiHidden/><w:rsid w:val="00E40969"/><w:pPr><w:pStyle w:val="CommentText"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CommentSubject"><w:name w:val="annotation subject"/><wx:uiName wx:val="Comment Subject"/><w:basedOn w:val="CommentText"/><w:next w:val="CommentText"/><w:semiHidden/><w:rsid w:val="00E40969"/><w:pPr><w:pStyle w:val="CommentSubject"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:b-cs/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage22pt"><w:name w:val="Title Page 22pt"/><w:basedOn w:val="TitlePage16pt"/><w:rsid w:val="005F35C4"/><w:pPr><w:pStyle w:val="TitlePage22pt"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="44"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para"><w:name w:val="para"/><w:basedOn w:val="Normal"/><w:link w:val="paraChar"/><w:rsid w:val="0057061B"/><w:pPr><w:pStyle w:val="para"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="paraChar"><w:name w:val="para Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="para"/><w:rsid w:val="0057061B"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl20"><w:name w:val="list lvl 2"/><w:basedOn w:val="ListNumber3"/><w:rsid w:val="0057061B"/><w:pPr><w:pStyle w:val="listlvl20"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="ListNumber3"><w:name w:val="List Number 3"/><w:basedOn w:val="Normal"/><w:rsid w:val="0057061B"/><w:pPr><w:pStyle w:val="ListNumber3"/><w:tabs><w:tab w:val="list" w:pos="1512"/></w:tabs><w:ind w:left="1512" w:hanging="504"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="table" w:styleId="TableGrid"><w:name w:val="Table Grid"/><w:basedOn w:val="TableNormal"/><w:rsid w:val="008B1AB7"/><w:pPr><w:spacing w:before="40" w:after="40" w:line="240" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblBorders><w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/></w:tblBorders><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="character" w:styleId="para8ptChar"><w:name w:val="para 8pt Char"/><w:basedOn w:val="paraChar"/><w:link w:val="para8pt"/><w:rsid w:val="007921D3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="16"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para8ptunderline"><w:name w:val="para 8pt underline"/><w:basedOn w:val="para8pt"/><w:link w:val="para8ptunderlineChar"/><w:rsid w:val="007921D3"/><w:pPr><w:pStyle w:val="para8ptunderline"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="character" w:styleId="para8ptunderlineChar"><w:name w:val="para 8pt underline Char"/><w:basedOn w:val="para8ptChar"/><w:link w:val="para8ptunderline"/><w:rsid w:val="007921D3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="16"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para8ptnospacing"><w:name w:val="para 8pt no spacing"/><w:basedOn w:val="para8pt"/><w:rsid w:val="007921D3"/><w:pPr><w:pStyle w:val="para8ptnospacing"/><w:spacing w:before="0" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl0"><w:name w:val="list lvl 0"/><w:basedOn w:val="ListNumber"/><w:rsid w:val="00A233DA"/><w:pPr><w:pStyle w:val="listlvl0"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="ListNumber"><w:name w:val="List Number"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A233DA"/><w:pPr><w:pStyle w:val="ListNumber"/><w:tabs><w:tab w:val="list" w:pos="504"/></w:tabs><w:ind w:left="504" w:hanging="504"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="character" w:styleId="para10ptChar"><w:name w:val="para 10pt Char"/><w:basedOn w:val="paraChar"/><w:link w:val="para10pt"/><w:rsid w:val="0015054E"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:styleId="FollowedHyperlink"><w:name w:val="FollowedHyperlink"/><w:basedOn w:val="DefaultParagraphFont"/><w:rsid w:val="00B8047C"/><w:rPr><w:color w:val="800080"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="microart8"><w:name w:val="micro:art8"/><w:basedOn w:val="Normal"/><w:rsid w:val="00D1251A"/><w:pPr><w:pStyle w:val="microart8"/><w:spacing w:before="0" w:after="0" w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="microart9"><w:name w:val="micro:art9"/><w:basedOn w:val="Normal"/><w:rsid w:val="00D1251A"/><w:pPr><w:pStyle w:val="microart9"/><w:spacing w:before="0" w:after="0" w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="microart10"><w:name w:val="micro:art10"/><w:basedOn w:val="Normal"/><w:rsid w:val="00D1251A"/><w:pPr><w:pStyle w:val="microart10"/><w:spacing w:before="120" w:after="0" w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/></w:rPr></w:style></w:styles><w:shapeDefaults><o:shapedefaults v:ext="edit" spidmax="37890"/><o:shapelayout v:ext="edit"><o:idmap v:ext="edit" data="1"/></o:shapelayout></w:shapeDefaults><w:docPr><w:view w:val="print"/><w:zoom w:percent="100"/><w:displayBackgroundShape/><w:doNotEmbedSystemFonts/><w:bordersDontSurroundHeader/><w:bordersDontSurroundFooter/><w:attachedTemplate w:val=""/><w:stylePaneFormatFilter w:val="1F08"/><w:documentProtection w:formatting="on" w:enforcement="off"/><w:defaultTabStop w:val="720"/><w:doNotHyphenateCaps/><w:drawingGridHorizontalSpacing w:val="120"/><w:drawingGridVerticalSpacing w:val="120"/><w:displayHorizontalDrawingGridEvery w:val="0"/><w:displayVerticalDrawingGridEvery w:val="3"/><w:useMarginsForDrawingGridOrigin/><w:doNotShadeFormData/><w:punctuationKerning/><w:characterSpacingControl w:val="CompressPunctuation"/><w:optimizeForBrowser/><w:validateAgainstSchema w:val="off"/><w:saveInvalidXML/><w:ignoreMixedContent w:val="off"/><w:alwaysShowPlaceholderText w:val="off"/><w:hdrShapeDefaults><o:shapedefaults v:ext="edit" spidmax="37890"/></w:hdrShapeDefaults><w:footnotePr><w:footnote w:type="separator"><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"><w:r><w:separator/></w:r></w:p><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/></w:footnote><w:footnote w:type="continuation-separator"><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"><w:r><w:continuationSeparator/></w:r></w:p><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/></w:footnote></w:footnotePr><w:endnotePr><w:endnote w:type="separator"><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"><w:r><w:separator/></w:r></w:p><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/></w:endnote><w:endnote w:type="continuation-separator"><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"><w:r><w:continuationSeparator/></w:r></w:p><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/><w:p wsp:rsidR="00787401" wsp:rsidRDefault="00787401"/></w:endnote></w:endnotePr><w:compat><w:footnoteLayoutLikeWW8/><w:shapeLayoutLikeWW8/><w:alignTablesRowByRow/><w:forgetLastTabAlignment/><w:doNotUseHTMLParagraphAutoSpacing/><w:layoutRawTableWidth/><w:layoutTableRowsApart/><w:useWord97LineBreakingRules/><w:dontAllowFieldEndSelect/><w:useWord2002TableStyleRules/></w:compat><wsp:rsids><wsp:rsidRoot wsp:val="00244327"/><wsp:rsid wsp:val="001766F7"/><wsp:rsid wsp:val="00244327"/><wsp:rsid wsp:val="00436451"/><wsp:rsid wsp:val="005501C9"/><wsp:rsid wsp:val="005C6782"/><wsp:rsid wsp:val="00787401"/><wsp:rsid wsp:val="007F3E1C"/><wsp:rsid wsp:val="00801B1F"/><wsp:rsid wsp:val="00B17C0D"/><wsp:rsid wsp:val="00DD246B"/></wsp:rsids></w:docPr><w:body><wx:sect><ns1:Artifact><w:p wsp:rsidR="007F3E1C" wsp:rsidRDefault="005501C9"><Set_Name><w:r wsp:rsidR="00B17C0D"><w:t>Default</w:t></w:r></Set_Name><Outline><HeadingAttribute><w:r wsp:rsidR="00B17C0D"><w:t>Name</w:t></w:r></HeadingAttribute><RecurseChildren><w:r wsp:rsidR="00B17C0D"><w:t>false</w:t></w:r></RecurseChildren></Outline><Attribute><Name><w:r wsp:rsidR="001766F7" wsp:rsidRPr="001766F7"><w:t>Word Template Content</w:t></w:r></Name></Attribute></w:p></ns1:Artifact><w:p wsp:rsidR="007F3E1C" wsp:rsidRDefault="007F3E1C"/><w:sectPr wsp:rsidR="007F3E1C" wsp:rsidSect="007F3E1C"><w:hdr w:type="odd"><w:p wsp:rsidR="007F3E1C" wsp:rsidRDefault="007F3E1C"><w:pPr><w:pStyle w:val="Header"/></w:pPr></w:p></w:hdr><w:pgSz w:w="12240" w:h="15840" w:code="1"/><w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="432" w:footer="432" w:gutter="0"/><w:pgNumType w:start="1"/><w:cols w:space="475"/><w:noEndnote/></w:sectPr></wx:sect></w:body></w:wordDocument> \ No newline at end of file
diff --git a/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/Word Merge Template.xml b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/Word Merge Template.xml
new file mode 100644
index 00000000000..00a0addd86d
--- /dev/null
+++ b/0.5.0_20081201/org.eclipse.osee.framework.ui.skynet/support/templates/Word Merge Template.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?mso-application progid="Word.Document"?>
+<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" xmlns:ns0="http://BeforeGUID/PrePendAAABG9urQeAB4H0+fU5xEg/AfterGUID" xmlns:ns1="http://www.w3.org/2001/XMLSchema" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"><w:ignoreElements w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/><o:DocumentProperties><o:Title>SRS</o:Title><o:Author>Ryan D. Brooks</o:Author><o:LastAuthor>Theron</o:LastAuthor><o:Revision>2</o:Revision><o:TotalTime>1</o:TotalTime><o:LastPrinted>2007-03-22T22:27:00Z</o:LastPrinted><o:Created>2008-11-17T16:28:00Z</o:Created><o:LastSaved>2008-11-17T16:28:00Z</o:LastSaved><o:Pages>1</o:Pages><o:Words>5</o:Words><o:Characters>33</o:Characters><o:Company>The Boeing Company</o:Company><o:Lines>1</o:Lines><o:Paragraphs>1</o:Paragraphs><o:CharactersWithSpaces>37</o:CharactersWithSpaces><o:Version>11.0000</o:Version></o:DocumentProperties><w:fonts><w:defaultFonts w:ascii="Times New Roman" w:fareast="Times New Roman" w:h-ansi="Times New Roman" w:cs="Times New Roman"/><w:font w:name="Helvetica"><w:panose-1 w:val="020B0604020202020204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:notTrueType/><w:pitch w:val="variable"/><w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/></w:font><w:font w:name="Courier"><w:panose-1 w:val="02070409020205020404"/><w:charset w:val="00"/><w:family w:val="Modern"/><w:notTrueType/><w:pitch w:val="fixed"/><w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/></w:font><w:font w:name="Wingdings"><w:panose-1 w:val="05000000000000000000"/><w:charset w:val="02"/><w:family w:val="Auto"/><w:pitch w:val="variable"/><w:sig w:usb-0="00000000" w:usb-1="10000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/></w:font><w:font w:name="Tahoma"><w:panose-1 w:val="020B0604030504040204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="61007A87" w:usb-1="80000000" w:usb-2="00000008" w:usb-3="00000000" w:csb-0="000101FF" w:csb-1="00000000"/></w:font></w:fonts><w:lists><w:listDef w:listDefId="0"><w:lsid w:val="003A6350"/><w:plt w:val="Multilevel"/><w:tmpl w:val="F89E6E26"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:pStyle w:val="APPENDIX1"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:pStyle w:val="APPENDIX2"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:pStyle w:val="APPENDIX3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:pStyle w:val="APPENDIX4"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:pStyle w:val="APPENDIX5"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:pStyle w:val="APPENDIX6"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:pStyle w:val="APPENDIX7"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:pStyle w:val="APPENDIX8"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:pStyle w:val="APPENDIX9"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="1"><w:lsid w:val="016D5431"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="98C65BCE"/><w:lvl w:ilvl="0" w:tplc="94D2C566"><w:start w:val="1"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="504"/></w:tabs><w:ind w:left="504" w:hanging="504"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="2"><w:lsid w:val="0C4D206D"/><w:plt w:val="Multilevel"/><w:tmpl w:val="4B543E40"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="3"><w:lsid w:val="0DE40F2C"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="4"><w:lsid w:val="10AF29E5"/><w:plt w:val="Multilevel"/><w:tmpl w:val="7520DAAE"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4"/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="5"><w:lsid w:val="15EB1725"/><w:plt w:val="Multilevel"/><w:tmpl w:val="D902A83E"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%3."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="6"><w:lsid w:val="1C970BBA"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5EB82E3A"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="7"><w:lsid w:val="1D6C5FCC"/><w:plt w:val="Multilevel"/><w:tmpl w:val="E710F038"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="APPENDIX %1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="0" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="720" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:lvlText w:val="%3."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1440" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="8"><w:lsid w:val="1EC51BCC"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="9"><w:lsid w:val="256F5D56"/><w:plt w:val="Multilevel"/><w:tmpl w:val="EAC4E6B8"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="10"><w:lsid w:val="290A1130"/><w:plt w:val="Multilevel"/><w:tmpl w:val="EAC4E6B8"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="11"><w:lsid w:val="299E4F07"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="46E2B8B2"/><w:lvl w:ilvl="0" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1512"/></w:tabs><w:ind w:left="1512" w:hanging="504"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="12"><w:lsid w:val="29C240FD"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="FCA4DC08"/><w:lvl w:ilvl="0" w:tplc="B5146A3E"><w:start w:val="1"/><w:nfc w:val="23"/><w:pStyle w:val="bulletlvl2"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1224"/></w:tabs><w:ind w:left="1224" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090019"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="0409000F" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="0409000F" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="13"><w:lsid w:val="29CA5728"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="D00252C6"/><w:lvl w:ilvl="0" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%1"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="FFFFFFFF"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="FFFFFFFF" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="14"><w:lsid w:val="2A5411A0"/><w:plt w:val="Multilevel"/><w:tmpl w:val="2660867C"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:pStyle w:val="Heading1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:pStyle w:val="Heading2"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:pStyle w:val="Heading3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:pStyle w:val="Heading4"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:pStyle w:val="Heading5"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:pStyle w:val="Heading6"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:pStyle w:val="Heading7"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:pStyle w:val="Heading8"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:pStyle w:val="Heading9"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="15"><w:lsid w:val="2B1C06F5"/><w:plt w:val="Multilevel"/><w:tmpl w:val="3B98963A"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="16"><w:lsid w:val="2B477730"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="33801DC4"/><w:lvl w:ilvl="0" w:tplc="2D8A4B4C"><w:start w:val="1"/><w:nfc w:val="23"/><w:pStyle w:val="bulletlvl3"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3024"/></w:tabs><w:ind w:left="3024" w:hanging="2016"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2448"/></w:tabs><w:ind w:left="2448" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3168"/></w:tabs><w:ind w:left="3168" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3888"/></w:tabs><w:ind w:left="3888" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4608"/></w:tabs><w:ind w:left="4608" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5328"/></w:tabs><w:ind w:left="5328" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6048"/></w:tabs><w:ind w:left="6048" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6768"/></w:tabs><w:ind w:left="6768" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="7488"/></w:tabs><w:ind w:left="7488" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="17"><w:lsid w:val="2B5B6B3C"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5CC8E874"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:first-line="763"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="18"><w:lsid w:val="2D6545A6"/><w:plt w:val="Multilevel"/><w:tmpl w:val="3F227848"/><w:name w:val="listreset"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl1"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1296"/></w:tabs><w:ind w:left="1296" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/><w:b w:val="off"/><w:i w:val="off"/><w:caps w:val="off"/><w:strike w:val="off"/><w:dstrike w:val="off"/><w:outline w:val="off"/><w:shadow w:val="off"/><w:emboss w:val="off"/><w:imprint w:val="off"/><w:vanish w:val="off"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:vertAlign w:val="baseline"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:pStyle w:val="listlvl2"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="-31680"/></w:tabs><w:ind w:left="1656" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl3"/><w:lvlText w:val="(%3)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2016"/></w:tabs><w:ind w:left="2016" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:pStyle w:val="listlvl4"/><w:lvlText w:val="(%4)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2376"/></w:tabs><w:ind w:left="2376" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl5"/><w:lvlText w:val="%5)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2736"/></w:tabs><w:ind w:left="2736" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:pStyle w:val="listlvl6"/><w:lvlText w:val="%6)."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3096"/></w:tabs><w:ind w:left="3096" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:hint="default"/><w:b w:val="off"/><w:i w:val="off"/><w:sz w:val="22"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="4"/><w:pStyle w:val="listlvl7"/><w:lvlText w:val="[%7]."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3456"/></w:tabs><w:ind w:left="3456" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="[%8]."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="19"><w:lsid w:val="308239DA"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="20"><w:lsid w:val="31A252E6"/><w:plt w:val="Multilevel"/><w:tmpl w:val="A9D83578"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="21"><w:lsid w:val="3B97448F"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:name w:val="listrestart2"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="22"><w:lsid w:val="3C165F4A"/><w:plt w:val="Multilevel"/><w:tmpl w:val="79A06FE6"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="23"><w:lsid w:val="42BB3748"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="DBE464B0"/><w:lvl w:ilvl="0" w:tplc="26BAF6B0"><w:start w:val="1"/><w:nfc w:val="23"/><w:pStyle w:val="bulletlvl1"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="648"/></w:tabs><w:ind w:left="648" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3960" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4680" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5400" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="6120" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="ï‚·"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6840"/></w:tabs><w:ind w:left="6840" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="24"><w:lsid w:val="47E309C3"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="25"><w:lsid w:val="5A401749"/><w:plt w:val="Multilevel"/><w:tmpl w:val="CD8E61CE"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="26"><w:lsid w:val="5A802BC9"/><w:plt w:val="Multilevel"/><w:tmpl w:val="CB0E7A2E"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3"/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="27"><w:lsid w:val="5C3B1B76"/><w:plt w:val="Multilevel"/><w:tmpl w:val="CB0E7A2E"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3"/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="28"><w:lsid w:val="5E371EBB"/><w:plt w:val="Multilevel"/><w:tmpl w:val="DA56D440"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="29"><w:lsid w:val="60B71688"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5EA20814"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="30"><w:lsid w:val="6389497B"/><w:plt w:val="Multilevel"/><w:tmpl w:val="AC5A6410"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:pStyle w:val="listlvl10"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="360" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="3"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1080" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:lvlText w:val="%3."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="1800" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2520" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3240" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="3960" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="4680" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5400" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6120" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="31"><w:lsid w:val="6469691A"/><w:plt w:val="Multilevel"/><w:tmpl w:val="E5D02024"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="32"><w:lsid w:val="69A642CA"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="33"><w:lsid w:val="74BA49AE"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:name w:val="listrestart"/><w:styleLink w:val="listreset"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="34"><w:lsid w:val="751E50EA"/><w:plt w:val="Multilevel"/><w:tmpl w:val="79E6FEDC"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="35"><w:lsid w:val="7D9D3B47"/><w:plt w:val="Multilevel"/><w:tmpl w:val="0409001D"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:lvlText w:val="%1)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1080"/></w:tabs><w:ind w:left="1080" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:lvlText w:val="(%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1800"/></w:tabs><w:ind w:left="1800" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2520" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="3240" w:hanging="360"/></w:pPr></w:lvl></w:listDef><w:listDef w:listDefId="36"><w:lsid w:val="7F0F313D"/><w:plt w:val="Multilevel"/><w:tmpl w:val="F8FC63EE"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%4)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2520"/></w:tabs><w:ind w:left="2160" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:lvlText w:val="(%5)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3240"/></w:tabs><w:ind w:left="2880" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%6)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3960"/></w:tabs><w:ind w:left="3600" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="37"><w:lsid w:val="7F633FB7"/><w:plt w:val="Multilevel"/><w:tmpl w:val="5F5A52E8"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="APPENDIX %1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%7)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="(%8)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5400"/></w:tabs><w:ind w:left="5040" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="(%9)"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6120"/></w:tabs><w:ind w:left="5760" w:first-line="0"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl></w:listDef><w:list w:ilfo="1"><w:ilst w:val="23"/></w:list><w:list w:ilfo="2"><w:ilst w:val="12"/></w:list><w:list w:ilfo="3"><w:ilst w:val="18"/></w:list><w:list w:ilfo="4"><w:ilst w:val="14"/></w:list><w:list w:ilfo="5"><w:ilst w:val="6"/></w:list><w:list w:ilfo="6"><w:ilst w:val="26"/></w:list><w:list w:ilfo="7"><w:ilst w:val="5"/></w:list><w:list w:ilfo="8"><w:ilst w:val="13"/></w:list><w:list w:ilfo="9"><w:ilst w:val="30"/></w:list><w:list w:ilfo="10"><w:ilst w:val="7"/></w:list><w:list w:ilfo="11"><w:ilst w:val="18"/></w:list><w:list w:ilfo="12"><w:ilst w:val="27"/></w:list><w:list w:ilfo="13"><w:ilst w:val="36"/></w:list><w:list w:ilfo="14"><w:ilst w:val="2"/></w:list><w:list w:ilfo="15"><w:ilst w:val="28"/></w:list><w:list w:ilfo="16"><w:ilst w:val="17"/></w:list><w:list w:ilfo="17"><w:ilst w:val="31"/></w:list><w:list w:ilfo="18"><w:ilst w:val="4"/></w:list><w:list w:ilfo="19"><w:ilst w:val="20"/></w:list><w:list w:ilfo="20"><w:ilst w:val="15"/></w:list><w:list w:ilfo="21"><w:ilst w:val="37"/></w:list><w:list w:ilfo="22"><w:ilst w:val="22"/></w:list><w:list w:ilfo="23"><w:ilst w:val="25"/></w:list><w:list w:ilfo="24"><w:ilst w:val="34"/></w:list><w:list w:ilfo="25"><w:ilst w:val="0"/></w:list><w:list w:ilfo="26"><w:ilst w:val="33"/></w:list><w:list w:ilfo="27"><w:ilst w:val="21"/></w:list><w:list w:ilfo="28"><w:ilst w:val="16"/></w:list><w:list w:ilfo="29"><w:ilst w:val="19"/></w:list><w:list w:ilfo="30"><w:ilst w:val="18"/><w:lvlOverride w:ilvl="0"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="1"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="2"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="3"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="4"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="5"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="6"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="7"><w:startOverride w:val="1"/></w:lvlOverride><w:lvlOverride w:ilvl="8"><w:startOverride w:val="1"/></w:lvlOverride></w:list><w:list w:ilfo="31"><w:ilst w:val="11"/></w:list><w:list w:ilfo="32"><w:ilst w:val="1"/></w:list><w:list w:ilfo="33"><w:ilst w:val="35"/></w:list><w:list w:ilfo="34"><w:ilst w:val="8"/></w:list><w:list w:ilfo="35"><w:ilst w:val="29"/></w:list><w:list w:ilfo="36"><w:ilst w:val="14"/></w:list><w:list w:ilfo="37"><w:ilst w:val="10"/></w:list><w:list w:ilfo="38"><w:ilst w:val="9"/></w:list><w:list w:ilfo="39"><w:ilst w:val="3"/></w:list><w:list w:ilfo="40"><w:ilst w:val="24"/></w:list><w:list w:ilfo="41"><w:ilst w:val="32"/></w:list><w:ilfoMacAtCleanup w:val="5"/></w:lists><w:styles><w:versionOfBuiltInStylenames w:val="4"/><w:latentStyles w:defLockedState="off" w:latentStyleCount="156"/><w:style w:type="paragraph" w:default="on" w:styleId="Normal"><w:name w:val="Normal"/><w:rsid w:val="00C93CA3"/><w:pPr><w:spacing w:before="40" w:after="40" w:line="240" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading1"><w:name w:val="heading 1"/><wx:uiName wx:val="Heading 1"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading1"/><w:keepNext/><w:keepLines/><w:pageBreakBefore/><w:listPr><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="0"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:kern w:val="28"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading2"><w:name w:val="heading 2"/><wx:uiName wx:val="Heading 2"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading2"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="1"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="320" w:after="80"/><w:outlineLvl w:val="1"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading3"><w:name w:val="heading 3"/><wx:uiName wx:val="Heading 3"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading3"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="2"/><w:ilfo w:val="36"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="900"/></w:tabs><w:spacing w:before="320" w:after="80"/><w:outlineLvl w:val="2"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading4"><w:name w:val="heading 4"/><wx:uiName wx:val="Heading 4"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading4"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="3"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="3"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading5"><w:name w:val="heading 5"/><wx:uiName wx:val="Heading 5"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading5"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="4"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="4"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading6"><w:name w:val="heading 6"/><wx:uiName wx:val="Heading 6"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading6"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="5"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="5"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading7"><w:name w:val="heading 7"/><wx:uiName wx:val="Heading 7"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading7"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="6"/><w:ilfo w:val="36"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="1620"/></w:tabs><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="6"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading8"><w:name w:val="heading 8"/><wx:uiName wx:val="Heading 8"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading8"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="7"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="7"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading9"><w:name w:val="heading 9"/><wx:uiName wx:val="Heading 9"/><w:next w:val="paranormal"/><w:rsid w:val="009776CC"/><w:pPr><w:pStyle w:val="Heading9"/><w:keepNext/><w:keepLines/><w:listPr><w:ilvl w:val="8"/><w:ilfo w:val="36"/></w:listPr><w:spacing w:before="360" w:after="80"/><w:outlineLvl w:val="8"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:default="on" w:styleId="DefaultParagraphFont"><w:name w:val="Default Paragraph Font"/><w:semiHidden/></w:style><w:style w:type="table" w:default="on" w:styleId="TableNormal"><w:name w:val="Normal Table"/><wx:uiName wx:val="Table Normal"/><w:semiHidden/><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="list" w:default="on" w:styleId="NoList"><w:name w:val="No List"/><w:semiHidden/></w:style><w:style w:type="paragraph" w:styleId="paranormal"><w:name w:val="para:normal"/><w:link w:val="paranormalChar"/><w:rsid w:val="009E6B3D"/><w:pPr><w:pStyle w:val="paranormal"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="64" w:after="80" w:line="240" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b-cs/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl3"><w:name w:val="list:lvl 3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl3"/><w:listPr><w:ilvl w:val="2"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="2088"/></w:tabs></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang1"><w:name w:val="req lang:1"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang1"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Header"><w:name w:val="header"/><wx:uiName wx:val="Header"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A134C3"/><w:pPr><w:pStyle w:val="Header"/><w:tabs><w:tab w:val="center" w:pos="4320"/><w:tab w:val="right" w:pos="8640"/></w:tabs><w:spacing w:before="20" w:after="0" w:line="180" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="proprietarycontd"><w:name w:val="proprietary:cont'd"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="proprietarycontd"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="4320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="60" w:after="60" w:line="200" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="16"/><w:sz-cs w:val="16"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paracentered"><w:name w:val="para:centered"/><w:autoRedefine/><w:rsid w:val="00B43482"/><w:pPr><w:pStyle w:val="paracentered"/><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="80" w:after="80" w:line="240" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Helvetica"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent2"><w:name w:val="para:indent2"/><w:autoRedefine/><w:rsid w:val="004417BE"/><w:pPr><w:pStyle w:val="paraindent2"/><w:tabs><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="4320"/><w:tab w:val="left" w:pos="5040"/><w:tab w:val="left" w:pos="5760"/><w:tab w:val="left" w:pos="6480"/><w:tab w:val="left" w:pos="7200"/><w:tab w:val="left" w:pos="7920"/><w:tab w:val="left" w:pos="8640"/><w:tab w:val="left" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="80" w:line="240" w:line-rule="at-least"/><w:ind w:left="720"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent3"><w:name w:val="para:indent3"/><w:autoRedefine/><w:rsid w:val="0071606D"/><w:pPr><w:pStyle w:val="paraindent3"/><w:tabs><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4680"/><w:tab w:val="left" w:pos="5400"/><w:tab w:val="left" w:pos="6120"/><w:tab w:val="left" w:pos="6840"/><w:tab w:val="left" w:pos="7560"/><w:tab w:val="left" w:pos="8280"/><w:tab w:val="left" w:pos="9000"/><w:tab w:val="left" w:pos="9720"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="80" w:line="240" w:line-rule="at-least"/><w:ind w:left="1080"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Caption"><w:name w:val="caption"/><wx:uiName wx:val="Caption"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:autoRedefine/><w:semiHidden/><w:rsid w:val="0085234B"/><w:pPr><w:pStyle w:val="Caption"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="4320"/><w:tab w:val="left" w:pos="5400"/><w:tab w:val="left" w:pos="6480"/><w:tab w:val="left" w:pos="7560"/><w:tab w:val="left" w:pos="8640"/><w:tab w:val="left" w:pos="9720"/><w:tab w:val="left" w:pos="10800"/><w:tab w:val="left" w:pos="11880"/><w:tab w:val="left" w:pos="12960"/><w:tab w:val="left" w:pos="14040"/><w:tab w:val="left" w:pos="15120"/><w:tab w:val="left" w:pos="16200"/><w:tab w:val="left" w:pos="17280"/><w:tab w:val="left" w:pos="18360"/><w:tab w:val="left" w:pos="19440"/><w:tab w:val="left" w:pos="20520"/><w:tab w:val="left" w:pos="21600"/><w:tab w:val="left" w:pos="22680"/><w:tab w:val="left" w:pos="23760"/><w:tab w:val="left" w:pos="24840"/><w:tab w:val="left" w:pos="25920"/><w:tab w:val="left" w:pos="27000"/><w:tab w:val="left" w:pos="28080"/><w:tab w:val="left" w:pos="29160"/><w:tab w:val="left" w:pos="30240"/><w:tab w:val="left" w:pos="31320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="120" w:after="120"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent1"><w:name w:val="para:indent1"/><w:autoRedefine/><w:rsid w:val="007D424E"/><w:pPr><w:pStyle w:val="paraindent1"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4680"/><w:tab w:val="left" w:pos="5400"/><w:tab w:val="left" w:pos="6120"/><w:tab w:val="left" w:pos="6840"/><w:tab w:val="left" w:pos="7560"/><w:tab w:val="left" w:pos="8280"/><w:tab w:val="left" w:pos="9000"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="80" w:line="240" w:line-rule="at-least"/><w:ind w:left="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Footer"><w:name w:val="footer"/><wx:uiName wx:val="Footer"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="Footer"/><w:tabs><w:tab w:val="center" w:pos="4320"/><w:tab w:val="right" w:pos="8640"/></w:tabs></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl4"><w:name w:val="list:lvl 4"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl4"/><w:listPr><w:ilvl w:val="3"/><w:ilfo w:val="11"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHead"><w:name w:val="RowHead"/><w:basedOn w:val="Heading1"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHead"/><w:listPr><w:ilfo w:val="0"/></w:listPr><w:spacing w:before="100" w:after="100"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText11"><w:name w:val="TableText11"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText11"/><w:spacing w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOAHeading"><w:name w:val="toa heading"/><wx:uiName wx:val="TOA Heading"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOAHeading"/><w:spacing w:before="240" w:after="120"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:caps/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHeadL"><w:name w:val="RowHeadL"/><w:basedOn w:val="RowHead"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHeadL"/><w:spacing w:before="60" w:after="60"/><w:jc w:val="left"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b w:val="off"/><w:b-cs/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText11B"><w:name w:val="TableText11B"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00913874"/><w:pPr><w:pStyle w:val="TableText11B"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableofAuthorities"><w:name w:val="table of authorities"/><wx:uiName wx:val="Table of Authorities"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableofAuthorities"/><w:tabs><w:tab w:val="right" w:leader="dot" w:pos="8640"/></w:tabs><w:spacing w:before="80" w:after="80"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableofFigures"><w:name w:val="table of figures"/><wx:uiName wx:val="Table of Figures"/><w:next w:val="Normal"/><w:autoRedefine/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableofFigures"/><w:tabs><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:spacing w:before="60" w:after="60"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:styleId="Hyperlink"><w:name w:val="Hyperlink"/><w:basedOn w:val="DefaultParagraphFont"/><w:rsid w:val="00721F21"/><w:rPr><w:color w:val="0000FF"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="character" w:styleId="PageNumber"><w:name w:val="page number"/><wx:uiName wx:val="Page Number"/><w:basedOn w:val="DefaultParagraphFont"/><w:rsid w:val="00D90577"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:dstrike w:val="off"/><w:sz w:val="20"/><w:sz-cs w:val="20"/><w:vertAlign w:val="baseline"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHead11"><w:name w:val="RowHead11"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHead11"/><w:listPr><w:ilvl w:val="12"/></w:listPr><w:spacing w:before="80" w:after="80"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText11C"><w:name w:val="TableText11C"/><w:basedOn w:val="TableText11"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText11C"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl1"><w:name w:val="list:lvl 1"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl1"/><w:listPr><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="936"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="4320"/><w:tab w:val="left" w:pos="5040"/><w:tab w:val="left" w:pos="5760"/><w:tab w:val="left" w:pos="6480"/><w:tab w:val="left" w:pos="7200"/><w:tab w:val="left" w:pos="7920"/><w:tab w:val="left" w:pos="8640"/><w:tab w:val="left" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="60" w:after="60" w:line="240" w:line-rule="at-least"/><w:contextualSpacing/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Helvetica"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl5"><w:name w:val="list:lvl 5"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl5"/><w:listPr><w:ilvl w:val="4"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="360"/><w:tab w:val="clear" w:pos="720"/><w:tab w:val="clear" w:pos="1080"/><w:tab w:val="clear" w:pos="1440"/><w:tab w:val="clear" w:pos="1800"/><w:tab w:val="clear" w:pos="2160"/><w:tab w:val="clear" w:pos="2520"/><w:tab w:val="clear" w:pos="2880"/><w:tab w:val="clear" w:pos="3240"/><w:tab w:val="clear" w:pos="3600"/><w:tab w:val="left" w:pos="3384"/></w:tabs><w:spacing w:after="40"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl2"><w:name w:val="list:lvl 2"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl2"/><w:widowControl w:val="off"/><w:listPr><w:ilvl w:val="1"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="1440"/></w:tabs><w:spacing w:before="60" w:after="60" w:line="240" w:line-rule="at-least"/><w:contextualSpacing/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="AppendixTitle"><w:name w:val="Appendix Title"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="AppendixTitle"/><w:pageBreakBefore/><w:spacing w:before="120" w:after="240"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RowHead10"><w:name w:val="RowHead10"/><w:basedOn w:val="RowHead11"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="RowHead10"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC1"><w:name w:val="toc 1"/><wx:uiName wx:val="TOC 1"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00003D10"/><w:pPr><w:pStyle w:val="TOC1"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="540"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:spacing w:before="240"/><w:ind w:left="547" w:hanging="547"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:b/><w:caps/><w:noProof/><w:sz w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC2"><w:name w:val="toc 2"/><wx:uiName wx:val="TOC 2"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00003D10"/><w:pPr><w:pStyle w:val="TOC2"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="900"/><w:tab w:val="right" w:leader="dot" w:pos="9360"/></w:tabs><w:spacing w:before="120"/><w:ind w:left="907" w:hanging="720"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC3"><w:name w:val="toc 3"/><wx:uiName wx:val="TOC 3"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC3"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="1260"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="1260" w:hanging="900"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC4"><w:name w:val="toc 4"/><wx:uiName wx:val="TOC 4"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC4"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="1620"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="1620" w:hanging="1080"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC5"><w:name w:val="toc 5"/><wx:uiName wx:val="TOC 5"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC5"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="1980"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="1980" w:hanging="1260"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC6"><w:name w:val="toc 6"/><wx:uiName wx:val="TOC 6"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC6"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="2340"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="2340" w:hanging="1440"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:noProof/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC7"><w:name w:val="toc 7"/><wx:uiName wx:val="TOC 7"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC7"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="2700"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:spacing w:before="0" w:after="0" w:line="240" w:line-rule="auto"/><w:ind w:left="2700" w:hanging="1620"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC8"><w:name w:val="toc 8"/><wx:uiName wx:val="TOC 8"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC8"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="2970"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="2970" w:hanging="1710"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC9"><w:name w:val="toc 9"/><wx:uiName wx:val="TOC 9"/><w:next w:val="Normal"/><w:semiHidden/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TOC9"/><w:keepLines/><w:tabs><w:tab w:val="left" w:pos="3330"/><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:ind w:left="3330" w:hanging="1890"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="HeadingUnnumbered"><w:name w:val="Heading Unnumbered"/><w:next w:val="paranormal"/><w:autoRedefine/><w:rsid w:val="00107AA6"/><w:pPr><w:pStyle w:val="HeadingUnnumbered"/><w:keepNext/><w:keepLines/><w:spacing w:before="240" w:after="80"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="24"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10"><w:name w:val="TableText10"/><w:basedOn w:val="TableText11"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText10"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableTextBCentered"><w:name w:val="TableTextB Centered"/><w:basedOn w:val="Normal"/><w:rsid w:val="00913874"/><w:pPr><w:pStyle w:val="TableTextBCentered"/><w:spacing w:line="220" w:line-rule="at-least"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10C"><w:name w:val="TableText10C"/><w:basedOn w:val="TableText11C"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="TableText10C"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10B"><w:name w:val="TableText10B"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00913874"/><w:pPr><w:pStyle w:val="TableText10B"/><w:spacing w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="acronym"><w:name w:val="acronym"/><w:autoRedefine/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="acronym"/><w:tabs><w:tab w:val="left" w:pos="2160"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="40" w:after="40"/><w:ind w:left="2160" w:hanging="2160"/><w:jc w:val="both"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><wx:font wx:val="Arial"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl6"><w:name w:val="list:lvl 6"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl6"/><w:listPr><w:ilvl w:val="5"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="360"/><w:tab w:val="clear" w:pos="720"/><w:tab w:val="clear" w:pos="1080"/><w:tab w:val="clear" w:pos="1440"/><w:tab w:val="clear" w:pos="1800"/><w:tab w:val="clear" w:pos="2160"/><w:tab w:val="clear" w:pos="2520"/><w:tab w:val="clear" w:pos="2880"/><w:tab w:val="clear" w:pos="3240"/><w:tab w:val="clear" w:pos="3600"/><w:tab w:val="clear" w:pos="3960"/><w:tab w:val="clear" w:pos="4320"/></w:tabs><w:spacing w:after="40"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="hdr1L"><w:name w:val="hdr1L"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="hdr1L"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="center" w:pos="4680"/><w:tab w:val="right" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="hdr2L"><w:name w:val="hdr2L"/><w:basedOn w:val="Normal"/><w:rsid w:val="00721F21"/><w:pPr><w:pStyle w:val="hdr2L"/><w:tabs><w:tab w:val="left" w:pos="0"/><w:tab w:val="center" w:pos="4680"/><w:tab w:val="right" w:pos="9360"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="0" w:line="180" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bulletlvl1"><w:name w:val="bullet:lvl 1"/><w:basedOn w:val="Normal"/><w:link w:val="bulletlvl1CharChar"/><w:rsid w:val="00143D5A"/><w:pPr><w:pStyle w:val="bulletlvl1"/><w:listPr><w:ilfo w:val="1"/></w:listPr><w:spacing w:after="80"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bulletlvl2"><w:name w:val="bullet:lvl 2"/><w:basedOn w:val="Normal"/><w:rsid w:val="00143D5A"/><w:pPr><w:pStyle w:val="bulletlvl2"/><w:widowControl w:val="off"/><w:listPr><w:ilfo w:val="2"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="1224"/><w:tab w:val="left" w:pos="648"/><w:tab w:val="left" w:pos="1008"/></w:tabs><w:spacing w:after="80"/><w:ind w:left="1728" w:hanging="1080"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="paraindent4"><w:name w:val="para:indent4"/><w:basedOn w:val="paraindent3"/><w:autoRedefine/><w:rsid w:val="0071606D"/><w:pPr><w:pStyle w:val="paraindent4"/><w:ind w:left="1440"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl7"><w:name w:val="list:lvl 7"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl7"/><w:listPr><w:ilvl w:val="6"/><w:ilfo w:val="11"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="360"/><w:tab w:val="clear" w:pos="720"/><w:tab w:val="clear" w:pos="1080"/><w:tab w:val="clear" w:pos="1440"/><w:tab w:val="clear" w:pos="1800"/><w:tab w:val="clear" w:pos="2160"/><w:tab w:val="clear" w:pos="2520"/><w:tab w:val="clear" w:pos="2880"/><w:tab w:val="clear" w:pos="3240"/><w:tab w:val="clear" w:pos="3600"/><w:tab w:val="clear" w:pos="3960"/><w:tab w:val="left" w:pos="3024"/></w:tabs><w:spacing w:after="40"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOCfiguretitle"><w:name w:val="TOC:figure title"/><w:basedOn w:val="Caption"/><w:autoRedefine/><w:rsid w:val="00894991"/><w:pPr><w:pStyle w:val="TOCfiguretitle"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="note"><w:name w:val="note"/><w:basedOn w:val="Normal"/><w:rsid w:val="006E0AB6"/><w:pPr><w:pStyle w:val="note"/><w:spacing w:before="80" w:after="80"/><w:ind w:left="1656" w:right="720" w:hanging="936"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang2"><w:name w:val="req lang:2"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang2"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="720"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang3"><w:name w:val="req lang:3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang3"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="1080"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang4"><w:name w:val="req lang:4"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang4"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="1440"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang5"><w:name w:val="req lang:5"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang5"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="1800"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang6"><w:name w:val="req lang:6"/><w:basedOn w:val="Normal"/><w:rsid w:val="00F25A7A"/><w:pPr><w:pStyle w:val="reqlang6"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="60" w:after="60"/><w:ind w:left="2160"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="statedef"><w:name w:val="state def"/><w:basedOn w:val="Normal"/><w:rsid w:val="00DE6BA0"/><w:pPr><w:pStyle w:val="statedef"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/></w:tabs><w:spacing w:before="80" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:caps/><w:color w:val="408040"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="intentblank"><w:name w:val="intent:blank"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="000B79E8"/><w:pPr><w:pStyle w:val="intentblank"/><w:spacing w:before="6480" w:after="0"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="code"><w:name w:val="code"/><w:basedOn w:val="Normal"/><w:rsid w:val="006D4514"/><w:pPr><w:pStyle w:val="code"/><w:spacing w:before="80" w:after="80" w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="parapage"><w:name w:val="para:page"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00DD22A9"/><w:pPr><w:pStyle w:val="parapage"/><w:pageBreakBefore/><w:spacing w:before="80" w:after="80"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOCtabletitle"><w:name w:val="TOC:table title"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="00B869CD"/><w:pPr><w:pStyle w:val="TOCtabletitle"/><w:spacing w:before="120" w:after="120"/><w:jc w:val="center"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RCRitem"><w:name w:val="RCR:item"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="007A1F4F"/><w:pPr><w:pStyle w:val="RCRitem"/><w:tabs><w:tab w:val="left" w:pos="1800"/></w:tabs><w:spacing w:before="120"/><w:ind w:left="1800" w:right="720" w:hanging="1800"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="RCRheader"><w:name w:val="RCR:header"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="006D781E"/><w:pPr><w:pStyle w:val="RCRheader"/><w:tabs><w:tab w:val="left" w:pos="792"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="right" w:leader="underscore" w:pos="8640"/></w:tabs><w:spacing w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:sz-cs w:val="22"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="line"><w:name w:val="line"/><w:basedOn w:val="Normal"/><w:autoRedefine/><w:rsid w:val="006B63C2"/><w:pPr><w:pStyle w:val="line"/><w:spacing w:before="0" w:line="40" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="12"/><w:sz-cs w:val="12"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang7"><w:name w:val="req lang: 7"/><w:basedOn w:val="reqlang6"/><w:rsid w:val="00C0337E"/><w:pPr><w:pStyle w:val="reqlang7"/><w:ind w:left="2520"/></w:pPr><w:rPr><wx:font wx:val="Courier New"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang70"><w:name w:val="req lang:7"/><w:basedOn w:val="reqlang7"/><w:rsid w:val="004C603C"/><w:pPr><w:pStyle w:val="reqlang70"/></w:pPr><w:rPr><wx:font wx:val="Courier New"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang8"><w:name w:val="req lang:8"/><w:basedOn w:val="reqlang7"/><w:rsid w:val="004C603C"/><w:pPr><w:pStyle w:val="reqlang8"/><w:ind w:left="2880"/></w:pPr><w:rPr><wx:font wx:val="Courier New"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="reqlang9"><w:name w:val="req lang:9"/><w:basedOn w:val="Normal"/><w:rsid w:val="007534C9"/><w:pPr><w:pStyle w:val="reqlang9"/><w:spacing w:before="60" w:after="60"/><w:ind w:left="3240"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New"/><wx:font wx:val="Courier New"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="DocumentMap"><w:name w:val="Document Map"/><w:basedOn w:val="Normal"/><w:semiHidden/><w:rsid w:val="00AF20CB"/><w:pPr><w:pStyle w:val="DocumentMap"/><w:shd w:val="clear" w:color="auto" w:fill="000080"/></w:pPr><w:rPr><w:rFonts w:ascii="Tahoma" w:h-ansi="Tahoma" w:cs="Tahoma"/><wx:font wx:val="Tahoma"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment1"><w:name w:val="comment:1"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment1"/><w:spacing w:before="60" w:after="60"/><w:ind w:left="360"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment2"><w:name w:val="comment:2"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment2"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="720"/><w:jc w:val="both"/></w:pPr><w:rPr><w:rFonts w:cs="Arial"/><wx:font wx:val="Arial"/><w:color w:val="FF0000"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment3"><w:name w:val="comment:3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment3"/><w:tabs><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="720"/><w:tab w:val="left" w:pos="1080"/><w:tab w:val="left" w:pos="1440"/><w:tab w:val="left" w:pos="1800"/><w:tab w:val="left" w:pos="2160"/><w:tab w:val="left" w:pos="2520"/><w:tab w:val="left" w:pos="2880"/><w:tab w:val="left" w:pos="3240"/><w:tab w:val="left" w:pos="3600"/><w:tab w:val="left" w:pos="3960"/><w:tab w:val="left" w:pos="4320"/></w:tabs><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="1080"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment4"><w:name w:val="comment:4"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment4"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="1440"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment5"><w:name w:val="comment:5"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment5"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="1800"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment6"><w:name w:val="comment:6"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment6"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="2160"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment7"><w:name w:val="comment:7"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment7"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="2520"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment8"><w:name w:val="comment:8"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment8"/><w:spacing w:before="60" w:after="80"/><w:ind w:left="2880"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="comment9"><w:name w:val="comment:9"/><w:basedOn w:val="Normal"/><w:rsid w:val="00111B46"/><w:pPr><w:pStyle w:val="comment9"/><w:spacing w:after="80"/><w:ind w:left="3240"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="FF0000"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlheader"><w:name w:val="dl:header"/><w:basedOn w:val="paranormal"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlheader"/><w:spacing w:before="240" w:after="0"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier" w:h-ansi="Courier"/><wx:font wx:val="Courier"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlbody"><w:name w:val="dl:body"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlbody"/><w:spacing w:before="0"/><w:ind w:left="360"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlprocheader"><w:name w:val="dl_proc:header"/><w:basedOn w:val="dlbody"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlprocheader"/><w:spacing w:before="240"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dlprocbody"><w:name w:val="dl_proc:body"/><w:basedOn w:val="dlprocheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dlprocbody"/><w:spacing w:before="0"/><w:ind w:left="720"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="dldescription"><w:name w:val="dl:description"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="dldescription"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bitmapheader"><w:name w:val="bitmap:header"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="bitmapheader"/></w:pPr><w:rPr><wx:font wx:val="Courier"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="bitmapbody"><w:name w:val="bitmap:body"/><w:basedOn w:val="dlheader"/><w:rsid w:val="00071300"/><w:pPr><w:pStyle w:val="bitmapbody"/><w:spacing w:before="0"/></w:pPr><w:rPr><wx:font wx:val="Courier"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX1"><w:name w:val="APPENDIX 1"/><w:basedOn w:val="Normal"/><w:next w:val="paranormal"/><w:rsid w:val="004978C4"/><w:pPr><w:pStyle w:val="APPENDIX1"/><w:listPr><w:ilfo w:val="25"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="1440"/></w:tabs><w:spacing w:before="152" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:color w:val="auto"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX2"><w:name w:val="APPENDIX 2"/><w:basedOn w:val="APPENDIX1"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX2"/><w:listPr><w:ilvl w:val="1"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX3"><w:name w:val="APPENDIX 3"/><w:basedOn w:val="APPENDIX2"/><w:next w:val="paranormal"/><w:rsid w:val="00E904D2"/><w:pPr><w:pStyle w:val="APPENDIX3"/><w:listPr><w:ilvl w:val="2"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage18pt"><w:name w:val="Title Page 18pt"/><w:basedOn w:val="Normal"/><w:rsid w:val="0033770F"/><w:pPr><w:pStyle w:val="TitlePage18pt"/><w:spacing w:before="0" w:after="60" w:line="240" w:line-rule="auto"/><w:jc w:val="center"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:color w:val="auto"/><w:sz w:val="36"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage16pt"><w:name w:val="Title Page 16pt"/><w:basedOn w:val="TitlePage18pt"/><w:rsid w:val="0033770F"/><w:pPr><w:pStyle w:val="TitlePage16pt"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="32"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage14pt"><w:name w:val="Title Page 14pt"/><w:basedOn w:val="TitlePage16pt"/><w:rsid w:val="0033770F"/><w:pPr><w:pStyle w:val="TitlePage14pt"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b w:val="off"/><w:sz w:val="28"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para10pt"><w:name w:val="para 10pt"/><w:basedOn w:val="Normal"/><w:link w:val="para10ptChar"/><w:rsid w:val="004E3337"/><w:pPr><w:pStyle w:val="para10pt"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para10ptnospacing"><w:name w:val="para 10pt no spacing"/><w:basedOn w:val="para10pt"/><w:rsid w:val="004A1CCA"/><w:pPr><w:pStyle w:val="para10ptnospacing"/><w:spacing w:before="0" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableText10nospacing"><w:name w:val="TableText10 no spacing"/><w:basedOn w:val="TableText10"/><w:rsid w:val="00D72507"/><w:pPr><w:pStyle w:val="TableText10nospacing"/><w:spacing w:before="0" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para8pt"><w:name w:val="para 8pt"/><w:basedOn w:val="Normal"/><w:link w:val="para8ptChar"/><w:rsid w:val="004E3337"/><w:pPr><w:pStyle w:val="para8pt"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="16"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="paranormalChar"><w:name w:val="para:normal Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="paranormal"/><w:rsid w:val="00C93CA3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:b-cs/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:styleId="bulletlvl1CharChar"><w:name w:val="bullet:lvl 1 Char Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="bulletlvl1"/><w:rsid w:val="00C93CA3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:color w:val="000000"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="ParagraphText"><w:name w:val="ParagraphText"/><w:basedOn w:val="Normal"/><w:rsid w:val="00C93CA3"/><w:pPr><w:pStyle w:val="ParagraphText"/><w:spacing w:before="0" w:after="120" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/><wx:font wx:val="Times New Roman"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl10"><w:name w:val="list lvl 1"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A81E8C"/><w:pPr><w:pStyle w:val="listlvl10"/><w:listPr><w:ilfo w:val="9"/></w:listPr><w:tabs><w:tab w:val="left" w:pos="936"/></w:tabs><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX4"><w:name w:val="APPENDIX 4"/><w:basedOn w:val="APPENDIX3"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX4"/><w:listPr><w:ilvl w:val="3"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX5"><w:name w:val="APPENDIX 5"/><w:basedOn w:val="APPENDIX4"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX5"/><w:listPr><w:ilvl w:val="4"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX6"><w:name w:val="APPENDIX 6"/><w:basedOn w:val="APPENDIX5"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX6"/><w:listPr><w:ilvl w:val="5"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX7"><w:name w:val="APPENDIX 7"/><w:basedOn w:val="APPENDIX6"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX7"/><w:listPr><w:ilvl w:val="6"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX8"><w:name w:val="APPENDIX 8"/><w:basedOn w:val="APPENDIX7"/><w:next w:val="paranormal"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX8"/><w:listPr><w:ilvl w:val="7"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="APPENDIX9"><w:name w:val="APPENDIX 9"/><w:basedOn w:val="APPENDIX8"/><w:rsid w:val="009B7093"/><w:pPr><w:pStyle w:val="APPENDIX9"/><w:listPr><w:ilvl w:val="8"/></w:listPr></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="BalloonText"><w:name w:val="Balloon Text"/><w:basedOn w:val="Normal"/><w:semiHidden/><w:rsid w:val="00B47E5D"/><w:pPr><w:pStyle w:val="BalloonText"/></w:pPr><w:rPr><w:rFonts w:ascii="Tahoma" w:h-ansi="Tahoma" w:cs="Tahoma"/><wx:font wx:val="Tahoma"/><w:sz w:val="16"/><w:sz-cs w:val="16"/></w:rPr></w:style><w:style w:type="list" w:styleId="listreset"><w:name w:val="listreset"/><w:basedOn w:val="NoList"/><w:rsid w:val="00D25E39"/><w:pPr><w:listPr><w:ilfo w:val="26"/></w:listPr></w:pPr></w:style><w:style w:type="paragraph" w:styleId="bulletlvl3"><w:name w:val="bullet:lvl 3"/><w:basedOn w:val="Normal"/><w:rsid w:val="00EF5226"/><w:pPr><w:pStyle w:val="bulletlvl3"/><w:listPr><w:ilfo w:val="28"/></w:listPr><w:tabs><w:tab w:val="clear" w:pos="3024"/><w:tab w:val="left" w:pos="360"/><w:tab w:val="left" w:pos="1008"/></w:tabs><w:spacing w:after="80"/><w:ind w:left="1368" w:hanging="360"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="character" w:styleId="CommentReference"><w:name w:val="annotation reference"/><wx:uiName wx:val="Comment Reference"/><w:basedOn w:val="DefaultParagraphFont"/><w:semiHidden/><w:rsid w:val="00E40969"/><w:rPr><w:sz w:val="16"/><w:sz-cs w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CommentText"><w:name w:val="annotation text"/><wx:uiName wx:val="Comment Text"/><w:basedOn w:val="Normal"/><w:semiHidden/><w:rsid w:val="00E40969"/><w:pPr><w:pStyle w:val="CommentText"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CommentSubject"><w:name w:val="annotation subject"/><wx:uiName wx:val="Comment Subject"/><w:basedOn w:val="CommentText"/><w:next w:val="CommentText"/><w:semiHidden/><w:rsid w:val="00E40969"/><w:pPr><w:pStyle w:val="CommentSubject"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:b/><w:b-cs/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TitlePage22pt"><w:name w:val="Title Page 22pt"/><w:basedOn w:val="TitlePage16pt"/><w:rsid w:val="005F35C4"/><w:pPr><w:pStyle w:val="TitlePage22pt"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="44"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para"><w:name w:val="para"/><w:basedOn w:val="Normal"/><w:link w:val="paraChar"/><w:rsid w:val="0057061B"/><w:pPr><w:pStyle w:val="para"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="paraChar"><w:name w:val="para Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="para"/><w:rsid w:val="0057061B"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl20"><w:name w:val="list lvl 2"/><w:basedOn w:val="ListNumber3"/><w:rsid w:val="0057061B"/><w:pPr><w:pStyle w:val="listlvl20"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="ListNumber3"><w:name w:val="List Number 3"/><w:basedOn w:val="Normal"/><w:rsid w:val="0057061B"/><w:pPr><w:pStyle w:val="ListNumber3"/><w:tabs><w:tab w:val="list" w:pos="1512"/></w:tabs><w:ind w:left="1512" w:hanging="504"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="table" w:styleId="TableGrid"><w:name w:val="Table Grid"/><w:basedOn w:val="TableNormal"/><w:rsid w:val="008B1AB7"/><w:pPr><w:spacing w:before="40" w:after="40" w:line="240" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblBorders><w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/></w:tblBorders><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="character" w:styleId="para8ptChar"><w:name w:val="para 8pt Char"/><w:basedOn w:val="paraChar"/><w:link w:val="para8pt"/><w:rsid w:val="007921D3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="16"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para8ptunderline"><w:name w:val="para 8pt underline"/><w:basedOn w:val="para8pt"/><w:link w:val="para8ptunderlineChar"/><w:rsid w:val="007921D3"/><w:pPr><w:pStyle w:val="para8ptunderline"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="character" w:styleId="para8ptunderlineChar"><w:name w:val="para 8pt underline Char"/><w:basedOn w:val="para8ptChar"/><w:link w:val="para8ptunderline"/><w:rsid w:val="007921D3"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="16"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="para8ptnospacing"><w:name w:val="para 8pt no spacing"/><w:basedOn w:val="para8pt"/><w:rsid w:val="007921D3"/><w:pPr><w:pStyle w:val="para8ptnospacing"/><w:spacing w:before="0" w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="listlvl0"><w:name w:val="list lvl 0"/><w:basedOn w:val="ListNumber"/><w:rsid w:val="00A233DA"/><w:pPr><w:pStyle w:val="listlvl0"/><w:spacing w:before="72" w:after="72" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:color w:val="auto"/><w:sz w:val="24"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="ListNumber"><w:name w:val="List Number"/><w:basedOn w:val="Normal"/><w:rsid w:val="00A233DA"/><w:pPr><w:pStyle w:val="ListNumber"/><w:tabs><w:tab w:val="list" w:pos="504"/></w:tabs><w:ind w:left="504" w:hanging="504"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="character" w:styleId="para10ptChar"><w:name w:val="para 10pt Char"/><w:basedOn w:val="paraChar"/><w:link w:val="para10pt"/><w:rsid w:val="0015054E"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial"/><w:sz w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:styleId="FollowedHyperlink"><w:name w:val="FollowedHyperlink"/><w:basedOn w:val="DefaultParagraphFont"/><w:rsid w:val="00B8047C"/><w:rPr><w:color w:val="800080"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="microart8"><w:name w:val="micro:art8"/><w:basedOn w:val="Normal"/><w:rsid w:val="00D1251A"/><w:pPr><w:pStyle w:val="microart8"/><w:spacing w:before="0" w:after="0" w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="microart9"><w:name w:val="micro:art9"/><w:basedOn w:val="Normal"/><w:rsid w:val="00D1251A"/><w:pPr><w:pStyle w:val="microart9"/><w:spacing w:before="0" w:after="0" w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="microart10"><w:name w:val="micro:art10"/><w:basedOn w:val="Normal"/><w:rsid w:val="00D1251A"/><w:pPr><w:pStyle w:val="microart10"/><w:spacing w:before="120" w:after="0" w:line="220" w:line-rule="at-least"/></w:pPr><w:rPr><wx:font wx:val="Arial"/><w:sz w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="IndentListlvl1"><w:name w:val="Indent:Listlvl1"/><w:basedOn w:val="Normal"/><w:rsid w:val="00B7285A"/><w:pPr><w:pStyle w:val="IndentListlvl1"/><w:spacing w:before="60" w:after="60"/><w:ind w:left="1296"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="IndentListlvl2"><w:name w:val="Indent:Listlvl2"/><w:basedOn w:val="IndentListlvl1"/><w:rsid w:val="008B2A59"/><w:pPr><w:pStyle w:val="IndentListlvl2"/><w:ind w:left="1656"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="IndentListlvl3"><w:name w:val="Indent:Listlvl3"/><w:basedOn w:val="IndentListlvl2"/><w:rsid w:val="008B2A59"/><w:pPr><w:pStyle w:val="IndentListlvl3"/><w:ind w:left="2016"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="IndentListlvl4"><w:name w:val="Indent:Listlvl4"/><w:basedOn w:val="IndentListlvl3"/><w:rsid w:val="008B2A59"/><w:pPr><w:pStyle w:val="IndentListlvl4"/><w:ind w:left="2376"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="IndentListlvl5"><w:name w:val="Indent:Listlvl5"/><w:basedOn w:val="IndentListlvl4"/><w:rsid w:val="008B2A59"/><w:pPr><w:pStyle w:val="IndentListlvl5"/><w:ind w:left="2736"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="IndentListlvl6"><w:name w:val="Indent:Listlvl6"/><w:basedOn w:val="IndentListlvl5"/><w:rsid w:val="008B2A59"/><w:pPr><w:pStyle w:val="IndentListlvl6"/><w:ind w:left="3096"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="IndentListlvl7"><w:name w:val="Indent:Listlvl7"/><w:basedOn w:val="IndentListlvl6"/><w:rsid w:val="008B2A59"/><w:pPr><w:pStyle w:val="IndentListlvl7"/><w:ind w:left="3456"/></w:pPr><w:rPr><wx:font wx:val="Arial"/></w:rPr></w:style></w:styles><w:shapeDefaults><o:shapedefaults v:ext="edit" spidmax="46082"/><o:shapelayout v:ext="edit"><o:idmap v:ext="edit" data="1"/></o:shapelayout></w:shapeDefaults><w:docPr><w:view w:val="print"/><w:zoom w:percent="100"/><w:displayBackgroundShape/><w:doNotEmbedSystemFonts/><w:bordersDontSurroundHeader/><w:bordersDontSurroundFooter/><w:attachedTemplate w:val=""/><w:documentProtection w:formatting="on" w:enforcement="off"/><w:defaultTabStop w:val="720"/><w:doNotHyphenateCaps/><w:drawingGridHorizontalSpacing w:val="120"/><w:drawingGridVerticalSpacing w:val="120"/><w:displayHorizontalDrawingGridEvery w:val="0"/><w:displayVerticalDrawingGridEvery w:val="3"/><w:useMarginsForDrawingGridOrigin/><w:doNotShadeFormData/><w:punctuationKerning/><w:characterSpacingControl w:val="CompressPunctuation"/><w:optimizeForBrowser/><w:validateAgainstSchema w:val="off"/><w:saveInvalidXML/><w:ignoreMixedContent w:val="off"/><w:alwaysShowPlaceholderText w:val="off"/><w:hdrShapeDefaults><o:shapedefaults v:ext="edit" spidmax="46082"/></w:hdrShapeDefaults><w:footnotePr><w:footnote w:type="separator"><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"><w:r><w:separator/></w:r></w:p><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/></w:footnote><w:footnote w:type="continuation-separator"><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"><w:r><w:continuationSeparator/></w:r></w:p><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/></w:footnote></w:footnotePr><w:endnotePr><w:endnote w:type="separator"><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"><w:r><w:separator/></w:r></w:p><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/></w:endnote><w:endnote w:type="continuation-separator"><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"><w:r><w:continuationSeparator/></w:r></w:p><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/><w:p wsp:rsidR="0036289B" wsp:rsidRDefault="0036289B"/></w:endnote></w:endnotePr><w:compat><w:footnoteLayoutLikeWW8/><w:shapeLayoutLikeWW8/><w:alignTablesRowByRow/><w:forgetLastTabAlignment/><w:doNotUseHTMLParagraphAutoSpacing/><w:layoutRawTableWidth/><w:layoutTableRowsApart/><w:useWord97LineBreakingRules/><w:dontAllowFieldEndSelect/><w:useWord2002TableStyleRules/></w:compat><wsp:rsids><wsp:rsidRoot wsp:val="00244327"/><wsp:rsid wsp:val="000675EF"/><wsp:rsid wsp:val="00244327"/><wsp:rsid wsp:val="0036289B"/><wsp:rsid wsp:val="00391FB0"/><wsp:rsid wsp:val="0044041B"/><wsp:rsid wsp:val="004E1CA2"/><wsp:rsid wsp:val="005C2020"/><wsp:rsid wsp:val="005C6782"/><wsp:rsid wsp:val="006D2836"/><wsp:rsid wsp:val="00727815"/><wsp:rsid wsp:val="007F3E1C"/><wsp:rsid wsp:val="008B2A59"/><wsp:rsid wsp:val="009020C5"/><wsp:rsid wsp:val="00911F75"/><wsp:rsid wsp:val="009C3FEA"/><wsp:rsid wsp:val="00A57881"/><wsp:rsid wsp:val="00AE0097"/><wsp:rsid wsp:val="00B17C0D"/><wsp:rsid wsp:val="00B7285A"/><wsp:rsid wsp:val="00C07028"/><wsp:rsid wsp:val="00CC49D3"/><wsp:rsid wsp:val="00D86D66"/><wsp:rsid wsp:val="00E46F31"/></wsp:rsids></w:docPr><w:body><wx:sect><ns1:Artifact><w:p wsp:rsidR="007F3E1C" wsp:rsidRDefault="004E1CA2"><Set_Name><w:r wsp:rsidR="00B17C0D"><w:t>Default</w:t></w:r></Set_Name><Attribute><Name><w:r wsp:rsidR="005C2020" wsp:rsidRPr="005C2020"><w:t>Word Template Content</w:t></w:r></Name></Attribute></w:p></ns1:Artifact><w:p wsp:rsidR="007F3E1C" wsp:rsidRDefault="007F3E1C"/><w:sectPr wsp:rsidR="007F3E1C" wsp:rsidSect="007F3E1C"><w:hdr w:type="odd"><w:p wsp:rsidR="007F3E1C" wsp:rsidRDefault="007F3E1C"><w:pPr><w:pStyle w:val="Header"/></w:pPr></w:p></w:hdr><w:pgSz w:w="12240" w:h="15840" w:code="1"/><w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="432" w:footer="432" w:gutter="0"/><w:pgNumType w:start="1"/><w:cols w:space="475"/><w:noEndnote/></w:sectPr></wx:sect></w:body></w:wordDocument>\ No newline at end of file

Back to the top