##########################################
## NOTE: This module was autogenerated. ##
## Contains no user-servicable parts!!! ##
##########################################

package Lingua::EN::Inflexion::Verbs;
use 5.010; use strict; use warnings;
no if $] >= 5.018, warnings => "experimental::smartmatch";

our $VERSION = 20230704.182940;

my $plural_of = {
  "abides"         => "abide",
  "aches"          => "ache",
  "am"             => "are",
  "are"            => "are",
  "aren't"         => "aren't",
  "arises"         => "arise",
  "asks"           => "ask",
  "avalanches"     => "avalanche",
  "awakes"         => "awake",
  "beats"          => "beat",
  "becomes"        => "become",
  "begets"         => "beget",
  "begins"         => "begin",
  "beholds"        => "behold",
  "bellyaches"     => "bellyache",
  "bends"          => "bend",
  "bets"           => "bet",
  "binds"          => "bind",
  "bites"          => "bite",
  "bleeds"         => "bleed",
  "blitzes"        => "blitz",
  "blows"          => "blow",
  "breaks"         => "break",
  "breeds"         => "breed",
  "brings"         => "bring",
  "builds"         => "build",
  "burns"          => "burn",
  "bursts"         => "burst",
  "busts"          => "bust",
  "caches"         => "cache",
  "can"            => "can",
  "can't"          => "can't",
  "catches"        => "catch",
  "changes"        => "change",
  "chooses"        => "choose",
  "claps"          => "clap",
  "clings"         => "cling",
  "comes"          => "come",
  "continues"      => "continue",
  "costs"          => "cost",
  "could"          => "could",
  "creches"        => "creche",
  "creeps"         => "creep",
  "daren't"        => "daren't",
  "dares"          => "dare",
  "deals"          => "deal",
  "dies"           => "die",
  "digs"           => "dig",
  "dives"          => "dive",
  "doesn't"        => "don't",
  "don't"          => "don't",
  "douches"        => "douche",
  "drags"          => "drag",
  "dreams"         => "dream",
  "drinks"         => "drink",
  "drives"         => "drive",
  "dwells"         => "dwell",
  "eats"           => "eat",
  "expects"        => "expect",
  "falls"          => "fall",
  "feels"          => "feel",
  "fights"         => "fight",
  "finds"          => "find",
  "flees"          => "flee",
  "flies"          => "fly",
  "flings"         => "fling",
  "follows"        => "follow",
  "forbids"        => "forbid",
  "foresees"       => "foresee",
  "foretells"      => "foretell",
  "forgets"        => "forget",
  "forgives"       => "forgive",
  "forsakes"       => "forsake",
  "gets"           => "get",
  "gilds"          => "gild",
  "gives"          => "give",
  "goes"           => "go",
  "grinds"         => "grind",
  "happens"        => "happen",
  "has"            => "have",
  "hasn't"         => "haven't",
  "haven't"        => "haven't",
  "helps"          => "help",
  "hews"           => "hew",
  "hits"           => "hit",
  "holds"          => "hold",
  "hurts"          => "hurt",
  "inlays"         => "inlay",
  "insists"        => "insist",
  "interlays"      => "interlay",
  "irises"         => "iris",
  "is"             => "are",
  "isn't"          => "aren't",
  "keeps"          => "keep",
  "kills"          => "kill",
  "kneels"         => "kneel",
  "knits"          => "knit",
  "knows"          => "know",
  "lays"           => "lay",
  "leads"          => "lead",
  "leans"          => "lean",
  "leaps"          => "leap",
  "learns"         => "learn",
  "leaves"         => "leave",
  "lies"           => "lie",
  "likes"          => "like",
  "lives"          => "live",
  "looks"          => "look",
  "loses"          => "lose",
  "loves"          => "love",
  "may"            => "may",
  "mayn't"         => "mayn't",
  "means"          => "mean",
  "meets"          => "meet",
  "menus"          => "menu",
  "might"          => "might",
  "misleads"       => "mislead",
  "mistakes"       => "mistake",
  "misunderstands" => "misunderstand",
  "moves"          => "move",
  "must"           => "must",
  "mustn't"        => "mustn't",
  "n't"            => "n't",
  "needn't"        => "needn't",
  "needs"          => "need",
  "niches"         => "niche",
  "ought"          => "ought",
  "oughtn't"       => "oughtn't",
  "overdraws"      => "overdraw",
  "overhears"      => "overhear",
  "overtakes"      => "overtake",
  "presets"        => "preset",
  "proves"         => "prove",
  "provides"       => "provide",
  "psyches"        => "psyche",
  "puts"           => "put",
  "quits"          => "quit",
  "quizzes"        => "quiz",
  "reaches"        => "reach",
  "remains"        => "remain",
  "remembers"      => "remember",
  "rends"          => "rend",
  "rides"          => "ride",
  "rids"           => "rid",
  "rings"          => "ring",
  "rises"          => "rise",
  "rives"          => "rive",
  "runs"           => "run",
  "s"              => "",
  "saws"           => "saw",
  "seeks"          => "seek",
  "seems"          => "seem",
  "sha'n't"        => "sha'n't",
  "shakes"         => "shake",
  "shall"          => "shall",
  "shan't"         => "shan't",
  "shaves"         => "shave",
  "sheds"          => "shed",
  "shits"          => "shit",
  "shoes"          => "shoe",
  "shows"          => "show",
  "shrinks"        => "shrink",
  "sings"          => "sing",
  "sinks"          => "sink",
  "sits"           => "sit",
  "skis"           => "ski",
  "slays"          => "slay",
  "slides"         => "slide",
  "slinks"         => "slink",
  "slits"          => "slit",
  "smells"         => "smell",
  "smites"         => "smite",
  "sneaks"         => "sneak",
  "sows"           => "sow",
  "speaks"         => "speak",
  "speeds"         => "speed",
  "spends"         => "spend",
  "spits"          => "spit",
  "spoils"         => "spoil",
  "springs"        => "spring",
  "stands"         => "stand",
  "staves"         => "stave",
  "stays"          => "stay",
  "steals"         => "steal",
  "stings"         => "sting",
  "stinks"         => "stink",
  "stops"          => "stop",
  "strews"         => "strew",
  "strides"        => "stride",
  "strips"         => "strip",
  "strives"        => "strive",
  "sublets"        => "sublet",
  "sunburns"       => "sunburn",
  "swears"         => "swear",
  "sweats"         => "sweat",
  "sweeps"         => "sweep",
  "swells"         => "swell",
  "swims"          => "swim",
  "swings"         => "swing",
  "talks"          => "talk",
  "tears"          => "tear",
  "thrives"        => "thrive",
  "thrusts"        => "thrust",
  "treads"         => "tread",
  "undergoes"      => "undergo",
  "understands"    => "understand",
  "undertakes"     => "undertake",
  "upsets"         => "upset",
  "vexes"          => "vex",
  "waits"          => "wait",
  "wakes"          => "wake",
  "walks"          => "walk",
  "wants"          => "want",
  "was"            => "were",
  "watches"        => "watch",
  "wears"          => "wear",
  "weeps"          => "weep",
  "wends"          => "wend",
  "will"           => "will",
  "wins"           => "win",
  "withdraws"      => "withdraw",
  "withholds"      => "withhold",
  "withstands"     => "withstand",
  "won't"          => "won't",
  "wrings"         => "wring",
};

my $singular_of = {
  ""              => "s",
  "abide"         => "abides",
  "ache"          => "aches",
  "are"           => "is",
  "aren't"        => "isn't",
  "arise"         => "arises",
  "ask"           => "asks",
  "avalanche"     => "avalanches",
  "awake"         => "awakes",
  "beat"          => "beats",
  "become"        => "becomes",
  "beget"         => "begets",
  "begin"         => "begins",
  "behold"        => "beholds",
  "bellyache"     => "bellyaches",
  "bend"          => "bends",
  "bet"           => "bets",
  "bind"          => "binds",
  "bite"          => "bites",
  "bleed"         => "bleeds",
  "blitz"         => "blitzes",
  "blow"          => "blows",
  "break"         => "breaks",
  "breed"         => "breeds",
  "bring"         => "brings",
  "build"         => "builds",
  "burn"          => "burns",
  "burst"         => "bursts",
  "bust"          => "busts",
  "cache"         => "caches",
  "can"           => "can",
  "can't"         => "can't",
  "catch"         => "catches",
  "change"        => "changes",
  "choose"        => "chooses",
  "clap"          => "claps",
  "cling"         => "clings",
  "come"          => "comes",
  "continue"      => "continues",
  "cost"          => "costs",
  "could"         => "could",
  "creche"        => "creches",
  "creep"         => "creeps",
  "dare"          => "dares",
  "daren't"       => "daren't",
  "deal"          => "deals",
  "die"           => "dies",
  "dig"           => "digs",
  "dive"          => "dives",
  "don't"         => "doesn't",
  "douche"        => "douches",
  "drag"          => "drags",
  "dream"         => "dreams",
  "drink"         => "drinks",
  "drive"         => "drives",
  "dwell"         => "dwells",
  "eat"           => "eats",
  "expect"        => "expects",
  "fall"          => "falls",
  "feel"          => "feels",
  "fight"         => "fights",
  "find"          => "finds",
  "flee"          => "flees",
  "fling"         => "flings",
  "fly"           => "flies",
  "follow"        => "follows",
  "forbid"        => "forbids",
  "foresee"       => "foresees",
  "foretell"      => "foretells",
  "forget"        => "forgets",
  "forgive"       => "forgives",
  "forsake"       => "forsakes",
  "get"           => "gets",
  "gild"          => "gilds",
  "give"          => "gives",
  "go"            => "goes",
  "grind"         => "grinds",
  "happen"        => "happens",
  "have"          => "has",
  "haven't"       => "hasn't",
  "help"          => "helps",
  "hew"           => "hews",
  "hit"           => "hits",
  "hold"          => "holds",
  "hurt"          => "hurts",
  "inlay"         => "inlays",
  "insist"        => "insists",
  "interlay"      => "interlays",
  "iris"          => "irises",
  "keep"          => "keeps",
  "kill"          => "kills",
  "kneel"         => "kneels",
  "knit"          => "knits",
  "know"          => "knows",
  "lay"           => "lays",
  "lead"          => "leads",
  "lean"          => "leans",
  "leap"          => "leaps",
  "learn"         => "learns",
  "leave"         => "leaves",
  "lie"           => "lies",
  "like"          => "likes",
  "live"          => "lives",
  "look"          => "looks",
  "lose"          => "loses",
  "love"          => "loves",
  "may"           => "may",
  "mayn't"        => "mayn't",
  "mean"          => "means",
  "meet"          => "meets",
  "menu"          => "menus",
  "might"         => "might",
  "mislead"       => "misleads",
  "mistake"       => "mistakes",
  "misunderstand" => "misunderstands",
  "move"          => "moves",
  "must"          => "must",
  "mustn't"       => "mustn't",
  "n't"           => "n't",
  "need"          => "needs",
  "needn't"       => "needn't",
  "niche"         => "niches",
  "ought"         => "ought",
  "oughtn't"      => "oughtn't",
  "overdraw"      => "overdraws",
  "overhear"      => "overhears",
  "overtake"      => "overtakes",
  "preset"        => "presets",
  "prove"         => "proves",
  "provide"       => "provides",
  "psyche"        => "psyches",
  "put"           => "puts",
  "quit"          => "quits",
  "quiz"          => "quizzes",
  "reach"         => "reaches",
  "remain"        => "remains",
  "remember"      => "remembers",
  "rend"          => "rends",
  "rid"           => "rids",
  "ride"          => "rides",
  "ring"          => "rings",
  "rise"          => "rises",
  "rive"          => "rives",
  "run"           => "runs",
  "saw"           => "saws",
  "seek"          => "seeks",
  "seem"          => "seems",
  "sha'n't"       => "sha'n't",
  "shake"         => "shakes",
  "shall"         => "shall",
  "shan't"        => "shan't",
  "shave"         => "shaves",
  "shed"          => "sheds",
  "shit"          => "shits",
  "shoe"          => "shoes",
  "show"          => "shows",
  "shrink"        => "shrinks",
  "sing"          => "sings",
  "sink"          => "sinks",
  "sit"           => "sits",
  "ski"           => "skis",
  "slay"          => "slays",
  "slide"         => "slides",
  "slink"         => "slinks",
  "slit"          => "slits",
  "smell"         => "smells",
  "smite"         => "smites",
  "sneak"         => "sneaks",
  "sow"           => "sows",
  "speak"         => "speaks",
  "speed"         => "speeds",
  "spend"         => "spends",
  "spit"          => "spits",
  "spoil"         => "spoils",
  "spring"        => "springs",
  "stand"         => "stands",
  "stave"         => "staves",
  "stay"          => "stays",
  "steal"         => "steals",
  "sting"         => "stings",
  "stink"         => "stinks",
  "stop"          => "stops",
  "strew"         => "strews",
  "stride"        => "strides",
  "strip"         => "strips",
  "strive"        => "strives",
  "sublet"        => "sublets",
  "sunburn"       => "sunburns",
  "swear"         => "swears",
  "sweat"         => "sweats",
  "sweep"         => "sweeps",
  "swell"         => "swells",
  "swim"          => "swims",
  "swing"         => "swings",
  "talk"          => "talks",
  "tear"          => "tears",
  "thrive"        => "thrives",
  "thrust"        => "thrusts",
  "tread"         => "treads",
  "undergo"       => "undergoes",
  "understand"    => "understands",
  "undertake"     => "undertakes",
  "upset"         => "upsets",
  "vex"           => "vexes",
  "wait"          => "waits",
  "wake"          => "wakes",
  "walk"          => "walks",
  "want"          => "wants",
  "watch"         => "watches",
  "wear"          => "wears",
  "weep"          => "weeps",
  "wend"          => "wends",
  "were"          => "was",
  "will"          => "will",
  "win"           => "wins",
  "withdraw"      => "withdraws",
  "withhold"      => "withholds",
  "withstand"     => "withstands",
  "won't"         => "won't",
  "wring"         => "wrings",
};

