diff --git a/migrations/devel@8b08d9f_to_devel@0.0.7.sql b/migrations/devel@8b08d9f_to_devel@0.0.7.sql deleted file mode 100644 index b21e31b..0000000 --- a/migrations/devel@8b08d9f_to_devel@0.0.7.sql +++ /dev/null @@ -1,287 +0,0 @@ -create schema if not exists "human_uuid"; - -create table "human_uuid"."object" ( - "id" integer generated always as identity not null, - "word" text -); - - -create table "human_uuid"."predicate" ( - "id" integer generated always as identity not null, - "word" text -); - - -create table "human_uuid"."used" ( - "huid" text not null -); - - -create type "human_uuid"."huid" as ("str" text); - -CREATE OR REPLACE FUNCTION human_uuid.huid() - RETURNS human_uuid.huid - LANGUAGE plpgsql -AS $function$ -declare - tries int := 0; - uniq bool := false; - uuid bytea; - uuid_bits int[] := array[] :: int[]; - pred_1_int int; - pred_2_int int; - pred_3_int int; - object_int int; - pred_1 text; - pred_2 text; - pred_3 text; - object text; - huid_text text; -begin - while not uniq loop - if tries > 1000 then - raise exception 'failed to find uniq huid after 1000 attempts'; - end if; - - tries := tries + 1; - - uuid := decode(replace(gen_random_uuid() :: text, '-', ''), 'hex'); - for b in 0..(bit_length(uuid) - 1) loop - uuid_bits := uuid_bits || get_bit(uuid, b); - end loop; - - pred_1_int := (lpad(array_to_string(uuid_bits[1:10], ''), 32, '0') :: bit(32)) :: int; - pred_1_int := pred_1_int + (lpad(array_to_string(uuid_bits[11:14], ''), 32, '0') :: bit(32)) :: int; - - pred_2_int := (lpad(array_to_string(uuid_bits[15:24], ''), 32, '0') :: bit(32)) :: int; - pred_2_int := pred_2_int + (lpad(array_to_string(uuid_bits[25:27], ''), 32, '0') :: bit(32)) :: int; - - pred_3_int := (lpad(array_to_string(uuid_bits[28:37], ''), 32, '0') :: bit(32)) :: int; - pred_3_int := pred_3_int + (lpad(array_to_string(uuid_bits[38:40], ''), 32, '0') :: bit(32)) :: int; - - object_int := (lpad(array_to_string(uuid_bits[41:51], ''), 32, '0') :: bit(32)) :: int; - - select word from human_uuid.predicate where id = pred_1_int into pred_1; - select word from human_uuid.predicate where id = pred_2_int into pred_2; - select word from human_uuid.predicate where id = pred_3_int into pred_3; - select word from human_uuid.object where id = object_int into object; - - huid_text := pred_1 || '-' || pred_2 || '-' || pred_3 || '-' || object; - - uniq := (select count(*) from human_uuid.used where huid = huid_text) = 0; - end loop; - - return human_uuid.huid_of_string(huid_text); -end; -$function$ -; - -CREATE OR REPLACE FUNCTION human_uuid.huid_of_string(val text) - RETURNS human_uuid.huid - LANGUAGE sql -AS $function$select row(val);$function$ -; - -CREATE OR REPLACE FUNCTION human_uuid.huid_to_string(val human_uuid.huid) - RETURNS text - LANGUAGE sql -AS $function$select (val.str);$function$ -; - -alter table "public"."community" alter column "uid" drop default; -alter table "public"."community" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."community" alter column "uid" set default human_uuid.huid(); - -alter table "public"."grp" alter column "uid" drop default; -alter table "public"."grp" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."grp" alter column "uid" set default human_uuid.huid(); - -alter table "public"."perm" alter column "uid" drop default; -alter table "public"."perm" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."perm" alter column "uid" set default human_uuid.huid(); - -alter table "public"."thread" alter column "uid" drop default; -alter table "public"."thread" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."thread" alter column "uid" set default human_uuid.huid(); - -alter table "public"."thread_attachment" alter column "uid" drop default; -alter table "public"."thread_attachment" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."thread_attachment" alter column "uid" set default human_uuid.huid(); - -alter table "public"."thread_attachment_emoji" alter column "uid" drop default; -alter table "public"."thread_attachment_emoji" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."thread_attachment_emoji" alter column "uid" set default human_uuid.huid(); - -alter table "public"."thread_attachment_vote" alter column "uid" drop default; -alter table "public"."thread_attachment_vote" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."thread_attachment_vote" alter column "uid" set default human_uuid.huid(); - -alter table "public"."thread_feed" alter column "uid" drop default; -alter table "public"."thread_feed" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."thread_feed" alter column "uid" set default human_uuid.huid(); - -alter table "public"."usr" alter column "uid" drop default; -alter table "public"."usr" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."usr" alter column "uid" set default human_uuid.huid(); - -CREATE UNIQUE INDEX object_pkey ON human_uuid.object USING btree (id); - -CREATE UNIQUE INDEX object_word_key ON human_uuid.object USING btree (word); - -CREATE UNIQUE INDEX predicate_pkey ON human_uuid.predicate USING btree (id); - -CREATE UNIQUE INDEX predicate_word_key ON human_uuid.predicate USING btree (word); - -CREATE UNIQUE INDEX used_pkey ON human_uuid.used USING btree (huid); - -CREATE UNIQUE INDEX grp_uid_key ON public.grp USING btree (uid); - -CREATE UNIQUE INDEX perm_uid_key ON public.perm USING btree (uid); - -CREATE UNIQUE INDEX thread_attachment_emoji_uid_key ON public.thread_attachment_emoji USING btree (uid); - -CREATE UNIQUE INDEX thread_attachment_uid_key ON public.thread_attachment USING btree (uid); - -CREATE UNIQUE INDEX thread_attachment_vote_uid_key ON public.thread_attachment_vote USING btree (uid); - -CREATE UNIQUE INDEX thread_feed_uid_key ON public.thread_feed USING btree (uid); - -CREATE UNIQUE INDEX thread_uid_key ON public.thread USING btree (uid); - -CREATE UNIQUE INDEX usr_uid_key ON public.usr USING btree (uid); - -alter table "human_uuid"."object" add constraint "object_pkey" PRIMARY KEY using index "object_pkey"; - -alter table "human_uuid"."predicate" add constraint "predicate_pkey" PRIMARY KEY using index "predicate_pkey"; - -alter table "human_uuid"."used" add constraint "used_pkey" PRIMARY KEY using index "used_pkey"; - -alter table "human_uuid"."object" add constraint "object_word_key" UNIQUE using index "object_word_key"; - -alter table "human_uuid"."predicate" add constraint "predicate_word_key" UNIQUE using index "predicate_word_key"; - -alter table "public"."grp" add constraint "grp_uid_key" UNIQUE using index "grp_uid_key"; - -alter table "public"."perm" add constraint "perm_uid_key" UNIQUE using index "perm_uid_key"; - -alter table "public"."thread" add constraint "thread_uid_key" UNIQUE using index "thread_uid_key"; - -alter table "public"."thread_attachment" add constraint "thread_attachment_uid_key" UNIQUE using index "thread_attachment_uid_key"; - -alter table "public"."thread_attachment_emoji" add constraint "thread_attachment_emoji_uid_key" UNIQUE using index "thread_attachment_emoji_uid_key"; - -alter table "public"."thread_attachment_vote" add constraint "thread_attachment_vote_uid_key" UNIQUE using index "thread_attachment_vote_uid_key"; - -alter table "public"."thread_feed" add constraint "thread_feed_uid_key" UNIQUE using index "thread_feed_uid_key"; - -alter table "public"."usr" add constraint "usr_uid_key" UNIQUE using index "usr_uid_key"; - -set check_function_bodies = off; - -CREATE OR REPLACE FUNCTION public.do_insert_community_perm() - RETURNS trigger - LANGUAGE plpgsql -AS $function$ -begin - -- TODO: insert some default community groups, use community_XX_admin as group owner - - insert into public.perm - (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) - values - ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/posts', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') - , ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/tag', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') - , ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/deleted', (public.get_acting_usr()).id, NEW.id, 'w', 'w', '-') - ; - - return new; -end; -$function$ -; - -CREATE OR REPLACE FUNCTION public.do_insert_grp_perm() - RETURNS trigger - LANGUAGE plpgsql -AS $function$ -begin - insert into public.perm - (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) - values - ('/groups/' || human_uuid.huid_to_string(NEW.uid) || '/members', (public.get_acting_usr()).id, NEW.id, 'w', 'w', '-') - , ('/groups/' || human_uuid.huid_to_string(NEW.uid) || '/tag', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') - ; - - return new; -end; -$function$ -; - -CREATE OR REPLACE FUNCTION public.do_insert_usr_perm() - RETURNS trigger - LANGUAGE plpgsql -AS $function$ -declare - admins int; -begin - admins := (public.grp_admins()).id; - - insert into public.perm - (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) - values - ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/tag', NEW.id, admins, 'w', 'w', 'r') - , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/email', NEW.id, admins, 'w', 'w', '-') - , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/deleted', NEW.id, admins, 'w', 'w', '-') - , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/password', NEW.id, admins, 'w', 'w', '-') - ; - - return new; -end; -$function$ -; - -CREATE OR REPLACE FUNCTION public.do_usr_create_default_grp() - RETURNS trigger - LANGUAGE plpgsql -AS $function$ -declare - new_grp int; -begin - insert into public.grp (tag) - values (grp_tag_of_string('usr_' || new.uid)) - returning id into new_grp; - - perform public.grp_add_member(to_grp => new_grp, add_usr => new.id); - - update public.perm - set owner_user = (public.usr_root()).id - , owner_group = (public.grp_admins()).id - where path = '/groups/' || new_grp || '/members' - or path = '/groups/' || new_grp || '/tag'; - - return null; -end; -$function$ -; - -CREATE OR REPLACE FUNCTION public.get_acting_usr() - RETURNS usr - LANGUAGE plpgsql -AS $function$ -declare - uid text; - acting_usr public.usr; -begin - if nullif(current_setting('dnim.usr_uid', true), '') is null then - acting_usr := public.usr_root(); - else - select u.* - from public.usr u - where u.uid = human_uuid.huid_of_string(current_setting('dnim.usr_uid', true)) - into acting_usr; - end if; - - return acting_usr; -end; -$function$ -; - - diff --git a/migrations/devel@8b08d9f_to_devel@0.0.8.sql b/migrations/devel@8b08d9f_to_devel@0.0.8.sql new file mode 100644 index 0000000..f468055 --- /dev/null +++ b/migrations/devel@8b08d9f_to_devel@0.0.8.sql @@ -0,0 +1,4813 @@ +create schema if not exists "human_uuid"; + +create table "human_uuid"."object" ( + "id" integer generated always as identity not null, + "word" text +); + + +create table "human_uuid"."predicate" ( + "id" integer generated always as identity not null, + "word" text +); + + +create table "human_uuid"."used" ( + "huid" text not null +); + + +create type "human_uuid"."huid" as ("str" text); + +CREATE OR REPLACE FUNCTION human_uuid.huid() + RETURNS human_uuid.huid + LANGUAGE plpgsql +AS $function$ +declare + tries int := 0; + uniq bool := false; + uuid bytea; + uuid_bits int[] := array[] :: int[]; + pred_1_int int; + pred_2_int int; + pred_3_int int; + object_int int; + pred_1 text; + pred_2 text; + pred_3 text; + object text; + huid_text text; +begin + while not uniq loop + if tries > 1000 then + raise exception 'failed to find uniq huid after 1000 attempts'; + end if; + + tries := tries + 1; + + uuid := decode(replace(gen_random_uuid() :: text, '-', ''), 'hex'); + for b in 0..(bit_length(uuid) - 1) loop + uuid_bits := uuid_bits || get_bit(uuid, b); + end loop; + + pred_1_int := (lpad(array_to_string(uuid_bits[1:10], ''), 32, '0') :: bit(32)) :: int; + pred_1_int := pred_1_int + (lpad(array_to_string(uuid_bits[11:14], ''), 32, '0') :: bit(32)) :: int; + + pred_2_int := (lpad(array_to_string(uuid_bits[15:24], ''), 32, '0') :: bit(32)) :: int; + pred_2_int := pred_2_int + (lpad(array_to_string(uuid_bits[25:27], ''), 32, '0') :: bit(32)) :: int; + + pred_3_int := (lpad(array_to_string(uuid_bits[28:37], ''), 32, '0') :: bit(32)) :: int; + pred_3_int := pred_3_int + (lpad(array_to_string(uuid_bits[38:40], ''), 32, '0') :: bit(32)) :: int; + + object_int := (lpad(array_to_string(uuid_bits[41:51], ''), 32, '0') :: bit(32)) :: int; + + select word from human_uuid.predicate where id = pred_1_int into pred_1; + select word from human_uuid.predicate where id = pred_2_int into pred_2; + select word from human_uuid.predicate where id = pred_3_int into pred_3; + select word from human_uuid.object where id = object_int into object; + + huid_text := pred_1 || '-' || pred_2 || '-' || pred_3 || '-' || object; + + uniq := (select count(*) from human_uuid.used where huid = huid_text) = 0; + end loop; + + return human_uuid.huid_of_string(huid_text); +end; +$function$ +; + +CREATE OR REPLACE FUNCTION human_uuid.huid_of_string(val text) + RETURNS human_uuid.huid + LANGUAGE sql +AS $function$select row(val);$function$ +; + +CREATE OR REPLACE FUNCTION human_uuid.huid_to_string(val human_uuid.huid) + RETURNS text + LANGUAGE sql +AS $function$select (val.str);$function$ +; + +-- OBJECTS >> +insert into human_uuid.object (word) +values + ('aardvark') + , ('aardwolf') + , ('abacus') + , ('abrosaurus') + , ('abstract') + , ('acai') + , ('acapella') + , ('accelerator') + , ('accordion') + , ('account') + , ('achillobator') + , ('acorn') + , ('acoustic') + , ('acrylic') + , ('act') + , ('action') + , ('activity') + , ('actress') + , ('adapter') + , ('adasaurus') + , ('addition') + , ('address') + , ('adjustment') + , ('advantage') + , ('adverb') + , ('aerosteon') + , ('afrovenator') + , ('aftermath') + , ('afternoon') + , ('aftershave') + , ('afterthought') + , ('agate') + , ('age') + , ('agenda') + , ('agreement') + , ('agustinia') + , ('air') + , ('airboat') + , ('airbus') + , ('airedale') + , ('airmail') + , ('airplane') + , ('airport') + , ('airship') + , ('akubra') + , ('alamosaurus') + , ('alarm') + , ('albacore') + , ('albatross') + , ('albertonykus') + , ('albertosaurus') + , ('alder') + , ('aletopelta') + , ('alfalfa') + , ('algebra') + , ('alibi') + , ('alley') + , ('alligator') + , ('allium') + , ('allosaurus') + , ('alloy') + , ('allspice') + , ('almanac') + , ('almandine') + , ('almond') + , ('alpaca') + , ('alphabet') + , ('alto') + , ('aluminum') + , ('alvarezsaurus') + , ('alyssum') + , ('amaranthus') + , ('amaryllis') + , ('amazonsaurus') + , ('ambert') + , ('ambulance') + , ('amethyst') + , ('amount') + , ('amp') + , ('ampersand') + , ('amphibian') + , ('amusement') + , ('anaconda') + , ('anatosaurus') + , ('anchovy') + , ('ancient') + , ('andesaurus') + , ('anemone') + , ('angelfish') + , ('anger') + , ('angle') + , ('anglerfish') + , ('angolatitan') + , ('angora') + , ('animal') + , ('animantarx') + , ('anise') + , ('ankle') + , ('ankylosaurus') + , ('anorak') + , ('answer') + , ('ant') + , ('antarctopelta') + , ('anteater') + , ('antelope') + , ('anthropology') + , ('antimatter') + , ('antimony') + , ('antique') + , ('antler') + , ('antlion') + , ('apartment') + , ('apatosaurus') + , ('aphid') + , ('apogee') + , ('apology') + , ('appalachiosaurus') + , ('apparatus') + , ('apparel') + , ('appeal') + , ('appendix') + , ('apple') + , ('appliance') + , ('approach') + , ('approval') + , ('apricot') + , ('aquarius') + , ('aragon') + , ('aragosaurus') + , ('arch') + , ('archaeology') + , ('archaeopteryx') + , ('archduchess') + , ('archduke') + , ('archeology') + , ('archer') + , ('area') + , ('argon') + , ('argument') + , ('aries') + , ('aristosuchus') + , ('arithmetic') + , ('armadillo') + , ('armchair') + , ('army') + , ('arrhinceratops') + , ('arrow') + , ('art') + , ('arthropod') + , ('artichoke') + , ('article') + , ('ash') + , ('asiago') + , ('asp') + , ('asparagus') + , ('aspen') + , ('asphalt') + , ('aster') + , ('asterisk') + , ('asteroid') + , ('astrodon') + , ('astronaut') + , ('astronomy') + , ('athlete') + , ('atlasaurus') + , ('atmosphere') + , ('atom') + , ('atrociraptor') + , ('attack') + , ('attempt') + , ('attention') + , ('attic') + , ('attraction') + , ('august') + , ('aura') + , ('aurora') + , ('auroraceratops') + , ('author') + , ('authority') + , ('authorization') + , ('avatar') + , ('avenue') + , ('avocado') + , ('awe') + , ('axolotl') + , ('azalea') + , ('azimuth') + , ('babcat') + , ('baboon') + , ('backbone') + , ('background') + , ('backpack') + , ('bactrosaurus') + , ('badge') + , ('badger') + , ('bag') + , ('bagel') + , ('bagpipe') + , ('bait') + , ('bakery') + , ('balance') + , ('balaur') + , ('ball') + , ('ballcap') + , ('balloon') + , ('balmoral') + , ('bambiraptor') + , ('bamboo') + , ('banana') + , ('band') + , ('bandana') + , ('bandicoot') + , ('bangle') + , ('banjo') + , ('bank') + , ('bar') + , ('barbecue') + , ('barber') + , ('barberry') + , ('bard') + , ('barge') + , ('baritone') + , ('barn') + , ('barnacle') + , ('barnyard') + , ('barometer') + , ('baron') + , ('baroness') + , ('barracuda') + , ('baryonyx') + , ('baseball') + , ('basement') + , ('basil') + , ('basilisk') + , ('basin') + , ('basket') + , ('basketball') + , ('bass') + , ('bassoon') + , ('bat') + , ('bath') + , ('bathroom') + , ('bathtub') + , ('battery') + , ('bay') + , ('bayberry') + , ('beach') + , ('bead') + , ('beak') + , ('beam') + , ('bean') + , ('beanie') + , ('bear') + , ('bearberry') + , ('beard') + , ('bearskin') + , ('beast') + , ('beat') + , ('beaufort') + , ('beauty') + , ('becklespinax') + , ('bed') + , ('bedbug') + , ('bee') + , ('beech') + , ('beechnut') + , ('beet') + , ('beetle') + , ('beginner') + , ('begonia') + , ('behavior') + , ('belief') + , ('bell') + , ('bellflower') + , ('bellusaurus') + , ('belt') + , ('beluga') + , ('bench') + , ('beret') + , ('bergamot') + , ('berry') + , ('beryllium') + , ('bestseller') + , ('bicycle') + , ('bike') + , ('bill') + , ('billboard') + , ('binder') + , ('biology') + , ('biplane') + , ('birch') + , ('bird') + , ('birthday') + , ('bismuth') + , ('bison') + , ('bistro') + , ('bit') + , ('bite') + , ('bittersweet') + , ('blackberry') + , ('blackbird') + , ('blackcurrant') + , ('bladder') + , ('blade') + , ('blanket') + , ('blarney') + , ('blender') + , ('blinker') + , ('blizzard') + , ('block') + , ('bloom') + , ('blossom') + , ('blouse') + , ('blue') + , ('bluebell') + , ('boa') + , ('boar') + , ('board') + , ('boat') + , ('boater') + , ('bobble') + , ('bobcat') + , ('bobolink') + , ('bolt') + , ('bongo') + , ('bonnet') + , ('bonobo') + , ('bonsai') + , ('book') + , ('bookcase') + , ('booklet') + , ('boot') + , ('booth') + , ('border') + , ('borogovia') + , ('boron') + , ('bosworth') + , ('botany') + , ('bottle') + , ('bottom') + , ('bougon') + , ('bounce') + , ('boursin') + , ('bow') + , ('bowl') + , ('bowler') + , ('box') + , ('boysenberry') + , ('brace') + , ('brachiosaurus') + , ('bracket') + , ('braid') + , ('brain') + , ('brake') + , ('bramble') + , ('branch') + , ('brand') + , ('brass') + , ('brazil') + , ('bread') + , ('breadfruit') + , ('break') + , ('breakfast') + , ('bream') + , ('breath') + , ('breeze') + , ('brick') + , ('bridge') + , ('brie') + , ('brisket') + , ('broccoli') + , ('brochure') + , ('broker') + , ('bromine') + , ('brontomerus') + , ('bronze') + , ('brook') + , ('broom') + , ('brother') + , ('brow') + , ('brownie') + , ('browser') + , ('brush') + , ('bubble') + , ('bubbler') + , ('buckaroo') + , ('bucket') + , ('buckthorn') + , ('buckthornpepperberry') + , ('budget') + , ('buffalo') + , ('buffer') + , ('buffet') + , ('bug') + , ('bugle') + , ('building') + , ('bulb') + , ('bumper') + , ('bun') + , ('burglar') + , ('burn') + , ('burrito') + , ('burst') + , ('bus') + , ('butter') + , ('buttercup') + , ('butterfly') + , ('butterkase') + , ('butternut') + , ('button') + , ('buzzard') + , ('cabbage') + , ('cabin') + , ('cabinet') + , ('cacao') + , ('cactus') + , ('cadet') + , ('cadmium') + , ('cafe') + , ('cairnsmore') + , ('cake') + , ('calcium') + , ('calculator') + , ('calendula') + , ('calf') + , ('calliandra') + , ('camel') + , ('camelotia') + , ('camera') + , ('camp') + , ('can') + , ('canary') + , ('candle') + , ('candy') + , ('candytuft') + , ('canidae') + , ('cannon') + , ('canoe') + , ('canopy') + , ('cantaloupe') + , ('canvas') + , ('cap') + , ('capacity') + , ('caper') + , ('cappelletti') + , ('capri') + , ('capricorn') + , ('captain') + , ('caption') + , ('capybara') + , ('car') + , ('caravan') + , ('caravel') + , ('caraway') + , ('carbon') + , ('card') + , ('cardamom') + , ('cardboard') + , ('cardigan') + , ('cardinal') + , ('care') + , ('caribou') + , ('carnation') + , ('carob') + , ('carol') + , ('carp') + , ('carpenter') + , ('carpet') + , ('carriage') + , ('carrot') + , ('cart') + , ('cartoon') + , ('cartwheel') + , ('carver') + , ('case') + , ('cashew') + , ('casquette') + , ('cast') + , ('castanet') + , ('cat') + , ('catamaran') + , ('catboat') + , ('catcher') + , ('caterpillar') + , ('catfish') + , ('cathedral') + , ('catmint') + , ('catshark') + , ('catsup') + , ('cattle') + , ('cauliflower') + , ('cause') + , ('caution') + , ('cave') + , ('cayenne') + , ('ceder') + , ('ceiling') + , ('celery') + , ('celestite') + , ('cell') + , ('cellar') + , ('cello') + , ('celsius') + , ('cement') + , ('cemetery') + , ('cent') + , ('centaur') + , ('centipede') + , ('century') + , ('cephalopod') + , ('ceramic') + , ('ceratonykus') + , ('cereal') + , ('cerise') + , ('cesium') + , ('chair') + , ('chalk') + , ('challenge') + , ('chameleon') + , ('chamomile') + , ('chance') + , ('change') + , ('channel') + , ('chanter') + , ('character') + , ('charger') + , ('chartreuse') + , ('chasmosaurus') + , ('chatter') + , ('chauffeur') + , ('check') + , ('cheddar') + , ('cheek') + , ('cheese') + , ('cheetah') + , ('chef') + , ('chemistry') + , ('cheque') + , ('cherry') + , ('cheshire') + , ('chess') + , ('chestnut') + , ('chevre') + , ('chickadee') + , ('chicken') + , ('chicory') + , ('child') + , ('chili') + , ('chill') + , ('chiller') + , ('chime') + , ('chimpanzee') + , ('chinchilla') + , ('chip') + , ('chipmunk') + , ('chips') + , ('chive') + , ('chocolate') + , ('chokeberry') + , ('chopper') + , ('chord') + , ('christmas') + , ('chronometer') + , ('chrysanthemum') + , ('chungkingosaurus') + , ('church') + , ('cicada') + , ('cilantro') + , ('cinema') + , ('cinnamon') + , ('circle') + , ('circus') + , ('cirrus') + , ('citipati') + , ('citizen') + , ('citrine') + , ('citron') + , ('citrus') + , ('city') + , ('clam') + , ('clarinet') + , ('class') + , ('clave') + , ('clavicle') + , ('clef') + , ('clematis') + , ('clementine') + , ('click') + , ('client') + , ('climb') + , ('clipper') + , ('cloak') + , ('cloche') + , ('clock') + , ('close') + , ('closet') + , ('cloth') + , ('cloud') + , ('cloudberry') + , ('clove') + , ('clover') + , ('clownfish') + , ('club') + , ('clutch') + , ('coal') + , ('coast') + , ('coaster') + , ('coat') + , ('cobalt') + , ('cobbler') + , ('cobra') + , ('cobweb') + , ('cockatoo') + , ('cockroach') + , ('cocoa') + , ('coconut') + , ('cod') + , ('coelurus') + , ('coffee') + , ('coil') + , ('coin') + , ('colby') + , ('cold') + , ('collar') + , ('collarbone') + , ('collard') + , ('college') + , ('collision') + , ('colony') + , ('color') + , ('colossus') + , ('colt') + , ('column') + , ('columnist') + , ('comb') + , ('comet') + , ('comfort') + , ('comic') + , ('comma') + , ('composer') + , ('computer') + , ('comte') + , ('concavenator') + , ('conchoraptor') + , ('concrete') + , ('condition') + , ('condor') + , ('condorraptor') + , ('cone') + , ('coneflower') + , ('confidence') + , ('conga') + , ('congress') + , ('conifer') + , ('conkerberry') + , ('consonant') + , ('constellation') + , ('constrictor') + , ('continent') + , ('contraption') + , ('cook') + , ('cookie') + , ('copper') + , ('copy') + , ('coral') + , ('cord') + , ('coreopsis') + , ('coriander') + , ('cork') + , ('corleggy') + , ('cormorant') + , ('corn') + , ('cornet') + , ('cornflower') + , ('cornucopia') + , ('cosmonaut') + , ('cosmos') + , ('cost') + , ('cotija') + , ('cotton') + , ('couch') + , ('cougar') + , ('cough') + , ('count') + , ('countess') + , ('country') + , ('course') + , ('court') + , ('cousin') + , ('cover') + , ('cow') + , ('cowbell') + , ('cowl') + , ('coyote') + , ('crab') + , ('crabapple') + , ('crafter') + , ('crane') + , ('crate') + , ('crater') + , ('crawdad') + , ('crayfish') + , ('crayon') + , ('creator') + , ('creature') + , ('credit') + , ('creek') + , ('crepe') + , ('cress') + , ('crest') + , ('crib') + , ('cricket') + , ('crime') + , ('crocodile') + , ('crocus') + , ('croissant') + , ('crop') + , ('cross') + , ('crow') + , ('crowberry') + , ('crowd') + , ('crowley') + , ('crown') + , ('cruiser') + , ('crustacean') + , ('cry') + , ('crystal') + , ('cub') + , ('cuckoo') + , ('cucumber') + , ('culotte') + , ('cup') + , ('cupboard') + , ('cupcake') + , ('curiosity') + , ('curler') + , ('currant') + , ('currency') + , ('curtain') + , ('curve') + , ('cushion') + , ('custard') + , ('cut') + , ('cuticle') + , ('cyclamen') + , ('cycle') + , ('cyclone') + , ('cylinder') + , ('cymbal') + , ('daemonosaurus') + , ('daffodil') + , ('dahlia') + , ('damselfly') + , ('dance') + , ('dancer') + , ('dandelion') + , ('danger') + , ('danthus') + , ('daphne') + , ('darkness') + , ('dart') + , ('dash') + , ('data') + , ('dataset') + , ('date') + , ('daughter') + , ('dawn') + , ('day') + , ('dead') + , ('deal') + , ('debt') + , ('decade') + , ('decimal') + , ('decision') + , ('dedication') + , ('deer') + , ('deerstalker') + , ('degree') + , ('delivery') + , ('delphinium') + , ('deltadromeus') + , ('den') + , ('denim') + , ('dentist') + , ('department') + , ('deposit') + , ('derby') + , ('desert') + , ('desk') + , ('dessert') + , ('detail') + , ('detective') + , ('device') + , ('devourer') + , ('dew') + , ('dewberry') + , ('diabloceratops') + , ('diadem') + , ('diagnostic') + , ('diagram') + , ('diamond') + , ('dianella') + , ('diascia') + , ('dibble') + , ('dichondra') + , ('dietician') + , ('digestion') + , ('digit') + , ('dill') + , ('dilophosaurus') + , ('dime') + , ('dimple') + , ('dinghy') + , ('dinner') + , ('dinosaur') + , ('diplodocus') + , ('diploma') + , ('direction') + , ('dirigible') + , ('dirt') + , ('discovery') + , ('dish') + , ('distance') + , ('ditto') + , ('dive') + , ('diver') + , ('dog') + , ('dogsled') + , ('dogwood') + , ('dollar') + , ('dolomite') + , ('dolphin') + , ('domain') + , ('donkey') + , ('donut') + , ('doom') + , ('door') + , ('doppler') + , ('dormouse') + , ('double') + , ('dove') + , ('dracopelta') + , ('dracorex') + , ('dragon') + , ('dragonfly') + , ('dragonfruit') + , ('drain') + , ('draw') + , ('drawbridge') + , ('drawer') + , ('dreadnought') + , ('dream') + , ('dress') + , ('dresser') + , ('drifter') + , ('drill') + , ('drink') + , ('drip') + , ('drive') + , ('driver') + , ('drizzle') + , ('drop') + , ('droplet') + , ('drum') + , ('dry') + , ('dryer') + , ('dryosaurus') + , ('duchess') + , ('duck') + , ('duckling') + , ('dugong') + , ('dugout') + , ('duke') + , ('dumpling') + , ('dungeon') + , ('durian') + , ('dust') + , ('dye') + , ('eagle') + , ('ear') + , ('earl') + , ('earth') + , ('earthquake') + , ('earthworm') + , ('earwig') + , ('ease') + , ('echidna') + , ('echinacea') + , ('echinodon') + , ('echium') + , ('echo') + , ('eclipse') + , ('edam') + , ('edge') + , ('editor') + , ('editorial') + , ('education') + , ('eel') + , ('effect') + , ('efraasia') + , ('egg') + , ('eggnog') + , ('eggplant') + , ('elbow') + , ('elderberry') + , ('element') + , ('elephant') + , ('elf') + , ('elk') + , ('ellipse') + , ('elm') + , ('emmental') + , ('emoji') + , ('emperor') + , ('empress') + , ('emu') + , ('end') + , ('enemy') + , ('energy') + , ('engine') + , ('engineer') + , ('english') + , ('enigmosaurus') + , ('enquiry') + , ('enthusiasm') + , ('entrance') + , ('entree') + , ('environment') + , ('eocursor') + , ('eoraptor') + , ('epoch') + , ('epoxy') + , ('equinox') + , ('equipment') + , ('era') + , ('erigeron') + , ('ermine') + , ('error') + , ('espadrille') + , ('estimate') + , ('ethernet') + , ('eucalyptus') + , ('euphonium') + , ('eustoma') + , ('evening') + , ('event') + , ('evergreen') + , ('exception') + , ('exhaust') + , ('existence') + , ('exoplanet') + , ('expansion') + , ('experience') + , ('expert') + , ('explanation') + , ('eye') + , ('eyebrow') + , ('eyelash') + , ('eyeliner') + , ('fabrosaurus') + , ('face') + , ('fact') + , ('factory') + , ('fahrenheit') + , ('failing') + , ('falcon') + , ('fall') + , ('family') + , ('fan') + , ('fanatic') + , ('fang') + , ('farm') + , ('farmer') + , ('farmhouse') + , ('fascinator') + , ('fastball') + , ('father') + , ('faucet') + , ('fear') + , ('feast') + , ('feather') + , ('fedora') + , ('feeling') + , ('feels') + , ('feet') + , ('felidae') + , ('femur') + , ('fender') + , ('fennel') + , ('fenugreek') + , ('fern') + , ('fernleaf') + , ('ferret') + , ('ferry') + , ('ferryboat') + , ('feta') + , ('feverfew') + , ('fiber') + , ('fibre') + , ('fibula') + , ('fiction') + , ('field') + , ('fifth') + , ('fig') + , ('fight') + , ('fighter') + , ('figure') + , ('filament') + , ('file') + , ('fin') + , ('finch') + , ('find') + , ('fine') + , ('fir') + , ('fire') + , ('firefly') + , ('fireman') + , ('fireplace') + , ('fireplant') + , ('firewall') + , ('fish') + , ('fisher') + , ('fisherman') + , ('flag') + , ('flame') + , ('flamingo') + , ('flannel') + , ('flare') + , ('flat') + , ('flavor') + , ('flax') + , ('flea') + , ('flier') + , ('flight') + , ('flock') + , ('flood') + , ('floor') + , ('floss') + , ('flower') + , ('fluorine') + , ('flute') + , ('fly') + , ('flyaway') + , ('flyingfish') + , ('foam') + , ('foe') + , ('fog') + , ('fold') + , ('fontina') + , ('food') + , ('football') + , ('force') + , ('forecast') + , ('forest') + , ('forger') + , ('forgery') + , ('fork') + , ('form') + , ('forsythia') + , ('fortnight') + , ('foundation') + , ('fountain') + , ('fowl') + , ('fox') + , ('foxglove') + , ('foxtail') + , ('foxtrot') + , ('fragment') + , ('fragrance') + , ('frame') + , ('freckle') + , ('freedom') + , ('freesia') + , ('freeze') + , ('freezer') + , ('freighter') + , ('freon') + , ('friction') + , ('friday') + , ('fridge') + , ('friend') + , ('frigate') + , ('fright') + , ('frill') + , ('frog') + , ('front') + , ('frost') + , ('frown') + , ('fruit') + , ('fruitadens') + , ('fuchsia') + , ('fuel') + , ('fukuiraptor') + , ('function') + , ('fur') + , ('furniture') + , ('gadget') + , ('galaxy') + , ('galette') + , ('galleon') + , ('galley') + , ('galliform') + , ('gallimimus') + , ('gallium') + , ('gallon') + , ('gambler') + , ('game') + , ('gander') + , ('garage') + , ('garden') + , ('gardenia') + , ('gargoyle') + , ('gargoyleosaurus') + , ('garlic') + , ('garment') + , ('garnet') + , ('gas') + , ('gasoline') + , ('gasosaurus') + , ('gastonia') + , ('gate') + , ('gateway') + , ('gatsby') + , ('gauge') + , ('gazelle') + , ('gear') + , ('gecko') + , ('geese') + , ('gem') + , ('gemini') + , ('general') + , ('generation') + , ('geography') + , ('geology') + , ('geometry') + , ('geranium') + , ('gerbera') + , ('gerbil') + , ('germanium') + , ('ghost') + , ('ghoul') + , ('giant') + , ('gibbon') + , ('giganotosaurus') + , ('gigantoraptor') + , ('gigantspinosaurus') + , ('gilmoreosaurus') + , ('ginger') + , ('giraffatitan') + , ('giraffe') + , ('girdle') + , ('giver') + , ('glade') + , ('gladiolus') + , ('glass') + , ('glasses') + , ('glazer') + , ('glider') + , ('glitter') + , ('globe') + , ('globeflower') + , ('glockenspiel') + , ('glove') + , ('glow') + , ('glue') + , ('goal') + , ('gojirasaurus') + , ('gold') + , ('goldenrod') + , ('goldfish') + , ('golf') + , ('gondola') + , ('gong') + , ('gooseberry') + , ('gopher') + , ('gorgonzola') + , ('gorilla') + , ('gosling') + , ('gouda') + , ('gourd') + , ('governor') + , ('grade') + , ('graffiti') + , ('grain') + , ('gram') + , ('grandiflora') + , ('grandparent') + , ('grape') + , ('grapple') + , ('grass') + , ('grasshopper') + , ('gravity') + , ('gray') + , ('grease') + , ('green') + , ('grenadilla') + , ('grey') + , ('griffin') + , ('grill') + , ('grin') + , ('grip') + , ('ground') + , ('group') + , ('grouse') + , ('growth') + , ('gruyere') + , ('guan') + , ('guanaco') + , ('guarantee') + , ('guardian') + , ('guava') + , ('guavaberry') + , ('guest') + , ('guide') + , ('guilty') + , ('guitar') + , ('gull') + , ('gum') + , ('guppy') + , ('gym') + , ('gymnast') + , ('hacksaw') + , ('haddock') + , ('hadrosaurus') + , ('hail') + , ('hair') + , ('haircut') + , ('halibut') + , ('hall') + , ('halloumi') + , ('hallway') + , ('hamburger') + , ('hammer') + , ('hamster') + , ('handball') + , ('handbell') + , ('handle') + , ('handsaw') + , ('handspring') + , ('handstand') + , ('harbor') + , ('hardboard') + , ('hardcover') + , ('hardhat') + , ('hardware') + , ('hare') + , ('harmonica') + , ('harmony') + , ('harp') + , ('harpymimus') + , ('harrier') + , ('hat') + , ('haumea') + , ('havarti') + , ('hawk') + , ('hawthorn') + , ('haze') + , ('headlight') + , ('headline') + , ('headphones') + , ('headstand') + , ('healer') + , ('health') + , ('hearing') + , ('heart') + , ('heat') + , ('heath') + , ('heather') + , ('heaven') + , ('hedge') + , ('hedgehog') + , ('height') + , ('helenium') + , ('helicona') + , ('helicopter') + , ('heliotrope') + , ('helium') + , ('hellebore') + , ('helmet') + , ('help') + , ('helper') + , ('hemisphere') + , ('hen') + , ('henley') + , ('hero') + , ('heron') + , ('herring') + , ('hexagon') + , ('hibiscus') + , ('hickory') + , ('hide') + , ('hill') + , ('hip') + , ('hippodraco') + , ('hippopotamus') + , ('hiss') + , ('hisser') + , ('hockey') + , ('holiday') + , ('hollyhock') + , ('homburg') + , ('homegrown') + , ('honesty') + , ('honey') + , ('honeycrisp') + , ('honeycup') + , ('honeydew') + , ('honeysuckle') + , ('hoodie') + , ('hoof') + , ('hook') + , ('hope') + , ('horesradish') + , ('hornet') + , ('horse') + , ('hortensia') + , ('hose') + , ('hospital') + , ('hosta') + , ('hotel') + , ('hound') + , ('hour') + , ('hourglass') + , ('house') + , ('houseboat') + , ('hovercraft') + , ('hoverfly') + , ('howler') + , ('hub') + , ('hubcap') + , ('huckleberry') + , ('hugger') + , ('humerus') + , ('humidity') + , ('hummingbird') + , ('humor') + , ('hunter') + , ('hurricane') + , ('hyacinth') + , ('hydrangea') + , ('hydrant') + , ('hydrofoil') + , ('hydrogen') + , ('hyena') + , ('hygienic') + , ('hyphen') + , ('hyssop') + , ('iberis') + , ('ice') + , ('iceberg') + , ('icebreaker') + , ('icecream') + , ('icicle') + , ('icon') + , ('idea') + , ('iguana') + , ('iguanacolossus') + , ('iguanadon') + , ('iguanodon') + , ('impala') + , ('impatiens') + , ('impulse') + , ('income') + , ('increase') + , ('index') + , ('indigo') + , ('individual') + , ('industry') + , ('infinity') + , ('ink') + , ('innocent') + , ('innovation') + , ('insect') + , ('inspiration') + , ('intelligence') + , ('interest') + , ('iodine') + , ('iridium') + , ('iris') + , ('iron') + , ('ironclad') + , ('island') + , ('isthmus') + , ('ixia') + , ('jaborosa') + , ('jackal') + , ('jacket') + , ('jackfruit') + , ('jackrabbit') + , ('jaguar') + , ('jam') + , ('jar') + , ('jargon') + , ('jasmine') + , ('jasper') + , ('jaw') + , ('jaxartosaurus') + , ('jay') + , ('jeans') + , ('jeep') + , ('jellyfish') + , ('jersey') + , ('jester') + , ('jet') + , ('jingle') + , ('jitterbug') + , ('jobaria') + , ('jodhpur') + , ('joggers') + , ('join') + , ('joke') + , ('jonquil') + , ('journey') + , ('judge') + , ('judo') + , ('juice') + , ('jujube') + , ('jump') + , ('jumper') + , ('jumpsuit') + , ('juniper') + , ('jupiter') + , ('juravenator') + , ('jury') + , ('justice') + , ('jute') + , ('kangaroo') + , ('kayak') + , ('keeper') + , ('ketch') + , ('ketchup') + , ('kettle') + , ('kettledrum') + , ('key') + , ('keyboard') + , ('kick') + , ('kicker') + , ('kidney') + , ('kileskus') + , ('kilogram') + , ('kilometer') + , ('king') + , ('kingfisher') + , ('kip') + , ('kitchen') + , ('kite') + , ('kitten') + , ('kiwi') + , ('knee') + , ('knife') + , ('knight') + , ('knot') + , ('knuckle') + , ('koala') + , ('koi') + , ('kookaburra') + , ('kosmoceratops') + , ('krill') + , ('krypton') + , ('kryptops') + , ('kumquat') + , ('laborer') + , ('lace') + , ('ladybug') + , ('lake') + , ('lamb') + , ('lamp') + , ('lamprey') + , ('lan') + , ('lancer') + , ('land') + , ('language') + , ('lantana') + , ('lantern') + , ('larch') + , ('lark') + , ('larkspur') + , ('lasagna') + , ('laser') + , ('latency') + , ('lathe') + , ('laugh') + , ('launch') + , ('laundry') + , ('lavender') + , ('law') + , ('lawyer') + , ('layer') + , ('lead') + , ('leader') + , ('leaf') + , ('learning') + , ('leather') + , ('leech') + , ('leek') + , ('legal') + , ('legend') + , ('legume') + , ('lemming') + , ('lemon') + , ('lemonade') + , ('lemongrass') + , ('lemur') + , ('lens') + , ('lentil') + , ('leo') + , ('leopard') + , ('leopon') + , ('leotard') + , ('leptoceratops') + , ('letter') + , ('lettuce') + , ('level') + , ('lever') + , ('libra') + , ('library') + , ('license') + , ('licorice') + , ('lifeboat') + , ('lift') + , ('lifter') + , ('light') + , ('lighter') + , ('lightning') + , ('lightyear') + , ('lilac') + , ('lillipilli') + , ('limburger') + , ('lime') + , ('limit') + , ('limpet') + , ('line') + , ('linen') + , ('lingo') + , ('lingonberry') + , ('link') + , ('linseed') + , ('lint') + , ('lion') + , ('lip') + , ('lipstick') + , ('liquid') + , ('list') + , ('literature') + , ('litter') + , ('liver') + , ('lizard') + , ('llama') + , ('loaf') + , ('loan') + , ('lobe') + , ('lobster') + , ('lock') + , ('locket') + , ('locust') + , ('lodge') + , ('log') + , ('loganberry') + , ('logic') + , ('longan') + , ('longship') + , ('look') + , ('lotus') + , ('louse') + , ('lumber') + , ('lunaria') + , ('lunch') + , ('lung') + , ('lunge') + , ('lungfish') + , ('lupin') + , ('lute') + , ('lychee') + , ('lycra') + , ('lynx') + , ('lyre') + , ('lyric') + , ('macadamia') + , ('macaroni') + , ('macaroon') + , ('macaw') + , ('machine') + , ('mackerel') + , ('macrame') + , ('magazine') + , ('magic') + , ('magician') + , ('magnesium') + , ('magnolia') + , ('magnosaurus') + , ('magpie') + , ('mahogany') + , ('maiasaura') + , ('mail') + , ('mailbox') + , ('mailman') + , ('maize') + , ('makemake') + , ('makeup') + , ('mall') + , ('mallet') + , ('mallow') + , ('mambo') + , ('mammal') + , ('manager') + , ('manatee') + , ('manchego') + , ('mandarin') + , ('mandevilla') + , ('mandible') + , ('mandolin') + , ('mandrill') + , ('mango') + , ('mangosteen') + , ('manicure') + , ('manner') + , ('manta') + , ('mantis') + , ('manuscript') + , ('manx') + , ('map') + , ('maple') + , ('mapusaurus') + , ('maraca') + , ('marble') + , ('march') + , ('mare') + , ('margin') + , ('marigold') + , ('marimba') + , ('marionberry') + , ('marjoram') + , ('market') + , ('marlin') + , ('marmoset') + , ('marmot') + , ('marquess') + , ('marquis') + , ('mars') + , ('marscapone') + , ('marshmallow') + , ('marsupial') + , ('marten') + , ('mascara') + , ('mask') + , ('mass') + , ('mastodon') + , ('mat') + , ('match') + , ('math') + , ('matrix') + , ('maxilla') + , ('may') + , ('mayflower') + , ('mayonnaise') + , ('meadow') + , ('meadowlark') + , ('meal') + , ('measure') + , ('meat') + , ('mechanic') + , ('medallion') + , ('medicine') + , ('medusaceratops') + , ('meerkat') + , ('meeting') + , ('megalosaurus') + , ('megaraptor') + , ('melody') + , ('melon') + , ('memory') + , ('menu') + , ('mercury') + , ('message') + , ('metacarpal') + , ('metal') + , ('metatarsal') + , ('meteor') + , ('meteorite') + , ('meteoroid') + , ('meteorology') + , ('meter') + , ('methane') + , ('mice') + , ('microceratops') + , ('microraptor') + , ('microwave') + , ('middle') + , ('midnight') + , ('mile') + , ('milk') + , ('milkshake') + , ('millennium') + , ('mimosa') + , ('mind') + , ('mine') + , ('minibus') + , ('mink') + , ('minnow') + , ('minotaurasaurus') + , ('mint') + , ('minute') + , ('mirror') + , ('mist') + , ('mistake') + , ('mitten') + , ('mixer') + , ('mixture') + , ('moat') + , ('mochi') + , ('mockingbird') + , ('modem') + , ('mojoceratops') + , ('molasses') + , ('mole') + , ('molecule') + , ('mollusk') + , ('molybdenum') + , ('monarch') + , ('monday') + , ('money') + , ('mongoose') + , ('monitor') + , ('monkey') + , ('month') + , ('mood') + , ('moon') + , ('moonflower') + , ('moonstone') + , ('moose') + , ('moral') + , ('morning') + , ('morocco') + , ('mortarboard') + , ('mosquito') + , ('moss') + , ('moth') + , ('motion') + , ('motor') + , ('motorcycle') + , ('motorist') + , ('mountain') + , ('mouse') + , ('mousepad') + , ('moustache') + , ('mouth') + , ('move') + , ('movie') + , ('mozzarella') + , ('muenster') + , ('mulberry') + , ('mule') + , ('mum') + , ('munchkin') + , ('muscari') + , ('muscle') + , ('muse') + , ('museum') + , ('mushroom') + , ('music') + , ('musician') + , ('muskmelon') + , ('muskox') + , ('mustang') + , ('mustard') + , ('myrtle') + , ('myth') + , ('nail') + , ('name') + , ('nannyberry') + , ('napkin') + , ('naranja') + , ('narcissus') + , ('narwhal') + , ('nasturtium') + , ('nation') + , ('nautilus') + , ('navy') + , ('nebula') + , ('nectarine') + , ('need') + , ('neem') + , ('neighbor') + , ('neighborhood') + , ('nemophila') + , ('neon') + , ('nephew') + , ('neptune') + , ('nerine') + , ('nerve') + , ('nest') + , ('net') + , ('network') + , ('neutral') + , ('newsboy') + , ('newspaper') + , ('newsprint') + , ('newsstand') + , ('newt') + , ('nickel') + , ('niece') + , ('nigella') + , ('night') + , ('nightingale') + , ('nightshade') + , ('ninja') + , ('nitrogen') + , ('node') + , ('noise') + , ('noodle') + , ('noon') + , ('nose') + , ('note') + , ('notebook') + , ('notify') + , ('noun') + , ('nova') + , ('novel') + , ('november') + , ('number') + , ('numeric') + , ('nurse') + , ('nut') + , ('nutmeg') + , ('nutria') + , ('nylon') + , ('nymphea') + , ('oak') + , ('oatmeal') + , ('objective') + , ('oboe') + , ('observation') + , ('observatory') + , ('ocarina') + , ('occupation') + , ('ocean') + , ('ocelot') + , ('ocicat') + , ('octagon') + , ('octave') + , ('october') + , ('octopus') + , ('odometer') + , ('offer') + , ('office') + , ('ogre') + , ('oil') + , ('okra') + , ('olive') + , ('olivine') + , ('omelet') + , ('onion') + , ('onyx') + , ('opal') + , ('open') + , ('opera') + , ('operation') + , ('ophthalmologist') + , ('opinion') + , ('opossum') + , ('opportunity') + , ('option') + , ('orange') + , ('orangutan') + , ('orbit') + , ('orca') + , ('orchestra') + , ('orchid') + , ('order') + , ('oregano') + , ('organ') + , ('organization') + , ('origami') + , ('origin') + , ('oriole') + , ('ornament') + , ('ostrich') + , ('othnielia') + , ('otter') + , ('ounce') + , ('outfit') + , ('output') + , ('outrigger') + , ('oval') + , ('overcoat') + , ('oviraptor') + , ('owl') + , ('owner') + , ('ox') + , ('oxygen') + , ('oyster') + , ('ozraraptor') + , ('package') + , ('packet') + , ('paddleboat') + , ('page') + , ('pail') + , ('paint') + , ('painter') + , ('pair') + , ('pajama') + , ('palladium') + , ('palm') + , ('pamphlet') + , ('pan') + , ('panama') + , ('pancake') + , ('pancreas') + , ('panda') + , ('paneer') + , ('pangolin') + , ('panther') + , ('pantry') + , ('pantydraco') + , ('papaya') + , ('paper') + , ('paperback') + , ('paprika') + , ('papyrus') + , ('parade') + , ('paradox') + , ('parakeet') + , ('parallel') + , ('parallelogram') + , ('paranthodon') + , ('parcel') + , ('parent') + , ('parenthesis') + , ('park') + , ('parka') + , ('parmesan') + , ('parrot') + , ('parrotfish') + , ('parsley') + , ('parsnip') + , ('part') + , ('particle') + , ('partner') + , ('partridge') + , ('party') + , ('passbook') + , ('passenger') + , ('passionfruit') + , ('passive') + , ('pasta') + , ('paste') + , ('pastry') + , ('patch') + , ('patella') + , ('path') + , ('patient') + , ('patio') + , ('paw') + , ('pawpaw') + , ('payment') + , ('pea') + , ('peace') + , ('peach') + , ('peacock') + , ('peak') + , ('peanut') + , ('pear') + , ('pearl') + , ('pecorino') + , ('pedestrian') + , ('pediatrician') + , ('pegasus') + , ('pelican') + , ('pen') + , ('penalty') + , ('pencil') + , ('pendulum') + , ('penguin') + , ('pentaceratops') + , ('pentagon') + , ('peony') + , ('people') + , ('pepper') + , ('pepperberry') + , ('perch') + , ('perfume') + , ('peridot') + , ('perigee') + , ('period') + , ('periodical') + , ('peripheral') + , ('periwinkle') + , ('persimmon') + , ('pet') + , ('petalite') + , ('petroleum') + , ('petunia') + , ('pewter') + , ('phalange') + , ('pharaoh') + , ('pheasant') + , ('philodendron') + , ('philosophy') + , ('phone') + , ('phosphorus') + , ('phrase') + , ('physician') + , ('piano') + , ('piccolo') + , ('pick') + , ('pickle') + , ('pickup') + , ('picture') + , ('pie') + , ('pig') + , ('pigeon') + , ('pigment') + , ('pike') + , ('pillow') + , ('pilot') + , ('pin') + , ('pincushion') + , ('pine') + , ('pineapple') + , ('ping') + , ('pink') + , ('pint') + , ('pipe') + , ('piper') + , ('piranha') + , ('pirate') + , ('pisces') + , ('pitcher') + , ('pizza') + , ('place') + , ('plain') + , ('planarian') + , ('plane') + , ('planet') + , ('plank') + , ('plant') + , ('plantain') + , ('plaster') + , ('plastic') + , ('plate') + , ('platinum') + , ('platypus') + , ('play') + , ('player') + , ('playground') + , ('playroom') + , ('pleasure') + , ('plier') + , ('plot') + , ('plough') + , ('plow') + , ('plum') + , ('plume') + , ('pluto') + , ('plutonium') + , ('plywood') + , ('pocket') + , ('podium') + , ('poet') + , ('poetry') + , ('poinsettia') + , ('point') + , ('poison') + , ('polish') + , ('politician') + , ('polka') + , ('polo') + , ('polonium') + , ('polyanthus') + , ('polyester') + , ('pomegranate') + , ('pomelo') + , ('pond') + , ('pony') + , ('popcorn') + , ('poppyseed') + , ('porch') + , ('porcupine') + , ('porkpie') + , ('porpoise') + , ('port') + , ('porter') + , ('position') + , ('possum') + , ('postage') + , ('postbox') + , ('pot') + , ('potassium') + , ('potato') + , ('potential') + , ('poultry') + , ('powder') + , ('power') + , ('practice') + , ('pram') + , ('prawn') + , ('preface') + , ('prepared') + , ('pressure') + , ('price') + , ('primrose') + , ('primula') + , ('prince') + , ('princess') + , ('principal') + , ('principle') + , ('print') + , ('printer') + , ('process') + , ('produce') + , ('product') + , ('production') + , ('professor') + , ('profit') + , ('promise') + , ('promotion') + , ('proof') + , ('property') + , ('prose') + , ('prosecution') + , ('protest') + , ('protoceratops') + , ('protocol') + , ('provelone') + , ('prune') + , ('pruner') + , ('psychiatrist') + , ('psychology') + , ('ptarmigan') + , ('puck') + , ('pudding') + , ('pufferfish') + , ('puffin') + , ('pull') + , ('pullover') + , ('pulsar') + , ('puma') + , ('pump') + , ('pumpkin') + , ('punch') + , ('punishment') + , ('pupil') + , ('puppet') + , ('puppy') + , ('purchase') + , ('purple') + , ('purpose') + , ('push') + , ('puzzle') + , ('pyjama') + , ('pyramid') + , ('pyrite') + , ('pyroraptor') + , ('python') + , ('quail') + , ('quality') + , ('quark') + , ('quart') + , ('quarter') + , ('quartz') + , ('quasar') + , ('quesadilla') + , ('question') + , ('quicksand') + , ('quiet') + , ('quill') + , ('quilt') + , ('quince') + , ('quit') + , ('quiver') + , ('quokka') + , ('quotation') + , ('rabbit') + , ('raccoon') + , ('racer') + , ('raclette') + , ('radar') + , ('radiator') + , ('radio') + , ('radish') + , ('radium') + , ('radius') + , ('radon') + , ('raft') + , ('ragamuffin') + , ('ragdoll') + , ('rail') + , ('railway') + , ('rain') + , ('rainbow') + , ('raincoat') + , ('rainforest') + , ('rainstorm') + , ('raisin') + , ('raja') + , ('rake') + , ('rambutan') + , ('random') + , ('range') + , ('ranunculus') + , ('raptor') + , ('raptorex') + , ('rat') + , ('rattlesnake') + , ('raven') + , ('raver') + , ('ravioli') + , ('ray') + , ('rayon') + , ('reaction') + , ('reader') + , ('reading') + , ('reaper') + , ('reason') + , ('receipt') + , ('recess') + , ('record') + , ('recorder') + , ('red') + , ('redcurrant') + , ('referee') + , ('reference') + , ('region') + , ('regnosaurus') + , ('reindeer') + , ('relation') + , ('relative') + , ('relish') + , ('reminder') + , ('repair') + , ('replace') + , ('reply') + , ('report') + , ('reptile') + , ('request') + , ('research') + , ('resistance') + , ('resolution') + , ('resonance') + , ('respect') + , ('responsibility') + , ('rest') + , ('restaurant') + , ('result') + , ('revolve') + , ('reward') + , ('rhinoceros') + , ('rhodium') + , ('rhubarb') + , ('rhythm') + , ('rib') + , ('rice') + , ('ricotta') + , ('riddle') + , ('ridge') + , ('ring') + , ('ringer') + , ('rise') + , ('risk') + , ('river') + , ('riverbed') + , ('road') + , ('roadrunner') + , ('roadway') + , ('roar') + , ('roarer') + , ('roast') + , ('robe') + , ('robin') + , ('rock') + , ('rocket') + , ('rodent') + , ('roll') + , ('romano') + , ('rondeletia') + , ('roof') + , ('rook') + , ('room') + , ('rooster') + , ('roquefort') + , ('rose') + , ('rosehip') + , ('rosemary') + , ('rotate') + , ('roundworm') + , ('router') + , ('rover') + , ('rowboat') + , ('rubidium') + , ('ruby') + , ('rudbeckia') + , ('rugby') + , ('rule') + , ('rumba') + , ('run') + , ('runner') + , ('rutabaga') + , ('safflower') + , ('saffron') + , ('saga') + , ('sage') + , ('sagittarius') + , ('saguaro') + , ('sail') + , ('sailboat') + , ('sailfish') + , ('sailor') + , ('salad') + , ('salamander') + , ('salary') + , ('sale') + , ('salesman') + , ('salmon') + , ('salmonberry') + , ('salsa') + , ('salt') + , ('saltasaurus') + , ('saltopus') + , ('salute') + , ('samba') + , ('sand') + , ('sandal') + , ('sandalwood') + , ('sandpaper') + , ('sandwich') + , ('santanaraptor') + , ('sapphire') + , ('sarahsaurus') + , ('sardine') + , ('sassafras') + , ('satellite') + , ('satin') + , ('saturday') + , ('saturn') + , ('saturnalia') + , ('sauce') + , ('sauroposeidon') + , ('save') + , ('saver') + , ('savory') + , ('saw') + , ('sawfish') + , ('saxophone') + , ('scabiosa') + , ('scaffold') + , ('scale') + , ('scallion') + , ('scallop') + , ('scapula') + , ('scar') + , ('scarecrow') + , ('scarer') + , ('scarf') + , ('scene') + , ('scent') + , ('sceptre') + , ('school') + , ('schooner') + , ('science') + , ('scilla') + , ('scion') + , ('scissor') + , ('scooter') + , ('scorpio') + , ('scorpion') + , ('scourge') + , ('scowl') + , ('scraper') + , ('screen') + , ('screwdriver') + , ('scribe') + , ('script') + , ('sea') + , ('seagull') + , ('seahorse') + , ('seal') + , ('seaplane') + , ('search') + , ('seashore') + , ('season') + , ('seat') + , ('seatbelt') + , ('second') + , ('secretary') + , ('secure') + , ('seed') + , ('seeder') + , ('seeker') + , ('seer') + , ('seismosaurus') + , ('selenium') + , ('sense') + , ('september') + , ('serpent') + , ('servant') + , ('server') + , ('sesame') + , ('session') + , ('settee') + , ('shade') + , ('shadow') + , ('shake') + , ('shaker') + , ('shallot') + , ('shame') + , ('shampoo') + , ('shamrock') + , ('shape') + , ('share') + , ('shark') + , ('shawl') + , ('shear') + , ('sheep') + , ('sheet') + , ('shelf') + , ('shell') + , ('sherbet') + , ('shield') + , ('shift') + , ('shingle') + , ('ship') + , ('shirt') + , ('shock') + , ('shoe') + , ('shoemaker') + , ('shop') + , ('shoulder') + , ('shovel') + , ('show') + , ('shrimp') + , ('shrine') + , ('shroud') + , ('side') + , ('sidecar') + , ('sidewalk') + , ('sight') + , ('sign') + , ('silence') + , ('silene') + , ('silica') + , ('silicon') + , ('silk') + , ('silkworm') + , ('silver') + , ('silverfish') + , ('sing') + , ('singer') + , ('single') + , ('singularity') + , ('sink') + , ('situation') + , ('skate') + , ('skateboard') + , ('ski') + , ('skipjack') + , ('skirt') + , ('skull') + , ('skunk') + , ('sky') + , ('slash') + , ('slayer') + , ('sled') + , ('sleep') + , ('sleet') + , ('slice') + , ('slicer') + , ('slide') + , ('slider') + , ('slime') + , ('slip') + , ('slipper') + , ('slope') + , ('sloth') + , ('slouch') + , ('slug') + , ('smartphone') + , ('smile') + , ('smoke') + , ('snagglefoot') + , ('snail') + , ('snake') + , ('snap') + , ('snapdragon') + , ('snapper') + , ('snarl') + , ('sneeze') + , ('sneezeweed') + , ('snickerdoodle') + , ('snipe') + , ('snout') + , ('snow') + , ('snowboard') + , ('snowdrop') + , ('snowflake') + , ('snowman') + , ('snowplow') + , ('snowshoe') + , ('snowstorm') + , ('soap') + , ('soapwort') + , ('soarer') + , ('soccer') + , ('society') + , ('sociology') + , ('sock') + , ('socks') + , ('soda') + , ('sodalite') + , ('sodium') + , ('sofa') + , ('softball') + , ('soil') + , ('soldier') + , ('sole') + , ('sombrero') + , ('somersault') + , ('son') + , ('song') + , ('soprano') + , ('sorrel') + , ('sort') + , ('soul') + , ('sound') + , ('soup') + , ('source') + , ('soursop') + , ('sousaphone') + , ('sovereign') + , ('soy') + , ('soybean') + , ('space') + , ('spacecraft') + , ('spade') + , ('spaghetti') + , ('spandex') + , ('spark') + , ('sparrow') + , ('spatula') + , ('speak') + , ('speaker') + , ('spear') + , ('specialist') + , ('spectacles') + , ('spectrograph') + , ('spectroscope') + , ('spectrum') + , ('speech') + , ('speedboat') + , ('speedwell') + , ('spell') + , ('sphere') + , ('sphynx') + , ('spice') + , ('spider') + , ('spike') + , ('spinach') + , ('spinosaurus') + , ('spirit') + , ('splash') + , ('spleen') + , ('split') + , ('sponge') + , ('spoon') + , ('spoonbill') + , ('spot') + , ('spring') + , ('sprint') + , ('sprite') + , ('sprout') + , ('spruce') + , ('spur') + , ('sputter') + , ('spy') + , ('square') + , ('squash') + , ('squid') + , ('squirrel') + , ('stag') + , ('stage') + , ('staircase') + , ('stallion') + , ('stamp') + , ('star') + , ('starburst') + , ('starfish') + , ('starflower') + , ('stargazer') + , ('station') + , ('statistic') + , ('stay') + , ('stealer') + , ('steam') + , ('steed') + , ('steel') + , ('stegosaurus') + , ('stem') + , ('step') + , ('sternum') + , ('stetson') + , ('stew') + , ('stick') + , ('stilton') + , ('sting') + , ('stinger') + , ('stingray') + , ('stitch') + , ('stoat') + , ('stock') + , ('stocking') + , ('stomach') + , ('stone') + , ('stop') + , ('stoplight') + , ('store') + , ('storm') + , ('story') + , ('stove') + , ('strand') + , ('stranger') + , ('straw') + , ('strawflower') + , ('stream') + , ('street') + , ('streetcar') + , ('stretch') + , ('string') + , ('structure') + , ('study') + , ('sturgeon') + , ('stygimoloch') + , ('style') + , ('subject') + , ('submarine') + , ('substance') + , ('subway') + , ('success') + , ('sugar') + , ('suggestion') + , ('suit') + , ('sulfur') + , ('summer') + , ('sun') + , ('sundae') + , ('sunday') + , ('sundial') + , ('sunfish') + , ('sunflower') + , ('sunscreen') + , ('sunset') + , ('sunshine') + , ('sunspot') + , ('sunstone') + , ('supermarket') + , ('supernova') + , ('supply') + , ('surf') + , ('surfboard') + , ('surgeon') + , ('surprise') + , ('sushi') + , ('swallow') + , ('swamp') + , ('swan') + , ('sweater') + , ('sweatpants') + , ('sweatshirt') + , ('swift') + , ('swim') + , ('swing') + , ('switch') + , ('swoop') + , ('sword') + , ('swordfish') + , ('swordtail') + , ('sycamore') + , ('sync') + , ('syringa') + , ('syrup') + , ('system') + , ('syzygy') + , ('table') + , ('tablecloth') + , ('tabletop') + , ('tachometer') + , ('tadpole') + , ('tail') + , ('tailor') + , ('taker') + , ('taleggio') + , ('talk') + , ('talon') + , ('talos') + , ('tamarillo') + , ('tamarind') + , ('tang') + , ('tangelo') + , ('tangerine') + , ('tango') + , ('tank') + , ('tanker') + , ('tarantula') + , ('tarascosaurus') + , ('target') + , ('tarn') + , ('tarp') + , ('tarragon') + , ('tarsal') + , ('tarsier') + , ('tartan') + , ('taurus') + , ('tax') + , ('taxi') + , ('taxicab') + , ('tea') + , ('teacher') + , ('teal') + , ('team') + , ('technician') + , ('technosaurus') + , ('teeth') + , ('telephone') + , ('telescope') + , ('television') + , ('teller') + , ('tellurium') + , ('temper') + , ('temperature') + , ('temple') + , ('tempo') + , ('tendency') + , ('tennis') + , ('tenor') + , ('tent') + , ('termite') + , ('tern') + , ('terrier') + , ('territory') + , ('text') + , ('textbook') + , ('texture') + , ('theater') + , ('theory') + , ('thief') + , ('thimbleberry') + , ('thing') + , ('thistle') + , ('thorium') + , ('thorn') + , ('thought') + , ('thread') + , ('thrill') + , ('throat') + , ('throne') + , ('thrush') + , ('thumb') + , ('thunbergia') + , ('thunder') + , ('thursday') + , ('thyme') + , ('tibia') + , ('tick') + , ('ticket') + , ('tie') + , ('tiger') + , ('tiglon') + , ('tilapia') + , ('tile') + , ('timbale') + , ('time') + , ('timer') + , ('timimus') + , ('timpani') + , ('tin') + , ('tip') + , ('tire') + , ('titanium') + , ('titanoceratops') + , ('titanosaurus') + , ('tithonia') + , ('title') + , ('toad') + , ('toast') + , ('toaster') + , ('today') + , ('tomato') + , ('ton') + , ('toothbrush') + , ('toothpaste') + , ('top') + , ('topaz') + , ('toque') + , ('tornado') + , ('tortellini') + , ('tortoise') + , ('toucan') + , ('tourmaline') + , ('towel') + , ('tower') + , ('town') + , ('toy') + , ('track') + , ('tracker') + , ('tractor') + , ('trade') + , ('trader') + , ('traffic') + , ('trail') + , ('train') + , ('trampoline') + , ('transport') + , ('trapezoid') + , ('travel') + , ('traveler') + , ('trawler') + , ('tray') + , ('treatment') + , ('tree') + , ('triangle') + , ('triceratops') + , ('trick') + , ('tricorne') + , ('trigonometry') + , ('trilby') + , ('trillium') + , ('trip') + , ('trollius') + , ('trombone') + , ('troodon') + , ('trouble') + , ('trouser') + , ('trowel') + , ('truck') + , ('truffle') + , ('trumpet') + , ('trunk') + , ('trust') + , ('tsunami') + , ('tub') + , ('tuba') + , ('tuberose') + , ('tuck') + , ('tuesday') + , ('tugboat') + , ('tulip') + , ('tumble') + , ('tumbleweed') + , ('tuna') + , ('tune') + , ('tungsten') + , ('turkey') + , ('turn') + , ('turner') + , ('turnip') + , ('turnover') + , ('turquoise') + , ('turret') + , ('turtle') + , ('tv') + , ('twig') + , ('twilight') + , ('twill') + , ('twin') + , ('twine') + , ('twist') + , ('twister') + , ('typhoon') + , ('tyrannosaurus') + , ('umbra') + , ('umbrella') + , ('uncle') + , ('unicorn') + , ('uniform') + , ('universe') + , ('uranium') + , ('ursinia') + , ('utahceratops') + , ('utahraptor') + , ('utensil') + , ('vacation') + , ('vacuum') + , ('valley') + , ('value') + , ('van') + , ('vanadium') + , ('vanilla') + , ('variety') + , ('variraptor') + , ('vase') + , ('vault') + , ('vegetable') + , ('vegetarian') + , ('vehicle') + , ('veil') + , ('vein') + , ('velociraptor') + , ('velvet') + , ('venom') + , ('verbena') + , ('verdict') + , ('vermicelli') + , ('verse') + , ('vertebra') + , ('vessel') + , ('vest') + , ('veterinarian') + , ('vibraphone') + , ('viburnum') + , ('vicuna') + , ('vinyl') + , ('viola') + , ('violet') + , ('violin') + , ('viper') + , ('virgo') + , ('visage') + , ('viscose') + , ('viscount') + , ('viscountess') + , ('vise') + , ('vision') + , ('visitor') + , ('visor') + , ('voice') + , ('volcano') + , ('vole') + , ('volleyball') + , ('voyage') + , ('vulcanodon') + , ('vulture') + , ('waiter') + , ('waitress') + , ('wake') + , ('wakeboard') + , ('walk') + , ('walker') + , ('walkover') + , ('wall') + , ('wallaby') + , ('wallet') + , ('walleye') + , ('wallflower') + , ('walnut') + , ('walrus') + , ('waltz') + , ('wander') + , ('wanderer') + , ('wandflower') + , ('wannanosaurus') + , ('war') + , ('warbler') + , ('warlock') + , ('warrior') + , ('wasabi') + , ('wash') + , ('washer') + , ('wasp') + , ('waste') + , ('watch') + , ('watcher') + , ('watchmaker') + , ('water') + , ('watercress') + , ('waterfall') + , ('waterlily') + , ('wave') + , ('wavelength') + , ('wax') + , ('waxflower') + , ('way') + , ('wealth') + , ('weather') + , ('weaver') + , ('web') + , ('wedelia') + , ('wedge') + , ('wednesday') + , ('weeder') + , ('week') + , ('weight') + , ('whale') + , ('wheel') + , ('whimsey') + , ('whip') + , ('whippet') + , ('whippoorwill') + , ('whistle') + , ('whitefish') + , ('wholesaler') + , ('widget') + , ('wildcat') + , ('wildebeest') + , ('wilderness') + , ('wildflower') + , ('william') + , ('willow') + , ('wind') + , ('windflower') + , ('windscreen') + , ('windshield') + , ('wineberry') + , ('wing') + , ('winter') + , ('winterberry') + , ('wire') + , ('wish') + , ('wishbone') + , ('wisteria') + , ('witch') + , ('witness') + , ('wizard') + , ('wok') + , ('wolf') + , ('wolfberry') + , ('wolfsbane') + , ('wolverine') + , ('wombat') + , ('wood') + , ('woodpecker') + , ('woodwind') + , ('wool') + , ('woolen') + , ('word') + , ('work') + , ('workshop') + , ('wormhole') + , ('wren') + , ('wrench') + , ('wrinkle') + , ('wrist') + , ('writer') + , ('writing') + , ('xenon') + , ('xenoposeidon') + , ('xylocarp') + , ('xylophone') + , ('yacht') + , ('yak') + , ('yam') + , ('yamamomo') + , ('yard') + , ('yarn') + , ('yarrow') + , ('year') + , ('yellowhorn') + , ('yew') + , ('yogurt') + , ('yoke') + , ('yttrium') + , ('yumberry') + , ('yuzu') + , ('zebra') + , ('zebu') + , ('zenith') + , ('zenobia') + , ('zephyr') + , ('ziconium') + , ('zinc') + , ('zinnia') + , ('zipper') + , ('zircon') + , ('zone') + , ('zoo') + , ('zucchini') + , ('zydeco') + ; +-- << OBJECTS + +-- PREDICATES >> +insert into human_uuid.predicate (word) +values + ('aback') + , ('abalone') + , ('abiding') + , ('ablaze') + , ('able') + , ('aboard') + , ('abounding') + , ('abrasive') + , ('abrupt') + , ('absorbed') + , ('absorbing') + , ('abstracted') + , ('abundance') + , ('abundant') + , ('abyssinian') + , ('accessible') + , ('accidental') + , ('accurate') + , ('achieved') + , ('acidic') + , ('acoustic') + , ('actually') + , ('acute') + , ('adaptable') + , ('adaptive') + , ('adhesive') + , ('adjoining') + , ('admitted') + , ('adorable') + , ('adventurous') + , ('aeolian') + , ('aerial') + , ('agate') + , ('aged') + , ('agreeable') + , ('ahead') + , ('airy') + , ('ajar') + , ('alabaster') + , ('alder') + , ('alert') + , ('alike') + , ('alive') + , ('alkaline') + , ('alluring') + , ('almond') + , ('almondine') + , ('aloud') + , ('alpine') + , ('aluminum') + , ('amazing') + , ('ambiguous') + , ('ambitious') + , ('amenable') + , ('amethyst') + , ('amplified') + , ('amused') + , ('amusing') + , ('ancient') + , ('angry') + , ('animated') + , ('antique') + , ('apple') + , ('apricot') + , ('aquamarine') + , ('aquatic') + , ('aromatic') + , ('arrow') + , ('artistic') + , ('ash') + , ('aspiring') + , ('assorted') + , ('astonishing') + , ('atlantic') + , ('atom') + , ('attractive') + , ('auspicious') + , ('automatic') + , ('autumn') + , ('available') + , ('awake') + , ('aware') + , ('awesome') + , ('axiomatic') + , ('azure') + , ('balanced') + , ('bald') + , ('ballistic') + , ('balsam') + , ('band') + , ('basalt') + , ('battle') + , ('bead') + , ('beaded') + , ('beautiful') + , ('bedecked') + , ('befitting') + , ('bejewled') + , ('believed') + , ('bemused') + , ('beneficial') + , ('berry') + , ('best') + , ('better') + , ('bevel') + , ('big') + , ('billowy') + , ('bird') + , ('bitter') + , ('bittersweet') + , ('blend') + , ('bloom') + , ('blossom') + , ('blue') + , ('blush') + , ('blushing') + , ('boatneck') + , ('boiled') + , ('boiling') + , ('bold') + , ('bolder') + , ('boom') + , ('booming') + , ('bottled') + , ('bottlenose') + , ('boulder') + , ('bouncy') + , ('boundless') + , ('bow') + , ('brainy') + , ('bramble') + , ('branch') + , ('branched') + , ('brash') + , ('brass') + , ('brassy') + , ('brave') + , ('brawny') + , ('brazen') + , ('breezy') + , ('brick') + , ('brief') + , ('bright') + , ('brindle') + , ('bristle') + , ('broad') + , ('broadleaf') + , ('broken') + , ('bronze') + , ('bronzed') + , ('brook') + , ('bubble') + , ('bubbly') + , ('bumpy') + , ('burly') + , ('bustling') + , ('busy') + , ('butter') + , ('buttercup') + , ('buttered') + , ('butternut') + , ('buttery') + , ('button') + , ('buttoned') + , ('bygone') + , ('cactus') + , ('cake') + , ('calico') + , ('calm') + , ('camp') + , ('canary') + , ('candied') + , ('candle') + , ('candy') + , ('canyon') + , ('capable') + , ('capricious') + , ('caramel') + , ('carbonated') + , ('carefree') + , ('careful') + , ('caring') + , ('carnation') + , ('carnelian') + , ('carpal') + , ('casual') + , ('cat') + , ('caterwauling') + , ('catkin') + , ('catnip') + , ('cautious') + , ('cedar') + , ('celestial') + , ('certain') + , ('cerulean') + , ('chain') + , ('chalk') + , ('chambray') + , ('changeable') + , ('charm') + , ('charmed') + , ('charming') + , ('chartreuse') + , ('chatter') + , ('checker') + , ('checkered') + , ('cheddar') + , ('cheerful') + , ('chemical') + , ('cherry') + , ('chestnut') + , ('chief') + , ('childish') + , ('childlike') + , ('chill') + , ('chip') + , ('chipped') + , ('chisel') + , ('chiseled') + , ('chivalrous') + , ('chlorinated') + , ('chocolate') + , ('chrome') + , ('circular') + , ('citrine') + , ('clammy') + , ('clarity') + , ('classic') + , ('classy') + , ('clean') + , ('clear') + , ('clever') + , ('cliff') + , ('climbing') + , ('closed') + , ('cloud') + , ('cloudy') + , ('clover') + , ('clumsy') + , ('coal') + , ('cobalt') + , ('coconut') + , ('coffee') + , ('coherent') + , ('cold') + , ('colorful') + , ('colossal') + , ('comet') + , ('comfortable') + , ('common') + , ('complete') + , ('complex') + , ('concise') + , ('concrete') + , ('confirmed') + , ('confused') + , ('confusion') + , ('congruous') + , ('conscious') + , ('continuous') + , ('cooing') + , ('cooked') + , ('cookie') + , ('cool') + , ('cooperative') + , ('coordinated') + , ('copper') + , ('copy') + , ('coral') + , ('cord') + , ('corner') + , ('cosmic') + , ('cotton') + , ('cottony') + , ('courageous') + , ('crawling') + , ('creative') + , ('crimson') + , ('crocus') + , ('crystal') + , ('crystalline') + , ('cubic') + , ('cuboid') + , ('cuddly') + , ('cultivate') + , ('cultured') + , ('cumbersome') + , ('curious') + , ('curse') + , ('curved') + , ('cut') + , ('cyan') + , ('cyber') + , ('cyclic') + , ('cypress') + , ('daffodil') + , ('daffy') + , ('daily') + , ('dandelion') + , ('dandy') + , ('dapper') + , ('dark') + , ('darkened') + , ('dashing') + , ('dawn') + , ('dazed') + , ('dazzling') + , ('deadpan') + , ('dear') + , ('debonair') + , ('deciduous') + , ('decisive') + , ('decorous') + , ('dedicated') + , ('deep') + , ('deeply') + , ('defiant') + , ('delicate') + , ('delicious') + , ('delightful') + , ('delirious') + , ('deluxe') + , ('denim') + , ('dent') + , ('dented') + , ('descriptive') + , ('desert') + , ('deserted') + , ('destiny') + , ('detailed') + , ('determined') + , ('developing') + , ('diagnostic') + , ('diamond') + , ('different') + , ('difficult') + , ('diligent') + , ('dirt') + , ('disco') + , ('discovered') + , ('discreet') + , ('distinct') + , ('dog') + , ('dolomite') + , ('dorian') + , ('dot') + , ('dour') + , ('dramatic') + , ('dull') + , ('dune') + , ('dust') + , ('dusty') + , ('dynamic') + , ('eager') + , ('early') + , ('earthy') + , ('east') + , ('eastern') + , ('easy') + , ('economic') + , ('educated') + , ('efficacious') + , ('efficient') + , ('eggplant') + , ('eight') + , ('elastic') + , ('elated') + , ('elderly') + , ('electric') + , ('elegant') + , ('elemental') + , ('elite') + , ('ember') + , ('emerald') + , ('eminent') + , ('emphasized') + , ('empty') + , ('enchanted') + , ('enchanting') + , ('encouraging') + , ('endurable') + , ('energetic') + , ('enormous') + , ('enshrined') + , ('entertaining') + , ('enthusiastic') + , ('equable') + , ('equal') + , ('equatorial') + , ('equinox') + , ('erratic') + , ('estimated') + , ('ethereal') + , ('evanescent') + , ('even') + , ('evening') + , ('evergreen') + , ('everlasting') + , ('excellent') + , ('excessive') + , ('excited') + , ('exciting') + , ('exclusive') + , ('expensive') + , ('experienced') + , ('extreme') + , ('exuberant') + , ('exultant') + , ('fabulous') + , ('faceted') + , ('factual') + , ('faint') + , ('fair') + , ('faithful') + , ('fallacious') + , ('false') + , ('familiar') + , ('famous') + , ('fan') + , ('fanatical') + , ('fancy') + , ('fantastic') + , ('fantasy') + , ('far') + , ('fascinated') + , ('fast') + , ('fate') + , ('fearless') + , ('feather') + , ('feline') + , ('fern') + , ('festive') + , ('few') + , ('field') + , ('fierce') + , ('fifth') + , ('fine') + , ('fir') + , ('fire') + , ('first') + , ('fish') + , ('five') + , ('fixed') + , ('flame') + , ('flannel') + , ('flash') + , ('flashy') + , ('flat') + , ('flawless') + , ('flax') + , ('flaxen') + , ('flicker') + , ('flint') + , ('florentine') + , ('flossy') + , ('flourish') + , ('flower') + , ('flowery') + , ('fluff') + , ('fluffy') + , ('fluorescent') + , ('fluoridated') + , ('fluttering') + , ('flying') + , ('foam') + , ('foamy') + , ('fog') + , ('foggy') + , ('foil') + , ('foregoing') + , ('foremost') + , ('forest') + , ('forested') + , ('fork') + , ('fortunate') + , ('fortune') + , ('fossil') + , ('foul') + , ('four') + , ('fourth') + , ('fragrant') + , ('freckle') + , ('free') + , ('freezing') + , ('frequent') + , ('fresh') + , ('friendly') + , ('frill') + , ('fringe') + , ('frost') + , ('frosted') + , ('fuchsia') + , ('full') + , ('functional') + , ('funny') + , ('furtive') + , ('future') + , ('futuristic') + , ('gainful') + , ('galvanized') + , ('gamy') + , ('garnet') + , ('garrulous') + , ('gaudy') + , ('gelatinous') + , ('gem') + , ('general') + , ('generated') + , ('gentle') + , ('geode') + , ('giant') + , ('giddy') + , ('gifted') + , ('gigantic') + , ('gilded') + , ('ginger') + , ('glacier') + , ('glamorous') + , ('glass') + , ('glaze') + , ('gleaming') + , ('glib') + , ('glimmer') + , ('glistening') + , ('glitter') + , ('glittery') + , ('global') + , ('glorious') + , ('glory') + , ('glossy') + , ('glow') + , ('glowing') + , ('gold') + , ('golden') + , ('goldenrod') + , ('good') + , ('goofy') + , ('gorgeous') + , ('gossamer') + , ('graceful') + , ('grand') + , ('grandiose') + , ('granite') + , ('grape') + , ('grass') + , ('grateful') + , ('gratis') + , ('grave') + , ('gravel') + , ('gray') + , ('great') + , ('green') + , ('gregarious') + , ('grey') + , ('grizzled') + , ('grizzly') + , ('groovy') + , ('grove') + , ('guiltless') + , ('gusty') + , ('guttural') + , ('habitual') + , ('hail') + , ('half') + , ('hallowed') + , ('halved') + , ('hammerhead') + , ('handsome') + , ('handsomely') + , ('handy') + , ('happy') + , ('hardly') + , ('harmless') + , ('harmonious') + , ('harsh') + , ('harvest') + , ('heady') + , ('healthy') + , ('heartbreaking') + , ('heather') + , ('heathered') + , ('heavenly') + , ('heavy') + , ('held') + , ('heliotrope') + , ('helix') + , ('helpful') + , ('hexagonal') + , ('hickory') + , ('highfalutin') + , ('highly') + , ('hilarious') + , ('hill') + , ('hip') + , ('hissing') + , ('historical') + , ('holistic') + , ('hollow') + , ('holy') + , ('honey') + , ('honeysuckle') + , ('honorable') + , ('honored') + , ('horn') + , ('horse') + , ('hospitable') + , ('hot') + , ('hulking') + , ('humane') + , ('humble') + , ('humdrum') + , ('humorous') + , ('hungry') + , ('hurricane') + , ('hushed') + , ('hyper') + , ('hypnotic') + , ('iced') + , ('icy') + , ('illustrious') + , ('imaginary') + , ('immediate') + , ('immense') + , ('imminent') + , ('impartial') + , ('important') + , ('imported') + , ('impossible') + , ('incandescent') + , ('inconclusive') + , ('incongruous') + , ('incredible') + , ('indecisive') + , ('indigo') + , ('indispensable') + , ('industrious') + , ('inexpensive') + , ('infrequent') + , ('ink') + , ('inky') + , ('innate') + , ('innovative') + , ('inquisitive') + , ('insidious') + , ('instinctive') + , ('intelligent') + , ('interesting') + , ('intermediate') + , ('internal') + , ('intriguing') + , ('invented') + , ('invincible') + , ('invited') + , ('iodized') + , ('ionian') + , ('ionized') + , ('iridescent') + , ('iris') + , ('iron') + , ('irradiated') + , ('island') + , ('ivy') + , ('jagged') + , ('jasper') + , ('jazzy') + , ('jealous') + , ('jelly') + , ('jet') + , ('jewel') + , ('jeweled') + , ('jolly') + , ('joyous') + , ('judicious') + , ('jumbled') + , ('jumpy') + , ('jungle') + , ('juniper') + , ('just') + , ('juvenile') + , ('kaput') + , ('keen') + , ('kind') + , ('kindhearted') + , ('kindly') + , ('kiwi') + , ('knotty') + , ('knowing') + , ('knowledgeable') + , ('lace') + , ('laced') + , ('lackadaisical') + , ('lacy') + , ('lake') + , ('languid') + , ('lapis') + , ('laser') + , ('lateral') + , ('lava') + , ('lavender') + , ('lavish') + , ('lead') + , ('leaf') + , ('lean') + , ('learned') + , ('leather') + , ('leeward') + , ('legend') + , ('legendary') + , ('lemon') + , ('level') + , ('liberating') + , ('light') + , ('lightning') + , ('like') + , ('likeable') + , ('lilac') + , ('lime') + , ('linen') + , ('literate') + , ('lithe') + , ('little') + , ('lively') + , ('living') + , ('lizard') + , ('local') + , ('locrian') + , ('lofty') + , ('long') + , ('longhaired') + , ('longing') + , ('lopsided') + , ('loud') + , ('lovely') + , ('loving') + , ('low') + , ('lowly') + , ('luck') + , ('lucky') + , ('ludicrous') + , ('lumbar') + , ('luminous') + , ('lunar') + , ('lush') + , ('luxuriant') + , ('luxurious') + , ('lydian') + , ('lying') + , ('lyrical') + , ('maddening') + , ('magenta') + , ('magic') + , ('magical') + , ('magnetic') + , ('magnificent') + , ('mahogany') + , ('maize') + , ('majestic') + , ('malachite') + , ('malleable') + , ('mammoth') + , ('mango') + , ('mangrove') + , ('maple') + , ('marble') + , ('marbled') + , ('marked') + , ('marmalade') + , ('maroon') + , ('marred') + , ('married') + , ('marsh') + , ('marshy') + , ('marvelous') + , ('massive') + , ('material') + , ('materialistic') + , ('mature') + , ('maze') + , ('meadow') + , ('medieval') + , ('mellow') + , ('melodic') + , ('melodious') + , ('melted') + , ('meowing') + , ('merciful') + , ('mercurial') + , ('mercury') + , ('mesquite') + , ('metal') + , ('meteor') + , ('mewing') + , ('mica') + , ('midi') + , ('midnight') + , ('mighty') + , ('mild') + , ('mildly') + , ('military') + , ('mini') + , ('miniature') + , ('mint') + , ('mirage') + , ('mire') + , ('mirror') + , ('misty') + , ('mixed') + , ('mixolydian') + , ('modern') + , ('modest') + , ('momentous') + , ('moored') + , ('morning') + , ('motley') + , ('mountain') + , ('mountainous') + , ('mousy') + , ('mud') + , ('muddled') + , ('muddy') + , ('mulberry') + , ('mutual') + , ('mysterious') + , ('narrow') + , ('natural') + , ('navy') + , ('near') + , ('neat') + , ('nebula') + , ('nebulous') + , ('necessary') + , ('neighborly') + , ('neon') + , ('nervous') + , ('nettle') + , ('nice') + , ('nickel') + , ('nifty') + , ('night') + , ('nimble') + , ('nine') + , ('ninth') + , ('noble') + , ('noiseless') + , ('nonchalant') + , ('nonstop') + , ('noon') + , ('north') + , ('northern') + , ('nostalgic') + , ('nosy') + , ('notch') + , ('nova') + , ('numerous') + , ('nutritious') + , ('oasis') + , ('observant') + , ('obsidian') + , ('obtainable') + , ('obvious') + , ('occipital') + , ('oceanic') + , ('octagonal') + , ('odd') + , ('oil') + , ('olive') + , ('olivine') + , ('omniscient') + , ('onyx') + , ('opalescent') + , ('opaque') + , ('open') + , ('opposite') + , ('orange') + , ('orchid') + , ('orderly') + , ('ordinary') + , ('organic') + , ('organized') + , ('ossified') + , ('outgoing') + , ('outrageous') + , ('outstanding') + , ('oval') + , ('overjoyed') + , ('oxidized') + , ('pacific') + , ('paint') + , ('painted') + , ('pale') + , ('palm') + , ('panoramic') + , ('paper') + , ('parallel') + , ('past') + , ('pastoral') + , ('patch') + , ('pattern') + , ('peaceful') + , ('peach') + , ('pear') + , ('peat') + , ('pebble') + , ('pentagonal') + , ('pepper') + , ('peppered') + , ('peppermint') + , ('perfect') + , ('peridot') + , ('periodic') + , ('periwinkle') + , ('perpetual') + , ('persistent') + , ('petal') + , ('petalite') + , ('petite') + , ('pewter') + , ('phantom') + , ('phase') + , ('phrygian') + , ('picayune') + , ('pickle') + , ('pickled') + , ('picturesque') + , ('pie') + , ('pine') + , ('pineapple') + , ('pinnate') + , ('pinto') + , ('piquant') + , ('pitch') + , ('placid') + , ('plaid') + , ('plain') + , ('planet') + , ('plant') + , ('plastic') + , ('platinum') + , ('plausible') + , ('playful') + , ('pleasant') + , ('plucky') + , ('plum') + , ('plume') + , ('plural') + , ('pointed') + , ('pointy') + , ('poised') + , ('polar') + , ('polarized') + , ('polished') + , ('polite') + , ('political') + , ('pollen') + , ('polydactyl') + , ('polyester') + , ('pond') + , ('pool') + , ('popular') + , ('positive') + , ('possible') + , ('potent') + , ('pouncing') + , ('power') + , ('powerful') + , ('prairie') + , ('precious') + , ('pretty') + , ('pricey') + , ('prickle') + , ('prickly') + , ('principled') + , ('prism') + , ('private') + , ('probable') + , ('productive') + , ('profuse') + , ('prong') + , ('protective') + , ('proud') + , ('proximal') + , ('psychedelic') + , ('puddle') + , ('pumped') + , ('purple') + , ('purrfect') + , ('purring') + , ('pushy') + , ('puzzle') + , ('puzzled') + , ('puzzling') + , ('pyrite') + , ('quaint') + , ('quark') + , ('quartz') + , ('quasar') + , ('quick') + , ('quickest') + , ('quiet') + , ('quill') + , ('quilled') + , ('quilt') + , ('quilted') + , ('quintessential') + , ('quirky') + , ('quiver') + , ('quixotic') + , ('radial') + , ('radical') + , ('rain') + , ('rainbow') + , ('rainy') + , ('rambunctious') + , ('rapid') + , ('rare') + , ('raspy') + , ('rattle') + , ('real') + , ('rebel') + , ('recent') + , ('receptive') + , ('recondite') + , ('rectangular') + , ('reflective') + , ('regal') + , ('regular') + , ('reinvented') + , ('reliable') + , ('relic') + , ('relieved') + , ('remarkable') + , ('reminiscent') + , ('repeated') + , ('resilient') + , ('resisted') + , ('resolute') + , ('resonant') + , ('respected') + , ('responsible') + , ('rhetorical') + , ('rhinestone') + , ('ribbon') + , ('rich') + , ('rift') + , ('right') + , ('righteous') + , ('rightful') + , ('rigorous') + , ('ring') + , ('ringed') + , ('ripe') + , ('ripple') + , ('ritzy') + , ('river') + , ('road') + , ('roan') + , ('roasted') + , ('robust') + , ('rocky') + , ('rogue') + , ('romantic') + , ('roomy') + , ('rose') + , ('rotated') + , ('rotating') + , ('rough') + , ('round') + , ('rounded') + , ('royal') + , ('rumbling') + , ('rune') + , ('rural') + , ('rust') + , ('rustic') + , ('saber') + , ('sable') + , ('safe') + , ('sage') + , ('salt') + , ('salty') + , ('same') + , ('sand') + , ('sandy') + , ('sapphire') + , ('sassy') + , ('satin') + , ('satisfying') + , ('savory') + , ('scalloped') + , ('scandalous') + , ('scarce') + , ('scarlet') + , ('scented') + , ('scientific') + , ('scintillating') + , ('scratch') + , ('scratched') + , ('scrawny') + , ('screeching') + , ('scythe') + , ('season') + , ('seasoned') + , ('second') + , ('secret') + , ('secretive') + , ('sedate') + , ('seed') + , ('seemly') + , ('seen') + , ('selective') + , ('separate') + , ('separated') + , ('sepia') + , ('sequoia') + , ('serene') + , ('serious') + , ('shade') + , ('shaded') + , ('shadow') + , ('shadowed') + , ('shared') + , ('sharp') + , ('sheer') + , ('shell') + , ('shelled') + , ('shimmer') + , ('shimmering') + , ('shine') + , ('shining') + , ('shiny') + , ('shocking') + , ('shore') + , ('short') + , ('shorthaired') + , ('showy') + , ('shrouded') + , ('shrub') + , ('shy') + , ('sideways') + , ('silent') + , ('silicon') + , ('silk') + , ('silken') + , ('silky') + , ('silly') + , ('silver') + , ('similar') + , ('simple') + , ('simplistic') + , ('sincere') + , ('single') + , ('six') + , ('sixth') + , ('skillful') + , ('skinny') + , ('skitter') + , ('sky') + , ('slash') + , ('sleepy') + , ('sleet') + , ('slender') + , ('slime') + , ('slimy') + , ('slow') + , ('sly') + , ('small') + , ('smart') + , ('smiling') + , ('smoggy') + , ('smooth') + , ('snapdragon') + , ('sneaky') + , ('snow') + , ('snowy') + , ('soapy') + , ('soft') + , ('solar') + , ('solid') + , ('solstice') + , ('somber') + , ('sophisticated') + , ('sordid') + , ('sore') + , ('sour') + , ('south') + , ('southern') + , ('spangle') + , ('spangled') + , ('spark') + , ('sparkling') + , ('sparkly') + , ('special') + , ('speckle') + , ('speckled') + , ('spectacled') + , ('spectacular') + , ('spectrum') + , ('sphenoid') + , ('spice') + , ('spiced') + , ('spicy') + , ('spiffy') + , ('spiky') + , ('spiny') + , ('spiral') + , ('spiritual') + , ('splashy') + , ('splendid') + , ('sponge') + , ('spot') + , ('spotless') + , ('spotted') + , ('spotty') + , ('spring') + , ('sprinkle') + , ('sprout') + , ('spurious') + , ('square') + , ('standing') + , ('star') + , ('statuesque') + , ('steadfast') + , ('steady') + , ('stealth') + , ('steel') + , ('steep') + , ('stellar') + , ('sticky') + , ('stingy') + , ('stirring') + , ('stitch') + , ('stone') + , ('storm') + , ('stormy') + , ('stream') + , ('strengthened') + , ('stripe') + , ('striped') + , ('strong') + , ('stump') + , ('stupendous') + , ('sturdy') + , ('stylish') + , ('suave') + , ('subdued') + , ('subsequent') + , ('substantial') + , ('successful') + , ('succinct') + , ('succulent') + , ('sudden') + , ('sudsy') + , ('sugar') + , ('sugared') + , ('sugary') + , ('sulfuric') + , ('sulky') + , ('summer') + , ('sumptuous') + , ('sun') + , ('sunny') + , ('sunrise') + , ('sunset') + , ('super') + , ('superb') + , ('superficial') + , ('supreme') + , ('surf') + , ('sustaining') + , ('swamp') + , ('swanky') + , ('sweet') + , ('sweltering') + , ('swift') + , ('synonymous') + , ('tabby') + , ('talented') + , ('tall') + , ('tame') + , ('tan') + , ('tangible') + , ('tangy') + , ('tar') + , ('tarry') + , ('tartan') + , ('tasteful') + , ('tasty') + , ('tattered') + , ('teal') + , ('telling') + , ('temporal') + , ('ten') + , ('tender') + , ('terrific') + , ('tested') + , ('thankful') + , ('therapeutic') + , ('thin') + , ('thinkable') + , ('third') + , ('thirsty') + , ('thoracic') + , ('thorn') + , ('thoughtful') + , ('thread') + , ('three') + , ('thrilling') + , ('thunder') + , ('thundering') + , ('tidal') + , ('tide') + , ('tidy') + , ('time') + , ('tin') + , ('tinted') + , ('tiny') + , ('titanium') + , ('toothsome') + , ('topaz') + , ('torch') + , ('torpid') + , ('tortoiseshell') + , ('tough') + , ('tourmaline') + , ('towering') + , ('trail') + , ('tranquil') + , ('translucent') + , ('transparent') + , ('trapezoidal') + , ('traveling') + , ('treasure') + , ('tree') + , ('tremendous') + , ('triangular') + , ('tricky') + , ('tricolor') + , ('trite') + , ('tropical') + , ('troubled') + , ('trusted') + , ('trusting') + , ('truth') + , ('truthful') + , ('tulip') + , ('tundra') + , ('tungsten') + , ('turquoise') + , ('twilight') + , ('twisty') + , ('typhoon') + , ('typical') + , ('ubiquitous') + , ('ultra') + , ('uncovered') + , ('understood') + , ('unequaled') + , ('uneven') + , ('unexpected') + , ('unique') + , ('universal') + , ('unleashed') + , ('unmarred') + , ('unruly') + , ('unusual') + , ('upbeat') + , ('useful') + , ('utopian') + , ('uttermost') + , ('vagabond') + , ('valiant') + , ('valley') + , ('valuable') + , ('vanilla') + , ('various') + , ('vast') + , ('vaulted') + , ('veil') + , ('veiled') + , ('verbena') + , ('verbose') + , ('verdant') + , ('versed') + , ('victorious') + , ('vigorous') + , ('vine') + , ('vintage') + , ('violet') + , ('viridian') + , ('visual') + , ('vivacious') + , ('vivid') + , ('volcano') + , ('voltaic') + , ('voracious') + , ('waiting') + , ('wakeful') + , ('walnut') + , ('wandering') + , ('warm') + , ('warp') + , ('wary') + , ('water') + , ('watery') + , ('wave') + , ('wax') + , ('wealthy') + , ('well') + , ('west') + , ('western') + , ('wheat') + , ('whimsical') + , ('whip') + , ('whispering') + , ('wholesale') + , ('wide') + , ('wiggly') + , ('wild') + , ('wind') + , ('winter') + , ('wirehaired') + , ('wiry') + , ('wise') + , ('wistful') + , ('witty') + , ('wobbly') + , ('wonderful') + , ('wood') + , ('wooded') + , ('wooden') + , ('wool') + , ('woolen') + , ('woolly') + , ('workable') + , ('working') + , ('worried') + , ('wry') + , ('yellow') + , ('yielding') + , ('young') + , ('youthful') + , ('zany') + , ('zealous') + , ('zenith') + , ('zest') + , ('zesty') + , ('zigzag') + , ('zinc') + , ('zippy') + , ('zircon') + ; +-- << PREDICATES + +alter table "public"."community" alter column "uid" drop default; +alter table "public"."community" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."community" alter column "uid" set default human_uuid.huid(); + +alter table "public"."grp" alter column "uid" drop default; +alter table "public"."grp" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."grp" alter column "uid" set default human_uuid.huid(); + +alter table "public"."perm" alter column "uid" drop default; +alter table "public"."perm" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."perm" alter column "uid" set default human_uuid.huid(); + +alter table "public"."thread" alter column "uid" drop default; +alter table "public"."thread" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."thread" alter column "uid" set default human_uuid.huid(); + +alter table "public"."thread_attachment" alter column "uid" drop default; +alter table "public"."thread_attachment" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."thread_attachment" alter column "uid" set default human_uuid.huid(); + +alter table "public"."thread_attachment_emoji" alter column "uid" drop default; +alter table "public"."thread_attachment_emoji" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."thread_attachment_emoji" alter column "uid" set default human_uuid.huid(); + +alter table "public"."thread_attachment_vote" alter column "uid" drop default; +alter table "public"."thread_attachment_vote" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."thread_attachment_vote" alter column "uid" set default human_uuid.huid(); + +alter table "public"."thread_feed" alter column "uid" drop default; +alter table "public"."thread_feed" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."thread_feed" alter column "uid" set default human_uuid.huid(); + +alter table "public"."usr" alter column "uid" drop default; +alter table "public"."usr" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."usr" alter column "uid" set default human_uuid.huid(); + +CREATE UNIQUE INDEX object_pkey ON human_uuid.object USING btree (id); + +CREATE UNIQUE INDEX object_word_key ON human_uuid.object USING btree (word); + +CREATE UNIQUE INDEX predicate_pkey ON human_uuid.predicate USING btree (id); + +CREATE UNIQUE INDEX predicate_word_key ON human_uuid.predicate USING btree (word); + +CREATE UNIQUE INDEX used_pkey ON human_uuid.used USING btree (huid); + +CREATE UNIQUE INDEX grp_uid_key ON public.grp USING btree (uid); + +CREATE UNIQUE INDEX perm_uid_key ON public.perm USING btree (uid); + +CREATE UNIQUE INDEX thread_attachment_emoji_uid_key ON public.thread_attachment_emoji USING btree (uid); + +CREATE UNIQUE INDEX thread_attachment_uid_key ON public.thread_attachment USING btree (uid); + +CREATE UNIQUE INDEX thread_attachment_vote_uid_key ON public.thread_attachment_vote USING btree (uid); + +CREATE UNIQUE INDEX thread_feed_uid_key ON public.thread_feed USING btree (uid); + +CREATE UNIQUE INDEX thread_uid_key ON public.thread USING btree (uid); + +CREATE UNIQUE INDEX usr_uid_key ON public.usr USING btree (uid); + +alter table "human_uuid"."object" add constraint "object_pkey" PRIMARY KEY using index "object_pkey"; + +alter table "human_uuid"."predicate" add constraint "predicate_pkey" PRIMARY KEY using index "predicate_pkey"; + +alter table "human_uuid"."used" add constraint "used_pkey" PRIMARY KEY using index "used_pkey"; + +alter table "human_uuid"."object" add constraint "object_word_key" UNIQUE using index "object_word_key"; + +alter table "human_uuid"."predicate" add constraint "predicate_word_key" UNIQUE using index "predicate_word_key"; + +alter table "public"."grp" add constraint "grp_uid_key" UNIQUE using index "grp_uid_key"; + +alter table "public"."perm" add constraint "perm_uid_key" UNIQUE using index "perm_uid_key"; + +alter table "public"."thread" add constraint "thread_uid_key" UNIQUE using index "thread_uid_key"; + +alter table "public"."thread_attachment" add constraint "thread_attachment_uid_key" UNIQUE using index "thread_attachment_uid_key"; + +alter table "public"."thread_attachment_emoji" add constraint "thread_attachment_emoji_uid_key" UNIQUE using index "thread_attachment_emoji_uid_key"; + +alter table "public"."thread_attachment_vote" add constraint "thread_attachment_vote_uid_key" UNIQUE using index "thread_attachment_vote_uid_key"; + +alter table "public"."thread_feed" add constraint "thread_feed_uid_key" UNIQUE using index "thread_feed_uid_key"; + +alter table "public"."usr" add constraint "usr_uid_key" UNIQUE using index "usr_uid_key"; + +set check_function_bodies = off; + +CREATE OR REPLACE FUNCTION public.do_insert_community_perm() + RETURNS trigger + LANGUAGE plpgsql +AS $function$ +begin + -- TODO: insert some default community groups, use community_XX_admin as group owner + + insert into public.perm + (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) + values + ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/posts', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') + , ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/tag', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') + , ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/deleted', (public.get_acting_usr()).id, NEW.id, 'w', 'w', '-') + ; + + return new; +end; +$function$ +; + +CREATE OR REPLACE FUNCTION public.do_insert_grp_perm() + RETURNS trigger + LANGUAGE plpgsql +AS $function$ +begin + insert into public.perm + (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) + values + ('/groups/' || human_uuid.huid_to_string(NEW.uid) || '/members', (public.get_acting_usr()).id, NEW.id, 'w', 'w', '-') + , ('/groups/' || human_uuid.huid_to_string(NEW.uid) || '/tag', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') + ; + + return new; +end; +$function$ +; + +CREATE OR REPLACE FUNCTION public.do_insert_usr_perm() + RETURNS trigger + LANGUAGE plpgsql +AS $function$ +declare + admins int; +begin + admins := (public.grp_admins()).id; + + insert into public.perm + (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) + values + ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/tag', NEW.id, admins, 'w', 'w', 'r') + , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/email', NEW.id, admins, 'w', 'w', '-') + , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/deleted', NEW.id, admins, 'w', 'w', '-') + , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/password', NEW.id, admins, 'w', 'w', '-') + ; + + return new; +end; +$function$ +; + +CREATE OR REPLACE FUNCTION public.do_usr_create_default_grp() + RETURNS trigger + LANGUAGE plpgsql +AS $function$ +declare + new_grp int; +begin + insert into public.grp (tag) + values (grp_tag_of_string('usr_' || new.uid)) + returning id into new_grp; + + perform public.grp_add_member(to_grp => new_grp, add_usr => new.id); + + update public.perm + set owner_user = (public.usr_root()).id + , owner_group = (public.grp_admins()).id + where path = '/groups/' || new_grp || '/members' + or path = '/groups/' || new_grp || '/tag'; + + return null; +end; +$function$ +; + +CREATE OR REPLACE FUNCTION public.get_acting_usr() + RETURNS usr + LANGUAGE plpgsql +AS $function$ +declare + uid text; + acting_usr public.usr; +begin + if nullif(current_setting('dnim.usr_uid', true), '') is null then + acting_usr := public.usr_root(); + else + select u.* + from public.usr u + where u.uid = human_uuid.huid_of_string(current_setting('dnim.usr_uid', true)) + into acting_usr; + end if; + + return acting_usr; +end; +$function$ +; + + diff --git a/migrations/stage@8b08d9f_to_stage@0.0.7.sql b/migrations/stage@8b08d9f_to_stage@0.0.7.sql deleted file mode 100644 index c3f0b54..0000000 --- a/migrations/stage@8b08d9f_to_stage@0.0.7.sql +++ /dev/null @@ -1,288 +0,0 @@ -create schema if not exists "human_uuid"; - -create table "human_uuid"."object" ( - "id" integer generated always as identity not null, - "word" text -); - - -create table "human_uuid"."predicate" ( - "id" integer generated always as identity not null, - "word" text -); - - -create table "human_uuid"."used" ( - "huid" text not null -); - -create type "human_uuid"."huid" as ("str" text); - -CREATE OR REPLACE FUNCTION human_uuid.huid() - RETURNS human_uuid.huid - LANGUAGE plpgsql -AS $function$ -declare - tries int := 0; - uniq bool := false; - uuid bytea; - uuid_bits int[] := array[] :: int[]; - pred_1_int int; - pred_2_int int; - pred_3_int int; - object_int int; - pred_1 text; - pred_2 text; - pred_3 text; - object text; - huid_text text; -begin - while not uniq loop - if tries > 1000 then - raise exception 'failed to find uniq huid after 1000 attempts'; - end if; - - tries := tries + 1; - - uuid := decode(replace(gen_random_uuid() :: text, '-', ''), 'hex'); - for b in 0..(bit_length(uuid) - 1) loop - uuid_bits := uuid_bits || get_bit(uuid, b); - end loop; - - pred_1_int := (lpad(array_to_string(uuid_bits[1:10], ''), 32, '0') :: bit(32)) :: int; - pred_1_int := pred_1_int + (lpad(array_to_string(uuid_bits[11:14], ''), 32, '0') :: bit(32)) :: int; - - pred_2_int := (lpad(array_to_string(uuid_bits[15:24], ''), 32, '0') :: bit(32)) :: int; - pred_2_int := pred_2_int + (lpad(array_to_string(uuid_bits[25:27], ''), 32, '0') :: bit(32)) :: int; - - pred_3_int := (lpad(array_to_string(uuid_bits[28:37], ''), 32, '0') :: bit(32)) :: int; - pred_3_int := pred_3_int + (lpad(array_to_string(uuid_bits[38:40], ''), 32, '0') :: bit(32)) :: int; - - object_int := (lpad(array_to_string(uuid_bits[41:51], ''), 32, '0') :: bit(32)) :: int; - - select word from human_uuid.predicate where id = pred_1_int into pred_1; - select word from human_uuid.predicate where id = pred_2_int into pred_2; - select word from human_uuid.predicate where id = pred_3_int into pred_3; - select word from human_uuid.object where id = object_int into object; - - huid_text := pred_1 || '-' || pred_2 || '-' || pred_3 || '-' || object; - - uniq := (select count(*) from human_uuid.used where huid = huid_text) = 0; - end loop; - - return human_uuid.huid_of_string(huid_text); -end; -$function$ -; - -CREATE OR REPLACE FUNCTION human_uuid.huid_of_string(val text) - RETURNS human_uuid.huid - LANGUAGE sql -AS $function$select row(val);$function$ -; - -CREATE OR REPLACE FUNCTION human_uuid.huid_to_string(val human_uuid.huid) - RETURNS text - LANGUAGE sql -AS $function$select (val.str);$function$ -; - - -alter table "public"."community" alter column "uid" drop default; -alter table "public"."community" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."community" alter column "uid" set default human_uuid.huid(); - -alter table "public"."grp" alter column "uid" drop default; -alter table "public"."grp" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."grp" alter column "uid" set default human_uuid.huid(); - -alter table "public"."perm" alter column "uid" drop default; -alter table "public"."perm" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."perm" alter column "uid" set default human_uuid.huid(); - -alter table "public"."thread" alter column "uid" drop default; -alter table "public"."thread" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."thread" alter column "uid" set default human_uuid.huid(); - -alter table "public"."thread_attachment" alter column "uid" drop default; -alter table "public"."thread_attachment" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."thread_attachment" alter column "uid" set default human_uuid.huid(); - -alter table "public"."thread_attachment_emoji" alter column "uid" drop default; -alter table "public"."thread_attachment_emoji" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."thread_attachment_emoji" alter column "uid" set default human_uuid.huid(); - -alter table "public"."thread_attachment_vote" alter column "uid" drop default; -alter table "public"."thread_attachment_vote" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."thread_attachment_vote" alter column "uid" set default human_uuid.huid(); - -alter table "public"."thread_feed" alter column "uid" drop default; -alter table "public"."thread_feed" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."thread_feed" alter column "uid" set default human_uuid.huid(); - -alter table "public"."usr" alter column "uid" drop default; -alter table "public"."usr" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); -alter table "public"."usr" alter column "uid" set default human_uuid.huid(); - -CREATE UNIQUE INDEX object_pkey ON human_uuid.object USING btree (id); - -CREATE UNIQUE INDEX object_word_key ON human_uuid.object USING btree (word); - -CREATE UNIQUE INDEX predicate_pkey ON human_uuid.predicate USING btree (id); - -CREATE UNIQUE INDEX predicate_word_key ON human_uuid.predicate USING btree (word); - -CREATE UNIQUE INDEX used_pkey ON human_uuid.used USING btree (huid); - -CREATE UNIQUE INDEX grp_uid_key ON public.grp USING btree (uid); - -CREATE UNIQUE INDEX perm_uid_key ON public.perm USING btree (uid); - -CREATE UNIQUE INDEX thread_attachment_emoji_uid_key ON public.thread_attachment_emoji USING btree (uid); - -CREATE UNIQUE INDEX thread_attachment_uid_key ON public.thread_attachment USING btree (uid); - -CREATE UNIQUE INDEX thread_attachment_vote_uid_key ON public.thread_attachment_vote USING btree (uid); - -CREATE UNIQUE INDEX thread_feed_uid_key ON public.thread_feed USING btree (uid); - -CREATE UNIQUE INDEX thread_uid_key ON public.thread USING btree (uid); - -CREATE UNIQUE INDEX usr_uid_key ON public.usr USING btree (uid); - -alter table "human_uuid"."object" add constraint "object_pkey" PRIMARY KEY using index "object_pkey"; - -alter table "human_uuid"."predicate" add constraint "predicate_pkey" PRIMARY KEY using index "predicate_pkey"; - -alter table "human_uuid"."used" add constraint "used_pkey" PRIMARY KEY using index "used_pkey"; - -alter table "human_uuid"."object" add constraint "object_word_key" UNIQUE using index "object_word_key"; - -alter table "human_uuid"."predicate" add constraint "predicate_word_key" UNIQUE using index "predicate_word_key"; - -alter table "public"."grp" add constraint "grp_uid_key" UNIQUE using index "grp_uid_key"; - -alter table "public"."perm" add constraint "perm_uid_key" UNIQUE using index "perm_uid_key"; - -alter table "public"."thread" add constraint "thread_uid_key" UNIQUE using index "thread_uid_key"; - -alter table "public"."thread_attachment" add constraint "thread_attachment_uid_key" UNIQUE using index "thread_attachment_uid_key"; - -alter table "public"."thread_attachment_emoji" add constraint "thread_attachment_emoji_uid_key" UNIQUE using index "thread_attachment_emoji_uid_key"; - -alter table "public"."thread_attachment_vote" add constraint "thread_attachment_vote_uid_key" UNIQUE using index "thread_attachment_vote_uid_key"; - -alter table "public"."thread_feed" add constraint "thread_feed_uid_key" UNIQUE using index "thread_feed_uid_key"; - -alter table "public"."usr" add constraint "usr_uid_key" UNIQUE using index "usr_uid_key"; - -set check_function_bodies = off; - - -CREATE OR REPLACE FUNCTION public.do_insert_community_perm() - RETURNS trigger - LANGUAGE plpgsql -AS $function$ -begin - -- TODO: insert some default community groups, use community_XX_admin as group owner - - insert into public.perm - (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) - values - ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/posts', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') - , ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/tag', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') - , ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/deleted', (public.get_acting_usr()).id, NEW.id, 'w', 'w', '-') - ; - - return new; -end; -$function$ -; - -CREATE OR REPLACE FUNCTION public.do_insert_grp_perm() - RETURNS trigger - LANGUAGE plpgsql -AS $function$ -begin - insert into public.perm - (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) - values - ('/groups/' || human_uuid.huid_to_string(NEW.uid) || '/members', (public.get_acting_usr()).id, NEW.id, 'w', 'w', '-') - , ('/groups/' || human_uuid.huid_to_string(NEW.uid) || '/tag', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') - ; - - return new; -end; -$function$ -; - -CREATE OR REPLACE FUNCTION public.do_insert_usr_perm() - RETURNS trigger - LANGUAGE plpgsql -AS $function$ -declare - admins int; -begin - admins := (public.grp_admins()).id; - - insert into public.perm - (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) - values - ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/tag', NEW.id, admins, 'w', 'w', 'r') - , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/email', NEW.id, admins, 'w', 'w', '-') - , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/deleted', NEW.id, admins, 'w', 'w', '-') - , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/password', NEW.id, admins, 'w', 'w', '-') - ; - - return new; -end; -$function$ -; - -CREATE OR REPLACE FUNCTION public.do_usr_create_default_grp() - RETURNS trigger - LANGUAGE plpgsql -AS $function$ -declare - new_grp int; -begin - insert into public.grp (tag) - values (grp_tag_of_string('usr_' || new.uid)) - returning id into new_grp; - - perform public.grp_add_member(to_grp => new_grp, add_usr => new.id); - - update public.perm - set owner_user = (public.usr_root()).id - , owner_group = (public.grp_admins()).id - where path = '/groups/' || new_grp || '/members' - or path = '/groups/' || new_grp || '/tag'; - - return null; -end; -$function$ -; - -CREATE OR REPLACE FUNCTION public.get_acting_usr() - RETURNS usr - LANGUAGE plpgsql -AS $function$ -declare - uid text; - acting_usr public.usr; -begin - if nullif(current_setting('dnim.usr_uid', true), '') is null then - acting_usr := public.usr_root(); - else - select u.* - from public.usr u - where u.uid = human_uuid.huid_of_string(current_setting('dnim.usr_uid', true)) - into acting_usr; - end if; - - return acting_usr; -end; -$function$ -; - - diff --git a/migrations/stage@8b08d9f_to_stage@0.0.8.sql b/migrations/stage@8b08d9f_to_stage@0.0.8.sql new file mode 100644 index 0000000..f71460e --- /dev/null +++ b/migrations/stage@8b08d9f_to_stage@0.0.8.sql @@ -0,0 +1,4813 @@ +create schema if not exists "human_uuid"; + +create table "human_uuid"."object" ( + "id" integer generated always as identity not null, + "word" text +); + + +create table "human_uuid"."predicate" ( + "id" integer generated always as identity not null, + "word" text +); + + +create table "human_uuid"."used" ( + "huid" text not null +); + +create type "human_uuid"."huid" as ("str" text); + +CREATE OR REPLACE FUNCTION human_uuid.huid() + RETURNS human_uuid.huid + LANGUAGE plpgsql +AS $function$ +declare + tries int := 0; + uniq bool := false; + uuid bytea; + uuid_bits int[] := array[] :: int[]; + pred_1_int int; + pred_2_int int; + pred_3_int int; + object_int int; + pred_1 text; + pred_2 text; + pred_3 text; + object text; + huid_text text; +begin + while not uniq loop + if tries > 1000 then + raise exception 'failed to find uniq huid after 1000 attempts'; + end if; + + tries := tries + 1; + + uuid := decode(replace(gen_random_uuid() :: text, '-', ''), 'hex'); + for b in 0..(bit_length(uuid) - 1) loop + uuid_bits := uuid_bits || get_bit(uuid, b); + end loop; + + pred_1_int := (lpad(array_to_string(uuid_bits[1:10], ''), 32, '0') :: bit(32)) :: int; + pred_1_int := pred_1_int + (lpad(array_to_string(uuid_bits[11:14], ''), 32, '0') :: bit(32)) :: int; + + pred_2_int := (lpad(array_to_string(uuid_bits[15:24], ''), 32, '0') :: bit(32)) :: int; + pred_2_int := pred_2_int + (lpad(array_to_string(uuid_bits[25:27], ''), 32, '0') :: bit(32)) :: int; + + pred_3_int := (lpad(array_to_string(uuid_bits[28:37], ''), 32, '0') :: bit(32)) :: int; + pred_3_int := pred_3_int + (lpad(array_to_string(uuid_bits[38:40], ''), 32, '0') :: bit(32)) :: int; + + object_int := (lpad(array_to_string(uuid_bits[41:51], ''), 32, '0') :: bit(32)) :: int; + + select word from human_uuid.predicate where id = pred_1_int into pred_1; + select word from human_uuid.predicate where id = pred_2_int into pred_2; + select word from human_uuid.predicate where id = pred_3_int into pred_3; + select word from human_uuid.object where id = object_int into object; + + huid_text := pred_1 || '-' || pred_2 || '-' || pred_3 || '-' || object; + + uniq := (select count(*) from human_uuid.used where huid = huid_text) = 0; + end loop; + + return human_uuid.huid_of_string(huid_text); +end; +$function$ +; + +CREATE OR REPLACE FUNCTION human_uuid.huid_of_string(val text) + RETURNS human_uuid.huid + LANGUAGE sql +AS $function$select row(val);$function$ +; + +CREATE OR REPLACE FUNCTION human_uuid.huid_to_string(val human_uuid.huid) + RETURNS text + LANGUAGE sql +AS $function$select (val.str);$function$ +; + +-- OBJECTS >> +insert into human_uuid.object (word) +values + ('aardvark') + , ('aardwolf') + , ('abacus') + , ('abrosaurus') + , ('abstract') + , ('acai') + , ('acapella') + , ('accelerator') + , ('accordion') + , ('account') + , ('achillobator') + , ('acorn') + , ('acoustic') + , ('acrylic') + , ('act') + , ('action') + , ('activity') + , ('actress') + , ('adapter') + , ('adasaurus') + , ('addition') + , ('address') + , ('adjustment') + , ('advantage') + , ('adverb') + , ('aerosteon') + , ('afrovenator') + , ('aftermath') + , ('afternoon') + , ('aftershave') + , ('afterthought') + , ('agate') + , ('age') + , ('agenda') + , ('agreement') + , ('agustinia') + , ('air') + , ('airboat') + , ('airbus') + , ('airedale') + , ('airmail') + , ('airplane') + , ('airport') + , ('airship') + , ('akubra') + , ('alamosaurus') + , ('alarm') + , ('albacore') + , ('albatross') + , ('albertonykus') + , ('albertosaurus') + , ('alder') + , ('aletopelta') + , ('alfalfa') + , ('algebra') + , ('alibi') + , ('alley') + , ('alligator') + , ('allium') + , ('allosaurus') + , ('alloy') + , ('allspice') + , ('almanac') + , ('almandine') + , ('almond') + , ('alpaca') + , ('alphabet') + , ('alto') + , ('aluminum') + , ('alvarezsaurus') + , ('alyssum') + , ('amaranthus') + , ('amaryllis') + , ('amazonsaurus') + , ('ambert') + , ('ambulance') + , ('amethyst') + , ('amount') + , ('amp') + , ('ampersand') + , ('amphibian') + , ('amusement') + , ('anaconda') + , ('anatosaurus') + , ('anchovy') + , ('ancient') + , ('andesaurus') + , ('anemone') + , ('angelfish') + , ('anger') + , ('angle') + , ('anglerfish') + , ('angolatitan') + , ('angora') + , ('animal') + , ('animantarx') + , ('anise') + , ('ankle') + , ('ankylosaurus') + , ('anorak') + , ('answer') + , ('ant') + , ('antarctopelta') + , ('anteater') + , ('antelope') + , ('anthropology') + , ('antimatter') + , ('antimony') + , ('antique') + , ('antler') + , ('antlion') + , ('apartment') + , ('apatosaurus') + , ('aphid') + , ('apogee') + , ('apology') + , ('appalachiosaurus') + , ('apparatus') + , ('apparel') + , ('appeal') + , ('appendix') + , ('apple') + , ('appliance') + , ('approach') + , ('approval') + , ('apricot') + , ('aquarius') + , ('aragon') + , ('aragosaurus') + , ('arch') + , ('archaeology') + , ('archaeopteryx') + , ('archduchess') + , ('archduke') + , ('archeology') + , ('archer') + , ('area') + , ('argon') + , ('argument') + , ('aries') + , ('aristosuchus') + , ('arithmetic') + , ('armadillo') + , ('armchair') + , ('army') + , ('arrhinceratops') + , ('arrow') + , ('art') + , ('arthropod') + , ('artichoke') + , ('article') + , ('ash') + , ('asiago') + , ('asp') + , ('asparagus') + , ('aspen') + , ('asphalt') + , ('aster') + , ('asterisk') + , ('asteroid') + , ('astrodon') + , ('astronaut') + , ('astronomy') + , ('athlete') + , ('atlasaurus') + , ('atmosphere') + , ('atom') + , ('atrociraptor') + , ('attack') + , ('attempt') + , ('attention') + , ('attic') + , ('attraction') + , ('august') + , ('aura') + , ('aurora') + , ('auroraceratops') + , ('author') + , ('authority') + , ('authorization') + , ('avatar') + , ('avenue') + , ('avocado') + , ('awe') + , ('axolotl') + , ('azalea') + , ('azimuth') + , ('babcat') + , ('baboon') + , ('backbone') + , ('background') + , ('backpack') + , ('bactrosaurus') + , ('badge') + , ('badger') + , ('bag') + , ('bagel') + , ('bagpipe') + , ('bait') + , ('bakery') + , ('balance') + , ('balaur') + , ('ball') + , ('ballcap') + , ('balloon') + , ('balmoral') + , ('bambiraptor') + , ('bamboo') + , ('banana') + , ('band') + , ('bandana') + , ('bandicoot') + , ('bangle') + , ('banjo') + , ('bank') + , ('bar') + , ('barbecue') + , ('barber') + , ('barberry') + , ('bard') + , ('barge') + , ('baritone') + , ('barn') + , ('barnacle') + , ('barnyard') + , ('barometer') + , ('baron') + , ('baroness') + , ('barracuda') + , ('baryonyx') + , ('baseball') + , ('basement') + , ('basil') + , ('basilisk') + , ('basin') + , ('basket') + , ('basketball') + , ('bass') + , ('bassoon') + , ('bat') + , ('bath') + , ('bathroom') + , ('bathtub') + , ('battery') + , ('bay') + , ('bayberry') + , ('beach') + , ('bead') + , ('beak') + , ('beam') + , ('bean') + , ('beanie') + , ('bear') + , ('bearberry') + , ('beard') + , ('bearskin') + , ('beast') + , ('beat') + , ('beaufort') + , ('beauty') + , ('becklespinax') + , ('bed') + , ('bedbug') + , ('bee') + , ('beech') + , ('beechnut') + , ('beet') + , ('beetle') + , ('beginner') + , ('begonia') + , ('behavior') + , ('belief') + , ('bell') + , ('bellflower') + , ('bellusaurus') + , ('belt') + , ('beluga') + , ('bench') + , ('beret') + , ('bergamot') + , ('berry') + , ('beryllium') + , ('bestseller') + , ('bicycle') + , ('bike') + , ('bill') + , ('billboard') + , ('binder') + , ('biology') + , ('biplane') + , ('birch') + , ('bird') + , ('birthday') + , ('bismuth') + , ('bison') + , ('bistro') + , ('bit') + , ('bite') + , ('bittersweet') + , ('blackberry') + , ('blackbird') + , ('blackcurrant') + , ('bladder') + , ('blade') + , ('blanket') + , ('blarney') + , ('blender') + , ('blinker') + , ('blizzard') + , ('block') + , ('bloom') + , ('blossom') + , ('blouse') + , ('blue') + , ('bluebell') + , ('boa') + , ('boar') + , ('board') + , ('boat') + , ('boater') + , ('bobble') + , ('bobcat') + , ('bobolink') + , ('bolt') + , ('bongo') + , ('bonnet') + , ('bonobo') + , ('bonsai') + , ('book') + , ('bookcase') + , ('booklet') + , ('boot') + , ('booth') + , ('border') + , ('borogovia') + , ('boron') + , ('bosworth') + , ('botany') + , ('bottle') + , ('bottom') + , ('bougon') + , ('bounce') + , ('boursin') + , ('bow') + , ('bowl') + , ('bowler') + , ('box') + , ('boysenberry') + , ('brace') + , ('brachiosaurus') + , ('bracket') + , ('braid') + , ('brain') + , ('brake') + , ('bramble') + , ('branch') + , ('brand') + , ('brass') + , ('brazil') + , ('bread') + , ('breadfruit') + , ('break') + , ('breakfast') + , ('bream') + , ('breath') + , ('breeze') + , ('brick') + , ('bridge') + , ('brie') + , ('brisket') + , ('broccoli') + , ('brochure') + , ('broker') + , ('bromine') + , ('brontomerus') + , ('bronze') + , ('brook') + , ('broom') + , ('brother') + , ('brow') + , ('brownie') + , ('browser') + , ('brush') + , ('bubble') + , ('bubbler') + , ('buckaroo') + , ('bucket') + , ('buckthorn') + , ('buckthornpepperberry') + , ('budget') + , ('buffalo') + , ('buffer') + , ('buffet') + , ('bug') + , ('bugle') + , ('building') + , ('bulb') + , ('bumper') + , ('bun') + , ('burglar') + , ('burn') + , ('burrito') + , ('burst') + , ('bus') + , ('butter') + , ('buttercup') + , ('butterfly') + , ('butterkase') + , ('butternut') + , ('button') + , ('buzzard') + , ('cabbage') + , ('cabin') + , ('cabinet') + , ('cacao') + , ('cactus') + , ('cadet') + , ('cadmium') + , ('cafe') + , ('cairnsmore') + , ('cake') + , ('calcium') + , ('calculator') + , ('calendula') + , ('calf') + , ('calliandra') + , ('camel') + , ('camelotia') + , ('camera') + , ('camp') + , ('can') + , ('canary') + , ('candle') + , ('candy') + , ('candytuft') + , ('canidae') + , ('cannon') + , ('canoe') + , ('canopy') + , ('cantaloupe') + , ('canvas') + , ('cap') + , ('capacity') + , ('caper') + , ('cappelletti') + , ('capri') + , ('capricorn') + , ('captain') + , ('caption') + , ('capybara') + , ('car') + , ('caravan') + , ('caravel') + , ('caraway') + , ('carbon') + , ('card') + , ('cardamom') + , ('cardboard') + , ('cardigan') + , ('cardinal') + , ('care') + , ('caribou') + , ('carnation') + , ('carob') + , ('carol') + , ('carp') + , ('carpenter') + , ('carpet') + , ('carriage') + , ('carrot') + , ('cart') + , ('cartoon') + , ('cartwheel') + , ('carver') + , ('case') + , ('cashew') + , ('casquette') + , ('cast') + , ('castanet') + , ('cat') + , ('catamaran') + , ('catboat') + , ('catcher') + , ('caterpillar') + , ('catfish') + , ('cathedral') + , ('catmint') + , ('catshark') + , ('catsup') + , ('cattle') + , ('cauliflower') + , ('cause') + , ('caution') + , ('cave') + , ('cayenne') + , ('ceder') + , ('ceiling') + , ('celery') + , ('celestite') + , ('cell') + , ('cellar') + , ('cello') + , ('celsius') + , ('cement') + , ('cemetery') + , ('cent') + , ('centaur') + , ('centipede') + , ('century') + , ('cephalopod') + , ('ceramic') + , ('ceratonykus') + , ('cereal') + , ('cerise') + , ('cesium') + , ('chair') + , ('chalk') + , ('challenge') + , ('chameleon') + , ('chamomile') + , ('chance') + , ('change') + , ('channel') + , ('chanter') + , ('character') + , ('charger') + , ('chartreuse') + , ('chasmosaurus') + , ('chatter') + , ('chauffeur') + , ('check') + , ('cheddar') + , ('cheek') + , ('cheese') + , ('cheetah') + , ('chef') + , ('chemistry') + , ('cheque') + , ('cherry') + , ('cheshire') + , ('chess') + , ('chestnut') + , ('chevre') + , ('chickadee') + , ('chicken') + , ('chicory') + , ('child') + , ('chili') + , ('chill') + , ('chiller') + , ('chime') + , ('chimpanzee') + , ('chinchilla') + , ('chip') + , ('chipmunk') + , ('chips') + , ('chive') + , ('chocolate') + , ('chokeberry') + , ('chopper') + , ('chord') + , ('christmas') + , ('chronometer') + , ('chrysanthemum') + , ('chungkingosaurus') + , ('church') + , ('cicada') + , ('cilantro') + , ('cinema') + , ('cinnamon') + , ('circle') + , ('circus') + , ('cirrus') + , ('citipati') + , ('citizen') + , ('citrine') + , ('citron') + , ('citrus') + , ('city') + , ('clam') + , ('clarinet') + , ('class') + , ('clave') + , ('clavicle') + , ('clef') + , ('clematis') + , ('clementine') + , ('click') + , ('client') + , ('climb') + , ('clipper') + , ('cloak') + , ('cloche') + , ('clock') + , ('close') + , ('closet') + , ('cloth') + , ('cloud') + , ('cloudberry') + , ('clove') + , ('clover') + , ('clownfish') + , ('club') + , ('clutch') + , ('coal') + , ('coast') + , ('coaster') + , ('coat') + , ('cobalt') + , ('cobbler') + , ('cobra') + , ('cobweb') + , ('cockatoo') + , ('cockroach') + , ('cocoa') + , ('coconut') + , ('cod') + , ('coelurus') + , ('coffee') + , ('coil') + , ('coin') + , ('colby') + , ('cold') + , ('collar') + , ('collarbone') + , ('collard') + , ('college') + , ('collision') + , ('colony') + , ('color') + , ('colossus') + , ('colt') + , ('column') + , ('columnist') + , ('comb') + , ('comet') + , ('comfort') + , ('comic') + , ('comma') + , ('composer') + , ('computer') + , ('comte') + , ('concavenator') + , ('conchoraptor') + , ('concrete') + , ('condition') + , ('condor') + , ('condorraptor') + , ('cone') + , ('coneflower') + , ('confidence') + , ('conga') + , ('congress') + , ('conifer') + , ('conkerberry') + , ('consonant') + , ('constellation') + , ('constrictor') + , ('continent') + , ('contraption') + , ('cook') + , ('cookie') + , ('copper') + , ('copy') + , ('coral') + , ('cord') + , ('coreopsis') + , ('coriander') + , ('cork') + , ('corleggy') + , ('cormorant') + , ('corn') + , ('cornet') + , ('cornflower') + , ('cornucopia') + , ('cosmonaut') + , ('cosmos') + , ('cost') + , ('cotija') + , ('cotton') + , ('couch') + , ('cougar') + , ('cough') + , ('count') + , ('countess') + , ('country') + , ('course') + , ('court') + , ('cousin') + , ('cover') + , ('cow') + , ('cowbell') + , ('cowl') + , ('coyote') + , ('crab') + , ('crabapple') + , ('crafter') + , ('crane') + , ('crate') + , ('crater') + , ('crawdad') + , ('crayfish') + , ('crayon') + , ('creator') + , ('creature') + , ('credit') + , ('creek') + , ('crepe') + , ('cress') + , ('crest') + , ('crib') + , ('cricket') + , ('crime') + , ('crocodile') + , ('crocus') + , ('croissant') + , ('crop') + , ('cross') + , ('crow') + , ('crowberry') + , ('crowd') + , ('crowley') + , ('crown') + , ('cruiser') + , ('crustacean') + , ('cry') + , ('crystal') + , ('cub') + , ('cuckoo') + , ('cucumber') + , ('culotte') + , ('cup') + , ('cupboard') + , ('cupcake') + , ('curiosity') + , ('curler') + , ('currant') + , ('currency') + , ('curtain') + , ('curve') + , ('cushion') + , ('custard') + , ('cut') + , ('cuticle') + , ('cyclamen') + , ('cycle') + , ('cyclone') + , ('cylinder') + , ('cymbal') + , ('daemonosaurus') + , ('daffodil') + , ('dahlia') + , ('damselfly') + , ('dance') + , ('dancer') + , ('dandelion') + , ('danger') + , ('danthus') + , ('daphne') + , ('darkness') + , ('dart') + , ('dash') + , ('data') + , ('dataset') + , ('date') + , ('daughter') + , ('dawn') + , ('day') + , ('dead') + , ('deal') + , ('debt') + , ('decade') + , ('decimal') + , ('decision') + , ('dedication') + , ('deer') + , ('deerstalker') + , ('degree') + , ('delivery') + , ('delphinium') + , ('deltadromeus') + , ('den') + , ('denim') + , ('dentist') + , ('department') + , ('deposit') + , ('derby') + , ('desert') + , ('desk') + , ('dessert') + , ('detail') + , ('detective') + , ('device') + , ('devourer') + , ('dew') + , ('dewberry') + , ('diabloceratops') + , ('diadem') + , ('diagnostic') + , ('diagram') + , ('diamond') + , ('dianella') + , ('diascia') + , ('dibble') + , ('dichondra') + , ('dietician') + , ('digestion') + , ('digit') + , ('dill') + , ('dilophosaurus') + , ('dime') + , ('dimple') + , ('dinghy') + , ('dinner') + , ('dinosaur') + , ('diplodocus') + , ('diploma') + , ('direction') + , ('dirigible') + , ('dirt') + , ('discovery') + , ('dish') + , ('distance') + , ('ditto') + , ('dive') + , ('diver') + , ('dog') + , ('dogsled') + , ('dogwood') + , ('dollar') + , ('dolomite') + , ('dolphin') + , ('domain') + , ('donkey') + , ('donut') + , ('doom') + , ('door') + , ('doppler') + , ('dormouse') + , ('double') + , ('dove') + , ('dracopelta') + , ('dracorex') + , ('dragon') + , ('dragonfly') + , ('dragonfruit') + , ('drain') + , ('draw') + , ('drawbridge') + , ('drawer') + , ('dreadnought') + , ('dream') + , ('dress') + , ('dresser') + , ('drifter') + , ('drill') + , ('drink') + , ('drip') + , ('drive') + , ('driver') + , ('drizzle') + , ('drop') + , ('droplet') + , ('drum') + , ('dry') + , ('dryer') + , ('dryosaurus') + , ('duchess') + , ('duck') + , ('duckling') + , ('dugong') + , ('dugout') + , ('duke') + , ('dumpling') + , ('dungeon') + , ('durian') + , ('dust') + , ('dye') + , ('eagle') + , ('ear') + , ('earl') + , ('earth') + , ('earthquake') + , ('earthworm') + , ('earwig') + , ('ease') + , ('echidna') + , ('echinacea') + , ('echinodon') + , ('echium') + , ('echo') + , ('eclipse') + , ('edam') + , ('edge') + , ('editor') + , ('editorial') + , ('education') + , ('eel') + , ('effect') + , ('efraasia') + , ('egg') + , ('eggnog') + , ('eggplant') + , ('elbow') + , ('elderberry') + , ('element') + , ('elephant') + , ('elf') + , ('elk') + , ('ellipse') + , ('elm') + , ('emmental') + , ('emoji') + , ('emperor') + , ('empress') + , ('emu') + , ('end') + , ('enemy') + , ('energy') + , ('engine') + , ('engineer') + , ('english') + , ('enigmosaurus') + , ('enquiry') + , ('enthusiasm') + , ('entrance') + , ('entree') + , ('environment') + , ('eocursor') + , ('eoraptor') + , ('epoch') + , ('epoxy') + , ('equinox') + , ('equipment') + , ('era') + , ('erigeron') + , ('ermine') + , ('error') + , ('espadrille') + , ('estimate') + , ('ethernet') + , ('eucalyptus') + , ('euphonium') + , ('eustoma') + , ('evening') + , ('event') + , ('evergreen') + , ('exception') + , ('exhaust') + , ('existence') + , ('exoplanet') + , ('expansion') + , ('experience') + , ('expert') + , ('explanation') + , ('eye') + , ('eyebrow') + , ('eyelash') + , ('eyeliner') + , ('fabrosaurus') + , ('face') + , ('fact') + , ('factory') + , ('fahrenheit') + , ('failing') + , ('falcon') + , ('fall') + , ('family') + , ('fan') + , ('fanatic') + , ('fang') + , ('farm') + , ('farmer') + , ('farmhouse') + , ('fascinator') + , ('fastball') + , ('father') + , ('faucet') + , ('fear') + , ('feast') + , ('feather') + , ('fedora') + , ('feeling') + , ('feels') + , ('feet') + , ('felidae') + , ('femur') + , ('fender') + , ('fennel') + , ('fenugreek') + , ('fern') + , ('fernleaf') + , ('ferret') + , ('ferry') + , ('ferryboat') + , ('feta') + , ('feverfew') + , ('fiber') + , ('fibre') + , ('fibula') + , ('fiction') + , ('field') + , ('fifth') + , ('fig') + , ('fight') + , ('fighter') + , ('figure') + , ('filament') + , ('file') + , ('fin') + , ('finch') + , ('find') + , ('fine') + , ('fir') + , ('fire') + , ('firefly') + , ('fireman') + , ('fireplace') + , ('fireplant') + , ('firewall') + , ('fish') + , ('fisher') + , ('fisherman') + , ('flag') + , ('flame') + , ('flamingo') + , ('flannel') + , ('flare') + , ('flat') + , ('flavor') + , ('flax') + , ('flea') + , ('flier') + , ('flight') + , ('flock') + , ('flood') + , ('floor') + , ('floss') + , ('flower') + , ('fluorine') + , ('flute') + , ('fly') + , ('flyaway') + , ('flyingfish') + , ('foam') + , ('foe') + , ('fog') + , ('fold') + , ('fontina') + , ('food') + , ('football') + , ('force') + , ('forecast') + , ('forest') + , ('forger') + , ('forgery') + , ('fork') + , ('form') + , ('forsythia') + , ('fortnight') + , ('foundation') + , ('fountain') + , ('fowl') + , ('fox') + , ('foxglove') + , ('foxtail') + , ('foxtrot') + , ('fragment') + , ('fragrance') + , ('frame') + , ('freckle') + , ('freedom') + , ('freesia') + , ('freeze') + , ('freezer') + , ('freighter') + , ('freon') + , ('friction') + , ('friday') + , ('fridge') + , ('friend') + , ('frigate') + , ('fright') + , ('frill') + , ('frog') + , ('front') + , ('frost') + , ('frown') + , ('fruit') + , ('fruitadens') + , ('fuchsia') + , ('fuel') + , ('fukuiraptor') + , ('function') + , ('fur') + , ('furniture') + , ('gadget') + , ('galaxy') + , ('galette') + , ('galleon') + , ('galley') + , ('galliform') + , ('gallimimus') + , ('gallium') + , ('gallon') + , ('gambler') + , ('game') + , ('gander') + , ('garage') + , ('garden') + , ('gardenia') + , ('gargoyle') + , ('gargoyleosaurus') + , ('garlic') + , ('garment') + , ('garnet') + , ('gas') + , ('gasoline') + , ('gasosaurus') + , ('gastonia') + , ('gate') + , ('gateway') + , ('gatsby') + , ('gauge') + , ('gazelle') + , ('gear') + , ('gecko') + , ('geese') + , ('gem') + , ('gemini') + , ('general') + , ('generation') + , ('geography') + , ('geology') + , ('geometry') + , ('geranium') + , ('gerbera') + , ('gerbil') + , ('germanium') + , ('ghost') + , ('ghoul') + , ('giant') + , ('gibbon') + , ('giganotosaurus') + , ('gigantoraptor') + , ('gigantspinosaurus') + , ('gilmoreosaurus') + , ('ginger') + , ('giraffatitan') + , ('giraffe') + , ('girdle') + , ('giver') + , ('glade') + , ('gladiolus') + , ('glass') + , ('glasses') + , ('glazer') + , ('glider') + , ('glitter') + , ('globe') + , ('globeflower') + , ('glockenspiel') + , ('glove') + , ('glow') + , ('glue') + , ('goal') + , ('gojirasaurus') + , ('gold') + , ('goldenrod') + , ('goldfish') + , ('golf') + , ('gondola') + , ('gong') + , ('gooseberry') + , ('gopher') + , ('gorgonzola') + , ('gorilla') + , ('gosling') + , ('gouda') + , ('gourd') + , ('governor') + , ('grade') + , ('graffiti') + , ('grain') + , ('gram') + , ('grandiflora') + , ('grandparent') + , ('grape') + , ('grapple') + , ('grass') + , ('grasshopper') + , ('gravity') + , ('gray') + , ('grease') + , ('green') + , ('grenadilla') + , ('grey') + , ('griffin') + , ('grill') + , ('grin') + , ('grip') + , ('ground') + , ('group') + , ('grouse') + , ('growth') + , ('gruyere') + , ('guan') + , ('guanaco') + , ('guarantee') + , ('guardian') + , ('guava') + , ('guavaberry') + , ('guest') + , ('guide') + , ('guilty') + , ('guitar') + , ('gull') + , ('gum') + , ('guppy') + , ('gym') + , ('gymnast') + , ('hacksaw') + , ('haddock') + , ('hadrosaurus') + , ('hail') + , ('hair') + , ('haircut') + , ('halibut') + , ('hall') + , ('halloumi') + , ('hallway') + , ('hamburger') + , ('hammer') + , ('hamster') + , ('handball') + , ('handbell') + , ('handle') + , ('handsaw') + , ('handspring') + , ('handstand') + , ('harbor') + , ('hardboard') + , ('hardcover') + , ('hardhat') + , ('hardware') + , ('hare') + , ('harmonica') + , ('harmony') + , ('harp') + , ('harpymimus') + , ('harrier') + , ('hat') + , ('haumea') + , ('havarti') + , ('hawk') + , ('hawthorn') + , ('haze') + , ('headlight') + , ('headline') + , ('headphones') + , ('headstand') + , ('healer') + , ('health') + , ('hearing') + , ('heart') + , ('heat') + , ('heath') + , ('heather') + , ('heaven') + , ('hedge') + , ('hedgehog') + , ('height') + , ('helenium') + , ('helicona') + , ('helicopter') + , ('heliotrope') + , ('helium') + , ('hellebore') + , ('helmet') + , ('help') + , ('helper') + , ('hemisphere') + , ('hen') + , ('henley') + , ('hero') + , ('heron') + , ('herring') + , ('hexagon') + , ('hibiscus') + , ('hickory') + , ('hide') + , ('hill') + , ('hip') + , ('hippodraco') + , ('hippopotamus') + , ('hiss') + , ('hisser') + , ('hockey') + , ('holiday') + , ('hollyhock') + , ('homburg') + , ('homegrown') + , ('honesty') + , ('honey') + , ('honeycrisp') + , ('honeycup') + , ('honeydew') + , ('honeysuckle') + , ('hoodie') + , ('hoof') + , ('hook') + , ('hope') + , ('horesradish') + , ('hornet') + , ('horse') + , ('hortensia') + , ('hose') + , ('hospital') + , ('hosta') + , ('hotel') + , ('hound') + , ('hour') + , ('hourglass') + , ('house') + , ('houseboat') + , ('hovercraft') + , ('hoverfly') + , ('howler') + , ('hub') + , ('hubcap') + , ('huckleberry') + , ('hugger') + , ('humerus') + , ('humidity') + , ('hummingbird') + , ('humor') + , ('hunter') + , ('hurricane') + , ('hyacinth') + , ('hydrangea') + , ('hydrant') + , ('hydrofoil') + , ('hydrogen') + , ('hyena') + , ('hygienic') + , ('hyphen') + , ('hyssop') + , ('iberis') + , ('ice') + , ('iceberg') + , ('icebreaker') + , ('icecream') + , ('icicle') + , ('icon') + , ('idea') + , ('iguana') + , ('iguanacolossus') + , ('iguanadon') + , ('iguanodon') + , ('impala') + , ('impatiens') + , ('impulse') + , ('income') + , ('increase') + , ('index') + , ('indigo') + , ('individual') + , ('industry') + , ('infinity') + , ('ink') + , ('innocent') + , ('innovation') + , ('insect') + , ('inspiration') + , ('intelligence') + , ('interest') + , ('iodine') + , ('iridium') + , ('iris') + , ('iron') + , ('ironclad') + , ('island') + , ('isthmus') + , ('ixia') + , ('jaborosa') + , ('jackal') + , ('jacket') + , ('jackfruit') + , ('jackrabbit') + , ('jaguar') + , ('jam') + , ('jar') + , ('jargon') + , ('jasmine') + , ('jasper') + , ('jaw') + , ('jaxartosaurus') + , ('jay') + , ('jeans') + , ('jeep') + , ('jellyfish') + , ('jersey') + , ('jester') + , ('jet') + , ('jingle') + , ('jitterbug') + , ('jobaria') + , ('jodhpur') + , ('joggers') + , ('join') + , ('joke') + , ('jonquil') + , ('journey') + , ('judge') + , ('judo') + , ('juice') + , ('jujube') + , ('jump') + , ('jumper') + , ('jumpsuit') + , ('juniper') + , ('jupiter') + , ('juravenator') + , ('jury') + , ('justice') + , ('jute') + , ('kangaroo') + , ('kayak') + , ('keeper') + , ('ketch') + , ('ketchup') + , ('kettle') + , ('kettledrum') + , ('key') + , ('keyboard') + , ('kick') + , ('kicker') + , ('kidney') + , ('kileskus') + , ('kilogram') + , ('kilometer') + , ('king') + , ('kingfisher') + , ('kip') + , ('kitchen') + , ('kite') + , ('kitten') + , ('kiwi') + , ('knee') + , ('knife') + , ('knight') + , ('knot') + , ('knuckle') + , ('koala') + , ('koi') + , ('kookaburra') + , ('kosmoceratops') + , ('krill') + , ('krypton') + , ('kryptops') + , ('kumquat') + , ('laborer') + , ('lace') + , ('ladybug') + , ('lake') + , ('lamb') + , ('lamp') + , ('lamprey') + , ('lan') + , ('lancer') + , ('land') + , ('language') + , ('lantana') + , ('lantern') + , ('larch') + , ('lark') + , ('larkspur') + , ('lasagna') + , ('laser') + , ('latency') + , ('lathe') + , ('laugh') + , ('launch') + , ('laundry') + , ('lavender') + , ('law') + , ('lawyer') + , ('layer') + , ('lead') + , ('leader') + , ('leaf') + , ('learning') + , ('leather') + , ('leech') + , ('leek') + , ('legal') + , ('legend') + , ('legume') + , ('lemming') + , ('lemon') + , ('lemonade') + , ('lemongrass') + , ('lemur') + , ('lens') + , ('lentil') + , ('leo') + , ('leopard') + , ('leopon') + , ('leotard') + , ('leptoceratops') + , ('letter') + , ('lettuce') + , ('level') + , ('lever') + , ('libra') + , ('library') + , ('license') + , ('licorice') + , ('lifeboat') + , ('lift') + , ('lifter') + , ('light') + , ('lighter') + , ('lightning') + , ('lightyear') + , ('lilac') + , ('lillipilli') + , ('limburger') + , ('lime') + , ('limit') + , ('limpet') + , ('line') + , ('linen') + , ('lingo') + , ('lingonberry') + , ('link') + , ('linseed') + , ('lint') + , ('lion') + , ('lip') + , ('lipstick') + , ('liquid') + , ('list') + , ('literature') + , ('litter') + , ('liver') + , ('lizard') + , ('llama') + , ('loaf') + , ('loan') + , ('lobe') + , ('lobster') + , ('lock') + , ('locket') + , ('locust') + , ('lodge') + , ('log') + , ('loganberry') + , ('logic') + , ('longan') + , ('longship') + , ('look') + , ('lotus') + , ('louse') + , ('lumber') + , ('lunaria') + , ('lunch') + , ('lung') + , ('lunge') + , ('lungfish') + , ('lupin') + , ('lute') + , ('lychee') + , ('lycra') + , ('lynx') + , ('lyre') + , ('lyric') + , ('macadamia') + , ('macaroni') + , ('macaroon') + , ('macaw') + , ('machine') + , ('mackerel') + , ('macrame') + , ('magazine') + , ('magic') + , ('magician') + , ('magnesium') + , ('magnolia') + , ('magnosaurus') + , ('magpie') + , ('mahogany') + , ('maiasaura') + , ('mail') + , ('mailbox') + , ('mailman') + , ('maize') + , ('makemake') + , ('makeup') + , ('mall') + , ('mallet') + , ('mallow') + , ('mambo') + , ('mammal') + , ('manager') + , ('manatee') + , ('manchego') + , ('mandarin') + , ('mandevilla') + , ('mandible') + , ('mandolin') + , ('mandrill') + , ('mango') + , ('mangosteen') + , ('manicure') + , ('manner') + , ('manta') + , ('mantis') + , ('manuscript') + , ('manx') + , ('map') + , ('maple') + , ('mapusaurus') + , ('maraca') + , ('marble') + , ('march') + , ('mare') + , ('margin') + , ('marigold') + , ('marimba') + , ('marionberry') + , ('marjoram') + , ('market') + , ('marlin') + , ('marmoset') + , ('marmot') + , ('marquess') + , ('marquis') + , ('mars') + , ('marscapone') + , ('marshmallow') + , ('marsupial') + , ('marten') + , ('mascara') + , ('mask') + , ('mass') + , ('mastodon') + , ('mat') + , ('match') + , ('math') + , ('matrix') + , ('maxilla') + , ('may') + , ('mayflower') + , ('mayonnaise') + , ('meadow') + , ('meadowlark') + , ('meal') + , ('measure') + , ('meat') + , ('mechanic') + , ('medallion') + , ('medicine') + , ('medusaceratops') + , ('meerkat') + , ('meeting') + , ('megalosaurus') + , ('megaraptor') + , ('melody') + , ('melon') + , ('memory') + , ('menu') + , ('mercury') + , ('message') + , ('metacarpal') + , ('metal') + , ('metatarsal') + , ('meteor') + , ('meteorite') + , ('meteoroid') + , ('meteorology') + , ('meter') + , ('methane') + , ('mice') + , ('microceratops') + , ('microraptor') + , ('microwave') + , ('middle') + , ('midnight') + , ('mile') + , ('milk') + , ('milkshake') + , ('millennium') + , ('mimosa') + , ('mind') + , ('mine') + , ('minibus') + , ('mink') + , ('minnow') + , ('minotaurasaurus') + , ('mint') + , ('minute') + , ('mirror') + , ('mist') + , ('mistake') + , ('mitten') + , ('mixer') + , ('mixture') + , ('moat') + , ('mochi') + , ('mockingbird') + , ('modem') + , ('mojoceratops') + , ('molasses') + , ('mole') + , ('molecule') + , ('mollusk') + , ('molybdenum') + , ('monarch') + , ('monday') + , ('money') + , ('mongoose') + , ('monitor') + , ('monkey') + , ('month') + , ('mood') + , ('moon') + , ('moonflower') + , ('moonstone') + , ('moose') + , ('moral') + , ('morning') + , ('morocco') + , ('mortarboard') + , ('mosquito') + , ('moss') + , ('moth') + , ('motion') + , ('motor') + , ('motorcycle') + , ('motorist') + , ('mountain') + , ('mouse') + , ('mousepad') + , ('moustache') + , ('mouth') + , ('move') + , ('movie') + , ('mozzarella') + , ('muenster') + , ('mulberry') + , ('mule') + , ('mum') + , ('munchkin') + , ('muscari') + , ('muscle') + , ('muse') + , ('museum') + , ('mushroom') + , ('music') + , ('musician') + , ('muskmelon') + , ('muskox') + , ('mustang') + , ('mustard') + , ('myrtle') + , ('myth') + , ('nail') + , ('name') + , ('nannyberry') + , ('napkin') + , ('naranja') + , ('narcissus') + , ('narwhal') + , ('nasturtium') + , ('nation') + , ('nautilus') + , ('navy') + , ('nebula') + , ('nectarine') + , ('need') + , ('neem') + , ('neighbor') + , ('neighborhood') + , ('nemophila') + , ('neon') + , ('nephew') + , ('neptune') + , ('nerine') + , ('nerve') + , ('nest') + , ('net') + , ('network') + , ('neutral') + , ('newsboy') + , ('newspaper') + , ('newsprint') + , ('newsstand') + , ('newt') + , ('nickel') + , ('niece') + , ('nigella') + , ('night') + , ('nightingale') + , ('nightshade') + , ('ninja') + , ('nitrogen') + , ('node') + , ('noise') + , ('noodle') + , ('noon') + , ('nose') + , ('note') + , ('notebook') + , ('notify') + , ('noun') + , ('nova') + , ('novel') + , ('november') + , ('number') + , ('numeric') + , ('nurse') + , ('nut') + , ('nutmeg') + , ('nutria') + , ('nylon') + , ('nymphea') + , ('oak') + , ('oatmeal') + , ('objective') + , ('oboe') + , ('observation') + , ('observatory') + , ('ocarina') + , ('occupation') + , ('ocean') + , ('ocelot') + , ('ocicat') + , ('octagon') + , ('octave') + , ('october') + , ('octopus') + , ('odometer') + , ('offer') + , ('office') + , ('ogre') + , ('oil') + , ('okra') + , ('olive') + , ('olivine') + , ('omelet') + , ('onion') + , ('onyx') + , ('opal') + , ('open') + , ('opera') + , ('operation') + , ('ophthalmologist') + , ('opinion') + , ('opossum') + , ('opportunity') + , ('option') + , ('orange') + , ('orangutan') + , ('orbit') + , ('orca') + , ('orchestra') + , ('orchid') + , ('order') + , ('oregano') + , ('organ') + , ('organization') + , ('origami') + , ('origin') + , ('oriole') + , ('ornament') + , ('ostrich') + , ('othnielia') + , ('otter') + , ('ounce') + , ('outfit') + , ('output') + , ('outrigger') + , ('oval') + , ('overcoat') + , ('oviraptor') + , ('owl') + , ('owner') + , ('ox') + , ('oxygen') + , ('oyster') + , ('ozraraptor') + , ('package') + , ('packet') + , ('paddleboat') + , ('page') + , ('pail') + , ('paint') + , ('painter') + , ('pair') + , ('pajama') + , ('palladium') + , ('palm') + , ('pamphlet') + , ('pan') + , ('panama') + , ('pancake') + , ('pancreas') + , ('panda') + , ('paneer') + , ('pangolin') + , ('panther') + , ('pantry') + , ('pantydraco') + , ('papaya') + , ('paper') + , ('paperback') + , ('paprika') + , ('papyrus') + , ('parade') + , ('paradox') + , ('parakeet') + , ('parallel') + , ('parallelogram') + , ('paranthodon') + , ('parcel') + , ('parent') + , ('parenthesis') + , ('park') + , ('parka') + , ('parmesan') + , ('parrot') + , ('parrotfish') + , ('parsley') + , ('parsnip') + , ('part') + , ('particle') + , ('partner') + , ('partridge') + , ('party') + , ('passbook') + , ('passenger') + , ('passionfruit') + , ('passive') + , ('pasta') + , ('paste') + , ('pastry') + , ('patch') + , ('patella') + , ('path') + , ('patient') + , ('patio') + , ('paw') + , ('pawpaw') + , ('payment') + , ('pea') + , ('peace') + , ('peach') + , ('peacock') + , ('peak') + , ('peanut') + , ('pear') + , ('pearl') + , ('pecorino') + , ('pedestrian') + , ('pediatrician') + , ('pegasus') + , ('pelican') + , ('pen') + , ('penalty') + , ('pencil') + , ('pendulum') + , ('penguin') + , ('pentaceratops') + , ('pentagon') + , ('peony') + , ('people') + , ('pepper') + , ('pepperberry') + , ('perch') + , ('perfume') + , ('peridot') + , ('perigee') + , ('period') + , ('periodical') + , ('peripheral') + , ('periwinkle') + , ('persimmon') + , ('pet') + , ('petalite') + , ('petroleum') + , ('petunia') + , ('pewter') + , ('phalange') + , ('pharaoh') + , ('pheasant') + , ('philodendron') + , ('philosophy') + , ('phone') + , ('phosphorus') + , ('phrase') + , ('physician') + , ('piano') + , ('piccolo') + , ('pick') + , ('pickle') + , ('pickup') + , ('picture') + , ('pie') + , ('pig') + , ('pigeon') + , ('pigment') + , ('pike') + , ('pillow') + , ('pilot') + , ('pin') + , ('pincushion') + , ('pine') + , ('pineapple') + , ('ping') + , ('pink') + , ('pint') + , ('pipe') + , ('piper') + , ('piranha') + , ('pirate') + , ('pisces') + , ('pitcher') + , ('pizza') + , ('place') + , ('plain') + , ('planarian') + , ('plane') + , ('planet') + , ('plank') + , ('plant') + , ('plantain') + , ('plaster') + , ('plastic') + , ('plate') + , ('platinum') + , ('platypus') + , ('play') + , ('player') + , ('playground') + , ('playroom') + , ('pleasure') + , ('plier') + , ('plot') + , ('plough') + , ('plow') + , ('plum') + , ('plume') + , ('pluto') + , ('plutonium') + , ('plywood') + , ('pocket') + , ('podium') + , ('poet') + , ('poetry') + , ('poinsettia') + , ('point') + , ('poison') + , ('polish') + , ('politician') + , ('polka') + , ('polo') + , ('polonium') + , ('polyanthus') + , ('polyester') + , ('pomegranate') + , ('pomelo') + , ('pond') + , ('pony') + , ('popcorn') + , ('poppyseed') + , ('porch') + , ('porcupine') + , ('porkpie') + , ('porpoise') + , ('port') + , ('porter') + , ('position') + , ('possum') + , ('postage') + , ('postbox') + , ('pot') + , ('potassium') + , ('potato') + , ('potential') + , ('poultry') + , ('powder') + , ('power') + , ('practice') + , ('pram') + , ('prawn') + , ('preface') + , ('prepared') + , ('pressure') + , ('price') + , ('primrose') + , ('primula') + , ('prince') + , ('princess') + , ('principal') + , ('principle') + , ('print') + , ('printer') + , ('process') + , ('produce') + , ('product') + , ('production') + , ('professor') + , ('profit') + , ('promise') + , ('promotion') + , ('proof') + , ('property') + , ('prose') + , ('prosecution') + , ('protest') + , ('protoceratops') + , ('protocol') + , ('provelone') + , ('prune') + , ('pruner') + , ('psychiatrist') + , ('psychology') + , ('ptarmigan') + , ('puck') + , ('pudding') + , ('pufferfish') + , ('puffin') + , ('pull') + , ('pullover') + , ('pulsar') + , ('puma') + , ('pump') + , ('pumpkin') + , ('punch') + , ('punishment') + , ('pupil') + , ('puppet') + , ('puppy') + , ('purchase') + , ('purple') + , ('purpose') + , ('push') + , ('puzzle') + , ('pyjama') + , ('pyramid') + , ('pyrite') + , ('pyroraptor') + , ('python') + , ('quail') + , ('quality') + , ('quark') + , ('quart') + , ('quarter') + , ('quartz') + , ('quasar') + , ('quesadilla') + , ('question') + , ('quicksand') + , ('quiet') + , ('quill') + , ('quilt') + , ('quince') + , ('quit') + , ('quiver') + , ('quokka') + , ('quotation') + , ('rabbit') + , ('raccoon') + , ('racer') + , ('raclette') + , ('radar') + , ('radiator') + , ('radio') + , ('radish') + , ('radium') + , ('radius') + , ('radon') + , ('raft') + , ('ragamuffin') + , ('ragdoll') + , ('rail') + , ('railway') + , ('rain') + , ('rainbow') + , ('raincoat') + , ('rainforest') + , ('rainstorm') + , ('raisin') + , ('raja') + , ('rake') + , ('rambutan') + , ('random') + , ('range') + , ('ranunculus') + , ('raptor') + , ('raptorex') + , ('rat') + , ('rattlesnake') + , ('raven') + , ('raver') + , ('ravioli') + , ('ray') + , ('rayon') + , ('reaction') + , ('reader') + , ('reading') + , ('reaper') + , ('reason') + , ('receipt') + , ('recess') + , ('record') + , ('recorder') + , ('red') + , ('redcurrant') + , ('referee') + , ('reference') + , ('region') + , ('regnosaurus') + , ('reindeer') + , ('relation') + , ('relative') + , ('relish') + , ('reminder') + , ('repair') + , ('replace') + , ('reply') + , ('report') + , ('reptile') + , ('request') + , ('research') + , ('resistance') + , ('resolution') + , ('resonance') + , ('respect') + , ('responsibility') + , ('rest') + , ('restaurant') + , ('result') + , ('revolve') + , ('reward') + , ('rhinoceros') + , ('rhodium') + , ('rhubarb') + , ('rhythm') + , ('rib') + , ('rice') + , ('ricotta') + , ('riddle') + , ('ridge') + , ('ring') + , ('ringer') + , ('rise') + , ('risk') + , ('river') + , ('riverbed') + , ('road') + , ('roadrunner') + , ('roadway') + , ('roar') + , ('roarer') + , ('roast') + , ('robe') + , ('robin') + , ('rock') + , ('rocket') + , ('rodent') + , ('roll') + , ('romano') + , ('rondeletia') + , ('roof') + , ('rook') + , ('room') + , ('rooster') + , ('roquefort') + , ('rose') + , ('rosehip') + , ('rosemary') + , ('rotate') + , ('roundworm') + , ('router') + , ('rover') + , ('rowboat') + , ('rubidium') + , ('ruby') + , ('rudbeckia') + , ('rugby') + , ('rule') + , ('rumba') + , ('run') + , ('runner') + , ('rutabaga') + , ('safflower') + , ('saffron') + , ('saga') + , ('sage') + , ('sagittarius') + , ('saguaro') + , ('sail') + , ('sailboat') + , ('sailfish') + , ('sailor') + , ('salad') + , ('salamander') + , ('salary') + , ('sale') + , ('salesman') + , ('salmon') + , ('salmonberry') + , ('salsa') + , ('salt') + , ('saltasaurus') + , ('saltopus') + , ('salute') + , ('samba') + , ('sand') + , ('sandal') + , ('sandalwood') + , ('sandpaper') + , ('sandwich') + , ('santanaraptor') + , ('sapphire') + , ('sarahsaurus') + , ('sardine') + , ('sassafras') + , ('satellite') + , ('satin') + , ('saturday') + , ('saturn') + , ('saturnalia') + , ('sauce') + , ('sauroposeidon') + , ('save') + , ('saver') + , ('savory') + , ('saw') + , ('sawfish') + , ('saxophone') + , ('scabiosa') + , ('scaffold') + , ('scale') + , ('scallion') + , ('scallop') + , ('scapula') + , ('scar') + , ('scarecrow') + , ('scarer') + , ('scarf') + , ('scene') + , ('scent') + , ('sceptre') + , ('school') + , ('schooner') + , ('science') + , ('scilla') + , ('scion') + , ('scissor') + , ('scooter') + , ('scorpio') + , ('scorpion') + , ('scourge') + , ('scowl') + , ('scraper') + , ('screen') + , ('screwdriver') + , ('scribe') + , ('script') + , ('sea') + , ('seagull') + , ('seahorse') + , ('seal') + , ('seaplane') + , ('search') + , ('seashore') + , ('season') + , ('seat') + , ('seatbelt') + , ('second') + , ('secretary') + , ('secure') + , ('seed') + , ('seeder') + , ('seeker') + , ('seer') + , ('seismosaurus') + , ('selenium') + , ('sense') + , ('september') + , ('serpent') + , ('servant') + , ('server') + , ('sesame') + , ('session') + , ('settee') + , ('shade') + , ('shadow') + , ('shake') + , ('shaker') + , ('shallot') + , ('shame') + , ('shampoo') + , ('shamrock') + , ('shape') + , ('share') + , ('shark') + , ('shawl') + , ('shear') + , ('sheep') + , ('sheet') + , ('shelf') + , ('shell') + , ('sherbet') + , ('shield') + , ('shift') + , ('shingle') + , ('ship') + , ('shirt') + , ('shock') + , ('shoe') + , ('shoemaker') + , ('shop') + , ('shoulder') + , ('shovel') + , ('show') + , ('shrimp') + , ('shrine') + , ('shroud') + , ('side') + , ('sidecar') + , ('sidewalk') + , ('sight') + , ('sign') + , ('silence') + , ('silene') + , ('silica') + , ('silicon') + , ('silk') + , ('silkworm') + , ('silver') + , ('silverfish') + , ('sing') + , ('singer') + , ('single') + , ('singularity') + , ('sink') + , ('situation') + , ('skate') + , ('skateboard') + , ('ski') + , ('skipjack') + , ('skirt') + , ('skull') + , ('skunk') + , ('sky') + , ('slash') + , ('slayer') + , ('sled') + , ('sleep') + , ('sleet') + , ('slice') + , ('slicer') + , ('slide') + , ('slider') + , ('slime') + , ('slip') + , ('slipper') + , ('slope') + , ('sloth') + , ('slouch') + , ('slug') + , ('smartphone') + , ('smile') + , ('smoke') + , ('snagglefoot') + , ('snail') + , ('snake') + , ('snap') + , ('snapdragon') + , ('snapper') + , ('snarl') + , ('sneeze') + , ('sneezeweed') + , ('snickerdoodle') + , ('snipe') + , ('snout') + , ('snow') + , ('snowboard') + , ('snowdrop') + , ('snowflake') + , ('snowman') + , ('snowplow') + , ('snowshoe') + , ('snowstorm') + , ('soap') + , ('soapwort') + , ('soarer') + , ('soccer') + , ('society') + , ('sociology') + , ('sock') + , ('socks') + , ('soda') + , ('sodalite') + , ('sodium') + , ('sofa') + , ('softball') + , ('soil') + , ('soldier') + , ('sole') + , ('sombrero') + , ('somersault') + , ('son') + , ('song') + , ('soprano') + , ('sorrel') + , ('sort') + , ('soul') + , ('sound') + , ('soup') + , ('source') + , ('soursop') + , ('sousaphone') + , ('sovereign') + , ('soy') + , ('soybean') + , ('space') + , ('spacecraft') + , ('spade') + , ('spaghetti') + , ('spandex') + , ('spark') + , ('sparrow') + , ('spatula') + , ('speak') + , ('speaker') + , ('spear') + , ('specialist') + , ('spectacles') + , ('spectrograph') + , ('spectroscope') + , ('spectrum') + , ('speech') + , ('speedboat') + , ('speedwell') + , ('spell') + , ('sphere') + , ('sphynx') + , ('spice') + , ('spider') + , ('spike') + , ('spinach') + , ('spinosaurus') + , ('spirit') + , ('splash') + , ('spleen') + , ('split') + , ('sponge') + , ('spoon') + , ('spoonbill') + , ('spot') + , ('spring') + , ('sprint') + , ('sprite') + , ('sprout') + , ('spruce') + , ('spur') + , ('sputter') + , ('spy') + , ('square') + , ('squash') + , ('squid') + , ('squirrel') + , ('stag') + , ('stage') + , ('staircase') + , ('stallion') + , ('stamp') + , ('star') + , ('starburst') + , ('starfish') + , ('starflower') + , ('stargazer') + , ('station') + , ('statistic') + , ('stay') + , ('stealer') + , ('steam') + , ('steed') + , ('steel') + , ('stegosaurus') + , ('stem') + , ('step') + , ('sternum') + , ('stetson') + , ('stew') + , ('stick') + , ('stilton') + , ('sting') + , ('stinger') + , ('stingray') + , ('stitch') + , ('stoat') + , ('stock') + , ('stocking') + , ('stomach') + , ('stone') + , ('stop') + , ('stoplight') + , ('store') + , ('storm') + , ('story') + , ('stove') + , ('strand') + , ('stranger') + , ('straw') + , ('strawflower') + , ('stream') + , ('street') + , ('streetcar') + , ('stretch') + , ('string') + , ('structure') + , ('study') + , ('sturgeon') + , ('stygimoloch') + , ('style') + , ('subject') + , ('submarine') + , ('substance') + , ('subway') + , ('success') + , ('sugar') + , ('suggestion') + , ('suit') + , ('sulfur') + , ('summer') + , ('sun') + , ('sundae') + , ('sunday') + , ('sundial') + , ('sunfish') + , ('sunflower') + , ('sunscreen') + , ('sunset') + , ('sunshine') + , ('sunspot') + , ('sunstone') + , ('supermarket') + , ('supernova') + , ('supply') + , ('surf') + , ('surfboard') + , ('surgeon') + , ('surprise') + , ('sushi') + , ('swallow') + , ('swamp') + , ('swan') + , ('sweater') + , ('sweatpants') + , ('sweatshirt') + , ('swift') + , ('swim') + , ('swing') + , ('switch') + , ('swoop') + , ('sword') + , ('swordfish') + , ('swordtail') + , ('sycamore') + , ('sync') + , ('syringa') + , ('syrup') + , ('system') + , ('syzygy') + , ('table') + , ('tablecloth') + , ('tabletop') + , ('tachometer') + , ('tadpole') + , ('tail') + , ('tailor') + , ('taker') + , ('taleggio') + , ('talk') + , ('talon') + , ('talos') + , ('tamarillo') + , ('tamarind') + , ('tang') + , ('tangelo') + , ('tangerine') + , ('tango') + , ('tank') + , ('tanker') + , ('tarantula') + , ('tarascosaurus') + , ('target') + , ('tarn') + , ('tarp') + , ('tarragon') + , ('tarsal') + , ('tarsier') + , ('tartan') + , ('taurus') + , ('tax') + , ('taxi') + , ('taxicab') + , ('tea') + , ('teacher') + , ('teal') + , ('team') + , ('technician') + , ('technosaurus') + , ('teeth') + , ('telephone') + , ('telescope') + , ('television') + , ('teller') + , ('tellurium') + , ('temper') + , ('temperature') + , ('temple') + , ('tempo') + , ('tendency') + , ('tennis') + , ('tenor') + , ('tent') + , ('termite') + , ('tern') + , ('terrier') + , ('territory') + , ('text') + , ('textbook') + , ('texture') + , ('theater') + , ('theory') + , ('thief') + , ('thimbleberry') + , ('thing') + , ('thistle') + , ('thorium') + , ('thorn') + , ('thought') + , ('thread') + , ('thrill') + , ('throat') + , ('throne') + , ('thrush') + , ('thumb') + , ('thunbergia') + , ('thunder') + , ('thursday') + , ('thyme') + , ('tibia') + , ('tick') + , ('ticket') + , ('tie') + , ('tiger') + , ('tiglon') + , ('tilapia') + , ('tile') + , ('timbale') + , ('time') + , ('timer') + , ('timimus') + , ('timpani') + , ('tin') + , ('tip') + , ('tire') + , ('titanium') + , ('titanoceratops') + , ('titanosaurus') + , ('tithonia') + , ('title') + , ('toad') + , ('toast') + , ('toaster') + , ('today') + , ('tomato') + , ('ton') + , ('toothbrush') + , ('toothpaste') + , ('top') + , ('topaz') + , ('toque') + , ('tornado') + , ('tortellini') + , ('tortoise') + , ('toucan') + , ('tourmaline') + , ('towel') + , ('tower') + , ('town') + , ('toy') + , ('track') + , ('tracker') + , ('tractor') + , ('trade') + , ('trader') + , ('traffic') + , ('trail') + , ('train') + , ('trampoline') + , ('transport') + , ('trapezoid') + , ('travel') + , ('traveler') + , ('trawler') + , ('tray') + , ('treatment') + , ('tree') + , ('triangle') + , ('triceratops') + , ('trick') + , ('tricorne') + , ('trigonometry') + , ('trilby') + , ('trillium') + , ('trip') + , ('trollius') + , ('trombone') + , ('troodon') + , ('trouble') + , ('trouser') + , ('trowel') + , ('truck') + , ('truffle') + , ('trumpet') + , ('trunk') + , ('trust') + , ('tsunami') + , ('tub') + , ('tuba') + , ('tuberose') + , ('tuck') + , ('tuesday') + , ('tugboat') + , ('tulip') + , ('tumble') + , ('tumbleweed') + , ('tuna') + , ('tune') + , ('tungsten') + , ('turkey') + , ('turn') + , ('turner') + , ('turnip') + , ('turnover') + , ('turquoise') + , ('turret') + , ('turtle') + , ('tv') + , ('twig') + , ('twilight') + , ('twill') + , ('twin') + , ('twine') + , ('twist') + , ('twister') + , ('typhoon') + , ('tyrannosaurus') + , ('umbra') + , ('umbrella') + , ('uncle') + , ('unicorn') + , ('uniform') + , ('universe') + , ('uranium') + , ('ursinia') + , ('utahceratops') + , ('utahraptor') + , ('utensil') + , ('vacation') + , ('vacuum') + , ('valley') + , ('value') + , ('van') + , ('vanadium') + , ('vanilla') + , ('variety') + , ('variraptor') + , ('vase') + , ('vault') + , ('vegetable') + , ('vegetarian') + , ('vehicle') + , ('veil') + , ('vein') + , ('velociraptor') + , ('velvet') + , ('venom') + , ('verbena') + , ('verdict') + , ('vermicelli') + , ('verse') + , ('vertebra') + , ('vessel') + , ('vest') + , ('veterinarian') + , ('vibraphone') + , ('viburnum') + , ('vicuna') + , ('vinyl') + , ('viola') + , ('violet') + , ('violin') + , ('viper') + , ('virgo') + , ('visage') + , ('viscose') + , ('viscount') + , ('viscountess') + , ('vise') + , ('vision') + , ('visitor') + , ('visor') + , ('voice') + , ('volcano') + , ('vole') + , ('volleyball') + , ('voyage') + , ('vulcanodon') + , ('vulture') + , ('waiter') + , ('waitress') + , ('wake') + , ('wakeboard') + , ('walk') + , ('walker') + , ('walkover') + , ('wall') + , ('wallaby') + , ('wallet') + , ('walleye') + , ('wallflower') + , ('walnut') + , ('walrus') + , ('waltz') + , ('wander') + , ('wanderer') + , ('wandflower') + , ('wannanosaurus') + , ('war') + , ('warbler') + , ('warlock') + , ('warrior') + , ('wasabi') + , ('wash') + , ('washer') + , ('wasp') + , ('waste') + , ('watch') + , ('watcher') + , ('watchmaker') + , ('water') + , ('watercress') + , ('waterfall') + , ('waterlily') + , ('wave') + , ('wavelength') + , ('wax') + , ('waxflower') + , ('way') + , ('wealth') + , ('weather') + , ('weaver') + , ('web') + , ('wedelia') + , ('wedge') + , ('wednesday') + , ('weeder') + , ('week') + , ('weight') + , ('whale') + , ('wheel') + , ('whimsey') + , ('whip') + , ('whippet') + , ('whippoorwill') + , ('whistle') + , ('whitefish') + , ('wholesaler') + , ('widget') + , ('wildcat') + , ('wildebeest') + , ('wilderness') + , ('wildflower') + , ('william') + , ('willow') + , ('wind') + , ('windflower') + , ('windscreen') + , ('windshield') + , ('wineberry') + , ('wing') + , ('winter') + , ('winterberry') + , ('wire') + , ('wish') + , ('wishbone') + , ('wisteria') + , ('witch') + , ('witness') + , ('wizard') + , ('wok') + , ('wolf') + , ('wolfberry') + , ('wolfsbane') + , ('wolverine') + , ('wombat') + , ('wood') + , ('woodpecker') + , ('woodwind') + , ('wool') + , ('woolen') + , ('word') + , ('work') + , ('workshop') + , ('wormhole') + , ('wren') + , ('wrench') + , ('wrinkle') + , ('wrist') + , ('writer') + , ('writing') + , ('xenon') + , ('xenoposeidon') + , ('xylocarp') + , ('xylophone') + , ('yacht') + , ('yak') + , ('yam') + , ('yamamomo') + , ('yard') + , ('yarn') + , ('yarrow') + , ('year') + , ('yellowhorn') + , ('yew') + , ('yogurt') + , ('yoke') + , ('yttrium') + , ('yumberry') + , ('yuzu') + , ('zebra') + , ('zebu') + , ('zenith') + , ('zenobia') + , ('zephyr') + , ('ziconium') + , ('zinc') + , ('zinnia') + , ('zipper') + , ('zircon') + , ('zone') + , ('zoo') + , ('zucchini') + , ('zydeco') + ; +-- << OBJECTS + +-- PREDICATES >> +insert into human_uuid.predicate (word) +values + ('aback') + , ('abalone') + , ('abiding') + , ('ablaze') + , ('able') + , ('aboard') + , ('abounding') + , ('abrasive') + , ('abrupt') + , ('absorbed') + , ('absorbing') + , ('abstracted') + , ('abundance') + , ('abundant') + , ('abyssinian') + , ('accessible') + , ('accidental') + , ('accurate') + , ('achieved') + , ('acidic') + , ('acoustic') + , ('actually') + , ('acute') + , ('adaptable') + , ('adaptive') + , ('adhesive') + , ('adjoining') + , ('admitted') + , ('adorable') + , ('adventurous') + , ('aeolian') + , ('aerial') + , ('agate') + , ('aged') + , ('agreeable') + , ('ahead') + , ('airy') + , ('ajar') + , ('alabaster') + , ('alder') + , ('alert') + , ('alike') + , ('alive') + , ('alkaline') + , ('alluring') + , ('almond') + , ('almondine') + , ('aloud') + , ('alpine') + , ('aluminum') + , ('amazing') + , ('ambiguous') + , ('ambitious') + , ('amenable') + , ('amethyst') + , ('amplified') + , ('amused') + , ('amusing') + , ('ancient') + , ('angry') + , ('animated') + , ('antique') + , ('apple') + , ('apricot') + , ('aquamarine') + , ('aquatic') + , ('aromatic') + , ('arrow') + , ('artistic') + , ('ash') + , ('aspiring') + , ('assorted') + , ('astonishing') + , ('atlantic') + , ('atom') + , ('attractive') + , ('auspicious') + , ('automatic') + , ('autumn') + , ('available') + , ('awake') + , ('aware') + , ('awesome') + , ('axiomatic') + , ('azure') + , ('balanced') + , ('bald') + , ('ballistic') + , ('balsam') + , ('band') + , ('basalt') + , ('battle') + , ('bead') + , ('beaded') + , ('beautiful') + , ('bedecked') + , ('befitting') + , ('bejewled') + , ('believed') + , ('bemused') + , ('beneficial') + , ('berry') + , ('best') + , ('better') + , ('bevel') + , ('big') + , ('billowy') + , ('bird') + , ('bitter') + , ('bittersweet') + , ('blend') + , ('bloom') + , ('blossom') + , ('blue') + , ('blush') + , ('blushing') + , ('boatneck') + , ('boiled') + , ('boiling') + , ('bold') + , ('bolder') + , ('boom') + , ('booming') + , ('bottled') + , ('bottlenose') + , ('boulder') + , ('bouncy') + , ('boundless') + , ('bow') + , ('brainy') + , ('bramble') + , ('branch') + , ('branched') + , ('brash') + , ('brass') + , ('brassy') + , ('brave') + , ('brawny') + , ('brazen') + , ('breezy') + , ('brick') + , ('brief') + , ('bright') + , ('brindle') + , ('bristle') + , ('broad') + , ('broadleaf') + , ('broken') + , ('bronze') + , ('bronzed') + , ('brook') + , ('bubble') + , ('bubbly') + , ('bumpy') + , ('burly') + , ('bustling') + , ('busy') + , ('butter') + , ('buttercup') + , ('buttered') + , ('butternut') + , ('buttery') + , ('button') + , ('buttoned') + , ('bygone') + , ('cactus') + , ('cake') + , ('calico') + , ('calm') + , ('camp') + , ('canary') + , ('candied') + , ('candle') + , ('candy') + , ('canyon') + , ('capable') + , ('capricious') + , ('caramel') + , ('carbonated') + , ('carefree') + , ('careful') + , ('caring') + , ('carnation') + , ('carnelian') + , ('carpal') + , ('casual') + , ('cat') + , ('caterwauling') + , ('catkin') + , ('catnip') + , ('cautious') + , ('cedar') + , ('celestial') + , ('certain') + , ('cerulean') + , ('chain') + , ('chalk') + , ('chambray') + , ('changeable') + , ('charm') + , ('charmed') + , ('charming') + , ('chartreuse') + , ('chatter') + , ('checker') + , ('checkered') + , ('cheddar') + , ('cheerful') + , ('chemical') + , ('cherry') + , ('chestnut') + , ('chief') + , ('childish') + , ('childlike') + , ('chill') + , ('chip') + , ('chipped') + , ('chisel') + , ('chiseled') + , ('chivalrous') + , ('chlorinated') + , ('chocolate') + , ('chrome') + , ('circular') + , ('citrine') + , ('clammy') + , ('clarity') + , ('classic') + , ('classy') + , ('clean') + , ('clear') + , ('clever') + , ('cliff') + , ('climbing') + , ('closed') + , ('cloud') + , ('cloudy') + , ('clover') + , ('clumsy') + , ('coal') + , ('cobalt') + , ('coconut') + , ('coffee') + , ('coherent') + , ('cold') + , ('colorful') + , ('colossal') + , ('comet') + , ('comfortable') + , ('common') + , ('complete') + , ('complex') + , ('concise') + , ('concrete') + , ('confirmed') + , ('confused') + , ('confusion') + , ('congruous') + , ('conscious') + , ('continuous') + , ('cooing') + , ('cooked') + , ('cookie') + , ('cool') + , ('cooperative') + , ('coordinated') + , ('copper') + , ('copy') + , ('coral') + , ('cord') + , ('corner') + , ('cosmic') + , ('cotton') + , ('cottony') + , ('courageous') + , ('crawling') + , ('creative') + , ('crimson') + , ('crocus') + , ('crystal') + , ('crystalline') + , ('cubic') + , ('cuboid') + , ('cuddly') + , ('cultivate') + , ('cultured') + , ('cumbersome') + , ('curious') + , ('curse') + , ('curved') + , ('cut') + , ('cyan') + , ('cyber') + , ('cyclic') + , ('cypress') + , ('daffodil') + , ('daffy') + , ('daily') + , ('dandelion') + , ('dandy') + , ('dapper') + , ('dark') + , ('darkened') + , ('dashing') + , ('dawn') + , ('dazed') + , ('dazzling') + , ('deadpan') + , ('dear') + , ('debonair') + , ('deciduous') + , ('decisive') + , ('decorous') + , ('dedicated') + , ('deep') + , ('deeply') + , ('defiant') + , ('delicate') + , ('delicious') + , ('delightful') + , ('delirious') + , ('deluxe') + , ('denim') + , ('dent') + , ('dented') + , ('descriptive') + , ('desert') + , ('deserted') + , ('destiny') + , ('detailed') + , ('determined') + , ('developing') + , ('diagnostic') + , ('diamond') + , ('different') + , ('difficult') + , ('diligent') + , ('dirt') + , ('disco') + , ('discovered') + , ('discreet') + , ('distinct') + , ('dog') + , ('dolomite') + , ('dorian') + , ('dot') + , ('dour') + , ('dramatic') + , ('dull') + , ('dune') + , ('dust') + , ('dusty') + , ('dynamic') + , ('eager') + , ('early') + , ('earthy') + , ('east') + , ('eastern') + , ('easy') + , ('economic') + , ('educated') + , ('efficacious') + , ('efficient') + , ('eggplant') + , ('eight') + , ('elastic') + , ('elated') + , ('elderly') + , ('electric') + , ('elegant') + , ('elemental') + , ('elite') + , ('ember') + , ('emerald') + , ('eminent') + , ('emphasized') + , ('empty') + , ('enchanted') + , ('enchanting') + , ('encouraging') + , ('endurable') + , ('energetic') + , ('enormous') + , ('enshrined') + , ('entertaining') + , ('enthusiastic') + , ('equable') + , ('equal') + , ('equatorial') + , ('equinox') + , ('erratic') + , ('estimated') + , ('ethereal') + , ('evanescent') + , ('even') + , ('evening') + , ('evergreen') + , ('everlasting') + , ('excellent') + , ('excessive') + , ('excited') + , ('exciting') + , ('exclusive') + , ('expensive') + , ('experienced') + , ('extreme') + , ('exuberant') + , ('exultant') + , ('fabulous') + , ('faceted') + , ('factual') + , ('faint') + , ('fair') + , ('faithful') + , ('fallacious') + , ('false') + , ('familiar') + , ('famous') + , ('fan') + , ('fanatical') + , ('fancy') + , ('fantastic') + , ('fantasy') + , ('far') + , ('fascinated') + , ('fast') + , ('fate') + , ('fearless') + , ('feather') + , ('feline') + , ('fern') + , ('festive') + , ('few') + , ('field') + , ('fierce') + , ('fifth') + , ('fine') + , ('fir') + , ('fire') + , ('first') + , ('fish') + , ('five') + , ('fixed') + , ('flame') + , ('flannel') + , ('flash') + , ('flashy') + , ('flat') + , ('flawless') + , ('flax') + , ('flaxen') + , ('flicker') + , ('flint') + , ('florentine') + , ('flossy') + , ('flourish') + , ('flower') + , ('flowery') + , ('fluff') + , ('fluffy') + , ('fluorescent') + , ('fluoridated') + , ('fluttering') + , ('flying') + , ('foam') + , ('foamy') + , ('fog') + , ('foggy') + , ('foil') + , ('foregoing') + , ('foremost') + , ('forest') + , ('forested') + , ('fork') + , ('fortunate') + , ('fortune') + , ('fossil') + , ('foul') + , ('four') + , ('fourth') + , ('fragrant') + , ('freckle') + , ('free') + , ('freezing') + , ('frequent') + , ('fresh') + , ('friendly') + , ('frill') + , ('fringe') + , ('frost') + , ('frosted') + , ('fuchsia') + , ('full') + , ('functional') + , ('funny') + , ('furtive') + , ('future') + , ('futuristic') + , ('gainful') + , ('galvanized') + , ('gamy') + , ('garnet') + , ('garrulous') + , ('gaudy') + , ('gelatinous') + , ('gem') + , ('general') + , ('generated') + , ('gentle') + , ('geode') + , ('giant') + , ('giddy') + , ('gifted') + , ('gigantic') + , ('gilded') + , ('ginger') + , ('glacier') + , ('glamorous') + , ('glass') + , ('glaze') + , ('gleaming') + , ('glib') + , ('glimmer') + , ('glistening') + , ('glitter') + , ('glittery') + , ('global') + , ('glorious') + , ('glory') + , ('glossy') + , ('glow') + , ('glowing') + , ('gold') + , ('golden') + , ('goldenrod') + , ('good') + , ('goofy') + , ('gorgeous') + , ('gossamer') + , ('graceful') + , ('grand') + , ('grandiose') + , ('granite') + , ('grape') + , ('grass') + , ('grateful') + , ('gratis') + , ('grave') + , ('gravel') + , ('gray') + , ('great') + , ('green') + , ('gregarious') + , ('grey') + , ('grizzled') + , ('grizzly') + , ('groovy') + , ('grove') + , ('guiltless') + , ('gusty') + , ('guttural') + , ('habitual') + , ('hail') + , ('half') + , ('hallowed') + , ('halved') + , ('hammerhead') + , ('handsome') + , ('handsomely') + , ('handy') + , ('happy') + , ('hardly') + , ('harmless') + , ('harmonious') + , ('harsh') + , ('harvest') + , ('heady') + , ('healthy') + , ('heartbreaking') + , ('heather') + , ('heathered') + , ('heavenly') + , ('heavy') + , ('held') + , ('heliotrope') + , ('helix') + , ('helpful') + , ('hexagonal') + , ('hickory') + , ('highfalutin') + , ('highly') + , ('hilarious') + , ('hill') + , ('hip') + , ('hissing') + , ('historical') + , ('holistic') + , ('hollow') + , ('holy') + , ('honey') + , ('honeysuckle') + , ('honorable') + , ('honored') + , ('horn') + , ('horse') + , ('hospitable') + , ('hot') + , ('hulking') + , ('humane') + , ('humble') + , ('humdrum') + , ('humorous') + , ('hungry') + , ('hurricane') + , ('hushed') + , ('hyper') + , ('hypnotic') + , ('iced') + , ('icy') + , ('illustrious') + , ('imaginary') + , ('immediate') + , ('immense') + , ('imminent') + , ('impartial') + , ('important') + , ('imported') + , ('impossible') + , ('incandescent') + , ('inconclusive') + , ('incongruous') + , ('incredible') + , ('indecisive') + , ('indigo') + , ('indispensable') + , ('industrious') + , ('inexpensive') + , ('infrequent') + , ('ink') + , ('inky') + , ('innate') + , ('innovative') + , ('inquisitive') + , ('insidious') + , ('instinctive') + , ('intelligent') + , ('interesting') + , ('intermediate') + , ('internal') + , ('intriguing') + , ('invented') + , ('invincible') + , ('invited') + , ('iodized') + , ('ionian') + , ('ionized') + , ('iridescent') + , ('iris') + , ('iron') + , ('irradiated') + , ('island') + , ('ivy') + , ('jagged') + , ('jasper') + , ('jazzy') + , ('jealous') + , ('jelly') + , ('jet') + , ('jewel') + , ('jeweled') + , ('jolly') + , ('joyous') + , ('judicious') + , ('jumbled') + , ('jumpy') + , ('jungle') + , ('juniper') + , ('just') + , ('juvenile') + , ('kaput') + , ('keen') + , ('kind') + , ('kindhearted') + , ('kindly') + , ('kiwi') + , ('knotty') + , ('knowing') + , ('knowledgeable') + , ('lace') + , ('laced') + , ('lackadaisical') + , ('lacy') + , ('lake') + , ('languid') + , ('lapis') + , ('laser') + , ('lateral') + , ('lava') + , ('lavender') + , ('lavish') + , ('lead') + , ('leaf') + , ('lean') + , ('learned') + , ('leather') + , ('leeward') + , ('legend') + , ('legendary') + , ('lemon') + , ('level') + , ('liberating') + , ('light') + , ('lightning') + , ('like') + , ('likeable') + , ('lilac') + , ('lime') + , ('linen') + , ('literate') + , ('lithe') + , ('little') + , ('lively') + , ('living') + , ('lizard') + , ('local') + , ('locrian') + , ('lofty') + , ('long') + , ('longhaired') + , ('longing') + , ('lopsided') + , ('loud') + , ('lovely') + , ('loving') + , ('low') + , ('lowly') + , ('luck') + , ('lucky') + , ('ludicrous') + , ('lumbar') + , ('luminous') + , ('lunar') + , ('lush') + , ('luxuriant') + , ('luxurious') + , ('lydian') + , ('lying') + , ('lyrical') + , ('maddening') + , ('magenta') + , ('magic') + , ('magical') + , ('magnetic') + , ('magnificent') + , ('mahogany') + , ('maize') + , ('majestic') + , ('malachite') + , ('malleable') + , ('mammoth') + , ('mango') + , ('mangrove') + , ('maple') + , ('marble') + , ('marbled') + , ('marked') + , ('marmalade') + , ('maroon') + , ('marred') + , ('married') + , ('marsh') + , ('marshy') + , ('marvelous') + , ('massive') + , ('material') + , ('materialistic') + , ('mature') + , ('maze') + , ('meadow') + , ('medieval') + , ('mellow') + , ('melodic') + , ('melodious') + , ('melted') + , ('meowing') + , ('merciful') + , ('mercurial') + , ('mercury') + , ('mesquite') + , ('metal') + , ('meteor') + , ('mewing') + , ('mica') + , ('midi') + , ('midnight') + , ('mighty') + , ('mild') + , ('mildly') + , ('military') + , ('mini') + , ('miniature') + , ('mint') + , ('mirage') + , ('mire') + , ('mirror') + , ('misty') + , ('mixed') + , ('mixolydian') + , ('modern') + , ('modest') + , ('momentous') + , ('moored') + , ('morning') + , ('motley') + , ('mountain') + , ('mountainous') + , ('mousy') + , ('mud') + , ('muddled') + , ('muddy') + , ('mulberry') + , ('mutual') + , ('mysterious') + , ('narrow') + , ('natural') + , ('navy') + , ('near') + , ('neat') + , ('nebula') + , ('nebulous') + , ('necessary') + , ('neighborly') + , ('neon') + , ('nervous') + , ('nettle') + , ('nice') + , ('nickel') + , ('nifty') + , ('night') + , ('nimble') + , ('nine') + , ('ninth') + , ('noble') + , ('noiseless') + , ('nonchalant') + , ('nonstop') + , ('noon') + , ('north') + , ('northern') + , ('nostalgic') + , ('nosy') + , ('notch') + , ('nova') + , ('numerous') + , ('nutritious') + , ('oasis') + , ('observant') + , ('obsidian') + , ('obtainable') + , ('obvious') + , ('occipital') + , ('oceanic') + , ('octagonal') + , ('odd') + , ('oil') + , ('olive') + , ('olivine') + , ('omniscient') + , ('onyx') + , ('opalescent') + , ('opaque') + , ('open') + , ('opposite') + , ('orange') + , ('orchid') + , ('orderly') + , ('ordinary') + , ('organic') + , ('organized') + , ('ossified') + , ('outgoing') + , ('outrageous') + , ('outstanding') + , ('oval') + , ('overjoyed') + , ('oxidized') + , ('pacific') + , ('paint') + , ('painted') + , ('pale') + , ('palm') + , ('panoramic') + , ('paper') + , ('parallel') + , ('past') + , ('pastoral') + , ('patch') + , ('pattern') + , ('peaceful') + , ('peach') + , ('pear') + , ('peat') + , ('pebble') + , ('pentagonal') + , ('pepper') + , ('peppered') + , ('peppermint') + , ('perfect') + , ('peridot') + , ('periodic') + , ('periwinkle') + , ('perpetual') + , ('persistent') + , ('petal') + , ('petalite') + , ('petite') + , ('pewter') + , ('phantom') + , ('phase') + , ('phrygian') + , ('picayune') + , ('pickle') + , ('pickled') + , ('picturesque') + , ('pie') + , ('pine') + , ('pineapple') + , ('pinnate') + , ('pinto') + , ('piquant') + , ('pitch') + , ('placid') + , ('plaid') + , ('plain') + , ('planet') + , ('plant') + , ('plastic') + , ('platinum') + , ('plausible') + , ('playful') + , ('pleasant') + , ('plucky') + , ('plum') + , ('plume') + , ('plural') + , ('pointed') + , ('pointy') + , ('poised') + , ('polar') + , ('polarized') + , ('polished') + , ('polite') + , ('political') + , ('pollen') + , ('polydactyl') + , ('polyester') + , ('pond') + , ('pool') + , ('popular') + , ('positive') + , ('possible') + , ('potent') + , ('pouncing') + , ('power') + , ('powerful') + , ('prairie') + , ('precious') + , ('pretty') + , ('pricey') + , ('prickle') + , ('prickly') + , ('principled') + , ('prism') + , ('private') + , ('probable') + , ('productive') + , ('profuse') + , ('prong') + , ('protective') + , ('proud') + , ('proximal') + , ('psychedelic') + , ('puddle') + , ('pumped') + , ('purple') + , ('purrfect') + , ('purring') + , ('pushy') + , ('puzzle') + , ('puzzled') + , ('puzzling') + , ('pyrite') + , ('quaint') + , ('quark') + , ('quartz') + , ('quasar') + , ('quick') + , ('quickest') + , ('quiet') + , ('quill') + , ('quilled') + , ('quilt') + , ('quilted') + , ('quintessential') + , ('quirky') + , ('quiver') + , ('quixotic') + , ('radial') + , ('radical') + , ('rain') + , ('rainbow') + , ('rainy') + , ('rambunctious') + , ('rapid') + , ('rare') + , ('raspy') + , ('rattle') + , ('real') + , ('rebel') + , ('recent') + , ('receptive') + , ('recondite') + , ('rectangular') + , ('reflective') + , ('regal') + , ('regular') + , ('reinvented') + , ('reliable') + , ('relic') + , ('relieved') + , ('remarkable') + , ('reminiscent') + , ('repeated') + , ('resilient') + , ('resisted') + , ('resolute') + , ('resonant') + , ('respected') + , ('responsible') + , ('rhetorical') + , ('rhinestone') + , ('ribbon') + , ('rich') + , ('rift') + , ('right') + , ('righteous') + , ('rightful') + , ('rigorous') + , ('ring') + , ('ringed') + , ('ripe') + , ('ripple') + , ('ritzy') + , ('river') + , ('road') + , ('roan') + , ('roasted') + , ('robust') + , ('rocky') + , ('rogue') + , ('romantic') + , ('roomy') + , ('rose') + , ('rotated') + , ('rotating') + , ('rough') + , ('round') + , ('rounded') + , ('royal') + , ('rumbling') + , ('rune') + , ('rural') + , ('rust') + , ('rustic') + , ('saber') + , ('sable') + , ('safe') + , ('sage') + , ('salt') + , ('salty') + , ('same') + , ('sand') + , ('sandy') + , ('sapphire') + , ('sassy') + , ('satin') + , ('satisfying') + , ('savory') + , ('scalloped') + , ('scandalous') + , ('scarce') + , ('scarlet') + , ('scented') + , ('scientific') + , ('scintillating') + , ('scratch') + , ('scratched') + , ('scrawny') + , ('screeching') + , ('scythe') + , ('season') + , ('seasoned') + , ('second') + , ('secret') + , ('secretive') + , ('sedate') + , ('seed') + , ('seemly') + , ('seen') + , ('selective') + , ('separate') + , ('separated') + , ('sepia') + , ('sequoia') + , ('serene') + , ('serious') + , ('shade') + , ('shaded') + , ('shadow') + , ('shadowed') + , ('shared') + , ('sharp') + , ('sheer') + , ('shell') + , ('shelled') + , ('shimmer') + , ('shimmering') + , ('shine') + , ('shining') + , ('shiny') + , ('shocking') + , ('shore') + , ('short') + , ('shorthaired') + , ('showy') + , ('shrouded') + , ('shrub') + , ('shy') + , ('sideways') + , ('silent') + , ('silicon') + , ('silk') + , ('silken') + , ('silky') + , ('silly') + , ('silver') + , ('similar') + , ('simple') + , ('simplistic') + , ('sincere') + , ('single') + , ('six') + , ('sixth') + , ('skillful') + , ('skinny') + , ('skitter') + , ('sky') + , ('slash') + , ('sleepy') + , ('sleet') + , ('slender') + , ('slime') + , ('slimy') + , ('slow') + , ('sly') + , ('small') + , ('smart') + , ('smiling') + , ('smoggy') + , ('smooth') + , ('snapdragon') + , ('sneaky') + , ('snow') + , ('snowy') + , ('soapy') + , ('soft') + , ('solar') + , ('solid') + , ('solstice') + , ('somber') + , ('sophisticated') + , ('sordid') + , ('sore') + , ('sour') + , ('south') + , ('southern') + , ('spangle') + , ('spangled') + , ('spark') + , ('sparkling') + , ('sparkly') + , ('special') + , ('speckle') + , ('speckled') + , ('spectacled') + , ('spectacular') + , ('spectrum') + , ('sphenoid') + , ('spice') + , ('spiced') + , ('spicy') + , ('spiffy') + , ('spiky') + , ('spiny') + , ('spiral') + , ('spiritual') + , ('splashy') + , ('splendid') + , ('sponge') + , ('spot') + , ('spotless') + , ('spotted') + , ('spotty') + , ('spring') + , ('sprinkle') + , ('sprout') + , ('spurious') + , ('square') + , ('standing') + , ('star') + , ('statuesque') + , ('steadfast') + , ('steady') + , ('stealth') + , ('steel') + , ('steep') + , ('stellar') + , ('sticky') + , ('stingy') + , ('stirring') + , ('stitch') + , ('stone') + , ('storm') + , ('stormy') + , ('stream') + , ('strengthened') + , ('stripe') + , ('striped') + , ('strong') + , ('stump') + , ('stupendous') + , ('sturdy') + , ('stylish') + , ('suave') + , ('subdued') + , ('subsequent') + , ('substantial') + , ('successful') + , ('succinct') + , ('succulent') + , ('sudden') + , ('sudsy') + , ('sugar') + , ('sugared') + , ('sugary') + , ('sulfuric') + , ('sulky') + , ('summer') + , ('sumptuous') + , ('sun') + , ('sunny') + , ('sunrise') + , ('sunset') + , ('super') + , ('superb') + , ('superficial') + , ('supreme') + , ('surf') + , ('sustaining') + , ('swamp') + , ('swanky') + , ('sweet') + , ('sweltering') + , ('swift') + , ('synonymous') + , ('tabby') + , ('talented') + , ('tall') + , ('tame') + , ('tan') + , ('tangible') + , ('tangy') + , ('tar') + , ('tarry') + , ('tartan') + , ('tasteful') + , ('tasty') + , ('tattered') + , ('teal') + , ('telling') + , ('temporal') + , ('ten') + , ('tender') + , ('terrific') + , ('tested') + , ('thankful') + , ('therapeutic') + , ('thin') + , ('thinkable') + , ('third') + , ('thirsty') + , ('thoracic') + , ('thorn') + , ('thoughtful') + , ('thread') + , ('three') + , ('thrilling') + , ('thunder') + , ('thundering') + , ('tidal') + , ('tide') + , ('tidy') + , ('time') + , ('tin') + , ('tinted') + , ('tiny') + , ('titanium') + , ('toothsome') + , ('topaz') + , ('torch') + , ('torpid') + , ('tortoiseshell') + , ('tough') + , ('tourmaline') + , ('towering') + , ('trail') + , ('tranquil') + , ('translucent') + , ('transparent') + , ('trapezoidal') + , ('traveling') + , ('treasure') + , ('tree') + , ('tremendous') + , ('triangular') + , ('tricky') + , ('tricolor') + , ('trite') + , ('tropical') + , ('troubled') + , ('trusted') + , ('trusting') + , ('truth') + , ('truthful') + , ('tulip') + , ('tundra') + , ('tungsten') + , ('turquoise') + , ('twilight') + , ('twisty') + , ('typhoon') + , ('typical') + , ('ubiquitous') + , ('ultra') + , ('uncovered') + , ('understood') + , ('unequaled') + , ('uneven') + , ('unexpected') + , ('unique') + , ('universal') + , ('unleashed') + , ('unmarred') + , ('unruly') + , ('unusual') + , ('upbeat') + , ('useful') + , ('utopian') + , ('uttermost') + , ('vagabond') + , ('valiant') + , ('valley') + , ('valuable') + , ('vanilla') + , ('various') + , ('vast') + , ('vaulted') + , ('veil') + , ('veiled') + , ('verbena') + , ('verbose') + , ('verdant') + , ('versed') + , ('victorious') + , ('vigorous') + , ('vine') + , ('vintage') + , ('violet') + , ('viridian') + , ('visual') + , ('vivacious') + , ('vivid') + , ('volcano') + , ('voltaic') + , ('voracious') + , ('waiting') + , ('wakeful') + , ('walnut') + , ('wandering') + , ('warm') + , ('warp') + , ('wary') + , ('water') + , ('watery') + , ('wave') + , ('wax') + , ('wealthy') + , ('well') + , ('west') + , ('western') + , ('wheat') + , ('whimsical') + , ('whip') + , ('whispering') + , ('wholesale') + , ('wide') + , ('wiggly') + , ('wild') + , ('wind') + , ('winter') + , ('wirehaired') + , ('wiry') + , ('wise') + , ('wistful') + , ('witty') + , ('wobbly') + , ('wonderful') + , ('wood') + , ('wooded') + , ('wooden') + , ('wool') + , ('woolen') + , ('woolly') + , ('workable') + , ('working') + , ('worried') + , ('wry') + , ('yellow') + , ('yielding') + , ('young') + , ('youthful') + , ('zany') + , ('zealous') + , ('zenith') + , ('zest') + , ('zesty') + , ('zigzag') + , ('zinc') + , ('zippy') + , ('zircon') + ; +-- << PREDICATES + +alter table "public"."community" alter column "uid" drop default; +alter table "public"."community" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."community" alter column "uid" set default human_uuid.huid(); + +alter table "public"."grp" alter column "uid" drop default; +alter table "public"."grp" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."grp" alter column "uid" set default human_uuid.huid(); + +alter table "public"."perm" alter column "uid" drop default; +alter table "public"."perm" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."perm" alter column "uid" set default human_uuid.huid(); + +alter table "public"."thread" alter column "uid" drop default; +alter table "public"."thread" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."thread" alter column "uid" set default human_uuid.huid(); + +alter table "public"."thread_attachment" alter column "uid" drop default; +alter table "public"."thread_attachment" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."thread_attachment" alter column "uid" set default human_uuid.huid(); + +alter table "public"."thread_attachment_emoji" alter column "uid" drop default; +alter table "public"."thread_attachment_emoji" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."thread_attachment_emoji" alter column "uid" set default human_uuid.huid(); + +alter table "public"."thread_attachment_vote" alter column "uid" drop default; +alter table "public"."thread_attachment_vote" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."thread_attachment_vote" alter column "uid" set default human_uuid.huid(); + +alter table "public"."thread_feed" alter column "uid" drop default; +alter table "public"."thread_feed" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."thread_feed" alter column "uid" set default human_uuid.huid(); + +alter table "public"."usr" alter column "uid" drop default; +alter table "public"."usr" alter column "uid" set data type human_uuid.huid using human_uuid.huid(); +alter table "public"."usr" alter column "uid" set default human_uuid.huid(); + +CREATE UNIQUE INDEX object_pkey ON human_uuid.object USING btree (id); + +CREATE UNIQUE INDEX object_word_key ON human_uuid.object USING btree (word); + +CREATE UNIQUE INDEX predicate_pkey ON human_uuid.predicate USING btree (id); + +CREATE UNIQUE INDEX predicate_word_key ON human_uuid.predicate USING btree (word); + +CREATE UNIQUE INDEX used_pkey ON human_uuid.used USING btree (huid); + +CREATE UNIQUE INDEX grp_uid_key ON public.grp USING btree (uid); + +CREATE UNIQUE INDEX perm_uid_key ON public.perm USING btree (uid); + +CREATE UNIQUE INDEX thread_attachment_emoji_uid_key ON public.thread_attachment_emoji USING btree (uid); + +CREATE UNIQUE INDEX thread_attachment_uid_key ON public.thread_attachment USING btree (uid); + +CREATE UNIQUE INDEX thread_attachment_vote_uid_key ON public.thread_attachment_vote USING btree (uid); + +CREATE UNIQUE INDEX thread_feed_uid_key ON public.thread_feed USING btree (uid); + +CREATE UNIQUE INDEX thread_uid_key ON public.thread USING btree (uid); + +CREATE UNIQUE INDEX usr_uid_key ON public.usr USING btree (uid); + +alter table "human_uuid"."object" add constraint "object_pkey" PRIMARY KEY using index "object_pkey"; + +alter table "human_uuid"."predicate" add constraint "predicate_pkey" PRIMARY KEY using index "predicate_pkey"; + +alter table "human_uuid"."used" add constraint "used_pkey" PRIMARY KEY using index "used_pkey"; + +alter table "human_uuid"."object" add constraint "object_word_key" UNIQUE using index "object_word_key"; + +alter table "human_uuid"."predicate" add constraint "predicate_word_key" UNIQUE using index "predicate_word_key"; + +alter table "public"."grp" add constraint "grp_uid_key" UNIQUE using index "grp_uid_key"; + +alter table "public"."perm" add constraint "perm_uid_key" UNIQUE using index "perm_uid_key"; + +alter table "public"."thread" add constraint "thread_uid_key" UNIQUE using index "thread_uid_key"; + +alter table "public"."thread_attachment" add constraint "thread_attachment_uid_key" UNIQUE using index "thread_attachment_uid_key"; + +alter table "public"."thread_attachment_emoji" add constraint "thread_attachment_emoji_uid_key" UNIQUE using index "thread_attachment_emoji_uid_key"; + +alter table "public"."thread_attachment_vote" add constraint "thread_attachment_vote_uid_key" UNIQUE using index "thread_attachment_vote_uid_key"; + +alter table "public"."thread_feed" add constraint "thread_feed_uid_key" UNIQUE using index "thread_feed_uid_key"; + +alter table "public"."usr" add constraint "usr_uid_key" UNIQUE using index "usr_uid_key"; + +set check_function_bodies = off; + + +CREATE OR REPLACE FUNCTION public.do_insert_community_perm() + RETURNS trigger + LANGUAGE plpgsql +AS $function$ +begin + -- TODO: insert some default community groups, use community_XX_admin as group owner + + insert into public.perm + (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) + values + ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/posts', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') + , ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/tag', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') + , ('/communities/' || human_uuid.huid_to_string(NEW.uid) || '/deleted', (public.get_acting_usr()).id, NEW.id, 'w', 'w', '-') + ; + + return new; +end; +$function$ +; + +CREATE OR REPLACE FUNCTION public.do_insert_grp_perm() + RETURNS trigger + LANGUAGE plpgsql +AS $function$ +begin + insert into public.perm + (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) + values + ('/groups/' || human_uuid.huid_to_string(NEW.uid) || '/members', (public.get_acting_usr()).id, NEW.id, 'w', 'w', '-') + , ('/groups/' || human_uuid.huid_to_string(NEW.uid) || '/tag', (public.get_acting_usr()).id, NEW.id, 'w', 'w', 'r') + ; + + return new; +end; +$function$ +; + +CREATE OR REPLACE FUNCTION public.do_insert_usr_perm() + RETURNS trigger + LANGUAGE plpgsql +AS $function$ +declare + admins int; +begin + admins := (public.grp_admins()).id; + + insert into public.perm + (path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode) + values + ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/tag', NEW.id, admins, 'w', 'w', 'r') + , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/email', NEW.id, admins, 'w', 'w', '-') + , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/deleted', NEW.id, admins, 'w', 'w', '-') + , ('/users/' || human_uuid.huid_to_string(NEW.uid) || '/password', NEW.id, admins, 'w', 'w', '-') + ; + + return new; +end; +$function$ +; + +CREATE OR REPLACE FUNCTION public.do_usr_create_default_grp() + RETURNS trigger + LANGUAGE plpgsql +AS $function$ +declare + new_grp int; +begin + insert into public.grp (tag) + values (grp_tag_of_string('usr_' || new.uid)) + returning id into new_grp; + + perform public.grp_add_member(to_grp => new_grp, add_usr => new.id); + + update public.perm + set owner_user = (public.usr_root()).id + , owner_group = (public.grp_admins()).id + where path = '/groups/' || new_grp || '/members' + or path = '/groups/' || new_grp || '/tag'; + + return null; +end; +$function$ +; + +CREATE OR REPLACE FUNCTION public.get_acting_usr() + RETURNS usr + LANGUAGE plpgsql +AS $function$ +declare + uid text; + acting_usr public.usr; +begin + if nullif(current_setting('dnim.usr_uid', true), '') is null then + acting_usr := public.usr_root(); + else + select u.* + from public.usr u + where u.uid = human_uuid.huid_of_string(current_setting('dnim.usr_uid', true)) + into acting_usr; + end if; + + return acting_usr; +end; +$function$ +; + +