Skip to content

rafael-santiago/vigcrack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vigcrack

An old trinket from 2005/2003.

WARNING: It is just a "cryptotoy" (just for fun) do not use it to protect your sensible data.

Vigcrack is a cryptanalysis tool which can help on crack Vigenère ciphertexts. This tool is not strictly based on Babbage's/Kasiski's approach. In fact, here is not performed frequency analysis. Here what we get is a more brainy Hangman which does not hang any innocent stick figure...

I have developed this tool during my first reading of The Code Book from Simon Singh. Here you got a "reissue" from this crypto-tool.

How to clone this repo?

This repo has some submodules, so after clonning it you need to initialize them. For doing it use the following way:

babbage@DiffEngine:~/src/vigcrack# git submodule update --init

How to build it?

For building this software you need to use Hefesto. After following the steps to get Hefesto installed on your system, you should move to the vigcrack's src sub-directory and call hefesto:

babbage@DiffEngine:~/src/vigcrack# cd src
babbage@DiffEngine:~/src/vigcrack/src# hefesto

After invoking the hefesto command you should get the Vigcrack binary inside the sub-directory bin.

Can I install it?

Yes, for installing:

babbage@DiffEngine:~/src/vigcrack# hefesto --install

For uninstalling:

babbage@DiffEngine:~/src/vigcrack# hefesto --uninstall

How to use it?

The Vigcrack is a software which introduces several operation modes. All of them related with the cryptanalysis of the Vigenère cipher.

In order to introduce you these operation modes I will use the basic workflow which is based on the necessity of cracking some encrypted data. So, let's use our good and old "crypto-actors": Alice, Bob and Eve. Spoiler: today Eve will win! Come on, I think that she deserves, look.

Let's suppose that Bob sent to Alice the following message:

YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGAR
VJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTM
EYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTM
OFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPH
BNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWL
IPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUT
GNL

The Sybil

Eve is a "Network geek" so she has been listened the Alice/Bob's wire intercepting the previous data. Eve knows that Alice and Bob are pretty naive. So after trying to crack the cryptogram using simple substitutions without success, she start assuming the Vigenère cipher usage (due to the frequency distribution). By the way, Eve has installed a nice software (...) The first thing that our sympathetic attacker did with this tool was query a smart Sybil:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --sybil \
> --file-path=alice-bob-crap.txt --min-pattern-len=3 --max-pattern-len=3

The Vigcrack's sybil returned the following supressed content to Eve:

INFO: 711 bytes loaded from alice-bob-crap.txt.

YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQF
SQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMI
FCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHO
VUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXG
RAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAV
LZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL

INFO: Now guessing the key length... please wait...

*** Found patterns [nearest - farthest]:

	The pattern GCI was found 9 letters far from another GCI
	The pattern RRQ was found 9 letters far from another RRQ
	The pattern RQT was found 9 letters far from another RQT
	The pattern QTM was found 9 letters far from another QTM
	The pattern TMO was found 9 letters far from another TMO
	The pattern MOF was found 9 letters far from another MOF
	The pattern FCC was found 18 letters far from another FCC
	The pattern CCP was found 18 letters far from another CCP
	The pattern OPA was found 18 letters far from another OPA
	The pattern LZA was found 18 letters far from another LZA
	The pattern NFG was found 22 letters far from another NFG
	The pattern UPU was found 27 letters far from another UPU
	The pattern XHC was found 27 letters far from another XHC
(...)
	The pattern LPH was found 495 letters far from another LPH
	The pattern VAS was found 513 letters far from another VAS
	The pattern LPH was found 522 letters far from another LPH
	The pattern PHJ was found 522 letters far from another PHJ
	The pattern GNV was found 560 letters far from another GNV

*** Probable key lengths [most - least]: 3, 9, 2, 6, 18, 4, 5, 11, 12, 15, 8, 19, 7, 10, 13, 16, 20, 14.

Why Eve ran the previous command? Why that pattern lengths?

Well, the Vigcrack's sybil can predict the length of the keyword just verifying some characteristics onto the cryptogram. Its Sybil tell us at the end of the analysis report the most probable keyword lengths (sorted by relevance). The reason for using the options --min-pattern-len=3 and --max-pattern-len=3 is because Eve is smart. The keyword guessing is done by found patterns along the cryptogram. Eve supposed that the plaintext was in English and she knows that trigrams are pretty common in a English text. Things like THE, AND, SHE, HIS, HER, etc (no, etc not so).

At the end of the report the Sybil has shown to Eve that there is a strong possibility of a 3-letter keyword usage.

Now, Eve started playing a Geek Hangman ;) For doing it she used another suggestive application mode called hangman.

The Hangman

She picked the first trigram reported (GCI) and made an assumption about it represent a THE when decrypted. So translating it into commands would be:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=GCI\
> --plaintext=THE --key-len=3 --file-path=alice-bob-crap.txt --max-attempts=30

Now explaining the Eve's intentions. Eve is assuming GCI -> THE and also assuming that a keyword of length 3 was used. The --file-path indicates the cryptogram's path and the option --max-attempts=30 will only decrypt the first 30 letters from the file. This command spitted the following report to Eve:

*** The keyword was completely re-used 102 times before.
    The keyword's letter at position #1 was used to encrypt it.
    The effective keyword to encrypt the pattern was 'NVE'.

*** Decrypt attempts assuming that 'GCI' leads to 'THE'...

	K	C	P
	__________________
	N	Y	l
	V	L	q
	E	P	l
	N	H	u
	V	J	o
	E	V	r
	N	G	t
	V	I	n
	E	O	k
	N	V	i
	V	H	m
	E	W	s
	N	A	n
	V	D	i
	E	R	n
	N	G	t
	V	V	a
	E	I	e
	N	E	r
	V	H	m
	E	R	n
	N	J	w
	V	P	u
	E	T	p
	N	U	h
	V	C	h
	E	Y	u
	N	D	q
	V	S	x
	E	E	a
	__________________

The Hangman is interactive and you can get lots of fun when you start making right assumptions.

However, Eve have seen that her guessing did not produced a legible output. So, she returned to the pattern listing and started trying other ones. After several attempts she have decided to use another application mode called brutus.

The Brutus

Well, in fact the brutus mode does what the hangman does but automated. Then, Eve have emitted the following command into her terminal:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --brutus --file-path=alice-bob-crap.txt\
> --plaintexts=the,and,ing,ent,ion,nth,ter,int,oft,tha,ere,tio,her,fth,eth,ati,hat,ate,sth,est\
> --key-len=3 > report.txt

With this command brutus tries to decipher any found pattern to the informed plaintexts assuming the passed key length. The informed plaintexts in this command sample are the most common trigrams present in English texts.

Eve got the following data into report.txt file:

*** Assuming GCI -> THE (keyword = "NFW")

	K = NFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFW
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = lgtueztdsicanyvtqmrcvwkxhxcqnivaqdaigpuxribbrivwpeztfxpyihusjsivqbbkqtqlxporqrsbvhviwzldihxvqwpmvexaakjhpdkgdoujjhabeeqnowmiehdawdzsjyxrwbhkyxkmywacyyivsjqccslpqikgzhkyslhdpbcapaxrnqvnslpqikgzhkyslhdpbcapaxrnqvnhsdhjdtznbptzxxqvbernlyghilagpkmcglnrsifscvqvagpkxttibasjqscvpnysgkignwlgisfrnqcansdjmcgdnnftimtxmcdibfrtxmawwhrqtubdyoxkftnqnbxwbvtkajhmtmvdoqbamhmvdoqbaecbcthwawrtvilgdncsipsbgbqervqsggdnwpclscgkjjoclawqerpjtbphypjpikbvnqcmkhdkxigtuwrnlrtypjpikbvnqcmkhdkxigtuwrnlrtypjpikbvnqcmkhdkxigtuwrnlrtypjpikbvnqcmkhdkxigtuexwfrzawdwpgbesaswkawlauczrzkdksivwbwcnlyzpwfpltxvikawpkdkixobjgmcdqnuwwcxdqltizjrileeigdnncdrhdfwwpxtipppgxjileeigdnncdrhdfwwpxtipppgxjileeigdnncdrhdfwwpxtipppgxjileeigdnncdrhdfwwpxtip

*** Assuming RRQ -> THE (keyword = "OCQ")

	K = OCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQ
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = kjzthfsgyhfgmbbstsqfbvndgaipqoudwcdofsawuoaexhycohfsidobogxyivouthanwstrwsuqtxrebgyovcrclnwywvssuhdzdqikvcnmcraimnzekdttnzshhncdcccyibdqzhgnewnsxzgbbehyyitibvrotojjfgneroncshbdvzaxmtbmvrotojjfgneroncshbdvzaxmtbmkyckpcwfmevscdwtbahxmoefkokdmonsbjrmuyhiybywudmondswoadyitybyvmbyfnofqckjorixmtizqycmsbjjmqlslssasbgoaixsaszzcguwsxhcbuwnlsqwmedvebsngiksspbcrwadsgpbcrwadkbeiskczzxsyokjjmfyhsyajhphxutyfjjmzvboybjqimubogvtkqspsevgbvisojebmtilnncndhjztzxmoxsbvisojebmtilnncndhjztzxmoxsbvisojebmtilnncndhjztzxmoxsbvisojebmtilnncndhjzthdvixydcczvfekrdyvngvogtffqcqcnyhycazimoeyscesrsabhngvsqcnowrhijsbgwmxcvfdctrslfiuokhkhjjmqicuncicvsdslvosmwmokhkhjjmqicuncicvsdslvosmwmokhkhjjmqicuncicvsdslvosmwmokhkhjjmqicuncicvsdslv