my $past_of = {
  ""                 => "_",
  "_"                => "could",
  "abide"            => "abided",
  "abided"           => "abided",
  "abides"           => "abided",
  "abiding"          => "abided",
  "ache"             => "ached",
  "ached"            => "ached",
  "aches"            => "ached",
  "aching"           => "ached",
  "am"               => "was",
  "are"              => "were",
  "aren't"           => "wasn't",
  "arise"            => "arose",
  "arisen"           => "arose",
  "arises"           => "arose",
  "arising"          => "arose",
  "ask"              => "asked",
  "asked"            => "asked",
  "asking"           => "asked",
  "asks"             => "asked",
  "avalanche"        => "avalanched",
  "avalanched"       => "avalanched",
  "avalanches"       => "avalanched",
  "avalanching"      => "avalanched",
  "awake"            => "awoke",
  "awakening"        => "awoke",
  "awakes"           => "awoke",
  "awoken"           => "awoke",
  "beat"             => "beat",
  "beaten"           => "beat",
  "beating"          => "beat",
  "beats"            => "beat",
  "become"           => "became",
  "becomes"          => "became",
  "becoming"         => "became",
  "been"             => "was",
  "beget"            => "begot",
  "begets"           => "begot",
  "begetting"        => "begot",
  "begin"            => "began",
  "beginning"        => "began",
  "begins"           => "began",
  "begotten"         => "begot",
  "begun"            => "began",
  "beheld"           => "beheld",
  "behold"           => "beheld",
  "beholding"        => "beheld",
  "beholds"          => "beheld",
  "being"            => "was",
  "bellyache"        => "bellyached",
  "bellyached"       => "bellyached",
  "bellyaches"       => "bellyached",
  "bellyaching"      => "bellyached",
  "bend"             => "bent",
  "bending"          => "bent",
  "bends"            => "bent",
  "bent"             => "bent",
  "bet"              => "bet",
  "bets"             => "bet",
  "betting"          => "bet",
  "bind"             => "bound",
  "binding"          => "bound",
  "binds"            => "bound",
  "bite"             => "bit",
  "bites"            => "bit",
  "biting"           => "bit",
  "bitten"           => "bit",
  "bled"             => "bled",
  "bleed"            => "bled",
  "bleeding"         => "bled",
  "bleeds"           => "bled",
  "blitz"            => "blitzed",
  "blitzed"          => "blitzed",
  "blitzes"          => "blitzed",
  "blitzing"         => "blitzed",
  "blow"             => "blew",
  "blowing"          => "blew",
  "blown"            => "blew",
  "blows"            => "blew",
  "bound"            => "bound",
  "break"            => "broke",
  "breaking"         => "broke",
  "breaks"           => "broke",
  "bred"             => "bred",
  "breed"            => "bred",
  "breeding"         => "bred",
  "breeds"           => "bred",
  "bring"            => "brought",
  "bringing"         => "brought",
  "brings"           => "brought",
  "broken"           => "broke",
  "brought"          => "brought",
  "build"            => "built",
  "building"         => "built",
  "builds"           => "built",
  "built"            => "built",
  "burn"             => "burnt",
  "burning"          => "burnt",
  "burns"            => "burnt",
  "burnt"            => "burnt",
  "burst"            => "burst",
  "bursting"         => "burst",
  "bursts"           => "burst",
  "bust"             => "bust",
  "busting"          => "bust",
  "busts"            => "bust",
  "cache"            => "cached",
  "cached"           => "cached",
  "caches"           => "cached",
  "caching"          => "cached",
  "can"              => "could",
  "can't"            => "couldn't",
  "catch"            => "caught",
  "catches"          => "caught",
  "catching"         => "caught",
  "caught"           => "caught",
  "change"           => "changed",
  "changed"          => "changed",
  "changes"          => "changed",
  "changing"         => "changed",
  "choose"           => "chose",
  "chooses"          => "chose",
  "choosing"         => "chose",
  "chosen"           => "chose",
  "clap"             => "clapped",
  "clapped"          => "clapped",
  "clapping"         => "clapped",
  "claps"            => "clapped",
  "cling"            => "clung",
  "clinging"         => "clung",
  "clings"           => "clung",
  "clung"            => "clung",
  "come"             => "came",
  "comes"            => "came",
  "coming"           => "came",
  "continue"         => "continued",
  "continued"        => "continued",
  "continues"        => "continued",
  "continuing"       => "continued",
  "cost"             => "cost",
  "costing"          => "cost",
  "costs"            => "cost",
  "could"            => "_",
  "creche"           => "creched",
  "creched"          => "creched",
  "creches"          => "creched",
  "creching"         => "creched",
  "creep"            => "crept",
  "creeping"         => "crept",
  "creeps"           => "crept",
  "crept"            => "crept",
  "dare"             => "dared",
  "dared"            => "dared",
  "daren't"          => "_",
  "dares"            => "dared",
  "daring"           => "dared",
  "deal"             => "dealt",
  "dealing"          => "dealt",
  "deals"            => "dealt",
  "dealt"            => "dealt",
  "die"              => "died",
  "died"             => "died",
  "dies"             => "died",
  "dig"              => "dug",
  "digging"          => "dug",
  "digs"             => "dug",
  "dive"             => "dived",
  "dived"            => "dived",
  "dives"            => "dived",
  "diving"           => "dived",
  "doesn't"          => "didn't",
  "don't"            => "didn't",
  "douche"           => "douched",
  "douched"          => "douched",
  "douches"          => "douched",
  "douching"         => "douched",
  "drag"             => "dragged",
  "dragged"          => "dragged",
  "dragging"         => "dragged",
  "drags"            => "dragged",
  "dream"            => "dreamed",
  "dreamed"          => "dreamed",
  "dreaming"         => "dreamed",
  "dreams"           => "dreamed",
  "drink"            => "drank",
  "drinking"         => "drank",
  "drinks"           => "drank",
  "drive"            => "drove",
  "driven"           => "drove",
  "drives"           => "drove",
  "driving"          => "drove",
  "drunk"            => "drank",
  "dug"              => "dug",
  "dwell"            => "dwelt",
  "dwelling"         => "dwelt",
  "dwells"           => "dwelt",
  "dwelt"            => "dwelt",
  "dying"            => "died",
  "eat"              => "ate",
  "eaten"            => "ate",
  "eating"           => "ate",
  "eats"             => "ate",
  "expect"           => "expected",
  "expected"         => "expected",
  "expecting"        => "expected",
  "expects"          => "expected",
  "fall"             => "fell",
  "fallen"           => "fell",
  "falling"          => "fell",
  "falls"            => "fell",
  "feel"             => "felt",
  "feeling"          => "felt",
  "feels"            => "felt",
  "felt"             => "felt",
  "fight"            => "fought",
  "fighting"         => "fought",
  "fights"           => "fought",
  "find"             => "found",
  "finding"          => "found",
  "finds"            => "found",
  "fled"             => "fled",
  "flee"             => "fled",
  "fleeing"          => "fled",
  "flees"            => "fled",
  "flies"            => "flew",
  "fling"            => "flung",
  "flinging"         => "flung",
  "flings"           => "flung",
  "flown"            => "flew",
  "flung"            => "flung",
  "fly"              => "flew",
  "flying"           => "flew",
  "follow"           => "followed",
  "followed"         => "followed",
  "following"        => "followed",
  "follows"          => "followed",
  "forbid"           => "forbade",
  "forbidden"        => "forbade",
  "forbidding"       => "forbade",
  "forbids"          => "forbade",
  "foresee"          => "foresaw",
  "foreseeing"       => "foresaw",
  "foreseen"         => "foresaw",
  "foresees"         => "foresaw",
  "foretell"         => "foretold",
  "foretelling"      => "foretold",
  "foretells"        => "foretold",
  "foretold"         => "foretold",
  "forget"           => "forgot",
  "forgets"          => "forgot",
  "forgetting"       => "forgot",
  "forgive"          => "forgave",
  "forgiven"         => "forgave",
  "forgives"         => "forgave",
  "forgiving"        => "forgave",
  "forgotten"        => "forgot",
  "forsake"          => "forsook",
  "forsaken"         => "forsook",
  "forsakes"         => "forsook",
  "forsaking"        => "forsook",
  "fought"           => "fought",
  "found"            => "found",
  "get"              => "got",
  "gets"             => "got",
  "getting"          => "got",
  "gild"             => "gilded",
  "gilded"           => "gilded",
  "gilding"          => "gilded",
  "gilds"            => "gilded",
  "give"             => "gave",
  "given"            => "gave",
  "gives"            => "gave",
  "giving"           => "gave",
  "go"               => "went",
  "goes"             => "went",
  "going"            => "went",
  "gone"             => "went",
  "gotten"           => "got",
  "grind"            => "ground",
  "grinding"         => "ground",
  "grinds"           => "ground",
  "ground"           => "ground",
  "had"              => "had",
  "happen"           => "happened",
  "happened"         => "happened",
  "happening"        => "happened",
  "happens"          => "happened",
  "has"              => "had",
  "hasn't"           => "hadn't",
  "have"             => "had",
  "haven't"          => "hadn't",
  "having"           => "had",
  "held"             => "held",
  "help"             => "helped",
  "helped"           => "helped",
  "helping"          => "helped",
  "helps"            => "helped",
  "hew"              => "hewed",
  "hewing"           => "hewed",
  "hewn"             => "hewed",
  "hews"             => "hewed",
  "hit"              => "hit",
  "hits"             => "hit",
  "hitting"          => "hit",
  "hold"             => "held",
  "holding"          => "held",
  "holds"            => "held",
  "hurt"             => "hurt",
  "hurting"          => "hurt",
  "hurts"            => "hurt",
  "inlaid"           => "inlaid",
  "inlay"            => "inlaid",
  "inlaying"         => "inlaid",
  "inlays"           => "inlaid",
  "insist"           => "insisted",
  "insisted"         => "insisted",
  "insisting"        => "insisted",
  "insists"          => "insisted",
  "interlaid"        => "interlaid",
  "interlay"         => "interlaid",
  "interlaying"      => "interlaid",
  "interlays"        => "interlaid",
  "iris"             => "irised",
  "irised"           => "irised",
  "irises"           => "irised",
  "irising"          => "irised",
  "is"               => "was",
  "isn't"            => "wasn't",
  "keep"             => "kept",
  "keeping"          => "kept",
  "keeps"            => "kept",
  "kept"             => "kept",
  "kill"             => "killed",
  "killed"           => "killed",
  "killing"          => "killed",
  "kills"            => "killed",
  "kneel"            => "knelt",
  "kneeling"         => "knelt",
  "kneels"           => "knelt",
  "knelt"            => "knelt",
  "knit"             => "knitted",
  "knits"            => "knitted",
  "knitted"          => "knitted",
  "knitting"         => "knitted",
  "know"             => "knew",
  "knowing"          => "knew",
  "known"            => "knew",
  "knows"            => "knew",
  "laid"             => "laid",
  "lain"             => "lay",
  "lay"              => "laid",
  "laying"           => "laid",
  "lays"             => "laid",
  "lead"             => "led",
  "leading"          => "led",
  "leads"            => "led",
  "lean"             => "leaned",
  "leaned"           => "leaned",
  "leaning"          => "leaned",
  "leans"            => "leaned",
  "leap"             => "leapt",
  "leaping"          => "leapt",
  "leaps"            => "leapt",
  "leapt"            => "leapt",
  "learn"            => "learned",
  "learned"          => "learned",
  "learning"         => "learned",
  "learns"           => "learned",
  "leave"            => "left",
  "leaves"           => "left",
  "leaving"          => "left",
  "led"              => "led",
  "left"             => "left",
  "lie"              => "lay",
  "lies"             => "lay",
  "like"             => "liked",
  "liked"            => "liked",
  "likes"            => "liked",
  "liking"           => "liked",
  "live"             => "lived",
  "lived"            => "lived",
  "lives"            => "lived",
  "living"           => "lived",
  "look"             => "looked",
  "looked"           => "looked",
  "looking"          => "looked",
  "looks"            => "looked",
  "lose"             => "lost",
  "loses"            => "lost",
  "losing"           => "lost",
  "lost"             => "lost",
  "love"             => "loved",
  "loved"            => "loved",
  "loves"            => "loved",
  "loving"           => "loved",
  "lying"            => "lay",
  "may"              => "might",
  "mayn't"           => "mightn't",
  "mean"             => "meant",
  "meaning"          => "meant",
  "means"            => "meant",
  "meant"            => "meant",
  "meet"             => "met",
  "meeting"          => "met",
  "meets"            => "met",
  "menu"             => "menued",
  "menued"           => "menued",
  "menuing"          => "menued",
  "menus"            => "menued",
  "met"              => "met",
  "might"            => "_",
  "mislead"          => "misled",
  "misleading"       => "misled",
  "misleads"         => "misled",
  "misled"           => "misled",
  "mistake"          => "mistook",
  "mistaken"         => "mistook",
  "mistakes"         => "mistook",
  "mistaking"        => "mistook",
  "misunderstand"    => "misunderstood",
  "misunderstanding" => "misunderstood",
  "misunderstands"   => "misunderstood",
  "misunderstood"    => "misunderstood",
  "move"             => "moved",
  "moved"            => "moved",
  "moves"            => "moved",
  "moving"           => "moved",
  "must"             => "_",
  "mustn't"          => "_",
  "n't"              => "_",
  "need"             => "needed",
  "needed"           => "needed",
  "needing"          => "needed",
  "needn't"          => "_",
  "needs"            => "needed",
  "niche"            => "niched",
  "niched"           => "niched",
  "nicheing"         => "niched",
  "niches"           => "niched",
  "ought"            => "_",
  "oughtn't"         => "_",
  "overdraw"         => "overdrew",
  "overdrawing"      => "overdrew",
  "overdrawn"        => "overdrew",
  "overdraws"        => "overdrew",
  "overhear"         => "overheard",
  "overheard"        => "overheard",
  "overhearing"      => "overheard",
  "overhears"        => "overheard",
  "overtake"         => "overtook",
  "overtaken"        => "overtook",
  "overtakes"        => "overtook",
  "overtaking"       => "overtook",
  "preset"           => "preset",
  "presets"          => "preset",
  "presetting"       => "preset",
  "prove"            => "proved",
  "proved"           => "proved",
  "proven"           => "proved",
  "proves"           => "proved",
  "provide"          => "provided",
  "provided"         => "provided",
  "provides"         => "provided",
  "providing"        => "provided",
  "proving"          => "proved",
  "psyche"           => "psyched",
  "psyched"          => "psyched",
  "psyches"          => "psyched",
  "psyching"         => "psyched",
  "put"              => "put",
  "puts"             => "put",
  "putting"          => "put",
  "quit"             => "quit",
  "quits"            => "quit",
  "quitting"         => "quit",
  "quiz"             => "quizzed",
  "quizzed"          => "quizzed",
  "quizzes"          => "quizzed",
  "quizzing"         => "quizzed",
  "reach"            => "reached",
  "reached"          => "reached",
  "reaches"          => "reached",
  "reaching"         => "reached",
  "remain"           => "remained",
  "remained"         => "remained",
  "remaining"        => "remained",
  "remains"          => "remained",
  "remember"         => "remembered",
  "remembered"       => "remembered",
  "remembering"      => "remembered",
  "remembers"        => "remembered",
  "rend"             => "rent",
  "rending"          => "rent",
  "rends"            => "rent",
  "rent"             => "rent",
  "rid"              => "rid",
  "ridden"           => "rode",
  "ridding"          => "rid",
  "ride"             => "rode",
  "rides"            => "rode",
  "riding"           => "rode",
  "rids"             => "rid",
  "ring"             => "rang",
  "ringing"          => "rang",
  "rings"            => "rang",
  "rise"             => "rose",
  "risen"            => "rose",
  "rises"            => "rose",
  "rising"           => "rose",
  "rive"             => "rived",
  "riven"            => "rived",
  "rives"            => "rived",
  "riving"           => "rived",
  "run"              => "ran",
  "rung"             => "rang",
  "running"          => "ran",
  "runs"             => "ran",
  "s"                => "_",
  "sat"              => "sat",
  "saw"              => "sawed",
  "sawing"           => "sawed",
  "sawn"             => "sawed",
  "saws"             => "sawed",
  "seek"             => "sought",
  "seeking"          => "sought",
  "seeks"            => "sought",
  "seem"             => "seemed",
  "seemed"           => "seemed",
  "seeming"          => "seemed",
  "seems"            => "seemed",
  "sha'n't"          => "shouldn't",
  "shake"            => "shook",
  "shaken"           => "shook",
  "shakes"           => "shook",
  "shaking"          => "shook",
  "shall"            => "should",
  "shan't"           => "shouldn't",
  "shave"            => "shaved",
  "shaved"           => "shaved",
  "shaves"           => "shaved",
  "shaving"          => "shaved",
  "shed"             => "shed",
  "shedding"         => "shed",
  "sheds"            => "shed",
  "shit"             => "shat",
  "shits"            => "shat",
  "shitted"          => "shat",
  "shitting"         => "shat",
  "shod"             => "shod",
  "shoe"             => "shod",
  "shoeing"          => "shod",
  "shoes"            => "shod",
  "show"             => "showed",
  "showing"          => "showed",
  "shown"            => "showed",
  "shows"            => "showed",
  "shrink"           => "shrank",
  "shrinking"        => "shrank",
  "shrinks"          => "shrank",
  "shrunk"           => "shrank",
  "sing"             => "sang",
  "singing"          => "sang",
  "sings"            => "sang",
  "sink"             => "sank",
  "sinking"          => "sank",
  "sinks"            => "sank",
  "sit"              => "sat",
  "sits"             => "sat",
  "sitting"          => "sat",
  "ski"              => "skied",
  "skied"            => "skied",
  "skiing"           => "skied",
  "skis"             => "skied",
  "slain"            => "slew",
  "slay"             => "slew",
  "slaying"          => "slew",
  "slays"            => "slew",
  "slid"             => "slid",
  "slide"            => "slid",
  "slides"           => "slid",
  "sliding"          => "slid",
  "slink"            => "slunk",
  "slinking"         => "slunk",
  "slinks"           => "slunk",
  "slit"             => "slit",
  "slits"            => "slit",
  "slitting"         => "slit",
  "slunk"            => "slunk",
  "smell"            => "smelled",
  "smelled"          => "smelled",
  "smelling"         => "smelled",
  "smells"           => "smelled",
  "smite"            => "smote",
  "smites"           => "smote",
  "smiting"          => "smote",
  "smitten"          => "smote",
  "sneak"            => "sneaked",
  "sneaked"          => "sneaked",
  "sneaking"         => "sneaked",
  "sneaks"           => "sneaked",
  "sought"           => "sought",
  "sow"              => "sowed",
  "sowing"           => "sowed",
  "sown"             => "sowed",
  "sows"             => "sowed",
  "spat"             => "spat",
  "speak"            => "spoke",
  "speaking"         => "spoke",
  "speaks"           => "spoke",
  "sped"             => "sped",
  "speed"            => "sped",
  "speeding"         => "sped",
  "speeds"           => "sped",
  "spend"            => "spent",
  "spending"         => "spent",
  "spends"           => "spent",
  "spent"            => "spent",
  "spit"             => "spat",
  "spits"            => "spat",
  "spitting"         => "spat",
  "spoil"            => "spoilt",
  "spoiled"          => "spoilt",
  "spoiling"         => "spoilt",
  "spoils"           => "spoilt",
  "spoken"           => "spoke",
  "spring"           => "sprang",
  "springing"        => "sprang",
  "springs"          => "sprang",
  "sprung"           => "sprang",
  "stand"            => "stood",
  "standing"         => "stood",
  "stands"           => "stood",
  "stave"            => "staved",
  "staved"           => "staved",
  "staves"           => "staved",
  "staving"          => "staved",
  "stay"             => "stayed",
  "stayed"           => "stayed",
  "staying"          => "stayed",
  "stays"            => "stayed",
  "steal"            => "stole",
  "stealing"         => "stole",
  "steals"           => "stole",
  "sting"            => "stung",
  "stinging"         => "stung",
  "stings"           => "stung",
  "stink"            => "stank",
  "stinking"         => "stank",
  "stinks"           => "stank",
  "stolen"           => "stole",
  "stood"            => "stood",
  "stop"             => "stopped",
  "stopped"          => "stopped",
  "stopping"         => "stopped",
  "stops"            => "stopped",
  "strew"            => "strewed",
  "strewing"         => "strewed",
  "strewn"           => "strewed",
  "strews"           => "strewed",
  "stride"           => "strode",
  "strides"          => "strode",
  "striding"         => "strode",
  "strip"            => "stripped",
  "stripped"         => "stripped",
  "stripping"        => "stripped",
  "strips"           => "stripped",
  "strive"           => "strove",
  "strived"          => "strove",
  "strives"          => "strove",
  "striving"         => "strove",
  "strode"           => "strode",
  "stung"            => "stung",
  "stunk"            => "stank",
  "sublet"           => "sublet",
  "sublets"          => "sublet",
  "subletting"       => "sublet",
  "sunburn"          => "sunburned",
  "sunburned"        => "sunburned",
  "sunburning"       => "sunburned",
  "sunburns"         => "sunburned",
  "sung"             => "sang",
  "sunk"             => "sank",
  "swear"            => "swore",
  "swearing"         => "swore",
  "swears"           => "swore",
  "sweat"            => "sweat",
  "sweated"          => "sweat",
  "sweating"         => "sweat",
  "sweats"           => "sweat",
  "sweep"            => "swept",
  "sweeping"         => "swept",
  "sweeps"           => "swept",
  "swell"            => "swelled",
  "swelling"         => "swelled",
  "swells"           => "swelled",
  "swept"            => "swept",
  "swim"             => "swam",
  "swimming"         => "swam",
  "swims"            => "swam",
  "swing"            => "swung",
  "swinging"         => "swung",
  "swings"           => "swung",
  "swollen"          => "swelled",
  "sworn"            => "swore",
  "swum"             => "swam",
  "swung"            => "swung",
  "talk"             => "talked",
  "talked"           => "talked",
  "talking"          => "talked",
  "talks"            => "talked",
  "tear"             => "tore",
  "tearing"          => "tore",
  "tears"            => "tore",
  "thrive"           => "thrived",
  "thrived"          => "thrived",
  "thrives"          => "thrived",
  "thriving"         => "thrived",
  "thrust"           => "thrust",
  "thrusting"        => "thrust",
  "thrusts"          => "thrust",
  "torn"             => "tore",
  "tread"            => "trod",
  "treading"         => "trod",
  "treads"           => "trod",
  "trodden"          => "trod",
  "undergo"          => "underwent",
  "undergoes"        => "underwent",
  "undergoing"       => "underwent",
  "undergone"        => "underwent",
  "understand"       => "understood",
  "understanding"    => "understood",
  "understands"      => "understood",
  "understood"       => "understood",
  "undertake"        => "undertook",
  "undertaken"       => "undertook",
  "undertakes"       => "undertook",
  "undertaking"      => "undertook",
  "upset"            => "upset",
  "upsets"           => "upset",
  "upsetting"        => "upset",
  "vex"              => "vexed",
  "vexed"            => "vexed",
  "vexes"            => "vexed",
  "vexing"           => "vexed",
  "wait"             => "waited",
  "waited"           => "waited",
  "waiting"          => "waited",
  "waits"            => "waited",
  "wake"             => "woke",
  "wakes"            => "woke",
  "waking"           => "woke",
  "walk"             => "walked",
  "walked"           => "walked",
  "walking"          => "walked",
  "walks"            => "walked",
  "want"             => "wanted",
  "wanted"           => "wanted",
  "wanting"          => "wanted",
  "wants"            => "wanted",
  "was"              => "was",
  "watch"            => "watched",
  "watched"          => "watched",
  "watches"          => "watched",
  "watching"         => "watched",
  "wear"             => "wore",
  "wearing"          => "wore",
  "wears"            => "wore",
  "weep"             => "wept",
  "weeping"          => "wept",
  "weeps"            => "wept",
  "wend"             => "wended",
  "wended"           => "wended",
  "wending"          => "wended",
  "wends"            => "wended",
  "wept"             => "wept",
  "were"             => "were",
  "will"             => "would",
  "win"              => "won",
  "winning"          => "won",
  "wins"             => "won",
  "withdraw"         => "withdrew",
  "withdrawing"      => "withdrew",
  "withdrawn"        => "withdrew",
  "withdraws"        => "withdrew",
  "withheld"         => "withheld",
  "withhold"         => "withheld",
  "withholding"      => "withheld",
  "withholds"        => "withheld",
  "withstand"        => "withstood",
  "withstanding"     => "withstood",
  "withstands"       => "withstood",
  "withstood"        => "withstood",
  "woken"            => "woke",
  "won"              => "won",
  "won't"            => "wouldn't",
  "worn"             => "wore",
  "wring"            => "wrung",
  "wringing"         => "wrung",
  "wrings"           => "wrung",
  "wrung"            => "wrung",
};

