Hybrid attack rules.

:	Do nothing to the input word
	Example: password

{ 	Rotate left.
	Example: asswordp

} 	Rotate right
	Example: dpasswor

[ 	Delete first character
	Example:assword

] 	Delete last character
	Example: passwor

c 	Capitalize
	Example: Password

C 	Lowercase the first character, uppercase the rest
	Example: pASSWORD

d 	Duplicate word
	Example: password -> passwordpassword

f 	Reflect word
	Example: password -> passworddrowssap

k	Convert word using alternative (first after default) keyboard layout. The rule works in both directions. For example, if there's Russian keyboard layout installed previously in the system, the rule should convert word 'password' to Russian 'çôûûöùêâ', and Russian word 'ïàðîëü' to 'gfhjkm'. This is very helpful when looking for non-English passwords. If only one language is installed in the system, the rule does nothing.
	Example: password -> çôûûöùêâ

K	Swap last two characters
	Example: password -> passwodr

l 	Convert all characters to lowercase

q 	Duplicate all symbols
	Example: password -> ppaasssswwoorrdd

r 	Reverse word
	Example: password -> drowssap

t 	Toggle case of all characters
	Example: PassWord -> pASSwORD

u 	Convert to uppercase
	Example: password -> PASSWORD

U 	Capitalize all words delimited with space (upper-case the first character and every character after a space)
	Example: very good password -> Very Good Password

V 	Vowels elite
	Example: password -> PaSSWoRD

v 	Vowels noelite
	Example: password -> pASSWoRD


============================================================
'N 	Truncate the word to N character(s) length
	Example: '4 -> password -> pass

+N	Increment character at position N by 1 ASCII value
	Example: +1 -> password -> pbssword

-N	Decrement character at position N by 1
	Example: -0 -> password -> oassword

.N	Replace character at position N with character at position N+1
	Example: .4 -> password -> passoord

,N	Replace character at position N with character at position N-1. Where N > 0.
	Example: ,1 -> password -> ppssword

<N 	Reject the word if it is greater than N characters long

>N 	Reject the word if it is less than N characters long

aN 	Check all possible symbol cases for the word. N is a maximal length of the word to apply this rule for. Be careful, this rule generates 2^N variants for each word (where N is the word's length).

DN 	Delete the character at position N
	Example: D2D2 -> password -> paword

pN 	Copy word N times. N = 3 .. 9
	Example: p3 -> password -> passwordpasswordpassword

SLN	Bitwise shift left character at position N
	Example: SL2 -> 012345678 -> 01d345678

SRN	Bitwise shift right character at position N
	Example: SR2 -> password -> pa9sword

TN 	Toggle case of the character at position N
	Example: T1T5 -> password -> pAsswOrd

yN	Duplicate first N characters
	Example: y3 -> password -> paspasword

YN	Duplicate last N characters
	Example: Y3 -> password -> paswordord

zN 	Duplicate the first character of the word N times
	Example: z3 -> password -> ppppassword

ZN 	Duplicate the last character of the word N times
	Example: Z3 -> password -> passwordddd


============================================================
$X 	Add character X to the end of the word
	Example: $0$0$7 -> password -> password007

^X 	Insert character X at the beginning of the word
	Example: ^3^2^1 -> password -> 123password

@X 	Remove all characters X from the word
	Example: @s -> password -> paword

!X 	Reject the word if it contains at least one character X

/X 	Reject the word if it does not contain character X

(X 	Reject the word if the first character is not X

)X 	Reject the word if the last character is not X

eX	Extract a substring starting at position 0 and ending up before first occurrence of X character (do nothing if X is not found)
	Example: e@ -> username@domain.com -> username

EX	Extract a substring starting right after first found X character and till the end of the string (do nothing if X is not found)
	Example: E@e. -> username@domain.com -> domain


============================================================
%MX 	Reject the word if it does not contain at least M instances of the character X

*XY	Swap character at position X with character at position Y
	Example: *15 -> password -> possward

=NX 	Reject the word if the character at position N is not equal to the X

iNX 	Insert the character X in position N
	Example: i4ai5bi6c -> password -> passabcword

oNX 	Overwrite a character in position N with the character X
	Example: o4Ao5Bo6C -> password -> passABCd

sXY 	Replace all characters X with Y
	Example: ss$so0 -> password -> pa$$w0rd

xNM 	Extract a substring of up to M characters length, starting from position N.
	Example: x4Z -> password -> word


============================================================
INX-Y	Insert the character X at position N if previous character at position N is not Y
	Example: rI0/-/r -> google.com -> google.com/
		rI0/-/r -> google.com/ -> google.com/

INX+Y	Insert the character X at position N if previous character at position N is Y
	Example: rI0.+.r -> password. -> password..

ONX-Y	If the character at position N is not Y, overwrite it with X character
	Example: O0-+p -> password -> -assword

ONX+Y	If the character at position N is Y, overwrite it with X character
	Example: O0P+p -> password -> Password

RNM+Y	Remove character at position N if character at position M is Y
	Example: R01+a -> password -> assword

RNM-Y	Remove character at position N if character at position M is not Y
	Example: R40-b -> password -> passord



============================================================
Rules are processed from the left to the right.
Several rules at a line are allowed.
Maximal line length is limited to 256 characters.
Maximal output word length is limited to 256 characters.
White space is ignored as long as it is not used as a parameter.
A line started with # character considered as a comment
All text before the [Rules] line is considered as a comment.
N and M always start at 0. For values greater than 9 use A..Z (A=10, B=11, etc.)