*** Assuming RQT -> THE (keyword = "RLC")

	K = RLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLC
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = hanqytpxmewujsppkgnwpserdrwmhcrukzuccjotlcxvlepqlytpzrlscdomfmcrkvxekpkftjinklovpdpcstfzcbtpksjgryrwuefbjzeaziofdbwvyakhkqgeybzuqztmfsrnqvdesteguquyssepmfkwymflkcgatdesofbzjvyujwrljkpjmflkcgatdesofbzjvyujwrljkpjbmzbdzntjvjptrtkpxyljfscbchualegyafjlmezmypkrualerpncxumfkmypjjsmcecchqhacozljkwwhmzdgyaxjhzpcgprgyxcxzlprgwqqdlkpovzsitezphkjvrsvppeufbgpgpzikxugdgpzikxuyyvwpbqwqlppchaxjwmejmxavmylrkmcaxjqjyfmyaefdiyfuskynjdpvjdsjfjcgvpjkwiebzereanqqljflpsjfjcgvpjkwiebzereanqqljflpsjfjcgvpjkwiebzereanqqljflpsjfjcgvpjkwiebzereanqyrszlvuqzqjcvyoumseusfuqwtntezemepqxqwjfsvjqbjfprpeeusjezectivfagyxkjoqswrzkfpctflchyyeaxjhwzlbzzqsjrpcjljatdchyyeaxjhwzlbzzqsjrpcjljatdchyyeaxjhwzlbzzqsjrpcjljatdchyyeaxjhwzlbzzqsjrpcj

*** Assuming QTM -> THE (keyword = "DOS")

	K = DOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOS
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = vxxevdduwstexpzdhqbtzgbbrogaemfrunrmqgyhimlsvsmazvddwbzpmrlwtjmfhflbudhphgsbhvcszrmmgqpnzlhmuggqfvbkrotytnbknfytalksiohrynqsvlnranqwtpbbnfrbchbqinempcsmwthgmjpzhmuxdrbccclngfmrtkovxhzxjpzhmuxdrbccclngfmrtkovxhzxywnynnkdxstdqbhhzlvvxccqymvrkzbqmxpxiwswwmmufrkzbbdkmlrwthwmmtxpwqbmqeavxmcwvxhgkewnaqmxhxejdzqdoqmumlwvdoqknariudlfnpshbjdeuxsbgszdbetyqddznfulrqrdznfulrimsgdyaknvdmmvxhxtwsgwlxfavvfhwqxhxntmcwmxotasmceghibgndstrpttgmuszxhgwblnbbsxxenvxcvdpttgmuszxhgwblnbbsxxenvxcvdpttgmuszxhgwblnbbsxxenvxcvdpttgmuszxhgwblnbbsxxevbgwvjranntqsicrwgbegceetdbqonbwsmalngxccjgapgpdozsbeggonbmhfftxqmuuxlagtbnhpdzdtimvvisxhxegnilnwaggbdztzgkhamvvisxhxegnilnwaggbdztzgkhamvvisxhxegnilnwaggbdztzgkhamvvisxhxegnilnwaggbdzt

*** Assuming TMO -> THE (keyword = "QAV")

	K = QAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAV
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = ilurjaqitfhbkdwqvnohwtpyecdnsjsfrafjduvuwjygsfaxmjaqkymdjeztgxjsvcyprqvmuupovspgweajtemaniuartunsjyxflgmqaphatvgoixgfbvolbnfjiafxaetgdyobcepzupnvbbzdzfatgvdzxmmvjhlaepzpqiauczfqxcskvwkxmmvjhlaepzpqiauczfqxcskvwkmtamkayakgqqeyuvwyjskqzdmjifhmpnzlmkwtfktzarsfhmpyqyjyftgvtzaqkdtdpjdsxiljpkskvdxstaonzleksgqnnqcnzijyksqcnxbxewrqzcadpupgqsrkgytgwqpbgmnqrwatryfnerwatryffzgdqmxxbsqajilekhtfutylcnjssvtdlekbqzqtzllgopzqbtvfoukqgqedqgujhgwkvdjpiapyflurbskqsqdqgujhgwkvdjpiapyflurbskqsqdqgujhgwkvdjpiapyflurbskqsqdqgujhgwkvdjpiapyflurjytkswfxabqdgfpfttpbtqbrhaoelaptfaxybdkqzwuxcumqcwfpbtulapjutcglnzirkzxthyavmqnagwjijffleksdawiakxtuyqnqmuhuojijffleksdawiakxtuyqnqmuhuojijffleksdawiakxtuyqnqmuhuojijffleksdawiakxtuyqnq

*** Assuming MOF -> THE (keyword = "TZH")

	K = TZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZH
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = fmiokonjhcipheknwblikqqmbdrktxpgfxgxavjrxxvhgcbljkonlmjexbahdyxpwqvqfnwarvdlwgmhkbbxqfaxowrbfqvbpkmugzdnexqvxujdpwuhtywcicbckwxglxfhdemlcqbqnrqbscpwencbhdwrwyajwxemobqnmrwxvqwgeudghwkhyajwxemobqnmrwxvqwgeudghwkhnhxnyxzohhenfmrwkvkghrnanxfgvjqbwmahxhclhwbfpgvjqmnzxvghdwhwbehehaqxatlfmxmlghwruthxpbwmshtunobndbwjxvlgndbuclbxfnaqxedrquntfhhmqhknqpdnbnskxufvgbbskxufvgtwhrnnlucgnbxfmshihcvhvmqkkgpwhamshcewrhwmzdpdwrpqwtlvynhebeedvxehkhwrgqwxqmcmiocghrgneedvxehkhwrgqwxqmcmiocghrgneedvxehkhwrgqwxqmcmiocghrgneedvxehkhwrgqwxqmcmiokmqlgtglxceahtmghqqpqrpoiolfzxqhcblvcrhrntvlzvandkcqpqvzxqxruqdmbwjfhalqimxwanoodxxfktcmshtrxxwxllqvmnoejvvrpxfktcmshtrxxwxllqvmnoejvvrpxfktcmshtrxxwxllqvmnoejvvrpxfktcmshtrxxwxllqvmnoe