my $pres_part_of = {
  ""                 => "_",
  "_"                => "_",
  "abide"            => "abiding",
  "abided"           => "abiding",
  "abides"           => "abiding",
  "abiding"          => "abiding",
  "ache"             => "aching",
  "ached"            => "aching",
  "aches"            => "aching",
  "aching"           => "aching",
  "am"               => "being",
  "are"              => "being",
  "aren't"           => "_",
  "arise"            => "arising",
  "arisen"           => "arising",
  "arises"           => "arising",
  "arising"          => "arising",
  "arose"            => "arising",
  "ask"              => "asking",
  "asked"            => "asking",
  "asking"           => "asking",
  "asks"             => "asking",
  "ate"              => "eating",
  "avalanche"        => "avalanching",
  "avalanched"       => "avalanching",
  "avalanches"       => "avalanching",
  "avalanching"      => "avalanching",
  "awake"            => "awakening",
  "awakening"        => "awakening",
  "awakes"           => "awakening",
  "awoke"            => "awakening",
  "awoken"           => "awakening",
  "beat"             => "beating",
  "beaten"           => "beating",
  "beating"          => "beating",
  "beats"            => "beating",
  "became"           => "becoming",
  "become"           => "becoming",
  "becomes"          => "becoming",
  "becoming"         => "becoming",
  "been"             => "being",
  "began"            => "beginning",
  "beget"            => "begetting",
  "begets"           => "begetting",
  "begetting"        => "begetting",
  "begin"            => "beginning",
  "beginning"        => "beginning",
  "begins"           => "beginning",
  "begot"            => "begetting",
  "begotten"         => "begetting",
  "begun"            => "beginning",
  "beheld"           => "beholding",
  "behold"           => "beholding",
  "beholding"        => "beholding",
  "beholds"          => "beholding",
  "being"            => "being",
  "bellyache"        => "bellyaching",
  "bellyached"       => "bellyaching",
  "bellyaches"       => "bellyaching",
  "bellyaching"      => "bellyaching",
  "bend"             => "bending",
  "bending"          => "bending",
  "bends"            => "bending",
  "bent"             => "bending",
  "bet"              => "betting",
  "bets"             => "betting",
  "betting"          => "betting",
  "bind"             => "binding",
  "binding"          => "binding",
  "binds"            => "binding",
  "bit"              => "biting",
  "bite"             => "biting",
  "bites"            => "biting",
  "biting"           => "biting",
  "bitten"           => "biting",
  "bled"             => "bleeding",
  "bleed"            => "bleeding",
  "bleeding"         => "bleeding",
  "bleeds"           => "bleeding",
  "blew"             => "blowing",
  "blitz"            => "blitzing",
  "blitzed"          => "blitzing",
  "blitzes"          => "blitzing",
  "blitzing"         => "blitzing",
  "blow"             => "blowing",
  "blowing"          => "blowing",
  "blown"            => "blowing",
  "blows"            => "blowing",
  "bound"            => "binding",
  "break"            => "breaking",
  "breaking"         => "breaking",
  "breaks"           => "breaking",
  "bred"             => "breeding",
  "breed"            => "breeding",
  "breeding"         => "breeding",
  "breeds"           => "breeding",
  "bring"            => "bringing",
  "bringing"         => "bringing",
  "brings"           => "bringing",
  "broke"            => "breaking",
  "broken"           => "breaking",
  "brought"          => "bringing",
  "build"            => "building",
  "building"         => "building",
  "builds"           => "building",
  "built"            => "building",
  "burn"             => "burning",
  "burning"          => "burning",
  "burns"            => "burning",
  "burnt"            => "burning",
  "burst"            => "bursting",
  "bursting"         => "bursting",
  "bursts"           => "bursting",
  "bust"             => "busting",
  "busting"          => "busting",
  "busts"            => "busting",
  "cache"            => "caching",
  "cached"           => "caching",
  "caches"           => "caching",
  "caching"          => "caching",
  "came"             => "coming",
  "can"              => "_",
  "can't"            => "_",
  "catch"            => "catching",
  "catches"          => "catching",
  "catching"         => "catching",
  "caught"           => "catching",
  "change"           => "changing",
  "changed"          => "changing",
  "changes"          => "changing",
  "changing"         => "changing",
  "choose"           => "choosing",
  "chooses"          => "choosing",
  "choosing"         => "choosing",
  "chose"            => "choosing",
  "chosen"           => "choosing",
  "clap"             => "clapping",
  "clapped"          => "clapping",
  "clapping"         => "clapping",
  "claps"            => "clapping",
  "cling"            => "clinging",
  "clinging"         => "clinging",
  "clings"           => "clinging",
  "clung"            => "clinging",
  "come"             => "coming",
  "comes"            => "coming",
  "coming"           => "coming",
  "continue"         => "continuing",
  "continued"        => "continuing",
  "continues"        => "continuing",
  "continuing"       => "continuing",
  "cost"             => "costing",
  "costing"          => "costing",
  "costs"            => "costing",
  "could"            => "_",
  "couldn't"         => "_",
  "creche"           => "creching",
  "creched"          => "creching",
  "creches"          => "creching",
  "creching"         => "creching",
  "creep"            => "creeping",
  "creeping"         => "creeping",
  "creeps"           => "creeping",
  "crept"            => "creeping",
  "dare"             => "daring",
  "dared"            => "daring",
  "daren't"          => "_",
  "dares"            => "daring",
  "daring"           => "daring",
  "deal"             => "dealing",
  "dealing"          => "dealing",
  "deals"            => "dealing",
  "dealt"            => "dealing",
  "didn't"           => "_",
  "die"              => "dying",
  "died"             => "dying",
  "dies"             => "dying",
  "dig"              => "digging",
  "digging"          => "digging",
  "digs"             => "digging",
  "dive"             => "diving",
  "dived"            => "diving",
  "dives"            => "diving",
  "diving"           => "diving",
  "doesn't"          => "_",
  "don't"            => "_",
  "douche"           => "douching",
  "douched"          => "douching",
  "douches"          => "douching",
  "douching"         => "douching",
  "drag"             => "dragging",
  "dragged"          => "dragging",
  "dragging"         => "dragging",
  "drags"            => "dragging",
  "drank"            => "drinking",
  "dream"            => "dreaming",
  "dreamed"          => "dreaming",
  "dreaming"         => "dreaming",
  "dreams"           => "dreaming",
  "drink"            => "drinking",
  "drinking"         => "drinking",
  "drinks"           => "drinking",
  "drive"            => "driving",
  "driven"           => "driving",
  "drives"           => "driving",
  "driving"          => "driving",
  "drove"            => "driving",
  "drunk"            => "drinking",
  "dug"              => "digging",
  "dwell"            => "dwelling",
  "dwelling"         => "dwelling",
  "dwells"           => "dwelling",
  "dwelt"            => "dwelling",
  "dying"            => "dying",
  "eat"              => "eating",
  "eaten"            => "eating",
  "eating"           => "eating",
  "eats"             => "eating",
  "expect"           => "expecting",
  "expected"         => "expecting",
  "expecting"        => "expecting",
  "expects"          => "expecting",
  "fall"             => "falling",
  "fallen"           => "falling",
  "falling"          => "falling",
  "falls"            => "falling",
  "feel"             => "feeling",
  "feeling"          => "feeling",
  "feels"            => "feeling",
  "fell"             => "falling",
  "felt"             => "feeling",
  "fight"            => "fighting",
  "fighting"         => "fighting",
  "fights"           => "fighting",
  "find"             => "finding",
  "finding"          => "finding",
  "finds"            => "finding",
  "fled"             => "fleeing",
  "flee"             => "fleeing",
  "fleeing"          => "fleeing",
  "flees"            => "fleeing",
  "flew"             => "flying",
  "flies"            => "flying",
  "fling"            => "flinging",
  "flinging"         => "flinging",
  "flings"           => "flinging",
  "flown"            => "flying",
  "flung"            => "flinging",
  "fly"              => "flying",
  "flying"           => "flying",
  "follow"           => "following",
  "followed"         => "following",
  "following"        => "following",
  "follows"          => "following",
  "forbade"          => "forbidding",
  "forbid"           => "forbidding",
  "forbidden"        => "forbidding",
  "forbidding"       => "forbidding",
  "forbids"          => "forbidding",
  "foresaw"          => "foreseeing",
  "foresee"          => "foreseeing",
  "foreseeing"       => "foreseeing",
  "foreseen"         => "foreseeing",
  "foresees"         => "foreseeing",
  "foretell"         => "foretelling",
  "foretelling"      => "foretelling",
  "foretells"        => "foretelling",
  "foretold"         => "foretelling",
  "forgave"          => "forgiving",
  "forget"           => "forgetting",
  "forgets"          => "forgetting",
  "forgetting"       => "forgetting",
  "forgive"          => "forgiving",
  "forgiven"         => "forgiving",
  "forgives"         => "forgiving",
  "forgiving"        => "forgiving",
  "forgot"           => "forgetting",
  "forgotten"        => "forgetting",
  "forsake"          => "forsaking",
  "forsaken"         => "forsaking",
  "forsakes"         => "forsaking",
  "forsaking"        => "forsaking",
  "forsook"          => "forsaking",
  "fought"           => "fighting",
  "found"            => "finding",
  "gave"             => "giving",
  "get"              => "getting",
  "gets"             => "getting",
  "getting"          => "getting",
  "gild"             => "gilding",
  "gilded"           => "gilding",
  "gilding"          => "gilding",
  "gilds"            => "gilding",
  "give"             => "giving",
  "given"            => "giving",
  "gives"            => "giving",
  "giving"           => "giving",
  "go"               => "going",
  "goes"             => "going",
  "going"            => "going",
  "gone"             => "going",
  "got"              => "getting",
  "gotten"           => "getting",
  "grind"            => "grinding",
  "grinding"         => "grinding",
  "grinds"           => "grinding",
  "ground"           => "grinding",
  "had"              => "having",
  "hadn't"           => "_",
  "happen"           => "happening",
  "happened"         => "happening",
  "happening"        => "happening",
  "happens"          => "happening",
  "has"              => "having",
  "hasn't"           => "_",
  "have"             => "having",
  "haven't"          => "_",
  "having"           => "having",
  "held"             => "holding",
  "help"             => "helping",
  "helped"           => "helping",
  "helping"          => "helping",
  "helps"            => "helping",
  "hew"              => "hewing",
  "hewed"            => "hewing",
  "hewing"           => "hewing",
  "hewn"             => "hewing",
  "hews"             => "hewing",
  "hit"              => "hitting",
  "hits"             => "hitting",
  "hitting"          => "hitting",
  "hold"             => "holding",
  "holding"          => "holding",
  "holds"            => "holding",
  "hurt"             => "hurting",
  "hurting"          => "hurting",
  "hurts"            => "hurting",
  "inlaid"           => "inlaying",
  "inlay"            => "inlaying",
  "inlaying"         => "inlaying",
  "inlays"           => "inlaying",
  "insist"           => "insisting",
  "insisted"         => "insisting",
  "insisting"        => "insisting",
  "insists"          => "insisting",
  "interlaid"        => "interlaying",
  "interlay"         => "interlaying",
  "interlaying"      => "interlaying",
  "interlays"        => "interlaying",
  "iris"             => "irising",
  "irised"           => "irising",
  "irises"           => "irising",
  "irising"          => "irising",
  "is"               => "being",
  "isn't"            => "_",
  "keep"             => "keeping",
  "keeping"          => "keeping",
  "keeps"            => "keeping",
  "kept"             => "keeping",
  "kill"             => "killing",
  "killed"           => "killing",
  "killing"          => "killing",
  "kills"            => "killing",
  "kneel"            => "kneeling",
  "kneeling"         => "kneeling",
  "kneels"           => "kneeling",
  "knelt"            => "kneeling",
  "knew"             => "knowing",
  "knit"             => "knitting",
  "knits"            => "knitting",
  "knitted"          => "knitting",
  "knitting"         => "knitting",
  "know"             => "knowing",
  "knowing"          => "knowing",
  "known"            => "knowing",
  "knows"            => "knowing",
  "laid"             => "laying",
  "lain"             => "lying",
  "lay"              => "laying",
  "laying"           => "laying",
  "lays"             => "laying",
  "lead"             => "leading",
  "leading"          => "leading",
  "leads"            => "leading",
  "lean"             => "leaning",
  "leaned"           => "leaning",
  "leaning"          => "leaning",
  "leans"            => "leaning",
  "leap"             => "leaping",
  "leaping"          => "leaping",
  "leaps"            => "leaping",
  "leapt"            => "leaping",
  "learn"            => "learning",
  "learned"          => "learning",
  "learning"         => "learning",
  "learns"           => "learning",
  "leave"            => "leaving",
  "leaves"           => "leaving",
  "leaving"          => "leaving",
  "led"              => "leading",
  "left"             => "leaving",
  "lie"              => "lying",
  "lies"             => "lying",
  "like"             => "liking",
  "liked"            => "liking",
  "likes"            => "liking",
  "liking"           => "liking",
  "live"             => "living",
  "lived"            => "living",
  "lives"            => "living",
  "living"           => "living",
  "look"             => "looking",
  "looked"           => "looking",
  "looking"          => "looking",
  "looks"            => "looking",
  "lose"             => "losing",
  "loses"            => "losing",
  "losing"           => "losing",
  "lost"             => "losing",
  "love"             => "loving",
  "loved"            => "loving",
  "loves"            => "loving",
  "loving"           => "loving",
  "lying"            => "lying",
  "may"              => "_",
  "mayn't"           => "_",
  "mean"             => "meaning",
  "meaning"          => "meaning",
  "means"            => "meaning",
  "meant"            => "meaning",
  "meet"             => "meeting",
  "meeting"          => "meeting",
  "meets"            => "meeting",
  "menu"             => "menuing",
  "menued"           => "menuing",
  "menuing"          => "menuing",
  "menus"            => "menuing",
  "met"              => "meeting",
  "might"            => "_",
  "mightn't"         => "_",
  "mislead"          => "misleading",
  "misleading"       => "misleading",
  "misleads"         => "misleading",
  "misled"           => "misleading",
  "mistake"          => "mistaking",
  "mistaken"         => "mistaking",
  "mistakes"         => "mistaking",
  "mistaking"        => "mistaking",
  "mistook"          => "mistaking",
  "misunderstand"    => "misunderstanding",
  "misunderstanding" => "misunderstanding",
  "misunderstands"   => "misunderstanding",
  "misunderstood"    => "misunderstanding",
  "move"             => "moving",
  "moved"            => "moving",
  "moves"            => "moving",
  "moving"           => "moving",
  "must"             => "_",
  "mustn't"          => "_",
  "n't"              => "_",
  "need"             => "needing",
  "needed"           => "needing",
  "needing"          => "needing",
  "needn't"          => "_",
  "needs"            => "needing",
  "niche"            => "nicheing",
  "niched"           => "nicheing",
  "nicheing"         => "nicheing",
  "niches"           => "nicheing",
  "ought"            => "_",
  "oughtn't"         => "_",
  "overdraw"         => "overdrawing",
  "overdrawing"      => "overdrawing",
  "overdrawn"        => "overdrawing",
  "overdraws"        => "overdrawing",
  "overdrew"         => "overdrawing",
  "overhear"         => "overhearing",
  "overheard"        => "overhearing",
  "overhearing"      => "overhearing",
  "overhears"        => "overhearing",
  "overtake"         => "overtaking",
  "overtaken"        => "overtaking",
  "overtakes"        => "overtaking",
  "overtaking"       => "overtaking",
  "overtook"         => "overtaking",
  "preset"           => "presetting",
  "presets"          => "presetting",
  "presetting"       => "presetting",
  "prove"            => "proving",
  "proved"           => "proving",
  "proven"           => "proving",
  "proves"           => "proving",
  "provide"          => "providing",
  "provided"         => "providing",
  "provides"         => "providing",
  "providing"        => "providing",
  "proving"          => "proving",
  "psyche"           => "psyching",
  "psyched"          => "psyching",
  "psyches"          => "psyching",
  "psyching"         => "psyching",
  "put"              => "putting",
  "puts"             => "putting",
  "putting"          => "putting",
  "quit"             => "quitting",
  "quits"            => "quitting",
  "quitting"         => "quitting",
  "quiz"             => "quizzing",
  "quizzed"          => "quizzing",
  "quizzes"          => "quizzing",
  "quizzing"         => "quizzing",
  "ran"              => "running",
  "rang"             => "ringing",
  "reach"            => "reaching",
  "reached"          => "reaching",
  "reaches"          => "reaching",
  "reaching"         => "reaching",
  "remain"           => "remaining",
  "remained"         => "remaining",
  "remaining"        => "remaining",
  "remains"          => "remaining",
  "remember"         => "remembering",
  "remembered"       => "remembering",
  "remembering"      => "remembering",
  "remembers"        => "remembering",
  "rend"             => "rending",
  "rending"          => "rending",
  "rends"            => "rending",
  "rent"             => "rending",
  "rid"              => "ridding",
  "ridden"           => "riding",
  "ridding"          => "ridding",
  "ride"             => "riding",
  "rides"            => "riding",
  "riding"           => "riding",
  "rids"             => "ridding",
  "ring"             => "ringing",
  "ringing"          => "ringing",
  "rings"            => "ringing",
  "rise"             => "rising",
  "risen"            => "rising",
  "rises"            => "rising",
  "rising"           => "rising",
  "rive"             => "riving",
  "rived"            => "riving",
  "riven"            => "riving",
  "rives"            => "riving",
  "riving"           => "riving",
  "rode"             => "riding",
  "rose"             => "rising",
  "run"              => "running",
  "rung"             => "ringing",
  "running"          => "running",
  "runs"             => "running",
  "s"                => "_",
  "sang"             => "singing",
  "sank"             => "sinking",
  "sat"              => "sitting",
  "saw"              => "sawing",
  "sawed"            => "sawing",
  "sawing"           => "sawing",
  "sawn"             => "sawing",
  "saws"             => "sawing",
  "seek"             => "seeking",
  "seeking"          => "seeking",
  "seeks"            => "seeking",
  "seem"             => "seeming",
  "seemed"           => "seeming",
  "seeming"          => "seeming",
  "seems"            => "seeming",
  "sha'n't"          => "_",
  "shake"            => "shaking",
  "shaken"           => "shaking",
  "shakes"           => "shaking",
  "shaking"          => "shaking",
  "shall"            => "_",
  "shan't"           => "_",
  "shat"             => "shitting",
  "shave"            => "shaving",
  "shaved"           => "shaving",
  "shaves"           => "shaving",
  "shaving"          => "shaving",
  "shed"             => "shedding",
  "shedding"         => "shedding",
  "sheds"            => "shedding",
  "shit"             => "shitting",
  "shits"            => "shitting",
  "shitted"          => "shitting",
  "shitting"         => "shitting",
  "shod"             => "shoeing",
  "shoe"             => "shoeing",
  "shoeing"          => "shoeing",
  "shoes"            => "shoeing",
  "shook"            => "shaking",
  "should"           => "_",
  "shouldn't"        => "_",
  "show"             => "showing",
  "showed"           => "showing",
  "showing"          => "showing",
  "shown"            => "showing",
  "shows"            => "showing",
  "shrank"           => "shrinking",
  "shrink"           => "shrinking",
  "shrinking"        => "shrinking",
  "shrinks"          => "shrinking",
  "shrunk"           => "shrinking",
  "sing"             => "singing",
  "singing"          => "singing",
  "sings"            => "singing",
  "sink"             => "sinking",
  "sinking"          => "sinking",
  "sinks"            => "sinking",
  "sit"              => "sitting",
  "sits"             => "sitting",
  "sitting"          => "sitting",
  "ski"              => "skiing",
  "skied"            => "skiing",
  "skiing"           => "skiing",
  "skis"             => "skiing",
  "slain"            => "slaying",
  "slay"             => "slaying",
  "slaying"          => "slaying",
  "slays"            => "slaying",
  "slew"             => "slaying",
  "slid"             => "sliding",
  "slide"            => "sliding",
  "slides"           => "sliding",
  "sliding"          => "sliding",
  "slink"            => "slinking",
  "slinking"         => "slinking",
  "slinks"           => "slinking",
  "slit"             => "slitting",
  "slits"            => "slitting",
  "slitting"         => "slitting",
  "slunk"            => "slinking",
  "smell"            => "smelling",
  "smelled"          => "smelling",
  "smelling"         => "smelling",
  "smells"           => "smelling",
  "smite"            => "smiting",
  "smites"           => "smiting",
  "smiting"          => "smiting",
  "smitten"          => "smiting",
  "smote"            => "smiting",
  "sneak"            => "sneaking",
  "sneaked"          => "sneaking",
  "sneaking"         => "sneaking",
  "sneaks"           => "sneaking",
  "sought"           => "seeking",
  "sow"              => "sowing",
  "sowed"            => "sowing",
  "sowing"           => "sowing",
  "sown"             => "sowing",
  "sows"             => "sowing",
  "spat"             => "spitting",
  "speak"            => "speaking",
  "speaking"         => "speaking",
  "speaks"           => "speaking",
  "sped"             => "speeding",
  "speed"            => "speeding",
  "speeding"         => "speeding",
  "speeds"           => "speeding",
  "spend"            => "spending",
  "spending"         => "spending",
  "spends"           => "spending",
  "spent"            => "spending",
  "spit"             => "spitting",
  "spits"            => "spitting",
  "spitting"         => "spitting",
  "spoil"            => "spoiling",
  "spoiled"          => "spoiling",
  "spoiling"         => "spoiling",
  "spoils"           => "spoiling",
  "spoilt"           => "spoiling",
  "spoke"            => "speaking",
  "spoken"           => "speaking",
  "sprang"           => "springing",
  "spring"           => "springing",
  "springing"        => "springing",
  "springs"          => "springing",
  "sprung"           => "springing",
  "stand"            => "standing",
  "standing"         => "standing",
  "stands"           => "standing",
  "stank"            => "stinking",
  "stave"            => "staving",
  "staved"           => "staving",
  "staves"           => "staving",
  "staving"          => "staving",
  "stay"             => "staying",
  "stayed"           => "staying",
  "staying"          => "staying",
  "stays"            => "staying",
  "steal"            => "stealing",
  "stealing"         => "stealing",
  "steals"           => "stealing",
  "sting"            => "stinging",
  "stinging"         => "stinging",
  "stings"           => "stinging",
  "stink"            => "stinking",
  "stinking"         => "stinking",
  "stinks"           => "stinking",
  "stole"            => "stealing",
  "stolen"           => "stealing",
  "stood"            => "standing",
  "stop"             => "stopping",
  "stopped"          => "stopping",
  "stopping"         => "stopping",
  "stops"            => "stopping",
  "strew"            => "strewing",
  "strewed"          => "strewing",
  "strewing"         => "strewing",
  "strewn"           => "strewing",
  "strews"           => "strewing",
  "stride"           => "striding",
  "strides"          => "striding",
  "striding"         => "striding",
  "strip"            => "stripping",
  "stripped"         => "stripping",
  "stripping"        => "stripping",
  "strips"           => "stripping",
  "strive"           => "striving",
  "strived"          => "striving",
  "strives"          => "striving",
  "striving"         => "striving",
  "strode"           => "striding",
  "strove"           => "striving",
  "stung"            => "stinging",
  "stunk"            => "stinking",
  "sublet"           => "subletting",
  "sublets"          => "subletting",
  "subletting"       => "subletting",
  "sunburn"          => "sunburning",
  "sunburned"        => "sunburning",
  "sunburning"       => "sunburning",
  "sunburns"         => "sunburning",
  "sung"             => "singing",
  "sunk"             => "sinking",
  "swam"             => "swimming",
  "swear"            => "swearing",
  "swearing"         => "swearing",
  "swears"           => "swearing",
  "sweat"            => "sweating",
  "sweated"          => "sweating",
  "sweating"         => "sweating",
  "sweats"           => "sweating",
  "sweep"            => "sweeping",
  "sweeping"         => "sweeping",
  "sweeps"           => "sweeping",
  "swell"            => "swelling",
  "swelled"          => "swelling",
  "swelling"         => "swelling",
  "swells"           => "swelling",
  "swept"            => "sweeping",
  "swim"             => "swimming",
  "swimming"         => "swimming",
  "swims"            => "swimming",
  "swing"            => "swinging",
  "swinging"         => "swinging",
  "swings"           => "swinging",
  "swollen"          => "swelling",
  "swore"            => "swearing",
  "sworn"            => "swearing",
  "swum"             => "swimming",
  "swung"            => "swinging",
  "talk"             => "talking",
  "talked"           => "talking",
  "talking"          => "talking",
  "talks"            => "talking",
  "tear"             => "tearing",
  "tearing"          => "tearing",
  "tears"            => "tearing",
  "thrive"           => "thriving",
  "thrived"          => "thriving",
  "thrives"          => "thriving",
  "thriving"         => "thriving",
  "thrust"           => "thrusting",
  "thrusting"        => "thrusting",
  "thrusts"          => "thrusting",
  "tore"             => "tearing",
  "torn"             => "tearing",
  "tread"            => "treading",
  "treading"         => "treading",
  "treads"           => "treading",
  "trod"             => "treading",
  "trodden"          => "treading",
  "undergo"          => "undergoing",
  "undergoes"        => "undergoing",
  "undergoing"       => "undergoing",
  "undergone"        => "undergoing",
  "understand"       => "understanding",
  "understanding"    => "understanding",
  "understands"      => "understanding",
  "understood"       => "understanding",
  "undertake"        => "undertaking",
  "undertaken"       => "undertaking",
  "undertakes"       => "undertaking",
  "undertaking"      => "undertaking",
  "undertook"        => "undertaking",
  "underwent"        => "undergoing",
  "upset"            => "upsetting",
  "upsets"           => "upsetting",
  "upsetting"        => "upsetting",
  "vex"              => "vexing",
  "vexed"            => "vexing",
  "vexes"            => "vexing",
  "vexing"           => "vexing",
  "wait"             => "waiting",
  "waited"           => "waiting",
  "waiting"          => "waiting",
  "waits"            => "waiting",
  "wake"             => "waking",
  "wakes"            => "waking",
  "waking"           => "waking",
  "walk"             => "walking",
  "walked"           => "walking",
  "walking"          => "walking",
  "walks"            => "walking",
  "want"             => "wanting",
  "wanted"           => "wanting",
  "wanting"          => "wanting",
  "wants"            => "wanting",
  "was"              => "being",
  "wasn't"           => "_",
  "watch"            => "watching",
  "watched"          => "watching",
  "watches"          => "watching",
  "watching"         => "watching",
  "wear"             => "wearing",
  "wearing"          => "wearing",
  "wears"            => "wearing",
  "weep"             => "weeping",
  "weeping"          => "weeping",
  "weeps"            => "weeping",
  "wend"             => "wending",
  "wended"           => "wending",
  "wending"          => "wending",
  "wends"            => "wending",
  "went"             => "going",
  "wept"             => "weeping",
  "were"             => "being",
  "weren't"          => "_",
  "will"             => "_",
  "win"              => "winning",
  "winning"          => "winning",
  "wins"             => "winning",
  "withdraw"         => "withdrawing",
  "withdrawing"      => "withdrawing",
  "withdrawn"        => "withdrawing",
  "withdraws"        => "withdrawing",
  "withdrew"         => "withdrawing",
  "withheld"         => "withholding",
  "withhold"         => "withholding",
  "withholding"      => "withholding",
  "withholds"        => "withholding",
  "withstand"        => "withstanding",
  "withstanding"     => "withstanding",
  "withstands"       => "withstanding",
  "withstood"        => "withstanding",
  "woke"             => "waking",
  "woken"            => "waking",
  "won"              => "winning",
  "won't"            => "_",
  "wore"             => "wearing",
  "worn"             => "wearing",
  "would"            => "_",
  "wouldn't"         => "_",
  "wring"            => "wringing",
  "wringing"         => "wringing",
  "wrings"           => "wringing",
  "wrung"            => "wringing",
};

my $past_part_of = {
  ""                 => "_",
  "_"                => "_",
  "abide"            => "abided",
  "abided"           => "abided",
  "abides"           => "abided",
  "abiding"          => "abided",
  "ache"             => "ached",
  "ached"            => "ached",
  "aches"            => "ached",
  "aching"           => "ached",
  "am"               => "been",
  "are"              => "been",
  "aren't"           => "_",
  "arise"            => "arisen",
  "arisen"           => "arisen",
  "arises"           => "arisen",
  "arising"          => "arisen",
  "arose"            => "arisen",
  "ask"              => "asked",
  "asked"            => "asked",
  "asking"           => "asked",
  "asks"             => "asked",
  "ate"              => "eaten",
  "avalanche"        => "avalanched",
  "avalanched"       => "avalanched",
  "avalanches"       => "avalanched",
  "avalanching"      => "avalanched",
  "awake"            => "awoken",
  "awakening"        => "awoken",
  "awakes"           => "awoken",
  "awoke"            => "awoken",
  "awoken"           => "awoken",
  "beat"             => "beaten",
  "beaten"           => "beaten",
  "beating"          => "beaten",
  "beats"            => "beaten",
  "became"           => "become",
  "become"           => "become",
  "becomes"          => "become",
  "becoming"         => "become",
  "been"             => "been",
  "began"            => "begun",
  "beget"            => "begotten",
  "begets"           => "begotten",
  "begetting"        => "begotten",
  "begin"            => "begun",
  "beginning"        => "begun",
  "begins"           => "begun",
  "begot"            => "begotten",
  "begotten"         => "begotten",
  "begun"            => "begun",
  "beheld"           => "beheld",
  "behold"           => "beheld",
  "beholding"        => "beheld",
  "beholds"          => "beheld",
  "being"            => "been",
  "bellyache"        => "bellyached",
  "bellyached"       => "bellyached",
  "bellyaches"       => "bellyached",
  "bellyaching"      => "bellyached",
  "bend"             => "bent",
  "bending"          => "bent",
  "bends"            => "bent",
  "bent"             => "bent",
  "bet"              => "bet",
  "bets"             => "bet",
  "betting"          => "bet",
  "bind"             => "bound",
  "binding"          => "bound",
  "binds"            => "bound",
  "bit"              => "bitten",
  "bite"             => "bitten",
  "bites"            => "bitten",
  "biting"           => "bitten",
  "bitten"           => "bitten",
  "bled"             => "bled",
  "bleed"            => "bled",
  "bleeding"         => "bled",
  "bleeds"           => "bled",
  "blew"             => "blown",
  "blitz"            => "blitzed",
  "blitzed"          => "blitzed",
  "blitzes"          => "blitzed",
  "blitzing"         => "blitzed",
  "blow"             => "blown",
  "blowing"          => "blown",
  "blown"            => "blown",
  "blows"            => "blown",
  "bound"            => "bound",
  "break"            => "broken",
  "breaking"         => "broken",
  "breaks"           => "broken",
  "bred"             => "bred",
  "breed"            => "bred",
  "breeding"         => "bred",
  "breeds"           => "bred",
  "bring"            => "brought",
  "bringing"         => "brought",
  "brings"           => "brought",
  "broke"            => "broken",
  "broken"           => "broken",
  "brought"          => "brought",
  "build"            => "built",
  "building"         => "built",
  "builds"           => "built",
  "built"            => "built",
  "burn"             => "burnt",
  "burning"          => "burnt",
  "burns"            => "burnt",
  "burnt"            => "burnt",
  "burst"            => "burst",
  "bursting"         => "burst",
  "bursts"           => "burst",
  "bust"             => "bust",
  "busting"          => "bust",
  "busts"            => "bust",
  "cache"            => "cached",
  "cached"           => "cached",
  "caches"           => "cached",
  "caching"          => "cached",
  "came"             => "come",
  "can"              => "_",
  "can't"            => "_",
  "catch"            => "caught",
  "catches"          => "caught",
  "catching"         => "caught",
  "caught"           => "caught",
  "change"           => "changed",
  "changed"          => "changed",
  "changes"          => "changed",
  "changing"         => "changed",
  "choose"           => "chosen",
  "chooses"          => "chosen",
  "choosing"         => "chosen",
  "chose"            => "chosen",
  "chosen"           => "chosen",
  "clap"             => "clapped",
  "clapped"          => "clapped",
  "clapping"         => "clapped",
  "claps"            => "clapped",
  "cling"            => "clung",
  "clinging"         => "clung",
  "clings"           => "clung",
  "clung"            => "clung",
  "come"             => "come",
  "comes"            => "come",
  "coming"           => "come",
  "continue"         => "continued",
  "continued"        => "continued",
  "continues"        => "continued",
  "continuing"       => "continued",
  "cost"             => "cost",
  "costing"          => "cost",
  "costs"            => "cost",
  "could"            => "_",
  "couldn't"         => "_",
  "creche"           => "creched",
  "creched"          => "creched",
  "creches"          => "creched",
  "creching"         => "creched",
  "creep"            => "crept",
  "creeping"         => "crept",
  "creeps"           => "crept",
  "crept"            => "crept",
  "dare"             => "dared",
  "dared"            => "dared",
  "daren't"          => "_",
  "dares"            => "dared",
  "daring"           => "dared",
  "deal"             => "dealt",
  "dealing"          => "dealt",
  "deals"            => "dealt",
  "dealt"            => "dealt",
  "didn't"           => "_",
  "die"              => "died",
  "died"             => "died",
  "dies"             => "died",
  "dig"              => "dug",
  "digging"          => "dug",
  "digs"             => "dug",
  "dive"             => "dived",
  "dived"            => "dived",
  "dives"            => "dived",
  "diving"           => "dived",
  "doesn't"          => "_",
  "don't"            => "_",
  "douche"           => "douched",
  "douched"          => "douched",
  "douches"          => "douched",
  "douching"         => "douched",
  "drag"             => "dragged",
  "dragged"          => "dragged",
  "dragging"         => "dragged",
  "drags"            => "dragged",
  "drank"            => "drunk",
  "dream"            => "dreamed",
  "dreamed"          => "dreamed",
  "dreaming"         => "dreamed",
  "dreams"           => "dreamed",
  "drink"            => "drunk",
  "drinking"         => "drunk",
  "drinks"           => "drunk",
  "drive"            => "driven",
  "driven"           => "driven",
  "drives"           => "driven",
  "driving"          => "driven",
  "drove"            => "driven",
  "drunk"            => "drunk",
  "dug"              => "dug",
  "dwell"            => "dwelt",
  "dwelling"         => "dwelt",
  "dwells"           => "dwelt",
  "dwelt"            => "dwelt",
  "dying"            => "died",
  "eat"              => "eaten",
  "eaten"            => "eaten",
  "eating"           => "eaten",
  "eats"             => "eaten",
  "expect"           => "expected",
  "expected"         => "expected",
  "expecting"        => "expected",
  "expects"          => "expected",
  "fall"             => "fallen",
  "fallen"           => "fallen",
  "falling"          => "fallen",
  "falls"            => "fallen",
  "feel"             => "felt",
  "feeling"          => "felt",
  "feels"            => "felt",
  "fell"             => "fallen",
  "felt"             => "felt",
  "fight"            => "fought",
  "fighting"         => "fought",
  "fights"           => "fought",
  "find"             => "found",
  "finding"          => "found",
  "finds"            => "found",
  "fled"             => "fled",
  "flee"             => "fled",
  "fleeing"          => "fled",
  "flees"            => "fled",
  "flew"             => "flown",
  "flies"            => "flown",
  "fling"            => "flung",
  "flinging"         => "flung",
  "flings"           => "flung",
  "flown"            => "flown",
  "flung"            => "flung",
  "fly"              => "flown",
  "flying"           => "flown",
  "follow"           => "followed",
  "followed"         => "followed",
  "following"        => "followed",
  "follows"          => "followed",
  "forbade"          => "forbidden",
  "forbid"           => "forbidden",
  "forbidden"        => "forbidden",
  "forbidding"       => "forbidden",
  "forbids"          => "forbidden",
  "foresaw"          => "foreseen",
  "foresee"          => "foreseen",
  "foreseeing"       => "foreseen",
  "foreseen"         => "foreseen",
  "foresees"         => "foreseen",
  "foretell"         => "foretold",
  "foretelling"      => "foretold",
  "foretells"        => "foretold",
  "foretold"         => "foretold",
  "forgave"          => "forgiven",
  "forget"           => "forgotten",
  "forgets"          => "forgotten",
  "forgetting"       => "forgotten",
  "forgive"          => "forgiven",
  "forgiven"         => "forgiven",
  "forgives"         => "forgiven",
  "forgiving"        => "forgiven",
  "forgot"           => "forgotten",
  "forgotten"        => "forgotten",
  "forsake"          => "forsaken",
  "forsaken"         => "forsaken",
  "forsakes"         => "forsaken",
  "forsaking"        => "forsaken",
  "forsook"          => "forsaken",
  "fought"           => "fought",
  "found"            => "found",
  "gave"             => "given",
  "get"              => "gotten",
  "gets"             => "gotten",
  "getting"          => "gotten",
  "gild"             => "gilded",
  "gilded"           => "gilded",
  "gilding"          => "gilded",
  "gilds"            => "gilded",
  "give"             => "given",
  "given"            => "given",
  "gives"            => "given",
  "giving"           => "given",
  "go"               => "gone",
  "goes"             => "gone",
  "going"            => "gone",
  "gone"             => "gone",
  "got"              => "gotten",
  "gotten"           => "gotten",
  "grind"            => "ground",
  "grinding"         => "ground",
  "grinds"           => "ground",
  "ground"           => "ground",
  "had"              => "had",
  "hadn't"           => "_",
  "happen"           => "happened",
  "happened"         => "happened",
  "happening"        => "happened",
  "happens"          => "happened",
  "has"              => "had",
  "hasn't"           => "_",
  "have"             => "had",
  "haven't"          => "_",
  "having"           => "had",
  "held"             => "held",
  "help"             => "helped",
  "helped"           => "helped",
  "helping"          => "helped",
  "helps"            => "helped",
  "hew"              => "hewn",
  "hewed"            => "hewn",
  "hewing"           => "hewn",
  "hewn"             => "hewn",
  "hews"             => "hewn",
  "hit"              => "hit",
  "hits"             => "hit",
  "hitting"          => "hit",
  "hold"             => "held",
  "holding"          => "held",
  "holds"            => "held",
  "hurt"             => "hurt",
  "hurting"          => "hurt",
  "hurts"            => "hurt",
  "inlaid"           => "inlaid",
  "inlay"            => "inlaid",
  "inlaying"         => "inlaid",
  "inlays"           => "inlaid",
  "insist"           => "insisted",
  "insisted"         => "insisted",
  "insisting"        => "insisted",
  "insists"          => "insisted",
  "interlaid"        => "interlaid",
  "interlay"         => "interlaid",
  "interlaying"      => "interlaid",
  "interlays"        => "interlaid",
  "iris"             => "irised",
  "irised"           => "irised",
  "irises"           => "irised",
  "irising"          => "irised",
  "is"               => "been",
  "isn't"            => "_",
  "keep"             => "kept",
  "keeping"          => "kept",
  "keeps"            => "kept",
  "kept"             => "kept",
  "kill"             => "killed",
  "killed"           => "killed",
  "killing"          => "killed",
  "kills"            => "killed",
  "kneel"            => "knelt",
  "kneeling"         => "knelt",
  "kneels"           => "knelt",
  "knelt"            => "knelt",
  "knew"             => "known",
  "knit"             => "knitted",
  "knits"            => "knitted",
  "knitted"          => "knitted",
  "knitting"         => "knitted",
  "know"             => "known",
  "knowing"          => "known",
  "known"            => "known",
  "knows"            => "known",
  "laid"             => "laid",
  "lain"             => "lain",
  "lay"              => "laid",
  "laying"           => "laid",
  "lays"             => "laid",
  "lead"             => "led",
  "leading"          => "led",
  "leads"            => "led",
  "lean"             => "leaned",
  "leaned"           => "leaned",
  "leaning"          => "leaned",
  "leans"            => "leaned",
  "leap"             => "leapt",
  "leaping"          => "leapt",
  "leaps"            => "leapt",
  "leapt"            => "leapt",
  "learn"            => "learned",
  "learned"          => "learned",
  "learning"         => "learned",
  "learns"           => "learned",
  "leave"            => "left",
  "leaves"           => "left",
  "leaving"          => "left",
  "led"              => "led",
  "left"             => "left",
  "lie"              => "lain",
  "lies"             => "lain",
  "like"             => "liked",
  "liked"            => "liked",
  "likes"            => "liked",
  "liking"           => "liked",
  "live"             => "lived",
  "lived"            => "lived",
  "lives"            => "lived",
  "living"           => "lived",
  "look"             => "looked",
  "looked"           => "looked",
  "looking"          => "looked",
  "looks"            => "looked",
  "lose"             => "lost",
  "loses"            => "lost",
  "losing"           => "lost",
  "lost"             => "lost",
  "love"             => "loved",
  "loved"            => "loved",
  "loves"            => "loved",
  "loving"           => "loved",
  "lying"            => "lain",
  "may"              => "_",
  "mayn't"           => "_",
  "mean"             => "meant",
  "meaning"          => "meant",
  "means"            => "meant",
  "meant"            => "meant",
  "meet"             => "met",
  "meeting"          => "met",
  "meets"            => "met",
  "menu"             => "menued",
  "menued"           => "menued",
  "menuing"          => "menued",
  "menus"            => "menued",
  "met"              => "met",
  "might"            => "_",
  "mightn't"         => "_",
  "mislead"          => "misled",
  "misleading"       => "misled",
  "misleads"         => "misled",
  "misled"           => "misled",
  "mistake"          => "mistaken",
  "mistaken"         => "mistaken",
  "mistakes"         => "mistaken",
  "mistaking"        => "mistaken",
  "mistook"          => "mistaken",
  "misunderstand"    => "misunderstood",
  "misunderstanding" => "misunderstood",
  "misunderstands"   => "misunderstood",
  "misunderstood"    => "misunderstood",
  "move"             => "moved",
  "moved"            => "moved",
  "moves"            => "moved",
  "moving"           => "moved",
  "must"             => "_",
  "mustn't"          => "_",
  "n't"              => "_",
  "need"             => "needed",
  "needed"           => "needed",
  "needing"          => "needed",
  "needn't"          => "_",
  "needs"            => "needed",
  "niche"            => "niched",
  "niched"           => "niched",
  "nicheing"         => "niched",
  "niches"           => "niched",
  "ought"            => "_",
  "oughtn't"         => "_",
  "overdraw"         => "overdrawn",
  "overdrawing"      => "overdrawn",
  "overdrawn"        => "overdrawn",
  "overdraws"        => "overdrawn",
  "overdrew"         => "overdrawn",
  "overhear"         => "overheard",
  "overheard"        => "overheard",
  "overhearing"      => "overheard",
  "overhears"        => "overheard",
  "overtake"         => "overtaken",
  "overtaken"        => "overtaken",
  "overtakes"        => "overtaken",
  "overtaking"       => "overtaken",
  "overtook"         => "overtaken",
  "preset"           => "preset",
  "presets"          => "preset",
  "presetting"       => "preset",
  "prove"            => "proven",
  "proved"           => "proven",
  "proven"           => "proven",
  "proves"           => "proven",
  "provide"          => "provided",
  "provided"         => "provided",
  "provides"         => "provided",
  "providing"        => "provided",
  "proving"          => "proven",
  "psyche"           => "psyched",
  "psyched"          => "psyched",
  "psyches"          => "psyched",
  "psyching"         => "psyched",
  "put"              => "put",
  "puts"             => "put",
  "putting"          => "put",
  "quit"             => "quit",
  "quits"            => "quit",
  "quitting"         => "quit",
  "quiz"             => "quizzed",
  "quizzed"          => "quizzed",
  "quizzes"          => "quizzed",
  "quizzing"         => "quizzed",
  "ran"              => "run",
  "rang"             => "rung",
  "reach"            => "reached",
  "reached"          => "reached",
  "reaches"          => "reached",
  "reaching"         => "reached",
  "remain"           => "remained",
  "remained"         => "remained",
  "remaining"        => "remained",
  "remains"          => "remained",
  "remember"         => "remembered",
  "remembered"       => "remembered",
  "remembering"      => "remembered",
  "remembers"        => "remembered",
  "rend"             => "rent",
  "rending"          => "rent",
  "rends"            => "rent",
  "rent"             => "rent",
  "rid"              => "rid",
  "ridden"           => "ridden",
  "ridding"          => "rid",
  "ride"             => "ridden",
  "rides"            => "ridden",
  "riding"           => "ridden",
  "rids"             => "rid",
  "ring"             => "rung",
  "ringing"          => "rung",
  "rings"            => "rung",
  "rise"             => "risen",
  "risen"            => "risen",
  "rises"            => "risen",
  "rising"           => "risen",
  "rive"             => "riven",
  "rived"            => "riven",
  "riven"            => "riven",
  "rives"            => "riven",
  "riving"           => "riven",
  "rode"             => "ridden",
  "rose"             => "risen",
  "run"              => "run",
  "rung"             => "rung",
  "running"          => "run",
  "runs"             => "run",
  "s"                => "_",
  "sang"             => "sung",
  "sank"             => "sunk",
  "sat"              => "sat",
  "saw"              => "sawn",
  "sawed"            => "sawn",
  "sawing"           => "sawn",
  "sawn"             => "sawn",
  "saws"             => "sawn",
  "seek"             => "sought",
  "seeking"          => "sought",
  "seeks"            => "sought",
  "seem"             => "seemed",
  "seemed"           => "seemed",
  "seeming"          => "seemed",
  "seems"            => "seemed",
  "sha'n't"          => "_",
  "shake"            => "shaken",
  "shaken"           => "shaken",
  "shakes"           => "shaken",
  "shaking"          => "shaken",
  "shall"            => "_",
  "shan't"           => "_",
  "shat"             => "shitted",
  "shave"            => "shaved",
  "shaved"           => "shaved",
  "shaves"           => "shaved",
  "shaving"          => "shaved",
  "shed"             => "shed",
  "shedding"         => "shed",
  "sheds"            => "shed",
  "shit"             => "shitted",
  "shits"            => "shitted",
  "shitted"          => "shitted",
  "shitting"         => "shitted",
  "shod"             => "shod",
  "shoe"             => "shod",
  "shoeing"          => "shod",
  "shoes"            => "shod",
  "shook"            => "shaken",
  "should"           => "_",
  "shouldn't"        => "_",
  "show"             => "shown",
  "showed"           => "shown",
  "showing"          => "shown",
  "shown"            => "shown",
  "shows"            => "shown",
  "shrank"           => "shrunk",
  "shrink"           => "shrunk",
  "shrinking"        => "shrunk",
  "shrinks"          => "shrunk",
  "shrunk"           => "shrunk",
  "sing"             => "sung",
  "singing"          => "sung",
  "sings"            => "sung",
  "sink"             => "sunk",
  "sinking"          => "sunk",
  "sinks"            => "sunk",
  "sit"              => "sat",
  "sits"             => "sat",
  "sitting"          => "sat",
  "ski"              => "skied",
  "skied"            => "skied",
  "skiing"           => "skied",
  "skis"             => "skied",
  "slain"            => "slain",
  "slay"             => "slain",
  "slaying"          => "slain",
  "slays"            => "slain",
  "slew"             => "slain",
  "slid"             => "slid",
  "slide"            => "slid",
  "slides"           => "slid",
  "sliding"          => "slid",
  "slink"            => "slunk",
  "slinking"         => "slunk",
  "slinks"           => "slunk",
  "slit"             => "slit",
  "slits"            => "slit",
  "slitting"         => "slit",
  "slunk"            => "slunk",
  "smell"            => "smelled",
  "smelled"          => "smelled",
  "smelling"         => "smelled",
  "smells"           => "smelled",
  "smite"            => "smitten",
  "smites"           => "smitten",
  "smiting"          => "smitten",
  "smitten"          => "smitten",
  "smote"            => "smitten",
  "sneak"            => "sneaked",
  "sneaked"          => "sneaked",
  "sneaking"         => "sneaked",
  "sneaks"           => "sneaked",
  "sought"           => "sought",
  "sow"              => "sown",
  "sowed"            => "sown",
  "sowing"           => "sown",
  "sown"             => "sown",
  "sows"             => "sown",
  "spat"             => "spat",
  "speak"            => "spoken",
  "speaking"         => "spoken",
  "speaks"           => "spoken",
  "sped"             => "sped",
  "speed"            => "sped",
  "speeding"         => "sped",
  "speeds"           => "sped",
  "spend"            => "spent",
  "spending"         => "spent",
  "spends"           => "spent",
  "spent"            => "spent",
  "spit"             => "spat",
  "spits"            => "spat",
  "spitting"         => "spat",
  "spoil"            => "spoiled",
  "spoiled"          => "spoiled",
  "spoiling"         => "spoiled",
  "spoils"           => "spoiled",
  "spoilt"           => "spoiled",
  "spoke"            => "spoken",
  "spoken"           => "spoken",
  "sprang"           => "sprung",
  "spring"           => "sprung",
  "springing"        => "sprung",
  "springs"          => "sprung",
  "sprung"           => "sprung",
  "stand"            => "stood",
  "standing"         => "stood",
  "stands"           => "stood",
  "stank"            => "stunk",
  "stave"            => "staved",
  "staved"           => "staved",
  "staves"           => "staved",
  "staving"          => "staved",
  "stay"             => "stayed",
  "stayed"           => "stayed",
  "staying"          => "stayed",
  "stays"            => "stayed",
  "steal"            => "stolen",
  "stealing"         => "stolen",
  "steals"           => "stolen",
  "sting"            => "stung",
  "stinging"         => "stung",
  "stings"           => "stung",
  "stink"            => "stunk",
  "stinking"         => "stunk",
  "stinks"           => "stunk",
  "stole"            => "stolen",
  "stolen"           => "stolen",
  "stood"            => "stood",
  "stop"             => "stopped",
  "stopped"          => "stopped",
  "stopping"         => "stopped",
  "stops"            => "stopped",
  "strew"            => "strewn",
  "strewed"          => "strewn",
  "strewing"         => "strewn",
  "strewn"           => "strewn",
  "strews"           => "strewn",
  "stride"           => "strode",
  "strides"          => "strode",
  "striding"         => "strode",
  "strip"            => "stripped",
  "stripped"         => "stripped",
  "stripping"        => "stripped",
  "strips"           => "stripped",
  "strive"           => "strived",
  "strived"          => "strived",
  "strives"          => "strived",
  "striving"         => "strived",
  "strode"           => "strode",
  "strove"           => "strived",
  "stung"            => "stung",
  "stunk"            => "stunk",
  "sublet"           => "sublet",
  "sublets"          => "sublet",
  "subletting"       => "sublet",
  "sunburn"          => "sunburned",
  "sunburned"        => "sunburned",
  "sunburning"       => "sunburned",
  "sunburns"         => "sunburned",
  "sung"             => "sung",
  "sunk"             => "sunk",
  "swam"             => "swum",
  "swear"            => "sworn",
  "swearing"         => "sworn",
  "swears"           => "sworn",
  "sweat"            => "sweated",
  "sweated"          => "sweated",
  "sweating"         => "sweated",
  "sweats"           => "sweated",
  "sweep"            => "swept",
  "sweeping"         => "swept",
  "sweeps"           => "swept",
  "swell"            => "swollen",
  "swelled"          => "swollen",
  "swelling"         => "swollen",
  "swells"           => "swollen",
  "swept"            => "swept",
  "swim"             => "swum",
  "swimming"         => "swum",
  "swims"            => "swum",
  "swing"            => "swung",
  "swinging"         => "swung",
  "swings"           => "swung",
  "swollen"          => "swollen",
  "swore"            => "sworn",
  "sworn"            => "sworn",
  "swum"             => "swum",
  "swung"            => "swung",
  "talk"             => "talked",
  "talked"           => "talked",
  "talking"          => "talked",
  "talks"            => "talked",
  "tear"             => "torn",
  "tearing"          => "torn",
  "tears"            => "torn",
  "thrive"           => "thrived",
  "thrived"          => "thrived",
  "thrives"          => "thrived",
  "thriving"         => "thrived",
  "thrust"           => "thrust",
  "thrusting"        => "thrust",
  "thrusts"          => "thrust",
  "tore"             => "torn",
  "torn"             => "torn",
  "tread"            => "trodden",
  "treading"         => "trodden",
  "treads"           => "trodden",
  "trod"             => "trodden",
  "trodden"          => "trodden",
  "undergo"          => "undergone",
  "undergoes"        => "undergone",
  "undergoing"       => "undergone",
  "undergone"        => "undergone",
  "understand"       => "understood",
  "understanding"    => "understood",
  "understands"      => "understood",
  "understood"       => "understood",
  "undertake"        => "undertaken",
  "undertaken"       => "undertaken",
  "undertakes"       => "undertaken",
  "undertaking"      => "undertaken",
  "undertook"        => "undertaken",
  "underwent"        => "undergone",
  "upset"            => "upset",
  "upsets"           => "upset",
  "upsetting"        => "upset",
  "vex"              => "vexed",
  "vexed"            => "vexed",
  "vexes"            => "vexed",
  "vexing"           => "vexed",
  "wait"             => "waited",
  "waited"           => "waited",
  "waiting"          => "waited",
  "waits"            => "waited",
  "wake"             => "woken",
  "wakes"            => "woken",
  "waking"           => "woken",
  "walk"             => "walked",
  "walked"           => "walked",
  "walking"          => "walked",
  "walks"            => "walked",
  "want"             => "wanted",
  "wanted"           => "wanted",
  "wanting"          => "wanted",
  "wants"            => "wanted",
  "was"              => "been",
  "wasn't"           => "_",
  "watch"            => "watched",
  "watched"          => "watched",
  "watches"          => "watched",
  "watching"         => "watched",
  "wear"             => "worn",
  "wearing"          => "worn",
  "wears"            => "worn",
  "weep"             => "wept",
  "weeping"          => "wept",
  "weeps"            => "wept",
  "wend"             => "wended",
  "wended"           => "wended",
  "wending"          => "wended",
  "wends"            => "wended",
  "went"             => "gone",
  "wept"             => "wept",
  "were"             => "been",
  "weren't"          => "_",
  "will"             => "_",
  "win"              => "won",
  "winning"          => "won",
  "wins"             => "won",
  "withdraw"         => "withdrawn",
  "withdrawing"      => "withdrawn",
  "withdrawn"        => "withdrawn",
  "withdraws"        => "withdrawn",
  "withdrew"         => "withdrawn",
  "withheld"         => "withheld",
  "withhold"         => "withheld",
  "withholding"      => "withheld",
  "withholds"        => "withheld",
  "withstand"        => "withstood",
  "withstanding"     => "withstood",
  "withstands"       => "withstood",
  "withstood"        => "withstood",
  "woke"             => "woken",
  "woken"            => "woken",
  "won"              => "won",
  "won't"            => "_",
  "wore"             => "worn",
  "worn"             => "worn",
  "would"            => "_",
  "wouldn't"         => "_",
  "wring"            => "wrung",
  "wringing"         => "wrung",
  "wrings"           => "wrung",
  "wrung"            => "wrung",
};

my $is_plural = {}; @{$is_plural}{values %{$plural_of} } = ();
                    @{$is_plural}{keys %{$singular_of} } = ();
                    @{$is_plural}{values %{$past_of} } = ();
                    @{$is_plural}{values %{$pres_part_of} } = ();
                    @{$is_plural}{values %{$past_part_of} } = ();

my $is_singular = {}; @{$is_singular}{values %{$singular_of} } = ();
                      @{$is_singular}{keys %{$plural_of} } = ();
                      @{$is_singular}{values %{$past_of} } = ();
                      @{$is_singular}{values %{$pres_part_of} } = ();
                      @{$is_singular}{values %{$past_part_of} } = ();

my $is_past = {}; @{$is_past}{values %{$past_of} } = ();

my $is_past_part = {}; @{$is_past_part}{values %{$past_part_of} } = ();

my $is_pres_part = {}; @{$is_pres_part}{values %{$pres_part_of} } = ();