(...)
*** Assuming ZAS -> EST (keyword = "SBF")

	K = SBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBF
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = gkkpiqohjdgricmoudmgmroocbtlrzqehyezbtlsvzwfidznkiqojokczcyjewzquswohoucstfmuinfmczzrdcymyszhrtdqiovebelgyoxyslenyvfvzuejaddiyyenydjecomascopsodtarxcpdzjeutxwckuzfkqcopnpyytsxegvbiiumiwckuzfkqcopnpyytsxegvbiiumiljylayxqifgodosumwiiippblzgexkodxkcivjdjjxzhqexkoooxzwejeujxzgicjbozbrngkznjiiutvrjyndxkuirwomdobdxhzwjiobdvancvhoysycfsoworhiforfmooreldoqmyshwedcqmyshwevxftolnvaiozzgkuigjdtjwksliiqujbkuiagxpjxkbenfxprruvmtaofgccgetzffmiuthoyyoodkkpaiipiocgetzffmiuthoyyoodkkpaiipiocgetzffmiuthoyyoodkkpaiipiocgetzffmiuthoyyoodkkpiorjiuenyagbfvnejrorrprpgqmdbyojdznwatipputnatcobmdorrtbyozsssekdxhhiynrgoyucomqevzgivdkuirtyvyyjnrtoomgktxsnzgivdkuirtyvyyjnrtoomgktxsnzgivdkuirtyvyyjnrtoomgktxsnzgivdkuirtyvyyjnrtoomg

*** Assuming FSQ -> EST (keyword = "DZA")

	K = DZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZA
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = vmpekvdjosiwxerdwibirgqtrdyatefgmngeqvqhxelhnsbszkvdltzeeraotyefwxlqmdwhhvkbwnchrrbegfhnodhbmgvifktkggtnlnqcnuqtpdkhaowjyciskdngsnfotetbcxrquhqiicwmeusbotwymyhzweumvrqucrdnvxmglkdnxwrxyhzweumvrqucrdnvxmglkdnxwrxnonnfnzvxhldfthwrlknxruqnevgczqimmhxxoslombmfgczqtdzelgotwomblxeoqqeqtsvmeclnxwyktonpimmzxtbdoiddimjellnddikcsrxmdaxnekhqbdtmxhtghrdqwtnidsrnumlgirsrnumlgamhydnskcndbevmzxiosvolmxaknfwoqmzxclmrommgtpkmrwgwabvfdhlreltveuhrxwywqdnqtsmpecnxrndeltveuhrxwywqdnqtsmpecnxrndeltveuhrxwywqdnqtsmpecnxrndeltveuhrxwywqdnqtsmpektglnjgsnclqhacgogqwgrweivbfgnqosbslcyxrujvspvhddrsqwgvgnqehuxtmimjmxasgitnwhdovtxevkasmzxtynxdnlsgvtdolzvchpevkasmzxtynxdnlsgvtdolzvchpevkasmzxtynxdnlsgvtdolzvchpevkasmzxtynxdnlsgvtdol

*** Assuming LPH -> EST (keyword = "MTD")

	K = MTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTD
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = msmvqsupljotokoucfsooxwqijvrzbwmjembhbnydbcnkjhpqqsurqqkbiglkebwcucwjuceybhscktnoihbxleeuayhjxbfwqqbmdktiewzeankvabnxfcgpifjqaempellkkqsiuiwrywfzitdkrjhlkcvdeeqcblssiwrtxaebudmibjkocooeeqcblssiwrtxaebudmibjkocootletcefsoniulqycocqkoxrhtbmmzqwfdseodljrldhjwmzqwqufbcmlkcldhioklhwbhzpmsbtrkocvbzlevfdswozyuufujfdpbcrkujfbipidjuguekhywyuzjonqxnouwtktfuyoeajcmfiyoeajcmxdnvutpbikuhbmswooljblcsurqkwclhswoiidxldsdkvhdxtxcxsbcuniikikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvqqxrkampeiihnxtmlxwtxxtvossldewljhpcivoxrabpgbeujojwtxbdewbyauksfdpjogpxoqeceuuskdbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquui

*** Assuming LPH -> EST (keyword = "MTD")

	K = MTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTD
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = msmvqsupljotokoucfsooxwqijvrzbwmjembhbnydbcnkjhpqqsurqqkbiglkebwcucwjuceybhscktnoihbxleeuayhjxbfwqqbmdktiewzeankvabnxfcgpifjqaempellkkqsiuiwrywfzitdkrjhlkcvdeeqcblssiwrtxaebudmibjkocooeeqcblssiwrtxaebudmibjkocootletcefsoniulqycocqkoxrhtbmmzqwfdseodljrldhjwmzqwqufbcmlkcldhioklhwbhzpmsbtrkocvbzlevfdswozyuufujfdpbcrkujfbipidjuguekhywyuzjonqxnouwtktfuyoeajcmfiyoeajcmxdnvutpbikuhbmswooljblcsurqkwclhswoiidxldsdkvhdxtxcxsbcuniikikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvqqxrkampeiihnxtmlxwtxxtvossldewljhpcivoxrabpgbeujojwtxbdewbyauksfdpjogpxoqeceuuskdbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquui

*** Assuming LPH -> EST (keyword = "MTD")

	K = MTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTD
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = msmvqsupljotokoucfsooxwqijvrzbwmjembhbnydbcnkjhpqqsurqqkbiglkebwcucwjuceybhscktnoihbxleeuayhjxbfwqqbmdktiewzeankvabnxfcgpifjqaempellkkqsiuiwrywfzitdkrjhlkcvdeeqcblssiwrtxaebudmibjkocooeeqcblssiwrtxaebudmibjkocootletcefsoniulqycocqkoxrhtbmmzqwfdseodljrldhjwmzqwqufbcmlkcldhioklhwbhzpmsbtrkocvbzlevfdswozyuufujfdpbcrkujfbipidjuguekhywyuzjonqxnouwtktfuyoeajcmfiyoeajcmxdnvutpbikuhbmswooljblcsurqkwclhswoiidxldsdkvhdxtxcxsbcuniikikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvqqxrkampeiihnxtmlxwtxxtvossldewljhpcivoxrabpgbeujojwtxbdewbyauksfdpjogpxoqeceuuskdbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquui

*** Assuming VAS -> EST (keyword = "JSB")

	K = JSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSB
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = ptoyruxqnmpvrlqxdhvpqaxslkxuadznlhndkcpbedfommirtruxsstldlhnnfdzdwfxlxdgbcjvdmwoqlidamghvcbilachzrsenfnukhxbhbpnwceozidisjhmrchnrhmnnlsvjwlxtbxhcjvgltminndxgfgtddotulxtwychcwgnkekmrdqrfgtddotulxtwychcwgnkekmrdqrunhuehgurokxmsbdqfrmrytkudpnbtxhgtgrenmsngilznbtxsxgdfnnndngikrlnkxdkarptdwsmrdxeanhwhgtyraaxvhxkhgqdfsmxkhejrlelxhwhljbxaxalrosaoqxxvnuhxzqhblfnhlzqhblfnzgoxxurejmxidptyrpnmcnftwurmzdnktyrjkgyngtfnwjgyvadzvcexokllkncdooqrdxqxchxsmtoyjmrymxlkncdooqrdxqxchxsmtoyjmrymxlkncdooqrdxqxchxsmtoyjmrymxlkncdooqrdxqxchxsmtoyrsasmdnrhjkkozwnnaxvayvypuvmfhxnmirfjxrytdcrjcgxkqmxvacfhxdbbwnthgqlrhrapshdgxvunedprzmtyraxhechsracsxvktcbbwdprzmtyraxhechsracsxvktcbbwdprzmtyraxhechsracsxvktcbbwdprzmtyraxhechsracsxvk

*** Assuming LPH -> EST (keyword = "MTD")

	K = MTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTD
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = msmvqsupljotokoucfsooxwqijvrzbwmjembhbnydbcnkjhpqqsurqqkbiglkebwcucwjuceybhscktnoihbxleeuayhjxbfwqqbmdktiewzeankvabnxfcgpifjqaempellkkqsiuiwrywfzitdkrjhlkcvdeeqcblssiwrtxaebudmibjkocooeeqcblssiwrtxaebudmibjkocootletcefsoniulqycocqkoxrhtbmmzqwfdseodljrldhjwmzqwqufbcmlkcldhioklhwbhzpmsbtrkocvbzlevfdswozyuufujfdpbcrkujfbipidjuguekhywyuzjonqxnouwtktfuyoeajcmfiyoeajcmxdnvutpbikuhbmswooljblcsurqkwclhswoiidxldsdkvhdxtxcxsbcuniikikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvqqxrkampeiihnxtmlxwtxxtvossldewljhpcivoxrabpgbeujojwtxbdewbyauksfdpjogpxoqeceuuskdbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquui

*** Assuming PHJ -> EST (keyword = "LKP")

	K = LKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKP
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = nbawzgvyzkxhptcvlttxcyfejsjsipxvxfvpikbzmpdwykqdrzgvaertpjpzlnpxlidfxvlszkvtlyuwcjqpyusfdozqxyktxzecvrlcwffnfjbleocwlgluqrtkzofvdfuzltetrijffzftarhetfkqzlljensrlpmbgjffugofkievwcsyplcpnsrlpmbgjffugofkievwcsyplcpczfcqfogpwwvuezlcdzypgficpnvnrftebspmzkazeqxxvnrfevopdvzllzeqwptzifpiidnbpuaypljcizfetebkpimvdtvsteypdayvstcrdjmxvpiftvzfmvixpweywcvfhlctvhcfjxdvtjhcfjxdvlewjvcdcryvqpnbkpxzkkzdbiszyxlzibkprwegzebrleveghylltkqvwwjtwlkpmwcpljofoffekbawrypgyvtwlkpmwcpljofoffekbawrypgyvtwlkpmwcpljofoffekbawrypgyvtwlkpmwcpljofoffekbawzeyaybvdfrwiwluvzyfhyghwxgturffzkqddrjpgfbkdhksvsckfhykrffpzjilbteyxppdyxeflsvdglmpnzlkbkpijfmofadykevdwrknzepnzlkbkpijfmofadykevdwrknzepnzlkbkpijfmofadykevdwrknzepnzlkbkpijfmofadykevdw

After analyzing the log file, Eve realized about the possibility of a longer key usage. Because she did not found any legible plaintext. The imediate longer keyword length pointed by Sybil is "9". So, she tried it...

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --brutus --file-path=alice-bob-crap.txt\
> --plaintexts=the,and,ing,ent,ion,nth,ter,int,oft,tha,ere,tio,her,fth,eth,ati,hat,ate,sth,est\
> --key-len=9 > report.txt

She started found some relevant attempts, look:

(...)
*** Assuming CNA -> INT (keyword = "T******GA")

	K = T******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GA
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = fLPHJVGcocHWADRGpilHRJPTUwykSEIFMQzeaUQKWEOancASCJVGetjDEUZOWrepVXOPMGphrUKEVNFarbAEJEHQhdrAMJUIIdtuFGWMLQjcxTQWODNaayVJBBIVddxFSQEOWxtlBXUPUKjisBWPDUVuodVYPXHCpeeLVUPUFkdxUXPFLNwnhVRAXHCpeeLVUPUFkdxUXPFLNwnhVRAMOQgfxYVAGLGytrVROJNAkuaMEYFCCjiwLHAWOVeowAMIFCCjtnYEOFOWpowALADOTjeaSSYLEFenhVYNSOQiiwLZASBGhinCIPIEOennCINBSUqmnZXQDKKjbnSMAGTJarnPWWMIGlrxTMOFIUlrxTMOFAPaynMSNBNGuefLZAHOVoovLXDJNIpoaLZABLPkowLGWOKPkwqVAEUFGalbDLWUEXarhVYZPDQjtcLPHBNAknnDLWUEXarhVYZPDQjtcLPHBNAknnDLWUEXarhVYZPDQjtcLPHBNAknnDLWUEXarhVYZPDQjtcLPHJTJentFSQBLTaamFOJPWJkwoHVEEGQjocASOBYAkutUSSUHGwrcPWJUGQjerTXWLIPcmhZSJHTQphnNVWWEYdacLZASYQqdxKSJUTGhljUCKOEYdacLZASYQqdxKSJUTGhljUCKOEYdacLZASYQqdxKSJUTGhljUCKOEYdacLZASYQqdxKSJUTGhl
(...)
*** Assuming LPH -> STH (keyword = "*HEA*****")

	K = *HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA*****
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = YelhJVGIOVasaDRGVIEanjPTUCYDlaiFMQFETnmkWEOGNVtocJVGKTCwauZOWXEIotoPMGVHKngeVNFGRUtajEHQNDKtijUIIJTNycwMLQPCQmmwODNGARofbBIVJDQyoqEOWDTEutuPUKPILuspDUVAOWoupXHCVEXeruPUFQDQntpFLNCNAonaXHCVEXeruPUFQDQntpFLNCNAonaMOQMFQrraGLGETKonoJNAQUTfayFCCPIPedaWOVKOPtiiFCCPTGraoFOWVOPthaDOTPETloyLEFKNAounSOQOIPevaSBGNIGvepIEOKNGvenBSUWMGstqDKKPBGliaGTJGRGiswMIGRRQmioFIURRQmioFAPGYGfonBNGAEYevaHOVUOOetdJNIVOTevaBLPQOPecwOKPQWJoweUFGGLUwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhJTJKNMyoqBLTGAFykjPWJQWHareEGQPOVtooBYAQUMnosUHGCRVisjUGQPEKmtwLIPIMAsojHTQVHGgrwWEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNL

*** Assuming LPH -> STH (keyword = "*HEA*****")

	K = *HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA*****
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = YelhJVGIOVasaDRGVIEanjPTUCYDlaiFMQFETnmkWEOGNVtocJVGKTCwauZOWXEIotoPMGVHKngeVNFGRUtajEHQNDKtijUIIJTNycwMLQPCQmmwODNGARofbBIVJDQyoqEOWDTEutuPUKPILuspDUVAOWoupXHCVEXeruPUFQDQntpFLNCNAonaXHCVEXeruPUFQDQntpFLNCNAonaMOQMFQrraGLGETKonoJNAQUTfayFCCPIPedaWOVKOPtiiFCCPTGraoFOWVOPthaDOTPETloyLEFKNAounSOQOIPevaSBGNIGvepIEOKNGvenBSUWMGstqDKKPBGliaGTJGRGiswMIGRRQmioFIURRQmioFAPGYGfonBNGAEYevaHOVUOOetdJNIVOTevaBLPQOPecwOKPQWJoweUFGGLUwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhJTJKNMyoqBLTGAFykjPWJQWHareEGQPOVtooBYAQUMnosUHGCRVisjUGQPEKmtwLIPIMAsojHTQVHGgrwWEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNL

*** Assuming LPH -> STH (keyword = "*HEA*****")

	K = *HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA*****
	C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
	P = YelhJVGIOVasaDRGVIEanjPTUCYDlaiFMQFETnmkWEOGNVtocJVGKTCwauZOWXEIotoPMGVHKngeVNFGRUtajEHQNDKtijUIIJTNycwMLQPCQmmwODNGARofbBIVJDQyoqEOWDTEutuPUKPILuspDUVAOWoupXHCVEXeruPUFQDQntpFLNCNAonaXHCVEXeruPUFQDQntpFLNCNAonaMOQMFQrraGLGETKonoJNAQUTfayFCCPIPedaWOVKOPtiiFCCPTGraoFOWVOPthaDOTPETloyLEFKNAounSOQOIPevaSBGNIGvepIEOKNGvenBSUWMGstqDKKPBGliaGTJGRGiswMIGRRQmioFIURRQmioFAPGYGfonBNGAEYevaHOVUOOetdJNIVOTevaBLPQOPecwOKPQWJoweUFGGLUwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhJTJKNMyoqBLTGAFykjPWJQWHareEGQPOVtooBYAQUMnosUHGCRVisjUGQPEKmtwLIPIMAsojHTQVHGgrwWEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNL

Some letter contacts seem pretty good. She figured out an interesting pattern:

(...)*HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA*****
(...)GCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
(...)GvenBSUWMGstqDKKPBGliaGTJGRGiswMIGRRQmioFIURRQmioFAPGYGfonBNGAEYevaHOVUOOetdJNIVOTevaBLPQOPecwOKPQWJoweUFGGLUwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhJTJKNMyoqBLTGAFykjPWJQWHareEGQPOVtooBYAQUMnosUHGCRVisjUGQPEKmtwLIPIMAsojHTQVHGgrwWEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNL

The sequence GCIN could be explained by a plaintext being even, because the decrypt attempt was GCIN = Gven. By the way not decrypted letters are preserved in upper case on the plaintext.

Now she got a good assumption to test with the Hangman:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=GCIN\
> --plaintext=even --key-len=9 --max-attempts=10

The output was:

*** The keyword was completely re-used 35 times before.
    The keyword's letter at position #1 was used to encrypt it.
    The effective keyword to encrypt the pattern was 'CHEA*****'.

*** Decrypt attempts assuming that 'GCIN' leads to 'EVEN'...

	K	C	P
	__________________
	C	Y	w
	H	L	e
	E	P	l
	A	H	h
	*	J	J
	*	V	V
	*	G	G
	*	I	I
	*	O	O
	C	V	t
	__________________

The contacts seems good excepting by the H being mapped to h. Maybe YLPHJVG could be WELCOME. So, she:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=YLPHJVG\
> --plaintext=WELCOME --key-len=9 --max-attempts=20 --file-path=alice-bob-crap.txt

*** The keyword was completely re-used 0 times before.
    The keyword's letter at position #1 was used to encrypt it.
    The effective keyword to encrypt the pattern was 'CHEFVJC**'.

*** Decrypt attempts assuming that 'YLPHJVG' leads to 'WELCOME'...

	K	C	P
	__________________
	C	Y	w
	H	L	e
	E	P	l
	F	H	c
	V	J	o
	J	V	m
	C	G	e
	*	I	I
	*	O	O
	C	V	t
	H	H	a
	E	W	s
	F	A	v
	V	D	i
	J	R	i
	C	G	e
	*	V	V
	*	I	I
	C	E	c
	H	H	a
	__________________

The sequence tasvi does not remember anything written in English. So, with this clue, she started to consider only YLP -> WEL. If YLPH is not WELC maybe it could be WELL:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=YLPH\
> --plaintext=WELL --key-len=9 --max-attempts=20 --file-path=alice-bob-crap.txt

*** The keyword was completely re-used 0 times before.
    The keyword's letter at position #1 was used to encrypt it.
    The effective keyword to encrypt the pattern was 'CHEW*****'.

*** Decrypt attempts assuming that 'YLPH' leads to 'WELL'...

	K	C	P
	__________________
	C	Y	w
	H	L	e
	E	P	l
	W	H	l
	*	J	J
	*	V	V
	*	G	G
	*	I	I
	*	O	O
	C	V	t
	H	H	a
	E	W	s
	W	A	e
	*	D	D
	*	R	R
	*	G	G
	*	V	V
	*	I	I
	C	E	c
	H	H	a
	__________________


The letter contacts looks good excepting for tase but she tried more decryptions considering this assumption:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=YLPH\
> --plaintext=WELL --key-len=9 --max-attempts=30 --file-path=alice-bob-crap.txt


*** The keyword was completely re-used 0 times before.
    The keyword's letter at position #1 was used to encrypt it.
    The effective keyword to encrypt the pattern was 'CHEW*****'.

*** Decrypt attempts assuming that 'YLPH' leads to 'WELL'...

	K	C	P
	__________________
	C	Y	w
	H	L	e
	E	P	l
	W	H	l
	*	J	J
	*	V	V
	*	G	G
	*	I	I
	*	O	O
	C	V	t
	H	H	a
	E	W	s
	W	A	e
	*	D	D
	*	R	R
	*	G	G
	*	V	V
	*	I	I
	C	E	c
	H	H	a
	E	R	n
	W	J	n
	*	P	P
	*	T	T
	*	U	U
	*	C	C
	*	Y	Y
	C	D	b
	H	S	l
	E	E	a
	__________________

Yes, EHRJPT -> cannPT suggests cannot, so she tried it on hangman:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=EHRJPT\
> --plaintext=cannot --key-len=9 --max-attempts=30 --file-path=alice-bob-crap.txt