sub tc {my($text)=@_; $text=~s{(\A|\s)(\S)|(\S)}{defined($3)?lc($3):$1.uc($2)}egxms; $text; };
sub convert_to_plural {
    my ($word) = @_;
    return $plural_of->{$word}     if exists $plural_of->{$word};
    return $plural_of->{lc $word}  if exists $plural_of->{lc $word};
    return $plural_of->{tc $word}  if exists $plural_of->{tc $word};
    return $word                     if is_plural($word);
    for ($word) {
        if (m{(.*)n't$}i) { return "${1}n't"; }
        if (m{(.*)shears$}i) { return "${1}shear"; }
        if (m{(.*)bears$}i) { return "${1}bear"; }
        if (m{(.*)bids$}i) { return "${1}bid"; }
        if (m{(.*)buys$}i) { return "${1}buy"; }
        if (m{(.*)casts$}i) { return "${1}cast"; }
        if (m{(.*)clads$}i) { return "${1}clad"; }
        if (m{(.*)cuts$}i) { return "${1}cut"; }
        if (m{(.*)does$}i) { return "${1}do"; }
        if (m{(.*)do$}i) { return "${1}do"; }
        if (m{(.*)draws$}i) { return "${1}draw"; }
        if (m{(.*)feeds$}i) { return "${1}feed"; }
        if (m{(.*)freezes$}i) { return "${1}freeze"; }
        if (m{(.*)grows$}i) { return "${1}grow"; }
        if (m{(.*)hangs$}i) { return "${1}hang"; }
        if (m{(.*)hears$}i) { return "${1}hear"; }
        if (m{(.*)hides$}i) { return "${1}hide"; }
        if (m{(.*)inputs$}i) { return "${1}input"; }
        if (m{(.*)knits$}i) { return "${1}knit"; }
        if (m{(.*)lends$}i) { return "${1}lend"; }
        if (m{(.*)lets$}i) { return "${1}let"; }
        if (m{(.*)lights$}i) { return "${1}light"; }
        if (m{(.*)makes$}i) { return "${1}make"; }
        if (m{(.*)mows$}i) { return "${1}mow"; }
        if (m{(.*)pays$}i) { return "${1}pay"; }
        if (m{(.*)reads$}i) { return "${1}read"; }
        if (m{(.*)says$}i) { return "${1}say"; }
        if (m{(.*)sees$}i) { return "${1}see"; }
        if (m{(.*)sells$}i) { return "${1}sell"; }
        if (m{(.*)sends$}i) { return "${1}send"; }
        if (m{(.*)sets$}i) { return "${1}set"; }
        if (m{(.*)sews$}i) { return "${1}sew"; }
        if (m{(.*)shines$}i) { return "${1}shine"; }
        if (m{(.*)shoots$}i) { return "${1}shoot"; }
        if (m{(.*)shuts$}i) { return "${1}shut"; }
        if (m{(.*)sleeps$}i) { return "${1}sleep"; }
        if (m{(.*)slings$}i) { return "${1}sling"; }
        if (m{(.*)spins$}i) { return "${1}spin"; }
        if (m{(.*)splits$}i) { return "${1}split"; }
        if (m{(.*)spreads$}i) { return "${1}spread"; }
        if (m{(.*)sticks$}i) { return "${1}stick"; }
        if (m{(.*)strikes$}i) { return "${1}strike"; }
        if (m{(.*)strings$}i) { return "${1}string"; }
        if (m{(.*)takes$}i) { return "${1}take"; }
        if (m{(.*)teaches$}i) { return "${1}teach"; }
        if (m{(.*)tells$}i) { return "${1}tell"; }
        if (m{(.*)thinks$}i) { return "${1}think"; }
        if (m{(.*)throws$}i) { return "${1}throw"; }
        if (m{(.*)tries$}i) { return "${1}try"; }
        if (m{(.*)weaves$}i) { return "${1}weave"; }
        if (m{(.*)weds$}i) { return "${1}wed"; }
        if (m{(.*)wets$}i) { return "${1}wet"; }
        if (m{(.*)winds$}i) { return "${1}wind"; }
        if (m{(.*)writes$}i) { return "${1}write"; }
        if (m{(.*)adds$}i) { return "${1}add"; }
        if (m{(.*)alights$}i) { return "${1}alight"; }
        if (m{(.*)allows$}i) { return "${1}allow"; }
        if (m{(.*)appears$}i) { return "${1}appear"; }
        if (m{(.*)believes$}i) { return "${1}believe"; }
        if (m{(.*)calls$}i) { return "${1}call"; }
        if (m{(.*)clothes$}i) { return "${1}clothe"; }
        if (m{(.*)considers$}i) { return "${1}consider"; }
        if (m{(.*)creates$}i) { return "${1}create"; }
        if (m{(.*)fits$}i) { return "${1}fit"; }
        if (m{(.*)includes$}i) { return "${1}include"; }
        if (m{(.*)melts$}i) { return "${1}melt"; }
        if (m{(.*)offers$}i) { return "${1}offer"; }
        if (m{(.*)opens$}i) { return "${1}open"; }
        if (m{(.*)plays$}i) { return "${1}play"; }
        if (m{(.*)serves$}i) { return "${1}serve"; }
        if (m{(.*)smells$}i) { return "${1}smell"; }
        if (m{(.*)spells$}i) { return "${1}spell"; }
        if (m{(.*)spills$}i) { return "${1}spill"; }
        if (m{(.*)starts$}i) { return "${1}start"; }
        if (m{(.*)turns$}i) { return "${1}turn"; }
        if (m{(.*)uses$}i) { return "${1}use"; }
        if (m{(.*)works$}i) { return "${1}work"; }
        if (m{(.*)aes$}i) { return "${1}ae"; }
        if (m{(.*[aeiou])ys$}i) { return "${1}y"; }
        if (m{(.*[aiy])nxes$}i) { return "${1}nx"; }
        if (m{(.*)ceps$}i) { return "${1}ceps"; }
        if (m{(.*[cs])hes$}i) { return "${1}h"; }
        if (m{(.*)oes$}i) { return "${1}oe"; }
        if (m{(.*)ieus$}i) { return "${1}ieu"; }
        if (m{(.*)eaus$}i) { return "${1}eau"; }
        if (m{(.*)sses$}i) { return "${1}ss"; }
        if (m{(.*)trixes$}i) { return "${1}trix"; }
        if (m{(.*)xes$}i) { return "${1}x"; }
        if (m{(.*)zzes$}i) { return "${1}zz"; }
        if (m{(.*)zes$}i) { return "${1}ze"; }
        if (m{(.*)ues$}i) { return "${1}ue"; }
        if (m{(.*)is$}i) { return "${1}i"; }
        if (m{(.*)ees$}i) { return "${1}ee"; }
        if (m{(.*)yes$}i) { return "${1}ye"; }
        if (m{(.*)ies$}i) { return "${1}y"; }
        if (m{(.*)ys$}i) { return "${1}y"; }
        if (m{(.*[^e])es$}i) { return "${1}e"; }
        if (m{(.*)ers$}i) { return "${1}er"; }
        if (m{(.*[^s])s$}i) { return "${1}"; }
        default { return "_"; }
    }
}

sub convert_to_singular {
    my ($word) = @_;
    return $singular_of->{$word}     if exists $singular_of->{$word};
    return $singular_of->{lc $word}  if exists $singular_of->{lc $word};
    return $singular_of->{tc $word}  if exists $singular_of->{tc $word};
    return $word                     if is_singular($word);
    for ($word) {
        if (m{(.*)n't$}i) { return "${1}n't"; }
        if (m{(.*)shear$}i) { return "${1}shears"; }
        if (m{(.*)bear$}i) { return "${1}bears"; }
        if (m{(.*)bid$}i) { return "${1}bids"; }
        if (m{(.*)buy$}i) { return "${1}buys"; }
        if (m{(.*)cast$}i) { return "${1}casts"; }
        if (m{(.*)clad$}i) { return "${1}clads"; }
        if (m{(.*)cut$}i) { return "${1}cuts"; }
        if (m{(.*)do$}i) { return "${1}does"; }
        if (m{(.*)do$}i) { return "${1}do"; }
        if (m{(.*)draw$}i) { return "${1}draws"; }
        if (m{(.*)feed$}i) { return "${1}feeds"; }
        if (m{(.*)freeze$}i) { return "${1}freezes"; }
        if (m{(.*)grow$}i) { return "${1}grows"; }
        if (m{(.*)hang$}i) { return "${1}hangs"; }
        if (m{(.*)hear$}i) { return "${1}hears"; }
        if (m{(.*)hide$}i) { return "${1}hides"; }
        if (m{(.*)input$}i) { return "${1}inputs"; }
        if (m{(.*)knit$}i) { return "${1}knits"; }
        if (m{(.*)lend$}i) { return "${1}lends"; }
        if (m{(.*)let$}i) { return "${1}lets"; }
        if (m{(.*)light$}i) { return "${1}lights"; }
        if (m{(.*)make$}i) { return "${1}makes"; }
        if (m{(.*)mow$}i) { return "${1}mows"; }
        if (m{(.*)pay$}i) { return "${1}pays"; }
        if (m{(.*)read$}i) { return "${1}reads"; }
        if (m{(.*)say$}i) { return "${1}says"; }
        if (m{(.*)see$}i) { return "${1}sees"; }
        if (m{(.*)sell$}i) { return "${1}sells"; }
        if (m{(.*)send$}i) { return "${1}sends"; }
        if (m{(.*)set$}i) { return "${1}sets"; }
        if (m{(.*)sew$}i) { return "${1}sews"; }
        if (m{(.*)shine$}i) { return "${1}shines"; }
        if (m{(.*)shoot$}i) { return "${1}shoots"; }
        if (m{(.*)shut$}i) { return "${1}shuts"; }
        if (m{(.*)sleep$}i) { return "${1}sleeps"; }
        if (m{(.*)sling$}i) { return "${1}slings"; }
        if (m{(.*)spin$}i) { return "${1}spins"; }
        if (m{(.*)split$}i) { return "${1}splits"; }
        if (m{(.*)spread$}i) { return "${1}spreads"; }
        if (m{(.*)stick$}i) { return "${1}sticks"; }
        if (m{(.*)strike$}i) { return "${1}strikes"; }
        if (m{(.*)string$}i) { return "${1}strings"; }
        if (m{(.*)take$}i) { return "${1}takes"; }
        if (m{(.*)teach$}i) { return "${1}teaches"; }
        if (m{(.*)tell$}i) { return "${1}tells"; }
        if (m{(.*)think$}i) { return "${1}thinks"; }
        if (m{(.*)throw$}i) { return "${1}throws"; }
        if (m{(.*)try$}i) { return "${1}tries"; }
        if (m{(.*)weave$}i) { return "${1}weaves"; }
        if (m{(.*)wed$}i) { return "${1}weds"; }
        if (m{(.*)wet$}i) { return "${1}wets"; }
        if (m{(.*)wind$}i) { return "${1}winds"; }
        if (m{(.*)write$}i) { return "${1}writes"; }
        if (m{(.*)add$}i) { return "${1}adds"; }
        if (m{(.*)alight$}i) { return "${1}alights"; }
        if (m{(.*)allow$}i) { return "${1}allows"; }
        if (m{(.*)appear$}i) { return "${1}appears"; }
        if (m{(.*)believe$}i) { return "${1}believes"; }
        if (m{(.*)call$}i) { return "${1}calls"; }
        if (m{(.*)clothe$}i) { return "${1}clothes"; }
        if (m{(.*)consider$}i) { return "${1}considers"; }
        if (m{(.*)create$}i) { return "${1}creates"; }
        if (m{(.*)fit$}i) { return "${1}fits"; }
        if (m{(.*)include$}i) { return "${1}includes"; }
        if (m{(.*)melt$}i) { return "${1}melts"; }
        if (m{(.*)offer$}i) { return "${1}offers"; }
        if (m{(.*)open$}i) { return "${1}opens"; }
        if (m{(.*)play$}i) { return "${1}plays"; }
        if (m{(.*)serve$}i) { return "${1}serves"; }
        if (m{(.*)smell$}i) { return "${1}smells"; }
        if (m{(.*)spell$}i) { return "${1}spells"; }
        if (m{(.*)spill$}i) { return "${1}spills"; }
        if (m{(.*)start$}i) { return "${1}starts"; }
        if (m{(.*)turn$}i) { return "${1}turns"; }
        if (m{(.*)use$}i) { return "${1}uses"; }
        if (m{(.*)work$}i) { return "${1}works"; }
        if (m{(.*)ae$}i) { return "${1}aes"; }
        if (m{(.*[aeiou])y$}i) { return "${1}ys"; }
        if (m{(.*[aiy])nx$}i) { return "${1}nxes"; }
        if (m{(.*)ceps$}i) { return "${1}ceps"; }
        if (m{(.*[cs])h$}i) { return "${1}hes"; }
        if (m{(.*)oe$}i) { return "${1}oes"; }
        if (m{(.*)ieu$}i) { return "${1}ieus"; }
        if (m{(.*)eau$}i) { return "${1}eaus"; }
        if (m{(.*)ss$}i) { return "${1}sses"; }
        if (m{(.*)trix$}i) { return "${1}trixes"; }
        if (m{(.*)x$}i) { return "${1}xes"; }
        if (m{(.*)zz$}i) { return "${1}zzes"; }
        if (m{(.*)ze$}i) { return "${1}zes"; }
        if (m{(.*)ue$}i) { return "${1}ues"; }
        if (m{(.*)i$}i) { return "${1}is"; }
        if (m{(.*)ee$}i) { return "${1}ees"; }
        if (m{(.*)ye$}i) { return "${1}yes"; }
        if (m{(.*)y$}i) { return "${1}ies"; }
        if (m{(.*)y$}i) { return "${1}ys"; }
        if (m{(.*[^e])e$}i) { return "${1}es"; }
        if (m{(.*)er$}i) { return "${1}ers"; }
        if (m{(.*[^s])$}i) { return "${1}s"; }
        default { return "_"; }
    }
}

sub convert_to_past {
    my ($word) = @_;
    return $past_of->{$word}     if exists $past_of->{$word};
    return $past_of->{lc $word}  if exists $past_of->{lc $word};
    return $past_of->{tc $word}  if exists $past_of->{tc $word};
    return $word                     if is_past($word);
    for ($word) {
        if (m{(.*)shears$}i) { return "${1}sheared"; }
        if (m{(.*)shear$}i) { return "${1}sheared"; }
        if (m{(.*)shorn$}i) { return "${1}sheared"; }
        if (m{(.*)bears$}i) { return "${1}bore"; }
        if (m{(.*)bear$}i) { return "${1}bore"; }
        if (m{(.*)borne$}i) { return "${1}bore"; }
        if (m{(.*)bids$}i) { return "${1}bade"; }
        if (m{(.*)bid$}i) { return "${1}bade"; }
        if (m{(.*)bidden$}i) { return "${1}bade"; }
        if (m{(.*)buys$}i) { return "${1}bought"; }
        if (m{(.*)buy$}i) { return "${1}bought"; }
        if (m{(.*)bought$}i) { return "${1}bought"; }
        if (m{(.*)casts$}i) { return "${1}cast"; }
        if (m{(.*)cast$}i) { return "${1}cast"; }
        if (m{(.*)cast$}i) { return "${1}cast"; }
        if (m{(.*)clads$}i) { return "${1}clad"; }
        if (m{(.*)clad$}i) { return "${1}clad"; }
        if (m{(.*)clad$}i) { return "${1}clad"; }
        if (m{(.*)cuts$}i) { return "${1}cut"; }
        if (m{(.*)cut$}i) { return "${1}cut"; }
        if (m{(.*)cut$}i) { return "${1}cut"; }
        if (m{(.*)does$}i) { return "${1}did"; }
        if (m{(.*)do$}i) { return "${1}did"; }
        if (m{(.*)done$}i) { return "${1}did"; }
        if (m{(.*)do$}i) { return "${1}did"; }
        if (m{(.*)do$}i) { return "${1}did"; }
        if (m{(.*)done$}i) { return "${1}did"; }
        if (m{(.*)draws$}i) { return "${1}drew"; }
        if (m{(.*)draw$}i) { return "${1}drew"; }
        if (m{(.*)drawn$}i) { return "${1}drew"; }
        if (m{(.*)feeds$}i) { return "${1}fed"; }
        if (m{(.*)feed$}i) { return "${1}fed"; }
        if (m{(.*)fed$}i) { return "${1}fed"; }
        if (m{(.*)freezes$}i) { return "${1}froze"; }
        if (m{(.*)freeze$}i) { return "${1}froze"; }
        if (m{(.*)frozen$}i) { return "${1}froze"; }
        if (m{(.*)grows$}i) { return "${1}grew"; }
        if (m{(.*)grow$}i) { return "${1}grew"; }
        if (m{(.*)grown$}i) { return "${1}grew"; }
        if (m{(.*)hangs$}i) { return "${1}hung"; }
        if (m{(.*)hang$}i) { return "${1}hung"; }
        if (m{(.*)hung$}i) { return "${1}hung"; }
        if (m{(.*)hears$}i) { return "${1}heard"; }
        if (m{(.*)hear$}i) { return "${1}heard"; }
        if (m{(.*)heard$}i) { return "${1}heard"; }
        if (m{(.*)hides$}i) { return "${1}hid"; }
        if (m{(.*)hide$}i) { return "${1}hid"; }
        if (m{(.*)hidden$}i) { return "${1}hid"; }
        if (m{(.*)inputs$}i) { return "${1}input"; }
        if (m{(.*)input$}i) { return "${1}input"; }
        if (m{(.*)input$}i) { return "${1}input"; }
        if (m{(.*)knits$}i) { return "${1}knitted"; }
        if (m{(.*)knit$}i) { return "${1}knitted"; }
        if (m{(.*)knitted$}i) { return "${1}knitted"; }
        if (m{(.*)lends$}i) { return "${1}lent"; }
        if (m{(.*)lend$}i) { return "${1}lent"; }
        if (m{(.*)lent$}i) { return "${1}lent"; }
        if (m{(.*)lets$}i) { return "${1}let"; }
        if (m{(.*)let$}i) { return "${1}let"; }
        if (m{(.*)let$}i) { return "${1}let"; }
        if (m{(.*)lights$}i) { return "${1}lit"; }
        if (m{(.*)light$}i) { return "${1}lit"; }
        if (m{(.*)lit$}i) { return "${1}lit"; }
        if (m{(.*)makes$}i) { return "${1}made"; }
        if (m{(.*)make$}i) { return "${1}made"; }
        if (m{(.*)made$}i) { return "${1}made"; }
        if (m{(.*)mows$}i) { return "${1}mowed"; }
        if (m{(.*)mow$}i) { return "${1}mowed"; }
        if (m{(.*)mown$}i) { return "${1}mowed"; }
        if (m{(.*)pays$}i) { return "${1}paid"; }
        if (m{(.*)pay$}i) { return "${1}paid"; }
        if (m{(.*)paid$}i) { return "${1}paid"; }
        if (m{(.*)reads$}i) { return "${1}read"; }
        if (m{(.*)read$}i) { return "${1}read"; }
        if (m{(.*)read$}i) { return "${1}read"; }
        if (m{(.*)says$}i) { return "${1}said"; }
        if (m{(.*)say$}i) { return "${1}said"; }
        if (m{(.*)said$}i) { return "${1}said"; }
        if (m{(.*)sees$}i) { return "${1}saw"; }
        if (m{(.*)see$}i) { return "${1}saw"; }
        if (m{(.*)seen$}i) { return "${1}saw"; }
        if (m{(.*)sells$}i) { return "${1}sold"; }
        if (m{(.*)sell$}i) { return "${1}sold"; }
        if (m{(.*)sold$}i) { return "${1}sold"; }
        if (m{(.*)sends$}i) { return "${1}sent"; }
        if (m{(.*)send$}i) { return "${1}sent"; }
        if (m{(.*)sent$}i) { return "${1}sent"; }
        if (m{(.*)sets$}i) { return "${1}set"; }
        if (m{(.*)set$}i) { return "${1}set"; }
        if (m{(.*)set$}i) { return "${1}set"; }
        if (m{(.*)sews$}i) { return "${1}sewed"; }
        if (m{(.*)sew$}i) { return "${1}sewed"; }
        if (m{(.*)sewn$}i) { return "${1}sewed"; }
        if (m{(.*)shines$}i) { return "${1}shone"; }
        if (m{(.*)shine$}i) { return "${1}shone"; }
        if (m{(.*)shone$}i) { return "${1}shone"; }
        if (m{(.*)shoots$}i) { return "${1}shot"; }
        if (m{(.*)shoot$}i) { return "${1}shot"; }
        if (m{(.*)shot$}i) { return "${1}shot"; }
        if (m{(.*)shuts$}i) { return "${1}shut"; }
        if (m{(.*)shut$}i) { return "${1}shut"; }
        if (m{(.*)shut$}i) { return "${1}shut"; }
        if (m{(.*)sleeps$}i) { return "${1}slept"; }
        if (m{(.*)sleep$}i) { return "${1}slept"; }
        if (m{(.*)slept$}i) { return "${1}slept"; }
        if (m{(.*)slings$}i) { return "${1}slung"; }
        if (m{(.*)sling$}i) { return "${1}slung"; }
        if (m{(.*)slung$}i) { return "${1}slung"; }
        if (m{(.*)spins$}i) { return "${1}spun"; }
        if (m{(.*)spin$}i) { return "${1}spun"; }
        if (m{(.*)spun$}i) { return "${1}spun"; }
        if (m{(.*)splits$}i) { return "${1}split"; }
        if (m{(.*)split$}i) { return "${1}split"; }
        if (m{(.*)split$}i) { return "${1}split"; }
        if (m{(.*)spreads$}i) { return "${1}spread"; }
        if (m{(.*)spread$}i) { return "${1}spread"; }
        if (m{(.*)spread$}i) { return "${1}spread"; }
        if (m{(.*)sticks$}i) { return "${1}stuck"; }
        if (m{(.*)stick$}i) { return "${1}stuck"; }
        if (m{(.*)stuck$}i) { return "${1}stuck"; }
        if (m{(.*)strikes$}i) { return "${1}struck"; }
        if (m{(.*)strike$}i) { return "${1}struck"; }
        if (m{(.*)struck$}i) { return "${1}struck"; }
        if (m{(.*)strings$}i) { return "${1}strung"; }
        if (m{(.*)string$}i) { return "${1}strung"; }
        if (m{(.*)strung$}i) { return "${1}strung"; }
        if (m{(.*)takes$}i) { return "${1}took"; }
        if (m{(.*)take$}i) { return "${1}took"; }
        if (m{(.*)taken$}i) { return "${1}took"; }
        if (m{(.*)teaches$}i) { return "${1}taught"; }
        if (m{(.*)teach$}i) { return "${1}taught"; }
        if (m{(.*)taught$}i) { return "${1}taught"; }
        if (m{(.*)tells$}i) { return "${1}told"; }
        if (m{(.*)tell$}i) { return "${1}told"; }
        if (m{(.*)told$}i) { return "${1}told"; }
        if (m{(.*)thinks$}i) { return "${1}thought"; }
        if (m{(.*)think$}i) { return "${1}thought"; }
        if (m{(.*)thought$}i) { return "${1}thought"; }
        if (m{(.*)throws$}i) { return "${1}threw"; }
        if (m{(.*)throw$}i) { return "${1}threw"; }
        if (m{(.*)thrown$}i) { return "${1}threw"; }
        if (m{(.*)tries$}i) { return "${1}tried"; }
        if (m{(.*)try$}i) { return "${1}tried"; }
        if (m{(.*)tried$}i) { return "${1}tried"; }
        if (m{(.*)weaves$}i) { return "${1}wove"; }
        if (m{(.*)weave$}i) { return "${1}wove"; }
        if (m{(.*)woven$}i) { return "${1}wove"; }
        if (m{(.*)weds$}i) { return "${1}wed"; }
        if (m{(.*)wed$}i) { return "${1}wed"; }
        if (m{(.*)wed$}i) { return "${1}wed"; }
        if (m{(.*)wets$}i) { return "${1}wet"; }
        if (m{(.*)wet$}i) { return "${1}wet"; }
        if (m{(.*)wetted$}i) { return "${1}wet"; }
        if (m{(.*)winds$}i) { return "${1}wound"; }
        if (m{(.*)wind$}i) { return "${1}wound"; }
        if (m{(.*)wound$}i) { return "${1}wound"; }
        if (m{(.*)writes$}i) { return "${1}wrote"; }
        if (m{(.*)write$}i) { return "${1}wrote"; }
        if (m{(.*)written$}i) { return "${1}wrote"; }
        if (m{(.*)adds$}i) { return "${1}added"; }
        if (m{(.*)add$}i) { return "${1}added"; }
        if (m{(.*)added$}i) { return "${1}added"; }
        if (m{(.*)alights$}i) { return "${1}alighted"; }
        if (m{(.*)alight$}i) { return "${1}alighted"; }
        if (m{(.*)alighted$}i) { return "${1}alighted"; }
        if (m{(.*)allows$}i) { return "${1}allowed"; }
        if (m{(.*)allow$}i) { return "${1}allowed"; }
        if (m{(.*)allowed$}i) { return "${1}allowed"; }
        if (m{(.*)appears$}i) { return "${1}appeared"; }
        if (m{(.*)appear$}i) { return "${1}appeared"; }
        if (m{(.*)appeared$}i) { return "${1}appeared"; }
        if (m{(.*)believes$}i) { return "${1}believed"; }
        if (m{(.*)believe$}i) { return "${1}believed"; }
        if (m{(.*)believed$}i) { return "${1}believed"; }
        if (m{(.*)calls$}i) { return "${1}called"; }
        if (m{(.*)call$}i) { return "${1}called"; }
        if (m{(.*)called$}i) { return "${1}called"; }
        if (m{(.*)clothes$}i) { return "${1}clothed"; }
        if (m{(.*)clothe$}i) { return "${1}clothed"; }
        if (m{(.*)clothed$}i) { return "${1}clothed"; }
        if (m{(.*)considers$}i) { return "${1}considered"; }
        if (m{(.*)consider$}i) { return "${1}considered"; }
        if (m{(.*)considered$}i) { return "${1}considered"; }
        if (m{(.*)creates$}i) { return "${1}created"; }
        if (m{(.*)create$}i) { return "${1}created"; }
        if (m{(.*)created$}i) { return "${1}created"; }
        if (m{(.*)fits$}i) { return "${1}fitted"; }
        if (m{(.*)fit$}i) { return "${1}fitted"; }
        if (m{(.*)fitted$}i) { return "${1}fitted"; }
        if (m{(.*)includes$}i) { return "${1}included"; }
        if (m{(.*)include$}i) { return "${1}included"; }
        if (m{(.*)included$}i) { return "${1}included"; }
        if (m{(.*)melts$}i) { return "${1}melted"; }
        if (m{(.*)melt$}i) { return "${1}melted"; }
        if (m{(.*)melted$}i) { return "${1}melted"; }
        if (m{(.*)offers$}i) { return "${1}offered"; }
        if (m{(.*)offer$}i) { return "${1}offered"; }
        if (m{(.*)offered$}i) { return "${1}offered"; }
        if (m{(.*)opens$}i) { return "${1}opened"; }
        if (m{(.*)open$}i) { return "${1}opened"; }
        if (m{(.*)opened$}i) { return "${1}opened"; }
        if (m{(.*)plays$}i) { return "${1}played"; }
        if (m{(.*)play$}i) { return "${1}played"; }
        if (m{(.*)played$}i) { return "${1}played"; }
        if (m{(.*)serves$}i) { return "${1}served"; }
        if (m{(.*)serve$}i) { return "${1}served"; }
        if (m{(.*)served$}i) { return "${1}served"; }
        if (m{(.*)smells$}i) { return "${1}smelled"; }
        if (m{(.*)smell$}i) { return "${1}smelled"; }
        if (m{(.*)smelled$}i) { return "${1}smelled"; }
        if (m{(.*)spells$}i) { return "${1}spelled"; }
        if (m{(.*)spell$}i) { return "${1}spelled"; }
        if (m{(.*)spelled$}i) { return "${1}spelled"; }
        if (m{(.*)spills$}i) { return "${1}spilled"; }
        if (m{(.*)spill$}i) { return "${1}spilled"; }
        if (m{(.*)spilled$}i) { return "${1}spilled"; }
        if (m{(.*)starts$}i) { return "${1}started"; }
        if (m{(.*)start$}i) { return "${1}started"; }
        if (m{(.*)started$}i) { return "${1}started"; }
        if (m{(.*)turns$}i) { return "${1}turned"; }
        if (m{(.*)turn$}i) { return "${1}turned"; }
        if (m{(.*)turned$}i) { return "${1}turned"; }
        if (m{(.*)uses$}i) { return "${1}used"; }
        if (m{(.*)use$}i) { return "${1}used"; }
        if (m{(.*)used$}i) { return "${1}used"; }
        if (m{(.*)works$}i) { return "${1}worked"; }
        if (m{(.*)work$}i) { return "${1}worked"; }
        if (m{(.*)worked$}i) { return "${1}worked"; }
        if (m{(.*)aes$}i) { return "${1}aed"; }
        if (m{(.*)ae$}i) { return "${1}aed"; }
        if (m{(.*)aed$}i) { return "${1}aed"; }
        if (m{(.*[aeiou])ys$}i) { return "${1}yed"; }
        if (m{(.*[aeiou])y$}i) { return "${1}yed"; }
        if (m{(.*[aeiou])yed$}i) { return "${1}yed"; }
        if (m{(.*[aiy])nxes$}i) { return "${1}nxed"; }
        if (m{(.*[aiy])nx$}i) { return "${1}nxed"; }
        if (m{(.*[aiy])nxed$}i) { return "${1}nxed"; }
        if (m{(.*)ceps$}i) { return "${1}cepsed"; }
        if (m{(.*)ceps$}i) { return "${1}cepsed"; }
        if (m{(.*)cepsed$}i) { return "${1}cepsed"; }
        if (m{(.*[cs])hes$}i) { return "${1}hed"; }
        if (m{(.*[cs])h$}i) { return "${1}hed"; }
        if (m{(.*[cs])hed$}i) { return "${1}hed"; }
        if (m{(.*)oes$}i) { return "${1}oed"; }
        if (m{(.*)oe$}i) { return "${1}oed"; }
        if (m{(.*)oed$}i) { return "${1}oed"; }
        if (m{(.*)ieus$}i) { return "${1}ieued"; }
        if (m{(.*)ieu$}i) { return "${1}ieued"; }
        if (m{(.*)ieued$}i) { return "${1}ieued"; }
        if (m{(.*)eaus$}i) { return "${1}eaued"; }
        if (m{(.*)eau$}i) { return "${1}eaued"; }
        if (m{(.*)eaued$}i) { return "${1}eaued"; }
        if (m{(.*)sses$}i) { return "${1}ssed"; }
        if (m{(.*)ss$}i) { return "${1}ssed"; }
        if (m{(.*)ssed$}i) { return "${1}ssed"; }
        if (m{(.*)trixes$}i) { return "${1}trixed"; }
        if (m{(.*)trix$}i) { return "${1}trixed"; }
        if (m{(.*)trixed$}i) { return "${1}trixed"; }
        if (m{(.*)xes$}i) { return "${1}xed"; }
        if (m{(.*)x$}i) { return "${1}xed"; }
        if (m{(.*)xed$}i) { return "${1}xed"; }
        if (m{(.*)zzes$}i) { return "${1}zzed"; }
        if (m{(.*)zz$}i) { return "${1}zzed"; }
        if (m{(.*)zzed$}i) { return "${1}zzed"; }
        if (m{(.*)zes$}i) { return "${1}zed"; }
        if (m{(.*)ze$}i) { return "${1}zed"; }
        if (m{(.*)zed$}i) { return "${1}zed"; }
        if (m{(.*)ues$}i) { return "${1}ued"; }
        if (m{(.*)ue$}i) { return "${1}ued"; }
        if (m{(.*)ued$}i) { return "${1}ued"; }
        if (m{(.*)is$}i) { return "${1}ied"; }
        if (m{(.*)i$}i) { return "${1}ied"; }
        if (m{(.*)ied$}i) { return "${1}ied"; }
        if (m{(.*)ees$}i) { return "${1}eed"; }
        if (m{(.*)ee$}i) { return "${1}eed"; }
        if (m{(.*)eed$}i) { return "${1}eed"; }
        if (m{(.*)yes$}i) { return "${1}yed"; }
        if (m{(.*)ye$}i) { return "${1}yed"; }
        if (m{(.*)yed$}i) { return "${1}yed"; }
        if (m{(.*)ies$}i) { return "${1}ied"; }
        if (m{(.*)y$}i) { return "${1}ied"; }
        if (m{(.*)ied$}i) { return "${1}ied"; }
        if (m{(.*)ys$}i) { return "${1}yed"; }
        if (m{(.*)y$}i) { return "${1}yed"; }
        if (m{(.*)yed$}i) { return "${1}yed"; }
        if (m{(.*[^e])es$}i) { return "${1}ed"; }
        if (m{(.*[^e])e$}i) { return "${1}ed"; }
        if (m{(.*[^e])ed$}i) { return "${1}ed"; }
        if (m{(.*)ers$}i) { return "${1}ered"; }
        if (m{(.*)er$}i) { return "${1}ered"; }
        if (m{(.*)ered$}i) { return "${1}ered"; }
        default { return "_"; }
    }
}

sub convert_to_pres_part {
    my ($word) = @_;
    return $pres_part_of->{$word}     if exists $pres_part_of->{$word};
    return $pres_part_of->{lc $word}  if exists $pres_part_of->{lc $word};
    return $pres_part_of->{tc $word}  if exists $pres_part_of->{tc $word};
    return $word                     if is_pres_part($word);
    for ($word) {
        if (m{(.*)shears$}i) { return "${1}shearing"; }
        if (m{(.*)shear$}i) { return "${1}shearing"; }
        if (m{(.*)bears$}i) { return "${1}bearing"; }
        if (m{(.*)bear$}i) { return "${1}bearing"; }
        if (m{(.*)bids$}i) { return "${1}bidding"; }
        if (m{(.*)bid$}i) { return "${1}bidding"; }
        if (m{(.*)buys$}i) { return "${1}buying"; }
        if (m{(.*)buy$}i) { return "${1}buying"; }
        if (m{(.*)casts$}i) { return "${1}casting"; }
        if (m{(.*)cast$}i) { return "${1}casting"; }
        if (m{(.*)clads$}i) { return "${1}cladding"; }
        if (m{(.*)clad$}i) { return "${1}cladding"; }
        if (m{(.*)cuts$}i) { return "${1}cutting"; }
        if (m{(.*)cut$}i) { return "${1}cutting"; }
        if (m{(.*)does$}i) { return "${1}doing"; }
        if (m{(.*)do$}i) { return "${1}doing"; }
        if (m{(.*)do$}i) { return "${1}doing"; }
        if (m{(.*)do$}i) { return "${1}doing"; }
        if (m{(.*)draws$}i) { return "${1}drawing"; }
        if (m{(.*)draw$}i) { return "${1}drawing"; }
        if (m{(.*)feeds$}i) { return "${1}feeding"; }
        if (m{(.*)feed$}i) { return "${1}feeding"; }
        if (m{(.*)freezes$}i) { return "${1}freezing"; }
        if (m{(.*)freeze$}i) { return "${1}freezing"; }
        if (m{(.*)grows$}i) { return "${1}growing"; }
        if (m{(.*)grow$}i) { return "${1}growing"; }
        if (m{(.*)hangs$}i) { return "${1}hanging"; }
        if (m{(.*)hang$}i) { return "${1}hanging"; }
        if (m{(.*)hears$}i) { return "${1}hearing"; }
        if (m{(.*)hear$}i) { return "${1}hearing"; }
        if (m{(.*)hides$}i) { return "${1}hiding"; }
        if (m{(.*)hide$}i) { return "${1}hiding"; }
        if (m{(.*)inputs$}i) { return "${1}inputting"; }
        if (m{(.*)input$}i) { return "${1}inputting"; }
        if (m{(.*)knits$}i) { return "${1}knitting"; }
        if (m{(.*)knit$}i) { return "${1}knitting"; }
        if (m{(.*)lends$}i) { return "${1}lending"; }
        if (m{(.*)lend$}i) { return "${1}lending"; }
        if (m{(.*)lets$}i) { return "${1}letting"; }
        if (m{(.*)let$}i) { return "${1}letting"; }
        if (m{(.*)lights$}i) { return "${1}lighting"; }
        if (m{(.*)light$}i) { return "${1}lighting"; }
        if (m{(.*)makes$}i) { return "${1}making"; }
        if (m{(.*)make$}i) { return "${1}making"; }
        if (m{(.*)mows$}i) { return "${1}mowing"; }
        if (m{(.*)mow$}i) { return "${1}mowing"; }
        if (m{(.*)pays$}i) { return "${1}paying"; }
        if (m{(.*)pay$}i) { return "${1}paying"; }
        if (m{(.*)reads$}i) { return "${1}reading"; }
        if (m{(.*)read$}i) { return "${1}reading"; }
        if (m{(.*)says$}i) { return "${1}saying"; }
        if (m{(.*)say$}i) { return "${1}saying"; }
        if (m{(.*)sees$}i) { return "${1}seeing"; }
        if (m{(.*)see$}i) { return "${1}seeing"; }
        if (m{(.*)sells$}i) { return "${1}selling"; }
        if (m{(.*)sell$}i) { return "${1}selling"; }
        if (m{(.*)sends$}i) { return "${1}sending"; }
        if (m{(.*)send$}i) { return "${1}sending"; }
        if (m{(.*)sets$}i) { return "${1}setting"; }
        if (m{(.*)set$}i) { return "${1}setting"; }
        if (m{(.*)sews$}i) { return "${1}sewing"; }
        if (m{(.*)sew$}i) { return "${1}sewing"; }
        if (m{(.*)shines$}i) { return "${1}shining"; }
        if (m{(.*)shine$}i) { return "${1}shining"; }
        if (m{(.*)shoots$}i) { return "${1}shooting"; }
        if (m{(.*)shoot$}i) { return "${1}shooting"; }
        if (m{(.*)shuts$}i) { return "${1}shutting"; }
        if (m{(.*)shut$}i) { return "${1}shutting"; }
        if (m{(.*)sleeps$}i) { return "${1}sleeping"; }
        if (m{(.*)sleep$}i) { return "${1}sleeping"; }
        if (m{(.*)slings$}i) { return "${1}slinging"; }
        if (m{(.*)sling$}i) { return "${1}slinging"; }
        if (m{(.*)spins$}i) { return "${1}spinning"; }
        if (m{(.*)spin$}i) { return "${1}spinning"; }
        if (m{(.*)splits$}i) { return "${1}splitting"; }
        if (m{(.*)split$}i) { return "${1}splitting"; }
        if (m{(.*)spreads$}i) { return "${1}spreading"; }
        if (m{(.*)spread$}i) { return "${1}spreading"; }
        if (m{(.*)sticks$}i) { return "${1}sticking"; }
        if (m{(.*)stick$}i) { return "${1}sticking"; }
        if (m{(.*)strikes$}i) { return "${1}striking"; }
        if (m{(.*)strike$}i) { return "${1}striking"; }
        if (m{(.*)strings$}i) { return "${1}stringing"; }
        if (m{(.*)string$}i) { return "${1}stringing"; }
        if (m{(.*)takes$}i) { return "${1}taking"; }
        if (m{(.*)take$}i) { return "${1}taking"; }
        if (m{(.*)teaches$}i) { return "${1}teaching"; }
        if (m{(.*)teach$}i) { return "${1}teaching"; }
        if (m{(.*)tells$}i) { return "${1}telling"; }
        if (m{(.*)tell$}i) { return "${1}telling"; }
        if (m{(.*)thinks$}i) { return "${1}thinking"; }
        if (m{(.*)think$}i) { return "${1}thinking"; }
        if (m{(.*)throws$}i) { return "${1}throwing"; }
        if (m{(.*)throw$}i) { return "${1}throwing"; }
        if (m{(.*)tries$}i) { return "${1}trying"; }
        if (m{(.*)try$}i) { return "${1}trying"; }
        if (m{(.*)weaves$}i) { return "${1}weaving"; }
        if (m{(.*)weave$}i) { return "${1}weaving"; }
        if (m{(.*)weds$}i) { return "${1}wedding"; }
        if (m{(.*)wed$}i) { return "${1}wedding"; }
        if (m{(.*)wets$}i) { return "${1}wetting"; }
        if (m{(.*)wet$}i) { return "${1}wetting"; }
        if (m{(.*)winds$}i) { return "${1}winding"; }
        if (m{(.*)wind$}i) { return "${1}winding"; }
        if (m{(.*)writes$}i) { return "${1}writing"; }
        if (m{(.*)write$}i) { return "${1}writing"; }
        if (m{(.*)adds$}i) { return "${1}adding"; }
        if (m{(.*)add$}i) { return "${1}adding"; }
        if (m{(.*)alights$}i) { return "${1}alighting"; }
        if (m{(.*)alight$}i) { return "${1}alighting"; }
        if (m{(.*)allows$}i) { return "${1}allowing"; }
        if (m{(.*)allow$}i) { return "${1}allowing"; }
        if (m{(.*)appears$}i) { return "${1}appearing"; }
        if (m{(.*)appear$}i) { return "${1}appearing"; }
        if (m{(.*)believes$}i) { return "${1}believing"; }
        if (m{(.*)believe$}i) { return "${1}believing"; }
        if (m{(.*)calls$}i) { return "${1}calling"; }
        if (m{(.*)call$}i) { return "${1}calling"; }
        if (m{(.*)clothes$}i) { return "${1}clothing"; }
        if (m{(.*)clothe$}i) { return "${1}clothing"; }
        if (m{(.*)considers$}i) { return "${1}considering"; }
        if (m{(.*)consider$}i) { return "${1}considering"; }
        if (m{(.*)creates$}i) { return "${1}creating"; }
        if (m{(.*)create$}i) { return "${1}creating"; }
        if (m{(.*)fits$}i) { return "${1}fitting"; }
        if (m{(.*)fit$}i) { return "${1}fitting"; }
        if (m{(.*)includes$}i) { return "${1}including"; }
        if (m{(.*)include$}i) { return "${1}including"; }
        if (m{(.*)melts$}i) { return "${1}melting"; }
        if (m{(.*)melt$}i) { return "${1}melting"; }
        if (m{(.*)offers$}i) { return "${1}offering"; }
        if (m{(.*)offer$}i) { return "${1}offering"; }
        if (m{(.*)opens$}i) { return "${1}opening"; }
        if (m{(.*)open$}i) { return "${1}opening"; }
        if (m{(.*)plays$}i) { return "${1}playing"; }
        if (m{(.*)play$}i) { return "${1}playing"; }
        if (m{(.*)serves$}i) { return "${1}serving"; }
        if (m{(.*)serve$}i) { return "${1}serving"; }
        if (m{(.*)smells$}i) { return "${1}smelling"; }
        if (m{(.*)smell$}i) { return "${1}smelling"; }
        if (m{(.*)spells$}i) { return "${1}spelling"; }
        if (m{(.*)spell$}i) { return "${1}spelling"; }
        if (m{(.*)spills$}i) { return "${1}spilling"; }
        if (m{(.*)spill$}i) { return "${1}spilling"; }
        if (m{(.*)starts$}i) { return "${1}starting"; }
        if (m{(.*)start$}i) { return "${1}starting"; }
        if (m{(.*)turns$}i) { return "${1}turning"; }
        if (m{(.*)turn$}i) { return "${1}turning"; }
        if (m{(.*)uses$}i) { return "${1}using"; }
        if (m{(.*)use$}i) { return "${1}using"; }
        if (m{(.*)works$}i) { return "${1}working"; }
        if (m{(.*)work$}i) { return "${1}working"; }
        if (m{(.*)aes$}i) { return "${1}aeing"; }
        if (m{(.*)ae$}i) { return "${1}aeing"; }
        if (m{(.*[aeiou])ys$}i) { return "${1}ying"; }
        if (m{(.*[aeiou])y$}i) { return "${1}ying"; }
        if (m{(.*[aiy])nxes$}i) { return "${1}nxing"; }
        if (m{(.*[aiy])nx$}i) { return "${1}nxing"; }
        if (m{(.*)ceps$}i) { return "${1}cepsing"; }
        if (m{(.*)ceps$}i) { return "${1}cepsing"; }
        if (m{(.*[cs])hes$}i) { return "${1}hing"; }
        if (m{(.*[cs])h$}i) { return "${1}hing"; }
        if (m{(.*)oes$}i) { return "${1}oeing"; }
        if (m{(.*)oe$}i) { return "${1}oeing"; }
        if (m{(.*)ieus$}i) { return "${1}ieuing"; }
        if (m{(.*)ieu$}i) { return "${1}ieuing"; }
        if (m{(.*)eaus$}i) { return "${1}eauing"; }
        if (m{(.*)eau$}i) { return "${1}eauing"; }
        if (m{(.*)sses$}i) { return "${1}ssing"; }
        if (m{(.*)ss$}i) { return "${1}ssing"; }
        if (m{(.*)trixes$}i) { return "${1}trixing"; }
        if (m{(.*)trix$}i) { return "${1}trixing"; }
        if (m{(.*)xes$}i) { return "${1}xing"; }
        if (m{(.*)x$}i) { return "${1}xing"; }
        if (m{(.*)zzes$}i) { return "${1}zzing"; }
        if (m{(.*)zz$}i) { return "${1}zzing"; }
        if (m{(.*)zes$}i) { return "${1}zing"; }
        if (m{(.*)ze$}i) { return "${1}zing"; }
        if (m{(.*)ues$}i) { return "${1}ueing"; }
        if (m{(.*)ue$}i) { return "${1}ueing"; }
        if (m{(.*)is$}i) { return "${1}iing"; }
        if (m{(.*)i$}i) { return "${1}iing"; }
        if (m{(.*)ees$}i) { return "${1}eeing"; }
        if (m{(.*)ee$}i) { return "${1}eeing"; }
        if (m{(.*)yes$}i) { return "${1}yeing"; }
        if (m{(.*)ye$}i) { return "${1}yeing"; }
        if (m{(.*)ies$}i) { return "${1}ying"; }
        if (m{(.*)y$}i) { return "${1}ying"; }
        if (m{(.*)ys$}i) { return "${1}ying"; }
        if (m{(.*)y$}i) { return "${1}ying"; }
        if (m{(.*[^e])es$}i) { return "${1}ing"; }
        if (m{(.*[^e])e$}i) { return "${1}ing"; }
        if (m{(.*)ers$}i) { return "${1}ering"; }
        if (m{(.*)er$}i) { return "${1}ering"; }
        default { return "_"; }
    }
}

sub convert_to_past_part {
    my ($word) = @_;
    return $past_part_of->{$word}     if exists $past_part_of->{$word};
    return $past_part_of->{lc $word}  if exists $past_part_of->{lc $word};
    return $past_part_of->{tc $word}  if exists $past_part_of->{tc $word};
    return $word                     if is_past_part($word);
    for ($word) {
        if (m{(.*)shears$}i) { return "${1}shorn"; }
        if (m{(.*)shear$}i) { return "${1}shorn"; }
        if (m{(.*)sheared$}i) { return "${1}shorn"; }
        if (m{(.*)bears$}i) { return "${1}borne"; }
        if (m{(.*)bear$}i) { return "${1}borne"; }
        if (m{(.*)bore$}i) { return "${1}borne"; }
        if (m{(.*)bids$}i) { return "${1}bidden"; }
        if (m{(.*)bid$}i) { return "${1}bidden"; }
        if (m{(.*)bade$}i) { return "${1}bidden"; }
        if (m{(.*)buys$}i) { return "${1}bought"; }
        if (m{(.*)buy$}i) { return "${1}bought"; }
        if (m{(.*)bought$}i) { return "${1}bought"; }
        if (m{(.*)casts$}i) { return "${1}cast"; }
        if (m{(.*)cast$}i) { return "${1}cast"; }
        if (m{(.*)cast$}i) { return "${1}cast"; }
        if (m{(.*)clads$}i) { return "${1}clad"; }
        if (m{(.*)clad$}i) { return "${1}clad"; }
        if (m{(.*)clad$}i) { return "${1}clad"; }
        if (m{(.*)cuts$}i) { return "${1}cut"; }
        if (m{(.*)cut$}i) { return "${1}cut"; }
        if (m{(.*)cut$}i) { return "${1}cut"; }
        if (m{(.*)does$}i) { return "${1}done"; }
        if (m{(.*)do$}i) { return "${1}done"; }
        if (m{(.*)did$}i) { return "${1}done"; }
        if (m{(.*)do$}i) { return "${1}done"; }
        if (m{(.*)do$}i) { return "${1}done"; }
        if (m{(.*)did$}i) { return "${1}done"; }
        if (m{(.*)draws$}i) { return "${1}drawn"; }
        if (m{(.*)draw$}i) { return "${1}drawn"; }
        if (m{(.*)drew$}i) { return "${1}drawn"; }
        if (m{(.*)feeds$}i) { return "${1}fed"; }
        if (m{(.*)feed$}i) { return "${1}fed"; }
        if (m{(.*)fed$}i) { return "${1}fed"; }
        if (m{(.*)freezes$}i) { return "${1}frozen"; }
        if (m{(.*)freeze$}i) { return "${1}frozen"; }
        if (m{(.*)froze$}i) { return "${1}frozen"; }
        if (m{(.*)grows$}i) { return "${1}grown"; }
        if (m{(.*)grow$}i) { return "${1}grown"; }
        if (m{(.*)grew$}i) { return "${1}grown"; }
        if (m{(.*)hangs$}i) { return "${1}hung"; }
        if (m{(.*)hang$}i) { return "${1}hung"; }
        if (m{(.*)hung$}i) { return "${1}hung"; }
        if (m{(.*)hears$}i) { return "${1}heard"; }
        if (m{(.*)hear$}i) { return "${1}heard"; }
        if (m{(.*)heard$}i) { return "${1}heard"; }
        if (m{(.*)hides$}i) { return "${1}hidden"; }
        if (m{(.*)hide$}i) { return "${1}hidden"; }
        if (m{(.*)hid$}i) { return "${1}hidden"; }
        if (m{(.*)inputs$}i) { return "${1}input"; }
        if (m{(.*)input$}i) { return "${1}input"; }
        if (m{(.*)input$}i) { return "${1}input"; }
        if (m{(.*)knits$}i) { return "${1}knitted"; }
        if (m{(.*)knit$}i) { return "${1}knitted"; }
        if (m{(.*)knitted$}i) { return "${1}knitted"; }
        if (m{(.*)lends$}i) { return "${1}lent"; }
        if (m{(.*)lend$}i) { return "${1}lent"; }
        if (m{(.*)lent$}i) { return "${1}lent"; }
        if (m{(.*)lets$}i) { return "${1}let"; }
        if (m{(.*)let$}i) { return "${1}let"; }
        if (m{(.*)let$}i) { return "${1}let"; }
        if (m{(.*)lights$}i) { return "${1}lit"; }
        if (m{(.*)light$}i) { return "${1}lit"; }
        if (m{(.*)lit$}i) { return "${1}lit"; }
        if (m{(.*)makes$}i) { return "${1}made"; }
        if (m{(.*)make$}i) { return "${1}made"; }
        if (m{(.*)made$}i) { return "${1}made"; }
        if (m{(.*)mows$}i) { return "${1}mown"; }
        if (m{(.*)mow$}i) { return "${1}mown"; }
        if (m{(.*)mowed$}i) { return "${1}mown"; }
        if (m{(.*)pays$}i) { return "${1}paid"; }
        if (m{(.*)pay$}i) { return "${1}paid"; }
        if (m{(.*)paid$}i) { return "${1}paid"; }
        if (m{(.*)reads$}i) { return "${1}read"; }
        if (m{(.*)read$}i) { return "${1}read"; }
        if (m{(.*)read$}i) { return "${1}read"; }
        if (m{(.*)says$}i) { return "${1}said"; }
        if (m{(.*)say$}i) { return "${1}said"; }
        if (m{(.*)said$}i) { return "${1}said"; }
        if (m{(.*)sees$}i) { return "${1}seen"; }
        if (m{(.*)see$}i) { return "${1}seen"; }
        if (m{(.*)saw$}i) { return "${1}seen"; }
        if (m{(.*)sells$}i) { return "${1}sold"; }
        if (m{(.*)sell$}i) { return "${1}sold"; }
        if (m{(.*)sold$}i) { return "${1}sold"; }
        if (m{(.*)sends$}i) { return "${1}sent"; }
        if (m{(.*)send$}i) { return "${1}sent"; }
        if (m{(.*)sent$}i) { return "${1}sent"; }
        if (m{(.*)sets$}i) { return "${1}set"; }
        if (m{(.*)set$}i) { return "${1}set"; }
        if (m{(.*)set$}i) { return "${1}set"; }
        if (m{(.*)sews$}i) { return "${1}sewn"; }
        if (m{(.*)sew$}i) { return "${1}sewn"; }
        if (m{(.*)sewed$}i) { return "${1}sewn"; }
        if (m{(.*)shines$}i) { return "${1}shone"; }
        if (m{(.*)shine$}i) { return "${1}shone"; }
        if (m{(.*)shone$}i) { return "${1}shone"; }
        if (m{(.*)shoots$}i) { return "${1}shot"; }
        if (m{(.*)shoot$}i) { return "${1}shot"; }
        if (m{(.*)shot$}i) { return "${1}shot"; }
        if (m{(.*)shuts$}i) { return "${1}shut"; }
        if (m{(.*)shut$}i) { return "${1}shut"; }
        if (m{(.*)shut$}i) { return "${1}shut"; }
        if (m{(.*)sleeps$}i) { return "${1}slept"; }
        if (m{(.*)sleep$}i) { return "${1}slept"; }
        if (m{(.*)slept$}i) { return "${1}slept"; }
        if (m{(.*)slings$}i) { return "${1}slung"; }
        if (m{(.*)sling$}i) { return "${1}slung"; }
        if (m{(.*)slung$}i) { return "${1}slung"; }
        if (m{(.*)spins$}i) { return "${1}spun"; }
        if (m{(.*)spin$}i) { return "${1}spun"; }
        if (m{(.*)spun$}i) { return "${1}spun"; }
        if (m{(.*)splits$}i) { return "${1}split"; }
        if (m{(.*)split$}i) { return "${1}split"; }
        if (m{(.*)split$}i) { return "${1}split"; }
        if (m{(.*)spreads$}i) { return "${1}spread"; }
        if (m{(.*)spread$}i) { return "${1}spread"; }
        if (m{(.*)spread$}i) { return "${1}spread"; }
        if (m{(.*)sticks$}i) { return "${1}stuck"; }
        if (m{(.*)stick$}i) { return "${1}stuck"; }
        if (m{(.*)stuck$}i) { return "${1}stuck"; }
        if (m{(.*)strikes$}i) { return "${1}struck"; }
        if (m{(.*)strike$}i) { return "${1}struck"; }
        if (m{(.*)struck$}i) { return "${1}struck"; }
        if (m{(.*)strings$}i) { return "${1}strung"; }
        if (m{(.*)string$}i) { return "${1}strung"; }
        if (m{(.*)strung$}i) { return "${1}strung"; }
        if (m{(.*)takes$}i) { return "${1}taken"; }
        if (m{(.*)take$}i) { return "${1}taken"; }
        if (m{(.*)took$}i) { return "${1}taken"; }
        if (m{(.*)teaches$}i) { return "${1}taught"; }
        if (m{(.*)teach$}i) { return "${1}taught"; }
        if (m{(.*)taught$}i) { return "${1}taught"; }
        if (m{(.*)tells$}i) { return "${1}told"; }
        if (m{(.*)tell$}i) { return "${1}told"; }
        if (m{(.*)told$}i) { return "${1}told"; }
        if (m{(.*)thinks$}i) { return "${1}thought"; }
        if (m{(.*)think$}i) { return "${1}thought"; }
        if (m{(.*)thought$}i) { return "${1}thought"; }
        if (m{(.*)throws$}i) { return "${1}thrown"; }
        if (m{(.*)throw$}i) { return "${1}thrown"; }
        if (m{(.*)threw$}i) { return "${1}thrown"; }
        if (m{(.*)tries$}i) { return "${1}tried"; }
        if (m{(.*)try$}i) { return "${1}tried"; }
        if (m{(.*)tried$}i) { return "${1}tried"; }
        if (m{(.*)weaves$}i) { return "${1}woven"; }
        if (m{(.*)weave$}i) { return "${1}woven"; }
        if (m{(.*)wove$}i) { return "${1}woven"; }
        if (m{(.*)weds$}i) { return "${1}wed"; }
        if (m{(.*)wed$}i) { return "${1}wed"; }
        if (m{(.*)wed$}i) { return "${1}wed"; }
        if (m{(.*)wets$}i) { return "${1}wetted"; }
        if (m{(.*)wet$}i) { return "${1}wetted"; }
        if (m{(.*)wet$}i) { return "${1}wetted"; }
        if (m{(.*)winds$}i) { return "${1}wound"; }
        if (m{(.*)wind$}i) { return "${1}wound"; }
        if (m{(.*)wound$}i) { return "${1}wound"; }
        if (m{(.*)writes$}i) { return "${1}written"; }
        if (m{(.*)write$}i) { return "${1}written"; }
        if (m{(.*)wrote$}i) { return "${1}written"; }
        if (m{(.*)adds$}i) { return "${1}added"; }
        if (m{(.*)add$}i) { return "${1}added"; }
        if (m{(.*)added$}i) { return "${1}added"; }
        if (m{(.*)alights$}i) { return "${1}alighted"; }
        if (m{(.*)alight$}i) { return "${1}alighted"; }
        if (m{(.*)alighted$}i) { return "${1}alighted"; }
        if (m{(.*)allows$}i) { return "${1}allowed"; }
        if (m{(.*)allow$}i) { return "${1}allowed"; }
        if (m{(.*)allowed$}i) { return "${1}allowed"; }
        if (m{(.*)appears$}i) { return "${1}appeared"; }
        if (m{(.*)appear$}i) { return "${1}appeared"; }
        if (m{(.*)appeared$}i) { return "${1}appeared"; }
        if (m{(.*)believes$}i) { return "${1}believed"; }
        if (m{(.*)believe$}i) { return "${1}believed"; }
        if (m{(.*)believed$}i) { return "${1}believed"; }
        if (m{(.*)calls$}i) { return "${1}called"; }
        if (m{(.*)call$}i) { return "${1}called"; }
        if (m{(.*)called$}i) { return "${1}called"; }
        if (m{(.*)clothes$}i) { return "${1}clothed"; }
        if (m{(.*)clothe$}i) { return "${1}clothed"; }
        if (m{(.*)clothed$}i) { return "${1}clothed"; }
        if (m{(.*)considers$}i) { return "${1}considered"; }
        if (m{(.*)consider$}i) { return "${1}considered"; }
        if (m{(.*)considered$}i) { return "${1}considered"; }
        if (m{(.*)creates$}i) { return "${1}created"; }
        if (m{(.*)create$}i) { return "${1}created"; }
        if (m{(.*)created$}i) { return "${1}created"; }
        if (m{(.*)fits$}i) { return "${1}fitted"; }
        if (m{(.*)fit$}i) { return "${1}fitted"; }
        if (m{(.*)fitted$}i) { return "${1}fitted"; }
        if (m{(.*)includes$}i) { return "${1}included"; }
        if (m{(.*)include$}i) { return "${1}included"; }
        if (m{(.*)included$}i) { return "${1}included"; }
        if (m{(.*)melts$}i) { return "${1}melted"; }
        if (m{(.*)melt$}i) { return "${1}melted"; }
        if (m{(.*)melted$}i) { return "${1}melted"; }
        if (m{(.*)offers$}i) { return "${1}offered"; }
        if (m{(.*)offer$}i) { return "${1}offered"; }
        if (m{(.*)offered$}i) { return "${1}offered"; }
        if (m{(.*)opens$}i) { return "${1}opened"; }
        if (m{(.*)open$}i) { return "${1}opened"; }
        if (m{(.*)opened$}i) { return "${1}opened"; }
        if (m{(.*)plays$}i) { return "${1}played"; }
        if (m{(.*)play$}i) { return "${1}played"; }
        if (m{(.*)played$}i) { return "${1}played"; }
        if (m{(.*)serves$}i) { return "${1}served"; }
        if (m{(.*)serve$}i) { return "${1}served"; }
        if (m{(.*)served$}i) { return "${1}served"; }
        if (m{(.*)smells$}i) { return "${1}smelled"; }
        if (m{(.*)smell$}i) { return "${1}smelled"; }
        if (m{(.*)smelled$}i) { return "${1}smelled"; }
        if (m{(.*)spells$}i) { return "${1}spelled"; }
        if (m{(.*)spell$}i) { return "${1}spelled"; }
        if (m{(.*)spelled$}i) { return "${1}spelled"; }
        if (m{(.*)spills$}i) { return "${1}spilled"; }
        if (m{(.*)spill$}i) { return "${1}spilled"; }
        if (m{(.*)spilled$}i) { return "${1}spilled"; }
        if (m{(.*)starts$}i) { return "${1}started"; }
        if (m{(.*)start$}i) { return "${1}started"; }
        if (m{(.*)started$}i) { return "${1}started"; }
        if (m{(.*)turns$}i) { return "${1}turned"; }
        if (m{(.*)turn$}i) { return "${1}turned"; }
        if (m{(.*)turned$}i) { return "${1}turned"; }
        if (m{(.*)uses$}i) { return "${1}used"; }
        if (m{(.*)use$}i) { return "${1}used"; }
        if (m{(.*)used$}i) { return "${1}used"; }
        if (m{(.*)works$}i) { return "${1}worked"; }
        if (m{(.*)work$}i) { return "${1}worked"; }
        if (m{(.*)worked$}i) { return "${1}worked"; }
        if (m{(.*)aes$}i) { return "${1}aed"; }
        if (m{(.*)ae$}i) { return "${1}aed"; }
        if (m{(.*)aed$}i) { return "${1}aed"; }
        if (m{(.*[aeiou])ys$}i) { return "${1}yed"; }
        if (m{(.*[aeiou])y$}i) { return "${1}yed"; }
        if (m{(.*[aeiou])yed$}i) { return "${1}yed"; }
        if (m{(.*[aiy])nxes$}i) { return "${1}nxed"; }
        if (m{(.*[aiy])nx$}i) { return "${1}nxed"; }
        if (m{(.*[aiy])nxed$}i) { return "${1}nxed"; }
        if (m{(.*)ceps$}i) { return "${1}cepsed"; }
        if (m{(.*)ceps$}i) { return "${1}cepsed"; }
        if (m{(.*)cepsed$}i) { return "${1}cepsed"; }
        if (m{(.*[cs])hes$}i) { return "${1}hed"; }
        if (m{(.*[cs])h$}i) { return "${1}hed"; }
        if (m{(.*[cs])hed$}i) { return "${1}hed"; }
        if (m{(.*)oes$}i) { return "${1}oed"; }
        if (m{(.*)oe$}i) { return "${1}oed"; }
        if (m{(.*)oed$}i) { return "${1}oed"; }
        if (m{(.*)ieus$}i) { return "${1}ieued"; }
        if (m{(.*)ieu$}i) { return "${1}ieued"; }
        if (m{(.*)ieued$}i) { return "${1}ieued"; }
        if (m{(.*)eaus$}i) { return "${1}eaued"; }
        if (m{(.*)eau$}i) { return "${1}eaued"; }
        if (m{(.*)eaued$}i) { return "${1}eaued"; }
        if (m{(.*)sses$}i) { return "${1}ssed"; }
        if (m{(.*)ss$}i) { return "${1}ssed"; }
        if (m{(.*)ssed$}i) { return "${1}ssed"; }
        if (m{(.*)trixes$}i) { return "${1}trixed"; }
        if (m{(.*)trix$}i) { return "${1}trixed"; }
        if (m{(.*)trixed$}i) { return "${1}trixed"; }
        if (m{(.*)xes$}i) { return "${1}xed"; }
        if (m{(.*)x$}i) { return "${1}xed"; }
        if (m{(.*)xed$}i) { return "${1}xed"; }
        if (m{(.*)zzes$}i) { return "${1}zzed"; }
        if (m{(.*)zz$}i) { return "${1}zzed"; }
        if (m{(.*)zzed$}i) { return "${1}zzed"; }
        if (m{(.*)zes$}i) { return "${1}zed"; }
        if (m{(.*)ze$}i) { return "${1}zed"; }
        if (m{(.*)zed$}i) { return "${1}zed"; }
        if (m{(.*)ues$}i) { return "${1}ued"; }
        if (m{(.*)ue$}i) { return "${1}ued"; }
        if (m{(.*)ued$}i) { return "${1}ued"; }
        if (m{(.*)is$}i) { return "${1}ied"; }
        if (m{(.*)i$}i) { return "${1}ied"; }
        if (m{(.*)ied$}i) { return "${1}ied"; }
        if (m{(.*)ees$}i) { return "${1}eed"; }
        if (m{(.*)ee$}i) { return "${1}eed"; }
        if (m{(.*)eed$}i) { return "${1}eed"; }
        if (m{(.*)yes$}i) { return "${1}yed"; }
        if (m{(.*)ye$}i) { return "${1}yed"; }
        if (m{(.*)yed$}i) { return "${1}yed"; }
        if (m{(.*)ies$}i) { return "${1}ied"; }
        if (m{(.*)y$}i) { return "${1}ied"; }
        if (m{(.*)ied$}i) { return "${1}ied"; }
        if (m{(.*)ys$}i) { return "${1}yed"; }
        if (m{(.*)y$}i) { return "${1}yed"; }
        if (m{(.*)yed$}i) { return "${1}yed"; }
        if (m{(.*[^e])es$}i) { return "${1}ed"; }
        if (m{(.*[^e])e$}i) { return "${1}ed"; }
        if (m{(.*[^e])ed$}i) { return "${1}ed"; }
        if (m{(.*)ers$}i) { return "${1}ered"; }
        if (m{(.*)er$}i) { return "${1}ered"; }
        if (m{(.*)ered$}i) { return "${1}ered"; }
        default { return "_"; }
    }
}

sub is_plural {
    my ($word) = @_;
    return 1 if exists $is_plural->{$word};
    return 1 if exists $is_plural->{lc $word};
    return 1 if exists $is_plural->{tc $word};
    return 0 if exists $is_singular->{$word};
    return 0 if exists $is_singular->{lc $word};
    return 0 if exists $is_singular->{tc $word};
    for ($word) {
        if (m{\A(.+)n't$}i) { return 1 }
        if (m{\A(.*)shear$}i) { return 1 }
        if (m{\A(.*)bear$}i) { return 1 }
        if (m{\A(.*)bid$}i) { return 1 }
        if (m{\A(.*)buy$}i) { return 1 }
        if (m{\A(.*)cast$}i) { return 1 }
        if (m{\A(.*)clad$}i) { return 1 }
        if (m{\A(.*)cut$}i) { return 1 }
        if (m{\A(.*)do$}i) { return 1 }
        if (m{\A(.*)do$}i) { return 1 }
        if (m{\A(.*)draw$}i) { return 1 }
        if (m{\A(.*)feed$}i) { return 1 }
        if (m{\A(.*)freeze$}i) { return 1 }
        if (m{\A(.*)grow$}i) { return 1 }
        if (m{\A(.*)hang$}i) { return 1 }
        if (m{\A(.*)hear$}i) { return 1 }
        if (m{\A(.*)hide$}i) { return 1 }
        if (m{\A(.*)input$}i) { return 1 }
        if (m{\A(.*)knit$}i) { return 1 }
        if (m{\A(.*)lend$}i) { return 1 }
        if (m{\A(.*)let$}i) { return 1 }
        if (m{\A(.*)light$}i) { return 1 }
        if (m{\A(.*)make$}i) { return 1 }
        if (m{\A(.*)mow$}i) { return 1 }
        if (m{\A(.*)pay$}i) { return 1 }
        if (m{\A(.*)read$}i) { return 1 }
        if (m{\A(.*)say$}i) { return 1 }
        if (m{\A(.*)see$}i) { return 1 }
        if (m{\A(.*)sell$}i) { return 1 }
        if (m{\A(.*)send$}i) { return 1 }
        if (m{\A(.*)set$}i) { return 1 }
        if (m{\A(.*)sew$}i) { return 1 }
        if (m{\A(.*)shine$}i) { return 1 }
        if (m{\A(.*)shoot$}i) { return 1 }
        if (m{\A(.*)shut$}i) { return 1 }
        if (m{\A(.*)sleep$}i) { return 1 }
        if (m{\A(.*)sling$}i) { return 1 }
        if (m{\A(.*)spin$}i) { return 1 }
        if (m{\A(.*)split$}i) { return 1 }
        if (m{\A(.*)spread$}i) { return 1 }
        if (m{\A(.*)stick$}i) { return 1 }
        if (m{\A(.*)strike$}i) { return 1 }
        if (m{\A(.*)string$}i) { return 1 }
        if (m{\A(.*)take$}i) { return 1 }
        if (m{\A(.*)teach$}i) { return 1 }
        if (m{\A(.*)tell$}i) { return 1 }
        if (m{\A(.*)think$}i) { return 1 }
        if (m{\A(.*)throw$}i) { return 1 }
        if (m{\A(.*)try$}i) { return 1 }
        if (m{\A(.*)weave$}i) { return 1 }
        if (m{\A(.*)wed$}i) { return 1 }
        if (m{\A(.*)wet$}i) { return 1 }
        if (m{\A(.*)wind$}i) { return 1 }
        if (m{\A(.*)write$}i) { return 1 }
        if (m{\A(.*)add$}i) { return 1 }
        if (m{\A(.*)alight$}i) { return 1 }
        if (m{\A(.*)allow$}i) { return 1 }
        if (m{\A(.*)appear$}i) { return 1 }
        if (m{\A(.*)believe$}i) { return 1 }
        if (m{\A(.*)call$}i) { return 1 }
        if (m{\A(.*)clothe$}i) { return 1 }
        if (m{\A(.*)consider$}i) { return 1 }
        if (m{\A(.*)create$}i) { return 1 }
        if (m{\A(.*)fit$}i) { return 1 }
        if (m{\A(.*)include$}i) { return 1 }
        if (m{\A(.*)melt$}i) { return 1 }
        if (m{\A(.*)offer$}i) { return 1 }
        if (m{\A(.*)open$}i) { return 1 }
        if (m{\A(.*)play$}i) { return 1 }
        if (m{\A(.*)serve$}i) { return 1 }
        if (m{\A(.*)smell$}i) { return 1 }
        if (m{\A(.*)spell$}i) { return 1 }
        if (m{\A(.*)spill$}i) { return 1 }
        if (m{\A(.*)start$}i) { return 1 }
        if (m{\A(.*)turn$}i) { return 1 }
        if (m{\A(.*)use$}i) { return 1 }
        if (m{\A(.*)work$}i) { return 1 }
        if (m{\A(.+)ae$}i) { return 1 }
        if (m{\A(.+[aeiou])y$}i) { return 1 }
        if (m{\A(.+[aiy])nx$}i) { return 1 }
        if (m{\A(.+)ceps$}i) { return 1 }
        if (m{\A(.+[cs])h$}i) { return 1 }
        if (m{\A(.+)oe$}i) { return 1 }
        if (m{\A(.+)ieu$}i) { return 1 }
        if (m{\A(.+)eau$}i) { return 1 }
        if (m{\A(.+)ss$}i) { return 1 }
        if (m{\A(.+)trix$}i) { return 1 }
        if (m{\A(.+)x$}i) { return 1 }
        if (m{\A(.+)zz$}i) { return 1 }
        if (m{\A(.+)ze$}i) { return 1 }
        if (m{\A(.+)ue$}i) { return 1 }
        if (m{\A(.+)i$}i) { return 1 }
        if (m{\A(.+)ee$}i) { return 1 }
        if (m{\A(.+)ye$}i) { return 1 }
        if (m{\A(.+)y$}i) { return 1 }
        if (m{\A(.+)y$}i) { return 1 }
        if (m{\A(.+[^e])e$}i) { return 1 }
        if (m{\A(.+)er$}i) { return 1 }
        if (m{\A(.+[^s])$}i) { return 1 }
        default { return 0; }
    }
}

sub is_singular {
    my ($word) = @_;
    return 1 if exists $is_singular->{$word};
    return 1 if exists $is_singular->{lc $word};
    return 1 if exists $is_singular->{tc $word};
    return 0 if exists $is_plural->{$word};
    return 0 if exists $is_plural->{lc $word};
    return 0 if exists $is_plural->{tc $word};
    for ($word) {
        if (m{\A(.+)n't$}i) { return 1 }
        if (m{\A(.*)shears$}i) { return 1 }
        if (m{\A(.*)bears$}i) { return 1 }
        if (m{\A(.*)bids$}i) { return 1 }
        if (m{\A(.*)buys$}i) { return 1 }
        if (m{\A(.*)casts$}i) { return 1 }
        if (m{\A(.*)clads$}i) { return 1 }
        if (m{\A(.*)cuts$}i) { return 1 }
        if (m{\A(.*)does$}i) { return 1 }
        if (m{\A(.*)do$}i) { return 1 }
        if (m{\A(.*)draws$}i) { return 1 }
        if (m{\A(.*)feeds$}i) { return 1 }
        if (m{\A(.*)freezes$}i) { return 1 }
        if (m{\A(.*)grows$}i) { return 1 }
        if (m{\A(.*)hangs$}i) { return 1 }
        if (m{\A(.*)hears$}i) { return 1 }
        if (m{\A(.*)hides$}i) { return 1 }
        if (m{\A(.*)inputs$}i) { return 1 }
        if (m{\A(.*)knits$}i) { return 1 }
        if (m{\A(.*)lends$}i) { return 1 }
        if (m{\A(.*)lets$}i) { return 1 }
        if (m{\A(.*)lights$}i) { return 1 }
        if (m{\A(.*)makes$}i) { return 1 }
        if (m{\A(.*)mows$}i) { return 1 }
        if (m{\A(.*)pays$}i) { return 1 }
        if (m{\A(.*)reads$}i) { return 1 }
        if (m{\A(.*)says$}i) { return 1 }
        if (m{\A(.*)sees$}i) { return 1 }
        if (m{\A(.*)sells$}i) { return 1 }
        if (m{\A(.*)sends$}i) { return 1 }
        if (m{\A(.*)sets$}i) { return 1 }
        if (m{\A(.*)sews$}i) { return 1 }
        if (m{\A(.*)shines$}i) { return 1 }
        if (m{\A(.*)shoots$}i) { return 1 }
        if (m{\A(.*)shuts$}i) { return 1 }
        if (m{\A(.*)sleeps$}i) { return 1 }
        if (m{\A(.*)slings$}i) { return 1 }
        if (m{\A(.*)spins$}i) { return 1 }
        if (m{\A(.*)splits$}i) { return 1 }
        if (m{\A(.*)spreads$}i) { return 1 }
        if (m{\A(.*)sticks$}i) { return 1 }
        if (m{\A(.*)strikes$}i) { return 1 }
        if (m{\A(.*)strings$}i) { return 1 }
        if (m{\A(.*)takes$}i) { return 1 }
        if (m{\A(.*)teaches$}i) { return 1 }
        if (m{\A(.*)tells$}i) { return 1 }
        if (m{\A(.*)thinks$}i) { return 1 }
        if (m{\A(.*)throws$}i) { return 1 }
        if (m{\A(.*)tries$}i) { return 1 }
        if (m{\A(.*)weaves$}i) { return 1 }
        if (m{\A(.*)weds$}i) { return 1 }
        if (m{\A(.*)wets$}i) { return 1 }
        if (m{\A(.*)winds$}i) { return 1 }
        if (m{\A(.*)writes$}i) { return 1 }
        if (m{\A(.*)adds$}i) { return 1 }
        if (m{\A(.*)alights$}i) { return 1 }
        if (m{\A(.*)allows$}i) { return 1 }
        if (m{\A(.*)appears$}i) { return 1 }
        if (m{\A(.*)believes$}i) { return 1 }
        if (m{\A(.*)calls$}i) { return 1 }
        if (m{\A(.*)clothes$}i) { return 1 }
        if (m{\A(.*)considers$}i) { return 1 }
        if (m{\A(.*)creates$}i) { return 1 }
        if (m{\A(.*)fits$}i) { return 1 }
        if (m{\A(.*)includes$}i) { return 1 }
        if (m{\A(.*)melts$}i) { return 1 }
        if (m{\A(.*)offers$}i) { return 1 }
        if (m{\A(.*)opens$}i) { return 1 }
        if (m{\A(.*)plays$}i) { return 1 }
        if (m{\A(.*)serves$}i) { return 1 }
        if (m{\A(.*)smells$}i) { return 1 }
        if (m{\A(.*)spells$}i) { return 1 }
        if (m{\A(.*)spills$}i) { return 1 }
        if (m{\A(.*)starts$}i) { return 1 }
        if (m{\A(.*)turns$}i) { return 1 }
        if (m{\A(.*)uses$}i) { return 1 }
        if (m{\A(.*)works$}i) { return 1 }
        if (m{\A(.+)aes$}i) { return 1 }
        if (m{\A(.+[aeiou])ys$}i) { return 1 }
        if (m{\A(.+[aiy])nxes$}i) { return 1 }
        if (m{\A(.+)ceps$}i) { return 1 }
        if (m{\A(.+[cs])hes$}i) { return 1 }
        if (m{\A(.+)oes$}i) { return 1 }
        if (m{\A(.+)ieus$}i) { return 1 }
        if (m{\A(.+)eaus$}i) { return 1 }
        if (m{\A(.+)sses$}i) { return 1 }
        if (m{\A(.+)trixes$}i) { return 1 }
        if (m{\A(.+)xes$}i) { return 1 }
        if (m{\A(.+)zzes$}i) { return 1 }
        if (m{\A(.+)zes$}i) { return 1 }
        if (m{\A(.+)ues$}i) { return 1 }
        if (m{\A(.+)is$}i) { return 1 }
        if (m{\A(.+)ees$}i) { return 1 }
        if (m{\A(.+)yes$}i) { return 1 }
        if (m{\A(.+)ies$}i) { return 1 }
        if (m{\A(.+)ys$}i) { return 1 }
        if (m{\A(.+[^e])es$}i) { return 1 }
        if (m{\A(.+)ers$}i) { return 1 }
        if (m{\A(.+[^s])s$}i) { return 1 }
        return !is_plural($word);
    }
}

sub is_past {
    my ($word) = @_;
    return 1 if exists $is_past->{$word};
    return 1 if exists $is_past->{lc $word};
    return 1 if exists $is_past->{tc $word};
    for ($word) {
        if (m{\A(.*)sheared$}i) { return 1 }
        if (m{\A(.*)bore$}i) { return 1 }
        if (m{\A(.*)bade$}i) { return 1 }
        if (m{\A(.*)bought$}i) { return 1 }
        if (m{\A(.*)cast$}i) { return 1 }
        if (m{\A(.*)clad$}i) { return 1 }
        if (m{\A(.*)cut$}i) { return 1 }
        if (m{\A(.*)did$}i) { return 1 }
        if (m{\A(.*)did$}i) { return 1 }
        if (m{\A(.*)drew$}i) { return 1 }
        if (m{\A(.*)fed$}i) { return 1 }
        if (m{\A(.*)froze$}i) { return 1 }
        if (m{\A(.*)grew$}i) { return 1 }
        if (m{\A(.*)hung$}i) { return 1 }
        if (m{\A(.*)heard$}i) { return 1 }
        if (m{\A(.*)hid$}i) { return 1 }
        if (m{\A(.*)input$}i) { return 1 }
        if (m{\A(.*)knitted$}i) { return 1 }
        if (m{\A(.*)lent$}i) { return 1 }
        if (m{\A(.*)let$}i) { return 1 }
        if (m{\A(.*)lit$}i) { return 1 }
        if (m{\A(.*)made$}i) { return 1 }
        if (m{\A(.*)mowed$}i) { return 1 }
        if (m{\A(.*)paid$}i) { return 1 }
        if (m{\A(.*)read$}i) { return 1 }
        if (m{\A(.*)said$}i) { return 1 }
        if (m{\A(.*)saw$}i) { return 1 }
        if (m{\A(.*)sold$}i) { return 1 }
        if (m{\A(.*)sent$}i) { return 1 }
        if (m{\A(.*)set$}i) { return 1 }
        if (m{\A(.*)sewed$}i) { return 1 }
        if (m{\A(.*)shone$}i) { return 1 }
        if (m{\A(.*)shot$}i) { return 1 }
        if (m{\A(.*)shut$}i) { return 1 }
        if (m{\A(.*)slept$}i) { return 1 }
        if (m{\A(.*)slung$}i) { return 1 }
        if (m{\A(.*)spun$}i) { return 1 }
        if (m{\A(.*)split$}i) { return 1 }
        if (m{\A(.*)spread$}i) { return 1 }
        if (m{\A(.*)stuck$}i) { return 1 }
        if (m{\A(.*)struck$}i) { return 1 }
        if (m{\A(.*)strung$}i) { return 1 }
        if (m{\A(.*)took$}i) { return 1 }
        if (m{\A(.*)taught$}i) { return 1 }
        if (m{\A(.*)told$}i) { return 1 }
        if (m{\A(.*)thought$}i) { return 1 }
        if (m{\A(.*)threw$}i) { return 1 }
        if (m{\A(.*)tried$}i) { return 1 }
        if (m{\A(.*)wove$}i) { return 1 }
        if (m{\A(.*)wed$}i) { return 1 }
        if (m{\A(.*)wet$}i) { return 1 }
        if (m{\A(.*)wound$}i) { return 1 }
        if (m{\A(.*)wrote$}i) { return 1 }
        if (m{\A(.*)added$}i) { return 1 }
        if (m{\A(.*)alighted$}i) { return 1 }
        if (m{\A(.*)allowed$}i) { return 1 }
        if (m{\A(.*)appeared$}i) { return 1 }
        if (m{\A(.*)believed$}i) { return 1 }
        if (m{\A(.*)called$}i) { return 1 }
        if (m{\A(.*)clothed$}i) { return 1 }
        if (m{\A(.*)considered$}i) { return 1 }
        if (m{\A(.*)created$}i) { return 1 }
        if (m{\A(.*)fitted$}i) { return 1 }
        if (m{\A(.*)included$}i) { return 1 }
        if (m{\A(.*)melted$}i) { return 1 }
        if (m{\A(.*)offered$}i) { return 1 }
        if (m{\A(.*)opened$}i) { return 1 }
        if (m{\A(.*)played$}i) { return 1 }
        if (m{\A(.*)served$}i) { return 1 }
        if (m{\A(.*)smelled$}i) { return 1 }
        if (m{\A(.*)spelled$}i) { return 1 }
        if (m{\A(.*)spilled$}i) { return 1 }
        if (m{\A(.*)started$}i) { return 1 }
        if (m{\A(.*)turned$}i) { return 1 }
        if (m{\A(.*)used$}i) { return 1 }
        if (m{\A(.*)worked$}i) { return 1 }
        if (m{\A(.+)aed$}i) { return 1 }
        if (m{\A(.+[aeiou])yed$}i) { return 1 }
        if (m{\A(.+[aiy])nxed$}i) { return 1 }
        if (m{\A(.+)cepsed$}i) { return 1 }
        if (m{\A(.+[cs])hed$}i) { return 1 }
        if (m{\A(.+)oed$}i) { return 1 }
        if (m{\A(.+)ieued$}i) { return 1 }
        if (m{\A(.+)eaued$}i) { return 1 }
        if (m{\A(.+)ssed$}i) { return 1 }
        if (m{\A(.+)trixed$}i) { return 1 }
        if (m{\A(.+)xed$}i) { return 1 }
        if (m{\A(.+)zzed$}i) { return 1 }
        if (m{\A(.+)zed$}i) { return 1 }
        if (m{\A(.+)ued$}i) { return 1 }
        if (m{\A(.+)ied$}i) { return 1 }
        if (m{\A(.+)eed$}i) { return 1 }
        if (m{\A(.+)yed$}i) { return 1 }
        if (m{\A(.+)ied$}i) { return 1 }
        if (m{\A(.+)yed$}i) { return 1 }
        if (m{\A(.+[^e])ed$}i) { return 1 }
        if (m{\A(.+)ered$}i) { return 1 }
        default { return 0; }
    }
}

sub is_pres_part {
    my ($word) = @_;
    return 1 if exists $is_pres_part->{$word};
    return 1 if exists $is_pres_part->{lc $word};
    return 1 if exists $is_pres_part->{tc $word};
    for ($word) {
        if (m{\A(.*)shearing$}i) { return 1 }
        if (m{\A(.*)bearing$}i) { return 1 }
        if (m{\A(.*)bidding$}i) { return 1 }
        if (m{\A(.*)buying$}i) { return 1 }
        if (m{\A(.*)casting$}i) { return 1 }
        if (m{\A(.*)cladding$}i) { return 1 }
        if (m{\A(.*)cutting$}i) { return 1 }
        if (m{\A(.*)doing$}i) { return 1 }
        if (m{\A(.*)doing$}i) { return 1 }
        if (m{\A(.*)drawing$}i) { return 1 }
        if (m{\A(.*)feeding$}i) { return 1 }
        if (m{\A(.*)freezing$}i) { return 1 }
        if (m{\A(.*)growing$}i) { return 1 }
        if (m{\A(.*)hanging$}i) { return 1 }
        if (m{\A(.*)hearing$}i) { return 1 }
        if (m{\A(.*)hiding$}i) { return 1 }
        if (m{\A(.*)inputting$}i) { return 1 }
        if (m{\A(.*)knitting$}i) { return 1 }
        if (m{\A(.*)lending$}i) { return 1 }
        if (m{\A(.*)letting$}i) { return 1 }
        if (m{\A(.*)lighting$}i) { return 1 }
        if (m{\A(.*)making$}i) { return 1 }
        if (m{\A(.*)mowing$}i) { return 1 }
        if (m{\A(.*)paying$}i) { return 1 }
        if (m{\A(.*)reading$}i) { return 1 }
        if (m{\A(.*)saying$}i) { return 1 }
        if (m{\A(.*)seeing$}i) { return 1 }
        if (m{\A(.*)selling$}i) { return 1 }
        if (m{\A(.*)sending$}i) { return 1 }
        if (m{\A(.*)setting$}i) { return 1 }
        if (m{\A(.*)sewing$}i) { return 1 }
        if (m{\A(.*)shining$}i) { return 1 }
        if (m{\A(.*)shooting$}i) { return 1 }
        if (m{\A(.*)shutting$}i) { return 1 }
        if (m{\A(.*)sleeping$}i) { return 1 }
        if (m{\A(.*)slinging$}i) { return 1 }
        if (m{\A(.*)spinning$}i) { return 1 }
        if (m{\A(.*)splitting$}i) { return 1 }
        if (m{\A(.*)spreading$}i) { return 1 }
        if (m{\A(.*)sticking$}i) { return 1 }
        if (m{\A(.*)striking$}i) { return 1 }
        if (m{\A(.*)stringing$}i) { return 1 }
        if (m{\A(.*)taking$}i) { return 1 }
        if (m{\A(.*)teaching$}i) { return 1 }
        if (m{\A(.*)telling$}i) { return 1 }
        if (m{\A(.*)thinking$}i) { return 1 }
        if (m{\A(.*)throwing$}i) { return 1 }
        if (m{\A(.*)trying$}i) { return 1 }
        if (m{\A(.*)weaving$}i) { return 1 }
        if (m{\A(.*)wedding$}i) { return 1 }
        if (m{\A(.*)wetting$}i) { return 1 }
        if (m{\A(.*)winding$}i) { return 1 }
        if (m{\A(.*)writing$}i) { return 1 }
        if (m{\A(.*)adding$}i) { return 1 }
        if (m{\A(.*)alighting$}i) { return 1 }
        if (m{\A(.*)allowing$}i) { return 1 }
        if (m{\A(.*)appearing$}i) { return 1 }
        if (m{\A(.*)believing$}i) { return 1 }
        if (m{\A(.*)calling$}i) { return 1 }
        if (m{\A(.*)clothing$}i) { return 1 }
        if (m{\A(.*)considering$}i) { return 1 }
        if (m{\A(.*)creating$}i) { return 1 }
        if (m{\A(.*)fitting$}i) { return 1 }
        if (m{\A(.*)including$}i) { return 1 }
        if (m{\A(.*)melting$}i) { return 1 }
        if (m{\A(.*)offering$}i) { return 1 }
        if (m{\A(.*)opening$}i) { return 1 }
        if (m{\A(.*)playing$}i) { return 1 }
        if (m{\A(.*)serving$}i) { return 1 }
        if (m{\A(.*)smelling$}i) { return 1 }
        if (m{\A(.*)spelling$}i) { return 1 }
        if (m{\A(.*)spilling$}i) { return 1 }
        if (m{\A(.*)starting$}i) { return 1 }
        if (m{\A(.*)turning$}i) { return 1 }
        if (m{\A(.*)using$}i) { return 1 }
        if (m{\A(.*)working$}i) { return 1 }
        if (m{\A(.+)aeing$}i) { return 1 }
        if (m{\A(.+[aeiou])ying$}i) { return 1 }
        if (m{\A(.+[aiy])nxing$}i) { return 1 }
        if (m{\A(.+)cepsing$}i) { return 1 }
        if (m{\A(.+[cs])hing$}i) { return 1 }
        if (m{\A(.+)oeing$}i) { return 1 }
        if (m{\A(.+)ieuing$}i) { return 1 }
        if (m{\A(.+)eauing$}i) { return 1 }
        if (m{\A(.+)ssing$}i) { return 1 }
        if (m{\A(.+)trixing$}i) { return 1 }
        if (m{\A(.+)xing$}i) { return 1 }
        if (m{\A(.+)zzing$}i) { return 1 }
        if (m{\A(.+)zing$}i) { return 1 }
        if (m{\A(.+)ueing$}i) { return 1 }
        if (m{\A(.+)iing$}i) { return 1 }
        if (m{\A(.+)eeing$}i) { return 1 }
        if (m{\A(.+)yeing$}i) { return 1 }
        if (m{\A(.+)ying$}i) { return 1 }
        if (m{\A(.+)ying$}i) { return 1 }
        if (m{\A(.+[^e])ing$}i) { return 1 }
        if (m{\A(.+)ering$}i) { return 1 }
        default { return 0; }
    }
}

sub is_past_part {
    my ($word) = @_;
    return 1 if exists $is_past_part->{$word};
    return 1 if exists $is_past_part->{lc $word};
    return 1 if exists $is_past_part->{tc $word};
    for ($word) {
        if (m{\A(.*)shorn$}i) { return 1 }
        if (m{\A(.*)borne$}i) { return 1 }
        if (m{\A(.*)bidden$}i) { return 1 }
        if (m{\A(.*)bought$}i) { return 1 }
        if (m{\A(.*)cast$}i) { return 1 }
        if (m{\A(.*)clad$}i) { return 1 }
        if (m{\A(.*)cut$}i) { return 1 }
        if (m{\A(.*)done$}i) { return 1 }
        if (m{\A(.*)done$}i) { return 1 }
        if (m{\A(.*)drawn$}i) { return 1 }
        if (m{\A(.*)fed$}i) { return 1 }
        if (m{\A(.*)frozen$}i) { return 1 }
        if (m{\A(.*)grown$}i) { return 1 }
        if (m{\A(.*)hung$}i) { return 1 }
        if (m{\A(.*)heard$}i) { return 1 }
        if (m{\A(.*)hidden$}i) { return 1 }
        if (m{\A(.*)input$}i) { return 1 }
        if (m{\A(.*)knitted$}i) { return 1 }
        if (m{\A(.*)lent$}i) { return 1 }
        if (m{\A(.*)let$}i) { return 1 }
        if (m{\A(.*)lit$}i) { return 1 }
        if (m{\A(.*)made$}i) { return 1 }
        if (m{\A(.*)mown$}i) { return 1 }
        if (m{\A(.*)paid$}i) { return 1 }
        if (m{\A(.*)read$}i) { return 1 }
        if (m{\A(.*)said$}i) { return 1 }
        if (m{\A(.*)seen$}i) { return 1 }
        if (m{\A(.*)sold$}i) { return 1 }
        if (m{\A(.*)sent$}i) { return 1 }
        if (m{\A(.*)set$}i) { return 1 }
        if (m{\A(.*)sewn$}i) { return 1 }
        if (m{\A(.*)shone$}i) { return 1 }
        if (m{\A(.*)shot$}i) { return 1 }
        if (m{\A(.*)shut$}i) { return 1 }
        if (m{\A(.*)slept$}i) { return 1 }
        if (m{\A(.*)slung$}i) { return 1 }
        if (m{\A(.*)spun$}i) { return 1 }
        if (m{\A(.*)split$}i) { return 1 }
        if (m{\A(.*)spread$}i) { return 1 }
        if (m{\A(.*)stuck$}i) { return 1 }
        if (m{\A(.*)struck$}i) { return 1 }
        if (m{\A(.*)strung$}i) { return 1 }
        if (m{\A(.*)taken$}i) { return 1 }
        if (m{\A(.*)taught$}i) { return 1 }
        if (m{\A(.*)told$}i) { return 1 }
        if (m{\A(.*)thought$}i) { return 1 }
        if (m{\A(.*)thrown$}i) { return 1 }
        if (m{\A(.*)tried$}i) { return 1 }
        if (m{\A(.*)woven$}i) { return 1 }
        if (m{\A(.*)wed$}i) { return 1 }
        if (m{\A(.*)wetted$}i) { return 1 }
        if (m{\A(.*)wound$}i) { return 1 }
        if (m{\A(.*)written$}i) { return 1 }
        if (m{\A(.*)added$}i) { return 1 }
        if (m{\A(.*)alighted$}i) { return 1 }
        if (m{\A(.*)allowed$}i) { return 1 }
        if (m{\A(.*)appeared$}i) { return 1 }
        if (m{\A(.*)believed$}i) { return 1 }
        if (m{\A(.*)called$}i) { return 1 }
        if (m{\A(.*)clothed$}i) { return 1 }
        if (m{\A(.*)considered$}i) { return 1 }
        if (m{\A(.*)created$}i) { return 1 }
        if (m{\A(.*)fitted$}i) { return 1 }
        if (m{\A(.*)included$}i) { return 1 }
        if (m{\A(.*)melted$}i) { return 1 }
        if (m{\A(.*)offered$}i) { return 1 }
        if (m{\A(.*)opened$}i) { return 1 }
        if (m{\A(.*)played$}i) { return 1 }
        if (m{\A(.*)served$}i) { return 1 }
        if (m{\A(.*)smelled$}i) { return 1 }
        if (m{\A(.*)spelled$}i) { return 1 }
        if (m{\A(.*)spilled$}i) { return 1 }
        if (m{\A(.*)started$}i) { return 1 }
        if (m{\A(.*)turned$}i) { return 1 }
        if (m{\A(.*)used$}i) { return 1 }
        if (m{\A(.*)worked$}i) { return 1 }
        if (m{\A(.+)aed$}i) { return 1 }
        if (m{\A(.+[aeiou])yed$}i) { return 1 }
        if (m{\A(.+[aiy])nxed$}i) { return 1 }
        if (m{\A(.+)cepsed$}i) { return 1 }
        if (m{\A(.+[cs])hed$}i) { return 1 }
        if (m{\A(.+)oed$}i) { return 1 }
        if (m{\A(.+)ieued$}i) { return 1 }
        if (m{\A(.+)eaued$}i) { return 1 }
        if (m{\A(.+)ssed$}i) { return 1 }
        if (m{\A(.+)trixed$}i) { return 1 }
        if (m{\A(.+)xed$}i) { return 1 }
        if (m{\A(.+)zzed$}i) { return 1 }
        if (m{\A(.+)zed$}i) { return 1 }
        if (m{\A(.+)ued$}i) { return 1 }
        if (m{\A(.+)ied$}i) { return 1 }
        if (m{\A(.+)eed$}i) { return 1 }
        if (m{\A(.+)yed$}i) { return 1 }
        if (m{\A(.+)ied$}i) { return 1 }
        if (m{\A(.+)yed$}i) { return 1 }
        if (m{\A(.+[^e])ed$}i) { return 1 }
        if (m{\A(.+)ered$}i) { return 1 }
        default { return 0; }
    }
}

1;