*** The keyword was completely re-used 2 times before.
    The keyword's letter at position #1 was used to encrypt it.
    The effective keyword to encrypt the pattern was 'CHEWBA***'.

*** Decrypt attempts assuming that 'EHRJPT' leads to 'CANNOT'...

	K	C	P
	__________________
	C	Y	w
	H	L	e
	E	P	l
	W	H	l
	B	J	i
	A	V	v
	*	G	G
	*	I	I
	*	O	O
	C	V	t
	H	H	a
	E	W	s
	W	A	e
	B	D	c
	A	R	r
	*	G	G
	*	V	V
	*	I	I
	C	E	c
	H	H	a
	E	R	n
	W	J	n
	B	P	o
	A	T	t
	*	U	U
	*	C	C
	*	Y	Y
	C	D	b
	H	S	l
	E	E	a
	__________________

Still good and it has revealed to her JVG -> ivG. It strongly suggests ive [I've]. Continuing she saw another obvious pattern WADRGV -> secreGV suggesting secret. She tried this pattern:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=WADRGV\
> --plaintext=secret --key-len=9 --max-attempts=30 --file-path=alice-bob-crap.txt


*** The keyword was completely re-used 1 times before.
    The keyword's letter at position #3 was used to encrypt it.
    The effective keyword to encrypt the pattern was '**EWBACC*'.

*** Decrypt attempts assuming that 'WADRGV' leads to 'SECRET'...

	K	C	P
	__________________
	*	Y	Y
	*	L	L
	E	P	l
	W	H	l
	B	J	i
	A	V	v
	C	G	e
	C	I	g
	*	O	O
	*	V	V
	*	H	H
	E	W	s
	W	A	e
	B	D	c
	A	R	r
	C	G	e
	C	V	t
	*	I	I
	*	E	E
	*	H	H
	E	R	n
	W	J	n
	B	P	o
	A	T	t
	C	U	s
	C	C	a
	*	Y	Y
	*	D	D
	*	S	S
	E	E	a
	__________________

Now all makes sense. So, she found the another keyword part, combining the two into one:

  CHEWBA***
| **EWBACC*
  ---------
  CHEWBACC*

Of course that the keyword is CHEWBACCA now she can use another application mode called decrypt.

The decrypt mode

The usage of it is pretty straigthforward. Look what Eve done:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --decrypt --key=chewbacca\
> --file-path=alice-bob-crap.txt

wellivegotasecreticannotsayblamemodernmovementtogiveitawayyouvegotsomethingiunderstandholditintightlycall
oncommandleapoffaithdoyoudoubtcutyouinijustcutyououtwhateveryoudodonttellanyonewhateveryoudodonttellanyon
elookforreflectionsinyourfacecaninedevotiontimecanteraseoutonthecornerlockedinyourroomineverbelievethemin
everassumestuckinbeliefthereisaliepromiseispromiseaneyeforaneyewevegotsomethingtorevealnoonecanknowhowitf
eelswhateveryoudodonttellanyonewhateveryoudodonttellanyonewhateveryoudodonttellanyonewhateveryoudodonttel
lithinkyoualreadyknowhowfaridgonottosayyouknowtheartisntgoneimtakingmysongtothegravewhateveryoudodonttell
anyonewhateveryoudodonttellanyonewhateveryoudodonttellanyonewhateveryoudodonttell

She cracked the ciphertext. The plaintext is the lyrics of the song The Lost Art of Keeping a Secret from Queens of The Stone Age.

The encrypt mode

This mode just applies the standard Vigenère cipher. The usage is pretty simple, look:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --encrypt --key=chewbacca\
> --file-path=the-lost-art-of-keeping-a-secret.txt > out.txt

The Riddler

The riddler mode can be used to generate puzzles for being cracked with the own vigcrack. This mode works by picking up a plaintext from a specified directory and encrypting it using a pseudo-random key.

Well, the basic usage of this mode is:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --riddler --save-as=challenge.txt

With the command shown above, the vigcrack will find for a sub-directory called plaintexts. It is also expecting the existence of several .txt files (the plaintexts) inside of this sub-directory.

Now, supposing that you organized it better, separating texts by language into other sub-directories, in this case:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --riddler --save-as=challenge.txt\
> --plaintexts-home=/usr/local/share/corpora/en

You can also specify the minimal and maximium keyword length:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --riddler --save-as=challenge.txt\
> --plaintexts-home=/usr/local/share/corpora/en --min-key-len=3 --max-key-len=5

You can also show the keyword, for cases when you send the challenge for someone:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --riddler --save-as=challenge.txt\
> --plaintexts-home=/usr/local/share/corpora/en --min-key-len=3 --max-key-len=5\
> --show-keyword

Maybe even during your own puzzles you want to save the keyword for consulting if it gets really hard:

eve@EDEN:~/src/tree/sin/curiosity# vigcrack --riddler --save-as=challenge.txt\
> --plaintexts-home=/usr/local/share/corpora/en --min-key-len=3 --max-key-len=5\
> --save-keyword=answer.txt

Well, "That's all folks..." enjoy! ;)

About

A simple cryptanalysis tool for the Vigenere cipher.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages